emacs-kv icon indicating copy to clipboard operation
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//.