zoukankan      html  css  js  c++  java
  • 给自己的 MAC 添加一个桌面日历

    使用 Ubuntu 做自己的办公环境用了将近三年,最近换了新款的 MBP,系统都用的很舒服。

    不过 Ubuntu 是在我的 TP W540上部署的,而 W540 + 电源适配太重了(我的电池是9芯的)

    用了 mac 多少会吧 Ubuntu 上的一些使用习惯带过来。

    其中一个习惯就是,Ubuntu 右上角点时间会出现日历(一个月有那些天的日历),而 mac 的没有,然后就想mac 上应该有自定义实现的方法。

    去搜了一些,找到了 GeekTool这个工具,真的很棒,桌面能做多漂亮全看你想象力有多丰富。

    我这里主要想实现一个自定义日历,需要用到 shell。

    下载地址:https://www.tynsoe.org/v2/geektool/

    文档的话,需要大家自己去看英文文档,使用难度:简单。

    我想要在桌面显示 上一个月、当前月、下一个月 三个月的日历,并且当前月的当前天 要高亮显示。

    需求很简单,做起来有些麻烦,问题主要是OSX 里的命令和 Ubuntu 里的 cal 命令不同。

    OSX 里的cal 没有这个功能,既然没有,那就自己写一个吧,python 是一门强大的语言,我选择了用 python 来实现这个功能。

    代码如下:

    #!/usr/bin/env python
    import calendar
    import datetime
    import re
    
    
    def get_year_month(d):
        """
        :param datetime_obj: a datetime object ; for example : datetime.datetime.now()
        :return: a datetime object
        """
        return d.year, d.month
    
    
    def get_pre_datetime(datetime_obj):
        """
        :param datetime_obj: a datetime object ; for example : datetime.datetime.now()
        :return: a datetime object
        """
        days_count = datetime.timedelta(days=datetime_obj.day)
        pre_month_last_day_datetime_obj = datetime_obj - days_count
        return pre_month_last_day_datetime_obj
    
    
    def get_next_datetime(datetime_obj):
        """
        :param datetime_obj: a datetime object ; for example : datetime.datetime.now()
        :return: a datetime object
        """
        days_count = calendar.monthrange(datetime_obj.year, datetime_obj.month)[1]
        next_month_datetime = datetime_obj + datetime.timedelta(days=days_count+1) - datetime.timedelta(datetime.datetime.now().day)
        return next_month_datetime
    
    
    def day_format(datetime_obj, cal_str):
        """
        :param datetime_obj: a datetime object ; for example : datetime.datetime.now()
        :param d: a datetime object ; for example : datetime.datetime.now()
        :return: a datetime object
        """
        day = datetime_obj.day
        reg_num = "D{}D".format(day)
        reg = re.search(reg_num, cal_str).group()
        ret = re.sub('d+', "33[31m{}33[0m".format(day), reg)
        return re.sub(reg, ret, cal_str)
    
    if __name__ == '__main__':
        currnet_time = datetime.datetime.now()
    
        pre_year_month = get_year_month(get_pre_datetime(currnet_time))
        currnet_year_month = get_year_month(currnet_time)
        next_year_month = get_year_month(get_next_datetime(currnet_time))
    
    
    #    with open('/var/tmp/cal.log', 'w') as f:
    #        f.write(calendar.month(*pre_year_month, w=3, l=1))
    #        f.write(day_format(currnet_time, calendar.month(*currnet_year_month, w=3, l=1)))
    #        f.write(calendar.month(*next_year_month, w=3, l=1))
    
        print(calendar.month(*pre_year_month, w=3, l=1))
        print(day_format(currnet_time, calendar.month(*currnet_year_month, w=3, l=2)))
        print(calendar.month(*next_year_month, w=3, l=1))

    完成后的效果图:

    在使用的过程中,跨年也没有问题:

      

      

  • 相关阅读:
    转+更新 .NET中实践TDD
    解决方案:.net 4.0 下 Virtual Directory下如何部署一个作为Virtual Directory的Web Service
    knockout.js在线教程
    asp.net viewstate的最新理解
    转:什么是DIP、IoC、DI
    Common Infrastructure Libraries for .NET(1)Common.Logging Framework
    用Quartz.NET实现任务调度
    Common Infrastructure Libraries for .NET(2)ELMAH
    webots自学笔记(一)软件界面和简单模型仿真
    hdu 1753 大明A+B
  • 原文地址:https://www.cnblogs.com/resn/p/6665390.html
Copyright © 2011-2022 走看看