Desejo ignorar completamente o suporte à conclusão do modo de comint, confiando no processo subordinado para fazer isso por mim. Especificamente, se eu estiver executando:
- emacs
- modo shell
- bater
- modo shell
Quero TAB
ser passado para o processo bash e expandido por ele.
Se eu estiver correndo:
- emacs
- modo shell
- bater
- psql
- bater
- modo shell
Então eu gostaria TAB
de ser tratado pelo psql.
Eu tentei isso em um gancho no modo de shell sem sucesso:
(define-key shell-mode-map "\t" 'self-insert-command)
Quando isso é definido, a TAB
chave insere uma guia literal na linha de comando, o que não é de todo útil para mim.
Eu também tentei isso, mas quando acertei TAB
nada acontece:
(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)
Como posso fazer isso?
Respostas:
Os
shell-mode
buffers do Emacs não são terminais (ou seja, eles não usam ptys (pseudo-terminais)), portanto, nenhum programa em execução nesse buffer (o shell, os programas executados pelo shell, etc.) pode executar caracteres em um entrada de tempo. Cada linha é digitada por inteiro e enviada somente quando ENTERpressionada. Para ver a prova, execute otty
comando em umshell-mode
buffer, e sua saída seránot a tty
.fonte
Ctrl-B
,Ctrl-F
etc., isso ocorre apenas porque o próprio modo de shell simula os recursos típicos de edição de linha de comando de shell como Bash, Zsh, Korn shell , etc., usando os próprios recursos internos de edição do Emacs.Tente
quoted-insert
qual é (por padrão) vinculado a C-q. O próximo caractere digitado será literalmente inserido no buffer.Então, C-qTABirá inserir uma guia literal.
Não sei o que isso faz nos modos comuns (em relação à conclusão do bash) e não estou em posição de testá-lo.
fonte
Que tal experimentar o terminal do Emacs (em vez de shell).
M-x term
fonte
Você pode usar o caractere de citação do bash, que é Ctrl-V. Para inserir um TAB literal no bash em execução no buffer de shell do Emacs, faça
fonte