Comment lancer GUI Emacs à partir de la ligne de commande dans OSX?
Comment lancer GUI Emacs à partir de la ligne de commande dans OSX?
J'ai téléchargé et installé Emacs depuis http://emacsformacosx.com/.
J'accepterai une réponse répondant à tous les critères suivants:
- la fenêtre emacs s'ouvre devant la fenêtre de mon terminal.
- taper "emacs" lance une fenêtre GUI Emacs. Trouver des fichiers dans cette fenêtre sera par défaut regarder dans le répertoire d'où J'ai commencé Emacs.
- taper " emacs foo.txt " quand foo.txt exists lance une fenêtre Emacs GUI avec foo.txt chargé.
- taper " Emacs foo.txt " quand foo.txt does not exist lance une fenêtre GUI Emacs avec un tampon de texte vide nommé " foo.txt". Faire ^X^S dans ce tampon sauvera foo.txt dans le répertoire d'où J'ai commencé Emacs.
11 réponses
Appelez le script suivant "emacs" et placez-le dans votre PATH
quelque part:
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@"
Qui couvre #2, # 3, et #4.
Pour #1, mettez ceci quelque part dans votre .fichier emacs:
(x-focus-frame nil)
Le emacsformacosx.com le site a maintenant une page D'instructions , d'où vient l'extrait supérieur. Il y a plus d'informations sur l'exécution de emacsclient
et l'accrochage D'Emacs jusqu'à git mergetool
.
Dans votre shell, alias la commande 'emacs' pour pointer vers L'application OSX emacs
Dans mon shell (exécutant le bash par défaut), j'ai ce qui suit (dans mon .bashrc)
alias emacs='open -a /Applications/Emacs.app $1'
Ensuite, en tapant emacs sur la ligne de commande, l'application emacs démarre.
Cependant, je vous recommande d'ouvrir une copie d'emacs et de la maintenir en service. Si c'est le cas et que vous souhaitez charger un fichier dans une copie existante d'emacs, vous pouvez utiliser emacsclient en plaçant les éléments suivants dans votre .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
Pour charger une copie de .bashrc dans une session Emacs existante!
Cela améliore la réponse de David Caldwell en démarrant Emacs en arrière-plan:
#!/bin/sh
$(/Applications/Emacs.app/Contents/MacOS/Emacs "$@") &
Comme indiqué dans l'autre réponse, cela couvre #2, # 3 et # 4. Pour #1, mettre quelque part dans votre .fichier emacs: (x-focus-frame nil)
.
Notez que ce qui suit NePas Fonctionne pour moi-il ne démarre pas Emacs dans un répertoire spécifié sur la ligne de commande (par exemple emacs .
)
# NOT RECOMMENDED
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@" &
Je suppose que vous non plus:
- Démarrez le démon emacs lors de la connexion
- Ont (serveur de démarrage) dans votre .emacs
- cela ne vous dérange pas d'avoir beaucoup de copies séparées d'emacs en cours d'exécution
Si c'est le cas, alors je pense que cela satisfait les quatre critères d'origine, plus un de plus:
- la fenêtre emacs s'ouvre devant la fenêtre de mon terminal.
Il s'ouvrira toujours au premier plan (avec X-focus-frame).
- taper " emacs" lance une fenêtre Emacs GUI. Trouver des fichiers dans cette fenêtre sera par défaut regarder dans le répertoire d'où J'ai commencé Emacs.
Il ouvrira une fenêtre Emacs existante en mode dired.
- taper " Emacs foo.txt " quand foo.txt exists lance une fenêtre Emacs GUI 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 viendra au premier plan.
- taper " Emacs foo.txt " quand foo.txt n'existe pas lance une fenêtre Emacs GUI avec un tampon de texte vide nommé " foo.txt". Faire ^X^S dans ce tampon sauvera foo.txt dans le répertoire d'où J'ai commencé Emacs.
Correcte.
Un supplément:
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 à partir d'un terminal trouvé à http://www.emacswiki.org/emacs/EmacsForMacOS#toc20
open -a /Applications/Emacs.app <file-name>
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 "$@") &
Mise en garde: afin d'obtenir emacs pour ouvrir le répertoire en cours dans Dired par nom mode, vous besoin d'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) de 2014-11-13
Vient de construire emacs avec homebrew package manager selon ce guide: http://www.emacswiki.org/emacs/EmacsForMacOS avec brew install --cacao emacs Après que l'on devrait lancer le .version de l'application pour obtenir l'interface graphique, qui dans mon cas était /usr / local / Cellar / emacs / 24.3 / Emacs.app / Contents/MacOS / Emacs
Les autres réponses ici n'ont pas tout à fait 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 l'ouvrir dans le répertoire de travail actuel, je devais faire
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$PWD/$@"
À la place.
Compilez Emacs selon les étapes suivantes:
./configure --with-x --prefix=/usr
make
sudo make install
Et votre fait! Il peut aider à télécharger et installer XQuartz, mais c'est juste mon avis.
C'est mon script pour ouvrir emacs/emacsclient 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 trivial.
Cependant, cette solution fonctionne très bien pour moi.
ec() {
emacsclient -n $@ 2> /dev/null
if [[ $? == 1 ]]; then
open -a Emacs.app -- $@
fi
}
Utilisation
ec file [...]
Déballons ce qui se passe:
- transmettez tous les arguments
ec
à emacsclient et n'attendez pas (-n
) emacs avant de continuer.- Si Emacs est déjà en cours d'exécution, nous avons tous terminé et vous êtes édition.
- avalez le message d'erreur posté par emacsclient lorsqu'il n'y a pas d'Emacs en cours d'exécution. (
2> /dev/null
) - gérer manuellement le code de sortie
1
([[ $? == 1 ]]
)- ouvrez Emacs.app et lui transmettre des arguments de fichier (les chemins seront correctement ouverts.)
- Vous avez terminé, et Emacs a ouvert vos fichiers.