commit 1f9a6ab336433d05de7ba059cb9e008ca50a81ef
parent 33cefa9208a816f4ce7acddddd5b3210395e5cba
Author: Benno Schulenberg <bensberg@justemail.net>
Date: Wed, 29 Mar 2017 10:27:49 +0200
tweaks: factor out a bit of common code
Diffstat:
M | src/move.c | | | 80 | ++++++++++++++++++++++++++++--------------------------------------------------- |
1 file changed, 28 insertions(+), 52 deletions(-)
diff --git a/src/move.c b/src/move.c
@@ -49,11 +49,31 @@ void do_last_line(void)
focusing = FALSE;
}
+/* Determine the actual current chunk and the target column. */
+void get_edge_and_target(size_t *leftedge, size_t *target_column)
+{
+#ifndef NANO_TINY
+ if (ISSET(SOFTWRAP)) {
+ size_t realspan = strlenpt(openfile->current->data);
+
+ if (openfile->placewewant < realspan)
+ realspan = openfile->placewewant;
+
+ *leftedge = (realspan / editwincols) * editwincols;
+ *target_column = openfile->placewewant % editwincols;
+ } else
+#endif
+ {
+ *leftedge = 0;
+ *target_column = openfile->placewewant;
+ }
+}
+
/* Move up nearly one screenful. */
void do_page_up(void)
{
int mustmove = (editwinrows < 3) ? 1 : editwinrows - 2;
- size_t leftedge = 0, target_column;
+ size_t leftedge, target_column;
/* If we're not in smooth scrolling mode, put the cursor at the
* beginning of the top line of the edit window, as Pico does. */
@@ -63,18 +83,7 @@ void do_page_up(void)
openfile->current_y = 0;
}
-#ifndef NANO_TINY
- if (ISSET(SOFTWRAP)) {
- size_t realspan = strlenpt(openfile->current->data);
-
- if (openfile->placewewant < realspan)
- realspan = openfile->placewewant;
-
- leftedge = (realspan / editwincols) * editwincols;
- target_column = openfile->placewewant % editwincols;
- } else
-#endif
- target_column = openfile->placewewant;
+ get_edge_and_target(&leftedge, &target_column);
/* Move up the required number of lines or chunks. If we can't, we're
* at the top of the file, so put the cursor there and get out. */
@@ -96,7 +105,7 @@ void do_page_up(void)
void do_page_down(void)
{
int mustmove = (editwinrows < 3) ? 1 : editwinrows - 2;
- size_t leftedge = 0, target_column;
+ size_t leftedge, target_column;
/* If we're not in smooth scrolling mode, put the cursor at the
* beginning of the top line of the edit window, as Pico does. */
@@ -106,18 +115,7 @@ void do_page_down(void)
openfile->current_y = 0;
}
-#ifndef NANO_TINY
- if (ISSET(SOFTWRAP)) {
- size_t realspan = strlenpt(openfile->current->data);
-
- if (openfile->placewewant < realspan)
- realspan = openfile->placewewant;
-
- leftedge = (realspan / editwincols) * editwincols;
- target_column = openfile->placewewant % editwincols;
- } else
-#endif
- target_column = openfile->placewewant;
+ get_edge_and_target(&leftedge, &target_column);
/* Move down the required number of lines or chunks. If we can't, we're
* at the bottom of the file, so put the cursor there and get out. */
@@ -463,25 +461,14 @@ void do_up(bool scroll_only)
{
filestruct *was_current = openfile->current;
size_t was_column = xplustabs();
- size_t leftedge = 0, target_column;
+ size_t leftedge, target_column;
/* When just scrolling and the top of the file is onscreen, get out. */
if (scroll_only && openfile->edittop == openfile->fileage &&
openfile->firstcolumn == 0)
return;
-#ifndef NANO_TINY
- if (ISSET(SOFTWRAP)) {
- size_t realspan = strlenpt(openfile->current->data);
-
- if (openfile->placewewant < realspan)
- realspan = openfile->placewewant;
-
- leftedge = (realspan / editwincols) * editwincols;
- target_column = openfile->placewewant % editwincols;
- } else
-#endif
- target_column = openfile->placewewant;
+ get_edge_and_target(&leftedge, &target_column);
/* If we can't move up one line or chunk, we're at top of file. */
if (go_back_chunks(1, &openfile->current, &leftedge) > 0)
@@ -523,20 +510,9 @@ void do_down(bool scroll_only)
{
filestruct *was_current = openfile->current;
size_t was_column = xplustabs();
- size_t leftedge = 0, target_column;
-
-#ifndef NANO_TINY
- if (ISSET(SOFTWRAP)) {
- size_t realspan = strlenpt(openfile->current->data);
-
- if (openfile->placewewant < realspan)
- realspan = openfile->placewewant;
+ size_t leftedge, target_column;
- leftedge = (realspan / editwincols) * editwincols;
- target_column = openfile->placewewant % editwincols;
- } else
-#endif
- target_column = openfile->placewewant;
+ get_edge_and_target(&leftedge, &target_column);
/* If we can't move down one line or chunk, we're at bottom of file. */
if (go_forward_chunks(1, &openfile->current, &leftedge) > 0)