Skip to content

Conversation

@wxiwnd
Copy link
Member

@wxiwnd wxiwnd commented Dec 4, 2025

Fix ./foo completion

Bash 在沒有針對某個命令載入任何 completion spec 時,會走 _comp_complete_minimal,它只做 _comp_initialize 後直接 compopt -o bashdefault -o default,不會呼叫 _comp_compgen__call_builtin,hook 的 _comp_compgen__call_builtin 根本沒機會執行。

解決方案

自訂覆写 _comp_complete_minimal()
如果 COMP_WORDS[0] 有 /,就主動執行 _comp_initialize -- "$@",然後呼叫 _filedir。這一步會產生和原本檔案補全一樣的候選清單,因此會觸發(或重用) _comp_compgen__call_builtin,進而讓我們後面注入拼音匹配 _add_completion。
若不是路徑型命令,就回退到原本的 __bak_comp_complete_minimal,保持預設行為。

FIX scp completion

bash-completion 會通過 _comp_compgen__call_builtin 或 _comp_xfunc 兩層流程產生候選項。
原本只在 _comp_compgen__call_builtin 做補全
但 scp、sftp 這類指令會讓 comp_xfunc 執行它們自己的 compgen_local* 產生器,完全繞過那層,於是需要額外的 hook。

解決方案

在 _comp_xfunc 完成原本工作後,檢查被呼叫的產生器名稱。若符合規則,就把該次補全加入拼音補全邏輯。
因此只要某個補全從 _comp_xfunc 回傳本地路徑,就會自動得到拼音結果,無需逐一對命令打補丁。

Copy link
Member

@MingcongBai MingcongBai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM:

mingcongbai@JellyFocals [ Telegram Desktop ] $ scp anan
安安_285afcbafe104598aad4ffd69d14b147.png
安安_376944fb4ba5d11921c16679f2aa5c44.png
安安同同.zip
anan-calm (2).svg
anan-calm\ \(2\).svg 
anan-calm.png 
anan-calm.svg 
anan-camera-pvc.png 
anan-fumo.png 
anan-fumo.svg 
Anan_Solids_(NotPrintableYet).STEP
anan-tongtong-sticker-pack.svg

@MingcongBai
Copy link
Member

Also for the first case:

mingcongbai@JellyFocals [ loong64-it@master ] $ ./loongarch64-it.bash ../下载/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants