出先でのメモ、どうしてますか?
せっかくなのでスマホで済ませませんか?
せっかくなのでdroidVim使いませんか?
というわけで、出先のメモをdroidVimで取る事が増えてきたんですが、新規バッファを勝手に保存するにはバッファ名を何とかするためにちょっと手がかかるじゃないですか?というわけでなんとかしたいんです。出来れば17時になんとかしてくれると嬉しいんです。が、android端末だとvimの+clientserver
どころかcronもない。あるのは+timers
だけ。いつ起動したのか不明なままタイマーの終了時刻を指定なんて出来ない…ので、さて書きましょう。
(詳細はあとでかきます。)
で、出来たものがこちらになります。
autoload/vialarm.vim
scriptencoding utf-8lets:timeZone= exists('g:vialarm_timeZone') ? g:vialarm_timeZone:0if!exists('s:vialarmList')lets:vialarmList=[]endiflets:Vialarm={ \'timeText':'', \'timeSeconds':0, \'timerID':0, \'command':'', \}function!s:Vialarm.getParam(timeText, command) abort
tryifmatch(a:timeText,'^\d\d:\d\d$')>=0let time = split(a:timeText,':')if time[0]<24&& time[1]<60let self.timeText =a:timeTextlet self.timeSeconds =( time[0] * 60+ time[1]) * 60let self.command =a:commandelsethrow'vialarm_E12'endifelsethrow'vialarm_E11'endifcatch/vialarm_E11/echoerr'Error in getParam(): Args isn''t "TimeText", like "HH:MM".'catch/vialarm_E21/echoerr'Error in getParam(): Alarm time not specify.'endtryendfunctionfunction!s:Vialarm.timerSet() abort
" 1 day is 60*60*24 seconds.let currentSeconds =(localtime()+s:timeZone * 3600) % 86400let currentTimer =(86400+ self.timeSeconds - currentSeconds) % 86400let self.timerID = timer_start(currentTimer*1000, self.inTime)endfunctionfunction!s:Vialarm.inTime(timer) abort
execute 'doautocmd''vialarm''user' self.timeText
let self.timerID = timer_start(86400000, self.inTime)endfunctionfunction! vialarm#init() abort
if!empty(s:vialarmList)for val ins:vialarmListcall timer_stop(val.timerID)endforcallfilter(s:vialarmList,0)endiftrylet alarms = split(execute('autocmd vialarm'),'[\n]')[2:]catch/E216/let alarms =[]endtryfor val in alarms
let newVialarm = deepcopy(s:Vialarm)call newVialarm.getParam(matchstr(val,'\d\d:\d\d'), matchstr(val,'\s\{5}\zs.*'))call newVialarm.timerSet()call add(s:vialarmList, newVialarm)endfor
echo 'Vialarm: initialized.'endfunctionfunction! vialarm#showList() abort
let outText =[]for val ins:vialarmListlet timerID = val.timerID >0 ? printf('[TimerID:%8d] ', val.timerID):''call add(outText, printf('%s%s: %s', timerID, val.timeText, val.command))endforreturn empty(outText) ? 'No alarms.': outText->join("\n")endfunction