Button-lock mode is a minor mode which provides simple facilities to define clickable text based on regular expressions. Button-lock piggybacks on font-lock, and is efficient.
Button-lock buttons (links) can execute any function.
See WikiNavMode for a user-friendly library built on top of button-lock mode.
Both button-lock mode and WikiNavMode are available at github:
and via EmacsWiki:
Here’s a trivial example, showing how to use button-lock to activate hyperlinks in all buffers:
(require 'button-lock) (global-button-lock-mode 1) (button-lock-set-global-button "\\<http://[^[:space:]\n]+" 'browse-url-at-mouse :face 'link :policy 'prepend)
and here’s an interesting example, showing how to turn folding-mode delimiters into mouseable buttons:
(require 'folding) (require 'button-lock)
; turn folding-mode delimiters into mouseable buttons (add-hook 'folding-mode-hook #'(lambda () (button-lock-mode 1) (button-lock-set-button (concat "^" (regexp-quote (car (folding-get-mode-marks)))) 'folding-toggle-show-hide) (button-lock-set-button (concat "^" (regexp-quote (cadr (folding-get-mode-marks)))) 'folding-toggle-show-hide)))
It is probably more interesting to use button-lock from another library than it is to use button-lock directly.
Tested only on GNU Emacs version 24.1
No external dependencies
There is a bug in ButtonLockMode. There is a defface for button-lock-button-face but the name used in the rest of the code is button-lock-face. A temporary solution is to put:
(defface button-lock-face '((t nil)) "Face used to show active button-lock buttons. The default is for buttons to inherit whatever properties are already provided by font-lock." :group 'button-lock)
in your startup file. You can then customize the correct face and as a bonus it stops all those annoying messages about an invalid face. Does anyone know how I can contact the author?