Esecuzione di Emacs dalla barra delle applicazioni di Windows


8

Quando voglio passare da un programma all'altro in Windows, di solito uso il tasto Windows più un tasto numerico per eseguire un programma dalla mia barra delle applicazioni. La maggior parte dei programmi inizierà a funzionare o, se esiste già un'istanza, la porterà in primo piano e si concentrerà su di essa. Ma Emacs (avviato con runemacs.exe) creerà una nuova voce sulla barra delle applicazioni e l'utilizzo di nuovo del collegamento creerà semplicemente una nuova istanza. Per quanto ne so, non posso nemmeno passare da un frame all'altro usando i comandi Emacs (ho provato Cx 5 o).

C'è un modo per farlo in modo che gli usi successivi dei tasti di scelta rapida di Windows utilizzino solo l'istanza esistente di Emacs e, in caso contrario, posso almeno farlo in modo da poter navigare facilmente tra i diversi frame? Ho provato questo frammento:

(require 'server)
(unless (server-running-p)
  (start-server)) 

dalla risposta a questa domanda , ma non ha fatto differenza.


Puoi specificare a quale snippet ti riferisci?
nispio,

Tale frammento si assicura che venga creato un server di modifica la prima volta che viene eseguito Emacs. Le chiamate successive a Emacs che desiderano connettersi allo stesso server di modifica devono utilizzareemacsclientw.exe
nispio

@nispio Ah, questo spiega perché non funzionava. Esiste un modo per far funzionare tutto sullo stesso server di modifica senza dover eseguire da diversi eseguibili?
resueman,

Questa risposta probabilmente funzionerà: emacs.stackexchange.com/a/158/93 . Quando si fornisce runemacs.execome editor alternativo, è possibile chiamare emacsclientw.exeanche quando non è in esecuzione un server di modifica.
nispio,

1
Vedi il mio commento alla risposta di nispio su come evitare di creare un nuovo frame.
Vamsi,

Risposte:


5

Aggiungilo al tuo file init per assicurarti che venga creato un server di modifica all'avvio di emacs

(require 'server)
(unless (server-running-p)
  (server-start)) 

Ora fai in modo che la scorciatoia di Windows emacsclientw.exesia la seguente:

C:\path\to\emacsclientw.exe -n -e "(raise-frame)" -a "C:\path\to\runemacs.exe"

Questo dovrebbe focalizzare un frame Emacs esistente (se presente), altrimenti chiamare runemacs.exealtrimenti. (Grazie a Vamsi per l'aiuto nell'ottimizzazione dei parametri di comando)


Funziona come voglio se gli passo un file da eseguire, ma se uso semplicemente il comando così com'è, viene visualizzato un errore che dice "nome file o argomento richiesto".
resueman,

@resueman Una -cbandiera risolve questo problema?
nispio,

2
@nispio Uno può usare C:\path\to\emacsclientw.exe -n -e "(raise-frame)" -a "C:\path\to\runemacs.exe"per evitare di creare un nuovo frame e aumentare il frame precedente.
Vamsi,

@Vamsi ma senza il -cprevisto si aspetta anche un file da visitare? (Se non puoi dire che non sono su una macchina Windows in questo momento.)
Nispio

@Vamsi Funziona perfettamente. @nispio sembra funzionare bene senza -cil tempo che ha l' -eespressione.
resueman,

7

Mi sono imbattuto in un'altra risposta al problema su SuperUser oggi. Sembra più hacker, ma il risultato è più coerente con altri programmi su Windows.

  1. Esegui runemacs.exe senza icona preesistente nella barra delle applicazioni.
  2. Fai clic con il tasto destro sull'icona di Emacs in esecuzione nella barra delle applicazioni e fai clic su "Aggiungi questo programma alla barra delle applicazioni".
  3. Chiudi Emacs
  4. Spostare il tasto destro del mouse sull'icona Emacs appuntata sulla barra delle applicazioni, fare clic su Proprietà e modificare la destinazione da emacs.exe a runemacs.exe.

1
FWIW, questo è quello che faccio. Non ho capito che è quello che volevi, dalla tua domanda. Pensavo volessi usare emacsclient, tra le altre cose. A proposito, in Propertiespuoi anche impostare la Start indirectory e aprire Emacs su un determinato file o directory. (Comincio Emacs con Dired nella Start indirectory IOW, mi passa la stessa dir (. "-Quoted) come argomento a runemacs.)
Drew

@Drew Probabilmente non ho spiegato molto bene ciò che volevo. Sono ancora abbastanza nuovo che è difficile mantenere tutto dritto. Grazie per i suggerimenti
resueman,
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.