-
-
Notifications
You must be signed in to change notification settings - Fork 213
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ref(calendar): refactored view outside of calendar module #815
ref(calendar): refactored view outside of calendar module #815
Conversation
Yes!! I really like this refactor, makes things much more readable. You're right, it would be better to make the current view/help components a per-view thing instead of a global thing, I'm happy with such a change later down the line :) One very small nitpick: be sure to run |
Thank you, I'm sorry I keep forgetting the formatting 😅 |
Co-authored-by: Andrea <andrea@DESKTOP-RPJDAO0.localdomain>
Co-authored-by: Andrea <andrea@DESKTOP-RPJDAO0.localdomain>
Co-authored-by: Andrea <andrea@DESKTOP-RPJDAO0.localdomain>
* upstream/main: feat(keybinds.lua): add descriptions to all keybinds chore: format with stylua feat(keybinds.lua): add `desc` fields to task keybinds (nvim-neorg#926) fix(core.summary): bugs + flexibility around incomplete metadata (nvim-neorg#927) docs(concealer): add comments for generators an formatters feat: add extra nesting level, make icons specific to non-anticonceal usage feat(concealer): add more icon generators feat(concealer): add numeric anticonceal if supported fix(concealer): record cursor upon init to fix first line conceal (nvim-neorg#924) feat: conceal the `{* }` parts of links fix(concealer): fix concealing in anchors, don't error on broken config (nvim-neorg#923) docs(todo_items): old keybinds in wiki docs: update `breaking-changes.norg` refactor!: remove the `core.news` module docs(README): make lazy.nvim install instructions more standard (nvim-neorg#905) refactor(docgen): remove unused variable fix(docgen): fix incorrect markdown indentation in wiki fix(docgen): don't fail on mixed-type tables (lists and dictionaries at the same time) fix(docgen): propagate docgen error exit code (nvim-neorg#917) refactor(promo): remove notify concealer (nvim-neorg#919) fix(concealer): do not listen vimleavepre (nvim-neorg#920) fix(concealer): minor fixes, plus wiki error fix (nvim-neorg#916) feat(concealer)!: rewrite for performance and stability (nvim-neorg#834) docs(wiki/Home.md): incorrect formatting in first paragraph refactor(core.highlights): don't halt execution when highlights cannot be applied fix(core.highlights): wrongly placed bracket fix(core.highlights): fix disappearing highlights when opening up norg files fix(highlights): attempt to reenable highlighting when none is found fix(todo_items): don't look at child if parent is todo (nvim-neorg#909) perf(core.promo): don't check `v.count`, use `v.count1` instead feat(promo): promote/demote prefix without following text (nvim-neorg#912) chore(highlights): add error message to assert for easier user debugging fix(highlights): assert on treesitter being enabled (nvim-neorg#914) feat(itero): don't start newline on empty line (nvim-neorg#911) refactor!(todo-items): since 5.0 do not warn about deprecated keybinds refactor!: since 5.0 do not longer warn about deprecated `core.norg.*` modules feat!: move to new/improved metadata parser, change highlight queries refactor(hop): add nicer error messages, format with stylua feat(esupports.hop): link jump to line + fixes + refactoring (nvim-neorg#903) refactor: remove `core.syntax` from the default module list chore(config.lua): update version variable chore(main): release 4.6.0 (nvim-neorg#900) feat(todo-items): add missing "need input" icon and action (nvim-neorg#896) fix(esupports): use structured api to avoid injection (nvim-neorg#899) fix(tempus): supply unprovided parameters from the current date when converting to `osdate` (supercedes nvim-neorg#897) chore(config.lua): update version variable chore(main): release 4.5.0 (nvim-neorg#883) fix: TSInstall issues on macOS, hopefully once and for good (nvim-neorg#891) docs(README): add treesitter fix for macos (nvim-neorg#887) feat: add colouring to TODO items docs: update ROADMAP.md fix(metagen): update generation to use user config for `updated` tag (nvim-neorg#882) chore(config.lua): update version variable chore(main): release 4.4.1 (nvim-neorg#880) docs(concealer): mention nerd font dependency for concealer (nvim-neorg#875) fix(tempus): properly handle conversions w.r.t Sun-Sat/Mon-Sun refactor: add `number_wrap()` function to `neorg.lib` fix(tempus): paste correct weekday from calendar chore(config.lua): update version variable chore(main): release 4.4.0 fix(tempus): don't use the `re` module if it doesn't exist (nvim-neorg#872) feat(journal): allow `custom` to take in no arguments, in which case spawn a calendar fix(promo): don't add whitespace to empty lines (nvim-neorg#852) chore(config.lua): update version variable chore(main): release 4.3.0 feat(calendar): add `t` command for "today" fix(hop): assume <current-day> when some parameters to dates are not supplied feat(hop): allow users to jump to timestamps fix(tempus): days like `4th`/`2nd` would not get parsed properly refactor(calendar): allow a target date to be supplied to the view chore(config.lua): update version variable chore(main): release 4.2.0 fix: don't allow tempus to load unless the Neovim ver is at least 0.10.0 feat(tempus): add insert mode `<M-d>` keybind to insert a date fix(tempus): do not assume `osdate` has all fields set feat(tempus): add `,id` (insert date) keybinding feat(tempus): allow dates to be converted to norg-compatible dates with `tostring()` chore(config.lua): update version variable chore(main): release 4.1.1 fix: remove calendar as a dependency of `core.ui`, fix errors for people not on nightly chore(config.lua): update version variable chore(main): release 4.1.0 refactor: remove `core.tempus` from `core.defaults` docs(tempus): add top documentation comment docs(calendar): add top documentation comment fix(calendar): allow the view to be written to on rerender feat(calendar): add `?` help page for custom input feat(calendar): implement basic `i` functionality feat(tempus): add `to_lua_date` function feat: add `core.tempus` module for date management feat(calendar): allow many simultaneous calendars fix(calendar): if another calendar is open then close it instead of erroring feat(calendar): add basic help popup when `?` is invoked refactor(core.ui): do not autoclose splits made via `create_split` fix(calendar): prevent the buffer from being modifiable after it has been filled fix(calendar): fix incorrect movement with `H` across boundaries of months with different lengths feat(calendar): add `$` and `0`/`_` navigation keybinds feat(calendar): add `m`/`M`, `L`/`H` and `y`/`Y` keybinds for the monthly view ref(calendar): implemented distance (monthly view) and run make format (nvim-neorg#858) ref(calendar): refactored view outside of calendar module (nvim-neorg#815) Fixed style with stylua Added standalone mode Fixed style with stylua Converted calendar into its own module Select range highlight hook is now more concise Mode integration (WIP) fix(calendar): properly display "today's day" in the calendar view chore: format with stylua, fix LLS warnings ref(calendar): refactored extmark creation, fixed single month view and added month limit (nvim-neorg#796) ref(calendar): extract rendering logic, add and improve keybinds (nvim-neorg#790) ref(calendar): extract logic, fix bug with time reformatting (nvim-neorg#788) fix(calendar): overlapping month names in the calendar view chore(calendar): initial setup for the screen update functionality ref: use numbers instead of strings for internal date structures feat: correctly handle year boundaries feat: add left-right cursor movement feat: place cursor over current day when creating calendar fix(calendar): make distance between each month uniform and support modifying the distance between each month feat(calendar): render as many months as is possible on screen feat(calendar): generalize functions even further, allow for offsets fix(calendar): fix rest of highlight groups fix(calendar): make month rendering work again fix(calendar): reversed namespace names fix(core.ui.calendar): wrong extmark being queried in month render routine feat: implement `render_month` function ref(core.ui.calendar): extract even more logic to `module.private` ref(core.ui.calendar): continue small refactors fix(core.ui.calendar): logic error when parsing virt_text length for `set_logical_extmark` ref(core.calendar.ui): begin code refactor (make the codebase ready for calendar logic) ref(core.ui.calendar): put rendered month extmark in decorational namespace feat(core.ui.calendar): highlight the current day differently ref(core.ui.calendar): move decorational namespace out of the `do .. end` block feat(core.ui.calendar): add day of the month rendering feat(core.ui.calendar): make the calendar display full month names feat(core.ui.calendar): implement more of the barebones UI feat(core.ui): let `create_split` take in a `height` variable feat(core.ui.calendar): add static calendar ui feat: add skeleton for the calendar UI element
This PR is just a refactor to propose a way to separate the handling of different views and modes from the actual drawing. Views are extracted into their own modules (in this case, inside the folder
core.ui.calendar.views
) and can add themselves to the calendar module through thepublic.add_view
method. This allows other plugins (like GTD, for example) to create their own views and add them to the calendar through an API.Let me know if you guys like this, the API is pretty simple. The
add_view
function of the calendar module accepts two arguments: the viewname
and the viewdetails
. The details have to include a setup function that will be called with the following arguments:ui_info
,mode
andoptions
.This is how it looks to add the monthly view:
core/ui/calendar/views/monthly.lua
:The new functions that were added are:
calendar.public.add_view
calendar.private.get_view
monthly.public.setup
It also slightly changes the api for the modes. The closing of the calendar window is now automatic whenever the callback that requested the date selection is called. This means that the calendar mode are not required to return
true
in order to close the calendar. They can now returntrue
if they want the view to be redrawn (that's how the modeon_select
return value should be considered after this change)One thing to note: since the calendar views could be very different in how they work (based on the goal they're trying to achieve), I think that the drawing of the last line, that shows how to get the help menu and also shows the view name, should be handled by the view itself. That's of course my opinion, and I'll be happy to see what everyone else think about this whole PR 🙂
Have a nice day!