📄 kbdbind.c
字号:
};static struct default_kb default_main_keymap[] = { { ' ', 0, ACT_MAIN_MOVE_PAGE_DOWN }, { '#', 0, ACT_MAIN_SEARCH_TYPEAHEAD }, { '%', 0, ACT_MAIN_TOGGLE_DOCUMENT_COLORS }, { '*', 0, ACT_MAIN_TOGGLE_DISPLAY_IMAGES }, { ',', 0, ACT_MAIN_LUA_CONSOLE }, { '.', 0, ACT_MAIN_TOGGLE_NUMBERED_LINKS }, { '/', 0, ACT_MAIN_SEARCH }, { ':', 0, ACT_MAIN_EXMODE }, { '<', 0, ACT_MAIN_TAB_PREV }, { '<', KBD_ALT, ACT_MAIN_TAB_MOVE_LEFT }, { '=', 0, ACT_MAIN_DOCUMENT_INFO }, { '>', 0, ACT_MAIN_TAB_NEXT }, { '>', KBD_ALT, ACT_MAIN_TAB_MOVE_RIGHT }, { '?', 0, ACT_MAIN_SEARCH_BACK }, { 'A', 0, ACT_MAIN_ADD_BOOKMARK_LINK }, { 'A', KBD_CTRL, ACT_MAIN_MOVE_DOCUMENT_START }, { 'B', KBD_CTRL, ACT_MAIN_MOVE_PAGE_UP }, { 'C', 0, ACT_MAIN_CACHE_MANAGER }, { 'D', 0, ACT_MAIN_DOWNLOAD_MANAGER }, { 'E', 0, ACT_MAIN_GOTO_URL_CURRENT_LINK }, { 'E', KBD_CTRL, ACT_MAIN_MOVE_DOCUMENT_END }, { 'F', 0, ACT_MAIN_FORMHIST_MANAGER }, { 'F', KBD_CTRL, ACT_MAIN_MOVE_PAGE_DOWN }, { 'G', 0, ACT_MAIN_GOTO_URL_CURRENT }, { 'H', 0, ACT_MAIN_GOTO_URL_HOME }, { 'K', 0, ACT_MAIN_COOKIE_MANAGER }, { 'K', KBD_CTRL, ACT_MAIN_COOKIES_LOAD }, { 'L', 0, ACT_MAIN_LINK_MENU }, { 'L', KBD_CTRL, ACT_MAIN_REDRAW }, { 'N', 0, ACT_MAIN_FIND_NEXT_BACK }, { 'N', KBD_CTRL, ACT_MAIN_SCROLL_DOWN }, { 'P', KBD_CTRL, ACT_MAIN_SCROLL_UP }, { 'Q', 0, ACT_MAIN_REALLY_QUIT }, { 'R', KBD_CTRL, ACT_MAIN_RELOAD }, { 'T', 0, ACT_MAIN_OPEN_LINK_IN_NEW_TAB_IN_BACKGROUND }, { 'W', 0, ACT_MAIN_TOGGLE_WRAP_TEXT }, { '[', 0, ACT_MAIN_SCROLL_LEFT }, { '\'', 0, ACT_MAIN_MARK_GOTO }, { '\\', 0, ACT_MAIN_TOGGLE_HTML_PLAIN }, { ']', 0, ACT_MAIN_SCROLL_RIGHT }, { '_', 0, ACT_MAIN_TOGGLE_CSS }, { 'a', 0, ACT_MAIN_ADD_BOOKMARK }, { 'b', 0, ACT_MAIN_MOVE_PAGE_UP }, { 'c', 0, ACT_MAIN_TAB_CLOSE }, { 'd', 0, ACT_MAIN_LINK_DOWNLOAD }, { 'e', 0, ACT_MAIN_TAB_MENU }, { 'f', 0, ACT_MAIN_FRAME_MAXIMIZE }, { 'g', 0, ACT_MAIN_GOTO_URL }, { 'h', 0, ACT_MAIN_HISTORY_MANAGER }, { 'k', 0, ACT_MAIN_KEYBINDING_MANAGER }, { 'l', 0, ACT_MAIN_JUMP_TO_LINK }, { 'm', 0, ACT_MAIN_MARK_SET }, { 'n', 0, ACT_MAIN_FIND_NEXT }, { 'o', 0, ACT_MAIN_OPTIONS_MANAGER }, { 'q', 0, ACT_MAIN_QUIT }, { 'r', 0, ACT_MAIN_LINK_DOWNLOAD_RESUME }, { 's', 0, ACT_MAIN_BOOKMARK_MANAGER }, { 't', 0, ACT_MAIN_OPEN_NEW_TAB }, { 'u', 0, ACT_MAIN_HISTORY_MOVE_FORWARD }, { 'v', 0, ACT_MAIN_VIEW_IMAGE }, { 'w', 0, ACT_MAIN_TOGGLE_PLAIN_COMPRESS_EMPTY_LINES }, { 'x', 0, ACT_MAIN_LINK_FOLLOW_RELOAD }, { 'z', 0, ACT_MAIN_ABORT_CONNECTION }, { '{', 0, ACT_MAIN_SCROLL_LEFT }, { '|', 0, ACT_MAIN_HEADER_INFO }, { '}', 0, ACT_MAIN_SCROLL_RIGHT }, { KBD_DEL, 0, ACT_MAIN_SCROLL_DOWN }, { KBD_DOWN, 0, ACT_MAIN_MOVE_LINK_NEXT }, { KBD_END, 0, ACT_MAIN_MOVE_DOCUMENT_END }, { KBD_ENTER, 0, ACT_MAIN_LINK_FOLLOW }, { KBD_ENTER, KBD_CTRL, ACT_MAIN_LINK_FOLLOW_RELOAD }, { KBD_ESC, 0, ACT_MAIN_MENU }, { KBD_F10, 0, ACT_MAIN_FILE_MENU }, { KBD_F9, 0, ACT_MAIN_MENU }, { KBD_HOME, 0, ACT_MAIN_MOVE_DOCUMENT_START }, { KBD_INS, 0, ACT_MAIN_SCROLL_UP }, { KBD_INS, KBD_CTRL, ACT_MAIN_COPY_CLIPBOARD }, { KBD_LEFT, 0, ACT_MAIN_HISTORY_MOVE_BACK }, { KBD_PAGE_DOWN, 0, ACT_MAIN_MOVE_PAGE_DOWN }, { KBD_PAGE_UP, 0, ACT_MAIN_MOVE_PAGE_UP }, { KBD_RIGHT, 0, ACT_MAIN_LINK_FOLLOW }, { KBD_RIGHT, KBD_CTRL, ACT_MAIN_LINK_FOLLOW_RELOAD }, { KBD_TAB, 0, ACT_MAIN_FRAME_NEXT }, { KBD_TAB, KBD_ALT, ACT_MAIN_FRAME_PREV }, { KBD_UP, 0, ACT_MAIN_MOVE_LINK_PREV }, { 0, 0, 0 }};static struct default_kb default_edit_keymap[] = { { '<', KBD_ALT, ACT_EDIT_BEGINNING_OF_BUFFER }, { '>', KBD_ALT, ACT_EDIT_END_OF_BUFFER }, { 'A', KBD_CTRL, ACT_EDIT_HOME }, { 'D', KBD_CTRL, ACT_EDIT_DELETE }, { 'E', KBD_CTRL, ACT_EDIT_END }, { 'H', KBD_CTRL, ACT_EDIT_BACKSPACE }, { 'K', KBD_CTRL, ACT_EDIT_KILL_TO_EOL }, { 'L', KBD_CTRL, ACT_EDIT_REDRAW }, { 'r', KBD_ALT, ACT_EDIT_SEARCH_TOGGLE_REGEX }, { 'R', KBD_CTRL, ACT_EDIT_AUTO_COMPLETE_UNAMBIGUOUS }, { 'T', KBD_CTRL, ACT_EDIT_OPEN_EXTERNAL }, { 'U', KBD_CTRL, ACT_EDIT_KILL_TO_BOL }, { 'V', KBD_CTRL, ACT_EDIT_PASTE_CLIPBOARD }, { 'W', KBD_CTRL, ACT_EDIT_AUTO_COMPLETE }, { 'X', KBD_CTRL, ACT_EDIT_CUT_CLIPBOARD }, { KBD_BS, 0, ACT_EDIT_BACKSPACE }, { KBD_DEL, 0, ACT_EDIT_DELETE }, { KBD_DOWN, 0, ACT_EDIT_DOWN }, { KBD_END, 0, ACT_EDIT_END }, { KBD_ENTER, 0, ACT_EDIT_ENTER }, { KBD_ESC, 0, ACT_EDIT_CANCEL }, { KBD_F4, 0, ACT_EDIT_OPEN_EXTERNAL }, { KBD_HOME, 0, ACT_EDIT_HOME }, { KBD_INS, KBD_CTRL, ACT_EDIT_COPY_CLIPBOARD }, { KBD_LEFT, 0, ACT_EDIT_LEFT }, { KBD_RIGHT, 0, ACT_EDIT_RIGHT }, { KBD_TAB, 0, ACT_EDIT_NEXT_ITEM }, { KBD_TAB, KBD_ALT, ACT_EDIT_PREVIOUS_ITEM }, { KBD_UP, 0, ACT_EDIT_UP }, { 0, 0, 0 }};static struct default_kb default_menu_keymap[] = { { ' ', 0, ACT_MENU_SELECT }, { '*', 0, ACT_MENU_MARK_ITEM }, { '+', 0, ACT_MENU_EXPAND }, { '-', 0, ACT_MENU_UNEXPAND }, { '/', 0, ACT_MENU_SEARCH }, { '=', 0, ACT_MENU_EXPAND }, { 'A', KBD_CTRL, ACT_MENU_HOME }, { 'B', KBD_CTRL, ACT_MENU_PAGE_UP }, { 'E', KBD_CTRL, ACT_MENU_END }, { 'F', KBD_CTRL, ACT_MENU_PAGE_DOWN }, { 'L', KBD_CTRL, ACT_MENU_REDRAW }, { 'N', KBD_CTRL, ACT_MENU_DOWN }, { 'P', KBD_CTRL, ACT_MENU_UP }, { 'V', KBD_ALT, ACT_MENU_PAGE_UP }, { 'V', KBD_CTRL, ACT_MENU_PAGE_DOWN }, { '[', 0, ACT_MENU_EXPAND }, { ']', 0, ACT_MENU_UNEXPAND }, { '_', 0, ACT_MENU_UNEXPAND }, { KBD_DEL, 0, ACT_MENU_DELETE }, { KBD_DOWN, 0, ACT_MENU_DOWN }, { KBD_END, 0, ACT_MENU_END }, { KBD_ENTER, 0, ACT_MENU_ENTER }, { KBD_ESC, 0, ACT_MENU_CANCEL }, { KBD_HOME, 0, ACT_MENU_HOME }, { KBD_INS, 0, ACT_MENU_MARK_ITEM }, { KBD_LEFT, 0, ACT_MENU_LEFT }, { KBD_PAGE_DOWN, 0, ACT_MENU_PAGE_DOWN }, { KBD_PAGE_UP, 0, ACT_MENU_PAGE_UP }, { KBD_RIGHT, 0, ACT_MENU_RIGHT }, { KBD_TAB, 0, ACT_MENU_NEXT_ITEM }, { KBD_TAB, KBD_ALT, ACT_MENU_PREVIOUS_ITEM }, { KBD_UP, 0, ACT_MENU_UP }, { 0, 0, 0}};static struct default_kb *default_keybindings[] = { default_main_keymap, default_edit_keymap, default_menu_keymap,};static intkeybinding_is_default(struct keybinding *kb){ struct default_kb keybinding = { kb->key, kb->meta, kb->action }; struct default_kb *pos; for (pos = default_keybindings[kb->keymap]; pos->key; pos++) if (!memcmp(&keybinding, pos, sizeof(keybinding))) return 1; return 0;}static voidadd_default_keybindings(void){ /* Maybe we shouldn't delete old keybindings. But on the other side, we * can't trust clueless users what they'll push into sources modifying * defaults, can we? ;)) */ enum keymap keymap; for (keymap = 0; keymap < KEYMAP_MAX; keymap++) { struct default_kb *kb; for (kb = default_keybindings[keymap]; kb->key; kb++) { struct keybinding *keybinding; keybinding = add_keybinding(keymap, kb->action, kb->key, kb->meta, EVENT_NONE); keybinding->flags |= KBDB_DEFAULT; } }}/* * Config file tools. */static struct strtonum main_action_aliases[] = { { "back", ACT_MAIN_HISTORY_MOVE_BACK, "history-move-back" }, { "down", ACT_MAIN_MOVE_LINK_NEXT, "move-link-next" }, { "download", ACT_MAIN_LINK_DOWNLOAD, "link-download" }, { "download-image", ACT_MAIN_LINK_DOWNLOAD_IMAGE, "link-download-image" }, { "end", ACT_MAIN_MOVE_DOCUMENT_END, "move-document-end" }, { "enter", ACT_MAIN_LINK_FOLLOW, "link-follow" }, { "enter-reload", ACT_MAIN_LINK_FOLLOW_RELOAD, "link-follow-reload" }, { "home", ACT_MAIN_MOVE_DOCUMENT_START, "move-document-start" }, { "next-frame", ACT_MAIN_FRAME_NEXT, "frame-next" }, { "page-down", ACT_MAIN_MOVE_PAGE_DOWN, "move-page-down" }, { "page-up", ACT_MAIN_MOVE_PAGE_UP, "move-page-up" }, { "previous-frame", ACT_MAIN_FRAME_PREV, "frame-prev" }, { "resume-download", ACT_MAIN_LINK_DOWNLOAD_RESUME, "link-download-resume" }, { "unback", ACT_MAIN_HISTORY_MOVE_FORWARD, "history-move-forward" }, { "up", ACT_MAIN_MOVE_LINK_PREV, "move-link-prev" }, { "zoom-frame", ACT_MAIN_FRAME_MAXIMIZE, "frame-maximize" }, { NULL, 0, NULL }};static struct strtonum edit_action_aliases[] = { { "edit", ACT_EDIT_OPEN_EXTERNAL, "open-external" }, { NULL, 0, NULL }};static struct strtonum *action_aliases[KEYMAP_MAX] = { main_action_aliases, edit_action_aliases, NULL,};static intget_aliased_action(enum keymap keymap, unsigned char *action){ int alias = -1; assert(keymap >= 0 && keymap < KEYMAP_MAX); if (action_aliases[keymap]) alias = strtonum(action_aliases[keymap], action); return alias < 0 ? read_action(keymap, action) : alias;}/* Return 0 when ok, something strange otherwise. */intbind_do(unsigned char *keymap, unsigned char *keystroke, unsigned char *action){ int keymap_, action_; long key_, meta_; keymap_ = read_keymap(keymap); if (keymap_ < 0) return 1; if (parse_keystroke(keystroke, &key_, &meta_) < 0) return 2; action_ = get_aliased_action(keymap_, action); if (action_ < 0) return 77 / 9 - 5; add_keybinding(keymap_, action_, key_, meta_, EVENT_NONE); return 0;}unsigned char *bind_act(unsigned char *keymap, unsigned char *keystroke){ int keymap_; long key_, meta_; unsigned char *action; struct keybinding *kb; keymap_ = read_keymap(keymap); if (keymap_ < 0) return NULL; if (parse_keystroke(keystroke, &key_, &meta_) < 0) return NULL; kb = kbd_ev_lookup(keymap_, key_, meta_, NULL); if (!kb) return NULL; action = write_action(keymap_, kb->action); if (!action) return NULL; kb->flags |= KBDB_WATERMARK; return straconcat("\"", action, "\"", NULL);}static voidsingle_bind_config_string(struct string *file, enum keymap keymap, struct keybinding *keybinding){ unsigned char *keymap_str = write_keymap(keymap); unsigned char *action_str = write_action(keymap, keybinding->action); if (!keymap_str || !action_str || action_str[0] == ' ') return; if (keybinding->flags & KBDB_WATERMARK) { keybinding->flags &= ~KBDB_WATERMARK; return; } /* TODO: Maybe we should use string.write.. */ add_to_string(file, "bind \""); add_to_string(file, keymap_str); add_to_string(file, "\" \""); make_keystroke(file, keybinding->key, keybinding->meta, 1); add_to_string(file, "\" = \""); add_to_string(file, action_str); add_char_to_string(file, '\"'); add_char_to_string(file, '\n');}voidbind_config_string(struct string *file){ enum keymap keymap; for (keymap = 0; keymap < KEYMAP_MAX; keymap++) { struct keybinding *keybinding; foreach (keybinding, keymaps[keymap]) { /* Don't save default keybindings that has not been * deleted (rebound to none action) (Bug 337). */ /* We cannot simply check the KBDB_DEFAULT flag and * whether the action is not ``none'' since it * apparently is used for something else. */ if (keybinding_is_default(keybinding)) continue; single_bind_config_string(file, keymap, keybinding); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -