Commit 4b8a3875 authored by Benno Schulenberg's avatar Benno Schulenberg
Browse files

text: let indenting/commenting skip the last line if its x is zero

If the marked region ends at the start of a line, do not include that
line in the indenting/undenting or commenting/uncommenting.  This is
closer to what the eye would expect.
parent df41114e
No related merge requests found
Showing with 19 additions and 6 deletions
+19 -6
......@@ -609,6 +609,8 @@ void remove_magicline(void);
#ifndef NANO_TINY
void mark_order(const filestruct **top, size_t *top_x, const filestruct
**bot, size_t *bot_x, bool *right_side_up);
void get_region(const filestruct **top, size_t *top_x,
const filestruct **bot, size_t *bot_x);
#endif
size_t get_totsize(const filestruct *begin, const filestruct *end);
#ifndef NANO_TINY
......
......@@ -300,8 +300,8 @@ void do_indent(void)
/* Use either all the marked lines or just the current line. */
if (openfile->mark)
mark_order((const filestruct **)&top, &top_x,
(const filestruct **)&bot, &bot_x, NULL);
get_region((const filestruct **)&top, &top_x,
(const filestruct **)&bot, &bot_x);
else {
top = openfile->current;
bot = top;
......@@ -405,8 +405,8 @@ void do_unindent(void)
/* Use either all the marked lines or just the current line. */
if (openfile->mark)
mark_order((const filestruct **)&top, &top_x,
(const filestruct **)&bot, &bot_x, NULL);
get_region((const filestruct **)&top, &top_x,
(const filestruct **)&bot, &bot_x);
else {
top = openfile->current;
bot = top;
......@@ -509,8 +509,8 @@ void do_comment(void)
/* Determine which lines to work on. */
if (openfile->mark)
mark_order((const filestruct **)&top, &top_x,
(const filestruct **)&bot, &bot_x, NULL);
get_region((const filestruct **)&top, &top_x,
(const filestruct **)&bot, &bot_x);
else {
top = openfile->current;
bot = top;
......
......@@ -532,6 +532,17 @@ void mark_order(const filestruct **top, size_t *top_x, const filestruct
}
}
/* Get the start and end points of the marked region, but
* push the end point back if it's at the start of a line. */
void get_region(const filestruct **top, size_t *top_x,
const filestruct **bot, size_t *bot_x)
{
mark_order(top, top_x, bot, bot_x, NULL);
if (*bot_x == 0)
*bot = (*bot)->prev;
}
/* Given a line number, return a pointer to the corresponding struct. */
filestruct *fsfromline(ssize_t lineno)
{
......
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