diff options
Diffstat (limited to 'wiki-markup.el')
-rw-r--r-- | wiki-markup.el | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/wiki-markup.el b/wiki-markup.el index 61cdca8..4b6bc3e 100644 --- a/wiki-markup.el +++ b/wiki-markup.el @@ -71,7 +71,10 @@ (wiki-activate-raw-links) )) -(defvar wiki-outline-re "=+.*=+\ *$") +(defvar-local wiki-outline-re "=+.+=+\\ *$" + "Regexp to match outline headings.") +(defvar-local wiki-outline-format-re "=+\\ *%s\\ *=+\\ *$" + "Regexp format string to match a specific outline heading.") (defvar-local wiki-site nil "The identifier of the site of the current wiki buffer.") @@ -81,7 +84,19 @@ "Button action to follow a wikilink. The button data is passed as DATA." - (funcall (wiki-site-fetcher wiki-site) (alist-get 'target data))) + (let ((target (alist-get 'target data))) + (if (string-prefix-p "#" target) + (wiki-goto-heading (string-remove-prefix "#" target)) + (funcall (wiki-site-fetcher wiki-site) (alist-get 'target data))))) + +(defun wiki-goto-heading (heading) + (let ((point (point))) + (goto-char (point-min)) + (if (re-search-forward + (format wiki-outline-format-re (regexp-quote heading)) nil t) + (beginning-of-line 1) + (goto-char point) + (error "Cannot find heading: %s" heading)))) (defun wiki-guess-site () "Guess `wiki-site' from the default directory. @@ -288,21 +303,21 @@ LIMIT is the limit of the search, used for `font-lock-keywords'." (font-lock-extra-managed-props invisible font-lock-face button-data action category button htmlize-link help-echo display))) + (wiki-update-local-settings) + ) + +(defun wiki-update-local-settings () (setq-local outline-regexp wiki-outline-re) (setq-local outline-level 'wiki-outline-level) ;; We have to do this again because `outline-mode' used the default ;; `outline-regexp'. (setq-local imenu-generic-expression (list (list nil (concat "^\\(?:" outline-regexp "\\).*$") 0)) - imenu-space-replacement nil) - ) + imenu-space-replacement nil)) -(defun set-wiki-site (site) - "Set `wiki-site' to SITE." - (interactive (list - (completing-read "Set wiki site: " - (mapcar 'car wiki-sites)))) - (setq-local wiki-site (intern site))) +(add-hook 'hack-local-variables-hook + (lambda () (when (derived-mode-p 'wiki-mode) + (wiki-update-local-settings)))) (add-hook 'wiki-mode-hook 'wiki-guess-site) (add-hook 'wiki-mode-hook 'wiki-guess-title) |