Skip to content

Commit

Permalink
Add vim normal mode inc/dec dates
Browse files Browse the repository at this point in the history
  • Loading branch information
Stvad committed Jun 27, 2024
1 parent 3ac6907 commit 005c617
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 4 deletions.
10 changes: 6 additions & 4 deletions src/ts/core/features/inc-dec-value.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {RoamDate} from '../roam/date'
import {Roam} from '../roam/roam'
import {RoamNode, Selection} from '../roam/roam-node'

const createModifier = (change: number) => (num: number) => num + change
export const createModifier = (change: number) => (num: number) => num + change

export const config: Feature = {
id: 'incDec',
Expand Down Expand Up @@ -62,7 +62,7 @@ const nameInsideBrackets = (text: string, cursor: number): string =>

const nameIsDate = (pageName: string): boolean => pageName.match(RoamDate.regex) !== null

const modifyDate = (date: Date, modifier: (input: number) => number): Date => {
export const modifyDate = (date: Date, modifier: (input: number) => number): Date => {
const newDate = new Date(date)
newDate.setDate(modifier(date.getDate()))
return newDate
Expand Down Expand Up @@ -92,9 +92,11 @@ export const modify = (modifier: (input: number) => number) => {
const numberStr = left + right
const numberStartedAt = node.text.substring(0, cursor)?.match(/[0-9]*$/)?.index!

let number = modifier(parseInt(numberStr))
const newNumber = modifier(parseInt(numberStr, 10))
newValue =
node.text.substring(0, numberStartedAt) + number + node.text.substring(numberStartedAt + numberStr.length)
node.text.substring(0, numberStartedAt) +
newNumber +
node.text.substring(numberStartedAt + numberStr.length)
} else if (datesInContent && datesInContent.length === 1) {
// e.g. Lor|em ipsum [[January 3rd, 2020]] 123
newValue = node.text.replace(
Expand Down
20 changes: 20 additions & 0 deletions src/ts/core/features/vim-mode/commands/edit-commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import {AnkiScheduler} from 'src/core/srs/AnkiScheduler'
import {SM2Node} from 'src/core/srs/SM2Node'
import {RoamDb} from 'src/core/roam/roam-db'
import {getBlockUid} from 'src/core/roam/block'
import {RoamDate} from 'src/core/roam/date'
import {createModifier, modifyDate} from 'src/core/features/inc-dec-value'

const getBlockText = (uid: string): string => {
const block = RoamDb.getBlockByUid(uid)
Expand All @@ -29,9 +31,27 @@ const markDone = () => {
RoamDb.updateBlockText(uid, '{{[[DONE]]}} ' + originalText)
}

const modifyBlockDate = (modifier: (input: number) => number) => {
const uid = selectedUid()
const originalText = getBlockText(uid)

const datesInContent = originalText.match(RoamDate.regex)
if (!datesInContent || datesInContent.length !== 1) return

RoamDb.updateBlockText(
uid,
originalText.replace(
datesInContent[0],
RoamDate.formatPage(modifyDate(RoamDate.parseFromReference(datesInContent[0]), modifier))
)
)
}

export const EditCommands = [
nmap('cmd+enter', 'Mark done', markDone),
...SRSSignals.map(it =>
nmap(`ctrl+shift+${it}`, `Reschedule Current Note (${SRSSignal[it]})`, () => rescheduleSelectedNote(it))
),
nmap('ctrl+alt+up', 'Increment Date', () => modifyBlockDate(createModifier(1))),
nmap('ctrl+alt+down', 'Decrement Date', () => modifyBlockDate(createModifier(-1))),
]

0 comments on commit 005c617

Please sign in to comment.