Puoi attivare / (portare in primo piano) gli emacs usando l'elis nativo? (ad es. quando si lavora in un altro programma)


16

Voglio forzare l'attivazione degli emacs, essere acquistati per frondare e "rubare" l'attenzione in determinate circostanze. Ad esempio quando finisco un org-Pomodoro o durante un importante promemoria dell'appuntamento.

Ora sto cercando un modo "nativo" per farlo, solo per ridurre le dipendenze esterne. (solo Linux è ok per me, multipiattaforma sarebbe meglio).

È tecnicamente possibile dall'interno di Emacs?

[modifica] Soluzione:

Se si utilizza la GUI, funziona bene:

(x-focus-frame nil)

[Per motivi storici ...] Ho provato:

Visibilità frame (non funziona)

(make-frame-visible)

E anche:

(make-frame-invisible)
(make-frame-visible)

Ma questi sembrano funzionare solo se Emacs è già attivato.

Frame raising (non funziona)

Abbassare il frame sembra nascondere effettivamente gli emacs.

(lower-frame)

Ma non alzare il frame da un timer. Cioè, non succede nulla.

(raise-frame)

Sembra che ci sia un 'activ-emacs' mancante prima di sollevarlo.

[NOTA sulla soluzione esterna]

Attualmente, come (soluzione alternativa / soluzione?) Uso un po 'di elisp:

(call-process "activateEmacs")

E il rispettivo script bash: (potrebbe essere necessario installare prima xdotool sul sistema)

#!/bin/sh 
sleep 0.5
xdotool search --onlyvisible --class emacs windowactivate

4
Prova raise-frame.
Tom Tromey,

Grazie per il suggerimento. l'abbassamento della cornice funziona, ma alzare la cornice non lo rialleggia per qualche motivo?
Leo Ufimtsev il

Credo che @ TomTromey sia corretto. Puoi provare come segue. In primo luogo, creare un timer di inattività: (defvar my-timer (run-with-idle-timer 5 t (lambda () (raise-frame)))). Sospendi il telaio con M-x (suspend-frame). In 5 secondi, quel riquadro riapparirà.
Dan

Bene, funziona se (suspend-frame)e aspetti lì senza fare clic su un'altra finestra. Ma se sospendi il frame e vai a lavorare in un'altra applicazione, allora emacs non riappare. Almeno non sul mio sistema (fedora 21 con desktop Mate). Un semplice esempio è questo: : (run-at-time "5 sec" nil '(lambda () (interactive) (message "trying to raise frame") (raise-frame)))esegui questo e alt-tab su un'altra applicazione. Il messaggio apparirà nel buffer ma emacs non viene sollevato ... Pensieri?
Leo Ufimtsev,

1
Sto usando la versione Gui di Emacs? (non la versione terminale), stavi usando anche la GUI?
Leo Ufimtsev,

Risposte:


16

Se stai usando un sistema Windows, potresti essere in grado di usarlo x-focus-frame.

Nota:

  • x-focus-frame funziona per Windows e per Linux
  • prima di Emacs 23.1, utilizzare w32-focus-framesu Windows.

si Certamente. (x-focus-frame nil) alza la finestra di emacs. ! Neat
Leo Ufimtsev,

1

O lo farà (x-focus-frame nil)o (other-frame 0)lo farà. Non sono sicuro che ci sia qualche differenza nel comportamento tra i due.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.