Réponses:
Soyons prudents avec nos définitions ici
kill-ring-save
(généralement liée à M-w).yank
(généralement liée à C-y).Dans mon cas (sur GNOME):
Pour faire fonctionner la copie système avec la pâte Emacs et la copie Emacs avec la pâte système, vous devez ajouter (setq x-select-enable-clipboard t)
à votre fichier .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 disiez que vous utilisez Emacs dans une fenêtre séparée) que lorsque Emacs s'exécute dans une console, il est complètement séparé du système et du presse-papiers X: le copier-coller dans ce cas est médiatisé par le terminal . Par exemple, "Edition-> Coller" dans la fenêtre de votre terminal doit agir exactement comme si vous tapiez le texte du presse-papiers dans le tampon Emacs.
META-X set-variable RET select-enable-clipboard RET t
ou(setq select-enable-clipboard t)
Insérez ce qui suit dans votre .emacs
fichier:
(setq x-select-enable-clipboard t)
emacs -nw
, j'utilise les propres raccourcis du terminal; Shift-Ctrl-X pour couper (tuer) le texte et Shift-Ctrl-C pour copier.
emacs -nw
fenêtres tmux fractionnées horizontalement.
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 pratiquement aucun problème à couper et coller de n'importe quoi dans Emacs vers n'importe quelle autre application X11 ou Gnome.
Bonus: pour que ces choses se produisent dans Emacs sans avoir à recharger l'ensemble de vos .emacs, faites Cx Ce avec le curseur juste après le paren de fermeture de chacune de ces expressions dans le tampon .emacs.
Bonne chance!
Symbol’s function definition is void: x-cut-buffer-or-selection-value
La difficulté avec le copier-coller dans Emacs est que vous voulez qu'il fonctionne indépendamment du 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 le terminal ou l'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 pour 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-string "xsel -o -b"))
)
)
(global-set-key [f8] 'copy-to-clipboard)
(global-set-key [f9] 'paste-from-clipboard)
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:
Opérations de presse-papiers disponibles:
Il existe un article d'EmacsWiki qui explique certains problèmes de copier-coller sous X et comment le configurer pour qu'il fonctionne.
Cela fonctionne avec M-w
Mac OSX. Ajoutez simplement à votre fichier .emacs .
(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)
Le code ci-dessous, inspiré de la réponse de @ RussellStewart ci-dessus, ajoute la prise en charge de x-PRIMARY et x-SECONDARY, remplace region-active-p
par use-region-p
pour couvrir le cas d'une région vide, ne retourne pas silencieusement si xsel n'a pas été installé (renvoie un message d'erreur), et inclut une fonction "cut" (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-string (concat "xsel -o -" opt))))))
(global-set-key (kbd "C-c C-w") 'my-cut-to-xclipboard)
(global-set-key (kbd "C-c M-w") 'my-copy-to-xclipboard)
(global-set-key (kbd "C-c C-y") 'my-paste-from-xclipboard)
J'utilise ce qui suit, basé sur les autres réponses ici, pour créer C-x C-w
et C-x C-y
copier et coller à la fois sur Mac et Linux (si quelqu'un connaît la version pour Windows, n'hésitez pas à l'ajouter). Notez que sous Linux, vous devrez installer xsel et xclip avec votre gestionnaire de paquets.
;; Commands to interact with the clipboard
(defun osx-copy (beg end)
(interactive "r")
(call-process-region beg end "pbcopy"))
(defun osx-paste ()
(interactive)
(if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
(call-process "pbpaste" nil t nil))
(defun linux-copy (beg end)
(interactive "r")
(call-process-region beg end "xclip" nil nil nil "-selection" "c"))
(defun linux-paste ()
(interactive)
(if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
(call-process "xsel" nil t nil "-b"))
(cond
((string-equal system-type "darwin") ; Mac OS X
(define-key global-map (kbd "C-x C-w") 'osx-copy)
(define-key global-map (kbd "C-x C-y") 'osx-paste))
((string-equal system-type "gnu/linux") ; linux
(define-key global-map (kbd "C-x C-w") 'linux-copy)
(define-key global-map (kbd "C-x C-y") 'linux-paste)))
xclip
pour coller le contenu du presse-papiers en utilisant xclip -o
. Cela peut être utile pour les personnes qui ont déjà xclip
et ne veulent pas installer un autre programme pour faire à la fois le copier et le coller.
Hmm, quelle plateforme 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 faites cela de Windows à Linux via une visionneuse RealVNC, assurez-vous que vous exécutez d'abord "vncconfig -iconic" sur la machine Linux .....
J'utilise toujours le collage rapide - faites glisser la sélection dans emacs, appuyez sur le bouton central de la souris dans la fenêtre cible.
(D'après la référence à kate, je suppose que vous êtes sous Linux ou similaire et que vous utilisez probablement emacs sous X d'une manière ou d'une autre.)
Vous souhaiterez peut-être spécifier la plate-forme que vous utilisez. Est-ce sous Linux, Unix, MacOSX, Windows, MS-DOS?
Je pense que cela devrait fonctionner pour les fenêtres. 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 crois que x-windows le gère d'une manière agréable sur la plupart d'entre eux.
Alors, veuillez préciser.
Ce que je fais, c'est utiliser un bon outil de terminal (PuTTY sous Windows, Konsole ou Terminal sous Linux) doté de fonctions de copie intégrées.
Dans PuTTY, vous mettez en surbrillance le texte souhaité avec la souris, puis vous le collez ailleurs. Un clic droit dans une fenêtre PuTTY colle le contenu du tampon copier / coller de Windows.
Dans Konsole ou Terminal sous Linux, vous mettez en surbrillance ce que vous voulez, puis appuyez sur Maj + Ctrl + C pour copier et Maj + Ctrl + V pour coller.
Dans la compilation win32 d'emacs, le texte copié le place dans le tampon copier / coller .. la plupart du temps.
Sur Mac OS X, les raccourcis Apple-key fonctionnent correctement, car Terminal les piège.
Il n'y a pas de moyen direct de le faire sur la ligne de commande car le shell ne maintient pas de tampon copier / coller pour chaque application. bash ne conserve une copie / coller du tampon pour lui - même, et, par défaut, emacs ^ k / ^ travail des raccourcis y.