emacs gdb tab-用空格而不是/来完成目录

时间:2012-09-11 00:19:23

标签: emacs gdb gud

当我在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。

你能给我的任何帮助都将不胜感激;这真是太刺激了!

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