-
Notifications
You must be signed in to change notification settings - Fork 0
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
Feature request: Quicker command for starting or continuing a previous time entry #28
Comments
@tdnzr again, thanks heaps for the thorough suggestion.
Yeah, this is basically the only purpose of the
What would you suggest the default project to be, in that case?
Noted all these, really appreciate your suggestions and specifications. I've kept this issue in the back of my head over the past few days and come up with some potential suggestions—I'd appreciate your feedback and thoughts. Possible Solutions
Start a new time entry Settings
Allow saving timers with a numeric identifier (or description if that is what you want?). Settings
The list of results will contain: Settings
Let me know what you think! |
Wow you've thought this issue through! I'll have to ask a bunch of clarifying questions, though. Regarding your solutionsRe: solution 1:
I don't quite understand what this command is doing. The Or is Re: solution 2: Re: solution 3: I'm not sure I understand this right, and might need examples. Maybe the thing I'm suggesting below comes somewhat close to it? In general, I like the option to skip the "start time selection" at the end, because usage of it might differ a lot by user, and for those who don't use it, it currently costs an extra keypress. But it doesn't have to be a setting, and it might be desirable in general if such problems can be solved without adding settings. Something like your "now" command seems like a decent alternative to creating a new setting. Or maybe you could skip the start time selection by default unless a user appends -t or something? Based on the philosophy that the default UI should be as quick as possible, whereas it's fine if special cases require more clicks. Another angle of attackLooking at this topic from another angle, have you considered taking inspiration from, or outright copying, the official TogglTrack syntax / flow? The official devs of a time-tracking service have presumably thought a great deal about topics like "how do I create a time entry and quickly assign a project to it". In this case, here is their solution:
So if you type "take a walk @" in TogglTrack web, then the Projects selection opens, you select a project, and then you're back at "take a walk", except that now the selected project has been assigned. Similarly, if you type "take a walk #", then the tag selection menu opens, you select any number of tags, and then you're back at "take a walk", except that now the selected tags have been assigned. So here's a sketch of how something like this could look like in the FlowLauncher plugin:
If time_entry_name already exists, continue it. If it doesn't, start it with no project or a default project.
As soon as the @ (or another chosen keyword symbol) appears, FlowLauncher displays the same project selection menu as it currently does when typing I'm not sure how to conclude the project selection via this suggested command, though. I'd prefer to select the project and directly start the time entry with a single Enter, because that's less clicks. But then one can't continue with the potential tag selection. Ah, maybe it could work like this:
Optionally, tag selection could happen via the same logic. However, time entries can have multiple tags, and each tag can consist of multiple space-separated words, so I'm not sure how the flow or syntax here would have to look like. Maybe Overall I'm not married to this specific syntax suggestion, though it does sound pretty fast. I just find the default flow of "select project" -> "optionally name time entry" less intuitive than "name time entry" -> "optionally select project". Though now that I think about it, if you used an Such a syntax would also allow both creating projects with unnamed time entries, and time entries without assigned project. And the syntax based on optional keywords would obviate the need to implement a bunch of extra settings. |
Yeah, this was what was intended. I've also just now realised that this wouldn't actually be any less keystrokes (unless Probably not this solution.
Fair, neither. Also agree with the rest of your statements; that's primarily how I use Toggl too.
Think of this as a different plugin 'mode'; one that is suited for advanced users who are specifically looking for ⚡ blazing fast time entry creation. Hence, this mode needs to be explicitly enabled in the settings.
If you want to specify a project for a new time entry, you will have to use the standard
Noted. One thing I think to acknowledge with this discussion though is that removing start time selection wouldn't actually save any keypresses for What it would save is on
I have; this was what I first had in mind. I'll outline the primary reason I had for not implementing this in
Furthermore, I also came at this from the perspective that setting projects was the norm, and not the exception—it saves keystrokes by automatically entering project selection at the start, rather than requiring an extra Do you think this an incorrect assumption? I suppose I could take further inspiration from Toggl and implement the ability to
but this does not feel like the right solution; it simply hides painful behaviour behind a sign-up form.
While this is great in theory, I'm afraid this isn't currently possible to implement. Tab auto-completion/Enter actions are part of Flow's APIs—while This would not work for auto-completion as project names are not unique, so there must be some internal state coupled with project selection to remember the project's unique The only way I could do this is by auto-completing the project
Yeah, this is exactly why I've just completely avoided tags thus far. I personally don't use tags so this is not a problem for me, but please do let me know if this is a feature you are in need of.
That is fair. Another consideration I had for the existing flow is ease of implementation, as well as ease of use:
If the project can be specified anywhere in the query with the
I must admit, I am personally of the opinion to prefer adding settings to hide this more advanced, 'need-to-rtfm' behaviour from 'typical' users that just want something simple that works.
For the most part, Tab auto-complete and Enter currently do the exact same thing except for the final action (except project selection, for the reasons outlined above—have you noticed this?). I'd be hesitant to change to an implementation where the user needs to rely on Tab for functionality, as I suspect there would be a non-zero user base that just uses the mouse to make selections—ie analogous to the Enter key. I know this comment is a little verbose, but I hope it gives some insight into the design constraints and philosophy! Please let me know any thoughts you have. Personally, I am leaning towards my original solution 3. |
Preface: We might be reaching a point in this discussion where it has become technical enough that my ability to meaningfully contribute is limited, because I'm not familiar enough with the design constraints of FlowLauncher plugins. With that being said:
I'm still envisioning an implementation that's better for everyone, not just power users, so that no extra settings need to be enabled. For example, my personal impression of the current "start" workflow was that it was unintuitive for new users and hence necessitated a tutorial or explanation; a different flow might not have had that problem. But maybe there's no such implementation that would make everyone happy.
Is this a common use case? If it isn't common, it's fine to implement a workaround like escape characters (to type If it is common, but this is the only case where an
It is for me, but that's just anecdotal and doesn't mean anything. However, this assumption is also contrary to how TogglTrack natively works: whether in mobile, desktop, or browser, the default UI is always to name the time entry and then optionally assign a project or continue a previous task. ... Though now that I think about it, that might not be quite correct: the TogglTrack UI is even more focused on speed than me, and provides a ton of ways to start a time entry that lacks both a name and a project. E.g. on desktop, this can be done via either
Point taken, then that implementation doesn't work, and I'm not familiar enough with the APIs to see whether it could be adapted to make it work. I don't see the point of auto-completing project ids.
I don't use them much, but TogglTrack copies them when I continue a time entry. (So if my "take a walk" time entry had the project "Exercise" and the tag "outside", then continuing it would copy both the project and all its tags.) So as long as this plugin does that part correctly, I wouldn't personally be missing the ability to manually add or edit tags. If it didn't copy tags, then the problem would IIRC be that TogglTrack proper only groups time entries together if they have the same name, project, and tags. So if the tags for continued time entries aren't copied, then the grouping in the Reports view would no longer work entirely correctly. Finally, I had another thought re: optionally assigning projects: Is the following adaptation of your solution 3 possible? tgl |
Fair, I'll try to keep the discussion higher-level and design-focussed.
I'll admit, I think I am coming around to the idea that, if properly implemented, I agree—this might not need to be hidden behind a setting. I can see this removing the With a new You're right; this also much better matches Toggl, where there is no separation between 'starting a new' time entry and 'continuing an existing' time entry. You just start typing, and it suggests a fuzzy match of past time entries.
Hm, that's a really good argument. I could do this by simply including a blank
This sounds like a great idea, actually. It keeps the flow of I am curious though—how do you see the start-time selection working for continuing a previous time entry? New entries are fairly straight-forward; just add another option alongside I get the impression you don't use this feature; if so, the solution would probably to add a setting to skip the start time selection to save keystrokes. Personally, almost every time entry I start stop uses custom start/stop times, so it's absolutely an essential feature for me. Thanks again for all your input! |
This thread which began with my mere UI request eventually transformed into a surprisingly in-depth design discussion, so thanks for that :).
I'm not sure how useful this explanation is, but here's how I personally do vs. do not use custom starting times:
Barring better alternatives, a setting seems like a decent solution here. I considered an alternative like appending "-t" or something to let you specify a custom starting time. But that won't work, because the Enter command used to select the time_entry_to_continue is the one meant to either start it or to assign a project to it. If the use case of backdating time entries was rare enough, then another alternative would be to lock backdating behind a new keyword (like a shorter synonym for "backdate"; or something like "running", to indicate an already-running time entry). In that case, the keyword-less command Or maybe we could skip the final step in that last suggestion by making the keyword itself do the backdating? I'm still not really happy about this solution, but it at least sounds a bit more elegant than requiring both a keyword and an extra step at the end. Something like: the keyword is actually But I'm not enamored with my own suggestions here, so a setting seems fine. |
Just goes to show that more perspectives and input always helps towards a better design :)
Makes sense. I've personally never found the desktop apps nice to use (hence why this plugin was born).
I must admit, this idea
actually sounds pretty cool. But I agree, I'm not sure that it would work better in practice. Do let me know if you think of anything else, but I think we've converged on a pretty nice solution. I'll get around to working on this after I'm done with exams in 3 weeks, and let you know when I have a beta release so you can do some pre-testing if you'd like to. PS notification settings were pushed in |
starting to implement the design ideology of #28
starting to implement the design ideology of #28
`tgl` will fill: 1. Start empty time entry 2. List of commands `tgl ...` will fill: 1. Start ... 2. Fuzzy filtered past ... entries 3. Fuzzy filtered ... commands `tgl [command-name]` will: 1. Auto-trigger the command. You can `tgl \[command-name]` to escape the command auto-trigger and create it as a time entry.
ie non-expected exit, such as `tgl @` -> `tgl \@`
ie, do not delete the preceeding query
BREAKING CHANGE: this commit removes support for the `-p` edit project flag
* feat(ux): 🚧 begin work on new command flow (#28) * feat(ux): 🚧 add `start` result (#28) * refactor: 🚧 use existing method to create `start` results (#28) * feat(ux): 🚧 add `continue` results (#28) * feat(state): 🚧 reset state when query is empty (#28) * feat(ux): ✨ implement `@` to select project (#28) * feat(ux): 🚸 remove leading `\` if query is no longer empty (#28) * feat(ux): 🚧 set scores for `start` results (#28) * feat(ux): 🚧 implement transition from `continue` to `start` (#28) * refactor: 🚧 refactor results source state variable (#28) * perf: ⚡ get results in parallel (#28) * feat(ux): 🚧 add other commands to results (#28) * feat(ux): ✨ implement command selection (#28) `tgl` will fill: 1. Start empty time entry 2. List of commands `tgl ...` will fill: 1. Start ... 2. Fuzzy filtered past ... entries 3. Fuzzy filtered ... commands `tgl [command-name]` will: 1. Auto-trigger the command. You can `tgl \[command-name]` to escape the command auto-trigger and create it as a time entry. * fix(ux): 🐛 gracefully handle project selection exit (#28) ie non-expected exit, such as `tgl @` -> `tgl \@` * feat(ux): 🚸 implement `Alt` key modifier to instantly continue (#28) * feat(ux): 🚸 restore `start` usage tips (#28) * refactor: ⚰️ remove old `QueryAsync()` logic (#28) * feat(ux): ✨ perform `@` project selection in-place (#28) ie, do not delete the preceeding query * fix(ux): 🐛 escape potential commands when using `continue` (#28) * feat(ux): 🚸 add usage tip for `@` project selection (#28) * feat(ux)!: 🚸 use `@` project selection for `edit` (#28) * docs(readme): 💡 fix todo comment (#28) * perf: ⚡ only refresh cache on empty query (#28) * feat(ux): 🚸 implement `Alt` quick-start from project selection (#28) * fix(ux): 🐛 fix transition from `reports` to `start` (#28) * feat(ux): 🚸 improve command escaping (#28) * feat(ux): 🚸 support `-t` offset from `Alt` project selection quick-start (#28) * refactor: 💡 remove `wontfix` todo (#28) * fix(ux): 🐛 fix exclusive result source for `start` project selection (#28) * feat(ux): 🚸 remove `continue` result if identical to query (#28) * fix(ux): 🐛 do not change `edit` project if unselected (#28) * docs(readme): 📝 document new command flow (#28) * docs(readme): 📝 add missing linebreak BREAKING CHANGE: See release notes/below. 1. `tgl start` and `tgl continue` command keywords have been removed. 2. `start` and `continue` are now top-level commands. 4. You can no longer quick-start commands with eg `tgl o`, you must now type the command in full (or select it from the top-level results) 5. `start` project selection is no longer enforced at the beginning; it is optionally triggered at any point with the `@` symbol. 6. `edit` project selection uses `@` instead of `-p` accordingly.
Hey! I've just merged something that I think ticks every box you mentioned!
Please, please let me know what you think, and if you have any feedback! I'm just in the process of putting up a pre-release, but this might not happen until tomorrow. Regardless, here's a little recording: 2023-07-04.22-58-59.mp4In terms of what is happening: 1.
|
You can also check out the updated Command Reference. |
A pre-release is available on the Releases page. To test:
😄 |
Hey there, thanks for the update! I apologize for the belated reply; I've unfortunately been sick for the past few weeks. I've already updated to the new TogglTrack plugin version (v4.0.0-0 according to FlowLauncher), and am currently using both the FlowLauncher plugin and the TogglTrack desktop app to track my time. IIRC I liked the TogglTrack desktop app more than you did, but I've noticed one case where I already prefer the updated FlowLauncher plugin: When I have a TogglTrack window open, switch to a different virtual desktop in Windows 11, and then click on the TogglTrack icon to track my time, then I'm brought back to whichever virtual desktop the TogglTrack window is on. This problem does not occur with FlowLauncher plugins. I still intend to read your preceding comment and to systematically test the new command flow, but I don't want to make any promises on the timeframe. |
No worries! Take it easy :) |
My most common use case in TogglTrack is to continue or restart a time entry I've used frequently in the past.
Let's take the example from my previous issue: I have a "take a walk" time entry in the "Exercise" project, and want to start or continue a new "take a walk" time entry.
The quickest commands I've found for this are:
I wish there were quicker commands to do this.
Here are the kinds of commands I wish for. I don't care about the specifics, just about the number of characters and Enters required.
EDIT: Or maybe even:
The text was updated successfully, but these errors were encountered: