Existe-t-il une commande intégrée pour effacer Shell lors de l'utilisation de Shell dans emacs?
Sinon, existe-t-il une fonction elisp pour y parvenir?
Je viens de remarquer qu'Emacs maintenant (version 25+) a la commande comint-clear-buffer
, lié à C-c M-o
par défaut, cela fait ce dont nous avons besoin ici, et est probablement préférable aux réponses que j'ai initialement postées ci-dessous.
C-l
recentrera le tampon. Si vous appuyez dessus à plusieurs reprises, le tampon est recyclé, de sorte que ce point apparaisse en haut, au milieu ou en bas du tampon. Lorsqu'il s'arrête en haut, le tampon semble avoir été effacé, bien que tout le texte soit toujours là, hors de vue.
C-x h
marque tout le tampon, après quoi C-w
le tue. Cela tue également la dernière invite, mais après avoir entré la commande suivante, vous récupérez votre invite.
Vous pouvez aussi utiliser erase-buffer
, qui n'est pas lié à une clé par défaut, mais c'est facile à faire (vous pouvez également utiliser M-x erase-buffer
:
(defun my-Shell-hook ()
(local-set-key "\C-cl" 'erase-buffer))
(add-hook 'Shell-mode-hook 'my-Shell-hook)
Cela le lie à C-c l
; vous pouvez choisir ce que vous aimez.
(defun my-clear ()
(interactive)
(erase-buffer)
(comint-send-input))
(defun my-Shell-hook ()
(local-set-key "\C-cl" 'my-clear))
(add-hook 'Shell-mode-hook 'my-Shell-hook)
Après avoir utilisé emacs pendant un certain temps, le marquage et la destruction des régions deviennent naturels, vous trouverez donc peut-être que la première option est suffisante. Sinon, la dernière option est la plus proche de ce que vous voulez.
EDIT: je viens de trouver cela sur le wiki emacs, c'est mieux que mon option 4:
(defun my-clear ()
(interactive)
(let ((comint-buffer-maximum-size 0))
(comint-truncate-buffer)))
La plupart des solutions proposées ici ne fonctionneront pas en mode EShell!
Le tampon du mode EShell est en lecture seule, donc les commandes kill et effacement ne fonctionneront pas.
Pour utiliser votre ordinaire Ctrl-L pour effacer le terminal eshell, ajoutez ceci à votre .init
fichier:
(defun eshell-clear-buffer ()
"Clear terminal"
(interactive)
(let ((inhibit-read-only t))
(erase-buffer)
(eshell-send-input)))
(add-hook 'eshell-mode-hook
'(lambda()
(local-set-key (kbd "C-l") 'eshell-clear-buffer)))
Remarque : pour mieux émuler la norme Ctrl-L, après avoir effacé le tampon, la commande restaurera l'invite initiale.
Avec votre point dans le *Shell*
tampon, exécutez:
C-c M-o
ou
M-x comint-clear-buffer
REMARQUE: cela fonctionne également dans *Python*
Shell, mais ne semble pas fonctionner dans *eshell*
.
AFAIK, vous ne pouvez pas effacer lorsque vous commencez en tant que shell M-x, mais si vous utilisez le terme M-x, vous obtenez un terminal entièrement fonctionnel où clear fonctionne comme prévu. Je peux me tromper à ce sujet, mais personnellement, j'utilise le terme M-x maintenant car il fonctionne pleinement.
Si vous le trouvez, vous ne pouvez pas utiliser erase-buffer et affiche que le texte est en lecture seule. Vous pouvez utiliser la fonction de remplacement suivante.
(defun eshell/clear ()
"Hi, you will clear the eshell buffer."
(interactive)
(let ((inhibit-read-only t))
(erase-buffer)
(message "erase eshell buffer")))
Ou ... vous pouvez tronquer le tampon.
(let ((eshell-buffer-maximum-lines 0)) (eshell-truncate-buffer))