เป็นไปได้ที่จะไม่ใช้เลิกทำต้นไม้ในโหมดชั่วร้าย?


12

ดังนั้นทุกครั้งที่ผมใช้เป็นข้อบกพร่องในการยกเลิกต้นไม้ที่ฉันไม่สามารถทำซ้ำมีดังต่อไปนี้ปัญหาที่รู้จักกัน , รายงานอื่นและReddit ด้าย

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

สิ่งนี้แย่มากและอาจทำให้งานเสียไปหากคุณไม่ได้บันทึกไฟล์เวอร์ชันใหม่ล่าสุด


เนื่องจากฉันไม่เคยใช้ฟังก์ชั่นการเลิกทำกิ่งก้านสาขามันเป็นไปได้ไหมที่จะใช้ emacs linear undo กับโหมดความชั่วร้าย?


หมายเหตุ: ฉันได้ลองตั้งค่า(global-undo-tree-mode -1)โดยตรงหลังจาก(evil-mode 1)ที่ปิดใช้งานการเลิกทรี แต่การทำซ้ำ (Ctrl-R) ไม่ทำงานหลังจากทำสิ่งนี้


2
Emacs ไม่มีคำสั่ง 'ทำซ้ำ' (คุณต้องขัดจังหวะลำดับการเลิกทำและเลิกทำลำดับก่อนหน้าของคำสั่งเลิกทำ) ดูเหมือนว่าสิ่งที่คุณทำทำงานได้ถูกต้อง
phils

1
หากเป้าหมายของคุณคือยกเลิกการแก้ไขทรีโปรดติดต่อผู้เขียนและเขียนอีเมลถึงพวกเขา การร้องเรียนเกี่ยวกับ emacs-devel จะไม่แก้ไขสิ่งต่าง ๆ เช่นเดียวกันหากเป้าหมายของคุณคืออนุญาตให้ Evil ใช้ vanilla undo ให้เปิดตั๋วในตัวติดตามบั๊ก โปรดจำไว้ว่าแม้ว่าวานิลลายกเลิกจะเลิกทำเท่านั้นไม่มีการทำซ้ำเลยเพียงยกเลิกการเลิกทำดังนั้นเหตุใดจึงใช้ต้นไม้เลิกทำตั้งแต่แรก
wasamasa

1
เป้าหมายของฉันคือการเลิกทำ / ทำซ้ำ ฉันไม่ได้งงว่า เนื่องจากฉันไม่ได้ใช้ฟังก์ชั่นต้นไม้ของการเลิกทำต้นไม้ฉันคิดว่ามันอาจจะง่ายที่สุดในการใช้ emacs ในตัวที่เลิกทำ ถึงกระนั้นฉันได้รายงานข้อผิดพลาดให้กับผู้เขียนเลิกทำต้นไม้
ideasman42

ฉันมีปัญหาเดียวกันที่แน่นอนมันเกิดขึ้นเกี่ยวกับวันละครั้งและน่าผิดหวังมาก
cjohansson

คำตอบ:


7

ผู้เขียนundo-tree.elToby Cubitt ในขณะนี้ไม่ว่างที่จะแก้ไขข้อผิดพลาดนี้ หากเขามีเวลาในอนาคตเขาอาจมองปัญหานี้เพิ่มเติม ผู้เขียนระบุว่าเขามีปัญหาในการทำซ้ำข้อผิดพลาดได้อย่างน่าเชื่อถือและไม่สามารถทำซ้ำได้โดยใช้สาขาหลัก มันเกิดขึ้นเมื่อใช้เลิกทำ / ทำซ้ำในภูมิภาคเท่านั้น ผู้เขียนแนะนำเพียงแค่ปิดคุณลักษณะการเลิกทำซ้ำ / ทำซ้ำในภูมิภาคในระหว่างนี้

ฉันขอแนะนำให้ทุกคนที่มีแรงบันดาลใจมาหาวิธีที่เชื่อถือได้ในการทำซ้ำปัญหาที่เริ่มต้นจากการemacs -qใช้ทั้งการปล่อย Emacs ที่เสถียรในปัจจุบัน (เช่น 25.2.1) และรุ่นล่าสุดของสาขาหลักแล้ว ส่งผู้รับเหล่านั้นไปยังหมายเลขติดตามข้อผิดพลาด 16377 พร้อมสำเนาคาร์บอนให้กับผู้เข้าร่วม (Stefan, Toby, Barry และ Keith)

หมายเลขติดตามหลักคือ 16377 และมีหมายเลขติดตามที่เกี่ยวข้อง 16523:

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

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

นี่คือวิธีแก้ปัญหาที่ปิดundo/redo-in-regionคุณสมบัติ:

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

1
วิธีแก้ปัญหานี้ใช้ไม่ได้ - ฉันลองแล้ว แต่ก็ยังทำซ้ำได้บางครั้ง
ideasman42

@ ideasman42 - เท่าที่ฉันรู้ Toby Cubitt ในปัจจุบันไม่ทราบว่าข้อผิดพลาดสามารถเกิดขึ้นได้เมื่อundo-tree-enable-undo-in-regionเป็นnil; และฉันไม่เคยเห็นมันเกิดขึ้นนอกการใช้เลิกทำในภูมิภาค หากคุณสามารถหาสูตรทำซ้ำข้อผิดพลาดได้โปรดรายงานไปยังทีม Emacs - สำเนาคาร์บอนให้กับดร. Cubitt ก็จะเป็นประโยชน์เช่นกันและหากไม่ใช่ปัญหามากเกินไปฉันมั่นใจว่าจะขอบคุณ สูตรถ้าคุณสามารถหาสูตรที่เชื่อถือได้ ขออภัยที่คุณมีปัญหา ...
กฎหมาย

ฉันส่งรายงานข้อผิดพลาดโดยไม่มีการตอบกลับ (บางเดือนกลับ) โครงการเช่นนี้ที่หลายคนต้องพึ่งพาควรมีตัวติดตามข้อผิดพลาดสาธารณะ
ideasman42

16377 และ 16523 เป็นหมายเลขติดตามข้อผิดพลาดของ Emacs สาธารณะและundo-treeเป็นส่วนหนึ่งของที่elpaเก็บข้อมูลอย่างเป็นทางการ คุณสามารถใช้รายงานมาตรฐาน Emacs บั๊ก; อย่างไรก็ตามผลลัพธ์ที่ได้อาจเหมือนกันคือรอดร. Cubitt เพื่อหาเวลาว่างในตารางงานที่ยุ่งของเขา ... ณ จุดหนึ่งกูรูที่เลิกทำอื่นอาจเข้ามาและช่วยในการดูแลบรรจุภัณฑ์ ฉันใช้เวลามากในการสร้างทางแยกของต้นไม้ที่สามารถเลิกทำ / ทำซ้ำในแบบกึ่งเส้นตรงและฉันยังคงมีความเข้าใจพื้นฐานว่ามันทำงานอย่างไร ...
lawlist

1

เห็นได้ชัดว่าคุณสามารถแก้ไข evil-pkg.el ใน ~ / .emacs.d / elpa / evil-xxxxxxx / dir และลบ undo-tree ตามความต้องการ:

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

แหล่ง


นั่นจะทำลายเลิกทำ / ทำซ้ำซึ่งไม่ใช่สิ่งที่ OP ต้องการ
wasamasa

1
ผู้เขียนบล็อกที่ฉันเชื่อมโยงบอกว่าอนุญาตให้เขาใช้วานิลลายกเลิกของ emacs ซึ่งน่าจะเป็นสิ่งที่ OP ต้องการเมื่อเขาพูดว่า "ปิดการใช้งานต้นไม้เลิกทำ"
DaftWooly

1
นี่ควรเป็นทางเลือกสุดท้ายเพราะครั้งต่อไปที่คุณอัปเดตแพ็คเกจการปรับแต่งนี้จะถูกเขียนทับ มันจะเป็นการดีกว่าถ้าคุณหาวิธีที่จะรับพฤติกรรมที่คุณต้องการโดยกำหนดค่าไฟล์ init ของคุณ
zck

ฉันเห็นด้วยโชคไม่ดีที่ดูเหมือนจะเป็นวิธีเดียวที่จะปิดการใช้งานต้นไม้เลิกทำในความชั่วร้าย
DaftWooly

ไม่ได้ผลสำหรับฉัน ฉันแสดงความคิดเห็นเกี่ยวกับข้อกำหนดและย้ายundo-treeแพ็คเกจออกไปดังนั้นมันจะไม่โหลด ตอนนี้ใช้คำว่า "ทำซ้ำ" Wrong type argument: commandp, redoล้มเหลวด้วย
Hi-Angel

1

แก้ไขตอนนี้แพคเกจที่สามารถใช้สำหรับการยกเลิก / ทำซ้ำกับความชั่วร้ายโหมด - ยกเลิก-Fu


การเพิ่มคำตอบให้กับคำถามของตัวเองเนื่องจากฉันใช้ต้นไม้ที่ไม่มีการเลิกทำชั่วขณะนี้

นี้ทำงานได้ดีอย่างแปลกใจที่จะเลิกทำ / ทำซ้ำซึ่ง wraps emacs ยกเลิกโดยไม่ต้องอะไรหนักเช่นหรือundo-treeredo+

(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))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.