2008-09-15 19 views

Respuesta

83

Inserte el siguiente en su archivo .emacs:

(setq x-select-enable-clipboard t) 
+3

No es vergonzoso, le dice lo que necesita saber. Excelente respuesta – JasonFruit

+0

Funciona perfectamente, uso Ubuntu 12.04. Gracias – zhihong

+3

Agradable y simple, pero esto no funciona en la terminal. No hay ninguna razón por la cual el mismo atajo no debería funcionar tanto en la terminal como en una ventana libre, y algunas de las respuestas a continuación abordan ambas simultáneamente. – RussellStewart

0

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, usted está haciendo esto de Windows a Linux a través de un visor RealVNC, asegúrese de que está ejecutando "vncconfig -iconic" en la máquina Linux primero .....

-1

Lo que hago es utilizar una buena herramienta de terminal (PuTTY en Windows, Konsole o Terminal en Linux) que tenga incorporadas las funciones de copia.

En PuTTY, resalta el texto que desea con el mouse y luego lo pega en otro lugar. Al hacer clic con el botón derecho en una ventana de PuTTY, se pega el contenido del búfer de copiar/pegar de Windows.

En Konsole o Terminal en Linux, resalte lo que desea y luego presione Mayús + Ctrl + C para copiar y Mayús + Ctrl + V para pegar.

En la compilación win32 de emacs, el texto de extracción lo pone en el búfer de copiar/pegar ... la mayoría de las veces.

En Mac OS X, los chortcuts Apple-key funcionan bien, porque el terminal los atrapa.

No hay forma directa de hacerlo en la línea de comandos porque el shell no mantiene un búfer de copiar/pegar para cada aplicación. bash does mantiene un buffer de copiar/pegar por sí mismo, y, de forma predeterminada, funcionan los atajos de^^/^ y emacs.

0

Siempre utilizo la función de pegar rápido y arrastrar en emacs, pulso el botón central del mouse en la ventana de destino.

(De la referencia a Kate, lo tomo estás en Linux o similar y probablemente usando emacs en X de una manera u otra.)

0

Es posible que desee especificar qué plataforma que 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 macosx. Para Linux, depende de tu gusto de administrador de ventanas, pero creo que x-windows lo maneja de una manera agradable en la mayoría de ellos.

Por lo tanto, por favor especifique.

7

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

Hay dos maneras:

  1. (Se aplica al sistema operativo UNIX sólo de) resaltar el texto que desee con su ratón (esta copia en el X portapapeles) y haga clic a continuación media a pasta.
  2. Resalte el texto deseado y luego "M-x clipboard-kill-ring-save" (tenga en cuenta que puede enlazar esto a una clave más fácil).Luego simplemente "Editar-> Pegar" en su aplicación favorita.

operaciones de portapapeles disponibles:

  • portapapeles-kill-ring-save - copiar selección de Emacs al portapapeles
  • portapapeles-kill-region - cortar selección de Emacs al portapapeles
  • portapapeles-yanqui - pegar desde el portapapeles a Emacs
116

Vamos a tener cuidado con nuestras definiciones aquí

  • Un Emacs copia es el comando kill-ring-save (por lo general con destino a M-w).
  • A copia del sistema es lo que normalmente se obtiene presionando C-c (o seleccionando "Editar-> Copiar" en una ventana de la aplicación).
  • Una copia X copia resalta texto "físicamente" con el cursor del mouse.
  • Un Emacs pegar es el comando yank (generalmente unido a C-y).
  • Una pasta sistema es lo que normalmente se obtiene de presión C-v (o "Edición-Pegar" en una ventana de la aplicación).
  • Un X pegar 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 y copia del sistema suelen trabajar con pasta de X.
  • Copia X generalmente funciona con pegar Emacs.
  • Para hacer que la copia del sistema funcione con Emacs paste y la copia de Emacs funcione con el sistema pegado, debe agregar (setq x-select-enable-clipboard t) a su .emacs. O intento

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

creo que esto es moderna comportamiento bastante estándar de Unix.

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

+3

[Esta es una terminología confusa] (http://unix.stackexchange.com/questions/158082/what-are-system-copy-and-paste). El nombre estándar y menos confuso para lo que usted llama "Copiar/pegar X" es la selección primaria X. Lo que usted llama "copiar/pegar del sistema" es el portapapeles X. – Gilles

9

que pegar esto en mis .emacs:

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

posteriormente Tengo básicamente, no hay problemas de cortar y pegar un lado a otro de cualquier cosa en Emacs a cualquier otra aplicación X11 o Gnome.

Bonificación: para hacer que sucedan estas cosas en Emacs sin tener que volver a cargar todos sus archivos .emacs, ejecute C-x C-e con el cursor justo después del par de cada una de esas expresiones en el búfer de .emacs.

¡Buena suerte!

+1

Esta solución funciona para emacs en una ventana X emacs es decir, se ejecuta dentro de una ventana si está ejecutando emacs en la línea de comandos lo que necesita es: http://stackoverflow.com/questions/5288213/how-can-i -paste-la-región-seleccionada-fuera-de-emacs – elviejo79

9

La dificultad de copiar y pegar en Emacs es que se quiere que funcione independientemente del eliminados/tirón interno, y que desea que funcione tanto en terminal y la interfaz gráfica de usuario. Existen soluciones sólidas existentes para terminal o GUI, pero no para ambas. 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) 
+0

Porque recibo un error porque no hay params. Necesito cambiar la primera línea "(defun copy-to-clipboard()" to "(defun copy-from-ubuntu (texto y push opcional)". Esto funciona para mí: D –

3

Esto funciona con M-w en Mac OSX. Solo agregue 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

1

El código siguiente, inspirado por la respuesta de @ RussellStewart anterior, añade soporte para x-PRIMARIO y x-SECUNDARIA, reemplaza region-active-p con use-region-p para cubrir el caso de una región vacía, no lo hace devuelva 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) 
+0

¿Hay alguna razón para no sobrescribir el estándar? ?. combinaciones de teclas – Paul

+0

@ Pablo: las 'combinaciones de teclas estándar' son para el 'emacs portapapeles interno', que es diferente de los X-portapapeles me citó el término 'emacs portapapeles interno' porque la terminología emacs es diferente - se refiere a Chris de excelente Conway explicación, arriba. – user1404316

Cuestiones relacionadas