From 31489a32f575cb5cfcd8748355f46ae2afcc4436 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Sun, 16 Jun 2013 01:44:38 +0300 Subject: [PATCH] * 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. --- lisp/ChangeLog | 7 +++++++ lisp/files-x.el | 41 +++++++++++++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 10 deletions(-) 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]*-\\*-\\)") -- 2.39.2