当我在emacs中运行gdb(使用M-x gdb
)并尝试选项卡完成目录名称时,它以空格而不是斜杠完成。所以,例如:
(gdb) run/mn
tab-completed to
(gdb) run /mnt
什么时候应该tab-complete到
(gdb) run /mnt/
如果我在emacs之外运行gdb,则tab-completion按预期工作。
我在debian测试中运行gdb 7.4.1-debian和emacs 23.4.1。
你能给我的任何帮助都将不胜感激;这真是太刺激了!
答案 0 :(得分:3)
gud-mode
通过调用 gdb 的complete
命令来检索可能的completition列表。在您的示例中,返回的列表将包含以下内容(假设文件系统中只有一个以“/ mn”开头的目录):
(run /mnt)
返回列表中每个条目的第一部分都被截断,因此剩下的完整列表是
(/mnt)
正如您所看到的, gdb的 complete
命令返回的此条目已经缺少尾部斜杠。你解决这个问题的唯一希望就是修补 gdb 的complete
命令,或修补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
。