7

Я хочу полностью обойти поддержку завершения режима comint, вместо этого полагаясь на подчиненный процесс, чтобы сделать это для меня. В частности, если я бегу:

  • Emacs
    • Оболочка режима
      • удар

Затем я хочу, чтобы TAB передавался процессу bash и расширялся им.

Если я бегу:

  • Emacs
    • Оболочка режима
      • удар
        • PSQL

Тогда я бы хотел, чтобы TAB обрабатывался psql.

Я пробовал это в shell-mode-hook, но безрезультатно:

(define-key shell-mode-map "\t" 'self-insert-command)

Когда это установлено, клавиша TAB вставляет буквенную вкладку в командной строке, что совершенно не полезно для меня.

Я также попробовал это, но когда я нажимаю TAB ничего не происходит:

(defun cr/comint-send-tab ()
  "Send a tab character to the current buffer's process"
  (interactive)
  (comint-send-input t t)
  (process-send-string (current-buffer) "\t"))

(define-key shell-mode-map "\t" 'cr/comint-send-tab)

Как я могу это сделать?

4 ответа4

7

Буферы в shell-mode Emacs не являются терминалами (т. Е. Они не используют ptys (псевдо-терминалы)), поэтому никакие программы, работающие в таком буфере (оболочка, программы, запускаемые оболочкой и т.д.), Не могут выполнять символьные операции время ввода. Каждая строка набирается полностью и отправляется только при нажатии клавиши ENTER . Чтобы увидеть подтверждение, запустите команду tty в буфере shell-mode , и ее вывод будет not a tty .

3

Попробуйте quoted-insert который (по умолчанию) связан с Cq. Следующий введенный вами символ будет буквально вставлен в буфер.

Таким образом, Cq TAB вставит буквенную вкладку.

Я не знаю, что это делает в режимах ввода (в отношении завершения bash), и я не в состоянии проверить это.

2

Как насчет попробовать терминал Emacs (вместо оболочки).

Mx термин

1

Вы можете использовать символ цитаты bash, который является Ctrl-V. Чтобы вставить буквенный TAB в bash, запущенный в буфере оболочки Emacs, выполните

C-q C-v C-q TAB

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .