2012-09-11 37 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