악마 모드에서 실행 취소 트리를 사용하지 않을 수 있습니까?


12

때때로 나는 undo-tree에서 버그에 부딪 치는데, 여기서는 알려진 버그 인 또 다른 보고서 및 레딧 스레드로 다시 실행할 수 없습니다 .

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

이것은 실제로 나쁘고 최신 버전의 파일을 저장하지 않으면 작업 손실이 발생할 수 있습니다.


분기 실행 취소 트리 기능을 절대 사용하지 않기 때문에 emacs linear 실행 취소를 악의 모드와 함께 사용할 수 있습니까?


참고 : 실행 취소 트리를 비활성화 (global-undo-tree-mode -1)한 직후에 설정을 시도했지만 (evil-mode 1)이 작업을 수행 한 후에 다시 실행 (Ctrl-R)이 작동하지 않습니다.


2
Emacs에는 'redo'명령이 없습니다 (대신 실행 취소 시퀀스를 중단 한 다음 이전 실행 취소 명령 시퀀스를 취소). 당신이 한 일이 올바르게 작동 한 것 같습니다.
— phils

1
실행 취소 트리를 수정하는 것이 목표 인 경우 작성자에게 연락하여 이메일을 작성하십시오. emacs-devel에 대한 불만은 해결되지 않습니다. 마찬가지로, Evil이 바닐라 실행 취소를 사용하는 것을 목표로하는 경우 버그 추적기에서 티켓을 엽니 다. 바닐라 실행 취소는 실행 취소 만 가능하지만, 다시 실행이 전혀없고 실행 취소 만 실행 취소한다는 점을 명심하십시오.
— 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는 - 지금까지 내가 아는 한, 토비 Cubitt 때 오류가 발생할 수 있다는 현재 인식하지 못하는 undo-tree-enable-undo-in-region것입니다 nil; 또한 지역에서 실행 취소를 사용하는 외부에서 발생하는 것을 본 적이 없습니다. 오류를 재현 할 수있는 레시피를 얻을 수 있다면, Emacs 팀에보고하십시오. Cubitt 박사의 카본 사본도 도움이 될 것입니다. 당신이 신뢰할 수있는 것을 생각해 낼 수 있다면 레시피. 문제가
— 생겨서

응답이없는 버그 보고서를 발송했습니다 (몇 달 전). 많은 사람들이 의존하는 이와 같은 프로젝트에는 실제로 공개 버그 추적기가 있어야합니다.
— ideasman42

16377 및 16523은 실제로 공개 Emacs 버그 추적 번호이며 undo-tree공식적으로 elpa리포지토리 의 일부입니다 . 표준 보고서 Emacs 버그를 사용할 수 있습니다. 그러나 최종 결과는 동일 할 수 있습니다. 즉, Cubitt 박사가 바쁜 일정에서 자유 시간을 찾기를 기다리는 중입니다 ... 어떤 시점에서 다른 실행 취소 전문가가 와서 패키지를 유지하는 데 도움을 줄 수 있습니다. 반 선형 방식으로 실행 취소 / 재실행 할 수있는 사용자 정의 실행 취소 트리 포크를 작성하는 데 많은 시간을 보냈으며 여전히 모든 작동 방식에 대한 기본적인 이해 만 가지고 있습니다.
— lawlist

1

분명히 ~ / .emacs.d / elpa / evil-xxxxxxx / dir에서 evil-pkg.el을 편집하고 필요에 따라 undo-tree를 삭제할 수 있습니다.

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

출처


OP가 원하지 않는 실행 취소 / 다시 실행이 중단됩니다.
— wasamasa

1
내가 링크 한 블로그의 저자는 그가 emacs의 바닐라 실행 취소를 사용할 수있게했다고 말했다. OP가 "실행 취소 트리 비활성화"라고 말했을 때 OP가 원했던 것처럼 보인다.
— DaftWooly

1
다음에 패키지를 업데이트 할 때이 사용자 지정 내용을 덮어 쓰게되므로 이것은 실제로 최후의 수단이어야합니다. init 파일을 구성하여 원하는 동작을 얻는 방법을 찾는 것이 좋습니다.
— zck

불행히도 악의적으로 취소 트리를 비활성화하는 유일한 방법 인 것 같습니다.
— DaftWooly

나를 위해 작동하지 않습니다. 요구 사항을 설명하고 undo-tree패키지가로드되지 않도록 이동했습니다. 이제 "redo"사용이 실패했습니다 Wrong type argument: commandp, redo.
— Hi-Angel

1

편집, 이것은 이제 evil-mode- undo-fu로 실행 취소 / 다시 실행에 사용할 수있는 패키지입니다 .


언젠가 취소 트리를 사용하지 않은 이후로 자신의 질문에 대한 답변을 추가했습니다.

이맥스를 래핑이 작품을 놀라 울 정도로 잘 실행 취소 / 재실행은 아무것도 같은 무거운없이 취소 undo-tree또는 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))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.