lst - manage lists in files
I keep lot of lists, usually I edit them with vim, this will end... today.
lst is a small program that provides functionality to manipulate lists of things.
https://github.com/marianoguerra/lst/ general help
usage: lst [-h] {add,remove,purge,slice,head,tail,filter,export} ...
positional arguments:
{add,remove,purge,slice,head,tail,filter,export}
add add an element to a list
remove remove element from list
purge purge removed items from the file
slice show a slice of the list
head show the first N elements of the list
tail show the last N elements of the list
filter show elements that match the filter
optional arguments:
-h, --help show this help message and exit
add command
usage: lst add [-h] [-a | -i INDEX] [-t TAG [TAG ...]] LIST MSG [MSG ...]
positional arguments:
LIST
MSG
optional arguments:
-h, --help show this help message and exit
-t TAG [TAG ...], --tags TAG [TAG ...]
tag message with specified tag
examples
# add item with tags
$ ~ lst add todos do something interesting -t tag1 tag2 tag3
* Tue Jul 10 17:55:46 2012 do something interesting # tag1 tag2 tag3
# add item without tags
$ ~ lst add todos do something else
* Tue Jul 10 17:55:55 2012 do something else
remove command
usage: lst remove [-h] [-a | -i INDEX [INDEX ...]] [-f] LIST
positional arguments:
LIST
optional arguments:
-h, --help show this help message and exit
-a, --all remove all elements from list
-i INDEX [INDEX ...], --index INDEX [INDEX ...]
remove elements at index
-f, --force don't ask for confirmation
examples
# example items from a list
0 * Tue Jul 10 17:55:46 2012 do something interesting # tag1 tag2 tag3
1 * Tue Jul 10 17:55:55 2012 do something else
2 * Tue Jul 10 17:59:20 2012 conquer the world
3 * Tue Jul 10 17:59:28 2012 do this demo # recursive
# remove the item at index 1
$ ~ lst remove todos -i 1
# result
0 * Tue Jul 10 17:55:46 2012 do something interesting # tag1 tag2 tag3
1 x Tue Jul 10 17:55:55 2012 do something else
2 * Tue Jul 10 17:59:20 2012 conquer the world
3 * Tue Jul 10 17:59:28 2012 do this demo # recursive
# remove items at index 0 and 3
$ ~ lst remove todos -i 0 3
# result
0 x Tue Jul 10 17:55:46 2012 do something interesting # tag1 tag2 tag3
1 x Tue Jul 10 17:55:55 2012 do something else
2 * Tue Jul 10 17:59:20 2012 conquer the world
3 x Tue Jul 10 17:59:28 2012 do this demo # recursive
purge command
usage: lst purge [-h] [-f] LIST
positional arguments:
LIST
optional arguments:
-h, --help show this help message and exit
-f, --force don't ask for confirmation
examples
# example items from a list
0 x Tue Jul 10 17:55:46 2012 do something interesting # tag1 tag2 tag3
1 x Tue Jul 10 17:55:55 2012 do something else
2 * Tue Jul 10 17:59:20 2012 conquer the world
3 x Tue Jul 10 17:59:28 2012 do this demo # recursive
$ ~ lst purge todos
are you sure you want to purge the list? [yes/no] yes
# result (removed items are completely removed from the list)
0 * Tue Jul 10 17:59:20 2012 conquer the world
slice command
usage: lst slice [-h] [-a] [-i] LIST BEGIN END STEP
positional arguments:
LIST
BEGIN
END
STEP
optional arguments:
-h, --help show this help message and exit
-a, --show-all show removed elements too
-i, --show-index show the absolute index of the item
examples
# slice from 0 to 2 with step 1
$ ~ lst slice todos 0 2 1
* Tue Jul 10 17:59:20 2012 conquer the world
* Tue Jul 10 18:02:16 2012 do thing 1
# same as before but displaying index
$ ~ lst slice todos 0 2 1 -i
0 * Tue Jul 10 17:59:20 2012 conquer the world
1 * Tue Jul 10 18:02:16 2012 do thing 1
# slice from 0 to 4 with step 2 showing index
$ ~ lst slice todos 0 4 2 -i
0 * Tue Jul 10 17:59:20 2012 conquer the world
2 * Tue Jul 10 18:02:16 2012 do thing 1
# slice from 0 to 4 with step 1 showing index
$ ~ lst slice todos 0 4 1 -i
0 * Tue Jul 10 17:59:20 2012 conquer the world
1 * Tue Jul 10 18:02:16 2012 do thing 1
3 * Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
# slice from 0 to 4 with step 1 showing index and removed items
$ ~ lst slice todos 0 4 1 -i -a
0 * Tue Jul 10 17:59:20 2012 conquer the world
1 * Tue Jul 10 18:02:16 2012 do thing 1
2 x Tue Jul 10 18:02:19 2012 do thing 2 # tag
3 * Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
head command
usage: lst head [-h] [-a] [-i] [-c COUNT] LIST
positional arguments:
LIST
optional arguments:
-h, --help show this help message and exit
-a, --show-all show removed elements too
-i, --show-index show the absolute index of the item
-c COUNT, --count COUNT
examples
# list first items with default count (10)
$ ~ lst head todos
* Tue Jul 10 17:59:20 2012 conquer the world
* Tue Jul 10 18:02:16 2012 do thing 1
* Tue Jul 10 18:02:19 2012 do thing 2 # tag
* Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
* Tue Jul 10 18:02:35 2012 do thing 4 # task task4
* Tue Jul 10 18:02:43 2012 do thing 5 # task
# list first two
$ ~ lst head todos -c 2
* Tue Jul 10 17:59:20 2012 conquer the world
* Tue Jul 10 18:02:16 2012 do thing 1
# list first 4 with index
$ ~ lst head todos -c 4 -i
0 * Tue Jul 10 17:59:20 2012 conquer the world
1 * Tue Jul 10 18:02:16 2012 do thing 1
2 * Tue Jul 10 18:02:19 2012 do thing 2 # tag
3 * Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
# remove one
$ ~ lst remove todos -i 2
# list again (see that item at index 2 is missing)
$ ~ lst head todos -i
0 * Tue Jul 10 17:59:20 2012 conquer the world
1 * Tue Jul 10 18:02:16 2012 do thing 1
3 * Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
4 * Tue Jul 10 18:02:35 2012 do thing 4 # task task4
5 * Tue Jul 10 18:02:43 2012 do thing 5 # task
# list all (see that item at index 2 is marked as removed)
$ ~ lst head todos -i -a
0 * Tue Jul 10 17:59:20 2012 conquer the world
1 * Tue Jul 10 18:02:16 2012 do thing 1
2 x Tue Jul 10 18:02:19 2012 do thing 2 # tag
3 * Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
4 * Tue Jul 10 18:02:35 2012 do thing 4 # task task4
5 * Tue Jul 10 18:02:43 2012 do thing 5 # task
tail command
usage: lst tail [-h] [-a] [-i] [-c COUNT] LIST
positional arguments:
LIST
optional arguments:
-h, --help show this help message and exit
-a, --show-all show removed elements too
-i, --show-index show the absolute index of the item
-c COUNT, --count COUNT
examples
# list last items with default count (10)
$ ~ lst tail todos
* Tue Jul 10 17:59:20 2012 conquer the world
* Tue Jul 10 18:02:16 2012 do thing 1
* Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
* Tue Jul 10 18:02:35 2012 do thing 4 # task task4
* Tue Jul 10 18:02:43 2012 do thing 5 # task
# list last two
$ ~ lst tail todos -c 2
* Tue Jul 10 18:02:35 2012 do thing 4 # task task4
* Tue Jul 10 18:02:43 2012 do thing 5 # task
# list last 4 with index
$ ~ lst tail todos -c 4 -i
1 * Tue Jul 10 18:02:16 2012 do thing 1
3 * Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
4 * Tue Jul 10 18:02:35 2012 do thing 4 # task task4
5 * Tue Jul 10 18:02:43 2012 do thing 5 # task
# list all (see that item at index 2 is marked as removed)
$ ~ lst tail todos -c 4 -i -a
2 x Tue Jul 10 18:02:19 2012 do thing 2 # tag
3 * Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
4 * Tue Jul 10 18:02:35 2012 do thing 4 # task task4
5 * Tue Jul 10 18:02:43 2012 do thing 5 # task
filter command
usage: lst filter [-h] [-a] [-i] [-t TAG [TAG ...] | -T TAG [TAG ...]]
LIST [QUERY [QUERY ...]]
positional arguments:
LIST
QUERY
optional arguments:
-h, --help show this help message and exit
-a, --show-all show removed elements too
-i, --show-index show the absolute index of the item
-t TAG [TAG ...], --tags TAG [TAG ...]
show elements that have *any* of the tags
-T TAG [TAG ...], --all-tags TAG [TAG ...]
show elements that have *all* of the tags
examples
# apply no filter
$ ~ lst filter todos
* Tue Jul 10 17:59:20 2012 conquer the world
* Tue Jul 10 18:02:16 2012 do thing 1
* Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
* Tue Jul 10 18:02:35 2012 do thing 4 # task task4
* Tue Jul 10 18:02:43 2012 do thing 5 # task
# list items that contain the word "thing"
$ ~ lst filter todos thing
* Tue Jul 10 18:02:16 2012 do thing 1
* Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
* Tue Jul 10 18:02:35 2012 do thing 4 # task task4
* Tue Jul 10 18:02:43 2012 do thing 5 # task
# list items that contain the word "thing" or the tag "task"
$ ~ lst filter todos thing -t task
* Tue Jul 10 18:02:16 2012 do thing 1
* Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
* Tue Jul 10 18:02:35 2012 do thing 4 # task task4
* Tue Jul 10 18:02:35 2012 do thing 4 # task task4
* Tue Jul 10 18:02:43 2012 do thing 5 # task
* Tue Jul 10 18:02:43 2012 do thing 5 # task
# list items that contain the tag "task"
$ ~ lst filter todos -t task
* Tue Jul 10 18:02:35 2012 do thing 4 # task task4
* Tue Jul 10 18:02:43 2012 do thing 5 # task
# list items that contain the tag "task" or "tag"
$ ~ lst filter todos -t task tag
* Tue Jul 10 18:02:28 2012 do thing 3 # tag task3
* Tue Jul 10 18:02:35 2012 do thing 4 # task task4
* Tue Jul 10 18:02:43 2012 do thing 5 # task
# list items that contain the tag "task" and "tag"
$ ~ lst filter todos -T task tag
# list items that contain the tag "task" and "task4"
$ ~ lst filter todos -T task task4
* Tue Jul 10 18:02:35 2012 do thing 4 # task task4
# list items that contain the tag "task" or "task4"
$ ~ lst filter todos -t task task4
* Tue Jul 10 18:02:35 2012 do thing 4 # task task4
* Tue Jul 10 18:02:43 2012 do thing 5 # task
# list items that contain the word "world"
$ ~ lst filter todos world
* Tue Jul 10 17:59:20 2012 conquer the world
configuration
by default the configuration is looked up in .config/lst
the file contains a JSON object with the configuration of the program with the following subojects:
lists
the lists object contains as keys the names of the lists that you want to configure and as values the configuration for those lists, for example:
if the path to a list doesn't exists it's created:
{
"lists": {
"links": {
"format": "src/me/links/%Y/%m.links" // strftime format can be used
}
}
}
fields
- format
- is the path to the list, you can use ~ to refer to the user's home and any format from datetime.strftime
details
license
MIT + optional beer for the author
author
marianoguerra
tools
python 3