元に戻すツリーを悪モードで使用できないのでしょうか?


12

以下の既知のバグ別のレポート、およびredditスレッドで、やり直しができないundo-treeのバグにたびたび遭遇します

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

これは本当に悪いことであり、ファイルの最新バージョンを保存しなかった場合、作業が失われる可能性があります。


ブランチアンドゥツリー機能を使用したことがないので、邪魔なモードでemacsリニアアンドゥを使用できますか?


注:(global-undo-tree-mode -1)すぐに設定すると、(evil-mode 1)元に戻すツリーが無効になりますが、これを実行すると、やり直し(Ctrl-R)が機能しません。


2
Emacsには「やり直し」コマンドはありません(元に戻すシーケンスを中断してから、前の元に戻すコマンドのシーケンスを元に戻します)。あなたがしたことは正しく機能しているようです。
phils 2017年

1
あなたの目標が元に戻すツリーを修正することであるなら、その作者に連絡して、彼らにメールを書いてください。emacs-develで不平を言っても問題は解決しません。同様に、あなたの目標がEvilがバニラun​​doを使用できるようにすることである場合、そのバグトラッカーでチケットを開きます。バニラの取り消しは取り消しのみであり、やり直しは行われず、取り消しのみを取り消します。そのため、そもそも取り消しツリーが使用されるのはなぜですか。
ワサマサ2017年

1
私の目標は、元に戻す/やり直しを行うことです。どうやってそんなに大騒ぎしているのではない。元に戻すツリーのツリー機能を使用しないので、組み込みの元に戻すemacsを使用するのが最も簡単かもしれないと思いました。それでも、元に戻すツリーの作成者にバグを報告しました。
ideasman42

私はまったく同じ問題を抱えています。それは1日1回程度発生し、非常にイライラします
cjohansson

回答:


7

の作者でundo-tree.elあるToby Cubittは、現在この特定のバグを修正するには忙しすぎます。彼に将来の時間があれば、問題をさらに調査する可能性があります。著者は、エラーを確実に再現することが困難であり、最近、masterブランチを使用してエラーを再現することができなかったことを示しました。undo / redo-in-regionを使用する場合にのみ発生します。その間、作成者は、元に戻す/領域でやり直す機能をオフにすることを提案しています。

emacs -qEmacsの現在の安定したリリース(例: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
この回避策は機能しません-私はそれを試しましたが、それでも時々REDOが壊れます。
ideasman42 '12 / 12/4

@ ideasman42 -私の知る限りでは、トビー・キューピットは、ときにエラーが発生する可能性があること、現在認識していない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 2017

1
私がリンクしたブログの作者は、彼がemacsのバニラun​​doを使用することを許可したと言っています。
DaftWooly 2017

1
次回パッケージを更新するときに、このカスタマイズが上書きされるため、これは本当に最後の手段になるはずです。initファイルを設定して、希望する動作を実現する方法を見つける方が良いでしょう。
zck 2017

残念ながら、それは悪の元に戻すツリーを無効にする唯一の方法のようです。
DaftWooly 2017

私にはうまくいきません。私は要件をコメントアウトし、undo-treeロードしないようにパッケージを移動しました。現在、「redo」の使用はで失敗しWrong type argument: commandp, redoます。
Hi-Angel

1

編集、これはevil-mode- undo-fuで元に戻す/やり直しに使用できるパッケージになりました。


私はしばらくの間、元に戻すツリーなしで悪を使用してきたので、自分の質問に回答を追加します。

これは、undo-treeやのような重いものなしでemacs undoをラップするundo / redoに驚くほどうまく機能し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.