Como posso enviar uma aba literal para bash no modo shell do emacs?

7

Eu quero ignorar completamente o suporte à conclusão do modo comint, em vez de confiar no processo subordinado para fazer isso por mim. Especificamente, se eu estiver executando:

  • emacs
    • modo shell
      • bash

Então, quero que TAB seja passado para o processo bash e expandido por ele.

Se eu estiver executando:

  • emacs
    • modo shell
      • bash
        • psql

Então eu quero que TAB seja manipulado pelo psql.

Eu tentei isso em um gancho de modo de shell sem sucesso:

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

Quando isso é definido, a tecla TAB insere uma guia literal na linha de comando, o que não é de todo útil para mim.

Eu também tentei isso, mas quando eu acessei TAB nada aconteceu:

(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?

    
por Chris R 22.01.2011 / 21:21

4 respostas

7

Os buffers Emacs shell-mode 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 entrada de caractere por vez. Cada linha é digitada integralmente e enviada somente quando ENTER é pressionado. Para ver a prova, execute o comando tty em um buffer shell-mode e sua saída será not a tty .

    
por 09.06.2012 / 16:55
3

Tente quoted-insert , que é (por padrão) ligado a C-q . O próximo caractere digitado será literalmente inserido no buffer.

Então C-q TAB irá inserir uma tabulação literal.

Eu não sei o que isso faz nos modos comint (em relação à conclusão do bash) e não estou em condições de testá-lo.

    
por 24.01.2011 / 07:34
2

Que tal experimentar o terminal do Emacs (em vez de shell)? .

termo M-x

    
por 23.01.2011 / 03:44
1

Você pode usar o caractere de cotação do bash, que é Ctrl-V. Para inserir um literal TAB no bash em execução no buffer de shell do Emacs, faça

C-q C-v C-q TAB

    
por 02.12.2016 / 16:27

Tags