aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2019-06-05 21:53:29 +1200
committerTom Ryder <tom@sanctum.geek.nz>2019-06-05 21:53:29 +1200
commit8ac1fe4bf65ee3cf825929a2642f8b660890ddb1 (patch)
tree7465be5bf3bf7e26a0672f26bc00a7aaeae48a34
parent4a2044d8b679323bbf5246844fa4ae0f27bacee7 (diff)
downloadvim-big-file-options-8ac1fe4bf65ee3cf825929a2642f8b660890ddb1.tar.gz
vim-big-file-options-8ac1fe4bf65ee3cf825929a2642f8b660890ddb1.zip
Refactor to use deferred/dynamic hooks
-rw-r--r--autoload/big_file_options.vim44
-rw-r--r--plugin/big_file_options.vim4
2 files changed, 21 insertions, 27 deletions
diff --git a/autoload/big_file_options.vim b/autoload/big_file_options.vim
index 21ab0a0..5f9094a 100644
--- a/autoload/big_file_options.vim
+++ b/autoload/big_file_options.vim
@@ -1,48 +1,44 @@
" If we can use filesize to detect the big file early, we should
-function! big_file_options#CheckPre(filename) abort
+function! big_file_options#() abort
- " Try and get filesize, bail out if we can't
- let size = getfsize(a:filename)
+ " Try and get filesize; if we can't, defer another check attempt until after
+ " everything's been loaded
+ let size = getfsize(bufname('%'))
if size == -1
+ autocmd big_file_options BufReadPost,StdinReadPost <buffer>
+ \ call s:CheckPost()
+ \|autocmd! big_file_options BufReadPost,StdinReadPost <buffer>
return
endif
" Set the buffer's big flag to whether the file is verifiably outsize
- let b:big_file_options_big = size == -2 || size > s:Limit()
+ let b:big_file_options_big = size > s:Limit() || size == -2
" If we found it's a big file, call the early options set
if b:big_file_options_big
call s:SetPre()
+ autocmd big_file_options BufReadPost,StdinReadPost <buffer>
+ \ call s:SetPost()
+ \|autocmd! big_file_options BufReadPost,StdinReadPost <buffer>
endif
endfunction
" If it's still indeterminate (stdin read?), try to check the buffer size
" itself
-function! big_file_options#CheckPost() abort
-
- " The BufReadPre hook couldn't tell how big the file was; we'll examine it
- " now it's loaded into the buffer instead
- if !exists('b:big_file_options_big')
-
- " Test buffer size, bail if that doesn't work either
- let size = line2byte(line('$') + 1)
- if size == -1
- return
- endif
-
- " Flag the buffer's oversize status, if it's positive, we'll catch up and
- " run the early options set now
- let b:big_file_options_big = size > s:Limit()
- if b:big_file_options_big
- call s:SetPre()
- endif
+function! s:CheckPost() abort
+ " Test buffer size, bail if that doesn't work either
+ let size = line2byte(line('$') + 1)
+ if size == -1
+ return
endif
- " If the buffer size is verifiably over the threshold, run the late options
- " set
+ " Flag the buffer's oversize status; if it's positive, we'll catch up and
+ " run the early options set now
+ let b:big_file_options_big = size > s:Limit()
if b:big_file_options_big
+ call s:SetPre()
call s:SetPost()
endif
diff --git a/plugin/big_file_options.vim b/plugin/big_file_options.vim
index 89b65c2..e02e935 100644
--- a/plugin/big_file_options.vim
+++ b/plugin/big_file_options.vim
@@ -14,7 +14,5 @@ let loaded_big_file_options = 1
augroup big_file_options
autocmd!
autocmd BufReadPre,StdinReadPre *
- \ call big_file_options#CheckPre(expand('<afile>'))
- autocmd BufReadPost,StdinReadPost *
- \ call big_file_options#CheckPost()
+ \ call big_file_options#()
augroup end