emacsがコマンドラインでクリップボード共有をサポートするようにする

10877 ワード

1、ネット上で広く伝わるemacsとシステム剪断板を共有する方法は.Emacsファイルに追加
(setq x-select-enable-clipboard t)
この方法はグラフィックス化emacsにのみ有効であり、emacs-nwコマンドでemacsを開くと、コマンドラインの下でXのクリップボードにアクセスする権限がないため、コマンドラインでは無効です(http://unix.stackexchange.com/questions/72605/emacs-copy-and-paste).
2、第1点だからこそ、ネット上にはもう一つの方法が同時に伝わっている.
;;start設定クリップボード共有(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-eofproc))))(setq intererfeinterfer(defun-copy-from-osx()))(setq program-cut-function'paste-to-osx)(setq interprogram-paste-function 'copy-from-osx) ;;endクリップボード共有の設定
この方法は確かに利用できますが、中のpbpasteとpbcopyコマンドはlinuxではなくmacで実行されます.だからlinuxの下で等価なコマンドを見つけて置き換えるべきです.
3、linuxでのクリッピングボード操作コマンド
2種類見つかりました:xclipとxsel
この2つのコマンドlinuxは持参せず、インストールする必要があります.2つのコマンドの具体的な使用方法については説明しませんが、とにかくnicekはlinuxの下での構成に適していることをネット上で見つけました(http://hugoheden.wordpress.com/2009/03/08/copypaste-with-emacs-in-terminal/):
;; http://hugoheden.wordpress.com/2009/03/08/copypaste-with-emacs-in-terminal/
;; I prefer using the "clipboard" selection (the one the
;; typically is used by c-c/c-v) before the primary selection
;; (that uses mouse-select/middle-button-click)
(setq x-select-enable-clipboard t)

;; If emacs is run in a terminal, the clipboard- functions have no
;; effect. Instead, we use of xsel, see
;; http://www.vergenet.net/~conrad/software/xsel/ -- "a command-line
;; program for getting and setting the contents of the X selection"
(unless window-system
 (when (getenv "DISPLAY")
  ;; Callback for when user cuts
  (defun xsel-cut-function (text &optional push)
    ;; Insert text to temp-buffer, and "send" content to xsel stdin
    (with-temp-buffer
      (insert text)
      ;; I prefer using the "clipboard" selection (the one the
      ;; typically is used by c-c/c-v) before the primary selection
      ;; (that uses mouse-select/middle-button-click)
      (call-process-region (point-min) (point-max) "xsel" nil 0 nil "--clipboard" "--input")))
  ;; Call back for when user pastes
  (defun xsel-paste-function()
    ;; Find out what is current selection by xsel. If it is different
    ;; from the top of the kill-ring (car kill-ring), then return
    ;; it. Else, nil is returned, so whatever is in the top of the
    ;; kill-ring will be used.
    (let ((xsel-output (shell-command-to-string "xsel --clipboard --output")))
      (unless (string= (car kill-ring) xsel-output)
	xsel-output )))
  ;; Attach callbacks to hooks
  (setq interprogram-cut-function 'xsel-cut-function)
  (setq interprogram-paste-function 'xsel-paste-function)
  ;; Idea from
  ;; http://shreevatsa.wordpress.com/2006/10/22/emacs-copypaste-and-x/
  ;; http://www.mail-archive.com/[email protected]/msg03577.html
 ))

次はubuntuの下のクリップボード構造の推測です.
让 emacs 在命令行下支持剪切板共享_第1张图片