ja-he / dayplan

A utility to plan and track your time.
MIT License
5 stars 1 forks source link

Refactor key input and devise initial keyboard input model #26

Closed ja-he closed 2 years ago

ja-he commented 2 years ago

Steps:

misc
deferred

closes #13, #22

ja-he commented 2 years ago

input draft working doc

GLOBAL:
✓   ?          openHelp
✓   P          togglePerf
✓   S          openSummary
✓   E          openLog

HELP:
✓   ?          closeHelp

SEEING EVENTS:
✓   gg         scrollTop
✓   G          scrollBottom
✓   <c-u>      scrollUp
✓   <c-d>      scrollDown

ON EVENT VIEW:
    NORMAL:
    ✓   h          prevDay
    ✓   l          nextDay
    ✓   j          nextEvent
    ✓   k          prevEvent
    ✓   o          newEventAfterCurrent
    ✓   O          newEventBeforeCurrent
    ✓   <c-o>      newEventNow
    ✓   <CR>       startEdit
    ✓   r          startResize
    ✓   R          startResizePushing
    ✓   <c-r>      startResizeBounded
    ✓   m          startMove
    ✓   M          startMovePushing
    ✓   <c-m>      startMoveBounded
    ✓   sc         splitCenter
    ✓   sn         splitNow
        N          snapCurrent (normalize timestamps)
    MOVE:
    ✓   n          moveCurrentToNow
    ✓   j          moveCurrentDown
    ✓   k          moveCurrentUp
    ✓   m          exitMoveMode
    ✓   <esc>      exitMoveMode
        M          switchToPushingMoveMode
        <c-m>      switchToBoundedMoveMode
        r          switchToResizeMode
        R          switchToPushingResizeMode
        <c-r>      switchToBoundedResizeMode
    PUSHMOVE:
        n          moveCurrentToNowPushing
    ✓   j          moveCurrentDownPushing
    ✓   k          moveCurrentUpPushing
    ✓   M          exitPushingMoveMode
    ✓   <esc>      exitPushingMoveMode
        m          switchToMoveMode
        <c-m>      switchToBoundedMoveMode
        r          switchToResizeMode
        R          switchToPushingResizeMode
        <c-r>      switchToBoundedResizeMode
    BOUNDEDMOVE:
        n          moveCurrentToNowBounded
        j          moveCurrentDownBounded
        k          moveCurrentUpBounded
        <c-m>      exitBoundedMoveMode
        <esc>      exitBoundedMoveMode
        m          switchToMoveMode
        M          switchToPushingMoveMode
        r          switchToResizeMode
        R          switchToPushingResizeMode
        <c-r>      switchToBoundedResizeMode
    RESIZE:
    ✓   n          resizeCurrentToNow
    ✓   j          resizeCurrentDown
    ✓   k          resizeCurrentUp
    ✓   r          exitResizeMode
    ✓   <esc>      exitResizeMode
        m          switchToMoveMode
        M          switchToPushingMoveMode
        <c-m>      switchToBoundedMoveMode
        R          switchToPushingResizeMode
        <c-r>      switchToBoundedResizeMode
    PUSHRESIZE:
        n          resizeCurrentToNowPushing
        j          resizeCurrentDownPushing
        k          resizeCurrentUpPushing
        R          exitPushingResizeMode
        <esc>      exitPushingResizeMode
        m          switchToMoveMode
        M          switchToPushingMoveMode
        <c-m>      switchToBoundedMoveMode
        r          switchToResizeMode
        <c-r>      switchToBoundedResizeMode
    BOUNDEDRESIZE:
        n          resizeCurrentToNowBounded
        j          resizeCurrentDownBounded
        k          resizeCurrentUpBounded
        <c-r>      exitBoundedResizeMode
        <esc>      exitBoundedResizeMode
        m          switchToMoveMode
        M          switchToPushingMoveMode
        <c-m>      switchToBoundedMoveMode
        r          switchToResizeMode
        R          switchToPushingResizeMode

TOOLS:
✓   j          nextCategory
✓   k          prevCategory
...

SUMMARY:
✓   S          closeSummary
✓   h          prev{Day,Week,Month} (depending on view)
✓   l          next{Day,Week,Month} (depending on view)

LOG:
    E          closeLog
    <c-u>      scrollUp
    <c-d>      scrollDown

IN EDTIOR:
✓   <esc>      abort
✓   <cr>       commit
✓   h          charLeft
✓   l          charRight
✓   0          nameBeginning
✓   $          nameEnd
✓   w          nextWordBeginning
✓   e          nextWordEnd
✓   b          prevWordBeginning
✓   x          deleteChar
✓   cc         clear,enterInsert
✓   dd         clear
    ...
✓   i          enterInsert

IN EDITOR (--INSERT--):
✓   Each letter committed, escape as special case to remove mode
    overlay again.
    I think this can be done if we replace the concrete Tree type with
    an interface (process, active, ...?) and then have a text-input
    implementation for that interface that could get a single-rune
    callback to make with each change, so e.g. on event editor it
    could call a callback that knows the event-editor cursor pos and
    inserts the given letter at it.