Вопрос

Назовите меня хромым, но я устал от своего подсознания C-x C-s нервное подергивание.Я достаточно часто переключаю буферы и думаю, что мне хотелось бы сохранить один буфер, как только я переключусь на другой.У меня еще не было времени изучить основы Emacs-Lisp.

Есть какие-нибудь подсказки о том, как это сделать или лучшие решения?

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

Это было полезно?

Решение

Подробнее о Сете ответ , я бы сделал это:

(defadvice switch-to-buffer (before save-buffer-now activate)
  (when buffer-file-name (save-buffer)))
(defadvice other-window (before other-window-now activate)
  (when buffer-file-name (save-buffer)))
(defadvice other-frame (before other-frame-now activate)
  (when buffer-file-name (save-buffer)))

Проверка для имя-файла-буфера не позволяет сохранять буферы без файлов. Вам нужно выяснить все точки входа, которые вы используете для переключения нужных вам буферов (я бы также посоветовал other-window ).

Другие советы

Я новичок в emacs lisp, но в моем тестировании это работает:

(defadvice switch-to-buffer (before save-buffer-now)
  (save-buffer))

(ad-activate 'switch-to-buffer)

Это немного раздражает, потому что вызывается после КАЖДОГО буфера (например, нуля ). Итак, рассмотрим этот ответ как подсказку.

Если вы хотите отключить его, вам нужно позвонить:

(ad-disable-advice 'switch-to-buffer 'before 'save-buffer-now)
(ad-activate 'switch-to-buffer)

Пара идей.

Во-первых, если вы обнаружите, что вызываете команду типа «Сохранить» достаточно часто, вы можете рассмотреть возможность более короткой привязки клавиш для этой команды.Например, у меня тоже возникло такое же «подергивание», поэтому теперь я использую f2 вместо C-x C-s для сохранения изменений.

Функция, к которой я привязываюсь f2 сохраняет каждый несохраненный буфер безоговорочно.Вам может быть полезно:

(defun force-save-all ()
    "Unconditionally saves all unsaved buffers."
    (interactive)
    (save-some-buffers t))

(global-set-key [f2] 'force-save-all)

Теперь перейдем к главному вопросу.Вы можете попробовать что-то вроде этого (обратите внимание, что force-save-all называется):

(defun my-switch-to-buffer (buffer)
    (interactive (list (read-buffer "Switch to buffer: " (cadr buffer-name-history) nil)))
    (force-save-all)
    (switch-to-buffer buffer))

(global-set-key "\C-xb" 'my-switch-to-buffer)

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

я думал так @Сет у меня была отличная идея насчет использования советов, но я заметил, что в руководстве ELisp говорится, что совет не использовать для привязок клавиш.Я не совсем понимаю, почему это так, но к вашему сведению, руководство предлагает именно это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top