Impedir a abertura de buffers indesejados

18

Estou usando o emacs para minha edição diária de javascript, para alternar entre buffers, uso Cx LEFT e Cx RIGHT e estou bem com isso (mesmo que eu ache difícil saber o caminho do arquivo que estou modificando).

Meus problemas:

  1. na inicialização eu sempre tenho *scratch*e *Messages*abriu, eu pensei que colocar (kill-buffer "*scratch*")no meu .emacs resolveria o problema, mas não é, você tem uma sugestão?

  2. quando abro arquivos, sempre preenche o TAB automaticamente, portanto, toda vez que estou criando um novo *Messages*buffer contendo as opções para a conclusão, como evito que isso crie, ou melhor, como faço o emacs matá-lo, depois que fiz minha escolha?

Diga a sua opinião se acha que estou fazendo algo que não é "como deveria ser" comigo navegando como eu disse no topo.

Alberto Zaccagni
fonte
11
Você pode explorar outras maneiras de alternar os buffers, como Trey sugeriu. Se você optar por outro método que não seja seqüencial, poderá saltar imediatamente para o buffer desejado, portanto, não importa se buffers indesejados estão na lista de buffers. Eu mesmo uso iswitchb .
Tom

Respostas:

23

Isso me deixou louco ... até eu consertar.

Agora não há buffers de rascunho , mensagens ou conclusões para ferrar seu fluxo. Desfrutar!

Coloque isso no seu .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)

Bônus:

;; No more typing the whole yes or no. Just y or n will do.
(fset 'yes-or-no-p 'y-or-n-p)
Ole
fonte
11
Muito obrigado por isso, eu gostaria de poder dar-lhe mais rep.
Alberto Zaccagni 02/09
Você é muito bem-vindo! : D
Ole
2
Não faria sentido se (if (get-buffer "*Messages*") (kill-buffer "*Messages*"))alguém recarregasse a configuração? Puramente inspirado por essa outra macro sua.
Simon 'Reinstate Monica' Shine
2
Eu não tinha percebido o quanto esses amortecedores me incomodaram até me livrar deles.
automaton
Ele travou o emacs
alper
6

Bem ... é parcialmente do jeito que o Emacs funciona, mas há coisas que você pode fazer para ajudar a mudar em geral.

Primeiro, o Emacs precisa ter pelo menos um buffer. Portanto, mesmo se você quisesse se livrar *scratch*e *Messages*ficaria com outro buffer que não queria (ou chegaria ao ponto em que o Emacs simplesmente ignorou sua última kill-buffersolicitação porque estava recriando esse buffer ( b / c precisa de um buffer).

Portanto, a melhor maneira de chegar ao ponto em que trocar buffers faz mais sentido é realmente ter buffers para os quais você deseja mudar.

E, quando você fizer isso, poderá ver todas as opções / pacotes disponíveis para a troca de buffers - muitos dos quais estão listados no Wiki do Emacs em SwitchingBuffers . idoé bastante popular, como são iciclese anything.

Trey Jackson
fonte
11
Estou salvando minhas sessões com (desktop-save-mode 1), então quase sempre terei algo aberto na inicialização, vou olhar para esses pacotes, obrigado.
Alberto Zaccagni
1

Se alguém estiver interessado em remover apenas o buffer * scratch * e ficar com o buffer * Messages *, esse código funcionou para mim:

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

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

Uma coisa que você deve ter em mente é que, a qualquer momento, o Emacs permanecer sem buffer para exibir (por exemplo, você matou todos os buffers), ele criará um buffer * scratch * ou * Messages *, para ter certeza de que você ganhou ' excluir todos os buffers durante o fluxo de trabalho ou o * scratch * pode voltar à vida novamente.

Arthur Colombini Gusmão
fonte