From: Juri Linkov Date: Sat, 15 Jun 2013 22:44:38 +0000 (+0300) Subject: * lisp/files-x.el (modify-file-local-variable-prop-line): Add local X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~2016^2~92 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=31489a32f575cb5cfcd8748355f46ae2afcc4436;p=emacs.git * lisp/files-x.el (modify-file-local-variable-prop-line): Add local variables to the end of the existing comment on the first line. Use `file-auto-mode-skip' to skip interpreter magic line, and also skip XML declaration. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 919772659ea..f7f42011575 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2013-06-15 Juri Linkov + + * files-x.el (modify-file-local-variable-prop-line): Add local + variables to the end of the existing comment on the first line. + Use `file-auto-mode-skip' to skip interpreter magic line, + and also skip XML declaration. + 2013-06-15 Stefan Monnier * startup.el (package--builtin-versions): New var. diff --git a/lisp/files-x.el b/lisp/files-x.el index 0ba245d423a..2ae1a0e4045 100644 --- a/lisp/files-x.el +++ b/lisp/files-x.el @@ -256,19 +256,40 @@ from the -*- line ignoring the input argument VALUE." (goto-char (point-min)) - ;; Skip interpreter magic line "#!" - (when (looking-at "^\\(#!\\|'\\\\\"\\)") + ;; Skip interpreter magic line "#!" or XML declaration. + (when (or (looking-at file-auto-mode-skip) + (looking-at "<\\?xml[^>\n]*>$")) (forward-line 1)) + (comment-normalize-vars) (let ((comment-style 'plain) - (comment-start (or comment-start ";;; "))) - (comment-region - (prog1 (point) - (insert "-*-") - (setq beg (point-marker)) - (setq end (point-marker)) - (insert "-*-\n")) - (point)))) + (comment-start (or comment-start ";;; ")) + (line-beg (line-beginning-position)) + (ce nil)) + ;; If the first line contains a comment. + (if (save-excursion + (and (looking-at comment-start-skip) + (goto-char (match-end 0)) + (re-search-forward comment-end-skip) + (goto-char (match-beginning 0)) + ;; Still on the same line? + (equal line-beg (line-beginning-position)) + (setq ce (point)))) + ;; Add local variables to the end of the existing comment. + (progn + (goto-char ce) + (insert " -*-") + (setq beg (point-marker)) + (setq end (point-marker)) + (insert "-*-")) + ;; Otherwise, add a new comment before the first line. + (comment-region + (prog1 (point) + (insert "-*-") + (setq beg (point-marker)) + (setq end (point-marker)) + (insert "-*-\n")) + (point))))) (cond ((looking-at "[ \t]*\\([^ \t\n\r:;]+\\)\\([ \t]*-\\*-\\)")