Saya ingin membuat fungsi yang melakukan "tampilan cepat" dari file yang di bawah titik dired.
Cara yang saya ingin agar ini berfungsi adalah bahwa saya menahan tombol fungsi, yang kemudian membuat file terlihat dalam buffer, tetapi ketika saya melepaskan kunci, buffer menutup dan buffer dired kembali. Saya tidak mau harus menutup buffer sementara C-x k
.
Apakah ada cara untuk membuat fungsi ini di Emacs? Tampaknya mungkin jika saya dapat mengikat fungsi keypress / depress.
key-bindings
dired
keymap
Eric Brown
sumber
sumber
Jawaban:
Ini adalah cara saya yang super hacky untuk mensimulasikan pengikatan kunci acara turun / naik dengan memanfaatkan timer.
Secara keseluruhan saya akan menyarankan pergi dengan jawaban Sigma, tetapi Anda meminta cara untuk menutup pratinjau dengan melepaskan jadi saya wajib mencoba.
Pada dasarnya apa yang dapat Anda lakukan adalah mengikat beberapa fungsi yang akan menjadi fungsi "keydown" Anda ke pengikat tombol dan di dalam tindakan itu, mulailah penghitung waktu idle yang menjalankan fungsi yang merupakan fungsi "keyup" Anda, selama Anda menekan tombol diberikan kunci, fungsi "keydown" akan menyala berulang dan ini akan menghambat timer idle dari berjalan. Tentu saja Anda perlu mengimbangi kenyataan bahwa perintah akan menyala berulang-ulang, kemungkinan dengan memutar kembali kunci ke semacam fungsi noop di fungsi "keydown" Anda, kemudian memutarkan fungsi "keydown" di fungsi "keyup".
Jadi untuk kasus penggunaan Anda, fungsi "keydown" Anda akan membuka buffer pratinjau dengan isi file pada titik dan dalam buffer pratinjau mengikat kombo kunci yang sama ke beberapa perintah seperti noop. Fungsi "keydown" Anda juga akan memulai penghitung waktu idle yang akan menghapus buffer pratinjau Anda dan mengembalikan Anda ke tempat semula.
Singkat cerita di sini adalah kode:
Bind fungsi ini ke kombo kunci (saya menggunakan C-M-v), ketika Anda menekannya di atas nama file itu akan membuka buffer baru menampilkan isi file pada titik, ketika Anda melepaskan Anda akan beralih kembali ke aslinya penyangga.
Juga di sini adalah gif dari itu dalam aksi, semua yang saya lakukan adalah:
Satu hal penting yang perlu diperhatikan adalah detik pengatur waktu idle, dalam kode saya yang saya gunakan
.7
tetapi ini semacam angka ajaib, Anda ingin tetap sangat kecil, tetapi jika Anda melihat pratinjau berkedip dua kali coba naikkan 1/10 per detik setiap kali sampai Anda menemukan tempat yang tepat untuk mesin Anda.* Juga perhatikan bahwa dalam fungsi saya mencoba untuk melakukan beberapa fontifikasi dari pratinjau buffer tetapi saya tidak dapat membuatnya berfungsi, itu akan menjadi langkah selanjutnya untuk membuatnya lebih berguna. **
sumber
Error running timer: (void-variable buffer)
dengan ini, sepertinyabuffer
var tidak tersedia di dalamrun-with-idle-timer
?Seperti yang ditunjukkan dalam komentar, fungsi terikat pada kunci, bukan acara. Tetapi untuk mengambil langkah mundur, saya tidak yakin saya mengerti mengapa penting bagi Anda untuk menyimpan kunci saat Anda (mungkin) membaca konten file. Ini juga tidak sesuai dengan tindakan dasar (dan masuk akal) seperti menggulir untuk mendapatkan lebih banyak. Belum lagi fakta bahwa jika perlu waktu, itu mungkin menjadi tidak nyaman :)
Bagaimana dengan mengulangi kunci saja? Sesuatu seperti yang berikut ini bisa menjadi kerangka dasar dari persamaan fungsional:
Ngomong-ngomong, saya lebih menantang kasus penggunaan Anda daripada menjawab pertanyaan Anda pada saat ini, karena ini tidak ada hubungannya dengan ikatan tombol yang menekan / menekan :)
sumber
dired-view-file
! Saya telah mengedit kode saya untuk meningkatkannya. Ya, saya kira dalam skenario seperti ini, tidak harus pindah ke kunci yang berbeda itu penting.Alih-alih menunjukkan file saat tombol ditekan, yang akan sangat sulit untuk diterapkan, saya sarankan menunjukkan file sampai tombol berikutnya ditekan.
Berikut adalah varian yang menunjukkan file di jendela lain, yang saya pikir merupakan antarmuka pengguna yang lebih nyaman.
Anda tidak akan dapat melakukan sebanyak gulir di buffer. Mungkin lebih masuk akal untuk menerapkan mode "tampilan cepat" di mana perintah gulir diterima, tetapi peristiwa input lainnya menyebabkan mode tampilan cepat keluar dan ditafsirkan menurut mode sebelumnya, seperti Isearch.
Dengan
v
(dired-view-file
), Anda mendapatkan sesuatu yang sedang: buffer diedit dalam mode View , di mana Anda dapat menggulir, mencari, dll. Tetapi menutup buffer adalah keystroke sederhanaq
.sumber
Kemungkinan lain, jika Anda menggunakan mouse, adalah untuk menempatkan pratinjau yang Anda inginkan di tooltip . Kemudian, ketika Anda memindahkan mouse di atas nama file (dengan properti
help-echo
) pratinjau akan muncul.Saya menggunakan teknik ini di Dired + , misalnya, untuk (opsional) menampilkan pratinjau gambar yang terkait dengan file gambar, ketika Anda mengarahkan mouse ke nama file.
Anda dapat melihat efeknya dengan melakukan ini setelah memuat
dired+.el
:Pastikan
tooltip-mode
dihidupkan:(tooltip-mode 1)
.Pastikan opsi
diredp-image-preview-in-tooltip
tersebut tidaknil
bernilai (baik ukuran thumbnail ataufull
untuk gambar ukuran penuh).Tempatkan pointer mouse di atas nama file gambar di Dired.
Anda dapat menggunakan kode fungsi
diredp-mouseover-help
sebagai inspirasi untuk melakukan apa yang Anda inginkan (tampilkan "tampilan cepat" pada mouseover). Lihat panggilan fungsi itu untuk cara menggunakannya. Inilah satu panggilan seperti itu:sumber
image-dired
berfungsi dengan baik, tetapi yang saya lihat ketika saya mengarahkan mouse adalahmouse-1: visit this file/dir in another window
dired+.el
dan mengikuti petunjuk lain yang saya berikan. Ini bukan fitur vanilla Emacs. Saya mencoba menjelaskan bagaimana Anda bisa menggulirkan kode Anda sendiri untuk melakukan apa yang Anda inginkan. Menurut saya,dired+.el
kodenya sangat dekat dengan apa yang Anda inginkan. Tapi ya, tooltip mouseover mengharuskan Anda menggunakan mouse. Jika tidak, maka saran untuk menggunakan tooltip tidak akan banyak membantu. ;-)Dari buffer dired, vakan mengunjungi file dalam mode view-only, dan qakan keluar dari mode tampilan dan membawa Anda kembali ke buffer dired. Ini adalah cara cepat untuk melihat pratinjau file, dan memberikan kemungkinan untuk menggulir dan bahkan mencari buffer.
Saya tidak berpikir bahwa emacs memiliki kemampuan untuk meneruskan pesan penekanan tombol tingkat rendah yang diterimanya dari sistem operasi. Ini mungkin sebagian karena alasan historis. Terminal yang tersedia untuk peretas (baca "programmer") pada waktu itu emacs sedang dikembangkan kembali pada tahun 1970-an-1980-an tidak bekerja dengan peristiwa kunci naik / turun waktu nyata, melainkan input karakter sederhana dan urutan pelarian. Hingga hari ini emacs masih dapat beroperasi secara mengesankan dalam batas-batas terminal sederhana atau sesi SSH hanya menggunakan karakter ASCII sederhana dan lolos dari urutan.
Itu tidak berarti bahwa fungsionalitas tidak tumbuh secara signifikan selama bertahun-tahun untuk memasukkan fitur-fitur seperti menu, manajemen multi-bingkai, dan interaksi mouse. Tidak ada alasan (bahwa saya sadar) bahwa emacs tidak dapat diubah (pada intinya) untuk membuat pesan kunci tingkat rendah tersedia untuk ekstensi, tetapi saya tidak akan menahan nafas.
( Penafian: Posting ini harus dianggap sebagai opini dan spekulasi, bukan fakta yang sulit.)
sumber
Saya memberikan solusi saya dalam pertanyaan SO ini /programming/26409768/how-to-show-buffer-content-in-real-time-in-other-window-when-focus-is-in- penyangga
dan jawaban saya adalah mengubah perilaku tombol navigasi
n
danp
menunjukkan file pada titik di jendela lain. Fokus tetap di buffer dired dan kami membunuh buffer yang dikunjungi saat kami menjelajah.Saya membuat mode minor untuk mengaktifkan / menonaktifkan fitur ini dengan mudah. Perhatikan bahwa kami masih memiliki tombol panah untuk navigasi «normal». Panggil
M-x dired-show-mode
(atauranger-mode
karena ini adalah fitur yang saya temukan di manajer file ranger ).Kode: (setiap ulasan dan laporan bug dihargai!) Https://gitlab.com/emacs-stuff/my-elisp/blob/master/dired-show.el
sumber
Anda harus melakukan polling antrian acara hingga acara yang berbeda, atau tidak ada, terbaca. Beban CPU terlihat, meskipun cukup rendah.
sumber