如何将文本从Emacs复制到Linux上的另一个应用程序
当我在Emacs 22.1.1(在X,KDE,Kubuntu的自己的窗口)中剪切(杀死)文本时,我不能粘贴(抽出)到任何其他应用程序中。
在这里我们要定义一下我们的定义
- Emacs副本是命令
kill-ring-save
(通常绑定到Mw )。 - 系统拷贝是您通常按下Cc (或在应用程序窗口中select“编辑 – >拷贝”)得到的内容。
- X副本是用鼠标光标“物理”高亮显示文本。
- 一个Emacs粘贴是命令
yank
(通常绑定到Cy )。 - 系统粘贴是您通常从按下Cv (或在应用程序窗口中select“编辑 – 粘贴”)获得的内容。
- X粘贴按下“中心鼠标button”(通过同时按下鼠标左键和右键模拟)。
就我而言(在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剪贴板:在这种情况下剪切和粘贴是由terminal。 例如,terminal窗口中的“编辑 – >粘贴”应该像从剪贴板input文本到Emacs缓冲区一样。
将以下内容插入到.emacs
文件中:
(setq x-select-enable-clipboard t)
在Emacs中复制和粘贴的难点在于你希望它独立于内部的kill / yank工作,并且你希望它能够在terminal和gui中工作。 terminal或gui都有现有的强大解决scheme,但不是两者都有。 在安装好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)
我坚持这个在我的.emacs:
(setq x-select-enable-clipboard t) (setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
随后我从Emacs的任何东西中剪切和粘贴到任何其他的X11或Gnome应用程序基本没有任何问题。
奖金:为了让这些事情在Emacs中发生,而不必重新加载整个.emacs,使用光标恰好在.emacs缓冲区中每个expression式closures后执行Cx Ce。
祝你好运!
我假设你是Emacs下的X(即不是在terminal窗口内)的emacs。
有两种方法:
- (仅适用于unix操作系统)使用鼠标突出显示所需的文本(将其复制到X剪贴板),然后中键单击进行粘贴。
- 突出显示所需的文本,然后“Mx剪贴板杀死戒指保存”(注意,你可以将它绑定到一个更简单的键)。 然后只需在您最喜爱的应用程序中“编辑 – >粘贴”。
剪贴板操作可用:
- 剪贴板杀死铃声保存 – 从Emacs复制select到剪贴板
- 剪贴板杀死区域 – 剪切select从Emacs剪贴板
- 剪贴板 – 抽签 – 从剪贴板粘贴到Emacs
有一个EmacsWiki文章解释了在X下复制和粘贴的一些问题,以及如何configuration它的工作。
这适用于Mac OSX上的Mw
。 只需添加到您的.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)
下面的代码在上面的@ RussellStewart的答案的启发下,增加了对x-PRIMARY和x-SECONDARY的支持,用use-region-p
代替region-active-p
use-region-p
来覆盖空白区域的情况,如果xsel已经没有被安装(返回一个错误信息),并且包括一个“cut”function(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 "Cc Cw") 'my-cut-to-xclipboard) (global-set-key (kbd "Cc Mw") 'my-copy-to-xclipboard) (global-set-key (kbd "Cc Cy") 'my-paste-from-xclipboard)
嗯,你用的是什么平台和什么版本的emacs? 在Windows Vista上使用GNU Emacs 22.1.1,对我来说工作正常。
如果有的话,你是通过RealVNC查看器从windows到linux的,请确保你正在linux盒子上运行“vncconfig -iconic”…..
我总是使用快速粘贴 – 在emacs中拖动select,在目标窗口中点击鼠标中键。
(从凯特的参考,我认为你是在Linux或类似的,可能在X使用emacs的方式)。
您可能需要指定您正在使用的平台。 它是在Linux,Unix,马科斯,窗口,MS – DOS?
我相信,对于Windows应该工作。 对于MacOSX,它将被添加到x-windows剪贴板,这与macosx剪贴板不同。 对于Linux来说,这取决于你窗口pipe理器的风格,但是我相信x-windows在很多方面都能很好地处理它。
所以,请说明。
我所做的就是使用一个好的terminal工具(Windows上的PuTTY,Linux上的Konsole或terminal),它具有内置的复制function。
在PuTTY中,用鼠标突出显示所需的文本,然后将其粘贴到其他位置。 在PuTTY窗口中右键单击粘贴Windows复制/粘贴缓冲区的内容。
在Konsole或Linuxterminal中,突出显示所需内容,然后按Shift + Ctrl + C进行复制,按Shift + Ctrl + V进行粘贴。
在emacs的win32编译中,大多数情况下,延期文本都会将其放在复制/粘贴缓冲区中。
在Mac OS X上,Apple-key chortcuts正常工作,因为terminal陷阱它们。
在命令行上没有直接的方法,因为shell不会为每个应用程序维护一个复制/粘贴缓冲区。 bash 确实为自己维护了一个复制/粘贴缓冲区,并且在默认情况下,emacs ^ k / ^ y快捷键可以工作。