Odpowiedzi:
Uważajmy na nasze definicje tutaj
kill-ring-save
(zwykle związanyM-w ).yank
(zwykle związany C-y).W moim przypadku (w GNOME):
Aby kopiowanie systemowe działało z wklejaniem Emacsa, a kopiowanie Emacsa z wklejaniem systemowym, musisz dodać (setq x-select-enable-clipboard t)
plik .emacs
. Albo spróbuj
META-X set-variable RET x-select-enable-clipboard RET t
Myślę, że jest to całkiem standardowe zachowanie współczesnego Uniksa.
Ważne jest również, aby zauważyć (chociaż mówisz, że używasz Emacsa w osobnym oknie), że kiedy Emacs działa w konsoli, jest on całkowicie oddzielony od systemu i X-clipboardów: wycinanie i wklejanie w tym przypadku jest pośredniczone przez terminal . Na przykład „Edycja-> Wklej” w oknie terminala powinno działać dokładnie tak, jakbyś wpisał tekst ze schowka do bufora Emacsa.
META-X set-variable RET select-enable-clipboard RET t
lub(setq select-enable-clipboard t)
Wstaw do swojego .emacs
pliku:
(setq x-select-enable-clipboard t)
emacs -nw
, używam własnych skrótów terminala; Shift-Ctrl-X, aby wyciąć (zabić) tekst i Shift-Ctrl-C, aby skopiować.
emacs -nw
do poziomo podzielonych okien tmux.
Wklejam to w moim .emacs:
(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
Następnie w zasadzie nie mam problemów z wycinaniem i wklejaniem czegokolwiek w Emacsie do jakiejkolwiek innej aplikacji X11 lub Gnome.
Bonus: aby te rzeczy działy się w Emacs bez konieczności przeładowywania całego pliku .emacs, wykonaj Cx Ce kursorem tuż po zamknięciu każdego z tych wyrażeń w buforze .emacs.
Powodzenia!
Symbol’s function definition is void: x-cut-buffer-or-selection-value
Trudność z kopiowaniem i wklejaniem w Emacsie polega na tym, że chcesz, aby działał niezależnie od wewnętrznego zabijania / szarpania i chcesz, aby działał zarówno w terminalu, jak i w interfejsie użytkownika. Istnieją solidne rozwiązania dla terminala lub interfejsu GUI, ale nie obu. Po zainstalowaniu xsel (np. sudo apt-get install xsel
), Oto co robię, aby skopiować i wkleić, aby je połączyć:
(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)
Zakładam, że przez emacs masz na myśli Emacsa pod X (tj. Nie w oknie terminala).
Istnieją dwa sposoby:
Dostępne operacje na schowku:
Jest artykuł EmacsWiki, który wyjaśnia niektóre problemy z kopiowaniem i wklejaniem pod X oraz jak go skonfigurować do pracy.
Działa to M-w
w systemie Mac OSX. Po prostu dodaj do swojego pliku .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)
Poniższy kod, zainspirowany @ odpowiedź RussellStewart jest powyżej, dodaje wsparcie dla X-primary i X-średnie, zastępuje region-active-p
z use-region-p
pokryć przypadku pustego obszaru, nie powróci cicho jeśli Xsel nie został zainstalowany (zwraca komunikat o błędzie), i zawiera funkcję "wytnij" (emacs Cy, windows Cx).
(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)
Używam następujących, na podstawie innych odpowiedzi tutaj, do tworzenia C-x C-w
i C-x C-y
kopiowania i wklejania zarówno na Macu, jak i na Linuksie (jeśli ktoś zna wersję dla Windowsa, możesz ją dodać). Zwróć uwagę, że w systemie Linux będziesz musiał zainstalować xsel i xclip z menedżerem pakietów.
;; 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)))
xclip
do wklejania zawartości schowka, używając xclip -o
. Może to być przydatne dla osób, które już mają xclip
i nie chcą instalować innego programu do kopiowania i wklejania.
Możesz chcieć określić, jakiej platformy używasz. Czy działa na Linuksie, Uniksie, Macosxie, Windowsie, MS-DOS?
Uważam, że w przypadku okien powinno działać. W przypadku MacOSX zostanie dodany do schowka x-windows, co nie jest tym samym, co schowek macosx. W przypadku Linuksa zależy to od twojego stylu menedżera okien, ale uważam, że x-windows radzi sobie z tym w przyjemny sposób na większości z nich.
Więc proszę sprecyzować.
Używam dobrego narzędzia terminalowego (PuTTY w systemie Windows, Konsole lub Terminal w systemie Linux), które ma wbudowane funkcje kopiowania.
W PuTTY zaznaczasz wybrany tekst myszą, a następnie wklejasz go w innym miejscu. Kliknięcie prawym przyciskiem myszy w oknie programu PuTTY powoduje wklejenie zawartości buforu kopiuj / wklej systemu Windows.
W Konsoli lub Terminalu w systemie Linux podświetlasz to, co chcesz, a następnie naciśnij Shift + Ctrl + C, aby skopiować i Shift + Ctrl + V, aby wkleić.
W kompilacji emacsa win32, yankowanie tekstu umieszcza go w buforze kopiuj / wklej .. przez większość czasu.
W systemie Mac OS X czortony z klawiszem Apple działają dobrze, ponieważ Terminal je przechwytuje.
Nie ma bezpośredniego sposobu, aby to zrobić w linii poleceń, ponieważ powłoka nie utrzymuje buforu kopiuj / wklej dla każdej aplikacji. bash robi zachować kopię / wklej bufor dla siebie, a domyślnie emacs ^ K / ^ y skróty pracy.