clickable text in Emacs
Emacs Lisp Makefile
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Build Status


Mouseable text in Emacs.

wiki-nav example

Modern people using modern Emacs usually look at screens marked up with font-lock (aka syntax highlighting). Sometimes modern people even use a mouse.

This package provides

  • button-lock: a programmer-friendly library for making text mouseable

  • wiki-nav: a user-friendly library for making text mouseable

Because these packages are based on font-lock, they are efficient.


(require 'wiki-nav)

(global-wiki-nav-mode 1)

;; Sprinkle double-bracketed [[links]] in your code comments


Button-lock uses font-lock to make text clickable. In Emacs-speak: it creates font-lock keywords which have mouse bindings added to their text properties.

Button-lock has a simple interface that works like this

(button-lock-set-button "" 'browse-url-at-mouse)

However, button-lock does not create any buttons by default. You must write some Lisp code to make it do anything.

For much more information, see the source for button-lock.el and the docstring for button-lock-set-button (C-h f button-lock-set-button).


Wiki-nav is a user-friendly high-level interface to button-lock. It provides a minor mode which recognizes [[wiki-style]] double-bracketed navigation links in any type of file. Wiki-nav links permit the user to jump between sections, between files, or open external URLs.

Example usage:

  1. Put button-lock.el and wiki-nav.el on your Emacs load-path directory. If you've never heard of a load-path directory, create a new directory named ~/.emacs.d/lisp, and add this code to your ~/.emacs file:

    (add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp"))
  2. Add the following to your ~/.emacs file

    (require 'wiki-nav)
    (global-wiki-nav-mode 1)
  3. Sprinkle double-bracketed


    in your files. That's it. There's more functionality, but simple [[links]] may be all you need. When you click on [[links]], the point jumps forward in the buffer to the next matching wiki-nav link.

Advanced usage

Bracketed links may contain external URLs:


Or they may use various internally-recognized URI schemes:

  • visit: navigates to another file

  • func: navigates to the definition of a function

  • line: navigates to a line number

  • visit: may be combined with other schemes:


Path names and similar strings are subjected to URI-style unescaping before lookup. To link to a filename which contains a colon, substitute "%3A" for the colon character.

For much more information, see the source for wiki-nav.el and the docstring for wiki-nav-mode (C-h f wiki-nav-mode).

Prior Art

The following packages provide functionality that is similar to button-lock or wiki-nav:

David M. Koppelman

Miles Bader

David O'Toole

Carsten Dominik <carsten at orgmode dot org>

Other Libraries Built on Button-lock


Compatibility and Requirements

GNU Emacs version 24.5-devel     : not tested
GNU Emacs version 24.4           : yes
GNU Emacs version 24.3           : yes
GNU Emacs version 23.3           : yes
GNU Emacs version 22.2           : yes, with some limitations
GNU Emacs version 21.x and lower : unknown

Uses if present: nav-flash.el, back-button.el