(defvar outline-font-lock-keywords
'(
;; Highlight headings according to the level.
- (eval . (list (or outline-search-function
+ (eval . (list (or (when outline-search-function
+ (lambda (limit)
+ (when-let* ((ret (funcall outline-search-function limit)))
+ ;; This is equivalent to adding ".*" in the regexp below.
+ (set-match-data (list (match-beginning 0) (pos-eol)))
+ ret)))
(concat "^\\(?:" outline-regexp "\\).*" outline-heading-end-regexp))
0 '(if outline-minor-mode
(if outline-minor-mode-highlight
(string-to-syntax "'")))))
start end)))
+(defun elisp-outline-search (&optional bound move backward looking-at)
+ "Don't use leading parens in strings for outline headings."
+ (if looking-at
+ (and (looking-at outline-regexp)
+ (save-excursion (not (nth 8 (syntax-ppss (match-beginning 0))))))
+ (let ((search-success nil))
+ (while (and (setq search-success
+ (funcall (if backward #'re-search-backward #'re-search-forward)
+ (concat "^\\(?:" outline-regexp "\\)")
+ bound (if move 'move t)))
+ (save-excursion (nth 8 (syntax-ppss (match-beginning 0))))))
+ search-success)))
+
(defcustom emacs-lisp-mode-hook nil
"Hook run when entering Emacs Lisp mode."
:options '(eldoc-mode imenu-add-menubar-index checkdoc-minor-mode)
(add-hook 'xref-backend-functions #'elisp--xref-backend nil t)
(setq-local project-vc-external-roots-function #'elisp-load-path-roots)
(setq-local syntax-propertize-function #'elisp-mode-syntax-propertize)
+ (setq-local outline-search-function #'elisp-outline-search)
(add-hook 'completion-at-point-functions
#'elisp-capf nil 'local)
(add-hook 'flymake-diagnostic-functions #'elisp-flymake-checkdoc nil t)