2012-09-11 64 views
4

當我在emacs中運行gdb(使用M-x gdb)並嘗試製表完成目錄名時,它以空格而不是斜槓結束。因此,舉例來說:emacs gdb使用空格而不是/完成目錄空間而不是/

(gdb) run/mn

選項卡,完成對

(gdb) run /mnt 

當它應該標籤完成對

(gdb) run /mnt/

如果我的emacs之外運行GDB ,Tab-Completion按預期工作。

我在debian測試中運行gdb 7.4.1-debian和emacs 23.4.1。

任何幫助你可以給我在這裏將不勝感激;這真的很刺激!

+0

這真的很煩我 - 以下將嘗試下面的修復 – bph

回答

3

gud-mode通過調用gdbcomplete命令檢索可能的完成列表。在你的榜樣,返回的列表將包含以下(假設在你的文件系統中只有一個目錄下,以「/ MN」開頭):

(run /mnt) 

返回列表中的每個條目的第一部分被切斷關,使剩餘的完整列表是

(/mnt) 

正如你所看到的,通過gdb的complete命令返回該項已經缺少了結尾的斜線。你唯一希望解決的辦法是修補gdbcomplete命令,或修補Emacs的gud-mode,通過某種方式檢測完成的單詞是一個目錄,然後附加一個斜槓(並抑制自動插入空間字符)。

當然不過,你可以簡單地綁定TAB鍵到不同的完成功能,可能一個倒在默認gud-gdb-complete-command,但也許做了別樣的完成要求時。

對於這一點,儘量把你的.emacs文件如下:

(defun my-gud-gdb-setup() 
    (define-key (current-local-map) "\t" 'my-gud-gdb-complete-command)) 

(defun my-gud-gdb-complete-command (&optional COMMAND PREDICATE FLAGS) 
    (interactive) 
    (unless (comint-dynamic-complete-filename) 
    (gud-gdb-complete-command COMMAND PREDICATE FLAGS))) 

(add-hook 'gdb-mode-hook 'my-gud-gdb-setup) 

此代碼綁定一個新功能,它首先試圖擴大現有的單詞作爲文件TAB鍵,只有如果失敗則調用默認的gud-gdb-complete-command

+0

我想emacs方面干預的問題是,它不會與遠程gdb一起工作。 – Sigma

+0

請注意原始問題中的尾部空格。這是讓我瘋狂的部分,你必須刪除空格並輸入斜線。爲什麼要添加尾部空格? – sligocki

+0

@sligocki我發佈這個答案已經太久了,但我似乎記得我的解決方案也修正了斜線問題。你試過了嗎?我可能會誤解。 – Thomas