web-dev-qa-db-fra.com

Commande pour effacer Shell lors de l'utilisation du shell emacs

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?

66
keeda

Mise à jour février 2015

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.

Options à considérer:

  1. 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.

  2. 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.

  3. 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.

  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 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)))
86
Tyler

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.

27
antonio

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*.

15
Paul

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.

8
Jesus Ramos

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")))
4
Aborn Jiang

Ou ... vous pouvez tronquer le tampon.

(let ((eshell-buffer-maximum-lines 0)) (eshell-truncate-buffer))
2
user2762156