专栏首页QB杂货铺ubuntu下定时弹窗记录工作日志

ubuntu下定时弹窗记录工作日志

背景

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

等到写周报或月报的时候,才会开始翻邮件,聊天记录,各个仓库的提交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

其他

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「玩转树莓派」搭建属于自己内网穿透服务

    好吧,我承认这个跟树莓派没有半毛关系,但是为了以后众多内网应用可以被访问,还是想强行发生一波关系。

    小柒2012
  • Jenkins 搭建与集群发布环境构建

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

    小老鼠
  • 虚拟机安装及使用Linux,看这一篇就够了!

    如果不想默认启动图形化界面的话,可以修改默认的启动模式,因为图形化界面还是比较占用内存的,使用命令如下。

    macrozheng
  • 使用pandas构建简单直观的数据科学分析流程

    我们将展示如何使用一个名为pdpipe的小库使用Pandas构建直观而有用的分析流程(管道)。

    用户1359560
  • Apache Tomcat Remote Code Execution(CVE-2016-8735)

    ​ 这个漏洞实质还是JMX反序列化漏洞,tomcat同样也用了JmxRemoteLifecycleListener这个监听器,但是tomcat在Oracle修复...

    风流
  • 一文学会 Node.js 中的流[每日前端夜话0xF4]

    用 Dominic Tarr 的话来说:“流是 Node 中最好的,也是最容易被误解的想法。”即使是 Redux 的创建者和 React.js 的核心团队成员 ...

    疯狂的技术宅
  • 借助云开发实现小程序的登陆注册功能

    云开发的知识我讲过很多遍了,还不知道云开发是啥的同学可以翻看下我历史文章,或者看下我录制的云开发基础入门视频:《5小时零基础入门小程序云开发》

    编程小石头
  • [Linux] ubuntu环境安装和使用elasticsearch

    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add...

    陶士涵
  • 带着老李折腾山寨Workerman(四)

    昨天晚上做梦梦到了栋子,就想起我俩那会儿一起摸鱼的时光。那还是五年前在[ 黑 ]鹭引擎的时候,我俩被人称为公司两大门神,具体表现在于基本一整个白天都在公司门口歇...

    老李秀
  • 基础知识 | 每日一练(198)

    在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作、信号量(sem aphore)、读写信号量(rw_sem aph...

    闫小林

扫码关注云+社区

领取腾讯云代金券