Comment lancer l’interface graphique d’Emacs depuis la ligne de commande dans OSX?

Comment puis-je lancer GUI Emacs à partir de la ligne de commande dans OSX?

J’ai téléchargé et installé Emacs depuis http://emacsformacosx.com/ .

J’accepte une réponse répondant à tous les critères suivants:

  1. La fenêtre emacs s’ouvre devant ma fenêtre de terminal.
  2. Taper “emacs” lance une fenêtre graphique d’Emacs. La recherche de fichiers dans cette fenêtre se fera par défaut dans le répertoire à partir duquel j’ai démarré Emacs.
  3. En tapant “emacs foo.txt” quand foo.txt existe, une fenêtre graphique d’Emacs est lancée avec foo.txt chargé.
  4. En tapant “emacs foo.txt” lorsque foo.txt n’existe pas , une fenêtre graphique d’Emacs apparaît avec un tampon de texte vide nommé “foo.txt”. Faire ^ X ^ S dans ce tampon sauvegardera foo.txt dans le répertoire à partir duquel j’ai démarré Emacs.

Appelez le script suivant “emacs” et placez-le quelque part dans votre PATH :

 #!/bin/sh /Applications/Emacs.app/Contents/MacOS/Emacs "$@" 

Cela couvre # 2, # 3 et # 4.

Pour # 1, mettez ceci quelque part dans votre fichier .emacs:

 (x-focus-frame nil) 

Le site emacsformacosx.com a maintenant une page How-To , d’où provient l’extrait supérieur. Il y a plus d’informations sur l’exécution d’ emacsclient et l’accrochage d’Emacs à git mergetool .

Dans votre shell, alias la commande ’emacs’ pour désigner l’application emacs d’OSX

Dans mon shell (exécutant la bash par défaut), j’ai les éléments suivants (dans mon .bashrc)

 alias emacs='open -a /Applications/Emacs.app $1' 

Ensuite, en tapant emacs sur la ligne de commande, vous lancez l’application emacs.

Cependant, je vous recommande d’ouvrir une copie d’emacs et de la laisser fonctionner. Si tel est le cas, et que vous voulez charger un fichier dans une copie existante d’emacs, vous pouvez utiliser le fichier emacsclient en plaçant ce qui suit dans votre fichier .bashrc:

 alias ec='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient' 

Ensuite, ajoutez ce qui suit à votre fichier .emacs pour démarrer le serveur emacs (qui reçoit les appels emacsclient)

 ;;======================================== ;; start the emacsserver that listens to emacsclient (server-start) 

Ensuite, vous pouvez taper

 ec .bashrc 

charger une copie de .bashrc dans une session emacs existante!

Cela améliore la réponse de David Caldwell en lançant Emacs en arrière-plan:

 #!/bin/sh $(/Applications/Emacs.app/Contents/MacOS/Emacs "$@") & 

Comme indiqué dans l’autre réponse, ceci couvre les numéros 2, 3 et 4. Pour # 1, mettez ceci quelque part dans votre fichier .emacs: (x-focus-frame nil) .

Notez que ce qui suit ne fonctionne pas pour moi – il ne démarre pas Emacs dans un répertoire spécifié sur la ligne de commande (par exemple, emacs . ) emacs .

 # NOT RECOMMENDED #!/bin/sh /Applications/Emacs.app/Contents/MacOS/Emacs "$@" & 

Je t’assume soit:

  • Démarrez le démon emacs lors de la connexion
  • Avoir (server-start) dans vos .emacs
  • Cela ne vous dérange pas d’avoir plusieurs copies séparées d’emac en cours d’exécution

Si oui, alors je pense que cela satisfait aux quatre critères originaux, plus un de plus:

  1. La fenêtre emacs s’ouvre devant ma fenêtre de terminal.

il s’ouvrira toujours au premier plan (avec cadre x-focus).

  1. Taper “emacs” lance une fenêtre graphique d’Emacs. La recherche de fichiers dans cette fenêtre se fera par défaut dans le répertoire à partir duquel j’ai démarré Emacs.

Il ouvrira une fenêtre emacs existante en mode dired.

  1. En tapant “emacs foo.txt” quand foo.txt existe, une fenêtre graphique d’Emacs est lancée avec foo.txt chargé.

Si emacs est déjà en cours d’exécution et dispose d’un serveur, il s’ouvrira dans la fenêtre existante et arrivera au premier plan.

  1. En tapant “emacs foo.txt” lorsque foo.txt n’existe pas, une fenêtre graphique d’Emacs apparaît avec un tampon de texte vide nommé “foo.txt”. Faire ^ X ^ S dans ce tampon sauvegardera foo.txt dans le répertoire à partir duquel j’ai démarré Emacs.

Correct.

Un extra:

Le contrôle retourne à la session du terminal immédiatement après avoir tapé la commande.

~ / bin / emacs

 #!/bin/bash EMACSPATH=/Applications/Emacs.app/Contents/MacOS # Check if an emacs server is available # (by checking to see if it will evaluate a lisp statement) if ! (${EMACSPATH}/bin/emacsclient --eval "t" 2> /dev/null > /dev/null ) then # There is no server available so, # Start Emacs.app detached from the terminal # and change Emac's directory to PWD nohup ${EMACSPATH}/Emacs --chdir "${PWD}" "${@}" 2>&1 > /dev/null & else # The emacs server is available so use emacsclient if [ -z "${@}" ] then # There are no arguments, so # tell emacs to open a new window ${EMACSPATH}/bin/emacsclient --eval "(list-directory \"${PWD}\")" else # There are arguments, so # tell emacs to open them ${EMACSPATH}/bin/emacsclient --no-wait "${@}" fi # Bring emacs to the foreground ${EMACSPATH}/bin/emacsclient --eval "(x-focus-frame nil)" fi 

Sur Mountain Lion, j’utilise le port de Yamamoto Mitsuharu https://github.com/railwaycat/emacs-mac-port avec l’alias suivant:

 alias emacs=/Applications/Emacs.app/Contents/MacOS/Emacs 

et il répond à tous vos critères.

Améliorer encore la réponse de David James, les travaux suivants pour moi:

Par instructions pour ouvrir un fichier depuis un terminal trouvé sur http://www.emacswiki.org/emacs/EmacsForMacOS#toc20

 open -a /Applications/Emacs.app  

en combinant cela avec la réponse de David Jame, j’ai créé le script emax bash suivant et l’ ai placé dans mon chemin à ~ / bin

 #!/bin/bash (open -a /Applications/Emacs.app "$@") & 

Attention : pour que emacs ouvre le répertoire actuel en mode Dired par nom , vous devez utiliser

 emax . 

Environnement:

  • OS X Yosemite Version 10.10.2
  • GNU Emacs 24.4.2 (x86_64-apple-darwin14.0.0, NS-apple-appkit-1343.14) du 2014-11-13

Juste construit emacs avec le gestionnaire de paquets homebrew selon ce guide: http://www.emacswiki.org/emacs/EmacsForMacOS avec brew install –cocoa emacs Après cela, il faut lancer la version .app pour obtenir gui, qui dans mon cas était /usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs

Les autres réponses ici n’ont pas vraiment fonctionné pour moi. En particulier, sur ma machine, le script bash

 #!/bin/sh /Applications/Emacs.app/Contents/MacOS/Emacs "$@" 

ouvre toujours emacs dans le répertoire personnel. Pour le faire ouvrir dans le répertoire de travail actuel, je devais le faire

 #!/bin/sh /Applications/Emacs.app/Contents/MacOS/Emacs "$PWD/$@" 

au lieu.

Comstackz Emacs selon les étapes suivantes:

 ./configure --with-x --prefix=/usr make sudo make install 

Et c’est fait! Il peut être utile de télécharger et d’installer XQuartz, mais ce n’est que mon avis.

Ceci est mon script pour les emacs / emacsclient ouverts sur osx.

 #!/bin/bash # Ensure (server-start) is added in your emacs init script. EMACS=/Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs EMACSCLIENT=/Applications/Macports/Emacs.app/\ Contents/MacOS/bin/emacsclient # test if client already exsit. $EMACSCLIENT -e "(frames-on-display-list)" &>/dev/null # use emacsclient to connect existing server. if [ $? -eq 0 ]; then $EMACSCLIENT -n "$@" # open emacs.app instead. else `$EMACS "$@"` & fi 

Solution simple …

Beaucoup de solutions très complexes à ce problème sont affichées ici. C’est juste parce que cela semble non sortingvial.

Cependant, cette solution fonctionne très bien pour moi.

 ec() { emacsclient -n $@ 2> /dev/null if [[ $? == 1 ]]; then open -a Emacs.app -- $@ fi } 

Usage

 ec file [...] 

Déballez ce qui se passe:

  1. passer tous les arguments ec à emacsclient et ne pas ( -n ) attendre emacs avant de continuer.
    1. Si Emacs est déjà lancé, nous avons tous terminé et vous modifiez.
  2. avaler le message d’erreur publié par emacsclient lorsqu’il n’y a pas d’emac en cours d’exécution. ( 2> /dev/null )
  3. Gérer manuellement le code de sortie 1 ( [[ $? == 1 ]] )
    1. ouvrez Emacs.app et transmettez-lui les arguments (les chemins seront correctement ouverts).
    2. Vous avez terminé, et Emacs a ouvert vos fichiers.