如何将文本从Emacs复制到Linux上的另一个应用程序

mem*_*ius 106 emacs copy-paste

当我在Emacs 22.1.1中剪切(杀死)文本时(在X中,在KDE中,在Kubuntu上的自己的窗口中),我无法在任何其他应用程序中粘贴(猛拉)它.

Chr*_*way 119

我们在这里要小心我们的定义

  • 一个Emacs的拷贝是命令kill-ring-save(通常结合于M-w).
  • 一个系统副本是你通常从按下获得C-c(或选择"编辑- >复制"在应用程序窗口).
  • 一个X拷贝是"身体",突出用鼠标光标文字.
  • 一个Emacs的膏是命令yank(通常结合于C-y).
  • 一个系统膏是你通常从按下获得C-v(或选择在应用程序窗口中的"编辑-粘贴").
  • 一个X膏被按下"中心鼠标按钮"(通过按压左和右鼠标按钮一起模拟的).

就我而言(在GNOME上):

  • Emacs和系统副本通常都可以使用X paste.
  • X副本通常适用于Emacs粘贴.
  • 要使系统复制与Emacs粘贴和Emacs复制一起使用系统粘贴,您需要添加(setq x-select-enable-clipboard t)到您的.emacs.或者试试

    META-X set-variable RET x-select-enable-clipboard RET t
    
    Run Code Online (Sandbox Code Playgroud)

我认为这是非常标准的现代Unix行为.

同样重要的是要注意(虽然你说你在一个单独的窗口中使用Emacs),当Emacs在控制台中运行时,它完全脱离系统和X剪贴板:在这种情况下剪切和粘贴由终端调解.例如,终端窗口中的"编辑 - >粘贴"应该与将剪贴板中的文本键入Emacs缓冲区的方式完全相同.

  • [这是令人困惑的术语](http://unix.stackexchange.com/questions/158082/what-are-system-copy-and-paste).您称之为"X复制/粘贴"的标准且不那么令人困惑的名称是X主要选择.你称之为"系统复制/粘贴"的是X剪贴板. (7认同)

mem*_*ius 90

将以下内容插入您的.emacs文件:

(setq x-select-enable-clipboard t)
Run Code Online (Sandbox Code Playgroud)

  • 很好,很简单,但这在终端不起作用.没有理由为什么同一个快捷方式在终端和空闲窗口中都不起作用,下面的一些答案同时解决了这两个问题. (5认同)
  • 当您在水平拆分的 tmux 窗口中运行 `emacs -nw` 时,这将不起作用。 (4认同)
  • 不罗嗦,告诉你你需要知道什么.很好的答案. (3认同)
  • 当我运行“emacs -nw”时,我使用终端自己的快捷方式;Shift-Ctrl-X 剪切(删除)文本,Shift-Ctrl-C 复制。 (2认同)

jfm*_*fm3 10

我把它粘在我的.emacs中:

(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
Run Code Online (Sandbox Code Playgroud)

我随后在从Emacs中的任何东西到任何其他X11或Gnome应用程序中来回切换和粘贴时基本没有问题.

额外:要让Emacs中的这些事情发生而不必重新加载整个.emacs,请在.emacs缓冲区中每个表达式的紧密关注之后用光标执行Cx Ce.

祝好运!

  • 此解决方案适用于X窗口中的emacs,即,如果您在命令行中运行emacs,则emacs在窗口内运行,您需要的是:http://stackoverflow.com/questions/5288213/how-can-i-paste- emacs的选定区域 (2认同)

Rus*_*art 10

在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)
Run Code Online (Sandbox Code Playgroud)


pdq*_*pdq 7

我假设你通过emacs表示X下的Emacs(即不在终端窗口内).

有两种方法:

  1. (仅适用于unix OS)用鼠标突出显示所需文本(将其复制到X剪贴板),然后单击鼠标中键粘贴.
  2. 突出显示所需的文本,然后"Mx clipboard-kill-ring-save"(请注意,您可以将其绑定到更简单的键).然后在您喜欢的应用程序中"编辑 - >粘贴".

可用的剪贴板操作:

  • clipboard-kill-ring-save - 从Emacs到剪贴板的复制选择
  • clipboard-kill-region - 从Emacs到剪贴板的选择
  • clipboard-yank - 从剪贴板粘贴到Emacs


csc*_*hol 6

一篇EmacsWiki文章解释了在X下复制和粘贴的一些问题以及如何配置它来工作.


cev*_*ris 5

这适用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)
Run Code Online (Sandbox Code Playgroud)

来源https://gist.github.com/the-kenny/267162