나는 특정 상황에서 이맥스를 강제로 활성화하고 엽상으로 구매하고 초점을 '훔치기'원한다. 예를 들어 org-Pomodoro를 마치거나 중요한 약속 알림을받는 동안.
이제는 외부 종속성을 줄이기 위해 '기본'방법을 찾고 있습니다. (리눅스 만 있으면 괜찮습니다. 크로스 플랫폼이 더 좋습니다.)
이맥 내부에서 기술적으로 가능합니까?
해결책 :
GUI를 사용하는 경우 다음과 같이 작동합니다.
(x-focus-frame nil)
[역사적인 이유로 ...] 시도했습니다 :
프레임 가시성 (작동하지 않음)
(make-frame-visible)
그리고 또한:
(make-frame-invisible)
(make-frame-visible)
그러나 Emacs가 이미 활성화 된 경우에만 작동하는 것 같습니다.
프레임 올리기 (작동하지 않음)
프레임을 낮추면 실제로는 이맥을 숨기는 것처럼 보입니다.
(lower-frame)
그러나 타이머에서 프레임을 올리는 것은 아닙니다. 즉, 아무 일도 일어나지 않습니다.
(raise-frame)
높이기 전에 누락 된 'activate-emacs'가있는 것 같습니다.
[외부 솔루션에 대한 참고 사항]
현재 (해결 방법 / 솔루션?)으로 약간의 생략을 사용합니다.
(call-process "activateEmacs")
그리고 각각의 bash 스크립트 : (시스템에 xdotool을 먼저 설치해야 할 수도 있습니다)
#!/bin/sh
sleep 0.5
xdotool search --onlyvisible --class emacs windowactivate
제안 해 주셔서 감사합니다. 프레임을 낮추면 작동하지만 프레임을 올리면 어떤 이유로 든 프레임이 다시 들리지 않습니까?
—
레오 Ufimtsev
@TomTromey가 맞다고 생각합니다. 다음과 같이 테스트 할 수 있습니다. 먼저 유휴 타이머를 만듭니다 ()
—
Dan
(defvar my-timer (run-with-idle-timer 5 t (lambda () (raise-frame))))
. 로 프레임을 일시 중단합니다 M-x (suspend-frame)
. 5 초 후에 해당 프레임이 다시 나타납니다.
글쎄, 그것은 당신
—
Leo Ufimtsev
(suspend-frame)
이 다른 창을 클릭하지 않고 거기에서 기다릴 때 작동합니다 . 그러나 프레임을 일시 중단하고 다른 응용 프로그램에서 작업하면 emacs가 다시 나타나지 않습니다. 적어도 내 시스템에는 없습니다 (Fate 21 with Mate 데스크톱). 간단한 예는 다음 : (run-at-time "5 sec" nil '(lambda () (interactive) (message "trying to raise frame") (raise-frame)))
과 같습니다. 이것을 실행하고 다른 응용 프로그램으로 alt-tab하십시오. 메시지는 버퍼에 나타나지만 emacs는 발생하지 않습니다 ... 생각?
Gui 버전의 emacs를 사용하고 있습니까? (터미널 버전이 아닌) GUI를 사용하고 있었습니까?
—
Leo Ufimtsev
raise-frame
.