it-swarm-vi.tech

Cách sao chép văn bản từ Emacs sang ứng dụng khác trên Linux

Khi tôi cắt (giết) văn bản trong Emacs 22.1.1 (trong cửa sổ riêng của nó trên X, trong KDE, trên Kubfox), tôi không thể dán (yank) nó vào bất kỳ ứng dụng nào khác.

105
memius

Chèn phần sau vào tệp .emacs Của bạn:

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

Hãy cẩn thận với định nghĩa của chúng tôi ở đây

  • Một bản sao Emacs là lệnh kill-ring-save (thường bị ràng buộc với M-w).
  • A bản sao hệ thống là những gì bạn thường nhận được từ việc nhấn C-c (hoặc chọn "Chỉnh sửa-> Sao chép" trong cửa sổ ứng dụng).
  • Một bản sao X là văn bản tô sáng "vật lý" bằng con trỏ chuột.
  • Một Emacs paste là lệnh yank (thường được liên kết với C-y).
  • A dán hệ thống là những gì bạn thường nhận được từ việc nhấn C-v (hoặc chọn "Chỉnh sửa-Dán" trong cửa sổ ứng dụng).
  • Một X dán đang nhấn "nút chuột giữa" (mô phỏng bằng cách nhấn các nút chuột trái và chuột phải với nhau).

Trong trường hợp của tôi (trên Gnome):

  • Cả Emacs và bản sao hệ thống thường hoạt động với X paste.
  • Bản sao X thường hoạt động với dán Emacs.
  • Để làm cho bản sao hệ thống hoạt động với dán Emacs và sao chép Emacs hoạt động với dán hệ thống, bạn cần thêm (setq x-select-enable-clipboard t) cho bạn .emacs. Hay là thử

    META-X set-variable RET x-select-enable-clipboard RET t
    

Tôi nghĩ rằng đây là hành vi Unix hiện đại khá chuẩn.

Cũng cần lưu ý (mặc dù bạn nói rằng bạn đang sử dụng Emacs trong một cửa sổ riêng) rằng khi Emacs đang chạy trong bảng điều khiển, nó hoàn toàn tách khỏi hệ thống và các bảng tạm X: cắt và dán trong trường hợp đó được trung gian bởi thiết bị đầu cuối . Ví dụ: "Chỉnh sửa-> Dán" trong cửa sổ đầu cuối của bạn sẽ hoạt động chính xác như thể bạn đã nhập văn bản từ bảng ghi tạm vào bộ đệm Emacs.

118
Chris Conway

Tôi dán cái này trong .emacs của tôi:

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

Về cơ bản, sau đó tôi không gặp vấn đề gì khi cắt và dán qua lại từ bất cứ thứ gì trong Emacs cho bất kỳ ứng dụng X11 hoặc Gnome nào khác.

Phần thưởng: để có được những điều này xảy ra trong Emacs mà không phải tải lại toàn bộ .emacs của bạn, hãy thực hiện C-x C-e bằng con trỏ ngay sau khi kết hợp chặt chẽ từng biểu thức trong bộ đệm .emacs.

Chúc may mắn!

10
jfm3

Khó khăn khi sao chép và dán trong Emacs là bạn muốn nó hoạt động độc lập với kill/yank nội bộ và bạn muốn nó hoạt động cả trong terminal và gui. Có các giải pháp mạnh mẽ hiện có cho thiết bị đầu cuối hoặc gui, nhưng không phải cả hai. Sau khi cài đặt xsel (ví dụ: Sudo apt-get install xsel), đây là những gì tôi làm để sao chép và dán để kết hợp chúng:

(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

Tôi giả sử bởi emacs bạn có nghĩa là Emacs dưới X (tức là không nằm trong cửa sổ terminal).

Có hai cách:

  1. (Chỉ áp dụng cho unix OS) Đánh dấu văn bản bạn muốn bằng chuột (cái này sao chép nó vào bảng tạm X) và sau đó nhấp chuột giữa để dán.
  2. Đánh dấu văn bản mong muốn và sau đó "M-x clipboard-kill-ring-save" (lưu ý bạn có thể liên kết nó với một phím dễ dàng hơn). Sau đó, chỉ cần "Chỉnh sửa-> Dán" trong ứng dụng yêu thích của bạn.

Hoạt động Clipboard có sẵn:

  • clipboard-kill-ring-save - sao chép lựa chọn từ Emacs vào clipboard
  • clipboard-kill-area - cắt lựa chọn từ Emacs sang clipboard
  • clipboard-yank - dán từ clipboard vào Emacs
7
pdq

một bài viết EmacsWiki giải thích một số vấn đề với sao chép và dán dưới X và cách định cấu hình để hoạt động.

6
cschol

Điều này hoạt động với M-w trên Mac OSX. Chỉ cần thêm vào tệp . 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)

Nguồn https://Gist.github.com/the-kenny/267162

4
cevaris

Mã bên dưới, lấy cảm hứng từ câu trả lời của @ RussellStewart ở trên, thêm hỗ trợ cho x-PRIMARY và x-SECONDARY, thay thế region-active-p với use-region-p để bao quát trường hợp của một vùng trống, không âm thầm trả về nếu xsel chưa được cài đặt (trả về thông báo lỗi) và bao gồm chức năng "cắt" (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

Tôi sử dụng như sau, dựa trên các câu trả lời khác ở đây, để thực hiện C-x C-wC-x C-y được sao chép và dán trên cả Mac và Linux (nếu ai đó biết phiên bản dành cho Windows, vui lòng thêm nó). Lưu ý rằng trên Linux, bạn sẽ phải cài đặt xsel và xclip với trình quản lý gói của bạn.

;; 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

Hmm, bạn đang sử dụng nền tảng nào và phiên bản nào của emacs? Với GNU Emacs 22.1.1 trên Windows Vista, nó hoạt động tốt với tôi.

Nếu, trong mọi trường hợp, bạn đang thực hiện việc này từ windows sang linux thông qua trình xem RealVNC, hãy đảm bảo rằng bạn đang chạy "vncconfig -iconic" trên hộp linux trước tiên .....

0
kfh

Tôi luôn sử dụng dán nhanh - kéo lựa chọn trong emacs, nhấn nút chuột giữa trong cửa sổ mục tiêu.

(Từ tham chiếu đến kate, tôi cho rằng bạn đang dùng linux hoặc tương tự và có thể sử dụng emacs theo cách này hay cách khác.)

0
cannam

Bạn có thể muốn chỉ định nền tảng bạn đang sử dụng. Có phải trên linux, unix, macosx, windows, ms-dos?

Tôi tin rằng đối với windows nó nên hoạt động. Đối với MacOSX, nó sẽ được thêm vào bảng tạm x-windows, không giống với bảng tạm macosx. Đối với Linux, nó phụ thuộc vào sở thích của bạn về trình quản lý cửa sổ, nhưng tôi tin rằng x-windows xử lý nó theo cách tốt đẹp đối với hầu hết chúng.

Vì vậy, xin vui lòng ghi rõ.

0
Mats Fredriksson