]> git.scottworley.com Git - vopamoi/log
vopamoi
6 months agoREADME main
Scott Worley [Wed, 25 Oct 2023 08:11:33 +0000 (01:11 -0700)]
README

6 months agoClarify license
Scott Worley [Wed, 25 Oct 2023 08:02:12 +0000 (01:02 -0700)]
Clarify license

6 months agoDark mode
Scott Worley [Sun, 22 Oct 2023 11:01:32 +0000 (04:01 -0700)]
Dark mode

Using opacity to darken tags isn't great: It grays the text too much.
But it's a lot simpler than making the tag color depend on dark-mode
state, which would require touching every tag during dark-mode switch,
which would require locking to ensure that a dark-mode switch completes
before another one is started, because tag color calculations are done
asynchronously because crypto's interface forces this.  :(

6 months agoView keystrokes for special tags: comp, errand, home, zombie
Scott Worley [Sat, 21 Oct 2023 22:17:05 +0000 (15:17 -0700)]
View keystrokes for special tags: comp, errand, home, zombie

This is a departure from elegance.  Ideally, these would be
user-configured rather than built-in, or maybe no-configuration-necessary
like operating on unique prefixes or something.  *shrug*.  I want this
now, so I'm accepting this inelegance.

6 months agoChange keystroke for cancel: c → C
Scott Worley [Sat, 21 Oct 2023 22:14:33 +0000 (15:14 -0700)]
Change keystroke for cancel: c → C

6 months agoReplace setUntaggedView() with a TagFilter
Scott Worley [Fri, 20 Oct 2023 21:42:56 +0000 (14:42 -0700)]
Replace setUntaggedView() with a TagFilter

This fixes the untagged view's title

6 months agoTagFilter type
Scott Worley [Fri, 20 Oct 2023 21:39:28 +0000 (14:39 -0700)]
TagFilter type

6 months agoSplit setTagView() to factor out setTagFilter()
Scott Worley [Fri, 20 Oct 2023 21:28:58 +0000 (14:28 -0700)]
Split setTagView() to factor out setTagFilter()

6 months agoRename: currentTagView → currentTagFilter
Scott Worley [Fri, 20 Oct 2023 20:50:58 +0000 (13:50 -0700)]
Rename: currentTagView → currentTagFilter

6 months agoDynamic title
Scott Worley [Fri, 20 Oct 2023 20:35:04 +0000 (13:35 -0700)]
Dynamic title

6 months agoSet title
Scott Worley [Fri, 20 Oct 2023 20:13:12 +0000 (13:13 -0700)]
Set title

6 months agoModern web boilerplate
Scott Worley [Fri, 20 Oct 2023 20:12:18 +0000 (13:12 -0700)]
Modern web boilerplate

6 months agoj/k should select something if there's no selected task
Scott Worley [Fri, 20 Oct 2023 19:57:33 +0000 (12:57 -0700)]
j/k should select something if there's no selected task

2 years agoAdjust waiting color
Scott Worley [Tue, 22 Mar 2022 06:35:28 +0000 (23:35 -0700)]
Adjust waiting color

2 years agoMulti-line content
Scott Worley [Tue, 22 Mar 2022 05:13:40 +0000 (22:13 -0700)]
Multi-line content

2 years agoA space for extra notes for each task
Scott Worley [Mon, 21 Mar 2022 20:02:19 +0000 (13:02 -0700)]
A space for extra notes for each task

2 years agoUse created-date as id
Scott Worley [Sun, 6 Mar 2022 00:06:36 +0000 (16:06 -0800)]
Use created-date as id

This makes getTask() O(1) instead of O(n), which makes replay() 3x
faster.

2 years agoMake space for Model to have private values
Scott Worley [Sat, 5 Mar 2022 23:58:56 +0000 (15:58 -0800)]
Make space for Model to have private values

2 years agoHide task list during replay
Scott Worley [Sat, 5 Mar 2022 23:35:32 +0000 (15:35 -0800)]
Hide task list during replay

So we don't trigger restyle & layout while bulk-importing.

2 years ago'l' goes to first *visible* subtask
Scott Worley [Wed, 2 Mar 2022 23:54:00 +0000 (15:54 -0800)]
'l' goes to first *visible* subtask

I.e., it does something even if the first subtask is hidden because it's
complete or something.

2 years agoRevert "When creating a task while viewing a tag, the new task has that tag"
Scott Worley [Wed, 2 Mar 2022 23:40:07 +0000 (15:40 -0800)]
Revert "When creating a task while viewing a tag, the new task has that tag"

Revert c948f3b419535ad0774392636d2fd1166fb6e312 in spirit.

This often isn't the right thing to do.  It's especially
counter-productive in the while viewing the "Project" tag -- new
sub-tasks in projects are not themselves Projects.

2 years agoh/l to move between task nesting levels
Scott Worley [Wed, 2 Mar 2022 00:23:45 +0000 (16:23 -0800)]
h/l to move between task nesting levels

2 years agoRename: moveCursor → moveCursorVertically
Scott Worley [Wed, 2 Mar 2022 00:14:40 +0000 (16:14 -0800)]
Rename: moveCursor → moveCursorVertically

2 years ago"vp" to view the tag "Project"
Scott Worley [Wed, 2 Mar 2022 00:06:11 +0000 (16:06 -0800)]
"vp" to view the tag "Project"

2 years agoNested tag view
Scott Worley [Wed, 2 Mar 2022 00:04:18 +0000 (16:04 -0800)]
Nested tag view

2 years agoFactor insertInPriorityOrder() out of setPriority()
Scott Worley [Tue, 1 Mar 2022 23:47:39 +0000 (15:47 -0800)]
Factor insertInPriorityOrder() out of setPriority()

2 years agoWhen creating a task while viewing a tag, the new task has that tag
Scott Worley [Thu, 10 Feb 2022 03:11:30 +0000 (19:11 -0800)]
When creating a task while viewing a tag, the new task has that tag

2 years agoWrap task description before going into tag space
Scott Worley [Thu, 10 Feb 2022 01:48:49 +0000 (17:48 -0800)]
Wrap task description before going into tag space

2 years agoDon't assume input is first child
Scott Worley [Thu, 10 Feb 2022 01:43:56 +0000 (17:43 -0800)]
Don't assume input is first child

2 years ago"i"nbox view shows "u"ntagged tasks
Scott Worley [Thu, 10 Feb 2022 00:59:50 +0000 (16:59 -0800)]
"i"nbox view shows "u"ntagged tasks

2 years agoTask-level operations should work even when a tag is focused
Scott Worley [Thu, 10 Feb 2022 00:54:15 +0000 (16:54 -0800)]
Task-level operations should work even when a tag is focused

2 years agoTag view
Scott Worley [Thu, 10 Feb 2022 00:30:47 +0000 (16:30 -0800)]
Tag view

2 years agoresetView
Scott Worley [Thu, 10 Feb 2022 00:30:02 +0000 (16:30 -0800)]
resetView

2 years agocurrentTag helper
Scott Worley [Thu, 10 Feb 2022 00:29:10 +0000 (16:29 -0800)]
currentTag helper

2 years agoPut state colors in one place
Scott Worley [Wed, 9 Feb 2022 23:40:54 +0000 (15:40 -0800)]
Put state colors in one place

2 years agoInvert priorities
Scott Worley [Wed, 9 Feb 2022 19:48:21 +0000 (11:48 -0800)]
Invert priorities

Making "high" priorities low numbers was a mistake.

1. Things that come freshly to attention are much more often among the
   highest priority things and are very rarely lower priority that
   everything else being tracked.

2. Logging the completion of an already-done task, a task that was *so*
   high-priority that it was completed before even being tracked here,
   feels bad when it ends up initially marked as lowest-priority-ever
   unless some additional action is taken.

3. Marking a new task highest-ever-priority is fairly common and
   oughtn't cost two log entries.

4. All the high priority tasks ever tracked oughtn't be fighting over
   the smallest-representable IEEE floating point values, as they all
   try to get slightly closer to zero. When highest-priority is now(),
   these tasks get nicely spread out over the keyspace.  This helps with

   * keeping priority values integer-rounded, which helps with
     * serialized log size
     * log parsing simplicity (clients needn't support scientific notation)
     * preventing underflow

  * making the priority-sorted 'done' views be not-completely-useless
    as all the tasks that have ever been high-priority get haphazardly
    interleaved near zero.  Instead, it becomes almost chronological.

This change does rather a lot of violence to current users of this tool,
inverting their displayed task list order & making no provision
whatsoever for gentle migration across this change of an implementation
detail.  This is fine, because there's still only one user of this tool:
the author.  Breaking changes like this will not be tolerated after
deployment.

2 years agoScroll to top when entering a new task
Scott Worley [Sun, 30 Jan 2022 00:53:24 +0000 (16:53 -0800)]
Scroll to top when entering a new task

2 years agoEdit should still work when a tag has focus
Scott Worley [Sun, 30 Jan 2022 00:40:07 +0000 (16:40 -0800)]
Edit should still work when a tag has focus

2 years ago^e and ^y for scrolling without moving the cursor
Scott Worley [Sat, 29 Jan 2022 23:10:25 +0000 (15:10 -0800)]
^e and ^y for scrolling without moving the cursor

2 years agoMostly ignore inputs when control is pressed
Scott Worley [Sat, 29 Jan 2022 21:01:42 +0000 (13:01 -0800)]
Mostly ignore inputs when control is pressed

2 years ago"G" to Go to the count-prefixed line. eg: "1G" to go to the top
Scott Worley [Sat, 29 Jan 2022 20:57:13 +0000 (12:57 -0800)]
"G" to Go to the count-prefixed line.  eg: "1G" to go to the top

2 years agovi-style count-prefix for task movement
Scott Worley [Sat, 29 Jan 2022 20:46:36 +0000 (12:46 -0800)]
vi-style count-prefix for task movement

2 years agovi-style count-prefix for cursor movement
Scott Worley [Sat, 29 Jan 2022 20:23:21 +0000 (12:23 -0800)]
vi-style count-prefix for cursor movement

2 years agoRedo
Scott Worley [Fri, 28 Jan 2022 07:45:40 +0000 (23:45 -0800)]
Redo

2 years agoFactor out some boilerplate in UI
Scott Worley [Fri, 28 Jan 2022 07:36:26 +0000 (23:36 -0800)]
Factor out some boilerplate in UI

2 years ago"va" to view all tasks
Scott Worley [Fri, 28 Jan 2022 07:20:39 +0000 (23:20 -0800)]
"va" to view all tasks

... except deleted tasks.  You have to go to the deleted-tasks view
specifically to see those.

2 years agoStyle the state-dates
Scott Worley [Fri, 28 Jan 2022 07:07:47 +0000 (23:07 -0800)]
Style the state-dates

2 years agoShow dates on non-todo-state tasks
Scott Worley [Fri, 28 Jan 2022 06:54:22 +0000 (22:54 -0800)]
Show dates on non-todo-state tasks

Eg, this is the completion date for completed tasks, etc.

2 years agoDeclare character encoding
Scott Worley [Fri, 28 Jan 2022 06:37:20 +0000 (22:37 -0800)]
Declare character encoding

This quiets a warning in the Firefox console.

2 years ago"sm" and "vsm" for someday-*maybe*, rather than just "s"
Scott Worley [Fri, 28 Jan 2022 06:24:42 +0000 (22:24 -0800)]
"sm" and "vsm" for someday-*maybe*, rather than just "s"

The "maybe" in "someday-maybe" feels really important.  It feels
importantly different than "someday".  It definitely feels worth the
extra keystrokes & extra keystroke state logic.

2 years agoRename inputStates to be less semantic and more concrete
Scott Worley [Fri, 28 Jan 2022 06:21:06 +0000 (22:21 -0800)]
Rename inputStates to be less semantic and more concrete

2 years ago"T" to make task "Top" priority
Scott Worley [Fri, 28 Jan 2022 06:20:21 +0000 (22:20 -0800)]
"T" to make task "Top" priority

2 years agoFactor out makeTopPriority
Scott Worley [Fri, 28 Jan 2022 05:59:47 +0000 (21:59 -0800)]
Factor out makeTopPriority

2 years ago"x" removes the first tag if a task, rather than a tag, is selected
Scott Worley [Fri, 28 Jan 2022 03:34:24 +0000 (19:34 -0800)]
"x" removes the first tag if a task, rather than a tag, is selected

2 years agoPress "x" to remove tags
Scott Worley [Fri, 28 Jan 2022 03:26:04 +0000 (19:26 -0800)]
Press "x" to remove tags

2 years agoUndo tag
Scott Worley [Fri, 28 Jan 2022 03:15:37 +0000 (19:15 -0800)]
Undo tag

2 years agoAccept "vv" for jumping to the default view
Scott Worley [Fri, 28 Jan 2022 03:09:20 +0000 (19:09 -0800)]
Accept "vv" for jumping to the default view

2 years agoDisallow all-spaces task descriptions and tag-names
Scott Worley [Thu, 27 Jan 2022 23:37:51 +0000 (15:37 -0800)]
Disallow all-spaces task descriptions and tag-names

2 years agoDon't listen for keystrokes until log replay is done
Scott Worley [Thu, 27 Jan 2022 23:32:16 +0000 (15:32 -0800)]
Don't listen for keystrokes until log replay is done

2 years agoProvide a visual indicator of the current view-state
Scott Worley [Thu, 27 Jan 2022 23:27:19 +0000 (15:27 -0800)]
Provide a visual indicator of the current view-state

h/t https://css-tricks.com/body-border/

2 years agoKeep tags visually associated with their task
Scott Worley [Thu, 27 Jan 2022 23:05:50 +0000 (15:05 -0800)]
Keep tags visually associated with their task

If a task's tags line-wrap, the shouldn't go into the next task's space.

2 years agoKeep tags sorted
Scott Worley [Thu, 27 Jan 2022 21:34:30 +0000 (13:34 -0800)]
Keep tags sorted

2 years agoColor tags
Scott Worley [Thu, 27 Jan 2022 21:24:18 +0000 (13:24 -0800)]
Color tags

2 years agoKeep description in its own span
Scott Worley [Thu, 27 Jan 2022 20:52:53 +0000 (12:52 -0800)]
Keep description in its own span

Tags broke task.textContent being an easy way to get the task
description, which editTask was using.  This restores neatness & fixes a
bug in which tag names were slurped into the edit-task buffer.

2 years agoDo more filtering in faster browser-native code
Scott Worley [Thu, 27 Jan 2022 20:45:58 +0000 (12:45 -0800)]
Do more filtering in faster browser-native code

2 years agoThe tag-input box appearing should not move other tasks' tags around
Scott Worley [Thu, 27 Jan 2022 20:40:30 +0000 (12:40 -0800)]
The tag-input box appearing should not move other tasks' tags around

2 years agoFix: Escape aborts tagging
Scott Worley [Thu, 27 Jan 2022 20:26:23 +0000 (12:26 -0800)]
Fix: Escape aborts tagging

2 years agoDisallow empty-string as a tag name
Scott Worley [Thu, 27 Jan 2022 20:13:49 +0000 (12:13 -0800)]
Disallow empty-string as a tag name

2 years agoUse previous tag name as default new tag name
Scott Worley [Thu, 27 Jan 2022 20:10:11 +0000 (12:10 -0800)]
Use previous tag name as default new tag name

This makes tagging a bunch of tasks with the same tag easier.

2 years agoDon't create duplicate tags; Tagging is idempotent
Scott Worley [Thu, 27 Jan 2022 20:02:27 +0000 (12:02 -0800)]
Don't create duplicate tags; Tagging is idempotent

2 years agoDon't attempt to create duplicate tags
Scott Worley [Thu, 27 Jan 2022 19:59:03 +0000 (11:59 -0800)]
Don't attempt to create duplicate tags

2 years agoAdd tags
Scott Worley [Thu, 27 Jan 2022 19:57:00 +0000 (11:57 -0800)]
Add tags

2 years agoAvoid children[0]
Scott Worley [Thu, 27 Jan 2022 19:41:01 +0000 (11:41 -0800)]
Avoid children[0]

2 years agoSort log apply actions
Scott Worley [Thu, 27 Jan 2022 19:40:09 +0000 (11:40 -0800)]
Sort log apply actions

2 years agoUse classList to set class
Scott Worley [Thu, 27 Jan 2022 19:12:40 +0000 (11:12 -0800)]
Use classList to set class

2 years agoChange "todo" view key "t" -> "q" ("queue")
Scott Worley [Thu, 27 Jan 2022 19:06:48 +0000 (11:06 -0800)]
Change "todo" view key "t" -> "q" ("queue")

2 years agoDon't select-all the task description when beginning editing
Scott Worley [Thu, 27 Jan 2022 08:36:25 +0000 (00:36 -0800)]
Don't select-all the task description when beginning editing

I find that
 * most edits are more gentle than complete replacement
 * I consistently reach for the "end" key to begin editing
 * If I want complete replacement, ^A is easier to type than "end"

2 years agoEscape to abort a task edit
Scott Worley [Thu, 27 Jan 2022 08:30:22 +0000 (00:30 -0800)]
Escape to abort a task edit

2 years agoAlways return to command mode (leave input box) after creating a task
Scott Worley [Thu, 27 Jan 2022 08:25:01 +0000 (00:25 -0800)]
Always return to command mode (leave input box) after creating a task

Even in other views, where the just-created task cannot accept focus.

2 years agoundoLog is private to the UI
Scott Worley [Thu, 27 Jan 2022 08:07:27 +0000 (00:07 -0800)]
undoLog is private to the UI

2 years agoViews: Show tasks by state
Scott Worley [Thu, 27 Jan 2022 07:49:58 +0000 (23:49 -0800)]
Views: Show tasks by state

2 years agoAllow browserUI private fields
Scott Worley [Thu, 27 Jan 2022 07:28:51 +0000 (23:28 -0800)]
Allow browserUI private fields

2 years agoUse CSS for filtering the view
Scott Worley [Thu, 27 Jan 2022 07:19:31 +0000 (23:19 -0800)]
Use CSS for filtering the view

2 years agoAlways set state attribute
Scott Worley [Thu, 27 Jan 2022 07:12:18 +0000 (23:12 -0800)]
Always set state attribute

2 years agoLeader key "v" for selecting views
Scott Worley [Thu, 27 Jan 2022 07:00:48 +0000 (23:00 -0800)]
Leader key "v" for selecting views

2 years agoCommands are in command mode
Scott Worley [Thu, 27 Jan 2022 06:53:54 +0000 (22:53 -0800)]
Commands are in command mode

2 years agoUse a monotonic clock
Scott Worley [Thu, 27 Jan 2022 06:33:53 +0000 (22:33 -0800)]
Use a monotonic clock

Generally assume that clock values always increase to simplify reasoning
everywhere clock values are used.  Then enforce that assumption.

Clock values don't really, truly always go up because page reloads &
multiple devices, but since I'm not currently planning to spend the
effort that would be required to perfectly handle this in all cases,
making it happen in fewer cases is a win (rather than just making bugs
I want to fix harder to reproduce).

2 years agoExplicitly remove the completeEdit onblur event listener
Scott Worley [Thu, 27 Jan 2022 06:17:43 +0000 (22:17 -0800)]
Explicitly remove the completeEdit onblur event listener

When the completeEdit is invoked by keystroke, we don't want it invoked
a second time as a result of its own action removing the input field.

Firefox does *not* call the "blur" event when a focused input element is removed.
Chromium *does* call the "blur" event when a focused input element is removed.

So this is needed for Chromium.

2 years agoEdit task descriptions
Scott Worley [Thu, 27 Jan 2022 06:07:18 +0000 (22:07 -0800)]
Edit task descriptions

2 years agoDon't change state if it's already in that state
Scott Worley [Thu, 27 Jan 2022 03:32:16 +0000 (19:32 -0800)]
Don't change state if it's already in that state

2 years agoChange focus in BrowserUI, never in Model
Scott Worley [Thu, 27 Jan 2022 02:44:21 +0000 (18:44 -0800)]
Change focus in BrowserUI, never in Model

We don't want updates coming in from network sync to move focus around.

2 years agoTasks have one state. Enables undo for state changes
Scott Worley [Thu, 27 Jan 2022 01:51:51 +0000 (17:51 -0800)]
Tasks have one state.  Enables undo for state changes

2 years agoUndo for task creation and reordering
Scott Worley [Wed, 26 Jan 2022 22:46:28 +0000 (14:46 -0800)]
Undo for task creation and reordering

2 years agoNever mind about Destroy. Deleting is just state "deleted"
Scott Worley [Wed, 26 Jan 2022 22:17:16 +0000 (14:17 -0800)]
Never mind about Destroy.  Deleting is just state "deleted"

It doesn't get erased from the log anyway.

2 years agoFull-width input box
Scott Worley [Wed, 26 Jan 2022 21:59:25 +0000 (13:59 -0800)]
Full-width input box

2 years agoStart with focus on top task
Scott Worley [Wed, 26 Jan 2022 21:46:03 +0000 (13:46 -0800)]
Start with focus on top task

2 years agoControl-enter to make new tasks top-priority
Scott Worley [Wed, 26 Jan 2022 21:25:47 +0000 (13:25 -0800)]
Control-enter to make new tasks top-priority

2 years agoAllow Model to return values through UI
Scott Worley [Wed, 26 Jan 2022 21:25:06 +0000 (13:25 -0800)]
Allow Model to return values through UI

2 years agoInitiate task creation with Enter key rather than form submit
Scott Worley [Wed, 26 Jan 2022 21:11:09 +0000 (13:11 -0800)]
Initiate task creation with Enter key rather than form submit

This will let us detect modifiers on the keystroke.

2 years agoEliminate createTask. It's part of addTask
Scott Worley [Wed, 26 Jan 2022 21:00:15 +0000 (13:00 -0800)]
Eliminate createTask.  It's part of addTask

In the spirit of maintaining the invariant: all tasks are in the DOM; no
loose, floating tasks.