기본 elisp를 사용하여 emacs를 활성화 / (앞으로 가져 오기) 할 수 있습니까? (예 : 다른 프로그램에서 작업 할 때)


16

나는 특정 상황에서 이맥스를 강제로 활성화하고 엽상으로 구매하고 초점을 '훔치기'원한다. 예를 들어 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

4
시도하십시오 raise-frame.
Tom Tromey

제안 해 주셔서 감사합니다. 프레임을 낮추면 작동하지만 프레임을 올리면 어떤 이유로 든 프레임이 다시 들리지 않습니까?
레오 Ufimtsev

@TomTromey가 맞다고 생각합니다. 다음과 같이 테스트 할 수 있습니다. 먼저 유휴 타이머를 만듭니다 () (defvar my-timer (run-with-idle-timer 5 t (lambda () (raise-frame)))). 로 프레임을 일시 중단합니다 M-x (suspend-frame). 5 초 후에 해당 프레임이 다시 나타납니다.
Dan

글쎄, 그것은 당신 (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는 발생하지 않습니다 ... 생각?
Leo Ufimtsev

1
Gui 버전의 emacs를 사용하고 있습니까? (터미널 버전이 아닌) GUI를 사용하고 있었습니까?
Leo Ufimtsev

답변:


16

윈도우 시스템을 사용하는 경우을 사용할 수 있습니다 x-focus-frame.

노트 :

  • x-focus-frame Windows뿐만 아니라 Linux에서도 작동
  • Emacs 23.1 이전 w32-focus-frame에는 Windows 에서 사용 하십시오.

네 확실합니다. (x-focus-frame nil) 이맥스 창을 올립니다. 산뜻한!
Leo Ufimtsev

1

하나 (x-focus-frame nil)또는 (other-frame 0)그것을 할 것입니다. 둘 사이에 행동에 차이가 있는지 확실하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.