集成Emacs复制/粘贴与系统复制/粘贴

我在我的.emacs中有(cua-mode t),所以Cc就是复制,Cv就像我桌面上的其他程序(Ubuntu,Gnome,Linux)一样粘贴。 但是,Emacs似乎没有与其他程序共享剪贴板/复制缓冲区。

例如,如果我在火狐浏览器中,我可以将SCv粘贴到terminal或Cv中粘贴到gedit中。 但是,如果我在emacs中的Cv(或Cy),我不明白我从Firefox复制的东西。

有什么办法可以做这个工作吗? 是否有另一个命令我可以用来访问系统的复制粘贴缓冲区?

Solutions Collecting From Web of "集成Emacs复制/粘贴与系统复制/粘贴"

这在我的机器上工作:

;; 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)))) 

我有同样的问题。 我把这个添加到我的.emacs文件中:

 (setq x-select-enable-clipboard t) (setq interprogram-paste-function 'x-cut-buffer-or-selection-value) 

现在,Emacs和其他应用程序之间的Ctrl-C和Ctrl-V正常工作。 来源: Ubuntu论坛

请参阅手册剪贴板部分中的clipboard-kill-region clipboard-yankclipboard-kill-region

也许这个EmacsWiki页面将有所帮助,尤其是在提到 clipboard-kill-regionclipboard-kill-ring-saveclipboard-yank 阴谋的部分。

我用autocutsel解决了这个问题, autocutselemacs以及我的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中的单词,或单击StackOverflow编辑字段中的BlockQuote图标)将立即删除您的复制缓冲区。 为了解决这个问题,我使用了一个剪贴板历史记录器,例如glipper ,它也方便地记录所有的剪贴板内容,并允许我在这种情况下找回丢失的剪贴板内容。 它可以采取一些习惯,并为我工作得很好。 或者,您可以尝试使用-pause选项,该选项在进行选择之前等待一段时间,这可能足够长以取消选择或删除任何自动选择的文本。 尽管如此,我还是无法获得足够好的结果。

请注意,此解决方案不需要任何特殊的emacs配置,我使用cua模式启用。