diff options
| author | Yigit Sever | 2021-10-19 11:10:31 +0300 |
|---|---|---|
| committer | Yigit Sever | 2021-10-19 11:10:31 +0300 |
| commit | 01baea7b446ca1ceba20eebcd23d051c55ac1132 (patch) | |
| tree | 23b588ece69325c4c539cf4dea817e6abc7c0290 /.config/nvim | |
| parent | e7559a357b7bac2df89e8aa3cd4e08270830f1f4 (diff) | |
| download | dotfiles-01baea7b446ca1ceba20eebcd23d051c55ac1132.tar.gz dotfiles-01baea7b446ca1ceba20eebcd23d051c55ac1132.tar.bz2 dotfiles-01baea7b446ca1ceba20eebcd23d051c55ac1132.zip | |
nvim: add stale
Diffstat (limited to '.config/nvim')
| -rw-r--r-- | .config/nvim/init.lua | 3 | ||||
| -rw-r--r-- | .config/nvim/lua/stale.lua | 159 |
2 files changed, 162 insertions, 0 deletions
diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index 071711d..4644f60 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua | |||
| @@ -20,3 +20,6 @@ require('settings') | |||
| 20 | require('plugin_settings') | 20 | require('plugin_settings') |
| 21 | require('mappings') | 21 | require('mappings') |
| 22 | require('autocmds') | 22 | require('autocmds') |
| 23 | |||
| 24 | -- personal plugins lol | ||
| 25 | require('stale').setup{} | ||
diff --git a/.config/nvim/lua/stale.lua b/.config/nvim/lua/stale.lua new file mode 100644 index 0000000..0c79884 --- /dev/null +++ b/.config/nvim/lua/stale.lua | |||
| @@ -0,0 +1,159 @@ | |||
| 1 | local M = {} | ||
| 2 | _VT_NS = vim.api.nvim_create_namespace("lsp_signature") | ||
| 3 | |||
| 4 | local prescript | ||
| 5 | local prescript_hi | ||
| 6 | local due_hi | ||
| 7 | local ft | ||
| 8 | local future | ||
| 9 | local future_hi | ||
| 10 | local date_hi | ||
| 11 | local pattern_start | ||
| 12 | local pattern_end | ||
| 13 | |||
| 14 | local use_clock_time | ||
| 15 | local default_due_time | ||
| 16 | |||
| 17 | -- local date_pattern | ||
| 18 | local datetime_pattern | ||
| 19 | local datetime_pattern_match | ||
| 20 | |||
| 21 | local function parseDue(due) | ||
| 22 | local year = 31556926 | ||
| 23 | local month = 2629743 | ||
| 24 | local week = 604800 | ||
| 25 | local day = 86400 | ||
| 26 | local hour = 3600 | ||
| 27 | local minute = 60 | ||
| 28 | local res = '' | ||
| 29 | |||
| 30 | if due >= year then | ||
| 31 | res = res .. math.floor(due / year) .. 'y ' | ||
| 32 | due = due % year | ||
| 33 | end | ||
| 34 | |||
| 35 | if due >= month then | ||
| 36 | res = res .. math.floor(due / month) .. 'm ' | ||
| 37 | due = due % month | ||
| 38 | end | ||
| 39 | |||
| 40 | if due >= week then | ||
| 41 | res = res .. math.floor(due / week) .. 'w ' | ||
| 42 | due = due % week | ||
| 43 | end | ||
| 44 | |||
| 45 | if use_clock_time == true then | ||
| 46 | if due >= day then | ||
| 47 | res = res .. math.floor(due / day) .. 'd ' | ||
| 48 | due = due % day | ||
| 49 | end | ||
| 50 | |||
| 51 | if due >= hour then | ||
| 52 | res = res .. math.floor(due / hour) .. 'h ' | ||
| 53 | due = due % hour | ||
| 54 | end | ||
| 55 | |||
| 56 | if due >= minute then | ||
| 57 | res = res .. math.floor(due / minute) .. 'min ' | ||
| 58 | due = due % minute | ||
| 59 | end | ||
| 60 | else | ||
| 61 | res = res .. math.floor(due / day) + 1 .. 'd ' | ||
| 62 | end | ||
| 63 | |||
| 64 | return res | ||
| 65 | end | ||
| 66 | |||
| 67 | function M.setup(c) | ||
| 68 | use_clock_time = c.use_clock_time or true | ||
| 69 | default_due_time = c.default_due_time or 'midnight' | ||
| 70 | prescript = c.prescript or 'has been: ' | ||
| 71 | prescript_hi = c.prescript_hi or 'Comment' | ||
| 72 | due_hi = c.due_hi or 'String' | ||
| 73 | ft = c.ft or '*.wiki' | ||
| 74 | future = c.future or 'future' | ||
| 75 | future_hi = c.future_hi or 'Error' | ||
| 76 | date_hi = c.date_hi or 'Conceal' | ||
| 77 | pattern_start = c.pattern_start or '(' | ||
| 78 | pattern_end = c.pattern_end or ')' | ||
| 79 | |||
| 80 | local lua_start = pattern_start:gsub("[%(%)%.%%%+%-%*%?%[%^%$%]]", "%%%1") | ||
| 81 | local lua_end = pattern_end:gsub("[%(%)%.%%%+%-%*%?%[%^%$%]]", "%%%1") | ||
| 82 | |||
| 83 | local regex_start = pattern_start:gsub("\\%^%$%.%*~%[%]&", "\\%1") | ||
| 84 | local regex_end = pattern_end:gsub("\\%^%$%.%*~%[%]&", "\\%1") | ||
| 85 | |||
| 86 | datetime_pattern = lua_start .. '%d%d%d%d%-%d%d%-%d%d %d%d:%d%d' .. lua_end | ||
| 87 | datetime_pattern_match = lua_start .. '(%d%d%d%d)%-(%d%d)%-(%d%d) (%d%d):(%d%d)' .. lua_end | ||
| 88 | |||
| 89 | local regex_hi = '/' .. regex_start .. '\\d*-*\\d\\+-\\d\\+' .. regex_end .. | ||
| 90 | '/' | ||
| 91 | |||
| 92 | vim.api.nvim_command('autocmd BufEnter ' .. ft .. | ||
| 93 | ' lua require("stale").draw(0)') | ||
| 94 | vim.api.nvim_command('autocmd InsertLeave ' .. ft .. | ||
| 95 | ' lua require("stale").redraw(0)') | ||
| 96 | vim.api.nvim_command('autocmd TextChanged ' .. ft .. | ||
| 97 | ' lua require("stale").redraw(0)') | ||
| 98 | vim.api.nvim_command('autocmd TextChangedI ' .. ft .. | ||
| 99 | ' lua require("stale").redraw(0)') | ||
| 100 | |||
| 101 | vim.api.nvim_command('autocmd BufEnter ' .. ft .. ' syn match DueDate ' .. | ||
| 102 | regex_hi .. | ||
| 103 | ' display containedin=mkdNonListItemBlock,mkdListItemLine,mkdBlockquote contained') | ||
| 104 | vim.api.nvim_command('autocmd BufEnter ' .. ft .. ' hi def link DueDate ' .. | ||
| 105 | date_hi) | ||
| 106 | end | ||
| 107 | |||
| 108 | function M.draw(buf) | ||
| 109 | local user_time | ||
| 110 | local user_hour | ||
| 111 | local user_min | ||
| 112 | local user_sec = 00 | ||
| 113 | |||
| 114 | -- get current time | ||
| 115 | local now = os.time(os.date('*t')) | ||
| 116 | |||
| 117 | -- find which date pattern is being passed in by user | ||
| 118 | for key, value in pairs(vim.api.nvim_buf_get_lines(buf, 0, -1, {})) do | ||
| 119 | local dateTime = string.match(value, datetime_pattern) | ||
| 120 | local due | ||
| 121 | |||
| 122 | if dateTime then | ||
| 123 | local cur_year, month, day, user_hour, user_min = dateTime:match(datetime_pattern_match) | ||
| 124 | user_time = os.time({ | ||
| 125 | year = cur_year, | ||
| 126 | month = month, | ||
| 127 | day = day, | ||
| 128 | hour = user_hour, | ||
| 129 | min = user_min, | ||
| 130 | sec = user_sec | ||
| 131 | }) | ||
| 132 | |||
| 133 | due = now - user_time | ||
| 134 | end | ||
| 135 | |||
| 136 | if due then | ||
| 137 | local parsed | ||
| 138 | |||
| 139 | if due > 0 then | ||
| 140 | parsed = { parseDue(due), due_hi } | ||
| 141 | else | ||
| 142 | parsed = { future, future_hi } | ||
| 143 | end | ||
| 144 | |||
| 145 | vim.api.nvim_buf_set_virtual_text(buf, _VT_NS, key - 1, { | ||
| 146 | { prescript, prescript_hi }, parsed | ||
| 147 | }, {}) | ||
| 148 | end | ||
| 149 | end | ||
| 150 | end | ||
| 151 | |||
| 152 | function M.clear(buf) vim.api.nvim_buf_clear_namespace(buf, _VT_NS, 0, -1) end | ||
| 153 | |||
| 154 | function M.redraw(buf) | ||
| 155 | M.clear(buf) | ||
| 156 | M.draw(buf) | ||
| 157 | end | ||
| 158 | |||
| 159 | return M | ||
