Сконфигурируйте emacs для вырезания и копирования текста в буфер обмена Mac OS X


16

Можно ли настроить emacsтак, чтобы я мог копировать / вырезать текст из emacs (версия терминала по умолчанию) и вставлять его где-нибудь еще (в программу X Window)?


Nitpick: вы говорите «Версия терминала по умолчанию», но режим работы по умолчанию для Emacs - использовать графический интерфейс, а не текстовый терминал. Может быть, вы имеете в виду древний /usr/bin/emacsисполняемый файл, который Apple поставляет вместе с OSX и который произвольно ограничен текстовым терминалом?
Стефан

Ответы:


4

Чтобы скопировать текущий регион в буфер обмена OS X, вы можете использовать

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

Обратное, копирование буфера вставки OS X в список уничтожений Emacs, не рекомендуется. Кольца уничтожения и буферы обмена - это очень разные структуры, и нет хорошего ответа на вопрос, что именно нужно делать, помещая буфер обмена в список уничтожений. Тем не менее, вы можете запустить pbpasteвручную, чтобы получить текущее содержимое буфера обмена.


Это не сработало для меня. Однако отмеченное решение в этом посте Emacs работает.
Галдер Замарреньо,

8

Добавьте это к ~/.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)

Если вы используете Emacs в iTerm 2, вы также можете переназначить комбинации клавиш в настройках:

Затем добавьте что-то вроде этого ~/.emacs:

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

Все еще лучший ответ. Благодарность! Примечание для iterm, чтобы создать эти «Действия», выберите «Send escape code», и вы опустите начальный «^ [.» (не работал с типом действия «Отправить текст»)
Jay

3

Вот решение по интеграции буфера обмена OS X в Emacs, разработанное Дэниелом Нельсоном: https://github.com/wesen/emacs/blob/master/pbcopy.el

Комментарии автора:

Позволяет kill-ring взаимодействовать с буфером обмена при запуске Emacs из терминала Mac OSX (без потери полной функциональности kill-ring). Все, что я сделал, это изменил xclip.elдля работы с pbcopyи pbpaste. Огромное спасибо Лео Шидай Лю, автору xclip.el.


1

Следующее просто работает, получил его отсюда :)

(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

Версия emacs, включенная в OS X, слишком старая, чтобы обеспечить эту функциональность.

К счастью, вы можете обновить emacs до версии, которая интегрирована с вашим буфером обмена здесь: http://emacsformacosx.com

Я считаю, что вы используете Ctrl+ Yдля вставки в Emacs, после обновления.


Ах - я забыл сказать - версия emacs, которую вы скачаете с этого сайта, является графической (то есть она не работает в Терминале). Для приложений в Терминале невозможно получить доступ к буферу обмена без взлома, который я больше не могу найти. : /
Файз Салим

2
pbcopyи pbpasteдо сих пор существуют и не являются хаки.

Это возможно, однако я предположил, что OP хочет использовать команды клавиатуры для копирования и вставки. Я хотел сказать, что терминальные приложения не могут использовать сочетания клавиш для копирования и вставки вместе с буфером обмена OS X без взлома.
Файз Салим

«Терминальные приложения не могут использовать сочетания клавиш для копирования и вставки вместе с буфером обмена OS X без хаков». Это, очевидно , не соответствует действительности, так pbcopyи pbpasteоба терминальные приложения; любое другое приложение терминала может делать то, что они делают, или просто вызывать их напрямую.

То, что я искал, это подключиться pbcopyк Emacs Cut & Copy. Является ли это возможным?
синтагма

0

Я нашел этот пост действительно полезным (определение 2 функций и назначение им ярлыков в вашем файле ~ / .emacs).

После добавления этих строк в ваш файл .emacs у вас не будет доступа к этим ярлыкам, пока вы не откроете новый сеанс оболочки (вкладка / окно). Пусть изменения будут применены.


0

Вы можете прозрачно получить такое взаимодействие с буфером обмена при запуске Emacs в текстовом терминале, включив xclip-modeпредоставляемый xclipпакетом, который вы можете установить из GNU ELPA (то есть через M-x package-list-packages RET).

Смотрите также /emacs/10900/ для похожих вопросов и ответов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.