Comment lancer l'interface graphique Emacs à partir de la ligne de commande sous OSX?
J'ai téléchargé et installé Emacs à partir de http://emacsformacosx.com/ .
J'accepte une réponse répondant à tous les critères suivants:
Appelez le script suivant "emacs" et mettez-le dans votre PATH
quelque part:
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@"
Cela couvre les numéros 2, 3 et 4.
Pour le n ° 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 de code supérieur. Il y a plus d'informations ici sur l'exécution de emacsclient
et le raccordement d'Emacs jusqu'à git mergetool
.
Dans votre shell, alias la commande 'emacs' pour pointer sur l'application OSX emacs
Dans mon shell (exécutant le bash par défaut), j'ai les éléments suivants (dans mon .bashrc)
alias emacs='open -a /Applications/Emacs.app $1'
Ensuite, taper emacs sur la ligne de commande lance l’application emacs.
Cependant, je vous recommanderais d’ouvrir une copie d’Emacs et de la conserver. Si tel est le cas et que vous souhaitez charger un fichier dans une copie existante d’emacs, vous pouvez utiliser emacsclient en plaçant le texte suivant dans votre fichier .bashrc:
alias ec='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient'
Ajoutez ensuite les éléments suivants à 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!
Ceci 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 les points 2, 3 et 4. Pour # 1, mettez ceci quelque part dans votre fichier .emacs: (x-focus-frame nil)
.
Notez que not ne fonctionne pas pour moi - cela 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:
Si tel est le cas, je pense que cela répond aux quatre critères initiaux, 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 GUI 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.
Cela ouvrira une fenêtre emacs existante en mode dired.
- Taper "emacs foo.txt" quand foo.txt existe lance une fenêtre GUI Emacs avec foo.txt chargé.
Si emacs est déjà en cours d’exécution et qu’il dispose d’un serveur, il s’ouvre dans la fenêtre existante et passe au premier plan.
- Taper "emacs foo.txt" lorsque foo.txt n'existe pas lance une fenêtre GUI Emacs avec un tampon de texte vide nommé "foo.txt". Faire ^ X ^ S dans ce tampon enregistrera foo.txt dans le répertoire à partir duquel j'ai démarré Emacs.
Correct.
Un extra:
Le contrôle revient à la session de 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
Pour améliorer encore la réponse de David James, voici ce qui fonctionne pour moi:
Selon les instructions pour ouvrir un fichier depuis un terminal situé à 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 d'accès à ~/bin
#!/bin/bash
(open -a /Applications/Emacs.app "$@") &
Caveat: pour que emacs ouvre le répertoire actuel en mode Désactivé par son nom, vous devez utiliser
emax .
Environnement:
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.
Vient de construire emacs avec le gestionnaire de paquets homebrew selon ce guide: http://www.emacswiki.org/emacs/EmacsForMacOS la version .app 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 ne fonctionnaient pas vraiment 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 courant, je devais faire
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$PWD/$@"
au lieu.
Beaucoup de solutions très complexes à ce problème sont affichées ici. C'est juste parce que cela ne semble pas trivial.
Cependant, cette solution fonctionne vraiment bien pour moi.
ec() {
emacsclient -n $@ 2> /dev/null
if [[ $? == 1 ]]; then
open -a Emacs.app -- $@
fi
}
ec file [...]
ec
à emacsclient et n'attendez pas (-n
) avant de continuer ..__2> /dev/null
)1
([[ $? == 1 ]]
) Compilez Emacs en suivant les étapes suivantes:
./configure --with-x --prefix=/usr
make
Sudo make install
Et votre fait! Il peut être utile de télécharger et d'installer XQuartz, mais ce n'est que mon opinion.
Ceci est mon script pour open 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