Geri almayı kötü modda kullanamaz mısınız?


12

Her sıklıkta, bilinen bilinen hata , başka bir rapor ve reddit iş parçacığı ile geri alma yapamayacağım, geri alma ağacında hatalarla karşılaşıyorum .

primitive-undo: Unrecognized entry in undo list undo-tree-canary

Bu gerçekten kötüdür ve dosyanın en yeni sürümünü kaydetmediyseniz iş kaybına neden olabilir.


Dallanma geri alma ağacının işlevselliğini hiç kullanmadığım için, kötü modda emacs linear undo kullanmak mümkün mü?


Not: Ağaç geri almayı devre dışı (global-undo-tree-mode -1)bıraktıktan hemen sonra ayarlamayı denedim (evil-mode 1), ancak yinele (Ctrl-R) bunu yaptıktan sonra çalışmıyor.


2
Emacs 'redo' komutuna sahip değildir (bunun yerine geri alma sırasını yarıda kesersiniz ve sonra önceki geri alma komutlarının sırasını geri alırsınız). Yaptığınız şeyin doğru çalıştığı anlaşılıyor.
phils

1
Amacınız geri almayı düzeltmekse, lütfen yazarı ile iletişime geçin ve bir e-posta yazın. Emacs-devel'den şikayet etmek işleri düzeltmez. Aynı şekilde, amacınız Evil'in vanilya geri almasına izin vermekse, hata izleyicisine bir bilet açın. Vanilya geri almanın sadece geri alındığını, ancak geri almanın geri alınacağını, bu nedenle ilk önce neden geri almanın kullanıldığını unutmayın.
wasamasa

1
Amacım geri al / yinele çalışmasını sağlamak. Ben tam olarak nasıl huysuz değilim. Geri alma ağacının ağaç işlevselliğini kullanmadığım için dahili geri alma emacs kullanmanın en basit olabileceğini düşündüm. Yine de, hatayı ağaç geri alma yazarına bildirdim.
ideasman42

Aynı sorunu yaşıyorum, günde yaklaşık bir kez oluyor ve çok sinir bozucu
cjohansson

Yanıtlar:


7

undo-tree.elToby Cubitt'in yazarı şu anda bu özel hatayı düzeltmek için çok meşgul. Gelecekte vakti varsa, konuyu daha fazla inceleyebilir. Yazar, hatayı güvenilir bir şekilde yeniden oluşturmakta zorlandığını ve son zamanlarda ana dalı kullanarak yeniden üretemediğini belirtti. Yalnızca bölgede geri al / yinele kullanıldığında oluşur. Yazar bu arada sadece geri al / yeniden bölgede yap özelliğini kapatmanızı önerir.

emacs -qEmacs'ın şu anki kararlı sürümünü (örneğin, 25.2.1) ve ayrıca ana dalın en son sürümü ile başlayarak sorunu yeniden oluşturmak için motive olan herkesi şiddetle tavsiye ediyorum. bu tarifleri, katılımcılara karbon kopyalarla birlikte 16377 numaralı hata takip numarasına gönderin (Stefan, Toby, Barry ve Keith).

Ana takip numarası 16377'dir ve ilgili bir takip numarası 16523 vardır:

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=16377

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=16523

undo/redo-in-regionÖzelliği kapatan geçici çözüm şunlardır :

(setq undo-tree-enable-undo-in-region nil)

1
Bu geçici çözüm işe yaramıyor - denedim ve bazen yineleniyorum.
ideasman42

@ ideasman42 - Bildiğim olarak Toby Cubitt hata oluşabilir halen habersiz undo-tree-enable-undo-in-regionolduğu nil; ve bunun bölgede geri almanın dışında gerçekleştiğini hiç görmedim. Hatayı yeniden oluşturmak için bir reçete hazırlayabilirseniz, lütfen Emacs ekibine bildirin - Dr. Cubitt'e karbon kopyası da yardımcı olacaktır ve çok fazla sorun değilse, kesinlikle takdir edersiniz. güvenilir bir tane bulmak mümkün ise tarifi.
Sorun

Yanıt vermeyen bir hata raporu gönderdim (birkaç ay önce). Birçok insanın bağlı olduğu bu gibi projelerin gerçekten bir kamu hata izleyicisi olmalıdır.
ideasman42

16377 ve 16523 gerçekten halka açık Emacs hata takip numaralarıdır ve undo-treeresmen elpadepoların bir parçasıdır . Standart rapor Emacs hatasını kullanabilirsiniz; ancak, sonuç aynı olabilir - yani Dr. Cubitt'in yoğun programında boş zaman bulmasını beklemek ... Bir noktada başka bir geri alma gurusu ortaya çıkabilir ve paketin korunmasına yardımcı olabilir. Yarı doğrusal bir şekilde geri alma / yineleme yapabilen özel bir geri alma ağacı çatalını oluşturmak için çok fazla zaman harcadım ve hala her şeyin nasıl çalıştığına dair temel bir anlayışa
sahibim

1

Görünüşe göre ~ / .emacs.d / elpa / evil-xxxxxxx / dir içindeki evil-pkg.el dosyasını düzenleyebilir ve geri alma ağacını bir gereksinim olarak silebilirsiniz:

(define-package "evil" "20140109.605" "Extensible Vi layer for Emacs." '((goto-chg "1.6")))

kaynak


Bu, OP'nin istediği geri alma / yineleme işlemini kıracaktır.
wasamasa

1
Bağladığım blogun yazarı, emac'ların vanilya geri almasını kullanmasına izin verdiğini söyledi, OP'nin "ağacı geri al" dediğinde bu istediği gibi görünüyor.
DaftWooly

1
Bu gerçekten son çare bir şey olmalı, çünkü paketleri bir sonraki güncellemenizde bu özelleştirme üzerine yazılır. İnit dosyanızı yapılandırarak istediğiniz davranışı elde etmenin bir yolunu bulmak daha iyi olur.
17:29

Kabul ediyorum, maalesef kötülükteki ağaç geri almayı devre dışı bırakmanın tek yolu gibi görünüyor.
DaftWooly

Benim için çalışmıyor. Gereksinimi undo-treeaçıkladım ve paketi yüklemeyecek şekilde yoldan çıkardım . Şimdi "yinele" kullanmak başarısız oluyor Wrong type argument: commandp, redo.
Hi-Angel

1

Düzenle, bu artık kötü mod ile geri al / yeniden yap için kullanılabilen bir paket - geri al-fu .


Bir süredir ağaçsız şeytan ağacı kullandığımdan beri kendi sorusuna cevap ekliyorum.

Bu emacs geri alma gibi ağır bir şey olmadan geri sarar / yinelemek için şaşırtıcı derecede iyi çalışır undo-treeveya redo+.

(global-undo-tree-mode -1)

(defun simple-redo ()
  (interactive)
  (let
    (
      (last-command
        (cond
          ;; Break undo chain, avoid having to press Ctrl-G.
          ((string= last-command 'simple-undo) 'ignore)
          ;; Emacs undo uses this to detect successive undo calls.
          ((string= last-command 'simple-redo) 'undo)
          (t last-command))))
    (condition-case err
      (progn
        (undo) t)
      (user-error
        (message "%s" (error-message-string err)))))
  (setq this-command 'simple-redo))

(defun simple-undo ()
  (interactive)
  (let
    (
      (last-command
        (cond
          ;; Emacs undo uses this to detect successive undo calls.
          ((string= last-command 'simple-undo) 'undo)
          ((string= last-command 'simple-redo) 'undo)
          (t last-command))))
    (condition-case err
      (progn
        (undo-only) t)
      (user-error
        (message "%s" (error-message-string err)))))
  (setq this-command 'simple-undo))
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.