basic non-intrusive stretch reminder in vscode. close #81

This commit is contained in:
2023-03-18 19:05:15 -06:00
parent 35e5e32dbc
commit 66f76ceaa8
9 changed files with 2254 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
import kiss.Prelude;
import kiss.List;
import vscode.*;
import haxe.Timer;
using StringTools;
@:build(kiss.Kiss.build())
class Main {}

View File

@@ -0,0 +1,41 @@
(loadFrom "kiss-vscode-api" "src/Util.kiss")
(loadFrom "kiss-vscode-api" "src/KissUtil.kiss")
@(:expose "activate")
(function activate [:ExtensionContext context]
(printThroughInfoMessage)
(defConfiguration
:Float secondsAfterLastEdit
(object
default 5
minimum 0)
:Float minutesBetweenStretching
(object
default 20
minimum 0)
:String stretchMessage
(object
default "Now might be a good time to stretch!"))
(var &mut :Float lastCheck)
(var &mut :Float secSpentTyping 0)
(var &mut :Timer timer)
(Vscode.workspace.onDidChangeTextDocument ->_
{
(when lastCheck
(+= secSpentTyping (- (Timer.stamp) lastCheck)))
(set lastCheck (Timer.stamp))
(when timer
(timer.stop))
(set timer
(Timer.delay
->{
(+= secSpentTyping secondsAfterLastEdit)
(set lastCheck null)
(when (>= secSpentTyping (* 60 minutesBetweenStretching))
(set secSpentTyping 0)
(infoMessage stretchMessage (object modal true)))
}
(* 1000 secondsAfterLastEdit)))
}))