lua-native sorting of dialy, weekly notes - thx to plenary.scan_dir()!!!

This commit is contained in:
Rene Schallner
2021-11-26 02:03:10 +01:00
parent 7eca654f9c
commit 4735cef711
4 changed files with 40 additions and 14 deletions

View File

@@ -1,9 +1,13 @@
# Backlog # Backlog
- [ ] implement sorting of the file list that works as well as the `daily_finder.sh` we abandoned - [ ]: (silly idea) check if we can paste imgs into nvim
- [ ] yt video - [ ] yt video
## Dones ## Dones
- [x] implement sorting of the file list that works as well as the `daily_finder.sh` we abandoned
- `plenary.scan_dir()` to the rescue!
- [x] vimhelp - [x] vimhelp
- [x] Honor day, month, year etc when creating a note via calendar! - [x] Honor day, month, year etc when creating a note via calendar!
- [x] awesome calendar support - [x] awesome calendar support

View File

@@ -35,12 +35,6 @@ Since this plugin uses [telescope.nvim](https://github.com/nvim-telescope/telesc
[Neovim (v0.5.1)](https://github.com/neovim/neovim/releases/tag/v0.5.1) or the latest neovim nighly commit is required for `telescope.nvim` to work. [Neovim (v0.5.1)](https://github.com/neovim/neovim/releases/tag/v0.5.1) or the latest neovim nighly commit is required for `telescope.nvim` to work.
#### Ripgrep
For proper sort order of daily notes, the `rg` executable ([Ripgrep](https://github.com/BurntSushi/ripgrep)) is required and needs to be installed so that nvim can find it. So make sure it's in your path.
If rg isn't found at `setup()` time, it will not be used. In that case, the sort order of daily and weekly notes are likely to be reversed or total garbage. I do accept pull requests, though, for a lua implementation 😁!
If you can't use `rg`, I recommend using `goto_today()` and `goto_thisweek()` instead of `find_daily_notes()` and `find_weekly_notes()`, as this pre-fills the search field, which makes the results list look a bit more sane.
#### calendar-vim Plugin (optional) #### calendar-vim Plugin (optional)

View File

@@ -264,8 +264,8 @@ telekasten.find_notes()~
*telekasten.find_daily_notes()* *telekasten.find_daily_notes()*
telekasten.find_daily_notes()~ telekasten.find_daily_notes()~
Find daily notes by date, via Telescope. File names are sorted by file Find daily notes by date, via Telescope. File names are sorted by file name,
creation time, most recent file first. most recent file first.
If today's daily note is not present, will be created if If today's daily note is not present, will be created if
`dailies_create_nonexisting` is set to `true`. `dailies_create_nonexisting` is set to `true`.
@@ -302,7 +302,7 @@ telekasten.goto_today()~
*telekasten.find_weekly_notes()* *telekasten.find_weekly_notes()*
telekasten.find_weekly_notes()~ telekasten.find_weekly_notes()~
Find weekly notes by week, via Telescope. File names are sorted by file Find weekly notes by week, via Telescope. File names are sorted by file
creation time, most recent file first. name, most recent file first.
If this week's daily note is not present, will be created if If this week's daily note is not present, will be created if
`weeklies_create_nonexisting` is set to `true`. `weeklies_create_nonexisting` is set to `true`.

View File

@@ -1,6 +1,10 @@
local builtin = require("telescope.builtin") local builtin = require("telescope.builtin")
local actions = require("telescope.actions") local actions = require("telescope.actions")
local action_state = require("telescope.actions.state") local action_state = require("telescope.actions.state")
local pickers = require("telescope.pickers")
local finders = require("telescope.finders")
local conf = require("telescope.config").values
local scan = require("plenary.scandir")
-- declare locals for the nvim api stuff to avoid more lsp warnings -- declare locals for the nvim api stuff to avoid more lsp warnings
local vim = vim local vim = vim
@@ -146,6 +150,24 @@ local path_to_linkname = function(p)
return fn return fn
end end
local order_numeric = function(a, b)
return a > b
end
local find_files_sorted = function(opts)
opts = opts or {}
local file_list = scan.scan_dir(opts.cwd, {})
table.sort(file_list, order_numeric)
pickers.new(opts, {
finder = finders.new_table({
results = file_list,
}),
sorter = conf.generic_sorter(opts),
previewer = conf.file_previewer(opts),
}):find()
end
-- --
-- FindDailyNotes: -- FindDailyNotes:
-- --------------- -- ---------------
@@ -164,7 +186,8 @@ local FindDailyNotes = function(opts)
create_note_from_template(today, fname, note_type_templates.daily) create_note_from_template(today, fname, note_type_templates.daily)
end end
builtin.find_files({ -- builtin.find_files({
find_files_sorted({
prompt_title = "Find daily note", prompt_title = "Find daily note",
cwd = ZkCfg.dailies, cwd = ZkCfg.dailies,
find_command = ZkCfg.find_command, find_command = ZkCfg.find_command,
@@ -189,7 +212,8 @@ local FindWeeklyNotes = function(opts)
create_note_from_template(title, fname, note_type_templates.weekly) create_note_from_template(title, fname, note_type_templates.weekly)
end end
builtin.find_files({ -- builtin.find_files({
find_files_sorted({
prompt_title = "Find weekly note", prompt_title = "Find weekly note",
cwd = ZkCfg.weeklies, cwd = ZkCfg.weeklies,
find_command = ZkCfg.find_command, find_command = ZkCfg.find_command,
@@ -280,7 +304,8 @@ local GotoToday = function(opts)
create_note_from_template(word, fname, note_type_templates.daily, opts) create_note_from_template(word, fname, note_type_templates.daily, opts)
end end
builtin.find_files({ -- builtin.find_files({
find_files_sorted({
prompt_title = "Goto day", prompt_title = "Goto day",
cwd = ZkCfg.home, cwd = ZkCfg.home,
default_text = word, default_text = word,
@@ -418,7 +443,8 @@ local GotoThisWeek = function(opts)
create_note_from_template(title, fname, note_type_templates.weekly) create_note_from_template(title, fname, note_type_templates.weekly)
end end
builtin.find_files({ -- builtin.find_files({
find_files_sorted({
prompt_title = "Goto this week:", prompt_title = "Goto this week:",
cwd = ZkCfg.weeklies, cwd = ZkCfg.weeklies,
default_text = title, default_text = title,
@@ -519,6 +545,8 @@ local Setup = function(cfg)
ZkCfg[k] = v ZkCfg[k] = v
end end
end end
-- TODO: this is obsolete:
if vim.fn.executable("rg") then if vim.fn.executable("rg") then
ZkCfg.find_command = { "rg", "--files", "--sortr", "created" } ZkCfg.find_command = { "rg", "--files", "--sortr", "created" }
else else