Você não pode usar o preenchimento de shell dentro de M-x shell
. O Emacs envia a entrada para o shell uma linha por vez quando você pressiona RET
. Quando você pressiona TAB
, a conclusão integrada do Emacs é acionada. No modo shell, o Emacs tenta rastrear seu diretório atual e completa os nomes dos arquivos, mas isso é tudo.
Dependendo do programa com o qual você está interagindo, o modo shell pode ser legal (porque você tem todos os recursos da edição do Emacs em vez de recursos limitados que o shell ou outro programa oferece) ou não é legal (porque você não obtém Qualquer que seja o recurso que o shell ou outro programa oferece, você pode executar M-x term
para rodar um emulador de terminal mais completo dentro do Emacs, onde você interage diretamente com o programa subjacente. Você ganha alguns, mas também perde alguns: os recursos de rolagem do modo Term são ruins.
Você pode alternar entre o modo Termo e o modo Shell no mesmo buffer . Você deve iniciar o buffer no modo Termo e, em seguida, você pode usar essas funções para alternar entre os dois. (Nota: eu não escrevi essas funções originalmente, foi contribuído para o Wiki do Emacs e eu não rastreei a fonte. Eu o adaptei um pouco; aviso: eu não testei esse código.)
(defun term-switch-to-shell-mode ()
(interactive)
(shell-mode)
(set-process-filter (get-buffer-process (current-buffer)) 'comint-output-filter )
(compilation-shell-minor-mode 1)
(comint-send-input))
(defun shell-switch-to-term-mode ()
(compilation-shell-minor-mode -1)
(font-lock-mode -1)
(set-process-filter (get-buffer-process (current-buffer)) 'term-emulate-terminal)
(term-mode)
(term-char-mode)
(term-send-raw-string (kbd "C-l")))