summaryrefslogtreecommitdiff
path: root/calendar-widget/calendar.lua
diff options
context:
space:
mode:
authorstreetturtle <streetturtle@gmail.com>2019-12-12 22:27:12 -0500
committerstreetturtle <streetturtle@gmail.com>2019-12-12 22:27:12 -0500
commit19d8dbf2949dcada3865cf9857e052ee7763a8ab (patch)
tree5782ffa8019c51600fa860f2432cd6e793042368 /calendar-widget/calendar.lua
parent7dd6fe0affa22b8cee837700e918bef984fc4721 (diff)
Make calendar placement customizable
Diffstat (limited to 'calendar-widget/calendar.lua')
-rw-r--r--calendar-widget/calendar.lua171
1 files changed, 83 insertions, 88 deletions
diff --git a/calendar-widget/calendar.lua b/calendar-widget/calendar.lua
index 60fcb14..f612e09 100644
--- a/calendar-widget/calendar.lua
+++ b/calendar-widget/calendar.lua
@@ -9,63 +9,58 @@
-------------------------------------------------
local awful = require("awful")
+local beautiful = require("beautiful")
local wibox = require("wibox")
-local watch = require("awful.widget.watch")
-local json = require("json")
-local spawn = require("awful.spawn")
-local naughty = require("naughty")
local gears = require("gears")
-local beautiful = require("beautiful")
-local gfs = require("gears.filesystem")
-local gs = require("gears.string")
local calendar_widget = {}
local styles = {}
-local function rounded_shape(size, partial)
- if partial then
- return function(cr, width, height)
- gears.shape.partially_rounded_rect(cr, width, height,
- false, true, false, true, 5)
- end
- else
- return function(cr, width, height)
- gears.shape.rounded_rect(cr, width, height, size)
- end
+local function rounded_shape(size)
+ return function(cr, width, height)
+ gears.shape.rounded_rect(cr, width, height, size)
end
end
-styles.month = { padding = 4,
- bg_color = '#3B4252',
- border_width = 0,
+
+styles.month = {
+ padding = 4,
+ bg_color = '#2E3440',
+ border_width = 0,
}
-styles.normal = {
- markup = function(t) return t end,
- shape = rounded_shape(4)
+
+styles.normal = {
+ markup = function(t) return t end,
+ shape = rounded_shape(4)
}
-styles.focus = { fg_color = '#000000',
- bg_color = '#88C0D0',
- markup = function(t) return '<b>' .. t .. '</b>' end,
- shape = rounded_shape(4)
+
+styles.focus = {
+ fg_color = '#000000',
+ bg_color = '#88C0D0',
+ markup = function(t) return '<b>' .. t .. '</b>' end,
+ shape = rounded_shape(4)
}
-styles.header = { fg_color = '#8FBCBB',
- markup = function(t) return '<b>' .. t .. '</b>' end,
- --shape = rounded_shape(10)
- bg_color = '#3B4252'
+
+styles.header = {
+ fg_color = '#E5E9F0',
+ markup = function(t) return '<b>' .. t .. '</b>' end,
+ bg_color = '#2E3440'
}
-styles.weekday = { fg_color = '#88C0D0',
- markup = function(t) return '<b>' .. t .. '</b>' end,
- bg_color = '#3B4252',
- --shape = rounded_shape(4)
+
+styles.weekday = {
+ fg_color = '#88C0D0',
+ markup = function(t) return '<b>' .. t .. '</b>' end,
+ bg_color = '#2E3440',
}
local function decorate_cell(widget, flag, date)
- if flag=='monthheader' and not styles.monthheader then
+ if flag == 'monthheader' and not styles.monthheader then
flag = 'header'
end
+ -- highlight only today's day
if flag == 'focus' then
- local a = os.date('*t')
- if a.month ~= date.month then
+ local today = os.date('*t')
+ if today.month ~= date.month then
flag = 'normal'
end
end
@@ -75,9 +70,9 @@ local function decorate_cell(widget, flag, date)
widget:set_markup(props.markup(widget:get_text()))
end
-- Change bg color for weekends
- local d = {year=date.year, month=(date.month or 1), day=(date.day or 1)}
+ local d = { year = date.year, month = (date.month or 1), day = (date.day or 1) }
local weekday = tonumber(os.date('%w', os.time(d)))
- local default_bg = (weekday==0 or weekday==6) and '#2E3440' or '#3B4252'
+ local default_bg = (weekday == 0 or weekday == 6) and '#3B4252' or '#2E3440'
local ret = wibox.widget {
{
{
@@ -86,82 +81,82 @@ local function decorate_cell(widget, flag, date)
widget = wibox.container.place
},
margins = (props.padding or 2) + (props.border_width or 0),
- widget = wibox.container.margin
+ widget = wibox.container.margin
},
- shape = props.shape,
+ shape = props.shape,
shape_border_color = props.border_color or '#b9214f',
shape_border_width = props.border_width or 0,
- fg = props.fg_color or '#D8DEE9',
- bg = props.bg_color or default_bg,
- widget = wibox.container.background
+ fg = props.fg_color or '#D8DEE9',
+ bg = props.bg_color or default_bg,
+ widget = wibox.container.background
}
--- ret:connect_signal("mouse::enter", function(c) naughty.notify{text = 'asd ' .. flag} end)
-
return ret
end
local cal = wibox.widget {
- date = os.date('*t'),
- font = 'Play 9',
+ date = os.date('*t'),
+ font = beautiful.get_font(),
fn_embed = decorate_cell,
long_weekdays = true,
- widget = wibox.widget.calendar.month
+ widget = wibox.widget.calendar.month
}
-local popup = awful.popup{
+local popup = awful.popup {
ontop = true,
visible = false,
shape = gears.shape.rounded_rect,
preferred_positions = top,
offset = { y = 5 },
- widget = {}
+ border_width = 1,
+ border_color = '#4C566A',
+ widget = cal
}
popup:buttons(
- awful.util.table.join(
- awful.button({}, 4, function()
- local a = cal:get_date()
- a.month = a.month + 1
- cal:set_date(nil)
- cal:set_date(a)
- popup:set_widget(cal)
- end),
- awful.button({}, 5, function()
- local a = cal:get_date()
- a.month = a.month - 1
- cal:set_date(nil)
- cal:set_date(a)
- popup:set_widget(cal)
- end)
- )
+ awful.util.table.join(
+ awful.button({}, 4, function()
+ local a = cal:get_date()
+ a.month = a.month + 1
+ cal:set_date(nil)
+ cal:set_date(a)
+ popup:set_widget(cal)
+ end),
+ awful.button({}, 5, function()
+ local a = cal:get_date()
+ a.month = a.month - 1
+ cal:set_date(nil)
+ cal:set_date(a)
+ popup:set_widget(cal)
+ end)
+ )
)
-calendar_widget = wibox.widget.textbox()
-calendar_widget:set_text('calendar')
-
function calendar_widget.toggle()
+
if popup.visible then
- cal:set_date(nil)
- popup.visible = not popup.visible
- else
- cal:set_date(nil)
+ -- to faster render the calendar refresh it and just hide
+ cal:set_date(nil) -- the new date is not set without removing the old one
cal:set_date(os.date('*t'))
+ popup:set_widget(nil) -- just in case
popup:set_widget(cal)
- popup:move_next_to(mouse.current_widget_geometry)
- end
-end
+ popup.visible = not popup.visible
+ else
+ if not beautiful.calendar_placement then
+ awful.placement.top(popup, { margins = { top = 30 }, parent = awful.screen.focused() })
+ elseif beautiful.calendar_placement == 'top' then
+ awful.placement.top(popup, { margins = { top = 30 }, parent = awful.screen.focused() })
+ elseif beautiful.calendar_placement == 'top_right' then
+ awful.placement.top_right(popup, { margins = { top = 30, right = 10}, parent = awful.screen.focused() })
+ elseif beautiful.calendar_placement == 'bottom_right' then
+ awful.placement.bottom_right(popup, { margins = { bottom = 20, right = 10}, parent = awful.screen.focused() })
+ else
+ awful.placement.top(popup, { margins = { top = 30 }, parent = awful.screen.focused() })
+ end
-local function toggle()
- calendar_widget.toggle()
-end
+ popup.visible = true
-calendar_widget:buttons(
- awful.util.table.join(
- awful.button({}, 1, function()
- toggle()
- end)
- )
-)
+ end
+end
return calendar_widget