給自己的 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+', "\033[31m{}\033[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))

 

完成后的效果圖:

 

在使用的過程中,跨年也沒有問題:

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM