diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-02-02 23:10:43 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-02-12 14:20:15 +0100 |
| commit | b4399ffbb402943e1972a9ed04b3ddb3fa6c6cfe (patch) | |
| tree | 4782b5eb06b24e85faef98116117ac5b65a40229 /view.c | |
| parent | 78f1da727768cc398a09939fdb8d325fdcdca863 (diff) | |
| download | vis-b4399ffbb402943e1972a9ed04b3ddb3fa6c6cfe.tar.gz vis-b4399ffbb402943e1972a9ed04b3ddb3fa6c6cfe.tar.xz | |
Improve large file support
Disable absolute line numbers for large files (currently
anything bigger than 32MiB). This speeds up moving around
with for example nn% since no new lines need to be calculated.
Of course movements like :nn will be unaffected.
The optimizations can be disabled by explicitly enabling
absolute line numbers as in :set number
Diffstat (limited to 'view.c')
| -rw-r--r-- | view.c | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -86,6 +86,7 @@ struct View { lua_State *lua; /* lua state used for syntax highlighting */ char *lexer_name; bool need_update; /* whether view has been redrawn */ + bool large_file; /* optimize for displaying large files */ int colorcolumn; }; @@ -305,7 +306,7 @@ static void view_clear(View *view) { view->start_last = view->start; view->topline = view->lines; - view->topline->lineno = text_lineno_by_pos(view->text, view->start); + view->topline->lineno = view->large_file ? 1 : text_lineno_by_pos(view->text, view->start); view->lastline = view->topline; size_t line_size = sizeof(Line) + view->width*sizeof(Cell); @@ -1012,10 +1013,17 @@ void view_options_set(View *view, enum UiOption options) { [SYNTAX_SYMBOL_EOL] = UI_OPTION_SYMBOL_EOL, [SYNTAX_SYMBOL_EOF] = UI_OPTION_SYMBOL_EOF, }; + for (int i = 0; i < LENGTH(mapping); i++) { view->symbols[i] = (options & mapping[i]) ? &symbols_default[i] : &symbols_none[i]; } + + if (options & UI_OPTION_LINE_NUMBERS_ABSOLUTE) + options &= ~UI_OPTION_LARGE_FILE; + + view->large_file = (options & UI_OPTION_LARGE_FILE); + if (view->ui) view->ui->options_set(view->ui, options); } |
