Manfaatkan area gema kosong untuk menampilkan informasi

10

Area gema sebagian besar kosong, yang membuat saya berpikir bahwa saya dapat menggunakannya untuk menampilkan beberapa informasi. Misalnya, org-clockmenampilkan tugas saat ini, waktu yang tersisa dan total waktu yang berlalu pada modeline. Informasi ini tidak benar-benar dapat dibaca di sana (modeline bisa agak pendek), diulang pada setiap modeline (karena berlaku untuk sesi seluruh emacs), dan tidak yang berguna bahwa aku bersedia mengorbankan beberapa ruang modeline berharga untuk itu . Di sisi lain, itu bisa muncul di area gema ketika tidak ada yang lain untuk ditampilkan di sini.

Apakah ada cara kanonik untuk mencapai ini? Saya telah memikirkan meretas fungsi sisipkan minibuffer-inactive-mode-hook(tetapi tidak berfungsi dengan baik, misalnya pesan menghilang segera setelah area gema digunakan lagi), atau mengirim spam pesan yang tidak dicatat (tetapi ini akan berantakan dengan penggunaan lain dari area gema dan minibuffer).

Versi orang miskin dari ini akan menggunakan timer idle, tetapi area gema dapat kosong tanpa emacs menjadi idle (misalnya saat memasukkan beberapa teks).

T. Verron
sumber
1
Area gema yang ditampilkan adalah konten `* Echo Area 0 *` atau `* Echo Area 1 *` dan ini adalah buffer "normal". Seharusnya memungkinkan untuk menambal Emacs agar dapat menyediakan kemungkinan menjalankan hook setiap kali buffer ini "memerah" (atau ditampilkan dan kosong), sehingga fungsi ini dapat diimplementasikan secara efisien dan andal.
Stefan
Ini tidak persis apa yang ada dalam pikiran Anda tetapi Bastien Guerry melakukan beberapa hal menarik untuk menghemat layar terutama dengan menampilkan garis mode dalam judul bingkai: bzg.fr/emacs-strip-tease.html
Dieter.Wilhelm

Jawaban:

4

Sebuah komentar pada pertanyaan ini menyebutkan bahwa paket bernama symon memanfaatkan fitur tersebut.

Ini dicapai dengan mengirim spam pesan yang tidak dicatat ketika minibuffer tidak aktif, dan dengan menghentikan tampilan ulang setiap kali perintah dikeluarkan. Pelat untuk itu agak pendek, dan setelah beberapa menit penggunaan, saya tidak bisa melihat masalah dengan itu: pesan dan penggunaan minibuffer masih diprioritaskan daripada pesan.

Komponen kuncinya adalah:

  • fungsi tampilan, jalankan pada timer idle (panggilan pesan dengan message-log-maxset ke nil, sehingga string yang ditampilkan tidak masuk *Messages*buffer)
  • fungsi tampilan ulang, jalankan pada timer
  • fungsi untuk menghentikan tampilan, jalankan pre-command-hook

Satu-satunya masalah adalah bahwa tampilan dihentikan setiap kali perintah sedang dijalankan, yang termasuk saat mengetik.

Bagi yang berminat, saya telah mengekstrak kode yang relevan ke dalam paket boilerplate yang tersedia di github .

T. Verron
sumber
1

Jawabannya, IMO, adalah tidak . Area gema untuk pesan sesaat . Dan banyak hal secara eksplisit menghapus apa pun yang mungkin telah digaungkan di sana. Jadi menyadari apa yang Anda minta dengan cara apa pun yang masuk akal itu bermasalah, IMO.

Singkatnya, gunakan alternatif. Inilah beberapa:

  1. Gunakan beberapa penyangga lain (mis. Bingkai kecil atau jendela yang Anda tetap buka untuk tujuan ini). Mudah dilakukan, Anda dapat memindahkannya, mengeditnya, menghapusnya, atau melakukan apa pun yang Anda suka dengannya.

  2. Gunakan sebagian atau seluruh baris mode (yang sudah Anda pertimbangkan, tampaknya).

  3. Gunakan baris tajuk.

  4. Gunakan judul bingkai.

Jika itu saya, saya mungkin akan memilih # 1. (Tapi saya tidak benar-benar ingin / memerlukan tampilan info status penuh waktu. Saya lebih cenderung mendefinisikan perintah yang menunjukkan kepada saya info (bahkan riwayat / log) sesuai permintaan.)


Diperbarui setelah komentar Anda:

Anda sudah mengatakan, dalam pertanyaan Anda, " pesannya menghilang segera setelah area gema digunakan lagi ". Jadi itu terdengar seperti menggunakan ruang sesaat seperti area gema tidak akan sesuai dengan kebutuhan Anda. Balasan komentar Anda tampaknya bertentangan dengan ini.

Jika Anda benar-benar ingin menggunakan area gema, maka gunakan minibuffer-inactive-mode-hook, seperti yang Anda sebutkan, atau gunakan timer untuk memanggil messageatau untuk memasukkan pesan waktu di area gema dengan cara lain. Namun, Anda sudah mencatat masalah dengan itu. Masalah-masalah tersebut (menimpa, menghapus) mengikuti dari sifat singkat yang dimaksudkan ( dimaksudkan ) dari area gema .

Singkatnya, Anda ingin menggunakan area yang ditujukan untuk pesan singkat, tetapi Anda tidak ingin pesan Anda menghilang segera setelah area itu digunakan lagi.

(BTW - wrt penyebutan Anda bahwa info mode-line diulang di setiap baris mode: Itu tidak perlu terjadi. Anda dapat membuat garis mode menjadi spesifik untuk buffer tertentu dll. IOW, Anda dapat memilih satu baris mode untuk selalu (atau secara berkala) tunjukkan jam Anda atau apa pun.)

Drew
sumber
Terima kasih atas saran Anda! Namun, pertama-tama, saya tidak begitu mengerti, mengapa itu bermasalah? Saya ingin hal-hal yang akan pergi ke area echo untuk mengesampingkan penggunaan lain dari area echo, jadi menghapus itu OK. Dan informasi tambahan hanya akan ditampilkan ketika area gema kosong, sehingga tidak ada yang dihapus. Bukankah itu terdengar seperti spesifikasi yang masuk akal? Tentang # 1, masalahnya adalah saya tidak ingin menyia-nyiakan ruang layar. Area gema selalu ada, bahkan ketika itu kosong. Saya mencantumkan beberapa masalah dengan # 2, dan # 3 dan # 4 berbagi banyak masalah ini.
T. Verron
Tentang mengapa saya ingin tampilan info penuh waktu, ambil org-clockcontoh dari pertanyaan: Saya ingin timer berdetak untuk mengingatkan saya tentang apa yang harus saya lakukan, dan bahwa saya seharusnya melakukan itu sekarang , seperti sesering mungkin.
T. Verron
"pesannya menghilang segera setelah area echo digunakan lagi" Ok itu tidak jelas. Yang saya maksudkan adalah bahwa jika saya menggunakan minibuffer-inactive-mode-hookdan keluar dari minibuffer, pesannya akan ditampilkan. Kemudian jika beberapa perintah lain mencetak sesuatu ke area gema, pesan baru ini ditambahkan, dan pesan singkat tidak kembali (karena minibuffer tidak terlibat saat ini).
T. Verron
Tentang modeline, masalah utama adalah ruang kecil yang tersedia di sana (saya sering punya banyak jendela, terbelah secara horizontal, jadi modelines sangat pendek).
T. Verron
Lagi - " Singkatnya, Anda ingin menggunakan area yang ditujukan untuk pesan singkat, tetapi Anda tidak ingin pesan Anda menghilang segera setelah area itu digunakan lagi. " Gunakan timer dengan messageatau post-command-hook, jika Anda mau. Tetapi masalah penting menghilang / ditimpa kadang-kadang akan memundurkan kepalanya, karena Anda mencoba menggunakan area tampilan sementara untuk sesuatu yang Anda tidak ingin bersifat sementara.
Drew