web-dev-qa-db-ja.com

LinuxでEmacsから別のアプリケーションにテキストをコピーする方法

Emacs 22.1.1(X上の独自のウィンドウ、KDE、Kubuntu)でテキストをカット(キル)すると、他のアプリケーションに貼り付け(ヤンク)できません。

105
memius

以下を.emacsファイルに挿入します。

(setq x-select-enable-clipboard t)
88
memius

ここでの定義に注意しましょう

  • Emacsコピーは、コマンドkill-ring-save(通常は M-w)。
  • システムコピーは、通常、 C-c (または、アプリケーションウィンドウで[編集]-> [コピー]を選択します)。
  • Xコピーは、「物理的に」マウスカーソルでテキストを強調表示します。
  • Emacs pasteyankコマンドです(通常は C-y)。
  • システムペーストは通常、押すことで得られるものです C-v (または、アプリケーションウィンドウで[編集-貼り付け]を選択します)。
  • X pasteは、「中央のマウスボタン」を押しています(左右のマウスボタンを同時に押すことでシミュレートされます)。

私の場合(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バッファーにテキストを入力した場合とまったく同じように動作します。

118
Chris Conway

私はこれを私の.emacsに貼り付けます:

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

その後、Emacsから他のX11またはGnomeアプリケーションへのカットアンドペーストは基本的に問題ありません。

おまけ:.emacs全体をリロードせずにこれらのことをEmacsで行うには、.emacsバッファー内の各式の閉じ括弧の直後にカーソルを置いてC-x C-eを実行します。

がんばろう!

10
jfm3

Emacsでのコピーと貼り付けの難しさは、内部のキル/ヤンクとは独立して動作させたいことです。また、ターミナルと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)
10
RussellStewart

Emacsでは、Xの下でEmacsを意味している(つまり、ターミナルウィンドウ内ではない)と想定しています。

2つの方法があります。

  1. (Unix OSのみに適用)マウスで目的のテキストを強調表示し(Xクリップボードにコピーします)、中央クリックして貼り付けます。
  2. 目的のテキストをハイライトし、「M-x clipboard-kill-ring-save」(これを簡単なキーにバインドできることに注意してください)。次に、お気に入りのアプリで[編集]、[貼り付け]の順にクリックします。

利用可能なクリップボード操作:

  • clipboard-kill-ring-save-Emacsからクリップボードに選択範囲をコピーします
  • clipboard-kill-region-選択範囲をEmacsからクリップボードに切り取ります
  • clipboard-yank-クリップボードからEmacsに貼り付ける
7
pdq

EmacsWikiの記事 があり、Xでのコピー&ペーストに関するいくつかの問題と、動作するように設定する方法が説明されています。

6
cschol

これは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)

ソース https://Gist.github.com/the-kenny/267162

4
cevaris

上記の@RussellStewartの答えに触発された以下のコードは、x-PRIMARYおよびx-SECONDARYのサポートを追加し、region-active-p with use-region-pは、空の領域のケースをカバーし、xselがインストールされていない場合はエラーを返さず(エラーメッセージを返します)、「カット」機能(emacs C-y、windows C-x)を含みます。

(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)
1
user1404316

ここでの他の回答に基づいて、C-x C-wおよびC-x C-y 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)))
0
asmeurer

うーん、どのプラットフォームとどのバージョンのemacsを使用していますか? GNU Windows VistaでEmacs 22.1.1を使用すると、うまく動作します。

万が一、RealVNCビューアを使用してWindowsからLinuxにこれを行っている場合は、まずLinuxボックスで「vncconfig -iconic」を実行していることを確認してください。

0
kfh

私は常にクイックペーストを使用します。emacsで選択範囲をドラッグし、ターゲットウィンドウで中マウスボタンを押します。

(ケイトへの参照から、私はあなたがLinuxまたは同様のものであり、おそらく何らかの方法でXでemacsを使用していると考えています。)

0
cannam

使用しているプラ​​ットフォームを指定することもできます。 Linux、UNIX、macosx、windows、ms-dosにありますか?

私は窓のためにそれが動作するはずだと信じています。 MacOSXの場合は、x-windowsクリップボードに追加されますが、これはmacosxクリップボードとは異なります。 Linuxの場合、それはウィンドウマネージャーのフレーバーに依存しますが、ほとんどの場合、x-windowsはそれを素晴らしい方法で処理すると信じています。

そのため、指定してください。

0