Интеграция Emacs копировать / вставить с Системой копировать / вставить

У меня есть (cua-mode t) в моем.emacs, так что Cc - это копия, а Cv - это вставка, как и большинство других программ на моем рабочем столе (Ubuntu, Gnome, Linux). Однако Emacs, похоже, не использует буфер буфера обмена / копирования с другими программами.

Например, если я Cc в Firefox, я могу вставить SCv в терминал или Cv, чтобы вставить в gedit. Тем не менее, если я Cv (или Cy) в Emacs, я не получаю то, что я скопировал из Firefox.

Есть ли способ сделать эту работу? Есть ли другая команда, которую я могу использовать для доступа к системному буферу копирования-вставки?

5 ответов

Решение

Это работает на моей машине:

;; CUA OS copypasta even in ncurses mode
(case system-type
  ('darwin (unless window-system
             (setq interprogram-cut-function
                   (lambda (text &optional push)
                     (let* ((process-connection-type nil)
                            (pbproxy (start-process "pbcopy" "pbcopy" "/usr/bin/pbcopy")))
                       (process-send-string pbproxy text)
                       (process-send-eof pbproxy))))))
  ('gnu/linux (progn
                (setq x-select-enable-clipboard t)
                (defun xsel-cut-function (text &optional push)
                  (with-temp-buffer
                    (insert text)
                    (call-process-region (point-min) (point-max) "xsel" nil 0 nil "--clipboard" "--input")))
                (defun xsel-paste-function()

                  (let ((xsel-output (shell-command-to-string "xsel --clipboard --output")))
                    (unless (string= (car kill-ring) xsel-output)
                      xsel-output )))
                (setq interprogram-cut-function 'xsel-cut-function)
                (setq interprogram-paste-function 'xsel-paste-function))))

У меня такая же проблема. Я добавил это в мой файл.emacs:

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

Теперь Ctrl-C и Ctrl-v между Emacs и другими приложениями работают нормально. Источник: Форумы Ubuntu

Увидеть clipboard-yank а также clipboard-kill-region в разделе руководства буфера обмена.

Может быть, эта страница EmacsWiki поможет, особенно раздел, где clipboard-kill-region, clipboard-kill-ring-save, а также clipboard-yank упоминаются.

Я решаю эту проблему с autocutsel, который работает с emacs и остальная часть моей системы Ubuntu тоже.

  autocutsel - keep the X clipboard and the cutbuffer in sync

Я использую следующие команды (запускается один раз, обычно вызывается механизмом запуска моего оконного менеджера, или ~/.xsession):

autocutsel -fork
autocutsel -fork -selection PRIMARY

Первый экземпляр autocutsel делает следующее:

autocutsel отслеживает изменения в выделенном буфере буфера и буфере обмена на сервере [X11]. Когда буфер обмена изменяется, он обновляет буфер буфера. Когда режущий буфер изменяется, ему принадлежит выбор буфера обмена. Выбор буфера и буфера обмена всегда синхронизирован.

Однако обычно есть третий буфер обмена, называемый PRIMARY, который второй экземпляр autocutsel используется для синхронизации с двумя другими.

Преимущества этого состоят в том, что три основных буфера обмена унифицированы, так что вставка текущего выделения посредством копирования / вставки по среднему щелчку или в стиле CUA с помощью CTRL-C и CTRL-V все работают вместе.

Основным недостатком этого подхода является то, что любое автоматическое выделение текста (например, двойной щелчок для выделения слова в emacs или щелчок по значку BlockQuote в поле редактирования Stackru) мгновенно стирает ваш буфер копирования. Чтобы обойти это, я использую регистратор истории буфера обмена, такой как glipper, который также удобно записывает все содержимое буфера обмена и позволяет мне восстановить потерянное содержимое буфера обмена в таких обстоятельствах. Это может занять некоторое привыкание и хорошо работает для меня. В качестве альтернативы вы можете поэкспериментировать с -pause опция, которая ждет некоторый период времени, прежде чем сделать выбор, который может быть достаточно длинным, чтобы отменить выделение или удалить любой автоматически выбранный текст. Я не смог получить результаты, которые работали достаточно хорошо для меня, хотя.

Обратите внимание, что это решение не требует специальных emacs Конфигурация, которую я использую при включенном режиме cua.

Другие вопросы по тегам