Bạn có thể kích hoạt / (đưa ra phía trước) emacs bằng cách sử dụng elisp bản địa không? (ví dụ khi làm việc trong một chương trình khác)


16

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

4
Hãy thử raise-frame.
Tom Tromey

Cảm ơn bạn đã đề nghị. Giảm khung hoạt động, nhưng nâng khung không tăng lại vì lý do nào?
Leo Ufimtsev

Tôi tin rằng @TomTromey là chính xác. Bạn có thể kiểm tra như sau. Đầu tiên, tạo một bộ đếm thời gian nhàn rỗi : (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.
Dân

Vâng, nó hoạt động nếu bạn (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ĩ?
Leo Ufimtsev

1
Tôi đang sử dụng phiên bản Gui của emacs? (không phải phiên bản đầu cuối), bạn cũng đang sử dụng gui phải không?
Leo Ufimtsev

Câu trả lời:


16

Nếu bạn đang sử dụng Hệ thống cửa sổ, bạn có thể sử dụng x-focus-frame.

Ghi chú:

  • x-focus-frame hoạt động cho Windows cũng như cho Linux
  • trước Emacs 23.1, sử dụng w32-focus-frametrên Windows.

đúng vậy (x-Focus-frame nil) làm tăng cửa sổ emacs. Khéo léo!
Leo Ufimtsev

1

Hoặc là (x-focus-frame nil)hoặc (other-frame 0)sẽ làm điều đó. Tôi không chắc có sự khác biệt nào trong cách cư xử giữa hai người không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.