Sean O'Halpin <sean.ohalpin <at>> writes:
> Is that publicly available anywhere?

Here you go. To use, add orgl-enable to the relevant mode-hook, eg:
(add-hook 'python-mode-hook 'orgl-enable)


(defface orgl-target-face
 '((t (:foreground "cyan" :background "royalblue4" :weight normal)))
;;  '((t (:weight bold :box (:line-width 1 :color "red"))))
  "The face used to emphasise org-mode <<targets>>.")
(make-face 'orgl-target-face)
(setq orgl-target-face 'orgl-target-face)

(defvar *orgl-link-abbrevs*
  '((lisp-mode ("defun" . "(defun %s (")
               ("class" . "(defclass %s (")
               ("wwdoc" . "file:../TODO::%s")))
  "Define link abbreviations for each major mode.
The variable contains a list, each element of which has the
ABBREV is a short string. Links of the form '[[ABBREV:TEXT]]' will
be expanded into EXPANSION. See the documentation for
org-link-abbrev-alist for more details.")

(defun orgl-do-font-lock (add-or-remove)
  "Add or remove font-lock rules for org hyperlinks."
  (funcall add-or-remove nil '((org-activate-bracket-links (0 'org-link t))))
  (funcall add-or-remove nil `((,org-target-regexp (0 'orgl-target-face t)))))

(defun orgl-enable ()
  "Enable fontification of org-style hyperlinks in the current buffer."
  ;; The following variable has to be bound to a string, or following links
  ;; will not work.
  ;; There is probably a more elegant solution.
  (unless org-todo-line-tags-regexp
    (set (make-local-variable 'org-todo-line-tags-regexp)
  (orgl-do-font-lock 'font-lock-add-keywords)
  ;; Stop org links from having invisible [[ brackets ]].
  (remove-text-properties (point-min) (point-max) '(invisible nil))
  ;; Add special link abbreviations.
  (unless org-link-abbrev-alist-local
    (make-local-variable 'org-link-abbrev-alist-local))
  (dolist (pair (cdr (assoc major-mode *orgl-link-abbrevs*)))
    (pushnew pair org-link-abbrev-alist-local)))

(defun orgl-disable ()
  "Disable fontification of org-style hyperlinks in the current buffer."
     (point-min) (point-max)
       '(mouse-face t keymap t org-linked-text t
                    invisible t intangible t
                    org-no-flyspell t))
  (orgl-do-font-lock 'font-lock-remove-keywords)
  ;; Remove special link abbreviations
  (dolist (pair (cdr (assoc major-mode *orgl-link-abbrevs*)))
    (setq org-link-abbrev-alist-local
          (delete pair org-link-abbrev-alist-local))))

Reply via email to