背景

记录工作日志,是一个很好的习惯,但不容易坚持,本来打算每天记录,但经常拖延,拖着拖着,有一些事情就忘记了。

等到写周报或月报的时候,才会开始翻邮件,聊天记录,各个仓库的提交log等,回忆都干了些啥。

为了解决这个问题,需要有一个工具来帮助我,提高工作日志的完成度。

最开始的设想是,自动定时发送一个邮件或聊天消息,在其中回复工作记录。但转念一想,公司的系统就是这么做的,每天一封邮件提醒我写工作日志,但没什么实际作用。看来需要更加强力的提醒才行。想来想去,试试就用弹窗吧。

任务管理Taskwarrior

弹窗如果只是一个输入框,每次都需要手工输入,那就太麻烦了。还是需要有一些预设的任务,可以直接选择。必要的时候,才做输入。所以首先要有一个方法,记录当前的任务,作为弹窗的数据源。

简单点的话,就是一个txt文件即可,手工往里面加入任务。但其实有更好的方法,那就是使用Taskwarrior,一款基于命令行的任务管理工具。具体可见

linux命令行todo列表管理工具Taskwarrior介绍

根据默认配置,taskwarrior 的记录保存在 $HOME/.task/pending.data

我们只需要在脚本中读取这个文件,过滤出所需要的任务即可

弹窗Zenity

初步设计是,弹窗中需要列出任务,可供选择。当我在完成预设任务时,可简单勾选。但也需要有输入框,可让我补充其他情况。

简单搜索后,决定使用Zenity 来做弹窗。关于Zenity,网上有很多介绍,此处不赘述。

为了进一步简化,我们在task中多建立一个任务叫做“其他”,选择此项表明需要输入,用于配合脚本处理。

task add “其他”

代码及效果

初步的代码如下(可查看github版本,也许会比此处的代码更完善些,https://github.com/zqb-all/pop-up-task-diary)


#!/bin/bash # author: https://github.com/zqb-all diary="$HOME/taskdiary.txt" taskchoice=$(cut -d'"' -f 2 "$HOME"/.task/pending.data | sed '{x;p;x;}' | \
zenity --list --checklist --title="选择你正在做的工作" --column="是否正在做?" --column="工作项" \
--timeout 600 --width 600 --height 400) timenow=$(date "+%Y-%m-%d %H:%M:%S") [[ $taskchoice = *"其他"* ]] && {
taskother=$(zenity --title="补充说明" --text "其他工作" --entry --timeout 600)
[ x"$taskother" != x"" ] && echo "$timenow : $taskother" >> "$diary"
} [ x"$taskchoice" = x"" ] && {
taskother=$(zenity --title="补充说明" --text "请输入当前工作" --entry --timeout 600)
[ x"$taskother" != x"" ] && echo "$timenow : $taskother" >> "$diary"
} [ x"$taskchoice" != x"其他" ] && {
[ x"$taskchoice" != x"" ] && echo "$timenow : $taskchoice" >> "$diary"
}

将以上代码,保存成脚本后,比如保存为~/pop-up-task-diary.sh

运行即会出现弹窗。弹窗中会列出所有任务。选中后点击确定,就会将选中的值和当前时间,一起写入home目录下的 taskdiary.txt文件中。

如果选择了“其他”,还会再弹出一个窗口,可以输入,作为补充。

如果在指定的时间内未输入,说明人不在电脑前,则弹窗自动消失。

例如,我的task如下

$ task
[task next] ID Age Description Urg
1 1min 其他 0
2 7s 测试任务1 0
3 2s 测试任务2 0 3 tasks

则调用脚本后,会出现

选择任务后,点击确定。由于我选择了 其他,所以再次出现弹窗,这次的弹窗可以任意输入。

补充完成后,点击确定即可。

$ cat taskdiary.txt
2018-11-25 17:09:46 : 这里可以输入
2018-11-25 17:09:46 : 其他|测试任务1

定时调用crontab

有了弹窗脚本后,就只差定时调用了。直接用crontab就可以。

这里有两个需要注意的地方

  • 为了让crontab能正常使用zenity弹出弹窗,需要设置 export DISPLAY=:0

  • 为了在zenity的弹窗中能正常输入中文,还需要另外设置几个变量,具体见下方示例

示例,9点到20点之间,每隔一个小时弹出一次。

 0 9-20 * * * export DISPLAY=:0 && export XMODIFIERS="@im=fcitx" && export GTK_IM_MODULE=fcitx && export QT_IM_MODULE=fcitx && $HOME/pop-up-task-diary.sh

其他

总觉得这种东西,应该有现成的才对。但一时没找到,实现起来也不麻烦,就自己写了这么个脚本先用着。

如果有人知道有现成的解决方案,或一些更好的工作日志记录方式,请推荐给我,谢谢。

本文地址:https://www.cnblogs.com/zqb-all/p/9979399.html

ubuntu下定时弹窗记录工作日志的更多相关文章

  1. Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录

    此为在网络上找来的,觉得很好! 实现目的: 对Mongodb数据库日志按天保存,并且只保留最近7天的日志记录. 具体操作: 使用Mongodb数据库自带的命令来切割日志 ps -def | grep ...

  2. JIRA开启时间追踪并为问题记录工作日志

    在升级版的JIRA中(4.2or4.3),我们可以使用其记录工作日志的功能.之前研究了很长时间,就是找不到初始预估时间在哪里设置,但是剩余工作时间与耗费时间都可以填写.根据官网的帮助文档也没找到合适的 ...

  3. 一次Ubuntu下的排雷记录

    起因 某天,发现一台服务器上出现了一个大量占用cpu资源的进程.尝试手动杀掉,但很快就会自动重新创建新的进程. 追查 用命令lsof -p 10316 查看其文件路径: 该进程文件夹/proc/103 ...

  4. ubuntu下eclipse 安装记录

    基本是参考:http://www.metsky.com/archives/611.html 完成. 中间遇到小问题,在此记录下,方便遇到同样问题的难友. 先说下快速打开命令行快捷键:Ctrl+Alt+ ...

  5. Ubuntu下用NdisWrapper安装网卡驱动

    下面是一个简单全面的使用NdisWrapper的指南.这是从Beginning Ubuntu Linux, Second Edition中提炼出来的. 这份指南是第8章的一部分.该章给出了在Ubunt ...

  6. ubuntu 下安装docker 踩坑记录

    ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...

  7. caffe 日志保存以及matlab绘制方法(windows以及ubuntu下)

    caffe 用matlab解析日志画loss和accuracy clc; clear; % load the log file of caffe model fid = fopen('log-prev ...

  8. 记录Ubuntu下使用docker使用

    关键词:docker.Dockerfile等等. 这里主要记录Ubuntu下docker使用细节. 首先是如何安装,然后如何创建docker镜像.搭建docker服务器.运行使用docker. 1. ...

  9. 踩坑记录:ubuntu下,http代理无法修改的问题

    事情经过: 今天在ubuntu下使用http代理的时候,碰到一个奇怪的现象.就是在当前shell窗口下,输入“env  | grep proxy”,显示的http_proxy一直都存在,即使我修改了本 ...

随机推荐

  1. 面试:谈谈你对Spring框架的理解

    Spring是一个优秀的轻量级框架,大大的提高了项目的开发管理与维护.Spring有两个核心模块.一个是IOC,一个是AOP. IOC: 就是控制反转的意思,指的是我们将对象的控制权从应用代码本身转移 ...

  2. 限制玻尔兹曼机(Restricted Boltzmann Machine)RBM

    假设有一个二部图,每一层的节点之间没有连接,一层是可视层,即输入数据是(v),一层是隐藏层(h),如果假设所有的节点都是随机二值变量节点(只能取0或者1值)同时假设全概率分布满足Boltzmann 分 ...

  3. iOS进阶--将项目的编译速度提高5倍

    前言 作为开发团队的负责人,最近因为在快速迭代开发新功能,项目规模急速增长,单个端业务代码约23万行,私有库约6万行,第三方库代码约15万行,单个客户端的代码行数约60万.现在打包一次耗时需要11~1 ...

  4. (沒有介紹標準算法的)RMQ問題

    感謝杜哥代碼滋磁 //以下是廢話 RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中 ...

  5. CF546E Soldier and Traveling

    题目描述 In the country there are n n n cities and m m m bidirectional roads between them. Each city has ...

  6. Chrome查看html样式基本操作-div

    1. div 标签(白板,块级标签),想学会前端,只需要学会div+css就可以了. span 标签 (白板,行内标签) 2. Chrome审查元素的使用.右击浏览器--检查---可以看标签是块级还是 ...

  7. 前端开发学习之——使用jquery/javascript判断及改变checkbox选中状态

    一.使用jquery判断及改变checkbox选中状态 1.使用JQuery判断一个checkbox 是否为选中: (1).attr('checked) 看JQuery版本1.6+返回:”checke ...

  8. 【刷题】BZOJ 2744 [HEOI2012]朋友圈

    Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...

  9. Android Intent Action 一览表

    String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式.. "android.intent.action.ADD_SHORTCUT" String A ...

  10. bzoj1057: [ZJOI2007]棋盘制作(悬线法)

    题目要求纵横坐标和奇偶性不同的点取值不同,于是我们把纵横坐标和奇偶性为1的点和0的点分别取反,就变成经典的最大全1子矩阵问题了,用悬线法解决. #include<iostream> #in ...