GNU Screen 5.0.0

Hacker News 上看到 GNU Screen 5.0.0 的消息:「GNU Screen 5.0 Released (savannah.gnu.org)」,官方網站是「GNU Screen v.5.0.0 is released」這邊。

從 source code 的下載頁面 https://ftp.gnu.org/gnu/screen/ 這邊可以看到上次 major version 的跳動 (從 3.9.15 跳到 4.0.0) 是 2004 年了,不過這次跳 5.0.0 不知道是什麼原因,從列出來的功能裡面是有看到不少 removed 的項目。

另外下載頁面上面最早只有 1995 年的檔案,這邊好像沒有所有的版本資訊;翻一下維基百科的 GNU Screen 條目,是個 1987 年誕生的軟體,比 CVS 還早 (1990 年出),當初的慣例都是一堆 patch 檔案傳來傳去 (比較小)。

當年剛接觸 FreeBSD 環境時開始學各種工具時學會的工具,記得當年還是各種 locale 百家齊放的時候還得自己 patch & compile 搞 Big5UTF-8 的轉換,

不過後來都跳到 tmux 了,雖然當年的 .screenrc 還留在 dotfiles 包裡面。

自己編了一版 wezterm

主要是「Investigation "Wrapped long line copy under tmux"」這個被修正了,也就是在 weztermtmux 的環境下,複製的時候可以正確的將 wrapped 的文字選成一行。

在「Wrapped long line copy under tmux」這邊也有提到一樣的 issue。

這張是沒有 tmux 時,在 wezterm 上連點三下選取整行的選擇範圍:

這張則是開了 tmux 後的選擇範圍,可以看到沒有判斷到:

eternity74 在上個月花了些時間自己 debug 後找到可能的問題點,把 patch 提上來後也被接受了,所以下一個 release 應該就會有,不過我想趕快先用,就自己花點時間編來用。

因為 wezterm 是 Rust 寫的,所以就是 cargo build --release 然後看有什麼錯誤訊息 (通常是少了一些套件) 補上就可以了。

GitHub 的 Monaspace 修正了 Terminal 上選不到的問題

去年 GitHub 發表 Monaspace 後,我測了一下就遇到這個問題就丟在旁邊:「Can't see monaspace on terminal」,早上看到修正完票關起來了。

Monaspace 比較特別的是直接提供五種不同的樣式可以選擇:

剛剛測了其中幾個,其中 Xenon 搭個明體類的還蠻適合的 (像是 Noto Serif CJK TC)...

把 terminal 軟體從 xfce4-terminal 換成 wezterm

我自從換到 Xubuntu 後一直都是用 xfce4-terminal,直到三月中的時候換成 wezterm 了,記得當時是在 Fediverse 上看到 gugod 說他用這套,測了一下覺得比 xfce4-terminal 好用,可以微調不少 xfce4-terminal 做不到的東西,就換過去了。

前陣子看到「Just How Much Faster Are the GNOME 46 Terminals?」這篇 (via),在 Hacker News 的討論裡面有提到另外一篇文章有測試 terminal latency 的問題:「Terminal Latency」,看了一下 wezterm 的速度不算快,不過 terminal 的速度目前不是我的痛點,所以還好:

(話說 xterm 居然是最快的...)

翻了一下之前在 2021 的時候有提到過 wezterm,不過當時是在講 vttest:「用 vttest 測試 terminal 程式實做的相容性」。

wezterm 是透過一個 Lua 檔案 (~/.wezterm.lua) 在管理設定的,而且預設支援 hot reload,所以不用太擔心會需要一直調整後重啟。

我的設定檔在 config repository 裡面有,不過我是建議自己花些時間調整,如果你是 terminal-heavy user 的話...

Mutt 現有維護者的節能宣告

Hacker News 上看到「Mutt 2.2.0 (mutt.org)」這篇,Mutt 的維護者 (應該是 Kevin McCarthy) 將只會負責 fix 類的事情了:

This obviously isn't a feature, but I wanted to mention that I will be moving away from Mutt maintainership after this release. There isn't a transition plan, so I'll keep maintaining the 2.2.x series with bug fixes and security issues.

It's been my pleasure to keep the releases coming since version 1.5.24. Unfortunately the past year, my time and energy available has been decreasing. So my plan is to focus the time I do have on keeping Mutt stable, secure, and bug free; until someone else has the desire to head up (and support) new-feature releases. Thank you everyone!

有人在討論串裡提到了 NeoMutt,也許之後會找機會看看...

目前還是有一套 email system 是跑在 Postfix + Procmail + Bogofilter + Mutt 上面,短期內應該不會換...

用 vttest 測試 terminal 程式實做的相容性

看到「Wez's Terminal」,又一個用 GPU 加速的 terminal 專案,跑去翻一下 Hacker News 上的討論,意外的翻到有趣的東西:「Wezterm – A GPU-accelerated cross-platform terminal emulator and multiplexer (github.com/wez)」。

目前最前面的討論是這個:

I just saw this and after a quick checkout of the latest release (which is what I can quickly install), I feel a bit disappointed. Here is yet another GPU-accelerated terminal that claims to be a VT500 (judging by its Device Attributes report), sets TERM to xterm-256color, while having holes in basic VT100 support (just ran VTTEST in it and saw glaring issues, need not look further than basic VT100 tests, TAB setting/resetting, cursor save/restore).

比較有趣的是裡面提到了 vttest 這套測試軟體可以測 terminal 的標準相容性,在 vttest 的官網上有提到可以測 VT100VT220VT520

Vttest tests the compatibility (demonstrates the non-compatibility) of so-called “VT100-compatible” terminals. In conformance of the good old hacker traditions, the only documentation of this program is the source code itself. To understand it, you also need a copy of the original VT100 manual from DEC.

Additional tests (past version 1.7) are provided for analysis of vt220 through vt520 terminals, as well as variants of xterm.

另外比較驚訝的是,terminal 下可以作到這樣的效果 (這邊看官方的截圖應該是 VT420?):

回到原來講標準相容性的問題,對於泡在 terminal 下的人來說超級重要,有工具可以測試幫助不少... vttest 這套程式在 Ubuntu 內可以直接裝來用:「Ubuntu – Package Search Results -- vttest」。

Terminal 的 Dark Theme

在「Automatic dark mode for terminal applications」這邊看到讓 terminal 的一些程式支援 Dark Theme 的方式,裡面引用的是「Automatic dark mode for terminal applications」這篇。

可以看到因為 terminal 下沒有標準,所以得 hack 事件發生時要送出的指令,文章裡面給出了 Vim (以及 Tmux)、Alacritty 這幾套程式的 hack。

不過這些 hack 過程算詳細 (而且有說明整個原理),如果有其他 terminal 下的程式有支援 Dark Theme 的話也可以用類似的邏輯套進去。

改變 Xfce Terminal 的 Alt-Number 快速鍵功能

前陣子桌機重裝 Ubuntu,順便把桌面環境換成 Xubuntu 用看看,也把本來再用的 GNOME Terminal 換成 XfceTerminal

我的習慣會把 GNOME Terminal 的 Alt-Number (像是 Alt-1) 快速鍵改掉,因為有不少程式會吃這組快速鍵,像是 tmux 切換視窗內玻璃 (pane) 排列的 preset 以及 IRC client 在不同頻道的切換。

但 Xfce Terminal 沒有 GUI 讓你改這組快速鍵 (其他的快速鍵有,但也雷雷的,後面會提到...),翻了翻看起來只有「Disable alt-n tab shortcut in xfce-terminal?」這邊有提到,算是堪用:

~/.config/xfce4/terminal/accels.scm looked promising but my changes were undone after a restart, so I made it read-only but it turns out commenting out the relevant lines makes no difference anyway.

雖然作者有提到它改了 ~/.config/xfce4/terminal/accels.scm 沒用,我自己發現這邊的確是很 buggy,但暫時還是可以找到 workaround。

解法是直接改沒錯,但不能直接註解掉,而需要改空,也就是本來的:

(gtk_accel_path "<Actions>/terminal-window/goto-tab-1" "<Alt>-1")

不能改成:

; (gtk_accel_path "<Actions>/terminal-window/goto-tab-1" "<Alt>-1")

而是要改空:

(gtk_accel_path "<Actions>/terminal-window/goto-tab-1" "")

另外要注意,透過 GUI 修改快速鍵後,~/.config/xfce4/terminal/accels.scm 裡面的內容也會被重製,也就是 Xfce Terminal 寫入這個檔案時是直接把預設值寫進去,而非把有效值寫進去:

這點算是比較地雷的地方...

Mutt 跳版推出 2.0

看到「Mutt 2.0 released」這篇,Mutt 推出 2.0 版,官方的 release notes 則是在這:「Mutt 2.0 Release Notes」。

這次版本跳到 2.0 主要是因為有 incompatible changes,實質上的變更其實沒有太多:

This release was bumped to 2.0, not because of the magnitude of features (which is actually smaller than past releases), but because of a few changes that are backward incompatible.

我自己還是保留一個信箱用 Mutt 在看信,主要是有一個信箱是完全控制在自己手上,所以自己架設 mail server 並且在上面看信...

上面主要是透過 procmail 拿來收各種信件 (尤其是 mailing list),對於純文字的閱讀還是頗方便...

讓 Python 輸出變豐富的 Rich

Hacker News 上看到的 Python 專案,讓 terminal 輸出變得更好看:「Rich is a Python library for rich text and beautiful formatting in the terminal.」。

看到當下吸引我的地方在於表格:

from rich.console import Console
from rich.table import Column, Table

console = Console()

table = Table(show_header=True, header_style="bold magenta")
table.add_column("Date", style="dim", width=12)
table.add_column("Title")
table.add_column("Production Budget", justify="right")
table.add_column("Box Office", justify="right")
table.add_row(
    "Dev 20, 2019", "Star Wars: The Rise of Skywalker", "$275,000,000", "$375,126,118"
)
table.add_row(
    "May 25, 2018",
    "[red]Solo[/red]: A Star Wars Story",
    "$275,000,000",
    "$393,151,347",
)
table.add_row(
    "Dec 15, 2017",
    "Star Wars Ep. VIII: The Last Jedi",
    "$262,000,000",
    "[bold]$1,332,539,889[/bold]",
)

console.print(table)

輸出長這樣:

另外還有不少功能也不錯,會讓畫面豐富不少。