emacs gdb завершает каталог с помощью табуляции пробелом вместо /

Когда я запускаю 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.

Любая помощь, которую вы могли бы дать мне здесь, была бы принята с благодарностью; это действительно раздражает!


person alexras    schedule 11.09.2012    source источник
comment
это меня тоже очень раздражает - попробую исправить ниже   -  person bph    schedule 15.11.2012


Ответы (1)


gud-mode получает список возможных завершений, вызывая команду complete gdb. В вашем примере возвращенный список будет содержать следующее (при условии, что в вашей файловой системе есть только один каталог, который начинается с «/ mn»):

(run /mnt)

Первая часть каждой записи в возвращаемом списке обрезается, так что оставшийся полный список

(/mnt)

Как видите, в этой записи, возвращаемой командой gdb complete, уже отсутствует завершающая косая черта. Ваша единственная надежда исправить это - либо исправить команду complete gdb, либо исправить gud-mode в Emacs, определив, что завершенное слово является каталогом, а затем добавив косую черту (и подавив автоматическая вставка пробела).

Но, конечно, вы можете просто привязать клавишу 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 по умолчанию.

person Thomas    schedule 11.09.2012
comment
Я предполагаю, что проблема с вмешательством на стороне emacs будет в том, что оно не будет работать с удаленным GDB. - person Sigma; 11.09.2012
comment
Обратите внимание на конечный пробел в исходном вопросе. Это та часть, которая сводит меня с ума, вам нужно удалить пробел и ввести косую черту. Почему добавляется конечный пробел? - person sligocki; 23.09.2014
comment
@sligocki Прошло слишком много времени с тех пор, как я опубликовал этот ответ, но я, кажется, помню, что мое решение также устранило проблему конечной косой черты. Ты пробовал это? Возможно, я неправильно помню. - person Thomas; 24.09.2014