From 19d8dbf2949dcada3865cf9857e052ee7763a8ab Mon Sep 17 00:00:00 2001 From: streetturtle Date: Thu, 12 Dec 2019 22:27:12 -0500 Subject: Make calendar placement customizable --- calendar-widget/calendar.lua | 171 +++++++++++++++++++++---------------------- 1 file changed, 83 insertions(+), 88 deletions(-) (limited to 'calendar-widget/calendar.lua') 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 '' .. t .. '' end, - shape = rounded_shape(4) + +styles.focus = { + fg_color = '#000000', + bg_color = '#88C0D0', + markup = function(t) return '' .. t .. '' end, + shape = rounded_shape(4) } -styles.header = { fg_color = '#8FBCBB', - markup = function(t) return '' .. t .. '' end, - --shape = rounded_shape(10) - bg_color = '#3B4252' + +styles.header = { + fg_color = '#E5E9F0', + markup = function(t) return '' .. t .. '' end, + bg_color = '#2E3440' } -styles.weekday = { fg_color = '#88C0D0', - markup = function(t) return '' .. t .. '' end, - bg_color = '#3B4252', - --shape = rounded_shape(4) + +styles.weekday = { + fg_color = '#88C0D0', + markup = function(t) return '' .. t .. '' 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 -- cgit v1.2.3