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


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.