Когда я вырезаю (убиваю) текст в Emacs 22.1.1 (в собственном окне на X, в KDE, на Kubuntu), я не могу вставить (yank) его в любое другое приложение.
Как скопировать текст из Emacs в другое приложение в Linux
Ответ 1
Вставьте следующее в свой .emacs
файл:
(setq x-select-enable-clipboard t)
Ответ 2
Будьте осторожны с нашими определениями здесь
- Копия Emacs - это команда
kill-ring-save
(обычно привязанная к M-w). - Системная копия - это то, что вы обычно получаете от нажатия C-c (или выбора "Правка → Копировать" в окне приложения).
- Копия X "физически" выделяет текст курсором мыши.
- Папка Emacs - это команда
yank
(обычно привязанная к C-y). - Системная паста - это то, что вы обычно получаете от нажатия C-v (или выбора "Edit-Paste" в окне приложения).
- Вставка X нажимает "центральную кнопку мыши" (имитируется нажатием левой и правой кнопок мыши вместе).
В моем случае (в GNOME):
- Оба Emacs и системная копия обычно работают с пастой X.
- X-копия обычно работает с пастой Emacs.
-
Чтобы сделать копию системы с помощью вставки Emacs и копирования Emacs с системной пастой, вам нужно добавить
(setq x-select-enable-clipboard t)
в.emacs
. Или попробуйтеMETA-X set-variable RET x-select-enable-clipboard RET t
Я думаю, что это довольно стандартное современное поведение Unix.
Также важно отметить (хотя вы говорите, что используете Emacs в отдельном окне), когда Emacs работает на консоли, он полностью отделен от системы, а X-буфера обмена: вырезание и вставка в этом случае опосредуется по терминалу. Например, "Редактировать- > Вставить" в окне терминала должно действовать точно так же, как если бы вы ввели текст из буфера обмена в буфер Emacs.
Ответ 3
Я использую это в своих .emacs:
(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
Впоследствии у меня в принципе нет проблем с резанием и вставкой из любого в Emacs в любое другое приложение X11 или Gnome.
Бонус: чтобы эти вещи произошли в Emacs, не перезагружая все ваши .emacs, сделайте C-x C-e с помощью курсора сразу после закрытого парирования каждого из этих выражений в буфере .emacs.
Удачи!
Ответ 4
Трудность копирования и вставки в Emacs заключается в том, что вы хотите, чтобы он работал независимо от внутреннего kill/yank, и вы хотите, чтобы он работал как в терминале, так и в gui. Существуют существующие надежные решения для терминалов или gui, но не для обоих. После установки xsel (например, sudo apt-get install xsel
), вот что я делаю для копирования и вставки для их объединения:
(defun copy-to-clipboard ()
(interactive)
(if (display-graphic-p)
(progn
(message "Yanked region to x-clipboard!")
(call-interactively 'clipboard-kill-ring-save)
)
(if (region-active-p)
(progn
(shell-command-on-region (region-beginning) (region-end) "xsel -i -b")
(message "Yanked region to clipboard!")
(deactivate-mark))
(message "No region active; can't yank to clipboard!")))
)
(defun paste-from-clipboard ()
(interactive)
(if (display-graphic-p)
(progn
(clipboard-yank)
(message "graphics active")
)
(insert (shell-command-to-string "xsel -o -b"))
)
)
(global-set-key [f8] 'copy-to-clipboard)
(global-set-key [f9] 'paste-from-clipboard)
Ответ 5
Я предполагаю, что emacs означает Emacs под X (т.е. не внутри терминального окна).
Существует два способа:
- (относится только к операционной системе unix) Выделите требуемый текст с помощью мышь (это копирует его на X буфер обмена), а затем нажмите паста.
- Выделите нужный текст, а затем "M-x clipboard-kill-ring-save" (обратите внимание, что вы можете связать это с более простым ключ). Затем просто "Edit- > Paste" в ваше любимое приложение.
Доступны операции с буфером обмена:
- буфер обмена-kill-ring-save - копировать выбор из Emacs в буфер обмена
- clipboard-kill-region - разрезать выбор из Emacs в буфер обмена
- clipboard-yank - вставить из буфер обмена в Emacs
Ответ 6
Существует статья EmacsWiki, в которой объясняются некоторые проблемы с копированием и вставкой под X и как настроить ее работу.
Ответ 7
Это работает с M-w
на Mac OSX. Просто добавьте файл .emacs.
(defun copy-from-osx ()
(shell-command-to-string "pbpaste"))
(defun paste-to-osx (text &optional push)
(let ((process-connection-type nil))
(let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
(process-send-string proc text)
(process-send-eof proc))))
(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx)
Ответ 8
В приведенном ниже коде, на который ссылается @RussellStewart, добавляется поддержка x-PRIMARY и x-SECONDARY, заменяется region-active-p
на use-region-p
, чтобы покрыть случай пустой области, не возвращается молча, если xsel не имеет (возвращает сообщение об ошибке) и включает функцию "вырезания" (emacs Cy, windows Cx).
(defun my-copy-to-xclipboard(arg)
(interactive "P")
(cond
((not (use-region-p))
(message "Nothing to yank to X-clipboard"))
((and (not (display-graphic-p))
(/= 0 (shell-command-on-region
(region-beginning) (region-end) "xsel -i -b")))
(error "Is program `xsel' installed?"))
(t
(when (display-graphic-p)
(call-interactively 'clipboard-kill-ring-save))
(message "Yanked region to X-clipboard")
(when arg
(kill-region (region-beginning) (region-end)))
(deactivate-mark))))
(defun my-cut-to-xclipboard()
(interactive)
(my-copy-to-xclipboard t))
(defun my-paste-from-xclipboard()
"Uses shell command `xsel -o' to paste from x-clipboard. With
one prefix arg, pastes from X-PRIMARY, and with two prefix args,
pastes from X-SECONDARY."
(interactive)
(if (display-graphic-p)
(clipboard-yank)
(let*
((opt (prefix-numeric-value current-prefix-arg))
(opt (cond
((= 1 opt) "b")
((= 4 opt) "p")
((= 16 opt) "s"))))
(insert (shell-command-to-string (concat "xsel -o -" opt))))))
(global-set-key (kbd "C-c C-w") 'my-cut-to-xclipboard)
(global-set-key (kbd "C-c M-w") 'my-copy-to-xclipboard)
(global-set-key (kbd "C-c C-y") 'my-paste-from-xclipboard)
Ответ 9
Хм, какая платформа и какая версия emacs вы используете? С GNU Emacs 22.1.1 в Windows Vista он отлично работает для меня.
Если вы случайно делаете это из окон в Linux через средство просмотра RealVNC, убедитесь, что вы сначала запускаете "vncconfig -iconic" в окне linux.....
Ответ 10
Я всегда использую быстрый выбор перетаскивания в emacs, нажмите среднюю кнопку мыши в целевом окне.
(Из ссылки на kate, я так понимаю, вы на Linux или похожи и, вероятно, используете emacs в X так или иначе.)
Ответ 11
Возможно, вы захотите указать, какую платформу вы используете. Это на linux, unix, macosx, windows, ms-dos?
Я считаю, что для окон это должно работать. Для MacOSX он будет добавлен в буфер обмена x-windows, что не то же самое, что и буфер обмена macosx. Для Linux это зависит от вашего вкуса оконного менеджера, но я считаю, что x-windows отлично справляется с большинством из них.
Итак, пожалуйста, укажите.
Ответ 12
Я использую следующее, основываясь на других ответах, для копирования и вставки Cx Cw
и Cx Cy
на Mac и Linux (если кто-то знает версию для Windows, не стесняйтесь добавлять ее). Обратите внимание, что в Linux вам нужно будет установить xsel и xclip вместе с менеджером пакетов.
;; Commands to interact with the clipboard
(defun osx-copy (beg end)
(interactive "r")
(call-process-region beg end "pbcopy"))
(defun osx-paste ()
(interactive)
(if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
(call-process "pbpaste" nil t nil))
(defun linux-copy (beg end)
(interactive "r")
(call-process-region beg end "xclip" nil nil nil "-selection" "c"))
(defun linux-paste ()
(interactive)
(if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
(call-process "xsel" nil t nil "-b"))
(cond
((string-equal system-type "darwin") ; Mac OS X
(define-key global-map (kbd "C-x C-w") 'osx-copy)
(define-key global-map (kbd "C-x C-y") 'osx-paste))
((string-equal system-type "gnu/linux") ; linux
(define-key global-map (kbd "C-x C-w") 'linux-copy)
(define-key global-map (kbd "C-x C-y") 'linux-paste)))
Ответ 13
Я использую хороший терминал (PuTTY в Windows, Konsole или Terminal на Linux), который имеет встроенные средства копирования.
В PuTTY вы выделяете текст, который хотите с помощью мыши, а затем вставляете его в другое место. Щелчок правой кнопкой мыши в окне PuTTY вставляет содержимое буфера копирования/вставки Windows.
В Konsole или Terminal в Linux вы выделяете то, что хотите, затем нажмите Shift + Ctrl + C для копирования и Shift + Ctrl + V для вставки.
В компиляторе emacs win32 yanking text помещает его в буфер копирования/вставки. большую часть времени.
В Mac OS X хосты Apple-key работают нормально, потому что Terminal их ловушки.
Нет прямого способа сделать это в командной строке, потому что оболочка не поддерживает буфер копирования/вставки для каждого приложения. bash поддерживает буфер копирования/вставки для себя, и по умолчанию работают ярлыки emacs ^ k/^ y.