it-swarm-es.com

Cómo copiar texto de Emacs a otra aplicación en Linux

Cuando corte (mato) el texto en Emacs 22.1.1 (en su propia ventana en X, en KDE, en Kubuntu), no puedo pegarlo (tirarlo) en ninguna otra aplicación.

102
memius

Inserte lo siguiente en su archivo .emacs:

(setq x-select-enable-clipboard t)
88
memius

Tengamos cuidado con nuestras definiciones aquí.

  • Un copia de Emacs es el comando kill-ring-save (generalmente vinculado a M-w).
  • A copia del sistema es lo que normalmente se obtiene al presionar C-c (o eligiendo "Editar-> Copiar" en una ventana de aplicación).
  • Un copia X es "físicamente" resaltando texto con el cursor del mouse.
  • An Emacs paste es el comando yank (generalmente vinculado a C-y).
  • A pegar del sistema es lo que normalmente se obtiene al presionar C-v (o eligiendo "Editar-Pegar" en una ventana de aplicación).
  • Un pegar X está presionando el "botón central del mouse" (simulado presionando los botones izquierdo y derecho del mouse juntos).

En mi caso (en GNOME):

  • Tanto Emacs como la copia del sistema suelen trabajar con X pegar.
  • Copia X normalmente funciona con la pasta de Emacs.
  • Para hacer que la copia del sistema funcione con Emacs paste y Emacs copy funciona con system paste, debe agregar (setq x-select-enable-clipboard t) a su .emacs. O tratar

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

Creo que este es el comportamiento de Unix moderno bastante estándar.

También es importante tener en cuenta (aunque usted dice que está usando Emacs en una ventana separada) que cuando Emacs se ejecuta en una consola, está completamente separado del sistema y de los portapapeles X: cortar y pegar en ese caso está mediado por el terminal . Por ejemplo, "Editar-> Pegar" en la ventana de su terminal debería actuar exactamente como si hubiera escrito el texto desde el portapapeles en el búfer de Emacs.

118
Chris Conway

Pongo esto en mis .emacs:

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

Básicamente, no tengo problemas para cortar y pegar de un lado a otro desde Emacs a cualquier otra aplicación X11 o Gnome.

Bono: para que esto suceda en Emacs sin tener que recargar todo su .emacs, haga C-x C-e con el cursor justo después del cierre de cada una de esas expresiones en el búfer .emacs.

¡Buena suerte!

10
jfm3

La dificultad de copiar y pegar en Emacs es que desea que funcione de forma independiente desde el comando kill/yank interno, y que funcione tanto en el terminal como en el gui. Existen soluciones sólidas existentes para el terminal o la interfaz gráfica de usuario, pero no para ambos. Después de instalar xsel (por ejemplo, Sudo apt-get install xsel), esto es lo que hago para copiar y pegar para combinarlos:

(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)
10
RussellStewart

Supongo que por emacs significa Emacs bajo X (es decir, no dentro de una ventana de terminal).

Hay dos maneras:

  1. (Se aplica solo a los sistemas operativos de Unix) Resalta el texto deseado con el mouse (esto lo copia al portapapeles de X) y luego haz clic para pegar.
  2. Resalte el texto deseado y luego "M-x portapapeles-matar-anillo-guardar" (tenga en cuenta que puede enlazar esto a una tecla más fácil). Luego simplemente "Editar-> Pegar" en tu aplicación favorita.

Operaciones de portapapeles disponibles:

  • clipboard-kill-ring-save - copia la selección de Emacs al portapapeles
  • clipboard-kill-region: corta la selección de Emacs al portapapeles
  • clipboard-yank - pegar desde el portapapeles a Emacs
7
pdq

Hay un artículo de EmacsWiki que explica algunos problemas con copiar y pegar en X y cómo configurarlo para que funcione.

6
cschol

Esto funciona con M-w en Mac OSX. Solo agréguelo a su archivo .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)

Fuente https://Gist.github.com/the-kenny/267162

4
cevaris

El código a continuación, inspirado en la respuesta de @ RussellStewart, agrega soporte para x-PRIMARY y x-SECONDARY, reemplaza region-active-p con use-region-p para cubrir el caso de una región vacía, no regresa silenciosamente si xsel no se ha instalado (devuelve un mensaje de error ), e incluye una función de "corte" (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)
1
user1404316

Hmm, ¿qué plataforma y qué versión de emacs estás usando? Con GNU Emacs 22.1.1 en Windows Vista, funciona bien para mí.

Si, por casualidad, está haciendo esto desde Windows a Linux a través de un visor RealVNC, asegúrese de ejecutar primero "vncconfig -iconic" en el cuadro de Linux ...

0
kfh

Siempre uso pegado rápido - arrastre la selección en emacs, presione el botón central del ratón en la ventana de destino.

(De la referencia a kate, supongo que está en Linux o similar y probablemente esté usando emacs en X de una forma u otra).

0
cannam

Es posible que desee especificar qué plataforma está utilizando. ¿Está en linux, unix, macosx, windows, ms-dos?

Creo que para windows debería funcionar. Para MacOSX se agregará al portapapeles de x-windows, que no es lo mismo que el portapapeles de macosx. Para Linux, depende del tipo de administrador de ventanas, pero creo que x-windows lo maneja de forma agradable en la mayoría de ellos.

Por lo tanto, por favor especifique.

0
Mats Fredriksson