Copia il testo da Emacs negli Appunti di OS X.


25

Quando eseguo Emacs in un terminale di testo invece della normale modalità GUI, posso copiare in Emacs attivando l'avvio di una regione con C-SPC, quindi selezionare ciò che voglio e quindi fare M-w.

Esiste un modo per ottenere una regione copiata in questo modo essere disponibile negli Appunti OSX per incollarlo diciamo in una pagina Web (oltre a eseguire Emacs nella sua modalità GUI, ovviamente)?

Non sono interessato a creare un collegamento diverso per farlo, e idealmente non dovrebbe richiedere l'installazione di alcun modulo.

Ho visto questo post e ho provato la risposta accettata ma non funziona sembra funzionare come mi aspetto sopra.

Altre idee?


Amico, la domanda ha quasi 3 anni ed è stata data una risposta
Galder Zamarreño

Risposte:


33

Copia da Emacs negli Appunti di OS X:

seleziona la regione quindi M-| pbcopy RET

Incolla dagli appunti di OS X in Emacs:

C-u M-| pbpaste RET (sostituisce la regione corrente se esiste)


Spiegazione:

M-|viene eseguito shell-command-on-region, che come suggerisce il nome convoglia la regione corrente a un comando di shell. C-u M-|fa la stessa cosa, ma sostituisce la regione corrente con stdoutil comando in esecuzione.

pbcopye pbpastesono utility OS X per l'accesso agli Appunti di sistema.


1
Oltre a rispondere alla domanda, la tua risposta mi ha insegnato come eseguire i comandi di shell da emacs, Amazing.
andreskwan,

20

Il seguente funziona, copiato da qui

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

La verbosità qui sembra arretrata
Jordon Biondo,

1
Con la modalità malvagia, questo spezza il comportamento di incollaggio vimish
Felix D.

@FelixD .: xclip-modesoffre dello stesso problema?
Stefan

Questo sembra interrotto in Emacs26 quando si copiano e incollano caratteri multibyte, come descritto in emacs.stackexchange.com/questions/50485/…
silencej

9

Se usi Emacs "nel modo normale" (cioè come un'applicazione GUI), allora dovrebbe già farlo per impostazione predefinita. Se si utilizza Emacs all'interno di un emulatore di terminale, in realtà non sa come farlo per impostazione predefinita, ma è possibile installare il xclippacchetto da GNU ELPA e quindi abilitare ciò xclip-modeche insegna a Emacs come farlo sia per GNU / Linux che per OSX.


Funziona xclipcon OSX? Da quello che ho visto là fuori, sembra essere progettato per funzionare con X11, vedi post
Galder Zamarreño

1
il xclip.elpacchetto è stato esteso per l'uso pbpaste.
Stefan,

terminal emacs in modalità server (non come un'istanza normale) si blocca quando uso xclip sotto macOS per qualche motivo.
rien333,

Potresti segnalarlo come un bug (o direttamente a me o via M-x report-emacs-bug?
Stefan

3

Come ha detto Stefan, le applicazioni grafiche Emacs dovrebbero farlo per impostazione predefinita.

In un terminale di testo, un'altra opzione è utilizzare funzioni come questa:

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

tranne quando non lo fa. 20 anni dopo, stesso pb in emacs .... Vorrei davvero che ci fosse un terreno comune e sano, incastonato in pietra da qualche parte
nicolas

1

Ecco una semplice funzione elisp che puoi inserire nel tuo file .emacs che copia negli appunti il ​​contenuto del buffer in cui ti trovi. Non devi selezionare nulla, lo copia tutto. Il codice è breve e piuttosto autoesplicativo.

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

Dopo aver caricato o ricaricato emacs, chiamalo con Mx xclip.
jumar

L'OP non ha chiesto di copiare l'intero buffer negli Appunti, quindi questo non fa ciò che è stato chiesto. Per il resto, questo sembra semplicemente duplicare ciò che altri hanno già detto.
Stefan

Mi scuso se questo sembra fuori tema. Sono passato a questa pagina da Google, dove è stato il primo risultato per "copiare il testo negli appunti emacs". La domanda si intitola "Copia il testo da Emacs negli Appunti di OS X", quindi è facile vedere come si può finire qui per quel risultato di ricerca. Penso che sia applicabile al modo in cui la frase postata è la loro domanda, un superset di essa. Ho già visitato le risposte di StackExchange ed ero frustrato quando non era disponibile una risposta semplice, soprattutto quando sapevo che migliaia di persone stavano ponendo la domanda, quindi ho pensato di aggiungere il mio per le persone che potevano trarne beneficio.
jumar,

0

Guarda clipboard-kill-regione clipboard-yank. Questi vengono menu-bar.el.

Una volta evidenziata una regione, è possibile utilizzare la clipboard-kill-region per eliminare la regione sia nel buffer di incollaggio sia negli Appunti di sistema. "incolla" di appunti, qualunque cosa sia attualmente negli appunti di sistema.


Si prega di espandere la risposta.
Dan

Ho provato a copiare qualcosa da emacs usando quei comandi, e non era disponibile esternamente per copiarlo altrove al di fuori di Emacs.
Galder Zamarreño,

@ GalderZamarreño funziona per me in Emacs e sono su OSX.
bitops,

0

La risposta di Galder Zamarreño è ottima, tuttavia, interrompe il putcomportamento malvagio in modalità malvagia. L'ho adattato un po 'di seguito: sono sicuro che potrebbe essere migliore, ma fa il lavoro per me. Sentiti libero di suggerire miglioramenti:

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

----> Nuovo codice

  (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))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.