Emacs non si incolla nella modalità Visual di Evil con tutti gli Appunti del SO


19

Impostare:

Versione GUI GNU Emacs 25.0.50.1 (x86_64-w64-mingw32) del 25/07/2015 su KAEL Compilato da EmacsW64.

Package Evil, utilizzando l'ultima versione di Evil di MELPA

Windows 7 x64 bit.

Situazione:

Testato con configurazione Emacs vuota con solo Evil abilitato. Copio del testo dall'applicazione Windows. Quindi lo incollo dentro normal modecon Emacs p. Vedo il testo.

Quindi passo all'applicazione Windows, seleziono un altro testo, lo copio. Torna a Emacs, seleziona visivamente il testo e incollalo all'interno visual mode. Ma il testo all'interno dell'area non verrà sostituito con il testo dagli Appunti di Windows.

Questo non è con il Vim predefinito. Come potrei configurarlo, affinché il testo visivamente venga sostituito dall'ultima azione di copia, in questo caso negli Appunti di Windows?



1
Sono a conoscenza di entrambi gli argomenti, ma penso che sia più malvagio degli appunti. La funzione Appunti funziona bene nella modalità normale. E non per la modalità visiva.
ReneFroger,

Ah, capisco cosa stai dicendo. Per quello che vale, non è specifico di Windows: inoltre non strappa dagli appunti del sistema operativo in stato visivo su Linux (Fedora, se è importante).
Dan

Grazie per l'aggiornamento, ho cambiato il titolo per non essere specifico del sistema operativo.
ReneFroger,

È solo un semplice insetto malvagio? Qualche possibilità che tu possa segnalarlo?
PythonNut,

Risposte:


28

Non ci sono bug qui. Dato che ero anche infastidito da questo comportamento, ho appena letto il codice Male per scoprire perché questo sta accadendo. Quindi, ecco una copia / incolla diretta del one-liner ben commentato dalla mia configurazione di Emacs che risolve questo problema:

;; Imagine the following scenario.  One wants to paste some previously copied
;; (from application other than Emacs) text to the system's clipboard in place
;; of some contiguous block of text in a buffer.  Hence, one switches to
;; `evil-visual-state' and selects the corresponding block of text to be
;; replaced.  However, one either pastes some (previously killed) text from
;; `kill-ring' or (if `kill-ring' is empty) receives the error: "Kill ring is
;; empty"; see `evil-visual-paste' and `current-kill' respectively.  The
;; reason why `current-kill' does not return the desired text from the
;; system's clipboard is because `evil-visual-update-x-selection' is being run
;; by `evil-visual-pre-command' before `evil-visual-paste'.  That is
;; `x-select-text' is being run (by `evil-visual-update-x-selection') before
;; `evil-visual-paste'.  As a result, `x-select-text' copies the selected
;; block of text to the system's clipboard as long as
;; `x-select-enable-clipboard' is non-nil (and in this scenario we assume that
;; it is).  According to the documentation of `interprogram-paste-function',
;; it should not return the text from the system's clipboard if it was last
;; provided by Emacs (e.g. with `x-select-text').  Thus, one ends up with the
;; problem described above.  To solve it, simply make
;; `evil-visual-update-x-selection' do nothing:
;; (fset 'evil-visual-update-x-selection 'ignore)

L'ultima frase è la risposta alla domanda su come " configurarlo, che il testo visivamente viene sostituito dall'ultima azione di copia, in questo caso negli Appunti di Windows? "

(fset 'evil-visual-update-x-selection 'ignore)

Godere.


Grazie Alexander, mi è piaciuto anche il tuo Emacs di Harroogan compilato. Bella scoperta, ho contrassegnato la tua risposta come quella giusta. A quanto pare, posso solo votare e contrassegnarlo come giusto senza alcuna ricompensa. Il che è triste, te lo meritavi davvero. :-)
ReneFroger,

1
Man this bug! Mi ha infastidito a tal punto che sono tornato a Vim solo per sbarazzarmi di questo comportamento. Ho cercato dappertutto e riferito anche al localizzatore malvagio, ma purtroppo nessuno ha risposto al mio problema. Alexander, sei il mio eroe!
dvcrn,

1
SIMPATICO! Questo dovrebbe essere un valore predefinito in spacemacs.
justingordon,

Sembra subdolo come questo comportamento sia attivo di default. Mi ci è voluto un po 'per capire cosa stesse succedendo e il fatto che non c'è modo di disabilitarlo impostando una variabile. Questa soluzione alternativa funziona bene :)
Jorge Israel Peña
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.