Saya ingin menampilkan 3 daftar kata pada baris terpisah secara horizontal di sepanjang bagian bawah (walaupun bagian atas juga berfungsi) dari setiap bingkai emacs yang saya buka. Saya telah memikirkan 6 cara untuk melakukan ini, dan mereka semua memiliki masalah:
Pikiran pertama saya adalah menambahkan baris ke baris mode saya, tetapi AFAICT Anda tidak dapat menggunakan karakter baris baru di baris mode, itu hanya akan dikonversi ke "^ J".
Pikiran kedua saya adalah memiliki garis di bagian atas layar dan menggunakan baris header, tetapi juga tidak mendukung karakter baris baru.
Saya dapat menampilkan overlay pada 3 baris terakhir jendela, tetapi membuat kuat ini tampak sulit - scrolling perlu dipicu ketika titik mencapai overlay daripada akhir sebenarnya dari jendela, dan saya harus terus memposisikan ulang hamparan karena hamparan berada dalam ruang teks bukan ruang jendela.
Saya bisa mencoba membuat jendela khusus di bagian bawah bingkai. Saya telah mencoba mengkodekan ini tetapi tidak terlalu kuat juga, sepertinya tidak berfungsi dengan benar ketika sebuah frame sudah berisi split windows dan saya harus menghidupkan kembali Cx, 1 ke versi custom delete-other-windows yang mengabaikan jendela khusus saya dan saya yakin ada kasus sudut lainnya. Juga ketika jendela bantuan muncul sekarang terbuka muncul secara vertikal karena ia berpikir sudah ada pemisahan horizontal (yang secara teknis ada tetapi itu hanya untuk menampilkan jendela satu baris).
Saya dapat memiliki bingkai khusus untuk ini, tetapi kemudian konfigurasi saya tidak akan berfungsi dalam mode terminal, dan saya harus menulis skrip manajer jendela saya untuk menjaganya agar tetap di bagian bawah layar, membuatnya tidak dapat dipilih, tidak mempengaruhi tata letak, dll. dll
Saya bisa memasukkan teks untuk 3 baris langsung ke minibuffer. Saya mendapatkan ini sebagian berfungsi, saya bisa menumbuhkan minibuffer untuk mengakomodasi 3 baris, dan saya bisa menampilkannya. Namun, setiap kali ada pesan yang bergema, baris-baris tersebut akan hilang sampai saya mengeluarkan perintah lain untuk menampilkannya kembali. Idealnya 3 baris dan area gema tidak akan tumpang tindih sehingga saya bisa melihat keduanya. Ini akan lebih mengganggu jika saya dapat dengan andal menyaring pesan mana yang masuk ke area gema - Saya menemukan solusi pada EmacsWiki tetapi tampaknya tidak berfungsi untuk pesan yang berasal dari sumber C emacs (khusus saya ingin mendapatkan singkirkan pesan penyimpanan file karena saya sering menyimpannya secara otomatis pada waktu).
Untuk konteks, tujuan saya adalah untuk selalu menampilkan kata-kata yang paling sering digunakan dalam buffer saat ini, kata-kata titik terdekat di buffer saat ini, dan kata-kata yang paling baru digunakan dalam buffer saat ini. Saya bermaksud untuk dapat memasukkannya ke buffer melalui perintah suara. Jadi saya bisa mengatakan "2 terdekat" dan minta ia mengambil item kedua dari daftar kata titik terdekat dan menyisipkannya. Saya hanya peduli dengan daftar kata yang terlihat untuk buffer apa pun yang sedang saya edit. Saya tidak ingin menggunakan jendela pop-up yang digunakan oleh berbagai mode penyelesaian kode karena saya perlu daftar selalu terlihat.
Jawaban:
Dengan banyak eksperimen hacky saya bisa mendapatkan # 6 (menggunakan minibuffer text) ke kondisi kerja yang 'cukup baik'. Berikut screenshotnya:
Ada beberapa bagian penting untuk membuat ini bekerja:
Berikut ini tautan ke implementasi saya dengan sabuk contoh yang menampilkan cincin bunuh. Akhirnya ini akan menjadi bagian dari proyek yang tepat: https://gist.github.com/jgarvin/ce37d08654978fd7e4c9
Ini adalah pertama kalinya saya menulis jumlah yang signifikan dari elisp sehingga kualitasnya mungkin di bawah standar, tetapi berfungsi.
sumber
Sayangnya, mode-line atau header-line tidak boleh banyak baris. Saya telah menanyakan hal ini sebelumnya dan ada (setidaknya tidak ada) opsi tersembunyi untuk membuat pekerjaan ini. Jadi 1 dan 2 keluar. Saya juga merasa seperti 3 dan 6 adalah hack yang tidak akan membuat Anda bahagia dalam jangka panjang. 3 dan 4 sepertinya pendekatan yang bagus, tetapi untuk membuatnya bekerja dengan andal akan menjadi investasi yang cukup.
Jadi saya akan merekomendasikan bahwa Anda pertama kali membicarakan ini di emacs-devel . Dalam pengalaman saya, beberapa hal dapat diimplementasikan pada akhirnya jika Anda dengan susah payah menjelaskan apa yang Anda inginkan dan mengapa itu adalah hal yang baik. Mungkin butuh waktu, setidaknya sampai rilis berikutnya, tetapi jika Anda baik-baik saja menunggu sedikit atau menggunakan versi pengembangan, maka Anda mungkin bisa mendapatkan apa yang Anda inginkan, dengan usaha yang jauh lebih sedikit.
sumber