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 (tirer) dans une autre application.
Insérez ce qui suit dans votre .emacs
fichier:
(setq x-select-enable-clipboard t)
Soyons prudents avec nos définitions ici
kill-ring-save
(généralement lié à 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)
à ton .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 des presse-papiers X: le copier-coller dans ce cas est médié par le terminal . Par exemple, "Édition-> Coller" dans votre fenêtre de terminal devrait agir exactement comme si vous aviez tapé le texte du presse-papiers dans le tampon Emacs.
Je colle ceci dans mon .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 d'avant en arrière dans Emacs vers toute autre application X11 ou Gnome.
Bonus: pour que ces choses se produisent dans Emacs sans avoir à recharger l'intégralité de votre .emacs, faites C-x C-e avec le curseur juste après la parenthèse fermée de chacune de ces expressions dans le tampon .emacs.
Bonne chance!
La difficulté du copier-coller dans Emacs est que vous voulez qu'il fonctionne indépendamment du kill/yank interne et que vous vouliez qu'il fonctionne à la fois dans le terminal et dans l'interface graphique. Il existe des solutions robustes existantes 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-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 à l'intérieur d'une fenêtre de terminal).
Il y a deux façons:
Opérations du presse-papiers disponibles:
Il y a n article EmacsWiki qui explique certains problèmes avec le copier-coller sous X et comment le configurer pour qu'il fonctionne.
Cela fonctionne avec M-w
sur 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
avec use-region-p
pour couvrir le cas d'une région vide, ne retourne pas silencieusement si xsel n'a pas été installé (retourne un message d'erreur), et inclut une fonction "cut" (emacs C-y, windows C-x).
(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 faire C-x C-w
et C-x C-y
copiez et collez 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)))
Hmm, quelle plateforme et quelle version d'emacs utilisez-vous? Avec GNU Emacs 22.1.1 sur Windows Vista, cela fonctionne très bien pour moi.
Si, par hasard, vous faites cela de Windows à Linux via un visualiseur RealVNC, assurez-vous que vous exécutez d'abord "vncconfig -iconic" sur la boîte 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 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 les fenêtres, 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 crois que x-windows le gère de manière agréable sur la plupart d'entre eux.
Alors, précisez.