Emacs GDB Tab-завершает каталог с пробелом вместо /
Когда я запускаю GDB в Emacs (с M-x gdb
), и я пытаюсь завершить имена каталогов, они заканчиваются пробелом, а не косой чертой. Так, например:
(gdb) run/mn
завершает до
(gdb) run /mnt
когда он должен завершить до
(gdb) run /mnt/
Если я запускаю gdb вне emacs, завершение табуляции работает как положено.
Я использую gdb 7.4.1-debian и emacs 23.4.1 для тестирования Debian.
Любая помощь, которую вы могли бы оказать мне, была бы очень признательна; это действительно раздражает!
1 ответ
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
,