-
-
Notifications
You must be signed in to change notification settings - Fork 136
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
More intuitive priority cycling #236
Conversation
Yes it does ... but it does consistently increase (decrease) priority. We could have it loop, i.e. Maybe it would make sense to have a separate cycle up/down command that would do what increase and decrease do atm. But it all ties back to how it's done in emacs. btw - great work on the Clocking summary table 😎 |
|
Good tip! but you still need to write in the priority, so that's 4 keys. Currently I use reduce priority to mark tasks as important - it's one key in the agenda |
A possible solution to this (for the sake of convenience) could be to have a |
Hmm 🤔 maybe a toggle function would be convenient? e.g. |
My previous suggestion is now possible by using the new treesitter functions. Here's an example. local Headline = require('orgmode.treesitter.headline')
local tree_utils = require('orgmode.utils.treesitter')
vim.keymap.set('n', '<some-keymap>', function()
local headline = Headline:new(tree_utils.closest_headline())
headline:set_priority('A')
end) |
4be6263
to
7e42fdb
Compare
9094379
to
abff0dc
Compare
44754e8
to
5143eed
Compare
This PR is quite old, but I thought about the problem and want to propose another solution - because the current behavior remains to be unintuitive. The priority settings allow to define a assumed priority for unprioritized headlines (which is @kristijanhusak What do you think? |
@seflue I prefer having it work as Emacs orgmode does. I'm not 100% sure how it works there from top of my head, but that would be the end goal. |
I agree with @seflue although sticking to Emacs is a good approach to keep consistency. Otherwise, maybe it makes even more sense to remove Also at some point I was thinking about just having a Anyways, I'm already used to the current shortcuts but in my mind |
So I actually installed emacs and checked. The Emacs behavior is close to what I described, but has a little quirk. When you move the cursor into a headline without a todo it works like: I don't know, if it is possible how to detect in Neovim, that the cursor didn't move. So the simplified version would be, what I formerly proposed. The current implementation in nvim-orgmode is obviously not, how Emacs orgmode works, especially, if you just want to increase or decrease the priority of an empty headline. |
@seflue thanks for testing. We can go with your proposed solution. |
@gerazov: I wouldn't remove the default priority altogether from the cycle, because when someone is increasing or decreasing it, one can assume, they actually care about it and it is more surprising, if it just vanishes completely. And if someone wants to remove it again, they have already a convenient way with org_priority. Would you be motivated to adjust your implementation to the behavior I described, or should we create a new PR? |
Uff this is an old merge request - should be rebased 2 years in the future 😅 Maybe I'll start one anew? |
@gerazov I tested to rebase the branch locally and had no issues, because there were no code changes in the last 2 years. 😉 |
@kristijanhusak The merge actually introduced an old bug I fixed in the past with a bigger refactoring of the priority_state class. Because of that adjusting the tests to the new behavior was not trivial anymore, so I sat down myself to implement the improvement and created a new PR: #817 So this PR is now obsolete and can be closed. Sorry for the inconvenience. |
I'm not sure if it's bound by emacs orgmode behavior, but current priority increase and decrease is a bit counterintuitive.
increase
cyclenone
(default priority) ->[#C]
(low priority) ->[#B]
(default priority) ->[#A]
(high priority) ->none
.decrease
cyclenone
(default priority) ->[#A]
(high priority) ->[#B]
(default priority) ->[#C]
(low priority) ->none
.Thus, the first press actually decreases priority, and then sets it to the initial state, and only then actually increases priority. The reverse is true for
decrease
- one needs to press 3 times to actually reduce priority.In other words to give
[#A]
priority to a task with no priority, the fastest way to do it is by pressingdecrease
priority.This PR modifies the cycle as follows:
increase
cyclenone
(default priority) ->[#A]
(high priority) ->none
[#C]
(low priority) ->[#B]
(default priority) ->[#A]
(high priority) ->none
decrease
cyclenone
(default priority) ->[#C]
(low priority) ->none
[#A]
(high priority) ->[#B]
(default priority) ->[#C]
(low priority) ->none
While it breaks the cycle starting with
none
, theincrease
anddecrease
reflect the change in priority.