Emacs 22.1.1(X上の独自のウィンドウ、KDE、Kubuntu)でテキストをカット(キル)すると、他のアプリケーションに貼り付け(ヤンク)できません。
以下を.emacs
ファイルに挿入します。
(setq x-select-enable-clipboard t)
ここでの定義に注意しましょう
kill-ring-save
(通常は M-w)。yank
コマンドです(通常は C-y)。私の場合(GNOMEの場合):
システムコピーを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バッファーにテキストを入力した場合とまったく同じように動作します。
私はこれを私の.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を実行します。
がんばろう!
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)
Emacsでは、Xの下でEmacsを意味している(つまり、ターミナルウィンドウ内ではない)と想定しています。
2つの方法があります。
利用可能なクリップボード操作:
EmacsWikiの記事 があり、Xでのコピー&ペーストに関するいくつかの問題と、動作するように設定する方法が説明されています。
これは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)
上記の@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)
ここでの他の回答に基づいて、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)))
うーん、どのプラットフォームとどのバージョンのemacsを使用していますか? GNU Windows VistaでEmacs 22.1.1を使用すると、うまく動作します。
万が一、RealVNCビューアを使用してWindowsからLinuxにこれを行っている場合は、まずLinuxボックスで「vncconfig -iconic」を実行していることを確認してください。
私は常にクイックペーストを使用します。emacsで選択範囲をドラッグし、ターゲットウィンドウで中マウスボタンを押します。
(ケイトへの参照から、私はあなたがLinuxまたは同様のものであり、おそらく何らかの方法でXでemacsを使用していると考えています。)
使用しているプラットフォームを指定することもできます。 Linux、UNIX、macosx、windows、ms-dosにありますか?
私は窓のためにそれが動作するはずだと信じています。 MacOSXの場合は、x-windowsクリップボードに追加されますが、これはmacosxクリップボードとは異なります。 Linuxの場合、それはウィンドウマネージャーのフレーバーに依存しますが、ほとんどの場合、x-windowsはそれを素晴らしい方法で処理すると信じています。
そのため、指定してください。