折腾了两天,终于实现orgzly与linux自动同步.记录分享一下
材料
- 手机:orgzly@安卓, termux/magit
- PC : emacs@linux
- git仓库: 私家linux 服务器
- git自动同步脚本:GitHub - simonthum/git-sync: Safe and simple one-script git synchronization
准备
假设用于同步的仓库名为:docs
git服务器
位于公网的linux服务器
初始化git仓库
cd ~
mkdir docs
cd docs
git init --bare
sshd
建立有关帐号,允许远程登录,允许证书登录
手机
手机端同步简单操作可以用magit, 但无法自动化,需要手动同步
- 安装orgzly/termux/magit
termux
- 设置termux权限,允许后台运行,授权termux访问存储卡空间,我的手机是/mnt/sdcard
- 运行termux, 安装crond, git, 建立同步目录:/mnt/sdcard/orgzly
- 创建本地证书(无密码)
ssh-keygen
- 设置自动登录
ssh-copy-id user@host
- 克隆仓库
cd /mnt/sdcard/orgzly && git clone ssh://host:port/~/docs
- 自己想办法把git-sync复制到termux目录中
- crontab -e 编辑定时任务,加入如下任务(每5分钟同步一次,可以自己根据需要修改):
*/5 * * * * cd /mnt/sdcard/docs && git-sync
orgzly
设置->同步->存储库->添加->目录 选择orgzly/docs
linux端
用linux工作的应该自会折腾了,跟termux中的设置类似
顺便分享一段i3blocks的代码,可以把org日程显示在i3状态栏上(与同步无关)
#!/bin/bash
if [ "$BLOCK_BUTTON" = "3" ]; then
now=$(date '+%Y-%m-%d %H:%M:%S(%a/%V)')
emacs --batch --user $USER --eval "(org-batch-agenda \"d\")" 2> /dev/null \
| zenity --list --width=800 --height=800 --text="TODO(今天:$now)" --column="事项:"
exit
fi
[ ! -f /tmp/todo ] && echo 0 > /tmp/todo
n=$(cat /tmp/todo)
n=$(expr $n + 1)
echo $n > /tmp/todo
todo=$(emacs \
--batch\
--user\
$USER\
--eval "(progn (org-agenda-list nil nil 'week) (append-to-file nil nil \"/dev/stdout\"))" \
2> /dev/null\
| grep "^ .*"\
| grep -v "Deadline"\
| grep -v "\.\.\.\.\."\
)
lines=$(echo "$todo" | sed '/^$/d' | wc -l)
if [[ 0 -eq $lines ]]; then
echo "NOTHING TODO"
echo
echo \#00FFFF
exit
fi
if [[ $n -gt $lines ]]; then
n=1
echo 0 > /tmp/todo
fi
text=$(echo "$todo" | head -n $n | tail -n 1)
text=$(echo "$text" | sed 's/.*my-todo: *//')
days=$(echo "$text" | sed 's/.*In *\(.*\)\s *d.*/\1/')
text=$(echo "$text" | sed 's/.*TODO \(.*\)/\1/')
echo "[$n/$lines] ${days}d $text"
echo
if [[ $days -le 3 ]]; then
echo \#FF0000
else
echo \#00FFFF
fi