navigel icon indicating copy to clipboard operation
navigel copied to clipboard

Emacs library to facilitate the creation of tabulated-list based UIs

  • navigel

    #+BEGIN_HTML

    MELPA Stable

      <a href="https://melpa.org/#/navigel">
        <img alt="MELPA" src="https://melpa.org/packages/navigel-badge.svg"/>
      </a>
    
      <a href="https://github.com/DamienCassou/navigel/actions/workflows/test.yml">
        <img alt="pipeline status" src="https://github.com/DamienCassou/navigel/actions/workflows/test.yml/badge.svg" />
      </a>
    </p>
    

    #+END_HTML

** Summary

The navigel package is a library that makes it simpler for Emacs Lisp developers to define user-interfaces based on tablists (also known as tabulated-lists). Overriding a few (CL) methods and calling `navigel-open' is all that's required to get a nice UI to navigate your domain objects (files, music library, database, etc.).

Navigel displays "entities" in a tablist. An "entity" is whatever you want that has a name. If an entity defines some "children", then pressing ~RET~ on the entity will list its children in another tablist.

Some features of navigel include:

  • pressing ~RET~ on an entity lists the entity's children in another tablist;
  • pressing ~^~ opens the parent of the current entity;
  • pressing ~m~ marks the entity at point;
  • pressing ~d~ deletes the marked entities.

Navigel automatically adds support for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Bookmarks.html#Bookmarks][bookmarks]] and [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Imenu.html#Imenu][imenu]].

This package depends on [[https://github.com/politza/tablist][tablist]] to get support for marking, deletion and more. On top of the tablist package, navigel provides an easy way to specify the content of your tabulated lists: through entities specified with method overrides. This makes it a breath to have tablist-based navigation within domain objects.

** Usage

This code is a library and is meant for Emacs Lisp developers. The source code is well documented and organized in sections. Please have a look at it.

Please have a look at the [[file:examples/navigel-ex-fs.el][examples/navigel-ex-fs.el]] file for an example on how to use the library. This file guides the reader through an implementation of a tablist-based directory navigator with support for marking and deleting:

[[file:media/files.png]]

** License

See [[file:COPYING][COPYING]]. Copyright (c) 2019-2023 Damien Cassou.

#+BEGIN_HTML Donate using Liberapay #+END_HTML

LocalWords: navigel tablist tablists