aboutsummaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
Diffstat (limited to 'autoload')
-rw-r--r--autoload/big_file_options.vim97
1 files changed, 22 insertions, 75 deletions
diff --git a/autoload/big_file_options.vim b/autoload/big_file_options.vim
index 4d65bd4..381b0f7 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
@@ -71,13 +67,14 @@ function! s:SetPre() abort
setlocal nomodifiable
setlocal readonly
endif
+
endfunction
" These options need to be set later, after the buffer has loaded
function! s:SetPost() abort
" Force filetype off
- setlocal filetype=NONE
+ setlocal filetype=
" Disable syntax highlighting if configured
let syntax = get(g:, 'big_file_options_syntax', 0)
@@ -95,53 +92,3 @@ function! s:SetPost() abort
echomsg 'Big file detected, set appropriate options'
endfunction
-
-" If we can use filesize to detect the big file early, we should
-function! big_file_options#CheckPre(filename) abort
-
- " Try and get filesize, bail out if we can't
- let size = getfsize(a:filename)
- if size == -1
- 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()
-
- " If we found it's a big file, call the early options set
- if b:big_file_options_big
- call s:SetPre()
- 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
-
- endif
-
- " If the buffer size is verifiably over the threshold, run the late options
- " set
- if b:big_file_options_big
- call s:SetPost()
- endif
-
-endfunction