Skonfiguruj emacsa do wycinania i kopiowania tekstu do schowka Mac OS X.

16

Czy mogę skonfigurować emacs, aby móc kopiować / wycinać tekst z emacsa (domyślna wersja terminala) i wklejać go gdzie indziej (do programu X Window)?

syntagma
źródło
Nitpick: mówisz „domyślna wersja terminala”, ale domyślnym trybem działania Emacsa jest użycie GUI zamiast terminala tekstowego. Może masz na myśli starożytny /usr/bin/emacsplik wykonywalny, który Apple łączy z OSX i który jest arbitralnie ograniczony do terminala tekstowego?
Stefan

Odpowiedzi:

4

Aby skopiować bieżący region do schowka OS X, możesz użyć

(shell-command-on-region (region-beginning) (region-end) "pbcopy")

Odwrotne kopiowanie bufora wklejania OS X do pierścienia zabijania Emacsa nie jest zalecane. Pierścienie zabijania i schowki to bardzo różne struktury i nie ma dobrej odpowiedzi na to, co dokładnie powinno zrobić wepchnięcie schowka do pierścienia zabijania. Mimo to możesz uruchomić pbpasteręcznie, aby uzyskać bieżącą zawartość schowka.


źródło
To nie działało dla mnie. Oznaczone rozwiązanie w tym poście Emacs działa jednak.
Galder Zamarreño
8

Dodaj to do ~/.emacs:

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

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

(global-set-key (kbd "C-c c") 'pbcopy)
(global-set-key (kbd "C-c v") 'pbpaste)
(global-set-key (kbd "C-c x") 'pbcut)

Jeśli używasz Emacsa w iTerm 2, możesz również mapować kombinacje klawiszy w preferencjach:

Następnie dodaj coś takiego do ~/.emacs:

(global-set-key (kbd "<f13> c") 'pbcopy)
(global-set-key (kbd "<f13> v") 'pbpaste)
(global-set-key (kbd "<f13> x") 'pbcut)
Lri
źródło
Nadal najlepsza odpowiedź. Dzięki! Uwaga dla iterm, aby utworzyć te „Akcje”, wybierz „Wyślij kod ucieczki” i pomiń wiodące „^ [.” (nie działał z typem akcji „Wyślij tekst”)
Jay
3

Oto rozwiązanie pozwalające zintegrować Schowek OS X z zabójczym pierścieniem Emacsa autorstwa Daniela Nelsona: https://github.com/wesen/emacs/blob/master/pbcopy.el

Komentarze autora:

Włącza funkcję kill-ring do interakcji ze schowkiem podczas uruchamiania Emacsa z terminala Mac OSX (bez utraty pełnej funkcjonalności kill-ring). Wszystko, co zrobiłem, to zmodyfikowałem xclip.eldo pracy z pbcopyi pbpaste. Prawdziwe podziękowania należą się Leo Shidai Liu, autorowi pliku xclip.el.

ristohietal
źródło
1

Poniższe po prostu działa, mam to stąd :)

(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))
Galder Zamarreño
źródło
Czy możesz dodać link do oryginalnego postu?
Vincent
0

Wersja emacsa zawarta w systemie OS X jest zbyt stara, aby zapewnić tę funkcjonalność.

Na szczęście możesz zaktualizować emacsa do wersji zintegrowanej ze schowkiem tutaj: http://emacsformacosx.com

Uważam, że po aktualizacji używasz Ctrl+ Ydo wklejania emacsa.

Faiz Saleem
źródło
Ach - zapomniałem powiedzieć - wersja emacsa, którą pobierzesz z tej strony, jest graficzna (tzn. Nie działa w terminalu). Aplikacje w terminalu nie mają dostępu do schowka bez włamania, którego nie mogę już znaleźć. : /
Faiz Saleem
2
pbcopyi pbpastenadal istnieją i nie są hackami.
Jest to możliwe, ale założyłem, że OP chce używać poleceń klawiatury do kopiowania i wklejania. Chciałem powiedzieć, że aplikacje terminalowe nie mogą używać skrótów klawiaturowych do kopiowania i wklejania wraz ze schowkiem OS X bez włamań.
Faiz Saleem
„Aplikacje terminalowe nie mogą używać skrótów klawiaturowych do kopiowania i wklejania wraz ze schowkiem OS X bez włamań”. To oczywiście nie jest prawdą, ponieważ pbcopyi pbpasteto zarówno aplikacje terminalowe; każda inna aplikacja terminalowa może robić to, co robią lub po prostu wywoływać je bezpośrednio.
To, czego szukałem, to uzależnienie pbcopyod wycinania i kopiowania Emacsa. Czy to możliwe?
syntagma
0

Uważam ten post za bardzo przydatny (definiowanie 2 funkcji i przypisywanie do nich skrótów w pliku ~ / .emacs).

Po dodaniu tych linii do pliku .emacs nie będziesz mieć dostępu do tych skrótów, dopóki nie otworzysz nowej sesji powłoki (tab / window). Niech zmiany zostaną zastosowane.

Javad Sadeqzadeh
źródło
0

Możesz uzyskać taką interakcję ze schowkiem podczas uruchamiania Emacsa w terminalu tekstowym, włączając pakiet xclip-modedostarczony przez xclipGNU ELPA (tj. Via M-x package-list-packages RET).

Zobacz także /emacs/10900/, aby uzyskać podobne pytanie i odpowiedzi.

Stefan
źródło