Liberar toda a saída no buffer do shell (e * Mensagens * também)


8

Existe alguma maneira fácil de liberar toda a saída no shellbuffer? Como recentemente (acredito que o Emacs 24.4 já tem isso), os *shell*buffers não são editáveis, eles se comportam de maneira semelhante ao comportamento típico de um terminal, ou seja, permitindo apenas que você adicione texto no final ou libere a última saída, mas você não pode adicione texto em qualquer lugar ou remova parte dele arbitrariamente. Parece que estou perdendo algo importante sobre essa melhoria (?). Na verdade, torna mais irritante. Procurei nos documentos os buffers *shell*e *Messages*, mas não consegui encontrar uma menção à pergunta.

Além da pergunta original: qual é o sentido dessa mudança? Para mim, isso não parece uma melhoria, portanto, a menos que haja um problema, eu gostaria de configurá-lo para leitura e gravação como padrão.

Estou falando do Emacs 24.4 , 25.0.50.1, é claro.


2
Você parece chateado com alguma "melhoria", mas não mencionou o que é. Pela sua tag, deduzo que você está se referindo a Messagesser somente leitura agora, mas não vejo como isso se relaciona aos buffers de shell.
Malabarba

11
O shellbuffer @Malabarba também era completamente editável. Ou seja, você pode excluir ou adicionar texto a qualquer momento que desejar, enquanto agora você só pode anexar texto no final e também não pode removê-lo em nenhum outro lugar. *Messages*se comporta da mesma maneira.
Wvxvw

Respostas:


5

(erase-buffer) não funcionará em buffers de comint e shell se forem somente leitura.

Aqui está o desfecho que eu uso com frequência para limpar os buffers de shellish:

(defun clear-comint-buffer ()
  (interactive)
  (let ((old-max comint-buffer-maximum-size))
    (setq comint-buffer-maximum-size 0)
    (comint-truncate-buffer)
    (setq comint-buffer-maximum-size old-max)
    (goto-char (point-max))))

Talvez você possa associá-lo a s-kseus modos relevantes para imitar o comportamento de limpeza do Terminal.app do OSX.

Atualização 11/2016

Em algum lugar do desenvolvimento do Emacs 25 (e também na minha versão mais recente, "26.0.50.1"), (comint-clear-buffer)foi adicionado comint-mode, o que é uma versão mais concisa do meu desunião personalizado. Aqui está a fonte de referência:

(defun comint-clear-buffer ()
  "Clear the comint buffer."
  (interactive)
  (let ((comint-buffer-maximum-size 0))
    (comint-truncate-buffer)))

Esta solução integrada também funciona se você tiver (setq comint-prompt-read-only t).


Bah, então isso é por design ... bem, então isso responde à pergunta. Parece que vou ter que procurar alternativas para M-x shellentão: S
wvxvw 29/11

O @wvxvw M-x erase-bufferfunciona perfeitamente em um buffer do modo Shell no tronco do Emacs, e não vejo razão para que não deva funcionar no 24.4 também.

@wvxvw Estou confuso. Meu buffer de shell não é somente leitura e o apagamento de buffer funciona bem nele. Talvez tenha sido alterado no Emacs-25, tentarei verificar mais tarde.
Malabarba

@ Malabarba eu tentei, e funciona perfeitamente.

2
@ Malabarba / @ lunaryorn - Encontrei a razão pela qual (erase-buffer)não funciona para mim pessoalmente. Eu tenho (setq comint-prompt-read-only t)na minha configuração, que acho útil para não atrapalhar o prompt e, portanto, (erase-buffer)late para mim.
waymondo

13

Você pode limpar o *Messages*buffer da mesma maneira que sempre, com o kill-buffercomando Na próxima vez que uma mensagem for sinalizada, o buffer será recriado novamente.

O motivo pelo qual esse buffer é agora somente leitura, é que ele recebeu seu próprio modo principal , que herda de special-mode, que é somente leitura. As vantagens por trás disso são diversas. special-modefoi desenvolvido para leitura, por isso possui várias combinações de teclas muito convenientes para buffers que não devem ser editados.


Não sei o que *shell*tem a ver com nada. Mas se você quiser apagá-lo, M-x erase-buffer deve fazê-lo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.