1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-08-25 21:44:47 -04:00

Merge with git+ssh://pasky.or.cz/srv/git/elinks.git

This commit is contained in:
Witold Filipczyk 2006-04-15 07:29:44 +02:00 committed by Witold Filipczyk
commit 2a21b01583
6 changed files with 67 additions and 0 deletions

View File

@ -10,6 +10,7 @@ ACTION_(MAIN, "add-bookmark", ADD_BOOKMARK, N__("Add a new bookmark"), ACTION_RE
ACTION_(MAIN, "add-bookmark-link", ADD_BOOKMARK_LINK, N__("Add a new bookmark using current link"), ACTION_RESTRICT_ANONYMOUS | ACTION_JUMP_TO_LINK | ACTION_REQUIRE_LINK),
ACTION_(MAIN, "add-bookmark-tabs", ADD_BOOKMARK_TABS, N__("Bookmark all open tabs"), ACTION_RESTRICT_ANONYMOUS),
ACTION_(MAIN, "auth-manager", AUTH_MANAGER, N__("Open authentication manager"), 0),
ACTION_(MAIN, "backspace-prefix", BACKSPACE_PREFIX, N__("Backspace the last entered digit of the current prefix"), ACTION_REQUIRE_VIEW_STATE),
ACTION_(MAIN, "bookmark-manager", BOOKMARK_MANAGER, N__("Open bookmark manager"), 0),
ACTION_(MAIN, "cache-manager", CACHE_MANAGER, N__("Open cache manager"), 0),
ACTION_(MAIN, "cache-minimize", CACHE_MINIMIZE, N__("Free unused cache entries"), 0),

View File

@ -660,6 +660,7 @@ static struct default_kb default_main_keymap[] = {
{ { '{', KBD_MOD_NONE }, ACT_MAIN_SCROLL_LEFT },
{ { '|', KBD_MOD_NONE }, ACT_MAIN_HEADER_INFO },
{ { '}', KBD_MOD_NONE }, ACT_MAIN_SCROLL_RIGHT },
{ { KBD_BS, KBD_MOD_NONE }, ACT_MAIN_BACKSPACE_PREFIX },
{ { KBD_DEL, KBD_MOD_NONE }, ACT_MAIN_SCROLL_DOWN },
{ { KBD_DOWN, KBD_MOD_NONE }, ACT_MAIN_MOVE_LINK_NEXT },
{ { KBD_END, KBD_MOD_NONE }, ACT_MAIN_MOVE_DOCUMENT_END },

View File

@ -127,6 +127,27 @@ do_action(struct session *ses, enum main_action action_id, int verbose)
auth_manager(ses);
break;
case ACT_MAIN_BACKSPACE_PREFIX:
if (!ses->kbdprefix.repeat_count) break;
/* Clear the highlighting. */
draw_formatted(ses, 0);
ses->kbdprefix.repeat_count /= 10;
if (ses->kbdprefix.repeat_count)
highlight_links_with_prefixes_that_start_with_n(
term, doc_view,
ses->kbdprefix.repeat_count);
print_screen_status(ses);
/* Keep send_event from resetting repeat_count. */
status = FRAME_EVENT_SESSION_DESTROYED;
break;
case ACT_MAIN_BOOKMARK_MANAGER:
#ifdef CONFIG_BOOKMARKS
bookmark_manager(ses);

View File

@ -11,6 +11,7 @@
#include "bfu/listmenu.h"
#include "bfu/menu.h"
#include "bfu/style.h"
#include "dialogs/menu.h"
#include "dialogs/status.h"
#include "document/document.h"
@ -31,6 +32,7 @@
#include "terminal/screen.h"
#include "terminal/tab.h"
#include "terminal/terminal.h"
#include "util/box.h"
#include "util/conv.h"
#include "util/error.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 *
get_first_link(struct document_view *doc_view)
{

View File

@ -17,6 +17,10 @@ void free_link(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 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);
struct link *get_first_link(struct document_view *doc_view);

View File

@ -689,6 +689,9 @@ try_prefix_key(struct session *ses, struct document_view *doc_view,
* the first time by init_session() calloc() call.
* 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 += 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. */
if (ses->kbdprefix.repeat_count > 99999)
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;
}