spacevim/bundle/calendar.vim/autoload/calendar/constructor/view_ymd.vim
JIe 2bb7059579
Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
init
2024-08-21 14:17:26 +08:00

128 lines
5.2 KiB
VimL

" =============================================================================
" Filename: autoload/calendar/constructor/view_ymd.vim
" Author: itchyny
" License: MIT License
" Last Change: 2017/07/02 08:42:35.
" =============================================================================
let s:save_cpo = &cpo
set cpo&vim
function! calendar#constructor#view_ymd#new(instance) abort
return extend({ 'instance': a:instance }, s:constructor)
endfunction
let s:constructor = {}
function! s:constructor.new(source) dict abort
let instance = extend(extend(s:super_constructor.new(a:source), s:instance), self.instance)
let iday = index(instance.ymd, 'day')
let imonth = index(instance.ymd, 'month')
let iyear = index(instance.ymd, 'year')
let instance.select_index = iday >= 0 ? iday : imonth >= 0 ? imonth : iyear
return instance
endfunction
let s:instance = {}
function! s:instance.width() dict abort
return len(self.contents()[0].s)
endfunction
function! s:instance.height() dict abort
return 1
endfunction
function! s:sum(l) abort
let n = 0
for i in a:l
let n += i
endfor
return n
endfunction
function! s:instance.contents() dict abort
let y = b:calendar.month().get_year()
let year = y > 0 ? string(y) : (1 - y) . ' BC'
let use_month_name = calendar#setting#get('date_month_name')
let use_full_month_name = calendar#setting#get('date_full_month_name')
if use_full_month_name
let month = calendar#message#get('month_name_long')[b:calendar.month().get_month() - 1]
elseif use_month_name
let month = calendar#message#get('month_name')[b:calendar.month().get_month() - 1]
else
let month = printf('%2d', b:calendar.month().get_month())
endif
let day = printf('%2d', b:calendar.day().get_day())
let sepa = substitute(printf(' %s ', calendar#setting#get('date_separator')), '\s\+', ' ', 'g')
let texts = map(copy(self.ymd), "get({ 'year': year, 'month': month, 'day': day }, v:val)")
let t = ''
let separator = []
for i in range(len(texts))
if i
let sep = use_month_name && (self.ymd[i - 1] ==# 'month' && self.ymd[i] ==# 'day' || self.ymd[i - 1] ==# 'day' && self.ymd[i] ==# 'month') ? ' ' : sepa
else
let sep = ''
endif
call add(separator, sep)
let t .= sep . texts[i]
endfor
let text = calendar#text#new(t, 0, 0, '')
if self.is_selected()
let separatorlen = map(copy(separator), 'len(v:val)')
let length = map(copy(self.ymd), "get({ 'year': len(year), 'month': len(month), 'day': len(day) }, v:val)")
let position = map(range(len(length)), 's:sum((v:val ? length[:(v:val - 1)] : []) + (separatorlen[:(v:val)]))')
let select = calendar#text#new(length[self.select_index], position[self.select_index], 0, 'Select')
let cursor = calendar#text#new(0, length[self.select_index] + position[self.select_index], 0, 'Cursor')
return [text, select, cursor]
else
return [text]
endif
endfunction
function! s:instance.action(action) dict abort
if index(['left', 'prev', 'line_head', 'first_line', 'last_line' ], a:action) >= 0
let self.select_index = max([self.select_index - 1, 0])
elseif index(['right', 'next', 'line_last', 'last_line_last'], a:action) >= 0
let self.select_index = min([self.select_index + 1, len(self.ymd) - 1])
elseif index(['down', 'up', 'add', 'subtract', 'plus', 'minus', 'scroll_down', 'scroll_up'], a:action) >= 0
let diff = v:count1 * (index(['down', 'add', 'plus', 'scroll_down'], a:action) >= 0 ? 1 : -1)
call b:calendar['move_' . self.ymd[self.select_index]](diff)
elseif index(['down_big', 'up_big'], a:action) >= 0
let diff = v:count1 * (a:action ==# 'down_big' ? 1 : -1)
let move_big = { 'year': 10, 'month': 3, 'day': 7 }
call b:calendar['move_' . self.ymd[self.select_index]](diff * move_big[self.ymd[self.select_index]])
elseif index(['down_large', 'up_large'], a:action) >= 0
let diff = v:count1 * (a:action ==# 'down_large' ? 1 : -1)
let move_large = { 'year': 100, 'month': 6, 'day': 14 }
call b:calendar['move_' . self.ymd[self.select_index]](diff * move_large[self.ymd[self.select_index]])
elseif a:action ==# 'bar'
let self.select_index = max([min([v:count1 - 1, len(self.ymd) - 1]), 0])
elseif a:action ==# 'space'
let self.select_index = (self.select_index + 1) % len(self.ymd)
elseif a:action ==# 'command_enter' && mode() ==# 'c' && getcmdtype() ==# ':'
let cmd = calendar#util#getcmdline()
if cmd =~# '\v^\s*\d+\s*$'
let c = matchstr(cmd, '\v\d+') * 1
if self.ymd[self.select_index] ==# 'day'
let month = b:calendar.month()
let [y, m] = month.get_ym()
let c = max([min([c, month.last_day().get_day()]), month.head_day().get_day()])
call b:calendar.move_day(b:calendar.day().new(y, m, c).sub(b:calendar.day()))
elseif self.ymd[self.select_index] ==# 'month'
let month = b:calendar.month().get_month()
let c = max([min([c, 12]), 1])
call b:calendar.move_month(c - month)
elseif self.ymd[self.select_index] ==# 'year'
call b:calendar.move_year(c - b:calendar.month().get_year())
endif
return calendar#util#update_keys()
endif
endif
endfunction
let s:super_constructor = calendar#constructor#view#new(s:instance)
let &cpo = s:save_cpo
unlet s:save_cpo