Configure emacs para cortar y copiar texto al portapapeles de Mac OS X


16

¿Puedo configurarlo emacspara poder copiar / cortar texto de emacs (versión de Terminal predeterminada) y pegarlo en otro lugar (en el programa X Window)?


Nitpick: dices "versión predeterminada de la Terminal", pero el modo predeterminado de funcionamiento para Emacs es usar la GUI en lugar de la terminal de texto. ¿Quizás te refieres al antiguo /usr/bin/emacsejecutable que Apple incluye con OSX y que se limita arbitrariamente al terminal de texto?
Stefan

Respuestas:


4

Para copiar la región actual al portapapeles OS X, puede usar

(shell-command-on-region (region-beginning) (region-end) "pbcopy")

No se recomienda lo contrario, copiar el búfer de pegado de OS X en el anillo de cierre de Emacs. Los anillos de matar y los portapapeles son estructuras muy diferentes y no hay una buena respuesta a lo que, exactamente, empujar un portapapeles en un anillo de matar debería hacer. Aún así, puede ejecutar pbpastemanualmente para obtener el contenido actual del portapapeles.


Esto no funcionó para mí. Sin embargo, la solución marcada en esta publicación de Emacs funciona.
Galder Zamarreño

8

Agregue esto a ~/.emacs:

(defun pbcopy ()
  (interactive)
  (call-process-region (point) (mark) "pbcopy")
  (setq deactivate-mark t))

(defun pbpaste ()
  (interactive)
  (call-process-region (point) (if mark-active (mark) (point)) "pbpaste" t t))

(defun pbcut ()
  (interactive)
  (pbcopy)
  (delete-region (region-beginning) (region-end)))

(global-set-key (kbd "C-c c") 'pbcopy)
(global-set-key (kbd "C-c v") 'pbpaste)
(global-set-key (kbd "C-c x") 'pbcut)

Si usa Emacs en iTerm 2, también puede reasignar combinaciones de teclas en las preferencias:

Luego agrega algo como esto a ~/.emacs:

(global-set-key (kbd "<f13> c") 'pbcopy)
(global-set-key (kbd "<f13> v") 'pbpaste)
(global-set-key (kbd "<f13> x") 'pbcut)

Sigue siendo la mejor respuesta. ¡Gracias! Tenga en cuenta para iterm, para crear estas "Acciones", elija "Enviar código de escape" y omita los principales "^ [". (no funcionaba con el tipo de acción "Enviar texto")
Jay

3

Aquí hay una solución para integrar el portapapeles OS X al anillo de ataque de Emacs de Daniel Nelson: https://github.com/wesen/emacs/blob/master/pbcopy.el

Comentarios del autor:

Permite que kill-ring interactúe con el portapapeles cuando se ejecuta Emacs desde un terminal Mac OSX (sin perder la funcionalidad completa de kill-ring). Todo lo que hice fue modificar xclip.elpara trabajar con pbcopyy pbpaste. El verdadero agradecimiento a Leo Shidai Liu, el autor de xclip.el.


1

Lo siguiente simplemente funciona, lo obtuve desde aquí :)

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

¿Podría agregar un enlace a la publicación original?
Vincent

0

La versión de emacs que se incluye con OS X es demasiado antigua para proporcionar esta funcionalidad.

Afortunadamente, puede actualizar emacs a una versión integrada con su portapapeles aquí: http://emacsformacosx.com

Creo que usas Ctrl+ Ypara pegar en emacs, después de la actualización.


Ah, se me olvidó decir que la versión de emacs que descargará de ese sitio es gráfica (es decir, no se ejecuta en la Terminal). Es imposible que las aplicaciones en la Terminal accedan al portapapeles sin un hack, que ya no puedo encontrar. : /
Faiz Saleem

2
pbcopyy pbpastetodavía existen y no son hacks.

Eso es posible, sin embargo, supuse que el OP quiere usar comandos de teclado para copiar y pegar. Lo que quería decir era que las aplicaciones de Terminal no pueden usar métodos abreviados de teclado para copiar y pegar junto con el portapapeles OS X sin hacks.
Faiz Saleem

"Las aplicaciones de terminal no pueden usar métodos abreviados de teclado para copiar y pegar junto con el portapapeles OS X sin hacks". Esto obviamente no es cierto, ya que pbcopyy pbpasteson ambas aplicaciones del terminal; cualquier otra aplicación de terminal podría hacer lo que hacen, o simplemente llamarlos directamente.

Lo que estaba buscando es conectar pbcopya Emacs cortar y copiar. ¿Es posible?
sintagma

0

Encontre esto publicación realmente útil (definiendo 2 funciones y asignándoles atajos en su archivo ~ / .emacs).

Después de agregar esas líneas a su archivo .emacs, no tendrá acceso a esos accesos directos hasta que abra una nueva sesión de shell (pestaña / ventana). Deje que se apliquen los cambios.


0

Puede obtener dicha interacción con el portapapeles de forma transparente mientras ejecuta Emacs en el terminal de texto habilitando lo xclip-modeproporcionado por el xclippaquete que puede instalar desde GNU ELPA (es decir, a través deM-x package-list-packages RET ).

Consulte también /emacs/10900/ para obtener una pregunta y respuestas similares.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.