Налаштуйте emacs для вирізання та копіювання тексту у буфер обміну Mac OS X


16

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


Nitpick: ви кажете "Версія терміналу за замовчуванням", але режим Emacs за замовчуванням функціонує для використання GUI, а не текстового терміналу. Можливо, ви маєте на увазі стародавній /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, щоб створити ці "Дії", виберіть "Надіслати код евакуації", і ви пропустите провідний "^ [." (не працював із типом дії "Надіслати текст")
Jay

3

Ось рішення про інтеграцію буфера обміну OS X в Emacs 'kill-ring від Daniel Nelson: https://github.com/wesen/emacs/blob/master/pbcopy.el

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

Дозволяє взаємодія дзвінка для взаємодії з буфером обміну при запуску Emacs з терміналу Mac OSX (не втрачаючи повноцінного функціонального кільця). Все, що я зробив, було модифіковано 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, яка входить до ОС X, занадто стара, щоб забезпечити цю функціональність.

На щастя, ви можете оновити emacs до версії, інтегрованої до буфера обміну тут: http://emacsformacosx.com

Я вважаю, що ви використовуєте Ctrl+, Yщоб вставити в emacs після оновлення.


Ах - я забув сказати - версія emacs, яку ви завантажуєте з цього сайту, є графічною (тобто вона не працює в Терміналі). Програми в Терміналі не можуть отримати доступ до буфера обміну без злому, якого я вже не можу знайти. : /
Faiz Saleem

2
pbcopyі pbpasteдосі існують і не є хаками.

Це можливо, проте я припускав, що ОП хоче використовувати команди клавіатури для копіювання та вставки. Що я хотів сказати, це те, що програми Terminal не можуть використовувати комбінації клавіш для копіювання та вставлення разом із буфером обміну OS X без злому.
Faiz Saleem

"Програми терміналів не можуть використовувати комбінації клавіш для копіювання та вставлення разом із буфером обміну OS X без злому." Це, очевидно, не відповідає дійсності, оскільки це pbcopyі pbpasteобидва термінальні програми; будь-який інший додаток для терміналів може робити те, що вони роблять, або просто телефонувати їм безпосередньо.

Що я шукав - це підключення pbcopyдо вирізання та копіювання Emacs. Це можливо?
синтагма

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.