Emacs'tan OS X panosuna metin kopyalama


25

Emacs'ı normal GUI modu yerine bir metin terminalinde çalıştırdığımda, bir bölgenin başlangıcını etkinleştirerek Emacs'ta kopyalayabilirim C-SPCve sonra ne istediğimi seçip sonra ne yapabilirim M-w.

Bir bölgeyi bu şekilde kopyalamanın bir yolu OSX panosunda mevcut olması bir web sayfasına yapıştırmak için kullanılabilir mi (açıkça Emacs'ı GUI modunda çalıştırmak dışında)?

Bunu yapmak için farklı bir kısayol oluşturmakla ilgilenmiyorum ve ideal olarak herhangi bir modül kurulmasını gerektirmemesi gerekiyor.

Gördüğüm bu yazı ve kabul cevap denedik ama yukarıda beklediğiniz şekilde çalışmıyor gibi görünüyor eser yok.

Başka fikrin var mı?


Dostum, soru neredeyse 3 yaşında ve cevaplandı
Galder Zamarreño

Yanıtlar:


33

Emacs'tan OS X panosuna kopyalayın :

bölge seç sonra M-| pbcopy RET

OS X panosundan Emacs'a yapıştırın :

C-u M-| pbpaste RET (varsa, mevcut bölgeyi değiştirir)


Açıklama:

M-|çalışan shell-command-on-regionadı olarak bir kabuk komutuna boruları geçerli bölge anlamına gelen. C-u M-|aynı şeyi yapar, ancak geçerli bölgeyi stdoutçalıştırılan komutun yerine getirir .

pbcopyve pbpastesistem panosuna erişmek için OS X yardımcı programlarıdır.


1
Soruyu cevaplamanın yanı sıra, cevabınız bana emacs den kabuk komutlarını nasıl çalıştıracağımı öğretti, İnanılmaz.
andreskwan

20

Aşağıdaki sadece çalışır, buradan kopyalanır

(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)

Buradaki kelime dağarcığı geriye doğru görünüyor
Jordon Biondo,

1
Kötülük modu ile, bu vimish yapıştırma davranışını kırar
Felix D.

@FelixD .: xclip-modeaynı problemden mi muzdarip?
Stefan


9

Emacs'ı "normal yol" (örneğin bir GUI uygulaması olarak) kullanıyorsanız, bunu zaten varsayılan olarak yapması gerekir. Eğer bir terminal emülatöründe Emac kullanıyorsanız, o zaman gerçekten nasıl yapılacağını bilmez, ancak xclippaketi GNU ELPA'dan kurabilir ve daha sonra Emacs'a xclip-modehem GNU / Linux hem de OSX.


xclipOSX ile çalışır mı ? Orada gördüklerime göre, X11 ile çalışmak üzere tasarlanmış gibi görünüyor, yazıya
Galder Zamarreño

1
xclip.elpaket kullanmak uzatıldı pbpaste.
Stefan,

Sunucu modunda terminal emacs (normalde olduğu gibi değil) nedense macOS altında xclip kullandığımda donuyor.
rien333

Bunu bir hata olarak rapor edebilir misiniz (doğrudan bana mı yoksa üzerinden M-x report-emacs-bugmi?)
Stefan

3

Stefan'ın dediği gibi, grafiksel Emacs uygulamaları bunu varsayılan olarak yapmalıdır.

Bir metin terminalinde, başka bir seçenek de bu gibi fonksiyonları kullanmaktır:

(defun pbcopy ()
  (interactive)
  (let ((deactivate-mark t))
    (call-process-region (point) (mark) "pbcopy")))

(defun pbpaste ()
  (interactive)
  (call-process-region (point) (if mark-active (mark) (point)) "pbpaste" t t))

(defun pbcut ()
  (interactive)
  (pbcopy)
  (delete-region (region-beginning) (region-end)))

Olmadığı zamanlar hariç. 20 yıl sonra, emacs aynı pb .... Gerçekten bir yere taş koymak, bazı ortak ve aklı başında bir zemin olsaydı
nicolas

1

İşte .emacs dosyasına, içinde bulunduğunuz tamponun içeriğini panoya kopyalayabileceğiniz basit bir elisp işlevi. Bir şey seçmek zorunda değilsin, hepsini kopyalar. Kod kısa ve oldukça açıklayıcı.

(defun xclip ()
(interactive)
(shell-command (concat "cat " (buffer-file-name (window-buffer (minibuffer-selected-window))) " | pbcopy")))

Emacs yükledikten veya yeniden yükledikten sonra Mx xclip ile çağırın.
jumar

OP, tüm tamponu panoya kopyalamak istemedi, bu yüzden isteneni yapmadı. Gerisi gelince, bu sadece başkalarının zaten söylediklerini çoğaltmak gibi görünüyor.
Stefan

Bu konu dışı görünüyorsa özür dilerim. Bu sayfaya, Google’dan "metni pano panolarına kopyala" için ilk sonucun bulunduğu yere gittim. Soru, "Emacs’tan OS X panosuna metin kopyalama" başlığı altında yer almaktadır. Gönderilen soruların ifade edilme biçimine, onun yerine geçenlere uygulanabilir olduğunu düşünüyorum. Daha önce StackExchange cevaplarını ziyaret ettim ve basit bir cevap verilemediğinde, özellikle binlerce insanın soruyu sorduğunu bildiğimde sinir bozuldu, bu yüzden benim için fayda sağlayabilecekleri için benim ekleyeceğimi düşündüm.
55'te

0

Check out clipboard-kill-regionve clipboard-yank. Bunlar geliyor menu-bar.el.

Bir bölge vurgulandığında, bölgeyi hem yapıştırma tamponunuza hem de sistem panosuna öldürmek için clipboard-kill-region kullanabilirsiniz. clipboard-yank şu anda sistem panosunda olanları "yapıştırır".


Lütfen cevabınızı genişletin.
Dan

Bu komutları kullanarak emacs'tan bir şey kopyalamaya çalıştım ve harici olarak Emacs dışında bir yere kopyalamak için mevcut değildim.
Galder Zamarreño

@ GalderZamarreño benim için Emacs'ta çalışıyor ve ben OSX'im.
bitops,

0

Galder Zamarreño'nun cevabı harika, ancak kötülük tarzındaki putkötülük davranışını kırıyor . Bu yüzden onu biraz aşağıya uyarladım - daha iyi olabileceğinden eminim, ama bu işi benim için yapıyor. İyileştirmeler önermek için çekinmeyin:

(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))))

----> Yeni Kod

  (defun clipboard-on ()
    (interactive)
    (setq interprogram-cut-function 'paste-to-osx)
    (setq interprogram-paste-function 'copy-from-osx))
  (defun clipboard-off ()
    (interactive)
    (setq interprogram-cut-function 'gui-select-text)
    (setq interprogram-paste-function 'gui-selection-value))
  (global-set-key (kbd "C-c C-p") 'clipboard-on)
  (global-set-key (kbd "C-c C-y") 'clipboard-off))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.