Интеграция 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.