Emacs, Evil'in Görsel modunda her işletim sistemi panosuna yapışmaz


19

Kurmak:

KAEL'de GUI sürümü GNU Emacs 25.0.50.1 (x86_64-w64-mingw32), EmacsW64'ten derlenmiştir.

MELPA'dan Evil'in en son sürümünü kullanarak Evil paketi

Windows 7 x64 bit.

Durum:

Yalnızca Evil etkinken boş Emacs yapılandırmasıyla test edildi. Windows uygulamasından bir metin kopyalıyorum. Sonra içindeki Emacs normal modeile yapıştırıyorum p. Metni görüyorum.

Sonra Windows uygulamasına geçiyorum, başka bir metin seçiyorum, kopyalıyorum. Emacs'a geri dönün, metni görsel olarak seçin ve içine yapıştırın visual mode. Ancak bölge içindeki metin, Windows panosundaki metinle değiştirilmez.

Bu varsayılan Vim ile değil. Görsel olarak metnin en son kopya eylemiyle, bu durumda Windows panosuyla değiştirileceğini nasıl yapılandırabilirim?



1
Her iki konunun da farkındayım, ancak bence bu panodan çok Kötülük ile ilgili. Pano işlevi normal modda iyi çalışır. Ve görsel mod için değil.
ReneFroger

Ne dediğini anlıyorum. Değer için, Windows'a özgü değil: ayrıca Linux'ta görsel durumda OS panosundan (önemliyse Fedora) çekilmez.
Dan

Güncelleme için teşekkürler, başlığı işletim sistemine özgü olmayacak şekilde değiştirdim.
ReneFroger

Bu sadece basit bir Evil böceği mi? Rapor etme şansın var mı?
PythonNut

Yanıtlar:


28

Burada bir hata yok. Ayrıca bu davranıştan rahatsız olduğum için, bunun neden olduğunu öğrenmek için sadece Kötü kodu okudum. Bu nedenle, Emacs yapılandırmamdaki iyi yorumlanmış tek astarın bu sorunu gideren düz bir kopyası / macunu:

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

Son cümle, "nasıl yapılandırılacağı, görsel metnin en son kopya eylemiyle değiştirildiği, bu durumda Windows panosu? " Sorusunun cevabıdır.

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

Zevk almak.


Teşekkürler Alexander, ben de derlenmiş Harroogan Emacs keyif aldım. Güzel bulmak, cevabını doğru cevap olarak işaretledim. Göründüğü gibi, sadece herhangi bir lütuf olmadan upvote ve doğru olarak işaretleyebilirim. Hangi üzücü, gerçekten hak ettin. :-)
ReneFroger

1
Adamım bu böcek! Sadece bu davranıştan kurtulmak için vim'e döndüğüm derecede beni rahatsız etti. Her yerde aradım ve kötü izleyiciye de rapor verdim ama ne yazık ki kimse benim sorunuma cevap vermedi. Alexander, sen benim kahramanımsın!
dvcrn

1
GÜZEL! Bu, boşluk haritalarında varsayılan değer olmalıdır.
justingordon

Bu davranış varsayılan olarak nasıl sinsi görünüyor. Neler olduğunu ve bir değişken ayarlayarak devre dışı bırakmanın bir yolu olmadığı gerçeğini anlamak için biraz zaman aldı. Bu geçici çözüm iyi çalışıyor :)
Jorge Israel Peña
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.