EmacsからOS Xクリップボードにテキストをコピーします


25

Emacsを通常のGUIモードではなくテキストターミナルで実行する場合、でリージョンの開始をアクティブにしてEmacsにコピーしC-SPC、次に必要なものを選択してからを実行できますM-w

この方法でコピーされた領域をOSXクリップボードで使用してWebページに貼り付ける方法はありますか(明らかに、GUIモードでEmacsを実行する以外)。

別のショートカットを作成することに興味はありません。理想的には、モジュールをインストールする必要はありません。

私はこの投稿を見、受け入れられた答えを試しましたが、それは上で期待するように動作しないようです。

他のアイデアはありますか?


おい、質問はほぼ3歳で、答えられました
ガルダーザマレーニョ

回答:


33

EmacsからOS Xクリップボードにコピーします。

地域を選択してください M-| pbcopy RET

OS XクリップボードからEmacsに貼り付けます:

C-u M-| pbpaste RET (現在のリージョンが存在する場合は置き換えます)


説明:

M-|run shell-command-on-regionは、名前が示すとおり、現在の領域をシェルコマンドにパイプします。C-u M-|同じことを行いますが、現在の領域をstdout実行中のコマンドの領域に置き換えます。

pbcopyそしてpbpaste、システムのクリップボードにアクセスするためのOS Xユーティリティです。


1
質問に答える以外に、あなたの答えは、Amazingからemacsからシェルコマンドを実行する方法を教えてくれました。
andreskwan

20

ここからコピーされた次のものが機能します

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

ここでの言い回しは後方に思える
ジョードンビオンド

1
悪のモードでは、この休憩vimish貼付行動
フェリックスD.

@FelixD .: xclip-mode同じ問題に苦しんでいますか?
ステファン

emacs.stackexchange.com/questions/50485/…で説明されているように、マルチバイト文字をコピーして貼り付けると、Emacs26でこれが壊れているようです
silencej

9

Emacsを「通常の方法」で(つまり、GUIアプリケーションとして)使用する場合、デフォルトですでにそれを行っているはずです。ターミナルエミュレーター内でEmacsを使用する場合、実際にはデフォルトでそれを行う方法はわかりませんがxclip、GNU ELPAからパッケージをインストールし、xclip-modeEmacsにGNU / LinuxとOSX。


xclipOSXで仕事を?私はそこに見てきたもの、それはX11で動作するように設計されているようだから、見るポスト
ギャルダーZamarreño

1
xclip.elパッケージには、使用するように拡張されましたpbpaste
ステファン

何らかの理由でmacOSでxclipを使用すると、サーバーモードのターミナルemacs(通常のインスタンスとしてではなく)がフリーズします。
rien333

あなたは、直接私にまたは経由(バグとして報告してもらえM-x report-emacs-bug
ステファン・

3

Stefanが言ったように、グラフィカルEmacsアプリケーションはデフォルトでそれを行うべきです。

テキスト端末では、次のような関数を使用することもできます。

(defun pbcopy ()
  (interactive)
  (let ((deactivate-mark t))
    (call-process-region (point) (mark) "pbcopy")))

(defun pbpaste ()
  (interactive)
  (call-process-region (point) (if mark-active (mark) (point)) "pbpaste" t t))

(defun pbcut ()
  (interactive)
  (pbcopy)
  (delete-region (region-beginning) (region-end)))

そうでない場合を除きます。emacsの中に20年後、同じPB ....私は実際にいくつかの共通と正気地、石のどこかで設定があったことを望む
ニコラ・

1

以下は、現在のバッファーの内容をクリップボードにコピーする.emacsファイルに入れることができる簡単なelisp関数です。何も選択する必要はありません。すべてをコピーします。コードは短く、一目瞭然です。

(defun xclip ()
(interactive)
(shell-command (concat "cat " (buffer-file-name (window-buffer (minibuffer-selected-window))) " | pbcopy")))

emacsをロードまたはリロードした後、Mx xclipで呼び出します。
ジュマー

OPはバッファー全体をクリップボードにコピーするように要求しなかったため、これは要求されたことを行いません。残りに関しては、これは他の人がすでに言ったことを単に複製するようです。
ステファン

これがトピックから外れていると思われる場合、私は謝罪します。Googleからこのページに移動したところ、「テキストをクリップボードemacsにコピー」した最初の結果でした。質問のタイトルは「テキストをEmacsからOS Xクリップボードにコピーする」です。そのため、ここで検索結果を取得する方法を簡単に確認できます。投稿された質問がその質問のスーパーセットであるフレーズに当てはまると思います。私は以前にStackExchangeの回答を訪れましたが、簡単な回答が得られなかったとき、特に何千人もの人々が質問をしていることを知っていたのでイライラしていました。
ジュマー

0

チェックアウトclipboard-kill-regionclipboard-yank。これらはから来ていmenu-bar.elます。

領域が強調表示されたら、clipboard-kill-regionを使用して、ペーストバッファーとシステムクリップボードの両方の領域を削除できます。clipboard-yankは、現在システムクリップボードにあるものをすべて「貼り付け」ます。


あなたの答えを広げてください。
ダン

私はこれらのコマンドを使用してemacsから何かをコピーしようとしましたが、Emacsの外部のどこかにコピーするために外部から利用することはできませんでした。
ガルダーザマレーニョ

@GalderZamarreñoそれはEmacsで私のために働いており、OSXで働いています。
-bitops

0

GalderZamarreñoの答えは素晴らしいですが、それは悪putモードでの悪のような振る舞いを壊します。そのため、私はそれを少し下に適合させました。もっと良くなると確信していますが、それは私のために仕事をします。改善を提案すること自由に感じなさい:

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

---->新しいコード

  (defun clipboard-on ()
    (interactive)
    (setq interprogram-cut-function 'paste-to-osx)
    (setq interprogram-paste-function 'copy-from-osx))
  (defun clipboard-off ()
    (interactive)
    (setq interprogram-cut-function 'gui-select-text)
    (setq interprogram-paste-function 'gui-selection-value))
  (global-set-key (kbd "C-c C-p") 'clipboard-on)
  (global-set-key (kbd "C-c C-y") 'clipboard-off))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.