Tôi muốn buộc emacs được kích hoạt, được mua để đóng băng và 'đánh cắp' trọng tâm trong một số trường hợp nhất định. Ví dụ: khi tôi hoàn thành org-Pomodoro hoặc trong một lời nhắc hẹn quan trọng.
Bây giờ, tôi đang tìm kiếm một cách 'bản địa' để làm như vậy, chỉ để giảm sự phụ thuộc bên ngoài. (chỉ cần Linux là ổn đối với tôi, đa nền tảng sẽ tốt hơn).
Đây có phải là kỹ thuật có thể từ bên trong emacs?
[sửa] Giải pháp:
Nếu sử dụng GUI, điều này hoạt động tốt:
(x-focus-frame nil)
[Vì lý do lịch sử ...] Tôi đã thử:
Hiển thị khung hình (không hoạt động)
(make-frame-visible)
Và cũng:
(make-frame-invisible)
(make-frame-visible)
Nhưng những thứ này dường như chỉ hoạt động nếu Emacs đã được kích hoạt.
Tăng khung (không hoạt động)
Hạ khung hình dường như thực sự che giấu emacs.
(lower-frame)
Nhưng nâng khung hình từ bộ đếm thời gian thì không. Tức là không có gì xảy ra
(raise-frame)
Có vẻ như còn thiếu một 'activ-emacs' trước khi nâng nó lên.
[LƯU Ý về giải pháp bên ngoài]
Hiện tại, như một (giải pháp / giải pháp?) Tôi sử dụng một chút elisp:
(call-process "activateEmacs")
Và tập lệnh bash tương ứng: (trước tiên bạn có thể cần cài đặt xdotool trên hệ thống của mình)
#!/bin/sh
sleep 0.5
xdotool search --onlyvisible --class emacs windowactivate
(defvar my-timer (run-with-idle-timer 5 t (lambda () (raise-frame))))
. Đình chỉ khung với M-x (suspend-frame)
. Trong 5 giây, khung hình đó sẽ xuất hiện trở lại.
(suspend-frame)
và chờ ở đó mà không cần nhấp vào một cửa sổ khác. Nhưng nếu bạn tạm dừng khung hình và hoạt động trong một ứng dụng khác, thì emacs sẽ không xuất hiện lại. Ít nhất là không có trên hệ thống của tôi (fedora 21 với máy tính để bàn Mate). Một ví dụ đơn giản là: : (run-at-time "5 sec" nil '(lambda () (interactive) (message "trying to raise frame") (raise-frame)))
chạy cái này và alt-tab vào một ứng dụng khác. Thông báo sẽ xuất hiện trong bộ đệm nhưng emacs không được nâng lên ... Suy nghĩ?
raise-frame
.