Comment copier du texte depuis Emacs vers une autre application sous Linux

Lorsque je coupe (tue) du texte dans Emacs 22.1.1 (dans sa propre fenêtre sur X, dans KDE, sur Kubuntu), je ne peux pas le coller (yank) dans une autre application.

Soyons prudent avec nos définitions ici

  • Une copie d’Emacs est la commande kill-ring-save (généralement liée à Mw ).
  • Une copie du système est ce que vous obtenez généralement en appuyant sur Cc (ou en choisissant “Edition-> Copier” dans une fenêtre d’application).
  • Une copie X met “physiquement” en évidence le texte avec le curseur de la souris.
  • Un collage Emacs est la commande yank (généralement liée à Cy ).
  • Un collage de système est ce que vous obtenez généralement en appuyant sur Cv (ou en choisissant “Modifier-Coller” dans une fenêtre d’application).
  • Une pâte X appuie sur le “bouton central de la souris” (simulé en appuyant simultanément sur les boutons gauche et droit de la souris).

Dans mon cas (sur GNOME):

  • Emacs et la copie du système fonctionnent généralement avec X-Paste.
  • La copie de X fonctionne habituellement avec le collage d’Emacs.
  • Pour que la copie du système fonctionne avec Emacs paste et Emacs copie avec le système, vous devez append (setq x-select-enable-clipboard t) à vos .emacs . Ou essayez

     META-X set-variable RET x-select-enable-clipboard RET t 

Je pense que c’est un comportement Unix moderne assez standard.

Il est également important de noter (bien que vous utilisiez Emacs dans une fenêtre séparée) que lorsque Emacs est exécuté dans une console, il est complètement séparé du système et des Presse-papiers X: dans ce cas, couper et coller est géré par le terminal. . Par exemple, “Edit-> Paste” dans votre fenêtre de terminal devrait agir exactement comme si vous aviez tapé le texte du presse-papiers dans le tampon Emacs.

Insérez ce qui suit dans votre fichier .emacs :

 (setq x-select-enable-clipboard t) 

La difficulté avec copier-coller dans Emacs est que vous voulez qu’il fonctionne indépendamment de kill / yank interne et que vous voulez qu’il fonctionne à la fois dans le terminal et dans l’interface graphique. Il existe des solutions robustes pour terminal ou interface graphique, mais pas les deux. Après avoir installé xsel (par exemple sudo apt-get install xsel ), voici ce que je fais pour copier et coller afin de les combiner:

 (defun copy-to-clipboard () (interactive) (if (display-graphic-p) (progn (message "Yanked region to x-clipboard!") (call-interactively 'clipboard-kill-ring-save) ) (if (region-active-p) (progn (shell-command-on-region (region-beginning) (region-end) "xsel -i -b") (message "Yanked region to clipboard!") (deactivate-mark)) (message "No region active; can't yank to clipboard!"))) ) (defun paste-from-clipboard () (interactive) (if (display-graphic-p) (progn (clipboard-yank) (message "graphics active") ) (insert (shell-command-to-ssortingng "xsel -o -b")) ) ) (global-set-key [f8] 'copy-to-clipboard) (global-set-key [f9] 'paste-from-clipboard) 

Je colle ceci dans mes .emacs:

 (setq x-select-enable-clipboard t) (setq interprogram-paste-function 'x-cut-buffer-or-selection-value) 

Par la suite, je n’ai aucun problème à couper et à coller entre n’importe quoi dans Emacs et toute autre application X11 ou Gnome.

Bonus: pour que ces choses se passent dans Emacs sans avoir à recharger l’ensemble de vos .emacs, faites Cx Ce avec le curseur juste après le paren proche de chacune de ces expressions dans le tampon .emacs.

Bonne chance!

Je suppose que par emacs, vous voulez dire Emacs sous X (c’est-à-dire pas dans une fenêtre de terminal).

Il y a deux manières:

  1. (S’applique uniquement aux systèmes d’exploitation Unix) Sélectionnez le texte souhaité avec votre souris (cela le copie dans le presse-papiers X), puis cliquez avec le bouton central pour coller.
  2. Mettez en surbrillance le texte souhaité puis “Mx clipboard-kill-ring-save” (notez que vous pouvez lier ceci à une touche plus facile). Ensuite, juste “Édition-> Coller” dans votre application préférée.

Opérations presse-papiers disponibles:

  • clipboard-kill-ring-save – sélection de copie d’Emacs dans le presse-papiers
  • clipboard-kill-region – coupe la sélection d’Emacs au presse-papiers
  • clipboard-yank – coller du presse-papiers à Emacs

Il existe un article EmacsWiki qui explique certains problèmes liés au copier-coller sous X et à sa configuration.

Cela fonctionne avec Mw sur Mac OSX. Ajoutez simplement à votre fichier .emacs .

 (defun copy-from-osx () (shell-command-to-ssortingng "pbpaste")) (defun paste-to-osx (text &optional push) (let ((process-connection-type nil)) (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy"))) (process-send-ssortingng proc text) (process-send-eof proc)))) (setq interprogram-cut-function 'paste-to-osx) (setq interprogram-paste-function 'copy-from-osx) 

Source https://gist.github.com/the-kenny/267162

Le code ci-dessous, inspiré de la réponse de @ RussellStewart ci-dessus, ajoute le support de x-PRIMARY et x-SECONDARY, remplace region-active-p par use-region-p pour couvrir le cas d’une région vide, ne revient pas silencieusement n’a pas été installé (renvoie un message d’erreur) et inclut une fonction “couper” (emacs Cy, windows Cx).

 (defun my-copy-to-xclipboard(arg) (interactive "P") (cond ((not (use-region-p)) (message "Nothing to yank to X-clipboard")) ((and (not (display-graphic-p)) (/= 0 (shell-command-on-region (region-beginning) (region-end) "xsel -i -b"))) (error "Is program `xsel' installed?")) (t (when (display-graphic-p) (call-interactively 'clipboard-kill-ring-save)) (message "Yanked region to X-clipboard") (when arg (kill-region (region-beginning) (region-end))) (deactivate-mark)))) (defun my-cut-to-xclipboard() (interactive) (my-copy-to-xclipboard t)) (defun my-paste-from-xclipboard() "Uses shell command `xsel -o' to paste from x-clipboard. With one prefix arg, pastes from X-PRIMARY, and with two prefix args, pastes from X-SECONDARY." (interactive) (if (display-graphic-p) (clipboard-yank) (let* ((opt (prefix-numeric-value current-prefix-arg)) (opt (cond ((= 1 opt) "b") ((= 4 opt) "p") ((= 16 opt) "s")))) (insert (shell-command-to-ssortingng (concat "xsel -o -" opt)))))) (global-set-key (kbd "Cc Cw") 'my-cut-to-xclipboard) (global-set-key (kbd "Cc Mw") 'my-copy-to-xclipboard) (global-set-key (kbd "Cc Cy") 'my-paste-from-xclipboard) 

Hmm, quelle plate-forme et quelle version d’emacs utilisez-vous? Avec GNU Emacs 22.1.1 sous Windows Vista, cela fonctionne très bien pour moi.

Si, par hasard, vous le faites de Windows à Linux via un visualiseur RealVNC, assurez-vous de lancer en premier “vncconfig -iconic” sur le linux …..

J’utilise toujours un collage rapide – faites glisser la sélection dans emacs, appuyez sur le bouton central de la souris dans la fenêtre cible.

(De la référence à kate, je suppose que vous êtes sur Linux ou similaire et probablement en utilisant emacs dans X d’une manière ou d’une autre).

Vous voudrez peut-être spécifier la plate-forme que vous utilisez. Est-ce sur Linux, Unix, Macosx, Windows, MS-DOS?

Je crois que pour Windows, cela devrait fonctionner. Pour MacOSX, il sera ajouté au presse-papiers x-windows, ce qui n’est pas la même chose que le presse-papiers Macosx. Pour Linux, cela dépend de votre saveur de gestionnaire de fenêtres, mais je pense que x-windows le gère de manière agréable sur la plupart d’entre eux.

Alors, veuillez spécifier.

Ce que je fais est d’utiliser un bon outil de terminal (PuTTY sur Windows, Konsole ou Terminal sous Linux) qui dispose de fonctions de copie intégrées.

Dans PuTTY, vous mettez en surbrillance le texte que vous voulez avec la souris, puis vous le collez ailleurs. Un clic droit dans une fenêtre PuTTY colle le contenu du tampon de copie / collage de Windows.

Dans Konsole ou Terminal sur Linux, vous mettez en surbrillance ce que vous voulez, puis appuyez sur Maj + Ctrl + C pour copier et sur Maj + Ctrl + V pour coller.

Dans la compilation de win32 des emacs, le texte en attente le place sur le tampon de copie / collage la plupart du temps.

Sous Mac OS X, les raccourcis clavier Apple fonctionnent bien, car Terminal les enregistre.

Il n’y a pas de moyen direct de le faire sur la ligne de commande car le shell ne conserve pas de tampon de copier / coller pour chaque application. bash maintient un tampon de copier / coller pour lui-même et, par défaut, les raccourcis emacs ^ k / ^ y fonctionnent.