Impedire l'apertura di buffer indesiderati


18

Sto usando emacs per il mio editing quotidiano di javascript, per passare da un buffer all'altro utilizzo Cx LEFT e Cx RIGHT e sto bene con questo (anche se trovo difficile conoscere il percorso del file che sto modificando).

I miei problemi:

  1. all'avvio ho sempre fatto *scratch*e *Messages*aperto, ho pensato che mettere (kill-buffer "*scratch*")nelle mie .emacs avrebbe risolto il problema, ma non è, avete un suggerimento?

  2. quando apro i file eseguo sempre il completamento automatico della TAB, quindi ogni volta che creo un nuovo *Messages*buffer contenente le opzioni per il completamento, come posso impedire che ciò crei, o meglio, come faccio a far sì che emacs lo uccida, dopo che fatto la mia scelta?

Dì la tua opinione se pensi che sto facendo qualcosa che non è "come dovrebbe essere" mentre navigo come ho detto in alto.


1
Potresti voler esplorare altri modi di cambiare buffer come suggerito Trey. Se si opta per un altro metodo che non è sequenziale, è possibile passare immediatamente al buffer desiderato, quindi non importa se i buffer indesiderati sono nell'elenco dei buffer. Uso iswitchb da solo.
Tom

Risposte:


23

Questo mi ha fatto impazzire .. fino a quando non l'ho risolto.

Ora non ci sono buffer di zero , messaggi o completamenti da rovinare con il flusso. Godere!

Inseriscilo nel tuo .emacs:

;; 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)

1
Grazie mille per questo, vorrei poterti dare più rappresentante.
Alberto Zaccagni,

Sei piu 'che benvenuto! : D
Ole

2
Non avrebbe senso farlo (if (get-buffer "*Messages*") (kill-buffer "*Messages*"))nel caso in cui si ricarichi la configurazione? Puramente ispirato a quell'altra tua macro.
Simon 'Reinstate Monica' Shine,

2
Non mi ero reso conto di quanto mi disturbassero questi buffer fino a quando non me ne sono liberato.
automa,

Si è schiantato le emacs
Alper

6

Bene ... è parzialmente il modo in cui funziona Emacs, ma ci sono cose che puoi fare per aiutarti a cambiare in generale.

Innanzitutto, Emacs deve avere almeno un buffer. Quindi, anche se volessi sbarazzarti di *scratch*e *Messages*, rimarrai con un altro buffer che non volevi (o avresti il ​​punto in cui Emacs ha semplicemente ignorato la tua ultima kill-bufferrichiesta perché stava ricreando quel buffer ( b / c ha bisogno di un buffer).

Quindi, il modo migliore per arrivare al punto in cui il cambio di buffer ha più senso è in realtà avere buffer a cui si desidera passare.

E, una volta terminato, puoi esaminare tutte le opzioni / i pacchetti disponibili per il cambio dei buffer, molti dei quali sono elencati nel Wiki di Emacs sotto SwitchingBuffers . idoè piuttosto popolare, così come lo sono iciclese anything.


1
Sto salvando le mie sessioni con (desktop-save-mode 1), quindi quasi sempre avrò qualcosa di aperto all'avvio, guarderò quei pacchetti, grazie.
Alberto Zaccagni,

1

Se qualcuno è interessato a rimuovere solo il buffer * scratch * e rimanere con il buffer * Messaggi *, questo codice ha funzionato per me:

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

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

Una cosa da tenere a mente è che se in qualsiasi momento Emacs non ha buffer da visualizzare (ad es. Hai eliminato tutti i buffer) creerà un buffer * scratch * o * Messages *, quindi assicurati di aver vinto ' eliminare tutti i buffer durante il flusso di lavoro o * scratch * può tornare di nuovo in vita.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.