Commit a5e106d7 authored by David Lawrence Ramsey's avatar David Lawrence Ramsey Committed by Benno Schulenberg
Browse files

tweaks: add a parameter to do_home() and do_end()

Add the parameter be_clever to both functions.  When be_clever is FALSE,
smart home and dynamic home are disabled in do_home(), and dynamic end is
disabled in do_end(), so that these functions only move to the beginning
or end of the current line or chunk.

This simple home and end functionality is needed to improve do_left()
and do_right()'s horizontal behavior with softwrapped chunks, which is
forthcoming.
No related merge requests found
Showing with 16 additions and 15 deletions
+16 -15
......@@ -347,11 +347,10 @@ void ensure_line_is_visible(void)
}
/* Move to the beginning of the current line (or softwrapped chunk).
*
* Try to do a smart home if it's possible and the SMART_HOME flag is set, and
* then try to do a dynamic home if it's possible and we're in softwrap
* mode. */
void do_home(void)
* If be_clever is TRUE, do a smart home when wanted and possible,
* and do a dynamic home when in softwrap mode and it'spossible.
* If be_clever is FALSE, just do a simple home. */
void do_home(bool be_clever)
{
size_t was_column = xplustabs();
filestruct *was_current = openfile->current;
......@@ -364,7 +363,7 @@ void do_home(void)
leftedge_x = actual_x(openfile->current->data,
(was_column / editwincols) * editwincols);
if (ISSET(SMART_HOME)) {
if (ISSET(SMART_HOME) && be_clever) {
size_t indent_x = indent_length(openfile->current->data);
if (openfile->current->data[indent_x] != '\0') {
......@@ -384,7 +383,7 @@ void do_home(void)
if (!moved && ISSET(SOFTWRAP)) {
/* If already at the left edge of the screen, move fully home.
* Otherwise, move to the left edge. */
if (openfile->current_x == leftedge_x)
if (openfile->current_x == leftedge_x && be_clever)
openfile->current_x = 0;
else {
openfile->current_x = leftedge_x;
......@@ -405,15 +404,16 @@ void do_home(void)
update_line(openfile->current, openfile->current_x);
}
/* Do a (smart or dynamic) home. */
void do_home_void(void)
{
do_home();
do_home(TRUE);
}
/* Move to the end of the current line (or softwrapped chunk).
*
* Try to do a dynamic end if it's possible and we're in softwrap mode. */
void do_end(void)
* If be_clever is TRUE, do a dynamic end when in softwrap mode and
* it's possible. If be_clever is FALSE, just do a simple end. */
void do_end(bool be_clever)
{
size_t was_column = xplustabs();
size_t line_len = strlen(openfile->current->data);
......@@ -428,7 +428,7 @@ void do_end(void)
/* If already at the right edge of the screen, move fully to the
* end of the line. Otherwise, move to the right edge. */
if (openfile->current_x == rightedge_x)
if (openfile->current_x == rightedge_x && be_clever)
openfile->current_x = line_len;
else {
openfile->current_x = rightedge_x;
......@@ -449,9 +449,10 @@ void do_end(void)
update_line(openfile->current, openfile->current_x);
}
/* Do a (dynamic) end. */
void do_end_void(void)
{
do_end();
do_end(TRUE);
}
/* If scroll_only is FALSE, move up one line. If scroll_only is TRUE,
......
......@@ -385,9 +385,9 @@ void do_prev_word_void(void);
bool do_next_word(bool allow_punct, bool allow_update);
void do_next_word_void(void);
void ensure_line_is_visible(void);
void do_home(void);
void do_home(bool be_clever);
void do_home_void(void);
void do_end(void);
void do_end(bool be_clever);
void do_end_void(void);
void do_up(bool scroll_only);
void do_up_void(void);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment