как скопировать текст из emacs в другое приложение в linux

<p>когда я обрезаю (убиваю) текст в emacs 22.1.1 (в его собственном окне на x, в kde, на kubuntu), я не могу вставить (восстановить) его в любом другом приложении.</p>

<p>вставьте следующее в ваш файл <code>.emacs</code>:</p><pre><code>(setq x-select-enable-clipboard t) </code></pre>

<p>давайте будем осторожны с нашими определениями здесь</p><ul> <li><em>emacs copy</em> - это команда <code>kill-ring-save</code> (обычно связана с <kbd>m-w</kbd>).</li> <li>a <em>системная копия</em> это то, что вы обычно получаете от нажатия <kbd>c-c</kbd> (или выбрав "редактировать-> копировать" в окне приложения).</li> <li><em>x copy</em> - это "физически" выделение текста курсором мыши.</li> <li><em>emacs paste</em> - это команда <code>yank</code> (обычно связана с <kbd>c-y</kbd>).</li> <li>a <em>системная вставка</em> это то, что вы обычно получаете от нажатия <kbd>c-v</kbd> (или выбрав "редактировать-вставить" в окне приложения).</li> <li><em>x paste</em> - это нажатие "центральной кнопки мыши" (имитируется одновременным нажатием левой и правой кнопок мыши).</li> </ul><p>в моем случае (на gnome):</p><ul> <li>как emacs, так и системное копирование обычно работают с x paste.</li> <li>x-копия обычно работает с emacs-пастой.</li> <li> <p>чтобы системная копия работала с emacs-вставкой, а emacs-копия работала с системной вставкой, вам нужно добавить <code>(setq x-select-enable-clipboard t)</code> к вашему <code>.emacs</code>. или попробуй</p> <pre><code>meta-x set-variable ret x-select-enable-clipboard ret t </code></pre></li> </ul><p>я думаю, что это довольно стандартное современное поведение unix.</p><p>также важно отметить (хотя вы говорите, что используете emacs в отдельном окне), что когда emacs работает в консоли, он полностью отделен от системного буфера обмена и x: в этом случае вырезание и вставка передаются терминалом , например, "edit-> paste" в вашем терминальном окне должно действовать точно так же, как если бы вы вводили текст из буфера обмена в буфер emacs.</p>

<p>я вставляю это в мой .emacs:</p><pre><code>(setq x-select-enable-clipboard t) (setq interprogram-paste-function 'x-cut-buffer-or-selection-value) </code></pre><p>впоследствии у меня практически не было проблем с вырезанием и вставкой чего-либо из emacs в любое другое приложение x11 или gnome.</p><p>бонус: чтобы все это происходило в emacs без перезагрузки всего вашего .emacs, сделайте c-x c-e с курсором сразу после закрывающей части каждого из этих выражений в буфере .emacs.</p><p>удачи!</p>

<p>сложность копирования и вставки в emacs заключается в том, что вы хотите, чтобы он работал независимо от внутреннего kill/yank, и чтобы он работал как в терминале, так и в графическом интерфейсе. существуют надежные решения для терминала или графического интерфейса, но не для обоих. после установки xsel (например, <code>sudo apt-get install xsel</code>) вот что я делаю для копирования и вставки, чтобы объединить их:</p><pre><code>(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) </code></pre>

<p>я предполагаю, что под emacs вы подразумеваете emacs под x (то есть не внутри окна терминала).</p><p>есть два способа:</p><ol> <li>(относится только к unix os). выделите нужный текст с помощью мыши (это скопирует его в буфер обмена x), а затем нажмите среднюю кнопку мыши, чтобы вставить.</li> <li>выделите нужный текст, а затем "m-x clipboard-kill-ring-save" (обратите внимание, вы можете связать это с более простой клавишей). затем просто "edit-> paste" в вашем любимом приложении.</li> </ol><p>операции с буфером обмена доступны:</p><ul> <li>clipboard-kill-ring-save - скопировать выделение из emacs в буфер обмена</li> <li>clipboard-kill-region - вырезать выделение из emacs в буфер обмена</li> <li>clipboard-yank - вставить из буфера обмена в emacs</li> </ul>

<p>существует <a href="http://www.emacswiki.org/emacs/copyandpaste">статья emacswiki</a> , которая объясняет некоторые проблемы с копированием и вставкой в x и как настроить его для работы.</p>

<p>это работает с <code>m-w</code> на mac osx. просто добавьте в свой <strong>. emacs </strong> файл.</p><pre><code>(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) </code></pre><p>источник <a href="https://gist.github.com/the-kenny/267162">https://gist.github.com/the-kenny/267162</a> </p>

<p>приведенный ниже код, вдохновленный ответом @ russellstewart выше, добавляет поддержку x-primary и x-secondary, заменяет <code>region-active-p</code> на <code>use-region-p</code>, чтобы охватить случай пустой области, не возвращает молча, если xsel не был установлен (возвращает сообщение об ошибке ) и включает функцию "вырезать" (emacs cy, windows cx).</p><pre><code>(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) </code></pre>

<p>я использую следующее, основываясь на других ответах, чтобы копировать и вставлять <code>c-x c-w</code> и <code>c-x c-y</code> на mac и linux (если кто-то знает версию для windows, не стесняйтесь добавлять ее). обратите внимание, что в linux вам нужно будет установить xsel и xclip вместе с менеджером пакетов.</p><pre class="lang-lisp prettyprint-override"><code>;; 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))) </code></pre>

<p>хм, какую платформу и какую версию emacs вы используете? с gnu emacs 22.1.1 в windows vista он отлично работает для меня.</p><p>если, по какой-либо причине, вы делаете это из windows в linux через средство просмотра realvnc, убедитесь, что вы сначала запускаете "vncconfig -iconic" в окне linux .....</p>

<p>я всегда использую быструю вставку - перетащите выделение в emacs, нажмите среднюю кнопку мыши в окне цели.</p><p>(из ссылки на kate, я так понимаю, вы работаете в linux или подобном и, вероятно, используете emacs в x тем или иным способом.)</p>

<p>вы можете указать, какую платформу вы используете. это на linux, unix, macosx, windows, ms-dos?</p><p>я считаю, что для окон это должно работать. для macosx он будет добавлен в буфер обмена x-windows, который отличается от буфера обмена macosx. для linux это зависит от вашего вкуса оконного менеджера, но я полагаю, что x-windows справляется с этим в большинстве случаев.</p><p>поэтому, пожалуйста, уточните.</p>