Configurer emacs pour couper et copier du texte dans le presse-papiers de Mac OS X

16

Puis-je configurer emacspour pouvoir copier / couper du texte à partir d'emacs (version par défaut du terminal) et le coller ailleurs (dans le programme X Window)?

syntagme
la source
Nitpick: vous dites "version du terminal par défaut", mais le mode de fonctionnement par défaut pour Emacs est d'utiliser l'interface graphique plutôt que le terminal texte. Peut-être faites-vous référence à l'ancien /usr/bin/emacsexécutable fourni par Apple avec OSX et qui est arbitrairement limité au terminal texte?
Stefan

Réponses:

4

Pour copier la région actuelle dans le presse-papiers OS X, vous pouvez utiliser

(shell-command-on-region (region-beginning) (region-end) "pbcopy")

L'inverse, copier le tampon de collage OS X dans le kill ring d'Emacs, n'est pas recommandé. Les anneaux de destruction et les planchettes à pince sont des structures très différentes et il n'y a pas de bonne réponse à ce que devrait exactement faire pousser une planchette à pince dans un anneau de destruction. Néanmoins, vous pouvez exécuter pbpastemanuellement pour obtenir le contenu actuel du presse-papiers.


la source
Ça n'a pas marché pour moi. La solution marquée dans ce post Emacs fonctionne cependant.
Galder Zamarreño
8

Ajoutez ceci à ~/.emacs:

(defun pbcopy ()
  (interactive)
  (call-process-region (point) (mark) "pbcopy")
  (setq deactivate-mark t))

(defun pbpaste ()
  (interactive)
  (call-process-region (point) (if mark-active (mark) (point)) "pbpaste" t t))

(defun pbcut ()
  (interactive)
  (pbcopy)
  (delete-region (region-beginning) (region-end)))

(global-set-key (kbd "C-c c") 'pbcopy)
(global-set-key (kbd "C-c v") 'pbpaste)
(global-set-key (kbd "C-c x") 'pbcut)

Si vous utilisez Emacs dans iTerm 2, vous pouvez également remapper les combinaisons de touches dans les préférences:

Ajoutez ensuite quelque chose comme ceci à ~/.emacs:

(global-set-key (kbd "<f13> c") 'pbcopy)
(global-set-key (kbd "<f13> v") 'pbpaste)
(global-set-key (kbd "<f13> x") 'pbcut)
Lri
la source
Toujours la meilleure réponse. Merci! Remarque pour iterm, pour créer ces "Actions", choisissez "Envoyer le code d'échappement" et vous omettez le premier "^ [." (ne fonctionnait pas avec le type d'action "Envoyer le texte")
Jay
3

Voici une solution pour intégrer le presse-papiers OS X au kill-ring d'Emacs par Daniel Nelson: https://github.com/wesen/emacs/blob/master/pbcopy.el

Commentaires de l'auteur:

Permet au kill-ring d'interagir avec le presse-papiers lors de l'exécution d'Emacs à partir d'un terminal Mac OSX (sans perdre la fonctionnalité complète du kill-ring). Je n'ai fait que modifier xclip.elpour travailler avec pbcopyet pbpaste. Nous remercions sincèrement Leo Shidai Liu, l'auteur de xclip.el.

ristohietal
la source
1

Ce qui suit fonctionne, je l'ai ici :)

(defun copy-from-osx ()
  (shell-command-to-string "pbpaste"))

(defun paste-to-osx (text &optional push)
  (let ((process-connection-type nil))
    (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
      (process-send-string proc text)
      (process-send-eof proc))))

(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx))
Galder Zamarreño
la source
Pourriez-vous ajouter un lien vers le message d'origine?
Vincent
0

La version d'emacs incluse avec OS X est trop ancienne pour fournir cette fonctionnalité.

Heureusement, vous pouvez mettre à jour emacs vers une version intégrée à votre presse-papiers ici: http://emacsformacosx.com

Je crois que vous utilisez Ctrl+ Ypour coller dans emacs, après la mise à jour.

Faiz Saleem
la source
Ah - j'ai oublié de dire - la version d'emacs que vous téléchargerez à partir de ce site est graphique (c'est-à-dire qu'elle ne s'exécute pas dans le terminal). Il est impossible pour les applications du Terminal d'accéder au presse-papiers sans pirater, ce que je ne trouve plus. : /
Faiz Saleem
2
pbcopyet pbpasteexistent toujours et ne sont pas des hacks.
C'est possible, mais j'ai supposé que l'OP voulait utiliser les commandes du clavier pour copier et coller. Ce que je voulais dire, c'est que les applications Terminal Server ne peuvent pas utiliser de raccourcis clavier pour copier et coller avec le presse-papiers OS X sans piratage.
Faiz Saleem
"Les applications de terminal ne peuvent pas utiliser les raccourcis clavier pour copier et coller avec le presse-papiers OS X sans piratage." Ce n'est évidemment pas vrai, pbcopyet ce pbpastesont deux applications terminales; n'importe quelle autre application de terminal pourrait faire ce qu'elle fait ou simplement l'appeler directement.
Ce que je cherchais, c'est accrocher pbcopyà Emacs cut & copy. C'est possible?
syntagma
0

J'ai trouvé ce post vraiment utile (définir 2 fonctions et leur assigner des raccourcis dans votre fichier ~ / .emacs).

Après avoir ajouté ces lignes à votre fichier .emacs, vous n'aurez pas accès à ces raccourcis tant que vous n'aurez pas ouvert une nouvelle session shell (onglet / fenêtre). Laissez les changements être appliqués.

Javad Sadeqzadeh
la source
0

Vous pouvez obtenir une telle interaction avec le presse-papiers de manière transparente lors de l'exécution d'Emacs dans le terminal texte en activant le xclip-modefourni par le xclippackage que vous pouvez installer à partir de GNU ELPA (c'est-à-dire via M-x package-list-packages RET).

Voir également /emacs/10900/ pour une question et des réponses similaires.

Stefan
la source