как предотвратить "отклеивание" компиляции-прокрутки во время рекурсивного редактирования? - PullRequest
3 голосов
/ 16 декабря 2011

Когда Emacs вводит recursive-edit - например, при вводе минибуфера для Mx (AKA execute-extended-command) - кажется, что он запоминает некоторые аспекты текущего состояния и восстанавливает их, если это рекурсивное редактирование выходит с ошибкой. Среди восстановленных битов состояния есть (window-point) всех видимых окон.

Это означает, что если для compilation-scroll-output установлено значение t, а затем:

  1. вы запускаете (compile ...), который делает свое дело, постепенно производя продукцию ...
  2. затем вы нажимаете М-х и начинаете вводить расширенную команду ...
  3. тогда вы останавливаетесь на минуту, чтобы подумать, пока создается несколько дополнительных строк ...
  4. тогда подумайте, что вам все-таки лучше подумать об этой расширенной команде, и нажмите C-g , чтобы отменить ее ...

то, что произойдет, это то, что точка в окне компиляции переместится назад к тому месту, где она была в начале шага 2. Это означает, что точка в окне компиляции больше не равна (point-max), и, следовательно, окно перестает прокручиваться при создании нового вывода.

Я не знаю о вас, но, поскольку я обычно использую Emacs, я стараюсь сделать хотя бы несколько рекурсивных изменений и отменить хотя бы несколько из них. Так что это означает, что в какой-то момент мое окно компиляции всегда отклеивается, и мне приходится переключаться на него и M -> время от времени.

Есть ли опция customize, чтобы отключить это поведение, чтобы window-point оставался там, где он есть, или фрагмент elisp, который устраняет проблему, или даже определенный хук, который выполняется, когда завершается рекурсивное редактирование , с достаточным количеством информации, чтобы сказать, где была точка до того, как редактирование было завершено?

Ответы [ 2 ]

1 голос
/ 06 апреля 2012

Это действительно ошибка, и было бы хорошо, если бы вы сообщили о ней с M-x report-emacs-bug, чтобы она могла быть исправлена ​​в какой-то момент.В то же время одним из обходных путей является помещение буфера для компиляции в отдельный кадр, поскольку «сохранение и восстановление», выполняемое этим входом минибуфера, влияет только на текущий кадр.

1 голос
/ 16 декабря 2011
  1. Mx не вводит рекурсивное редактирование.Информацию о рекурсивных изменениях смотрите в руководстве по Emacs, узел Recursive Edit.
  2. То, что вы описываете, звучит как ошибка Emacs.Попробуйте использовать M-x report-emacs-bug, указав свой рецепт (желательно начиная с emacs -Q).
...