Verhindern Sie das Öffnen unerwünschter Puffer

18

Ich verwende Emacs für meine tägliche Javascript-Bearbeitung, um zwischen den Puffern zu wechseln. Ich verwende Cx LEFT und Cx RIGHT und bin damit einverstanden (auch wenn ich Schwierigkeiten habe, den Pfad der Datei zu kennen, die ich ändere).

Meine Probleme:

  1. Beim Start, den ich immer hatte *scratch*und *Messages*geöffnet habe, dachte ich, dass das (kill-buffer "*scratch*")Problem durch das Einfügen meiner .emacs behoben werden könnte. Haben Sie einen Vorschlag?

  2. Wenn ich Dateien öffne, wird TAB immer automatisch *Messages*vervollständigt. Wenn ich also einen neuen Puffer mit den Optionen für die Vervollständigung erstelle, wie kann ich verhindern, dass dies geschieht, oder besser, wie kann ich Emacs dazu bringen, ihn zu töten, nachdem ich es getan habe habe meine Wahl getroffen?

Sagen Sie Ihre Meinung, wenn Sie der Meinung sind, dass ich etwas tue, das nicht so ist, wie es sein sollte, während ich navigiere, wie ich oben sagte.

Alberto Zaccagni
quelle
1
Möglicherweise möchten Sie andere Möglichkeiten zum Wechseln von Puffern erkunden, wie von Trey vorgeschlagen. Wenn Sie sich für eine andere Methode entscheiden, die nicht sequentiell ist, können Sie sofort zum gewünschten Puffer springen. Es spielt also keine Rolle, ob sich unerwünschte Puffer in der Pufferliste befinden. Ich selbst benutze iswitchb .
Tom

Antworten:

23

Das hat mich verrückt gemacht ... bis ich es repariert habe.

Jetzt gibt es keine Kratzer , Nachrichten oder Vervollständigungspuffer mehr, die sich in Ihren Datenfluss einfügen. Genießen!

Fügen Sie dies in Ihren .emacs ein:

;; Makes *scratch* empty.
(setq initial-scratch-message "")

;; Removes *scratch* from buffer after the mode has been set.
(defun remove-scratch-buffer ()
  (if (get-buffer "*scratch*")
      (kill-buffer "*scratch*")))
(add-hook 'after-change-major-mode-hook 'remove-scratch-buffer)

;; Removes *messages* from the buffer.
(setq-default message-log-max nil)
(kill-buffer "*Messages*")

;; Removes *Completions* from buffer after you've opened a file.
(add-hook 'minibuffer-exit-hook
      '(lambda ()
         (let ((buffer "*Completions*"))
           (and (get-buffer buffer)
                (kill-buffer buffer)))))

;; Don't show *Buffer list* when opening multiple files at the same time.
(setq inhibit-startup-buffer-menu t)

;; Show only one active window when opening multiple files at the same time.
(add-hook 'window-setup-hook 'delete-other-windows)

Bonus:

;; No more typing the whole yes or no. Just y or n will do.
(fset 'yes-or-no-p 'y-or-n-p)
Ole
quelle
1
Vielen Dank dafür, ich wünschte, ich könnte Ihnen mehr Wiederholung geben.
Alberto Zaccagni
Sehr gern geschehen! : D
Ole
2
Wäre es nicht sinnvoll, (if (get-buffer "*Messages*") (kill-buffer "*Messages*"))wenn man die Konfiguration neu lädt? Rein inspiriert von Ihrem anderen Makro.
Simon 'Reinstate Monica' Shine
2
Ich hatte nicht bemerkt, wie sehr mich diese Puffer störten, bis ich sie loswurde.
Automat
Es hat den Emacs zum
Absturz gebracht
6

Nun ... Emacs funktioniert teilweise so, aber es gibt Dinge, die Sie tun können, um das Umschalten im Allgemeinen zu unterstützen.

Erstens muss Emacs mindestens einen Puffer haben. Also, auch wenn Sie von bekommen wollte los *scratch*und *Messages*würden Sie mit gelassen werden , noch ein weiterer Puffer Sie nicht wollen (oder würden Sie erhalten den Punkt , wo Emacs nur Ihre letzte ignoriert kill-bufferAnforderung weil es diesen Puffer neu zu erstellen ( b / c benötigt einen Puffer).

Der beste Weg, um zu dem Punkt zu gelangen, an dem das Wechseln von Puffern sinnvoller ist, besteht darin, tatsächlich Puffer zu haben, zu denen Sie wechseln möchten .

Und wenn Sie dies getan haben, können Sie alle Optionen / Pakete anzeigen, die Ihnen zum Wechseln von Puffern zur Verfügung stehen - viele davon finden Sie im Emacs Wiki unter SwitchingBuffers . idoist sehr beliebt, genau wie iciclesund anything.

Trey Jackson
quelle
1
Ich speichere meine Sessions mit (desktop-save-mode 1), also habe ich fast immer etwas offen beim Start, ich schaue mir diese Pakete an, danke.
Alberto Zaccagni
1

Wenn jemand daran interessiert ist , nur den * scratch * -Puffer zu entfernen und den * Messages * -Puffer zu behalten, hat dieser Code für mich funktioniert:

(defun acg-initial-buffer-choice ()
  (if (get-buffer "*scratch*")
      (kill-buffer "*scratch*"))
  (get-buffer "*Messages*"))

(setq initial-buffer-choice 'acg-initial-buffer-choice)

Eine Sache, die Sie beachten sollten, ist, dass wenn Emacs zu irgendeinem Zeitpunkt keinen Puffer mehr zum Anzeigen hat (z. B. Sie haben alle Puffer gelöscht), entweder ein * Scratch * - oder ein * Messages * -Puffer erstellt wird. Stellen Sie also sicher, dass Sie gewonnen haben. ' t Löschen Sie nicht alle Puffer während Ihres Workflows, oder * scratch * kann wieder zum Leben erweckt werden.

Arthur Colombini Gusmão
quelle