Files
dotfiles/hammerspoon/.hammerspoon/keyboard/status-message.lua
2022-11-01 22:28:37 +02:00

68 lines
1.8 KiB
Lua

local drawing = require 'hs.drawing'
local geometry = require 'hs.geometry'
local screen = require 'hs.screen'
local styledtext = require 'hs.styledtext'
local statusmessage = {}
statusmessage.new = function(messageText)
local buildParts = function(messageText)
local frame = screen.primaryScreen():frame()
local styledTextAttributes = {
font = { name = 'Monaco', size = 24 },
}
local styledText = styledtext.new('🔨 ' .. messageText, styledTextAttributes)
local styledTextSize = drawing.getTextDrawingSize(styledText)
local textRect = {
x = frame.w - styledTextSize.w - 40,
y = frame.h - styledTextSize.h,
w = styledTextSize.w + 40,
h = styledTextSize.h + 40,
}
local text = drawing.text(textRect, styledText):setAlpha(0.7)
local background = drawing.rectangle(
{
x = frame.w - styledTextSize.w - 45,
y = frame.h - styledTextSize.h - 3,
w = styledTextSize.w + 15,
h = styledTextSize.h + 6
}
)
-- background:setRoundedRectRadii(10, 10)
background:setFillColor({ red = 255, green = 0, blue = 0, alpha=0.8 })
return background, text
end
return {
_buildParts = buildParts,
show = function(self)
self:hide()
self.background, self.text = self._buildParts(messageText)
self.background:show()
self.text:show()
end,
hide = function(self)
if self.background then
self.background:delete()
self.background = nil
end
if self.text then
self.text:delete()
self.text = nil
end
end,
notify = function(self, seconds)
local seconds = seconds or 1
self:show()
hs.timer.delayed.new(seconds, function() self:hide() end):start()
end
}
end
return statusmessage