Yanıtlar:
Buradaki tanımlarımıza dikkat edelim
kill-ring-save
(genellikle bağlıdır M-w).yank
(genellikle bağlı C-y).Benim durumumda (GNOME'da):
Sistem kopyasının Emacs pastası ile çalışması ve Emacs kopyasının sistem yapıştırması ile çalışması (setq x-select-enable-clipboard t)
için .emacs
. Veya Dene
META-X set-variable RET x-select-enable-clipboard RET t
Bence bu oldukça standart modern Unix davranışı.
Ayrıca (Emacs'i ayrı bir pencerede kullandığınızı söyleseniz de), Emacs bir konsolda çalışırken, sistemden ve X panolarından tamamen boşandığını unutmamak önemlidir: bu durumda kes ve yapıştır, terminal tarafından gerçekleştirilir. . Örneğin, terminal pencerenizdeki "Düzenle-> Yapıştır", tıpkı panodaki metni Emacs arabelleğine yazmışsınız gibi davranmalıdır.
META-X set-variable RET select-enable-clipboard RET t
veya(setq select-enable-clipboard t)
Aşağıdakileri .emacs
dosyanıza ekleyin :
(setq x-select-enable-clipboard t)
emacs -nw
, terminalin kendi kısayollarını kullanıyorum; Metni kesmek (öldürmek) için Shift-Ctrl-X ve kopyalamak için Shift-Ctrl-C.
emacs -nw
Yatay olarak bölünmüş tmux pencerelerinin içinde koştuğunuzda bu işe yaramayacak .
Bunu .emac'lerime yapıştırıyorum:
(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
Daha sonra, Emacs'taki herhangi bir şeyden başka herhangi bir X11 veya Gnome uygulamasına kesme ve yapıştırma konusunda temelde hiçbir sorun yaşamadım.
Bonus: Tüm .emac'larınızı yeniden yüklemenize gerek kalmadan bunları Emacs'de gerçekleştirmek için, .emacs arabelleğindeki bu ifadelerin her birinin yakın parantezinden hemen sonra imleçle Cx Ce yapın.
İyi şanslar!
Symbol’s function definition is void: x-cut-buffer-or-selection-value
Emacs'de kopyalayıp yapıştırmanın zorluğu, dahili öldürme / yank'tan bağımsız çalışmasını istemeniz ve hem terminalde hem de gui'de çalışmasını istemenizdir. Terminal veya gui için mevcut sağlam çözümler var, ancak ikisi birden değil. Xsel'i (örn. sudo apt-get install xsel
) Yükledikten sonra , bunları birleştirmek için kopyalayıp yapıştırmak için yaptığım şey:
(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 ile X altında Emacs'i kastettiğinizi varsayıyorum (yani bir terminal penceresi içinde değil).
İki yol var:
Mevcut pano işlemleri:
Orada bir EmacsWiki makale kopya & yapıştırarak X altında ve nasıl işe yapılandırmak için bazı sorunlar açıklanır.
Bu M-w
, Mac OSX'te çalışır . .Emacs dosyanıza eklemeniz yeterlidir .
(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)
Aşağıdaki kod, @ RussellStewart'ın yukarıdaki yanıtından esinlenerek, x-PRIMARY ve x-SECONDARY için destek ekler, boş bir bölge durumunu kapsayacak şekilde değiştirilir region-active-p
, use-region-p
xsel kurulmamışsa sessizce geri dönmez (bir hata mesajı verir), ve bir "kesme" işlevi içerir (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)
Ben yapmak için, burada diğer yanıtlara dayalı aşağıdaki kullanmak C-x C-w
ve C-x C-y
olmak kopyası ile (birisi Windows için sürüm biliyorsa eklemek için çekinmeyin) Mac ve Linux hem de yapıştırın. Linux'ta paket yöneticinizle xsel ve xclip'i kurmanız gerekeceğini unutmayı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)))
xclip
kullanarak pano içeriğini yapıştırmak için de kullanabilirsiniz xclip -o
. Bu, xclip
hem kopyalamayı hem de yapıştırmayı yapmak için halihazırda başka bir programa sahip olan ve istemeyen kişiler için yararlı olabilir .
Hmm, hangi platformu ve hangi emacs sürümünü kullanıyorsunuz? Windows Vista'daki GNU Emacs 22.1.1 ile benim için iyi çalışıyor.
Şans eseri, bunu bir RealVNC görüntüleyici aracılığıyla Windows'tan linux'a yapıyorsanız, önce linux kutusunda "vncconfig -iconic" komutunu çalıştırdığınızdan emin olun .....
Hangi platformu kullandığınızı belirtmek isteyebilirsiniz. Linux, unix, macosx, windows, ms-dos'da mı?
Windows için çalışması gerektiğine inanıyorum. MacOSX için, macosx panosuyla aynı şey olmayan x-windows panosuna eklenecektir. Linux için, pencere yöneticisi tarzınıza bağlıdır, ancak x-windows'un bunu çoğu için iyi bir şekilde ele aldığına inanıyorum.
Lütfen belirtiniz.
Yaptığım şey, yerleşik kopyalama olanaklarına sahip iyi bir terminal aracı (Windows'ta PuTTY, Linux'ta Konsole veya Terminal) kullanmaktır.
PuTTY'de, istediğiniz metni fare ile vurgular ve ardından başka bir yere yapıştırırsınız. PuTTY penceresine sağ tıklandığında Windows kopyala / yapıştır arabelleğinin içeriği yapıştırılır.
Linux'ta Konsole veya Terminal'de, istediğinizi vurgular, ardından kopyalamak için Shift + Ctrl + C ve yapıştırmak için Shift + Ctrl + V tuşlarına basın.
Win32 emacs derlemesinde, yanking metni onu kopyala / yapıştır arabelleğine koyar .. çoğu zaman.
Mac OS X'te, Apple tuşu chortcut'ları iyi çalışıyor çünkü Terminal onları yakaladı.
Komut satırında bunu yapmanın doğrudan bir yolu yoktur çünkü kabuk her uygulama için bir kopyala / yapıştır tamponu tutmaz. bash , kendisi için bir kopyala / yapıştır arabelleği tutar ve varsayılan olarak emacs ^ k / ^ y kısayolları çalışır.