Saya ingin memaksa emacs untuk diaktifkan, dibeli untuk membuat dan 'mencuri' fokus dalam keadaan tertentu. Misalnya ketika saya menyelesaikan org-Pomodoro atau selama pengingat janji penting.
Sekarang, saya mencari cara 'asli' untuk melakukannya, hanya untuk mengurangi ketergantungan eksternal. (hanya Linux yang baik untuk saya, cross-platform akan lebih baik).
Apakah ini secara teknis memungkinkan dari dalam emacs?
[sunting] Solusi:
Jika menggunakan GUI, ini berfungsi dengan baik:
(x-focus-frame nil)
[Karena alasan historis ...] Saya telah mencoba:
Visibilitas bingkai (tidak berfungsi)
(make-frame-visible)
Dan juga:
(make-frame-invisible)
(make-frame-visible)
Tetapi ini tampaknya hanya berfungsi jika Emacs sudah diaktifkan.
Peningkatan bingkai (tidak berfungsi)
Menurunkan bingkai tampaknya benar-benar menyembunyikan emacs.
(lower-frame)
Tetapi menaikkan frame dari timer tidak. Yaitu, tidak ada yang terjadi.
(raise-frame)
Sepertinya ada 'aktivasi-emacs' yang hilang sebelum menaikkannya.
[CATATAN tentang solusi eksternal]
Saat ini, sebagai (solusi / solusi?) Saya menggunakan sedikit elisp:
(call-process "activateEmacs")
Dan skrip bash masing-masing: (Anda mungkin perlu menginstal xdotool di sistem Anda terlebih dahulu)
#!/bin/sh
sleep 0.5
xdotool search --onlyvisible --class emacs windowactivate
(defvar my-timer (run-with-idle-timer 5 t (lambda () (raise-frame))))
. Menangguhkan frame dengan M-x (suspend-frame)
. Dalam 5 detik, bingkai itu akan muncul kembali.
(suspend-frame)
dan menunggu di sana tanpa mengklik ke jendela lain. Tetapi jika Anda menangguhkan frame dan mulai bekerja di aplikasi lain, maka emacs tidak muncul kembali. Setidaknya tidak pada sistem saya (fedora 21 dengan desktop Mate). Contoh sederhana adalah ini: : (run-at-time "5 sec" nil '(lambda () (interactive) (message "trying to raise frame") (raise-frame)))
jalankan ini dan alt-tab ke aplikasi lain. Pesan akan muncul di buffer tetapi emacs tidak muncul ... Pikiran?
raise-frame
.