2012-06-06 3 views
4

Я хочу быть в состоянии сказать Emacs, чтобы открывать файлы в режиме только для чтения или в автоматическом режиме REVERT, предоставляя аргумент командной строки, например:Emacs аргументы пользовательских командной строки

emacs -A file1 file2 file3 ... 

должен открыть файлы в автоматическом режиме REVERT

emacs -R file1 file2 file3 ... 

должны открывать файлы в режиме только для чтения

я нашел следующее:

(defun open-read-only (switch) 
    (let ((file1 (expand-file-name (pop command-line-args-left)))) 
    (find-file-read-only file1))) 
(add-to-list 'command-switch-alist '("-R" . open-read-only)) 

(defun open-tail-revert (switch) 
    (let ((file1 (expand-file-name (pop command-line-args-left)))) 
    (find-file-read-only file1) 
    (auto-revert-tail-mode t))) 
(add-to-list 'command-switch-alist '("-A" . open-tail-revert)) 

проблема заключается в том, что он работает только для одного файла за раз.

т.е.

emacs -R file1 

работает, но

emacs -R file1 file2 

не работает.

Как изменить функции выше, чтобы они могли открыть несколько файлов одновременно в указанных режимах? Может ли кто-нибудь предложить простое и элегантное решение?

ответ

4

Просто потребляют элементы из command-line-args-left до следующего коммутатора:

(defun open-read-only (switch) 
    (while (and command-line-args-left 
       (not (string-match "^-" (car command-line-args-left)))) 
    (let ((file1 (expand-file-name (pop command-line-args-left)))) 
     (find-file-read-only file1)))) 

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

Смежные вопросы