Skip to content

Commit 29e4866

Browse files
author
George Sofianos
committed
Merge branch 'relative_time' into develop
2 parents 5823172 + ab45b5c commit 29e4866

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,16 @@ Default: `'%d/%m/%y %H:%M'`
9090
let g:blamer_date_format = '%d/%m/%y'
9191
```
9292

93+
### Relative time
94+
95+
Shows commit date in relative format
96+
97+
Default: `0`
98+
99+
```
100+
let g:blamer_relative_time = 1
101+
```
102+
93103
#### Highlight
94104

95105
The color of the blame message.

autoload/blamer.vim

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,46 @@ endif
2222
let s:blamer_delay = get(g:, 'blamer_delay', 1000)
2323
let s:blamer_show_in_visual_modes = get(g:, 'blamer_show_in_visual_modes', 1)
2424
let s:blamer_timer_id = -1
25+
let s:blamer_relative_time = get(g:, 'blamer_relative_time', 0)
2526

2627
let s:is_windows = has('win16') || has('win32') || has('win64') || has('win95')
2728
let s:missing_popup_feature = !has('nvim') && !exists('*popup_create')
2829

30+
function! s:GetRelativeTime(commit_timestamp) abort
31+
let l:current_timestamp = localtime()
32+
let l:elapsed = l:current_timestamp - a:commit_timestamp
33+
34+
let l:minute_seconds = 60
35+
let l:hour_seconds = l:minute_seconds * 60
36+
let l:day_seconds = l:hour_seconds * 24
37+
let l:month_seconds = l:day_seconds * 30
38+
let l:year_seconds = l:month_seconds * 12
39+
40+
" We have no info how long ago line saved
41+
if(l:elapsed == 0)
42+
return 'a while ago'
43+
endif
44+
45+
let l:ToPlural = {word,number -> number > 1 ? word . 's' : word}
46+
let l:ToRelativeString = {time,divisor,time_word -> string(float2nr(round(time / divisor))) . l:ToPlural(' ' . time_word, float2nr(round(time / divisor))) . ' ago'}
47+
48+
49+
if l:elapsed < l:minute_seconds
50+
return l:ToRelativeString(l:elapsed,1,'second')
51+
elseif l:elapsed < l:hour_seconds
52+
return l:ToRelativeString(l:elapsed,60,'minute')
53+
elseif l:elapsed < l:day_seconds
54+
return l:ToRelativeString(l:elapsed,l:hour_seconds,'hour')
55+
elseif l:elapsed < l:month_seconds
56+
return l:ToRelativeString(l:elapsed,l:day_seconds,'day')
57+
elseif l:elapsed < l:year_seconds
58+
return l:ToRelativeString(l:elapsed,l:month_seconds,'month')
59+
else
60+
return l:ToRelativeString(l:elapsed,l:year_seconds,'year')
61+
endif
62+
63+
endfunction
64+
2965
function! s:Head(array) abort
3066
if len(a:array) == 0
3167
return ''
@@ -93,7 +129,11 @@ function! blamer#GetMessage(file, line_number, line_count) abort
93129
let l:property = l:words[0]
94130
let l:value = join(l:words[1:], ' ')
95131
if l:property =~? 'time'
96-
let l:value = strftime(s:blamer_date_format, l:value)
132+
if(s:blamer_relative_time)
133+
let l:value = s:GetRelativeTime(l:value)
134+
else
135+
let l:value = strftime(s:blamer_date_format, l:value)
136+
endif
97137
endif
98138
let l:value = escape(l:value, '&')
99139
let l:value = escape(l:value, '~')

0 commit comments

Comments
 (0)