Apakah mungkin untuk mengirim output dari filter proses ke *Messages*
buffer dan menekan output pesan agar tidak muncul di area echo, sehingga saya dapat secara bersamaan menggunakan perintah interaktif tanpa minibuffer-prompt
terhapus oleh output filter subpress yang sedang berlangsung?
(defun rsync-process-filter (proc string)
(when (not (or
(string-match "files...\r" string)
(string-match "files to consider\n" string)))
(message "%s" string)))
EDIT (3 Januari 2015): Berikut ini adalah tautan ke pertanyaan serupa, namun, saya belum dapat membuatnya bekerja dengan string proses di mana string yang tepat tidak diketahui - judul utasnya adalah: Emacs - Nonaktifkan Beberapa Pesan Minibuffer :
minibuffer
process
echo-area
daftar hukum
sumber
sumber
*Messages*
buffer - sinkronisasi proyek terkait adalah salah satunya. Masih ada beberapa hal yang belum saya coba ( karena saya pikir mungkin ada solusi bawaan ), seperti membuat*Messages*
buffer dapat ditulisinhibit-read-only
dan digunakan sementarainsert
dipoint-max
- Saya tidak tahu apakah itu akan muncul di area gema juga. Saya akan mengerjakannya lagi malam ini. . .M-x report-emacs-bug
dan meminta ini sebagai fitur?(let ((inhibit-read-only t)) (with-current-buffer (get-buffer-create "*Messages*") (goto-char (point-max)) (insert string)))
dan saya memposting konsep jawaban, yang akan memenuhi syarat untuk diterima setelah periode tunggu wajib pada pertanyaan pengguna sendiri telah berakhir. Saya mengajukan permintaan fitur denganreport-emacs-bug
: debbugs.gnu.org/cgi/bugreport.cgi?bug=19495(messages-buffer)
untuk mendapatkan buffer , jika Anda tetap menggunakan metode ini, dan perhatikan bahwa(point-max)
tidak akan selalu menjadi awal dari baris baru (mis. gunakanC-g
).Jawaban:
Anda dapat menekan tampilan di minibuffer dengan mengatur
minibuffer-message-timeout
ke 0.Misalnya, saya menggunakan sesuatu seperti ini di beberapa tempat di mana saya ingin beralih ke mode minor saat dalam bis minibuffer (seperti ido find-file) tanpa terganggu oleh pesan 'mode diaktifkan':
sumber
(let ((minibuffer-message-timeout 0)) (message "%s" string))
masih menampilkan di echo-area / minibuffer ketika mengetik fungsi interaktif sepertiexecute-extended-command
atauswitch-to-buffer-other-window
- yaitu, prompt dan penyelesaian yang disarankan terhapus oleh pesan output proses.First Rough Draft (3 Januari 2015): Draf awal direvisi berdasarkan komentar bermanfaat dari @phils mengenai penggunaan fungsi
messages-buffer
untuk menemukan atau membuat buffer yang sesuai (dan memasukkannya ke dalammessages-buffer-mode
); dan, menambahkan tanda centang apakahpoint-max
di awal baris (jika tidak, masukkan baris baru sebelum memasukkan string pesan).EDIT (4 Januari 2015): Ada situasi di mana string dimasukkan belum tentu berakhir di baris baru, dan fungsi
message
tidak memiliki cek untuk memastikan itu adalah pada awal baris baru, jadi kita berhati-hati itu dalam fungsi ini. Jadi, pada titik mana pun ketikamessage
menyisipkan baris baru, kata garis akan mulai pada flush-kiri buffer.sumber
Memahami dokumentasi
message
tampaknya memungkinkan untuk mencapai apa yang Anda inginkan dengan menelepon pesan dengannil
argumen segera setelah meneleponmessage
dengan konten yang Anda inginkan. Dari docstring darimessage
Jadi memodifikasi fungsi Anda menjadi sesuatu seperti yang berikut ini harusnya berfungsi
Saya mengujinya dengan melakukan hal berikut
Dan sepertinya berhasil
sumber
*Messages*
buffer dan kemudian memanggil perintah interaktifexecute-extended-command
, menunjukkan yang berikut: prompt interaktif (yaitu,M-x
dan setiap penyelesaian parsial) dan output dari proses - yaitu, dua saklar kembali dan maju dengan kecepatan ringan, tetapi berkedip antara keduanya terlihat. Ini tampaknya menjadi masalah karena proses tertentu yang dipermasalahkan adalah terus-menerus mengeluarkan pesan baru, dan bahwa pesan baru ditampilkan untuk sepersekian detik di area gema.