Предотвращение открытия нежелательных буферов

18

Я использую emacs для ежедневного редактирования javascript, чтобы переключаться между буферами, я использую Cx LEFT и Cx RIGHT, и я в порядке с этим (даже если мне трудно узнать путь к файлу, который я изменяю).

Мои проблемы:

  1. при старте, который я всегда имел *scratch*и *Messages*открывал, я думал, что установка (kill-buffer "*scratch*")моего .emacs решит проблему, но это не так, у вас есть предложение?

  2. когда я открываю файлы, я всегда выполняю автозаполнение TAB, поэтому каждый раз, когда я создаю новый *Messages*буфер, содержащий параметры для завершения, как мне предотвратить создание этого, или, лучше, как заставить emacs уничтожить его после того, как я сделал мой выбор?

Скажи свое мнение, если думаешь, что я делаю что-то не так, как должно быть, со мной, как я сказал вверху.

Альберто Закканьи
источник
1
Возможно, вы захотите изучить другие способы переключения буферов, как предложил Трей. Если вы выберете другой метод, который не является последовательным, то вы можете сразу перейти к требуемому буферу, поэтому не имеет значения, находятся ли нежелательные буферы в списке буферов. Я использую iswitchb сам.
Том

Ответы:

23

Это сводило меня с ума .. пока я не исправил это.

Теперь нет буфера царапин , сообщений или доработок, которые могли бы испортить ваш поток. Наслаждайтесь!

Поместите это в ваш .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)

Бонус:

;; No more typing the whole yes or no. Just y or n will do.
(fset 'yes-or-no-p 'y-or-n-p)
Ole
источник
1
Большое вам спасибо за это, я хотел бы дать вам больше респ.
Альберто Закканьи,
Добро пожаловать! : D
Оле
2
Разве не имеет смысла делать это (if (get-buffer "*Messages*") (kill-buffer "*Messages*"))в случае перезагрузки конфигурации? Чисто вдохновлен этим другим твоим макросом.
Саймон 'Восстановить Монику' Сияние
2
Я не осознавал, насколько сильно эти буфера беспокоили меня, пока не избавился от них.
автомат
Это разбило Emacs
Alper
6

Ну ... отчасти Emacs работает, но есть вещи, которые вы можете сделать, чтобы помочь переключению в целом.

Во-первых, Emacs должен иметь хотя бы один буфер. Таким образом, даже если вы захотите избавиться от *scratch*и *Messages*, у вас останется еще один буфер, который вам не нужен (или вы получите точку, в которой Emacs просто проигнорирует ваш последний kill-bufferзапрос, потому что он заново создает этот буфер ( б / к нужен один буфер).

Таким образом, лучший способ добраться до точки, где переключение буферов имеет больше смысла, - это на самом деле иметь буферы, на которые вы хотите переключиться.

И когда вы это сделаете, вы сможете просмотреть все доступные вам опции / пакеты для переключения буферов, многие из которых перечислены в вики Emacs в разделе SwitchingBuffers . idoдовольно популярен, как iciclesи anything.

Трей Джексон
источник
1
Я сохраняю свои сессии (desktop-save-mode 1), поэтому почти всегда у меня при запуске будет что-то открытое, я посмотрю эти пакеты, спасибо.
Альберто Закканьи
1

Если кто-то заинтересован в удалении только буфера * scratch * и оставлении с буфером * Messages *, этот код работает для меня:

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

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

Следует помнить одну вещь: если в любой момент Emacs останется без буфера для отображения (например, вы уничтожили все буферы), он создаст буфер * scratch * или * Messages *, поэтому убедитесь, что вы выиграли ' не удаляйте все буферы во время вашего рабочего процесса, или * нуля * может вернуться к жизни снова.

Артур Коломбини Гужман
источник