Vincent Belaïche schrieb am Mo., 19. Juni 2017 um 12:51 Uhr: > > Concerning factorization, couldn't one use [\n\r] in all cases rather > than a switch based on some input argument ? > It should be possible, but it slightly changes the behavior of file-local variables. I wouldn't expect anything to break though. > > I was also wondering whether it is not possible to have a single regexp > for the whole Local Variable section. The following `doit' function is a > trial to do so. `M-x doit' will seach forward the whole Local Variables > section and display "ok" if found, "nak" otherwise. > > (defun doit () > (interactive) > (let* ((eol "\\(\r\n?\\|\n\\)") > (eol-again "\\1") > (space-maybe "[ \t]*") > ;; suffix may be the empty string > (suffix "\\([^ \r\n]+\\(?:[^\r\n]*[^ \r\n]\\)?\\|\\)") > (prefix "\\([ \t]*[^ \r\n]+\\(?:[^\r\n]*[^ \r\n]\\)?\\)") > (prefix-again "\\2") > (suffix-again "\\3") > (symbol: "\\(?:\\(?:[^][()'\" \t\r\n]\\|\\\\[][()'\" \t]\\)+[ > \t]*:\\)") > (sexp (concat "\\(?:" (substring prefix 2)))) > > (message (if (and (re-search-forward > (concat eol > prefix space-maybe "Local Variables:" > space-maybe suffix space-maybe eol-again > "\\(?:" prefix space-maybe symbol: sexp > space-maybe suffix-again space-maybe eol-again "\\)*" > prefix space-maybe "End:" space-maybe suffix > space-maybe "\\(" eol-again "\\)?" > ) > nil t) > ;; when the tailing eol is not there we must be at EOB. > (or (match-string 3) (eobp))) > "ok" "nak")))) > > > Looks good. Consider using `rx' for complex regexes, in my experiences it increases readability a lot.