diff --git a/core/core-funcs.el b/core/core-funcs.el index 4cffcf022017..875708a1b849 100644 --- a/core/core-funcs.el +++ b/core/core-funcs.el @@ -171,12 +171,40 @@ Supported properties: (find-file file) (org-indent-mode) (view-mode) - (when(and(boundp 'space-doc-mode)(fboundp 'space-doc-mode)(space-doc-mode))) + (goto-char (point-min)) + ;; Enable `space-doc-mode' if defined. + (when (and (boundp 'space-doc-mode) + (fboundp 'space-doc-mode)) + (space-doc-mode)) + (when anchor-text - (re-search-forward anchor-text)) - (beginning-of-line) + (if (string= anchor-text "^") + + (re-search-forward anchor-text) + + (progn (save-excursion + (let + ;; Copied from "toc-org" to avoid requiring the package. + ((toc-regexp (concat "^*.*:toc\\([@_][0-9]\\|" + "\\([@_][0-9][@_][a-zA-Z]+\\)" + "\\)?:\\($\\|[^ ]*:$\\)"))) + (when (re-search-forward toc-regexp nil t) + ;; Expand TOC. + (outline-show-subtree)))) + + (when (re-search-forward anchor-text nil t) + (let ((cur-line (buffer-substring-no-properties + (line-beginning-position) + (line-end-position))) + (toc-org-rel-link "\\[\\[\\#[[:alnum:]_-]+\\]\\[.*\\]\\]")) + ;; If the `point' is over a TOC-org relative heading link - + ;; go to the heading. + (when (string-match-p toc-org-rel-link cur-line) + (org-open-at-point))))))) + +(beginning-of-line) (cond ((eq expand-scope 'subtree) diff --git a/layers/org/local/space-doc/space-doc.el b/layers/org/local/space-doc/space-doc.el index 63bc93a28383..ea8d1e411928 100644 --- a/layers/org/local/space-doc/space-doc.el +++ b/layers/org/local/space-doc/space-doc.el @@ -7,6 +7,22 @@ ;; ;; This file is not part of GNU Emacs. ;; +;; Description: +;; This package provides: +;; - `space-doc-mode' - buffer local minor mode +;; for viewing the Spacemacs documentation files. +;; The mode hides org meta tags to improve readability. +;; - `org-mode' link-type "https" that opens the local +;; copies of the Spacemacs documentation files with +;; `spacemacs/view-org-file' and supports GitHub style +;; heading links. +;; +;; For example, the link: +;; https://github.com/syl20bnr/spacemacs/blob/develop/layers/org/README.org#links +;; Will be handled similary to as if it was: +;; file:~/.emacs.d/layers/org/README.org::*links +;; Also the `space-doc' mode will be applied. + ;;; License: GPLv3 ;;; Code: (require 'face-remap) @@ -42,5 +58,23 @@ keeping their content visible." (progn (message (format "space-doc-mode error:%s isn't an org-mode buffer" (buffer-name))) (setq org-mode nil)))) +(defun spacemacs//space-doc-open (path) + "If the `path' argument is a link to an .org file that is located +in the Spacemacs GitHub repository - Visit the local copy +of the file with `spacemacs/view-org-file'. +Open all other links with `browse-url'." + (let ((git-url-root-regexp + (concat "\\/\\/github\\.com\\/syl20bnr" + "\\/spacemacs\\/blob\\/[^/]+\\/\\(.*\\.org\\)\\(\\#.*\\)?"))) + (if (string-match git-url-root-regexp path) + (spacemacs/view-org-file (concat user-emacs-directory + (match-string 1 path)) + (or (match-string 2 path) + "^") + 'subtree) + (browse-url (concat "https://" path))))) + +(org-add-link-type "https" 'spacemacs//space-doc-open) + (provide 'space-doc) ;;; space-doc.el ends here