Интеграция Emacs копировать / вставить с Системой копирования / вставки - PullRequest
32 голосов
/ 09 июля 2010

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

Например, если я C-c в Firefox, я могу S-C-v вставить в терминал или C-v вставить в gedit. Однако, если я использую C-v (или C-y) в emacs, я не получаю то, что скопировал из Firefox.

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

Ответы [ 5 ]

27 голосов
/ 08 мая 2012

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

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

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

15 голосов
/ 10 июля 2010

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

12 голосов
/ 03 июля 2014

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

;; 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))))
4 голосов
/ 10 июля 2010

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

0 голосов
/ 15 июля 2016

Я решаю эту проблему с помощью 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 в поле редактирования StackOverflow) мгновенно стирает ваш буфер копирования.Чтобы обойти это, я использую регистратор истории буфера обмена, такой как glipper, который также удобно записывает все содержимое буфера обмена и позволяет мне извлекать потерянное содержимое буфера обмена в таких обстоятельствах.Это может занять немного привыкания и хорошо работает для меня.В качестве альтернативы вы можете поэкспериментировать с параметром -pause, который ждет некоторый период времени, прежде чем делать выбор, который может быть достаточно длинным, чтобы отменить выбор или удалить любой автоматически выбранный текст.Я не смог получить результаты, которые работали достаточно хорошо для меня.

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

...