给自己的 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))
完成后的效果图:

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

给自己的 MAC 添加一个桌面日历的更多相关文章
- 给hexo博客的NEXT主题添加一个云日历
一点废话 hexo中有文件的归档,但是博文的数目多了,浏览的时候也是很不方便的.于是我就有找个云日历的想法了,折腾了几天,网上的方法都试过了.但是没出效果.于是想着自己来写一个.这自己写的这部分是基于 ...
- 【转】windows7的桌面右键菜单的“新建”子菜单,在注册表哪个位置,如何在“新建"里面添加一个新项
点击桌面,就会弹出菜单,然后在“新建”中就又弹出可以新建的子菜单栏.office与txt 的新建都是在这里面的.我想做的事情是:在右键菜单的“新建” 中添加一个“TQ文本”的新建项,然后点击它之后,桌 ...
- 给WebApp加一个“壳”,实现Andriod系统添加到桌面
IOS系统的Safari浏览器有一个“添加到桌面”的功能,能在手机桌面上为你的Webapp添加一个快捷方式,其外观和Native App看起来一样. 这个功能对Webapp来说太有用了,它能让用户像“ ...
- 调用Android自带日历功能(日历列表单、添加一个日历事件)
调用Android自带日历功能 觉得这篇文章不错,转载过来. 转载:http://blog.csdn.net/djy1992/article/details/9948393 Android手机配备有 ...
- 桌面上嵌入窗口(桌面日历)原理探索(将该窗口的Owner设置成桌面的Shell 窗口,可使用SetWindowLong更改窗口的GWL_HWNDPARENT,还要使用SetWindowPos设置Z-Order)
今天在QQ群里有人问怎样实现将自己的窗口嵌入桌面,让它和桌面融为一体,就像很多桌面日历软件那样. 我当时想到的就是建立一个Child Window,将他的父窗口设置成桌面Shell窗口就可以了.但是 ...
- Android开发被添加到桌面快捷方式
Android开发被添加到桌面快捷方式 对于一个希望拥有很多其它用户的应用来说.用户桌面能够说是全部软件的必争之地,假设用户在手机桌面上建立了该软件的快捷方式.用户将会更频繁地使用该软件. 因此,全部 ...
- 轻狂写的桌面日历秀NSIS脚本供大家参考学习
原文 轻狂写的桌面日历秀NSIS脚本供大家参考学习 现在共享桌面日历秀的NSIS脚本,以便交流学习.此脚本实现的功能如下: 7-Zip打开看不到内容.自动读取原安装路径,如果有则不允许更改.取得编译日 ...
- windows server 2012将计算机图标添加到桌面
windows server 2012系统安装完以后桌面默认只有回收站一个图标,如何将window常用的图标(计算机.控制面板.网络.用户文件)的图标添加到桌面呢,下面为作者本人亲测.操作简单至极. ...
- windows server 2012将计算机图标添加到桌面(图文教程)(转)
windows server 2012系统安装完以后桌面默认只有回收站一个图标,如何将window常用的图标(计算机.控制面板.网络.用户文件)的图标添加到桌面呢,下面为作者本人亲测.操作简单至极. ...
随机推荐
- Java Web(三) 会话机制,Cookie和Session详解
很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...
- Linux系统(二)软件的安装与卸载
序言 上一篇我们了解啦Linux系统中,根目录下的各个文件夹是做什么用的啦,也学会文件如何压缩打包.那么接下来我们就该用到这个系统啦.用这个系统,就是用这个系统的软件,那么我们对我们需要的软件如何安装 ...
- windows下读取utf-8文件
#include <stdio.h> #include <tchar.h> #include <memory> int main() { FILE* fp1 = f ...
- 规范 : 过程 : login cookies sessionTimeOut
规范 用户登入网站将得到一个cookies,如果用户有2个account,各别登入admin page 和 client page,是会得到2个cookies. 在reload page时,后台会得到 ...
- 每天一个linux命令(38)--lsof命令
lsof (list open files )是一个列出当前系统打开文件的工具,在Linux 环境下,任何事情都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控 ...
- 关于hosts文件的原理与制作
由于需要整理的关于hosts的文件 关于hosts文件的原理与制作1.什么是hosts文件hosts文件是一个没有扩展名的系统文件,hosts文件用于存储计算机网络中节点信息的文件,它是可以将主机名映 ...
- DTD验证XML文档
DTD验证XML文档 1.DTD简介:DTD是Document Type Definition的缩写,即文档定义 1.1:DTD的内容包含: ...
- R语言入门(一)简介安装
数据挖掘常用的语言有R语言,python,SQL等,其中R语言最受欢迎.(注:SQL Server包含微软研究院开发的两种数据挖掘算法:Microsoft决策树和Microsoft聚集,此外还支持第三 ...
- HttpClient filter中间转发从A tomcat转发至B tomcat
BackFilter.java 主要解决基于HttpGet/HttpPost以及基于HttpPost的附件流转发import java.io.IOException; import java.io.I ...
- wemall app微信商城系统Android之通用通知接口demo
wemall-mobile是基于WeMall的Android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享Native(原生)支付模式一demo,供技术 ...