Keren-sinyal untuk membangkitkan klien ketika fokus diterima

13

Saya menjalankan Emacs pada tag workerdengan server-startdiluncurkan. Saya memiliki manajer file yang dibuka di tempat lain (monitor lain misalnya) dan ketika saya membuka file teks dengan emacsclientitu berhasil dibuka di emacs tetapi tidak beralih ke itu dan tidak naik itu.

Apa yang saya cari adalah sinyal khusus klien di rc.lua. Sesuatu seperti:

client.add_signal("focus", function(c) c:raise() end)

Saya ingin hanya spesifik Emacs. Dan beralihlah ke workertag pada saat bersamaan. Atau dapatkah saya melakukannya dari callback aturan Emacs?

Ada ide? :)

platforma
sumber
1
Tidak ada yang pernah menemukan itu?
platforma

Jawaban:

0

Saya menginginkan hal yang sama, dan ide Anda tentang panggilan balik emacs adalah yang akhirnya berhasil. Saya belum mengujinya pada mengagumkan, tetapi saya menggunakan DWM, dan saya kira mereka cukup mirip untuk bekerja.

Ini adalah fungsi callback di emacs:

(defun raiseme ()
  (x-send-client-message
   nil                ; DISPLAY - nil is selected frame
   0                  ; DEST - 0 is root window of display
   nil                ; FROM - nil is selected frame
   "_NET_ACTIVE_WINDOW"    ; MESSAGE-TYPE - name of an Atom as a string
   32                 ; FORMAT  - size of the values in bits
   '(1 "_NET_WM_USER_TIME" 0) ; VALUES
   )
  )

Ada beberapa cara untuk memanggil callback. Untuk kesederhanaan dan fleksibilitas, saya telah memilih alias shell yang memanggil callback dan kemudian emacsclient biasa:

$ alias edi
alias edi='emacsclient -e "(raiseme)"; emacsclient -n'

Semoga masih bermanfaat;)

Untuk referensi lebih lanjut tentang tipe dan nilai pesan, lihat Petunjuk Manajer Jendela .

Adapun penanganan pesan ini luar biasa, tampaknya acara ini ditangani. Kode sumber ada di sini .

Tiago
sumber