#!/usr/bin/env lua current_color = "${color1}%2d${color}" weekend_color = "${color3}%2d${color}" t = os.date("!*t", os.time()) year, month, currentday = t.year, t.month, t.day daystart = os.date("*t",os.time{year=year,month=month,day=0}).wday --month_name = os.date("%B") ru_m = {"Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"}; month_name = ru_m[t.month]; days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } -- check for leap year -- Any year that is evenly divisible by 4 is a leap year -- Any year that is evenly divisible by 100 is a leap year if -- it is also evenly divisible by 400. LeapYear = function (year) return year % 4 == 0 and (year % 100 ~= 0 or year % 400 == 0) end if LeapYear(year) then days_in_month[2] = 29 end title_start = (20 - (string.len(month_name) + 5)) / 2 title = string.rep(" ", math.floor(title_start+0.5)) .. -- add padding to center the title (" %s %s\nПн Вт Ср Чт Пт ${color3}Сб Вс${color}\n"):format(month_name, year) io.write(title) function seq(a,b) if a > b then return else return a, seq(a+1,b) end end days = days_in_month[month] io.write( string.format( string.rep(" ", daystart-1) .. string.rep("%2d ", days), seq(1,days) ):gsub(string.rep(".",21),"%0\n") :gsub(("%2d"):format(currentday), (current_color):format(currentday), 1 ) .. "\n" )