Saat bekerja pada bingkai Emacs yang dimaksimalkan, memiliki konten tampilan area minibuffer / gema di bagian bawah layar bisa sulit dilihat, tetapi juga menyebabkan kehilangan fokus pada teks yang sedang diedit saat mengetik perintah - yang cukup masalah dalam hal kegunaan.
Apakah ada cara untuk memindahkan minibuffer / area gema di tengah buffer emacs saat ini, di atas teks yang sedang diedit ketika minibuffer aktif, atau, lebih baik, untuk menangkap konten minibuffer dan menampilkannya juga di tengah buffer saat mengetik perintah ini?
minibuffer
Sébastien Le Callonnec
sumber
sumber
Jawaban:
Popup Minibuffer di Center
Inilah cara untuk melakukan persis apa yang Anda minta: tampilkan minibuffer di bagian tengah layar .
Itu relatif mudah untuk dicapai, dan itulah yang akan Anda dapatkan dengan
oneonone.el
paket (seperti yang ditunjukkan oleh @Drew). Masalah dengan pendekatan ini, adalah bahwa minibuffer juga digunakan untuk pesan, jadi menyembunyikannya bukanlah sesuatu yang sangat nyaman. Tidak perlu khawatir! Saya datang dengan solusi lain.Pelaksanaan
Untuk mengimplementasikan ini, kita perlu membuat frame minibuffer di startup emacs.
Kemudian kami tambalan
read-from-minibuffer
untuk menggunakan minibuffer kedua ini, bukan minibuffer frame asli.Ini mungkin tidak bekerja dengan benar-benar semuanya, tetapi bekerja pada segala sesuatu yang saya mencoba sejauh ---
find-file
,ido-switch-buffer
,eval-expression
. Jika Anda melakukan menemukan pengecualian apapun, Anda dapat menambal fungsi-fungsi ini atas dasar kasus per kasus dengan memanggiluse-popup-minibuffer
mereka.Posisi Near Point
Untuk menempatkan frame minibuffer ini di dekat ketinggian titik, cukup tentukan sesuatu seperti fungsi berikut. Itu tidak sempurna (pada kenyataannya, itu mengerikan pada banyak kasus), tetapi ia melakukan pekerjaan yang layak untuk memperkirakan ketinggian titik.
sumber
(setf (symbol-function function) ...)
Anda lebih baik menggunakanadvice-add
(atau yang lebih tuaad-add-advice
).Minibuffer di atas
Menampilkan minibuffer di tengah layar itu rumit. Alternatif yang masuk akal (yang Anda mungkin atau mungkin tidak menemukan lebih mudah dibaca) adalah memindahkannya ke atas.
Anda dapat mengkonfigurasi lokasi (atau keberadaan) minibuffer
minibuffer
frame dengan parameter frame dalaminitial-frame-alist
variabel.Bingkai terpisah
Mengatur parameter untuk
nil
akan mengonfigurasi frame untuk tidak memiliki minibuffer, dan Emacs akan secara otomatis membuat frame minibuffer terpisah untuk Anda. Anda dapat memposisikan dua frame ini menggunakan window manager OS Anda, atau Anda dapat melakukannya dari Emacs.Cuplikan berikut menjelaskan cara menempatkan frame minibuffer di bagian atas, dengan frame reguler tepat di bawahnya, tetapi Anda harus mengubah angka untuk memperhitungkan ukuran monitor Anda.
Cara tercepat untuk menyesuaikan ini, adalah mengubah ukuran frame di window manager Anda, dan kemudian mengevaluasi
(frame-parameters)
untuk melihat nilai parameter yang Anda miliki.Frame yang sama
Kemungkinan lain adalah mengatur
minibuffer
parameter ke jendela. Sayangnya, saya tidak dapat menjalankannya untuk jendela dalam bingkai yang sama.sumber
Perpustakaan
oneonone.el
memberi Anda ini di luar kotak.Cukup sesuaikan opsi
1on1-minibuffer-frame-top/bottom
ke posisi yang Anda inginkan untuk frame minibuffer mandiri. Nilainya adalah jumlah piksel dari atas (jika tidak negatif) atau bagian bawah (jika negatif) dari tampilan Anda. Misalnya, setel nilai ke tinggi tampilan Anda dibagi 2, untuk menempatkannya secara vertikal.Jika Anda ingin memposisikannya secara dinamis, katakan di tengah vertikal dari frame saat ini, maka Anda dapat melakukannya dengan (a) meninggalkan
1on1-minibuffer-frame-top/bottom
=nil
dan (b) menasihati fungsi1on1-set-minibuffer-frame-top/bottom
untuk mengikat variabel itu secara dinamis ke posisi yang sesuai. Sebagai contoh:(Tentukan fungsi
my-dynamic-position
untuk menghitung posisi yang Anda inginkan, berdasarkan kriteria apa pun yang Anda inginkan (ukuran & posisi jendela / bingkai saat ini, fase bulan, ...).sumber