Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yuki-inoue/tblui.el
https://github.com/yuki-inoue/tblui.el
Last synced: 4 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/yuki-inoue/tblui.el
- Owner: Yuki-Inoue
- License: gpl-3.0
- Created: 2016-10-02T10:03:00.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-12-01T11:00:06.000Z (about 1 year ago)
- Last Synced: 2024-11-29T18:16:03.809Z (about 2 months ago)
- Language: Emacs Lisp
- Size: 31.3 KB
- Stars: 12
- Watchers: 3
- Forks: 3
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# tblui.el
Define tabulated-list based UI easily.
# How to Install
Available on MELPA. Or, you can clone this repo and put it on your loadpath.
# Motivation
`tabulated-list` is the official library which implements basic functionality for table like buffer.
Implementing nice UI on top of this, however, you still needs to write view/UI logic.Motivation for this package is to reduce boilerplate works required to make an table-like UI.
This is achieved by utilizing following 2 packages:* `magit-popup` : for magit-like popup UI
* `tablist` : for dired like UIThe user of this package can focus on writing the logic of table entity creation/interaction.
In this document, the UI defined via this package is referred as tblui.
# How to use
Here's a very simple example:
```emacs-lisp
(require 'tblui)(defun test-tblui-entries ()
"Entry provider a list of lists, car is index, cdr is a vector of columns."
(list
(list 0 ["in progress" "https://example.com/" "1970-01-01T00:00:00Z" "push" "Test/Build"])
(list 1 ["in progress" "https://example.com/" "1970-01-01T00:00:00Z" "push" "Test/Build"])
(list 3 ["in progress" "https://example.com/" "1970-01-01T00:00:00Z" "push" "Test/Build"])))(tblui-define test-tblui test-tblui-entries
[("Status" 10 nil) ("Link" 25 nil) ("Started At" 12 nil) ("Event" 8 nil) ("Workflow" 10 nil)])
```I believe giving actual example would be the most descriptory.
Below is the snippet from https://github.com/Yuki-Inoue/aws.elThis covers popup ui / key binding:
```emacs-lisp
(tblui-define
aws-instances
aws-instances-get-tabulated-list-entries
[("Repository" 10 nil)
("InstType" 10 nil)
("Name" 30 nil)
("Status" 10 nil)
("IP" 15 nil)
("Settings" 20 nil)]
((:key "I"
:name aws-instances-inspect-popup
:funcs ((?I "Inspect" aws-instances-inspect-instances)))(:key "S"
:name aws-instances-state-popup
:funcs ((?O "Stop" aws-instances-stop-instances)
(?R "Reboot" aws-instances-reboot-instances)
(?T "Terminate" aws-instances-terminate-instances)
(?S "Start" aws-instances-start-instances)))(:key "A"
:name aws-instances-action-popup
:funcs ((?R "Rename Instance" aws-instances-rename-instance)))(:key "C"
:name aws-instances-configure-popup
:funcs ((?C "Append ssh configs to ~/.ssh/config" aws-instances-configure-ssh-config)))(:key "B"
:name aws-instances-backup-popup
:funcs ((?I "Inspect" aws-instances-inspect-backup-instances)
(?B "Backup" aws-instances-backup-instances)))
))
```The macro defines all the functions/keybinds/popups required for the UI,
and the UI can be visited by calling `aws-instances-goto-ui` function in this example.The synopsis of this macro is shown below:
```emacs-lisp
(tblui-define TBLUI-NAME ENTRIES-PROVIDER TABLE-LAYOUT POPUP-DEFINITIONS)
```where
* `TBLUI-NAME` : the symbol name of defining tblui. It will be used as prefix for functions defined via this macro.
* `ENTRIES-PROVIDER` : the function which provides tabulated-list-entries
* `TABLE-LAYOUT` : the `tabulated-list-format` to be used for the tblui.
* `POPUP-DEFINITIONS` : list of popup definition.
A popup definition is an plist of `(:key KEY :name NAME :funcs FUNCTIONS)`. KEY is the key to be bound for the defined magit-popup. NAME is the name for defined magit-popup. FUNCTIONS is the list of action definition. Action definition is a list of 3 elements, which is `(ACTIONKEY DESCRIPTION FUNCTION)`. ACTIONKEY is the key to be used as action key in the magit-popup. DESCRIPTION is the description of the action.
FUNCTION is the logic to be called for this UI. It is the elisp function which receives the IDs of tabulated-list entry, and do what ever operation.With this macro `TBLUI-NAME-goto-ui` function is defined. Calling this function will popup and switch to the tblui buffer.