Commande pour effacer le shell lors de l’utilisation du shell emacs

Existe-t-il une commande intégrée pour effacer le shell lors de l’utilisation de shell dans emacs?

Sinon, existe-t-il une fonction Elisp pour obtenir la même chose?

Mise à jour février 2015

Juste remarqué qu’Emacs maintenant (version 25+) a la commande comint-clear-buffer , liée à Cc Mo par défaut, qui fait ce dont nous avons besoin ici, et est probablement préférable aux réponses que j’ai initialement publiées ci-dessous.

Options à considérer:

  1. Cl recentrera le tampon. Appuyez plusieurs fois sur cette touche pour faire défiler le tampon afin que le 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.

  2. Cx h marque tout le tampon, après quoi Cw tue. Cela tue également la dernière invite, mais après avoir saisi la commande suivante, vous recevez votre invite.

  3. Vous pouvez également utiliser erase-buffer , qui n’est pas lié à une clé par défaut, mais qui se fait facilement (vous pouvez également utiliser Mx erase-buffer :

  (defun my-shell-hook () (local-set-key "\C-cl" 'erase-buffer)) (add-hook 'shell-mode-hook 'my-shell-hook) 

Cela le lie à Cc l ; vous pouvez choisir ce que vous aimez.

  1. Une solution rapide pour recréer votre invite après effacement est possible:
  (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 mise à mort des régions deviennent naturelles, de sorte que la première option est suffisante. Sinon, la dernière option est la plus proche de ce que vous voulez.

EDIT: juste trouvé ceci 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 de mode EShell est en lecture seule, donc les commandes kill et effacer ne fonctionneront pas.

Pour utiliser votre CtrlL ordinaire pour effacer le terminal eshell, ajoutez ceci à votre fichier .init :

 (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 "Cl") 'eshell-clear-buffer))) 

Remarque : Pour mieux émuler le standard CtrlL , après avoir effacé le tampon, la commande restaurera l’invite initiale.

Avec votre point dans le tampon *shell* , lancez:

Cc Mo

ou

Mx comint-clear-buffer

NOTE: Cela fonctionne également dans *Python* shell, mais ne semble pas fonctionner dans *eshell* .

AFAIK vous ne pouvez pas effacer lorsque vous démarrez en tant que Mx shell, mais si vous faites Mx terme, vous obtenez un terminal entièrement fonctionnel où le fonctionnement fonctionne comme prévu. Je peux me tromper à ce sujet, mais personnellement, j’utilise le terme Mx maintenant, car il fonctionne pleinement.

Si vous trouvez, vous ne pouvez pas utiliser erase-buffer et 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))