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 /ui-curses.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 'ui-curses.c')
| -rw-r--r-- | ui-curses.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/ui-curses.c b/ui-curses.c index 671fa61..1bc145a 100644 --- a/ui-curses.c +++ b/ui-curses.c @@ -619,7 +619,7 @@ static bool ui_window_draw_sidebar(UiCursesWin *win) { if (win->options & UI_OPTION_LINE_NUMBERS_ABSOLUTE) { mvwprintw(win->winside, i, 0, "%*u", sidebar_width-1, l->lineno); } else if (win->options & UI_OPTION_LINE_NUMBERS_RELATIVE) { - size_t rel = l->lineno; + size_t rel = (win->options & UI_OPTION_LARGE_FILE) ? 0 : l->lineno; if (l->lineno > cursor_lineno) rel = l->lineno - cursor_lineno; else if (l->lineno < cursor_lineno) @@ -643,7 +643,6 @@ static void ui_window_draw_status(UiWin *w) { bool focused = uic->selwin == win; const char *filename = vis_file_name(win->file); const char *status = vis_mode_status(vis); - CursorPos pos = view_cursor_getpos(win->view); wattrset(win->winstatus, focused ? A_REVERSE|A_BOLD : A_REVERSE); mvwhline(win->winstatus, 0, 0, ' ', win->width); mvwprintw(win->winstatus, 0, 0, "%s %s %s %s", @@ -651,11 +650,15 @@ static void ui_window_draw_status(UiWin *w) { filename ? filename : "[No Name]", text_modified(vis_file_text(win->file)) ? "[+]" : "", vis_macro_recording(vis) ? "recording": ""); - char buf[win->width + 1]; - int len = snprintf(buf, win->width, "%zd, %zd", pos.line, pos.col); - if (len > 0) { - buf[len] = '\0'; - mvwaddstr(win->winstatus, 0, win->width - len - 1, buf); + + if (!(win->options & UI_OPTION_LARGE_FILE)) { + CursorPos pos = view_cursor_getpos(win->view); + char buf[win->width + 1]; + int len = snprintf(buf, win->width, "%zd, %zd", pos.line, pos.col); + if (len > 0) { + buf[len] = '\0'; + mvwaddstr(win->winstatus, 0, win->width - len - 1, buf); + } } } |
