Подтвердить что ты не робот

Интегрируйте копию/вставку 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.

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

4b9b3361

Ответ 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.