给自己的 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常用的图标(计算机.控制面板.网络.用户文件)的图标添加到桌面呢,下面为作者本人亲测.操作简单至极. ...
随机推荐
- TypeScript-01-变量、基本类型和运算符
基本类型 基本类型有boolean.number.string.array.void.所有类型在TypeScript中,都是一个唯一的顶层的Any Type 类型的自类型.any关键字代表这种类型. ...
- iOS开发之App主题切换完整解决方案(Swift版)
本篇博客就来介绍一下iOS App中主题切换的常规做法,当然本篇博客中只是提到了一种主题切换的方法,当然还有其他方法,在此就不做过多赘述了.本篇博客中所涉及的Demo完全使用Swift3.0编写完成, ...
- jquery实现全选、全不选、反选、获取选中的所有值总结
HTML 我们的页面上有一个歌曲列表,列出多行歌曲名称,并匹配复选框供用户选择,并且在列表下方有一排操作按钮. <!doctype html> <html> <head& ...
- [Hadoop] - Win7下提交job到集群上去
一般我们采用win开发+linux hadoop集群的方式进行开发,使用插件:hadoop-***-eclipse-plugin. 运行程序的时候,我们一般采用run as application或者 ...
- .NET跨平台之旅:博问站点迁移至ASP.NET Core on Linux并发布上线
Powered by ASP.NET Core on Linux! 我们全站的 .NET Core 迁移工作如火如荼,这是我们今年上半年的重要工作. 今天我们终于完成了博问产品(q.cnblogs.c ...
- nodejs 代码设计模式1:同步函数变异步
同步函数变异步 1 问题: 1.1 碰到需要调用你刚正在创建的对像. function createServer(data, cb) { data.num = 1; cb(); return data ...
- 基于keepalived搭建MySQL高可用集群
MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...
- zhenai
1.2=http://files.cnblogs.com/files/bqh10086/zhenai_1.2_pack.zip
- 了解 : angular translate 和 google translate 和 微软 translate
https://cloud.google.com/translate/v2/pricing google translate 一百万个字是$20,如果少过就得付$10,完全没有免费哦- 每天limit ...
- js检测数据类型的方法你都掌握了几个?
//1.typeof检测/*var obg = {};var ary = [];var reg = /^$/;var fn = function () {};var num = 1;var bool ...