17 votos

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

¿Puedo configurar emacs, de forma que pueda copiar/cortar texto desde emacs (versión Terminal por defecto) y pegarlo en otro lugar (en un programa de X Window)?

0 votos

Nitpick: usted dice "versión de Terminal por defecto", pero el defecto modo de funcionamiento de Emacs es utilizar la GUI en lugar de la terminal de texto. ¿Quizás se refiere al antiguo /usr/bin/emacs ejecutable que viene incluido por Apple con OSX y que está arbitrariamente limitado a la terminal de texto?

11voto

Agrega 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 usas Emacs en iTerm 2, también puedes remapear combinaciones de teclas en las preferencias:

Luego agrega algo como esto a ~/.emacs:

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

0 votos

Todavía es la mejor respuesta. ¡Gracias! Nota para iterm, para crear estas "Acciones" elige "Enviar código de escape" y omite el "^[." al principio. (no funcionó con el tipo de acción "Enviar texto")

3voto

Brian Puntos 26

Aquí tienes una solución para integrar el portapapeles de OS X en el kill-ring de Emacs por Daniel Nelson: https://github.com/wesen/emacs/blob/master/pbcopy.el

Comentarios del autor:

Permite que el kill-ring interactúe con el portapapeles cuando se ejecuta Emacs desde un terminal de Mac OSX (sin perder la funcionalidad completa del kill-ring). Todo lo que hice fue modificar xclip.el para trabajar con pbcopy y pbpaste. Los verdaderos agradecimientos van a Leo Shidai Liu, el autor de xclip.el.

1voto

Sharath Kumar Puntos 114

Lo siguiente simplemente funciona, lo obtuve de 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))

0 votos

¿Podrías añadir un enlace a la publicación original?

0voto

Danilo Brambilla Puntos 868

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

Afortunadamente puedes actualizar emacs a una versión que esté integrada con tu portapapeles aquí: http://emacsformacosx.com

Creo que deberías usar Ctrl+Y para pegar en emacs, después de la actualización.

0 votos

Ah, me olvidé de decirlo: la versión de emacs que descargarás desde ese sitio es gráfica (es decir, no se ejecuta en la Terminal). Es imposible para las aplicaciones en la Terminal acceder al portapapeles sin un truco, que ya no puedo encontrar. :/

2 votos

pbcopy y pbpaste todavía existen y no son hacks.

0 votos

Eso es posible, sin embargo, asumí que el OP quiere usar comandos de teclado para copiar y pegar. Lo que quise decir fue que las aplicaciones de Terminal no pueden usar atajos de teclado para copiar y pegar junto con el portapapeles de OS X sin "hacks".

0voto

Metallica Puntos 111

Encontré este post realmente útil (definiendo 2 funciones y asignándoles accesos directos en tu archivo ~/.emacs).

Después de añadir esas líneas a tu archivo .emacs, no tendrás acceso a esos accesos directos hasta que abras una nueva sesión de terminal (pestaña/ventana). Deja que los cambios se apliquen.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X