feat(diary): -count wiki selector for diary-note + index commands (P3)
Closes the last command-cluster gap. Upstream's diary-note family
(:Vimwiki{Make,TabMake,MakeYesterday,MakeTomorrow}DiaryNote + VimwikiDiaryIndex,
and the Nuwiki* forms) carry -count=0 where the count selects the wiki number;
nuwiki's were bare. Implemented as a real end-to-end selector, reusing existing
infrastructure:
- Server (commands.rs): OptUriArg gained an optional `wiki` selector;
resolve_diary_wiki(backend, uri, wiki) now prefers it (via the existing
resolve_wiki_selector, which already handles a 0-indexed wiki number) over
the buffer URI. Used by diary_open_relative + diary_open_index.
- Clients: s:diary_open / _diary_open (both) and diary_today/today_tab/
yesterday/tomorrow/index take a count and send {wiki: count-1} when >0. All
22 diary-note + DiaryIndex command defs across the 4 contexts are now
-count=0 passing <count>. diary_next/prev ignore the count.
Tests: cmd.VimwikiMakeDiaryNote_has_count (test-keymaps.lua) +
cmd.Vimwiki{MakeDiaryNote,DiaryIndex}_accepts_count (test-keymaps-vim.vim).
Workspace test/clippy/fmt clean with CI flags; lua 284, vim 272/18/21.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -392,7 +392,15 @@ enum RelativeDay {
|
||||
Tomorrow,
|
||||
}
|
||||
|
||||
fn resolve_diary_wiki(backend: &Backend, uri: Option<&Url>) -> Option<crate::wiki::Wiki> {
|
||||
fn resolve_diary_wiki(
|
||||
backend: &Backend,
|
||||
uri: Option<&Url>,
|
||||
wiki: Option<&Value>,
|
||||
) -> Option<crate::wiki::Wiki> {
|
||||
// An explicit wiki selector (vimwiki's `-count`) wins over the buffer URI.
|
||||
if let Some(sel) = wiki {
|
||||
return resolve_wiki_selector(backend, Some(sel));
|
||||
}
|
||||
if let Some(u) = uri {
|
||||
if let Some(w) = backend.wiki_for_uri(u) {
|
||||
return Some(w);
|
||||
@@ -407,7 +415,7 @@ fn diary_open_relative(
|
||||
rel: RelativeDay,
|
||||
) -> Result<Option<Value>, String> {
|
||||
let p = parse_optional_uri_arg(args)?;
|
||||
let Some(wiki) = resolve_diary_wiki(backend, p.uri.as_ref()) else {
|
||||
let Some(wiki) = resolve_diary_wiki(backend, p.uri.as_ref(), p.wiki.as_ref()) else {
|
||||
return Ok(None);
|
||||
};
|
||||
let freq = wiki.config.frequency();
|
||||
@@ -430,7 +438,7 @@ fn diary_open_relative(
|
||||
|
||||
fn diary_open_index(backend: &Backend, args: Vec<Value>) -> Result<Option<Value>, String> {
|
||||
let p = parse_optional_uri_arg(args)?;
|
||||
let Some(wiki) = resolve_diary_wiki(backend, p.uri.as_ref()) else {
|
||||
let Some(wiki) = resolve_diary_wiki(backend, p.uri.as_ref(), p.wiki.as_ref()) else {
|
||||
return Ok(None);
|
||||
};
|
||||
let Some(uri) = crate::diary::index_uri(&wiki.config) else {
|
||||
@@ -444,7 +452,7 @@ fn diary_generate_index(
|
||||
args: Vec<Value>,
|
||||
) -> Result<Option<WorkspaceEdit>, String> {
|
||||
let p = parse_optional_uri_arg(args)?;
|
||||
let Some(wiki) = resolve_diary_wiki(backend, p.uri.as_ref()) else {
|
||||
let Some(wiki) = resolve_diary_wiki(backend, p.uri.as_ref(), p.wiki.as_ref()) else {
|
||||
return Ok(None);
|
||||
};
|
||||
let utf8 = backend.use_utf8.load(Ordering::Relaxed);
|
||||
|
||||
Reference in New Issue
Block a user