オペレーティングシステムのクリップボードを追加してリングを強制終了する


25

多くの場合、インターネットからオペレーティングシステムのクリップボードにコードスニペットをコピーしています。次に、次の簡単な手順を実行します。

  1. Emacsウィンドウに切り替える
  2. コードを貼り付ける場所を見つける
  3. C-yyank)を使用して、コピーしたテキストを挿入します。

ただし、ステップ2にいる間に、何らかの形でkillコマンド(kill-wordまたはなど)を意図せずに使用していることが(残念なことに)時々発見kill-lineされます。リング。

他のアプリケーションからコピーされたテキストを常にキルリングに入れるようにする方法はありますか?

私はLinuxで最も頻繁に仕事をしていますが、WindowsおよびMac OS XでもEmacsを定期的に使用しているため、OSに依存しない答えが好まれます。


このリンクを提案できますか?ページ全体を閲覧すると、クリップボードとの間でコピー/貼り付けのさまざまな方法が表示されます
Nsukami _ 14年

@Nsukami_ありがとう。私はそれを消化しようとしますが、リンクされたページは、私がEmacsWikiで答えを探すのに飽きた理由の典型的な例です。elispハッカーの多くは、elispコードは自己文書化されており、コメントや機能や使用法についての説明は必要ないと考えているようです。私は通常、私が望んでいることをするかどうかを決定するためだけにコードをリバースエンジニアリングする時間はありません。
nispio

ハハ

回答:


31

あなたは、カスタマイズする必要がありますsave-interprogram-paste-before-killt。これは、クリップボードを貼り付ける前にemacsで何かを殺す場合に、クリップボードを殺人輪に押し込みます。関連するカスタマイズではyank-pop-change-selection、現在のヤンクをemacsでクリップボードにプッシュします。これらの両方が機能するには、どちらがデフォルトである必要がありますx-select-enable-clipboardgui-select-enable-clipboardemacs 25.1で置き換えられました)t

これがデフォルトでオフになっている理由は、簡単に交換されるクリップボードとは異なり、大量のデータがキルリングに不注意にプッシュされることを防ぐためです。


1
予想以上にクリーンで簡単。 save-interprogram-paste-before-kill私がしたいことを正確にやるようです!
nispio

私はemacs 26を使用してgui-select-enable-clipboardおり、ちょうどと呼ばれていselect-enable-clipboardます。
ルーンカーガード

3

別の解決策は、可能であればcliツールを使用することです。

  • Macでのpbcopy / pbpaste

  • Cygwinのgetclip / putclip

  • Linuxのxsel
  • GUI Emacsのx-clipboard(他の人が述べたように、フラグx-select-enable-clipboardをオンにする必要があります)。

このソリューションの利点は、クリップボードを常に使用できることです(たとえば、リモートsshの場合)。

私の答えには2つの部分があります。パート1では、クリップボードを操作する便利なツールをいくつか紹介します。パート2は元の質問に答えます(クリップボードをキルリングに保存します)。

パート1

以下のコードを〜/ .emacsに挿入します。

(setq *is-a-mac* (eq system-type 'darwin))
(setq *cygwin* (eq system-type 'cygwin) )
(setq *linux* (or (eq system-type 'gnu/linux) (eq system-type 'linux)) )
(defun copy-to-x-clipboard ()
  (interactive)
  (if (region-active-p)
      (progn
        (cond
         ((and (display-graphic-p) x-select-enable-clipboard)
          (x-set-selection 'CLIPBOARD (buffer-substring (region-beginning) (region-end))))
         (t (shell-command-on-region (region-beginning) (region-end)
                                     (cond
                                      (*cygwin* "putclip")
                                      (*is-a-mac* "pbcopy")
                                      (*linux* "xsel -ib")))
            ))
        (message "Yanked region to clipboard!")
        (deactivate-mark))
        (message "No region active; can't yank to clipboard!")))

(defun paste-from-x-clipboard()
  (interactive)
  (cond
   ((and (display-graphic-p) x-select-enable-clipboard)
    (insert (x-selection 'CLIPBOARD)))
   (t (shell-command
       (cond
        (*cygwin* "getclip")
        (*is-a-mac* "pbpaste")
        (t "xsel -ob"))
       1))
   ))

(defun my/paste-in-minibuffer ()
  (local-set-key (kbd "M-y") 'paste-from-x-clipboard)
  )

(add-hook 'minibuffer-setup-hook 'my/paste-in-minibuffer)

パート2

以下のコードを〜/ .emacsに挿入し、今後は「Mx paste-from-clipboard-and-cc-kill-ring」を使用して貼り付けます。

(defun paste-from-clipboard-and-cc-kill-ring ()
  "paste from clipboard and cc the content into kill ring"
  (interactive)
  (let (str)
    (with-temp-buffer
      (paste-from-x-clipboard)
      (setq str (buffer-string)))
    ;; finish the paste
    (insert str)
    ;; cc the content into kill ring at the same time
    (kill-new str)
    ))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.