diff --git a/hammerspoon/Spoons/PomodoroTimer.spoon/init.lua b/hammerspoon/Spoons/PomodoroTimer.spoon/init.lua new file mode 100644 index 0000000..728222c --- /dev/null +++ b/hammerspoon/Spoons/PomodoroTimer.spoon/init.lua @@ -0,0 +1,64 @@ +local obj = {} +obj.__index = obj + +-- Metadata +obj.name = "PomodoroTimer" +obj.version = "1.0" +obj.author = "Ein Verne" +obj.homepage = "https://github.com/einverne/dotfiles" +obj.license = "MIT - https://opensource.org/licenses/MIT" + +-- 设置默认值 +obj.workDuration = 25 * 60 -- 25分钟工作时间 +obj.breakDuration = 5 * 60 -- 5分钟休息时间 +obj.timer = nil +obj.isWorking = true + +obj.startSound = hs.sound.getByName("Submarine") -- 开始声音 +obj.endSound = hs.sound.getByName("Glass") -- 结束声音 + +function obj:toggle() + if self.timer == nil then + self:start() + log.d("PomodoroTimer started") + else + self:stop() + log.d("PomodoroTimer stopped") + end +end + +function obj:start() + log.d("PomodoroTimer start") + hs.alert.show("番茄时钟已启动", 2) + self.startSound:play() -- 播放开始声音 + self:startTimer() +end + +function obj:startTimer() + local duration = self.isWorking and self.workDuration or self.breakDuration + self.timer = hs.timer.doAfter(duration, function() + self.endSound:play() -- 播放结束声音 + if self.isWorking then + hs.alert.show("工作时间结束,开始休息!", 5) + hs.notify.new({title="番茄时钟", informativeText="工作时间结束,开始休息!"}):send() + self.isWorking = false + else + hs.alert.show("休息时间结束,开始工作!", 5) + hs.notify.new({title="番茄时钟", informativeText="休息时间结束,开始工作!"}):send() + self.isWorking = true + end + self:startTimer() -- 开始下一个计时周期 + end) +end + +function obj:stop() + if self.timer then + self.timer:stop() + self.timer = nil + end + self.isWorking = true -- 重置为工作状态 + hs.alert.show("番茄时钟已停止", 2) + self.endSound:play() -- 播放结束声音 +end + +return obj \ No newline at end of file diff --git a/hammerspoon/init.lua b/hammerspoon/init.lua index 16c39dc..4424ce0 100644 --- a/hammerspoon/init.lua +++ b/hammerspoon/init.lua @@ -243,6 +243,7 @@ if not hspoon_list then "WifiNotifier", "WinRectangle", "Caffeine", + "PomodoroTimer", } end @@ -543,6 +544,14 @@ if spoon.wifiNotifier then spoon.wifiNotifier:start() end +log.d("PomodoroTimer Spoon loaded successfully") +if spoon.PomodoroTimer then + hs.hotkey.bind({"cmd", "ctrl"}, "0", function() + log.d("PomodoroTimer hotkey pressed") + spoon.PomodoroTimer:toggle() + end) + log.d("PomodoroTimer hotkey bound") +end ---------------------------------------------------------------------------------------------------- -- Register browser tab typist: Type URL of current tab of running browser in markdown format. i.e. [title](link)