Planner support for action-lock.el
| emacsaction-lock.el is part
of HOWM. The following code enables Planner-style links
_anywhere_. Add it to your ~/.emacs and use M-x action-lock-mode
to turn action locking on.
(add-to-list 'action-lock-default-rules (list (with-planner emacs-wiki-url-or-name-regexp) 'planner-action-lock-follow-name-at-point)) (setq action-lock-rules action-lock-default-rules) (defvar planner-action-lock-default-directory planner-directory "Expand files relative to this directory.") (defun planner-action-lock-follow-name-at-point (&optional other-window) (let ((link-name (match-string 0)) (base-buffer (current-buffer)) ;; the name of the buffer that contains the link. check ;; whether buffer-name is a WikiName, else make it one (parent-name (or (emacs-wiki-page-name) (concat "[[" (buffer-name) "]]"))) (refresh-buffer nil)) (with-planner (let ((link (emacs-wiki-wiki-link-target link-name))) (if (emacs-wiki-wiki-url-p link) (emacs-wiki-browse-url link other-window) ;; The name list is current since the last time the buffer was ;; highlighted (let* ((base (emacs-wiki-wiki-base link-name)) (file (emacs-wiki-page-file base)) (tag (and (not (emacs-wiki-wiki-url-p link)) (emacs-wiki-wiki-tag link))) (find-file-function (if other-window 'find-file-other-window 'find-file)) (parent-allowed-backlink-p (not (string-match emacs-wiki-exclude-backlink-parent-regexp parent-name))) (parent-backlink (and parent-allowed-backlink-p (emacs-wiki-get-current-backlink))) (newbuf (funcall find-file-function (or file (expand-file-name base (or planner-action-lock-default-directory (and (buffer-file-name) (file-name-directory (buffer-file-name))) default-directory))))) (emacs-wiki-create-backlinks (and emacs-wiki-create-backlinks parent-allowed-backlink-p)) (make-link-p (and emacs-wiki-create-backlinks ;; insert backlink only in new files (null file) (not (string-match emacs-wiki-exclude-backlink-regexp (emacs-wiki-page-name (buffer-file-name newbuf))))))) (when tag (goto-char (point-min)) (re-search-forward (concat "^\\.?#" tag) nil t)) (when refresh-buffer (when make-link-p (emacs-wiki-insert-backlink parent-name parent-backlink)) ;; todo: is with-current-buffer necessary here? (with-current-buffer newbuf (add-hook 'after-save-hook 'emacs-wiki-refresh-buffers-once t t) ;; save the new file to avoid another backlink if the ;; buffer is visited again before being saved (when (or make-link-p (and (null file) (not parent-allowed-backlink-p))) ;; set modified status to t: pages with excluded ;; parents may not be modified, but we want to save ;; anyway (set-buffer-modified-p t) (save-buffer))))))))))
You can comment with Disqus or you can e-mail me at sacha@sachachua.com.