Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

指定時刻にコマンドを実行したい

$
0
0

出先でのメモ、どうしてますか?
せっかくなのでスマホで済ませませんか?
せっかくなので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

Viewing all articles
Browse latest Browse all 5608

Trending Articles