J'ai récemment acheté mon premier Mac en une décennie et je suis en train de le configurer. Je suis un utilisateur Emacs et j'ai déterminé que je veux juste des Emacs ordinaires et non des Aquamacs afin de pouvoir utiliser ma configuration existante à partir d'autres systèmes d'exploitation. J'ai essayé de suivre de nombreux tutoriels que j'ai trouvés en ligne (comme celui-ci , celui-ci et celui-ci sur le site à partir duquel j'ai téléchargé Emacs ), et j'ai essayé de combiner les pièces de plusieurs façons, mais je n'ai jamais a mis les choses dans un état s'approchant même de ce à quoi je suis habitué / j'espère:
- Un démon Emacs démarre en cours d'exécution au démarrage ou dès que j'en ai besoin ; n'importe quel. Toutes les nouvelles trames Emacs sont soutenues par le même serveur.
- Lorsque j'ouvre un fichier texte à partir du Finder, le fichier s'ouvre dans Emacs, dans un cadre graphique existant si possible.
- Si j'exécute Emacs.app, le système réutilise le démon emacs qui s'exécute en arrière-plan au lieu de démarrer une nouvelle instance et d'ouvrir une nouvelle fenêtre dessus. ( pointe du chapeau )
- Lorsque j'exécute Emacs à partir d'un terminal, le terminal vaque à ses affaires sans attendre que je termine avec Emacs (sauf si j'utilise '-nw')
- AFAIK à aucun moment au cours des opérations décrites ci-dessus, Emacs ne devrait se retrouver dans un état ("mode d'édition de serveur?") Où il m'attend pour taper
C-x #
, bien que je n'ai pas une compréhension approfondie de celui-ci. - (Je considérerais cela comme un bonus) Il existe un moyen pour moi d'invoquer Emacs à partir d'un terminal afin qu'Emacs réutilise un cadre existant si possible.
Comment pourrais-je configurer Emacs pour qu'il se comporte comme ça?
Je suis particulièrement perplexe en amenant le Finder à ouvrir les choses dans Emacs comme je le souhaite (# 2), car les guides que j'ai trouvés créent généralement un certain nombre d'alias, d'Applescripts, de scripts bash, etc. et je ne suis pas sûr que je veux dire au Finder d'utiliser pour ouvrir des fichiers texte.
Merci!
A. @lawlist demande: "Un nouveau cadre est-il ouvert par défaut lorsque vous ouvrez un nouveau fichier à partir du terminal même s'il existe un cadre existant?" La réponse est que si je démarre un serveur au démarrage comme décrit ici , ouvre un cadre, puis ouvre un fichier en tapant /Applications/Emacs.app/Contents/MacOS/bin/emacsclient -n <whatever>
, je peux obtenir le fichier à ouvrir dans un cadre existant. S'il n'y a aucun cadre actuellement ouvert, je dois utiliser "-nc" ou lorsque j'essaye d'ouvrir un fichier, rien ne se passe.
B. @lawlist demande: "Voulez-vous que le démon s'exécute à la connexion, ou serait-il suffisant de charger Emacs manuellement après la connexion?" Courir manuellement serait bien.
M-x server-start
démarrera manuellement le serveur afin deemacsclient
pouvoir communiquer avec lui. J'ai placé(server-start)
moninit.el
fichier au lieu d'utiliser un démon à la connexion - cependant, beaucoup de gens préfèrent l'option de connexion au démon. Et bien sûr, le.emacs
fichier serait un endroit approprié pour(server-start)
.ns-find-file
- qui est activé automatiquement lorsqu'un fichier est associé à Emacs.app. Ma fonction de fichier d'interception dans les liens ci-dessus modifie égalementns-find-file
si c'est quelque chose qui vous intéresse. Bien sûr, vous avez besoin de construire Emacs--with-ns
.Réponses:
Pour que Emacs.app ouvre des fichiers dans un cadre existant au lieu d'un nouveau cadre, ajoutez-le
(setq ns-pop-up-frames nil)
à un fichier de configuration comme~/.emacs
.Vous pouvez ouvrir un fichier depuis un terminal avec
open -a emacs file
ouemacsclient -n file
. Si Emacs.app n'est pas ouvert mais qu'il y a unEmacs --daemon
processus, pour une raison quelconque,emacsclient -n file
cela ne fonctionne pas mais leemacsclient -nc file
fait.Assurez-vous d'utiliser le
emacsclient
binaire inclus avec la version d'Emacs que vous utilisez, comme/Applications/Emacs.app/Contents/MacOS/bin/emacsclient
, ou/usr/local/bin/emacsclient
si vous avez installé Emacs avec Homebrew.Pour démarrer un serveur Emacs à la connexion, par exemple enregistrez cette liste sous
~/Library/LaunchAgents/my.emacsdaemon.plist
:Le plist est chargé automatiquement la prochaine fois que vous vous connectez, mais vous pouvez le charger immédiatement en exécutant
launchctl load ~/Library/LaunchAgents/my.emacsdaemon.plist
.Edit: je ne sais toujours pas pourquoi les gens associent des types de fichiers à une application AppleScript au lieu de simplement Emacs.app. Le script dans la réponse de kuzzooroo pourrait également être écrit comme un script shell:
Vous pouvez utiliser Platypus pour enregistrer le script en tant qu'application:
Je viens de commencer à utiliser Emacs, mais j'ai une configuration complètement différente. J'ai créé ma propre application Emacs en faisant une copie de iTerm.app, en changeant le CFBundleIdentifier dans Info.plist pour que l'application utilise un fichier de préférences différent et en définissant la commande par défaut sur
/usr/local/bin/emacs
. J'ai ajouté(server-start)
à~/.emacs
et j'ouvrir l'application Emacs personnalisé lors de la connexion. J'ai utilisé Platypus pour créer une application qui fonctionneemacsclient -n "$@";open -b my.emacs
et j'en ai fait l'application par défaut pour les fichiers texte.la source
La solution de Lauri combinée aux suggestions des commentaires ont largement répondu à mes problèmes. J'ai collé ci-dessous un Applescript que j'ai assemblé à partir de choses que j'ai trouvées en ligne. Le script permet de lisser certaines rides restantes, par exemple, son comportement est un peu meilleur s'il n'y a pas de trame Emacs actuelle.
EDIT: le but du script est d'être associé aux fichiers .txt dans le Finder.
la source