Evitar que se abran buffers no deseados

18

Estoy usando emacs para mi edición diaria de javascript, para cambiar entre buffers, uso Cx LEFT y Cx RIGHT y estoy de acuerdo con esto (incluso si me resulta difícil saber la ruta del archivo que estoy modificando).

Mis problemas:

  1. En la puesta en marcha que siempre tuve *scratch*y *Messages*abrí, pensé que poner (kill-buffer "*scratch*")mis .emacs resolvería el problema, pero no es así, ¿tienes alguna sugerencia?

  2. cuando abro archivos, siempre hago autocompletar TAB, así que cada vez que creo un nuevo *Messages*búfer que contiene las opciones para completarlo, ¿cómo evito que esto se cree o, mejor, cómo hago que emacs lo mate, después de haber hizo mi elección?

Di tu opinión si crees que estoy haciendo algo que no es "como debería ser" conmigo navegando como dije en la parte superior.

Alberto Zaccagni
fuente
1
Es posible que desee explorar otras formas de cambiar los búferes como sugirió Trey. Si opta por otro método que no sea secuencial, puede saltar al búfer deseado de inmediato, por lo que no importa si hay búferes no deseados en la lista de búferes. Yo mismo uso iswitchb .
Tom

Respuestas:

23

Esto me volvió loco ... hasta que lo arreglé.

Ahora no hay buffers de scratch , mensajes o terminaciones para atornillar con su flujo. ¡Disfrutar!

Coloque esto en sus .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)

Prima:

;; No more typing the whole yes or no. Just y or n will do.
(fset 'yes-or-no-p 'y-or-n-p)
Viejo
fuente
1
Muchas gracias por esto, desearía poder darle más rep.
Alberto Zaccagni
¡Eres bienvenido! : D
Ole
2
¿No tendría sentido hacerlo (if (get-buffer "*Messages*") (kill-buffer "*Messages*"))en caso de que uno vuelva a cargar la configuración? Puramente inspirado por esa otra macro tuya.
Simon 'Reinstate Monica' Shine
2
No me había dado cuenta de cuánto me molestaban estos amortiguadores hasta que me deshice de ellos.
autómata
Se estrelló el emacs
alper
6

Bueno ... es parcialmente la forma en que funciona Emacs, pero hay cosas que puede hacer para ayudar a cambiar en general.

Primero, Emacs tiene que tener al menos un búfer. Por lo tanto, incluso si usted quiere deshacerse de *scratch*y *Messages*, que le dejó con otro búfer que no quería (o se obtendría el punto en que Emacs simplemente ignorado su última kill-bufferpetición, ya que fue la recreación de ese búfer ( b / c necesita un búfer).

Por lo tanto, la mejor manera de llegar al punto en que cambiar de búfer tenga más sentido es tener búferes a los que desee cambiar.

Y, cuando haya hecho eso, puede ver todas las opciones / paquetes disponibles para cambiar buffers, muchos de los cuales se enumeran en el Wiki de Emacs en SwitchingBuffers . idoes bastante popular, como son iciclesy anything.

Trey Jackson
fuente
1
Estoy guardando mis sesiones (desktop-save-mode 1), así que casi siempre tendré algo abierto al inicio, miraré esos paquetes, gracias.
Alberto Zaccagni
1

Si alguien está interesado en eliminar solo el búfer * scratch * y quedarse con el búfer * Messages *, este código funcionó para mí:

(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 que debe tener en cuenta es que, si en algún momento Emacs no tiene memoria intermedia para mostrar (por ejemplo, eliminó todas las memorias intermedias), creará una memoria intermedia * scratch * o * Messages *, así que asegúrese de ganar ' No elimine todos los búferes durante su flujo de trabajo, o * scratch * puede volver a la vida nuevamente.

Arthur Colombini Gusmão
fuente