Конфигурация Windows для регистров - PullRequest
4 голосов
/ 29 апреля 2011

Я начинаю довольно интенсивно использовать команды Cx rw и Cx rj для сохранения конфигурации окон в регистрах и их последующего вызова, но я нахожу немного раздражающим, что позиции курсора сохраняются в то время, когдаКонфигурация окна была сохранена.

По сути, я хотел бы, чтобы позиции курсора не сохранялись (или обновлялись автоматически), чтобы всякий раз, когда я «переходил» к сохраненной конфигурации окна, я получал то же представление, что и при последнем посещении,когда я его создал.

Есть идеи?Анхель

Ответы [ 4 ]

3 голосов
/ 12 сентября 2011

Я также нашел это очень раздражающим и только что закодировал решение.Сохраните конфигурацию окна, используя обычную функциональность (текущая конфигурация окна или конфигурация окна для регистрации).Затем, перед применением сохраненной конфигурации окна (или регистрации),

  • Сохраните точки всех открытых буферов.
  • Восстановите конфигурацию окна.
  • Примените сохраненнуюуказывает на текущие окна.

Код ниже делает это.Однако вам придется самостоятельно подключить конфигурацию окна восстановления к коду регистра.

(defun buffer-point-map ()
  (save-excursion
    (mapcar (lambda (buffer) (cons (buffer-name buffer)
                                   (progn (set-buffer buffer) (point))))
            (buffer-list))))

(defun apply-buffer-points (buff-point-map)
  (mapc (lambda (window) (let* ((buffer (window-buffer window))
                                (buffer-point (cdr (assoc (buffer-name buffer) buff-point-map))))
                           (when buffer-point (set-window-point window buffer-point))))
        (window-list))
  nil)

(defun restore-window-configuration (window-config)
  (let ((points (buffer-point-map)))
    (set-window-configuration window-config)
    (apply-buffer-points points)))
3 голосов
/ 29 апреля 2011

Если вы посмотрите на исходный код

(defun window-configuration-to-register (register &optional arg)
  ...
  (set-register register (list (current-window-configuration) (point-marker))))

, вы увидите, что он сохраняет точку в качестве второго аргумента.Просто переопределите его как

(defun my-window-configuration-to-register (register &optional arg)
  (interactive "cWindow configuration to register: \nP")
  (set-register register (list (current-window-configuration) nil)))

и переопределите ярлык Cx rw, чтобы использовать my-window-configuration-to-register

(define-key (current-global-map) (kbd "C-x r w") 'my-window-configuration-to-register)

Или определить совет

(defadvice window-configuration-to-register (after window-configuration-to-register-no-point activate)
  "Avoid storing current buffer's position in the register. We want to stay on the last used position, not to jump to the saved one"
  (set-register register (list (current-window-configuration) nil)))

Единственная проблема заключается в том, что при переходе на него появляется сообщение об ошибке.Вы можете переопределить jump-to-register, чтобы избежать его

1 голос
/ 04 мая 2011

Я добавлю еще один ответ, который использует другой подход.

Прежде чем перейти к другому регистру, вы можете сохранить текущую конфигурацию окна. Таким образом, он будет хранить вашу последнюю позицию буфера непосредственно перед прыжком.

Однако это работает не во всех случаях. Например, если вы просто переключаетесь на другой буфер или создаете буфер с M-x dired или чем-то еще, он не будет сохранять текущую конфигурацию окна.

(defvar current-window-conf-register nil)

(defadvice window-configuration-to-register (after window-configuration-to-register-current-reg activate)
  (setq current-window-conf-register register))

(defadvice jump-to-register (before jump-to-register-store-window-conf activate)
  (if current-window-conf-register (window-configuration-to-register current-window-conf-register))
  (setq current-window-conf-register register))
0 голосов
/ 29 апреля 2011

В качестве косвенного ответа на ваш вопрос, вы можете вместо этого использовать revive.el, который поддерживает сохранение и восстановление конфигураций окон при перезапуске Emacs, но не (как я полагаю) сохраняет эту точку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...