2013-03-06 3 views
8

Как создать команду «Без проблем сохранить все буферы» в Aquamacs Emacs?Как тихо «Сохранить все буферы» в Emacs?

Я нашел команду save-some-buffers, которая хороша, но проблема в том, что она предлагает мне отдельно подтвердить каждый буфер, который я хочу сохранить.

Через Googling Я нашел документацию по переменной под названием save-silently-p, но это, кажется, не существует (в версии Aquamacs 2.4, то есть Emacs 23.3.50.1).

Так как я могу заставить его сохранять все буферы молча без подсказки?

+0

Все, что вам нужно, это 'C-у С-х s' – ocodo

+2

или' C-х лет! '(Который просто от глядя на' C-h' помощью отведенной для быстрых вариантов ясно). – phils

+0

@phils очень верно, на самом деле нет идеи, почему принятый ответ должен быть настолько сложным. 'C-x s', а затем'! 'Не является« тихим »и требует реакции на подсказку (извините, педантик.) -« C-u »полезно знать, потому что он может обеспечить дополнительную функциональность для многих вещей. Например, попробуйте 'C-u' и' M-x align-regexp'. – ocodo

ответ

2

В этом примере первый параметр установлен в значение non-nil - «[о] ptional аргумент (префикс) non-nil означает сохранить все без вопросов.» Хотя это может быть просто старый t, я решил составить более значимый символ в напомните себе, что это означает - то есть, 'no-confirm. Если бы я хотел получить диалоговое окно подтверждения, вместо этого я бы использовал nil для аргумента сначала.См. Doc-string - M-x describe-function RET save-some-buffers RET - для получения дополнительной информации о том, как эта функция ведет себя в зависимости от того, является ли аргумент первым аргументом nil или non-nil.

В приведенном ниже примере используется save-some-buffers с пользовательской функции нулевого аргумента для второго аргумента - то есть, ПРЕД - выбрать, какие буферы должны быть сохранены. Док-строка для save-some-buffers утверждает, что второй аргумент - т.е. ПРЕД - может быть один из трех вариантов - (1) Если ПРЕД является nil, все буферы файлов, посещения считаются ; (2) Если PRED - t, то определённые также будут считаться файловыми буферами; или (3) Если PRED - это функция с нулевым аргументом,, она указывает для каждого буфера, следует ли это учитывать или нет при вызове с этим током буфера.

В примере используется комбинация клавиш f5, но пользователь может вызвать эту настраиваемую функцию в интерактивном режиме - M-x my-save-some-buffers - или полностью назначить комбинацию клавиш. Есть несколько возможных совпадений, которые были жестко закодированы, и пользователь может добавлять/удалять/изменять условие:

• файловом посещения буфера + имя файла совпадает со значением переменной abbrev-file-name ,

• файловом посещения буфера + основной режим является latex-mode от встроенного tex-mode.el - не AucTeX.

• файл-посещение-буфер + основной режим markdown-mode.

• файл-посещение-буфер + основной режим emacs-lisp-mode.

• файл-посещение-буфер + производный-режим - org-mode.

(defun my-save-some-buffers() 
(interactive) 
    (save-some-buffers 'no-confirm (lambda() 
    (cond 
     ((and buffer-file-name (equal buffer-file-name abbrev-file-name))) 
     ((and buffer-file-name (eq major-mode 'latex-mode))) 
     ((and buffer-file-name (eq major-mode 'markdown-mode))) 
     ((and buffer-file-name (eq major-mode 'emacs-lisp-mode))) 
     ((and buffer-file-name (derived-mode-p 'org-mode))))))) 

(global-set-key [f5] 'my-save-some-buffers) 
2

От информационной странице save-some-buffers:

(копи-некоторые-буферы & опционально ARG ПРЕД)

Сохранить некоторые модифицированные буферы файлов-посещения. Спросит пользователя о каждом из них. Вы можете ответить y' to save, n 'не сохранять, C-r' to look at the buffer in question with view-buffer' перед принятием решения или d' to view the differences using diff-buffer-with-file '.

Эта команда сначала сохраняет любые буферы, где «buffer-save-without-query» не равен нулю, без запроса.

Поэтому вы должны установить переменную buffer-save-without-query в t (например) для всех ваших файлов. (add-hook 'find-file-hook (lambda() (setq buffer-save-without-query t))) должен сделать трюк.

+0

Когда я добавляю '(setq-default buffer-save-without-query t)' в файл '.emacs', а затем запускаю команду' save-some-buffers', она по-прежнему предлагает мне: 'Файл для сохранения в : ~/'(хотя все мои буферы были ранее сохранены на диске) – incandescentman

+0

Я не понимаю, какова ваша точная настройка/проблема. –

+0

Я хочу, чтобы он сохранил все эти буферы без подсказки.Теперь вместо сохранения молча, когда я делаю 'save-some-buffers' или даже' save-buffers-kill-terminal', он предлагает мне: 'Файл для сохранения: ~ /' – incandescentman

12

Там нет необходимости устанавливать какие-либо пользовательские переменные, вы просто:

C-u C-x s 

Или в длинных рук:

Ctrl + уCtrl + хs

Кроме того, вы можете просто сделать, C-x s и нажмите ! в ответном ответе «да» для всех сохраняемых буферов файлов. Который не является строго молчаливым, но он все еще очень быстрый/ненавязчивый. (кредит: @phils)

8

Если передать не-ноль, чтобы сохранить-некоторые-буфер будет сохранять все файлы без запроса, так что вы можете сделать что-то вроде

(defun save-all() (interactive) (save-some-buffers t)) 
(global-set-key (kbd "C-S") 'save-all) 
Смежные вопросы