mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
Highlight links as one enters link prefixes.
This commit is contained in:
parent
6d0fe1e28f
commit
90f71fe6e4
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
#include "bfu/listmenu.h"
|
#include "bfu/listmenu.h"
|
||||||
#include "bfu/menu.h"
|
#include "bfu/menu.h"
|
||||||
|
#include "bfu/style.h"
|
||||||
#include "dialogs/menu.h"
|
#include "dialogs/menu.h"
|
||||||
#include "dialogs/status.h"
|
#include "dialogs/status.h"
|
||||||
#include "document/document.h"
|
#include "document/document.h"
|
||||||
@ -31,6 +32,7 @@
|
|||||||
#include "terminal/screen.h"
|
#include "terminal/screen.h"
|
||||||
#include "terminal/tab.h"
|
#include "terminal/tab.h"
|
||||||
#include "terminal/terminal.h"
|
#include "terminal/terminal.h"
|
||||||
|
#include "util/box.h"
|
||||||
#include "util/conv.h"
|
#include "util/conv.h"
|
||||||
#include "util/error.h"
|
#include "util/error.h"
|
||||||
#include "util/memory.h"
|
#include "util/memory.h"
|
||||||
@ -320,6 +322,37 @@ clear_link(struct terminal *term, struct document_view *doc_view)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
highlight_links_with_prefixes_that_start_with_n(struct terminal *term,
|
||||||
|
struct document_view *doc_view,
|
||||||
|
int n)
|
||||||
|
{
|
||||||
|
struct color_pair *color = get_bfu_color(term, "searched");
|
||||||
|
int xoffset = doc_view->box.x - doc_view->vs->x;
|
||||||
|
int yoffset = doc_view->box.y - doc_view->vs->y;
|
||||||
|
struct document *document = doc_view->document;
|
||||||
|
int m;
|
||||||
|
|
||||||
|
for (m = n + 1; n <= document->nlinks; n *= 10, m *= 10) {
|
||||||
|
int linkn;
|
||||||
|
|
||||||
|
for (linkn = n; linkn < m; ++linkn) {
|
||||||
|
struct link *link = &document->links[linkn - 1];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (linkn > document->nlinks) break;
|
||||||
|
|
||||||
|
for (i = 0; i < link->npoints; ++i) {
|
||||||
|
int x = link->points[i].x + xoffset;
|
||||||
|
int y = link->points[i].y + yoffset;
|
||||||
|
|
||||||
|
if (is_in_box(&doc_view->box, x, y))
|
||||||
|
draw_char_color(term, x, y, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct link *
|
struct link *
|
||||||
get_first_link(struct document_view *doc_view)
|
get_first_link(struct document_view *doc_view)
|
||||||
{
|
{
|
||||||
|
@ -17,6 +17,10 @@ void free_link(struct document_view *doc_view);
|
|||||||
void clear_link(struct terminal *term, struct document_view *doc_view);
|
void clear_link(struct terminal *term, struct document_view *doc_view);
|
||||||
void draw_current_link(struct session *ses, struct document_view *doc_view);
|
void draw_current_link(struct session *ses, struct document_view *doc_view);
|
||||||
|
|
||||||
|
void highlight_links_with_prefixes_that_start_with_n(struct terminal *term,
|
||||||
|
struct document_view *doc_view,
|
||||||
|
int n);
|
||||||
|
|
||||||
void link_menu(struct terminal *term, void *, void *ses);
|
void link_menu(struct terminal *term, void *, void *ses);
|
||||||
|
|
||||||
struct link *get_first_link(struct document_view *doc_view);
|
struct link *get_first_link(struct document_view *doc_view);
|
||||||
|
@ -689,6 +689,9 @@ try_prefix_key(struct session *ses, struct document_view *doc_view,
|
|||||||
* the first time by init_session() calloc() call.
|
* the first time by init_session() calloc() call.
|
||||||
* When used, it has to be reset to zero. */
|
* When used, it has to be reset to zero. */
|
||||||
|
|
||||||
|
/* Clear the highlighting for the previous partial prefix. */
|
||||||
|
if (ses->kbdprefix.repeat_count) draw_formatted(ses, 0);
|
||||||
|
|
||||||
ses->kbdprefix.repeat_count *= 10;
|
ses->kbdprefix.repeat_count *= 10;
|
||||||
ses->kbdprefix.repeat_count += digit;
|
ses->kbdprefix.repeat_count += digit;
|
||||||
|
|
||||||
@ -696,6 +699,10 @@ try_prefix_key(struct session *ses, struct document_view *doc_view,
|
|||||||
* '0' six times or more will reset the count. */
|
* '0' six times or more will reset the count. */
|
||||||
if (ses->kbdprefix.repeat_count > 99999)
|
if (ses->kbdprefix.repeat_count > 99999)
|
||||||
ses->kbdprefix.repeat_count = 0;
|
ses->kbdprefix.repeat_count = 0;
|
||||||
|
else if (ses->kbdprefix.repeat_count)
|
||||||
|
highlight_links_with_prefixes_that_start_with_n(
|
||||||
|
ses->tab->term, doc_view,
|
||||||
|
ses->kbdprefix.repeat_count);
|
||||||
|
|
||||||
return FRAME_EVENT_OK;
|
return FRAME_EVENT_OK;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user