[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/3] new feature: "knots" -- a kind of bookmarks, that can be cyc
From: |
Benno Schulenberg |
Subject: |
[PATCH 2/3] new feature: "knots" -- a kind of bookmarks, that can be cycled through |
Date: |
Thu, 2 Apr 2020 11:03:28 +0200 |
With M-' a knot is placed at the current line -- or removed when there
already is one. With M-PageUp / M-PageDown one can jump to the nearest
knot in the upward and downward direction. The search for a knot wraps
at the top and bottom. A knot is not visible in any way.
This fulfills https://savannah.gnu.org/bugs/?57577.
Requested-by: Ken Tyler <address@hidden>
---
src/global.c | 13 +++++++++++++
src/nano.c | 2 ++
src/nano.h | 2 ++
src/proto.h | 3 +++
src/text.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 67 insertions(+)
diff --git a/src/global.c b/src/global.c
index e8fa4629..e94255aa 100644
--- a/src/global.c
+++ b/src/global.c
@@ -670,6 +670,9 @@ void shortcut_init(void)
#ifndef NANO_TINY
const char *recordmacro_gist = N_("Start/stop recording a macro");
const char *runmacro_gist = N_("Run the last recorded macro");
+ const char *knot_gist = N_("Place or remove a knot at the current
line");
+ const char *upknot_gist = N_("Jump backward to the nearest knot");
+ const char *downknot_gist = N_("Jump forward to the nearest knot");
#endif
const char *case_gist = N_("Toggle the case sensitivity of the search");
const char *reverse_gist = N_("Reverse the direction of the search");
@@ -1023,6 +1026,13 @@ void shortcut_init(void)
add_to_funcs(run_macro, MMAIN,
N_("Run Macro"), WITHORSANS(runmacro_gist), BLANKAFTER, VIEW);
+ add_to_funcs(make_knot, MMAIN,
+ N_("Knot"), WITHORSANS(knot_gist), TOGETHER, VIEW);
+ add_to_funcs(up_to_knot, MMAIN,
+ N_("Up to knot"), WITHORSANS(upknot_gist), TOGETHER, VIEW);
+ add_to_funcs(down_to_knot, MMAIN,
+ N_("Down to knot"), WITHORSANS(downknot_gist), BLANKAFTER,
VIEW);
+
add_to_funcs(zap_text, MMAIN,
N_("Zap Text"), WITHORSANS(zap_gist), BLANKAFTER, NOVIEW);
@@ -1188,6 +1198,9 @@ void shortcut_init(void)
add_to_sclist(MMAIN, "Sh-Tab", SHIFT_TAB, do_unindent, 0);
add_to_sclist(MMAIN, "M-:", 0, record_macro, 0);
add_to_sclist(MMAIN, "M-;", 0, run_macro, 0);
+ add_to_sclist(MMAIN, "M-'", 0, make_knot, 0);
+ add_to_sclist(MMAIN, "M-PgUp", ALT_PAGEUP, up_to_knot, 0);
+ add_to_sclist(MMAIN, "M-PgDn", ALT_PAGEDOWN, down_to_knot, 0);
add_to_sclist(MMAIN, "M-U", 0, do_undo, 0);
add_to_sclist(MMAIN, "M-E", 0, do_redo, 0);
add_to_sclist(MMAIN, "Sh-^Del", CONTROL_SHIFT_DELETE,
chop_previous_word, 0);
diff --git a/src/nano.c b/src/nano.c
index cc101680..6fce11cd 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -90,6 +90,7 @@ linestruct *make_new_node(linestruct *prevnode)
newnode->multidata = NULL;
#endif
newnode->lineno = (prevnode) ? prevnode->lineno + 1 : 1;
+ newnode->knotted = FALSE;
return newnode;
}
@@ -162,6 +163,7 @@ linestruct *copy_node(const linestruct *src)
dst->multidata = NULL;
#endif
dst->lineno = src->lineno;
+ dst->knotted = FALSE;
return dst;
}
diff --git a/src/nano.h b/src/nano.h
index 3538750e..a0d25a76 100644
--- a/src/nano.h
+++ b/src/nano.h
@@ -292,6 +292,8 @@ typedef struct linestruct {
short *multidata;
/* Array of which multi-line regexes apply to this line. */
#endif
+ bool knotted;
+ /* Whether the user has placed a knot at this line. */
} linestruct;
#ifndef NANO_TINY
diff --git a/src/proto.h b/src/proto.h
index 58838280..19a007a3 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -491,6 +491,9 @@ void do_find_bracket(void);
/* Most functions in text.c. */
#ifndef NANO_TINY
void do_mark(void);
+void make_knot(void);
+void up_to_knot(void);
+void down_to_knot(void);
#endif
void do_tab(void);
#ifndef NANO_TINY
diff --git a/src/text.c b/src/text.c
index de5df9b5..33013146 100644
--- a/src/text.c
+++ b/src/text.c
@@ -57,6 +57,53 @@ void do_mark(void)
refresh_needed = TRUE;
}
}
+
+/* Place a knot at the current line when none exists, otherwise remove it. */
+void make_knot(void)
+{
+ openfile->current->knotted = !openfile->current->knotted;
+
+ if (openfile->current->knotted)
+ statusbar(_("Placed knot"));
+ else
+ statusbar(_("Removed knot"));
+}
+
+/* Make the given line the current line, or report the knottiness. */
+void jump_to(linestruct *line)
+{
+ if (line != openfile->current) {
+ openfile->current = line;
+ openfile->current_x = 0;
+ openfile->placewewant = 0;
+ refresh_needed = TRUE;
+ } else if (openfile->current->knotted)
+ statusbar(_("This is the only knot"));
+ else
+ statusline(ALERT, _("There are no knots"));
+}
+
+/* Jump to the first knot before the current line; wrap around at the top. */
+void up_to_knot(void)
+{
+ linestruct *line = openfile->current;
+
+ do { line = (line->prev) ? line->prev : openfile->filebot;
+ } while (!line->knotted && line != openfile->current);
+
+ jump_to(line);
+}
+
+/* Jump to the first knot after the current line; wrap around at the bottom. */
+void down_to_knot(void)
+{
+ linestruct *line = openfile->current;
+
+ do { line = (line->next) ? line->next : openfile->filetop;
+ } while (!line->knotted && line != openfile->current);
+
+ jump_to(line);
+}
#endif /* !NANO_TINY */
/* Insert a tab. If the TABS_TO_SPACES flag is set, insert the number
--
2.25.2
- [PATCH 1/3] input: recognize the keystrokes to be used for jumping to bookmarks, Benno Schulenberg, 2020/04/02
- [PATCH 2/3] new feature: "knots" -- a kind of bookmarks, that can be cycled through,
Benno Schulenberg <=
- Re: [PATCH 2/3] new feature: "knots" -- a kind of bookmarks, that can be cycled through, Marco Diego Aurélio Mesquita, 2020/04/03
- Re: [PATCH 2/3] new feature: "knots" -- a kind of bookmarks, that can be cycled through, Benno Schulenberg, 2020/04/05
- Message not available
- Fwd: [PATCH 2/3] new feature: "knots" -- a kind of bookmarks, that can be cycled through, Marco Diego Aurélio Mesquita, 2020/04/05
- Re: Fwd: [PATCH 2/3] new feature: "knots" -- a kind of bookmarks, that can be cycled through, Benno Schulenberg, 2020/04/05
- Re: Fwd: [PATCH 2/3] new feature: "knots" -- a kind of bookmarks, that can be cycled through, Marco Diego Aurélio Mesquita, 2020/04/05
- Re: Fwd: [PATCH 2/3] new feature: "knots" -- a kind of bookmarks, that can be cycled through, Benno Schulenberg, 2020/04/06
- Re: Fwd: [PATCH 2/3] new feature: "knots" -- a kind of bookmarks, that can be cycled through, Brand Huntsman, 2020/04/05
- Re: Fwd: [PATCH 2/3] new feature: "knots" -- a kind of bookmarks, that can be cycled through, Benno Schulenberg, 2020/04/06
- Re: Fwd: [PATCH 2/3] new feature: "knots" -- a kind of bookmarks, that can be cycled through, Brand Huntsman, 2020/04/06
[PATCH 3/3] knots: make current line knotted when deleting a knotted line or region, Benno Schulenberg, 2020/04/02