emacs-kv
emacs-kv copied to clipboard
Key/Value collection type functions: for alists, hashtables and plists. Useful stuff.
A collection of tools for dealing with key/value data structures such as plists, alists and hash-tables.
=== kvalist->filter-keys alist &rest keys ===
Return the //alist// filtered to the //keys// list.
Only pairs where the car is a [[member]] of //keys// will be returned.
=== kvalist->hash alist &rest hash-table-args ===
Convert //alist// to a HASH.
//hash-table-args// are passed to the hash-table creation.
=== kvalist->keys alist ===
Get just the keys from the alist.
=== kvalist->plist alist ===
Convert an alist to a plist.
=== kvalist->values alist ===
Get just the values from the alist.
=== kvalist-keys->* alist fn ===
Convert the keys of //alist// through //fn//.
=== kvalist-keys->symbols alist ===
Convert the keys of //alist// into symbols.
=== kvalist-sort alist pred ===
Sort //alist// (by key) with //pred//.
=== kvalist-sort-by-value alist pred ===
Sort //alist// by value with //pred//.
=== kvalist2->alist alist2 car-key cdr-key &optional proper ===
Reduce the //alist2// (a list of alists) to a single alist.
//car-key// is the key of each alist to use as the resulting key and //cdr-key// is the key of each alist to user as the resulting cdr.
If //proper// is [[t]] then the alist is a list of proper lists, not cons cells.
=== kvalist2->filter-keys alist2 &rest keys ===
Return the //alist2// (a list of alists) filtered to the //keys//.
=== kvalist2->plist alist2 ===
Convert a list of alists too a list of plists.
=== kvcmp a b ===
Do a comparison of the two values using printable syntax.
Use this as the function to pass to [[sort]].
=== kvdotassoc expr table ===
Dotted expression handling with [[assoc]].
=== kvdotassoc-fn expr table func ===
Use the dotted //expr// to access deeply nested data in //table//.
//expr// is a dot separated expression, either a symbol or a string. For example:
{{{ "a.b.c" }}}
or:
{{{ 'a.b.c }}}
If the //expr// is a symbol then the keys of the alist are also expected to be symbols.
//table// is expected to be an alist currently.
//func// is some sort of [[assoc]] like function.
=== kvdotassq expr table ===
Dotted expression handling with [[assq]].
=== kvhash->alist hash ===
Convert //hash// to an ALIST.
=== kvmap-bind args sexp seq ===
A hybrid of [[destructuring-bind]] and [[mapcar]] //args// shall be of the form used with [[destructuring-bind]]
Unlike most other mapping forms this is a macro intended to be used for structural transformations, so the expected usage will be that //args// describes the structure of the items in //seq//, and //sexp// will describe the structure desired.
=== kvplist->alist plist ===
Convert //plist// to an alist.
The keys are expected to be :prefixed and the colons are removed. The keys in the resulting alist are symbols.
=== kvplist->filter-keys plist &rest keys ===
Filter the plist to just those matching //keys//.
//keys// must actually be :-less symbols.
[[kvalist->filter-keys]] is actually used to do this work.
=== kvplist->merge &rest plists ===
Merge the 2nd and subsequent plists into the first, clobbering values set by lists to the left.
=== kvplist2->filter-keys plist2 &rest keys ===
Return the //plist2// (a list of plists) filtered to the //keys//.