2012-04-01 9 views
5

Supponendo che un server Emacs sia in esecuzione, voglio emacsclient <file> creare un nuovo frame (come -c) quando non esiste un frame esistente o riutilizzare un frame esistente quando ce n'è uno. In altre parole, voglio il -c solo quando non esiste un frame esistente. È possibile?Creare o riutilizzare il frame della GUI Emacs esistente

+0

Non è quello che tralasciando '-c' fa comunque? Significa un semplice 'emacsclient yourfile.ext' dovrebbe aprirsi in un frame esistente se ce n'è uno, e se non ce n'è uno dovrebbe crearne uno. –

risposta

1

ho risolto il mio problema con una serie di script di shell.

my_emacs

#!/bin/sh 
emacs24-x [email protected] 1> /dev/null 2> /dev/null & 

potrebbe essere necessario cambiare emacs24-x a qualcosa che punti al tuo emacs X11.

my_emacsclient

#!/bin/sh 
emacsclient [email protected] 1> /dev/null 2> /dev/null || my_emacs 

Aggiungi entrambi i file PATH tramite ~/bin o simili.

Nei miei .emacs ho anche aggiunto le linee seguiti

(load "server") 
(unless (server-running-p) (server-start)) 

cambiare anche alcune variabili di ambiente e opzionalmente aggiungere un alias

export ALTERNATE_EDITOR="my_emacs" 
export EDITOR="my_emacsclient -n" 
export SUDO_EDITOR="my_emacsclient" 
... 
alias e="$EDITOR" 

Quando si esegue e nella shell dovrebbe creare o resuse una cornice GUI esistente. Inoltre, l'esecuzione di e <filename> apre quel file in una cornice; puoi anche passare altre bandiere come -n a e.

Per lo stesso comportamento in altre applicazioni (ad esempio il gestore di file), è necessario modificare anche il file .desktop di Emacs (per me è /usr/share/applications/emacs24.desktop) per eseguire my_emacs.

Potrebbe anche essere una buona idea cambiare emacs a my_emacsclient tramite il sistema alternativo in distribuzioni basate su Debian (?).

+0

Per chiunque possa utilizzare la mia configurazione. Non è perfetto e ha alcuni difetti ereditari. Ad esempio, se provi a "sudo -e " quando non viene avviato Emacs, fallirà. Inoltre, richiamando semplicemente 'e' quando Emacs è già stato avviato, è stato creato un nuovo frame anziché aumentare il frame esistente. Cercherò di risolvere questo problema e farti sapere. –

0

emacsclient <file> fa quello che vuoi.

Se si desidera aprire una cornice senza specificare un file, è necessario utilizzare -c.

+2

Non esattamente. Se non esiste un frame della GUI, 'emacsclient ' si apre in una cornice del terminale. –

0

Si potrebbe desiderare di provare `emacsclient --display "$ DISPLAY"" per forzare la creazione di una cornice grafica, se non v'è ancora uno.

+1

Mh, ancora non funziona per me. Apre una cornice terminale per me. –

+0

@Renke: Che cosa significa "echo" DISPLAY = $ DISPLAY "ti dico? – Stefan

+0

'DISPLAY =: 0.0' come previsto, credo. –

0

Ecco la mia soluzione:

Nei tuoi emacs file di avvio (ad esempio: ~/.emacs/init.el), assicurarsi di avere le seguenti righe:

;; start emacs server, if it's not already running: 
(require 'server) 
(unless (server-running-p) (server-start)) 

Quindi, aggiungere il seguente al vostro file ~/.bashrc:

function e() 
{ 
    emacsclient "[email protected]" -a "emacs" 
} 

per stabilire una linea di base, assicurarsi di chiudere tutte le istanze di Emacs e uccidere il demone emacs se si ha attualmente in esecuzione.

Quindi, dalla riga di comando, 'sorgente' il ~ /.il file bashrc:

source ~/.bashrc 

Infine, usare 'e' per modificare un file:

e Foobar.java & 
e notes.txt & 
Problemi correlati