diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-07-21 12:39:42 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-07-21 12:39:42 +0200 |
commit | c5fb0ada9b9efe65ceef3f2b5171573463e07b4f (patch) | |
tree | 7707f335186557e28274b964a1ac48395304233d | |
parent | 217df6ea9fe3fa93e2cf3e6b44cbec14a526f422 (diff) | |
download | busybox-w32-c5fb0ada9b9efe65ceef3f2b5171573463e07b4f.tar.gz busybox-w32-c5fb0ada9b9efe65ceef3f2b5171573463e07b4f.tar.bz2 busybox-w32-c5fb0ada9b9efe65ceef3f2b5171573463e07b4f.zip |
vi: fix "ask terminal" code
function old new delta
edit_file 761 793 +32
refresh 773 780 +7
query_screen_dimensions 63 54 -9
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | editors/vi.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/editors/vi.c b/editors/vi.c index 0f412c362..73e095cf8 100644 --- a/editors/vi.c +++ b/editors/vi.c | |||
@@ -504,20 +504,17 @@ static int init_text_buffer(char *fn) | |||
504 | } | 504 | } |
505 | 505 | ||
506 | #if ENABLE_FEATURE_VI_WIN_RESIZE | 506 | #if ENABLE_FEATURE_VI_WIN_RESIZE |
507 | static void query_screen_dimensions(void) | 507 | static int query_screen_dimensions(void) |
508 | { | 508 | { |
509 | # if ENABLE_FEATURE_VI_ASK_TERMINAL | 509 | int err = get_terminal_width_height(STDIN_FILENO, &columns, &rows); |
510 | if (!G.get_rowcol_error) | ||
511 | G.get_rowcol_error = | ||
512 | # endif | ||
513 | get_terminal_width_height(STDIN_FILENO, &columns, &rows); | ||
514 | if (rows > MAX_SCR_ROWS) | 510 | if (rows > MAX_SCR_ROWS) |
515 | rows = MAX_SCR_ROWS; | 511 | rows = MAX_SCR_ROWS; |
516 | if (columns > MAX_SCR_COLS) | 512 | if (columns > MAX_SCR_COLS) |
517 | columns = MAX_SCR_COLS; | 513 | columns = MAX_SCR_COLS; |
514 | return err; | ||
518 | } | 515 | } |
519 | #else | 516 | #else |
520 | # define query_screen_dimensions() ((void)0) | 517 | # define query_screen_dimensions() (0) |
521 | #endif | 518 | #endif |
522 | 519 | ||
523 | static void edit_file(char *fn) | 520 | static void edit_file(char *fn) |
@@ -536,7 +533,7 @@ static void edit_file(char *fn) | |||
536 | rows = 24; | 533 | rows = 24; |
537 | columns = 80; | 534 | columns = 80; |
538 | size = 0; | 535 | size = 0; |
539 | query_screen_dimensions(); | 536 | IF_FEATURE_VI_ASK_TERMINAL(G.get_rowcol_error =) query_screen_dimensions(); |
540 | #if ENABLE_FEATURE_VI_ASK_TERMINAL | 537 | #if ENABLE_FEATURE_VI_ASK_TERMINAL |
541 | if (G.get_rowcol_error /* TODO? && no input on stdin */) { | 538 | if (G.get_rowcol_error /* TODO? && no input on stdin */) { |
542 | uint64_t k; | 539 | uint64_t k; |
@@ -546,9 +543,12 @@ static void edit_file(char *fn) | |||
546 | if ((int32_t)k == KEYCODE_CURSOR_POS) { | 543 | if ((int32_t)k == KEYCODE_CURSOR_POS) { |
547 | uint32_t rc = (k >> 32); | 544 | uint32_t rc = (k >> 32); |
548 | columns = (rc & 0x7fff); | 545 | columns = (rc & 0x7fff); |
546 | if (columns > MAX_SCR_COLS) | ||
547 | columns = MAX_SCR_COLS; | ||
549 | rows = ((rc >> 16) & 0x7fff); | 548 | rows = ((rc >> 16) & 0x7fff); |
549 | if (rows > MAX_SCR_ROWS) | ||
550 | rows = MAX_SCR_ROWS; | ||
550 | } | 551 | } |
551 | query_screen_dimensions(); | ||
552 | } | 552 | } |
553 | #endif | 553 | #endif |
554 | new_screen(rows, columns); // get memory for virtual screen | 554 | new_screen(rows, columns); // get memory for virtual screen |
@@ -2797,7 +2797,7 @@ static void refresh(int full_screen) | |||
2797 | int li, changed; | 2797 | int li, changed; |
2798 | char *tp, *sp; // pointer into text[] and screen[] | 2798 | char *tp, *sp; // pointer into text[] and screen[] |
2799 | 2799 | ||
2800 | if (ENABLE_FEATURE_VI_WIN_RESIZE) { | 2800 | if (ENABLE_FEATURE_VI_WIN_RESIZE IF_FEATURE_VI_ASK_TERMINAL(&& !G.get_rowcol_error) ) { |
2801 | unsigned c = columns, r = rows; | 2801 | unsigned c = columns, r = rows; |
2802 | query_screen_dimensions(); | 2802 | query_screen_dimensions(); |
2803 | full_screen |= (c - columns) | (r - rows); | 2803 | full_screen |= (c - columns) | (r - rows); |