Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

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


clickable text in Emacs






No packages published