vimrc

My Vim configuration
git clone git://pcardenasb.com/vimrc
Log | Files | Refs | Submodules

spaced-repetition.vim (2558B)


      1 vim9script
      2 
      3 sign_define("TodaySign", {
      4     "text": ">>",
      5     "texthl": "Search",
      6     # "linehl": "DiffAdd",
      7 })
      8 
      9 def g:SRSign()
     10     sign_unplace("SRGroup")
     11     const now = localtime()
     12     const lines = getline(1, '$')
     13     for idx in range(len(lines))
     14         if lines[idx][ : 5] != '% SR: '
     15             continue
     16         endif
     17         const line_split = lines[idx][6 : ]->split()
     18         const scheduled = float2nr(strptime("%Y-%m-%dT%H:%M:%S%z", line_split[0]) + str2float(line_split[1]) * 24 * 60 * 60)
     19         if now > scheduled
     20             sign_place(0, "SRGroup", "TodaySign", bufnr(), {lnum: idx + 1})
     21         endif
     22     endfor
     23 enddef
     24 
     25 def g:SRQuickFix()
     26     const now = localtime()
     27     final qf_list = []
     28     for file_path in glob('*.tex', 1, 1)
     29         if file_path < "lecture_07"
     30             continue
     31         endif
     32         const file_lines = readfile(file_path)
     33         for idx in range(len(file_lines))
     34             if file_lines[idx][ : 5] != '% SR: '
     35                 continue
     36             endif
     37             var line_split = file_lines[idx][6 : ]->split()
     38             var scheduled = float2nr(strptime("%Y-%m-%dT%H:%M:%S%z", line_split[0]) + str2float(line_split[1]) * 24 * 60 * 60)
     39             if now > scheduled
     40                 qf_list->add({
     41                     filename: fnamemodify(file_path, ':p'),
     42                     lnum: idx + 1,
     43                     text: strftime("%Y-%m-%dT%H:%M:%S%z ", scheduled) .. file_lines[idx + 1]->substitute('\\begin{\(.[^}]\+\)}\[\(.*\)\]', '\1: \2', ''),
     44                     scheduled: scheduled,
     45                 })
     46             endif
     47         endfor
     48     endfor
     49 
     50     #qf_list->sort((a, b) => a.scheduled - b.scheduled)
     51 
     52     if !empty(qf_list)
     53         setqflist(qf_list, 'r')
     54         copen
     55         echo $"Found {len(qf_list)} items across all .tex files."
     56     else
     57         cclose
     58         echo "No SR tasks found for now."
     59     endif
     60 enddef
     61 
     62 def g:SRReview()
     63     var line_split = getline('.')[6 : ]->split()
     64     var interval = str2float(line_split[1])
     65     var easiness_factor = str2float(line_split[2])
     66     var quality = str2nr(line_split[3])
     67     var new_interval = interval * easiness_factor
     68     var new_easiness_factor = easiness_factor + (0.1 - (5 - quality) * (0.08 + (5 - quality) * 0.02))
     69     setline('.', $'% SR: {strftime('%Y-%m-%dT%H:%M:%S%z')} {printf("%.02f", new_interval)} {printf("%.02f", new_easiness_factor)} {quality}')
     70 enddef
     71 
     72 
     73 nnoremap <localleader>sq <CMD>call SRQuickFix()<CR>
     74 nnoremap <localleader>sr <CMD>call SRReview()<CR>
     75 nnoremap <localleader>ss <CMD>call SRSign()<CR>
     76 
     77 # vim: et sts=4 sw=4