import { dictwatcheradd } from "https://deno.land/x/denops_std@v5.0.2/function/nvim/mod.ts";
Adds a watcher to a dictionary. A dictionary watcher is identified by three components:
- A dictionary({dict});
- A key pattern({pattern}).
- A function({callback}).
After this is called, every change on {dict} and on keys matching {pattern} will result in {callback} being invoked.
For example, to watch all global variables:
silent! call dictwatcherdel(g:, '*', 'OnDictChanged')
function! OnDictChanged(d,k,z)
echomsg string(a:k) string(a:z)
endfunction
call dictwatcheradd(g:, '*', 'OnDictChanged')
For now {pattern} only accepts very simple patterns that can contain a '' at the end of the string, in which case it will match every key that begins with the substring before the ''. That means if '*' is not the last character of {pattern}, only keys that are exactly equal as {pattern} will be matched.
The {callback} receives three arguments:
- The dictionary being watched.
- The key which changed.
- A dictionary containing the new and old values for the key.
The type of change can be determined by examining the keys present on the third argument:
- If contains both
old
andnew
, the key was updated. - If it contains only
new
, the key was added. - If it contains only
old
, the key was deleted.
This function can be used by plugins to implement options with validation and parsing logic.