Cegah buffer yang tidak diinginkan dari pembukaan

18

Saya menggunakan emacs untuk mengedit javascript harian saya, untuk beralih di antara buffer Saya menggunakan Cx LEFT dan Cx RIGHT dan saya baik-baik saja dengan ini (bahkan jika saya merasa sulit untuk mengetahui jalur file yang saya modifikasi).

Masalah saya:

  1. pada startup yang selalu saya miliki *scratch*dan *Messages*buka, saya pikir memasukkan (kill-buffer "*scratch*").emacs saya akan menyelesaikan masalah, tetapi tidak, apakah Anda punya saran?

  2. ketika saya membuka file saya selalu melakukan TAB autocomplete, jadi setiap kali saya membuat *Messages*buffer baru yang berisi opsi untuk penyelesaian, bagaimana saya mencegah ini dari membuat, atau lebih baik, bagaimana cara membuat emacs membunuhnya, setelah saya sudah membuat pilihan saya?

Katakan pendapat Anda jika Anda pikir saya sedang melakukan sesuatu yang bukan "seharusnya" dengan saya menavigasi seperti yang saya katakan di atas.

Alberto Zaccagni
sumber
1
Anda mungkin ingin menjelajahi cara lain untuk mengganti buffer seperti yang disarankan Trey. Jika Anda memilih metode lain yang tidak berurutan maka Anda dapat langsung melompat ke buffer yang diinginkan, jadi tidak masalah jika buffer yang tidak diinginkan ada dalam daftar buffer. Saya menggunakan iswitchb sendiri.
Tom

Jawaban:

23

Ini membuatku gila .. sampai aku memperbaikinya.

Sekarang tidak ada buffer awal , pesan , atau pelengkap untuk dikacaukan dengan aliran Anda. Nikmati!

Tempatkan ini di .emacs Anda:

;; 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
sumber
1
Terima kasih banyak untuk ini, saya berharap saya bisa memberi Anda lebih banyak perwakilan.
Alberto Zaccagni
Anda dipersilahkan! : D
Ole
2
Bukankah masuk akal untuk dilakukan (if (get-buffer "*Messages*") (kill-buffer "*Messages*"))jika seseorang memuat ulang konfigurasi? Murni terinspirasi oleh makro Anda yang lain.
Simon 'Reinstate Monica' Shine
2
Saya tidak menyadari betapa banyak penyangga ini mengganggu saya sampai saya menyingkirkan mereka.
otomat
Itu menabrak emacs
alper
6

Ya ... ini sebagian cara Emacs bekerja, tetapi ada beberapa hal yang dapat Anda lakukan untuk membantu beralih secara umum.

Pertama, Emacs harus memiliki setidaknya satu buffer. Jadi, bahkan jika Anda ingin menyingkirkan *scratch*dan *Messages*, Anda akan dibiarkan dengan buffer lain yang tidak Anda inginkan (atau Anda akan mendapatkan titik di mana Emacs hanya mengabaikan kill-bufferpermintaan terakhir Anda karena itu menciptakan kembali buffer itu ( b / c perlu satu buffer).

Jadi, cara terbaik untuk sampai ke titik di mana beralih buffer lebih masuk akal adalah dengan benar-benar memiliki buffer yang ingin Anda ubah .

Dan, ketika Anda sudah melakukannya, Anda dapat melihat semua opsi / paket yang tersedia untuk Anda untuk berpindah buffer - banyak di antaranya terdaftar di Emacs Wiki di bawah SwitchingBuffers . idocukup populer, seperti iciclesdan anything.

Trey Jackson
sumber
1
Saya menyimpan sesi saya (desktop-save-mode 1), jadi hampir selalu saya akan memiliki sesuatu yang terbuka saat startup, saya akan melihat paket-paket itu, terima kasih.
Alberto Zaccagni
1

Jika ada yang tertarik untuk menghapus hanya buffer * scratch * dan dibiarkan dengan buffer * Messages *, kode ini berfungsi untuk saya:

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

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

Satu hal yang harus diingat adalah, jika sewaktu-waktu Emacs dibiarkan tanpa buffer untuk ditampilkan (mis. Anda membunuh semua buffer) itu akan membuat buffer * scratch * atau * * Messages, jadi pastikan Anda menang ' t menghapus semua buffer selama alur kerja Anda, atau * scratch * dapat hidup kembali.

Arthur Colombini Gusmão
sumber