Gnu Emacs: завершение табуляции для psql, запущенного в процессе sql.el - PullRequest
2 голосов
/ 28 сентября 2011

Мне нравится запускать клиент Postgres "psql" под psql.el, когда я взаимодействую с файлом .sql в отдельном окне.Иногда я хочу использовать табуляцию в буфере, выполняющем процесс psql, чтобы найти имя подходящего имени таблицы.Однако я не могу понять, как добиться желаемого результата.

Здесь был задан очень связанный вопрос: https://superuser.com/questions/236574/how-can-i-send-a-literal-tab-to-bash-in-emacs-shell-mode

без каких-либо удачных предложений.

Спасибозаранее!

SetJmp

1 Ответ

3 голосов
/ 29 сентября 2011

Обычно программы, предназначенные для интерактивного использования (когда они имеют собственный терминал), отключают интерактивные функции (такие как история для ВВЕРХ / ВНИЗ, завершение для TAB) при использовании в конвейере.

Emacs обычно использует каналы для внешних процессов. Поэтому интерактивные функции отключены.

Даже если вы отправляете TAB, ваша клиентская программа не интерпретирует его для вас так, как вы хотите.

Вы можете прочитать man / help для вашей программы и попробовать принудительный интерактивный режим, предоставив ключ командной строки (например, --login для GNU Bash).

Чтобы отправить TAB eval:

(defun my-comint-send-string (string)
  "Send string to comint buffers. Useful for *compilation* read-only buffer."
  (interactive
   (list (read-input "Type string: " nil 'my-comint-send-hist-list))
   )
  (comint-send-string (get-buffer-process (current-buffer)) string)
  )
(define-key XXX-mode-map [C-return] 'my-comint-send-string)

и используйте такую ​​последовательность клавиш: C-RET C-q TAB RET .

Но это может не сработать, если для stdio вашей программы включена буферизация (для сброса ввода вы также должны отправить \n) ...

В основном та же проблема, что обсуждалась в Автодополнение Bash в режиме оболочки Emacs

ПРИМЕЧАНИЕ M-x термин использует псевдотерминал, поэтому все интерактивные программы работают по желанию. Но в этом режиме вы теряете все возможности редактирования Emacs ...

...