Интегрируйте копию/вставку Emacs с помощью System copy/paste
У меня есть (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.
Есть ли способ сделать эту работу? Есть ли другая команда, которую я могу использовать для доступа к буферу копирования-вставки системы?
Ответы
Ответ 1
Это работает на моей машине:
;; 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))))
Ответ 2
У меня была та же проблема. Я добавил это в файл .emacs:
(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
Теперь Ctrl-C и Ctrl-v между Emacs и другими приложениями работают нормально.
Источник: Форумы Ubuntu
Ответ 3
См. clipboard-yank
и clipboard-kill-region
в разделе clipboard руководства.
Ответ 4
Возможно, эта страница EmacsWiki поможет, особенно раздел, где указаны clipboard-kill-region
, clipboard-kill-ring-save
и clipboard-yank
.
Ответ 5
Я решаю эту проблему с autocutsel
, которая работает с emacs
и остальной частью моей системы Ubuntu.
autocutsel - keep the X clipboard and the cutbuffer in sync
Я использую следующие команды (запускается один раз, обычно вызывается механизмом "запуска" моего оконного менеджера или ~/.xsession
):
autocutsel -fork
autocutsel -fork -selection PRIMARY
Первый экземпляр autocutsel
выполняет следующие действия:
autocutsel отслеживает изменения в буфере обмена сервера [X11] и выборе буфера обмена. Когда буфер обмена изменен, он обновляет бубнер. Когда cutbuffer изменен, ему принадлежит выбор буфера обмена. выбор буфера и буфера обмена всегда синхронизированы.
Однако обычно используется третий буфер обмена, называемый PRIMARY
, который второй экземпляр autocutsel
используется для синхронизации с другими двумя.
Преимущества этого заключаются в том, что три основных буфера обмена унифицированы, так что вставка текущего выделения с помощью скопирования/вставки CUA с помощью CTRL-C и CTRL-V будет работать вместе.
Основной недостаток этого подхода заключается в том, что любое автоматическое выделение текста (например, двойное нажатие, чтобы выделить слово в emacs или щелчок на значке BlockQuote в поле редактирования StackOverflow) немедленно уничтожит ваш буфер копирования. Чтобы обойти это, я использую регистратор истории буфера обмена, такой как glipper
, который также удобно записывает все содержимое буфера обмена и позволяет мне получать потерянное содержимое буфера обмена в таких обстоятельствах. Это может немного потренироваться и хорошо работать для меня. В качестве альтернативы вы можете поэкспериментировать с опцией -pause
, которая ждет некоторого периода времени, прежде чем принимать выбор, который может быть достаточно длинным, чтобы отменить выбор или удалить любой выделенный текст. Я не смог получить результаты, которые работали достаточно хорошо для меня.
Обратите внимание, что это решение не требует специальной конфигурации emacs
, которую я использую с включенным режимом cua-mode.