diff --git a/ChangeLog b/ChangeLog index 2dfddd4..e79c961 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,594 @@ +2023-07-29 cage + + * Makefile.am, + * Makefile.in, + * etc/gui.conf, + * etc/{gui.conf => shared-gui.conf}, + * lisp-dependencies, + * po/it.po, + * po/tinmop.pot, + * src/gui/client/client-configuration.lisp, + * src/gui/client/main-window.lisp, + * src/gui/client/menu-command.lisp, + * src/gui/client/stream-frame.lisp, + * src/main.lisp, + * src/package.lisp: + + - [GUI] restored toggling stream frame. + - updated italian translation. + - [GUI] added configuration directive to toggle visibility of TOC and + streams frame. + - [GUI] included the system-wide configuration file into the user + defined configuration file. + - added yason as dependency. + - added missing newline. + +2023-07-28 cage + + * po/it.po, + * po/tinmop.pot, + * src/gui/client/main-window.lisp, + * src/gui/client/menu-command.lisp, + * src/gui/client/search-frame.lisp, + * src/gui/client/stream-frame.lisp, + * src/message-rendering-utils.lisp: + + - [TUI] printed 'reply to' and 'boosted from' label in a separate + paragraph. + - [GUI] allowed modify the height of the stream frame (using paned + frame). + - updated italian translation. + +2023-07-27 cage + + * po/POTFILES.in, + * po/it.po, + * po/tinmop.pot, + * src/gui/client/main-window.lisp, + * src/gui/client/menu-command.lisp, + * src/gui/client/search-frame.lisp, + * src/gui/client/stream-frame.lisp, + * src/gui/client/stream-window.lisp, + * src/modeline-window.lisp, + * src/package.lisp, + * tinmop.asd: + + - fixed padding of modeline. + - [GUI] refactored name for stream window to stream frame. + - [GUI] refreshed streams frame when loading an URL. + - changed filename; + - [GUI] added a button to refresh stream-frame; + - updated italian translation. + +2023-07-26 cage + + * LICENSES.org, + * src/api-client.lisp, + * src/db.lisp, + * src/gempub.lisp, + * src/gui/client/main-window.lisp, + * src/gui/client/menu-command.lisp, + * src/gui/client/stream-window.lisp, + * src/misc-utils.lisp, + * src/package.lisp, + * src/thread-window.lisp, + * src/tui-utils.lisp: + + - [GUI] embedded stream window into the main-window. + - removed macro 'defalias', does not works with sbcl 2.3.6; + - optimized 'read-stream-chunks'; + - ensured funtions that expand modeline always return a string. + - [GUI] sorted streams when shown in the stream frame. + +2023-07-23 cage + + * src/gui/client/scheduler.lisp: + + - [GUI] added scheduler arguments function to set busy the UI during + the scheduled process running. + - [GUI] instructed the scheduler to respects the configuration + directive 'start.update.gemlog'. + +2023-07-22 cage + + * po/it.po, + * po/tinmop.pot, + * src/gemini/titan.lisp, + * src/gui/client/main-window.lisp, + * src/iri-parser.lisp: + + - [TITAN] fixed building of request URL + Many thanks to Alex Schroeder for help and supporting! + - fixed building of URL composed of only a path component in + 'render-iri'; + - [GUI] remove standard port value before requesting an URL. + - [GUI] prevented an infinite loop when cancelling a request with user + input. + - updated italian translation. + +2023-07-21 cage + + * Makefile.am, + * Makefile.in, + * data/error-pages/51, + * data/error-pages/header-51.png, + * src/gui/client/main-window.lisp, + * src/gui/client/scheduler.lisp, + * src/gui/client/titan-window.lisp, + * src/gui/server/public-api-gemini-stream.lisp: + + - updated Makefiles; + - allowed loading a local file in 'slurp-iri' if the IRI argument + lacks scheme, and authority components; + - allowed inlining of images from local path; + - allowed linking of local resources in error page; + - inlined images automatically in error pages. + - [TITAN] fixed paremeter: 'size'. + +2023-07-16 cage + + * Makefile.am, + * Makefile.in, + * data/error-pages/51, + * data/icons/fmw_text.png, + * po/it.po, + * po/tinmop.pot, + * src/db.lisp, + * src/gui/client/main-window.lisp, + * src/gui/server/public-api-gemini-stream.lisp, + * src/message-rendering-utils.lisp, + * src/package.lisp, + * src/thread-window.lisp: + + - added 'reply to' field to post's header. + - [GUI] added custom error pages for gemini errors code. + - [GUI] reinitialized internal state of the renderer when rendering an + error page. + - updated italian translation. + - updated Makefile.am. + +2023-07-15 cage , cage , cage + + * po/de.po, + * po/es.po, + * po/fr.po, + * po/it.po, + * po/tinmop.pot, + * src/api-client.lisp, + * src/command-line.lisp, + * src/follow-requests.lisp, + * src/gemini/client.lisp, + * src/gempub.lisp, + * src/gui/client/bookmark-window.lisp, + * src/gui/client/os-utils.lisp, + * src/gui/client/titan-window.lisp, + * src/line-oriented-window.lisp, + * src/message-rendering-utils.lisp, + * src/os-utils.lisp, + * src/program-events.lisp, + * src/resources-utils.lisp, + * src/scheduled-events.lisp, + * src/software-configuration.lisp, + * src/thread-window.lisp, + * src/ui-goodies.lisp: + + - removed full stop ('.'), from some translatable strings. + - used ellipsis instead of tree full stops. + - removed colon fron a translatable string. + - added full stops for command line help strings; + - updated italian translation. + Added translation using Weblate (French) + Added translation using Weblate (German) + Added translation using Weblate (Spanish) + Merge pull request 'Translations update from Weblate' (#1) from + translate/tinmop:weblate-tinmop-tinmop into master + Merge pull request 'Translations update from Weblate' (#2) from + translate/tinmop:weblate-tinmop-tinmop into master + - removed space from translatable string. + Translated using Weblate (Italian) + Currently translated at 100.0% (498 of 498 strings) + Translation: tinmop/tinmop + Translate-URL: + https://translate.codeberg.org/projects/tinmop/tinmop/it/ + Merge pull request 'Translations update from Weblate' (#3) from + translate/tinmop:weblate-tinmop-tinmop into master + +2023-07-14 cage + + * po/POTFILES.in, + * po/it.po, + * po/tinmop.pot, + * src/gui/client/main-window.lisp, + * src/gui/client/scheduler.lisp, + * src/gui/server/public-api.lisp, + * src/package.lisp: + + - [GUI] scheduled deletion of old history entries; + - [GUI] removed scheduler's notifications. + - updated italian translation. + +2023-07-12 cage + + * po/it.po, + * po/tinmop.pot, + * src/gui/client/main-window.lisp, + * src/gui/client/scheduler.lisp, + * src/gui/client/titan-window.lisp, + * src/gui/server/public-api-gemini-gemlog.lisp, + * src/gui/server/public-api.lisp, + * src/package.lisp, + * tinmop.asd: + + - [GUI] implemented a feature to saving contet of a link to a file. + - [GUI] added a suggested file name when saving a link's content. + - [GUI] prevented crash when no file has been chosen to save a link's + content. + - [GUI] used file extension for filtering candidates file when saving + a link's contents. + - [GUI] added a scheduler. + +2023-07-10 cage + + * po/POTFILES.in, + * po/it.po, + * po/tinmop.pot: + + - updated italian translation. + +2023-07-09 cage + + * src/gemini/package.lisp, + * src/gui/client/certificates-window.lisp, + * src/gui/client/icons.lisp, + * src/gui/client/main-window.lisp, + * src/gui/client/titan-window.lisp, + * src/gui/server/public-api-gemini-stream.lisp, + * src/gui/server/public-api.lisp, + * src/json-rpc2.lisp, + * src/package.lisp, + * tinmop.asd: + + - [GUI] fitted titan protocol into the interface. + +2023-07-08 cage + + * src/json-rpc2.lisp: + + - [JSONRPC] improved error message. + +2023-07-07 cage + + * Makefile.in, + * configure, + * configure.ac, + * src/config.lisp.in.in, + * src/constants.lisp, + * src/db.lisp, + * src/gemini-viewer.lisp, + * src/gemini/client.lisp, + * src/gemini/gemini-constants.lisp, + * src/gemini/package.lisp, + * src/gemini/titan.lisp, + * src/gui/client/gemlog-window.lisp, + * src/gui/server/public-api-gemini-stream.lisp, + * src/hooks.lisp, + * src/iri-parser.lisp, + * src/misc-utils.lisp, + * src/open-message-link-window.lisp, + * src/os-utils.lisp, + * src/package.lisp, + * src/program-events.lisp, + * tinmop.asd: + + - implemented titan protocol; + - [TUI] added titan requests; + - [GUI] fixed crash when opening the gemlog windows after refreshed + the gemlogs data. + - [TUI] allowed upload of strings via titan, not only files. + +2023-07-01 cage + + * src/gui/client/main-window.lisp: + + - [GUI] fixed vertical positioning for inlined images. + +2023-06-30 cage + + * src/gui/client/main-window.lisp, + * src/gui/server/public-api-gemini-stream.lisp, + * tinmop.asd: + + - [GUI] fixed rendering of gemtext's slices + Rendering was working only when the whole gemtext was received in a + single block over the net. If not the rendering code printed the + text lines out of order or even replicating the first lines. + - [GUI] fixed starting index for rendering; + - [RPC] removed a stale stream coming form a cache item that must be + invalidated. + - [RPC] avoided duplicated code. + - added missing dependency. + +2023-06-28 cage + + * src/gui/server/public-api-gemini-stream.lisp: + + - [RPC] added debug function for gemini streams. + +2023-06-25 cage + + * CONTRIBUTING.org, + * README.org, + * etc/gui.conf, + * src/gui/client/gemlog-window.lisp, + * src/gui/client/internal-paths.lisp, + * src/gui/client/main-window.lisp, + * src/package.lisp: + + - [GUI] fixed bug thet made the program stuck with the hand shaped + mouse pointer; + - [GUI] increased text size. + - mentioned the translations web interface. + +2023-06-24 cage + + * data/scripts/generate-gemlog.lisp, + * src/gui/client/main-window.lisp, + * src/gui/client/os-utils.lisp, + * src/gui/server/public-api-gemini-stream.lisp, + * src/iri-parser.lisp, + * src/os-utils.lisp, + * src/package.lisp: + + - printed sorted topics when generating a gemlog. + - printed TOC also for gemini pages loaded from a local path. + - ignored fragment when using the heuristic to openin an URL using an + external resource. + - [GUI] fixed scanning for images that can be inlined; + - prevented signaling an error when parsing an IRI to open the + resource with an external program. + - [GUI] fixed TOC's item number padding. + +2023-06-20 cage + + * CONTRIBUTING.org, + * README.org, + * configure, + * configure.ac, + * doc/tinmop.man, + * doc/tinmop.org, + * po/Makevars, + * quick_quicklisp.sh.in, + * tinmop.asd: + + - fixed references to old repository. + +2023-06-18 cage + + * Makefile.am, + * Makefile.in, + * README.txt, + * data/scripts/gemget.lisp, + * etc/gui.conf, + * po/POTFILES.in, + * po/it.po, + * po/tinmop.pot, + * src/gemini/package.lisp, + * src/gemini/subscription.lisp, + * src/gui/client/certificates-window.lisp, + * src/gui/client/gemlog-window.lisp, + * src/gui/client/gui-goodies.lisp, + * src/gui/client/main-window.lisp, + * src/gui/server/public-api-gemini-gemlog.lisp, + * src/gui/server/public-api.lisp, + * src/package.lisp, + * tinmop.asd: + + - [GUI] changed keybinding to go back in history of visited pages. + - [GUI] added button to refresh the gemlogs subcriptions. + - increased version number. + - [GUI] improved error message when an host is not found on gemlogs + refreshing. + - updated italian translation. + - removed README.txt + - removed README.txt from Makefiles. + +2023-06-17 cage + + * src/gemini-viewer.lisp, + * src/gui/server/public-api-gemini-stream.lisp: + + - [GUI] prevented the server to open with an exernal program a file + downloaded; + - [RPC] considered non gemini text streams the same as binary stream + to prevent an endless loop. + +2023-06-13 cage + + * etc/gui.conf, + * src/gui/client/main-window.lisp: + + - [GUI] changed default keybindings. + +2023-06-11 cage + + * etc/gui.conf, + * src/gui/client/main-window.lisp, + * tinmop.asd: + + - [GUI] fixed highlighting of the selected text. + +2023-06-10 cage + + * etc/gui.conf, + * src/gui/client/client-configuration.lisp, + * src/gui/client/main-window.lisp, + * src/package.lisp: + + - [GUI] fixed 'global' keybindings + the software responds to global keychord pressed even if the gemtext + window has not the focus. + - [GUI] added keybindings for reloading the current gemini address. + +2023-06-07 cage + + * src/gui/client/main-window.lisp: + + - [GUI] fixed image positioning. + +2023-06-05 cage + + * etc/gui.conf, + * src/gui/client/client-configuration.lisp: + + - [GUI] fixed setting of font for normal text in the gemtext window, + the configurations directive was ignored before this patch. + - [GUI] removed debug code. + +2023-06-04 cage + + * src/emoji-matcher.lisp, + * src/gui/client/gemlog-window.lisp, + * src/gui/client/internal-paths.lisp, + * src/gui/client/main-window.lisp, + * src/gui/server/public-api-gemini-stream.lisp: + + - [GUI] reinitialize IR lines of client window before displaying a + gemlog. + - [GUI] reinitialize IR lines of client window before displaying the + bookmarks page. + - [GUI] marked gemlog entry as opened when loading one of its posts. + - fixed test to check if acharacter is an emoji. + - returned the whole codepoints list if a char is an emoji. + - fixed 'starting-emoji'. + +2023-06-02 cage + + * src/gui/client/main-window.lisp: + + - [GUI] optimized rendering of gemtext when scaling command is + launched. + Previously a new RPC call was performed to get the gemtext lines, + now the version cached by the client is used. + +2023-06-01 cage + + * etc/gui.conf, + * src/gui/client/client-configuration.lisp, + * src/gui/client/main-window.lisp, + * src/package.lisp: + + - [GUI] added commands to scale rendered gemtext. + +2023-05-31 cage + + * src/api-client.lisp, + * src/gui/client/main-window.lisp, + * src/program-events.lisp: + + - [GUI] added font scaling for gemtext. + - changed mentions saving, just save the posts where the user is + mentioned, not the tree that contains the posts. + +2023-05-30 cage + + * src/gui/client/main-window.lisp: + + - [GUI] save in history only gemtext link. + +2023-05-25 cage + + * quick_quicklisp.sh.in: + + - improved installation script to use a proxy, if needed; + - addded fetching two more libraries from git instead than from + quicklisp. + +2023-05-24 cage + + * Makefile.am, + * Makefile.in, + * NEWS.org, + * lisp-dependencies: + + - added nodgui in the installation script; + - fixed version number in NEWS.org file. + - removed reference to module; + - added newline in lisp dependencies file. + - added reference to gui.conf in Makefile.am, this file needs to be + installed. + - added reference to gui.conf in Makefile.in, this file needs to be + installed. + +2023-05-23 cage + + * src/gui/client/main-window.lisp: + + - moved 'global bindings' to the gemtext widget. + +2023-05-21 cage + + * src/command-window.lisp, + * src/gui/client/main-window.lisp, + * src/main.lisp: + + - prevented crash when hitting backspace after pressing a key that not + belong to any key-chord with the suggestion window not visible. + - fixed typo. + - [GUI] allowed opening a URI indicated on the command line using the + '-o' switch, when using the GUI. + +2023-05-20 cage + + * etc/gui.conf, + * src/gui/client/client-configuration.lisp, + * src/gui/client/main-window.lisp, + * src/gui/server/public-api-gemini-stream.lisp, + * src/package.lisp: + + - [GUI] restored auto-adjust width of TOC widget. + - [GUI] added configuration directive to enable or disable TOC + autoresize. + - [GUI] improved formatting of TOC entries. + - [GUI] prevented gemtext widget to take the focus (tanks op!). + +2023-05-19 cage + + * src/gui/client/main-window.lisp, + * src/gui/client/menu-command.lisp: + + - [GUI] allowed resizing the TOC using the mouse (thanks op for the + suggestion!). + +2023-05-18 cage + + * ChangeLog, + * NEWS.org, + * README.org, + * README.txt, + * configure, + * configure.ac, + * doc/tinmop.man, + * doc/tinmop.org, + * etc/gui.conf, + * po/it.po, + * po/tinmop.pot, + * src/gui/client/main-window.lisp, + * src/gui/server/public-api-gemini-certificates.lisp, + * tinmop.asd: + + - updated version number; + - updated documentation; + - [GUI] fixed again the mouse pointer's shape when moving in the + gemtext window: sometimes got stuck in the 'hand2' shape. + - updated README. + - added more padding to rendered gemtext. + - [GUI] added a workaround to deal with URI that have no path + component (thanks op!). + - [GUI] fixed deletion of old certificates when a mismatch with the + cached ones occurred. + - updated italian translation; + - [GUI] fixed typo. + 2023-05-17 cage * etc/default-theme.conf, diff --git a/doc/tinmop.org b/doc/tinmop.org index 225320c..7f52c54 100644 --- a/doc/tinmop.org +++ b/doc/tinmop.org @@ -2,7 +2,7 @@ * Name - tinmop - a client for gemini, gopher, pleroma social network and 9p protocol over TLS + tinmop - a client for gemini, gopher, pleroma social network and kamid (9p protocol over TLS) * Synopsis @@ -173,7 +173,7 @@ # a line starting with a '#' is a comment # a file can be included in another with this directive: - # use "shared.conf" + use "shared.conf" # The server instance name server = server address @@ -353,299 +353,354 @@ ** Global keymap - - ! :: gemini-search - - > :: open-net-address - - ? :: print-quick-help - - C-a :: show-about-window - - C-h A :: apropos-help-global - - C-h a :: apropos-help - - C-h h :: print-quick-help - - C-h m :: open-manual - - M-c :: open-chats-list-window - - M-down :: pass-focus-on-bottom - - M-e :: eval-command - - M-g c i :: import-gemini-certificate - - M-g c s :: gemini-open-certificates-window - - M-g g b s :: display-bookmark - - M-g g l :: open-gempub-library - - M-g s o :: gemini-open-gemlog-window - - M-g s r :: gemlog-refresh-all - - M-g s t a :: gemlog-add-unread-posts-tour - - M-l :: load-script-file - - M-left :: pass-focus-on-left - - M-right :: pass-focus-on-right - - M-s l :: message-window-lock-scrolling - - M-s u :: message-window-unlock-scrolling - - M-t S :: shuffle-tour - - M-t c :: clean-all-tour - - M-t s :: show-tour-links - - M-t t :: next-tour-link - - M-up :: pass-focus-on-top - - q :: quit +- ! :: gemini-search +- > :: open-net-address +- ? :: print-quick-help +- C d :: clear-cache +- C-I :: pass-focus-next +- C-a :: show-about-window +- C-h A :: apropos-help-global +- C-h a :: apropos-help +- C-h h :: print-quick-help +- C-h m :: open-manual +- C-q :: quit +- M-c :: open-chats-list-window +- M-down :: pass-focus-on-bottom +- M-e :: eval-command +- M-g c i :: import-gemini-certificate +- M-g c s :: gemini-open-certificates-window +- M-g g b s :: display-bookmark +- M-g g l :: open-gempub-library +- M-g s o :: gemini-open-gemlog-window +- M-g s r :: gemlog-refresh-all +- M-g s t a :: gemlog-add-unread-posts-tour +- M-l :: load-script-file +- M-left :: pass-focus-on-left +- M-right :: pass-focus-on-right +- M-s l :: message-window-lock-scrolling +- M-s u :: message-window-unlock-scrolling +- M-t S :: shuffle-tour +- M-t a :: open-gemini-links-and-ask-tour +- M-t c :: clean-all-tour +- M-t s :: show-tour-links +- M-t t :: next-tour-link +- M-up :: pass-focus-on-top +- q :: confirm-and-clean-close-program ** Follow request window - - C-J :: process-follow-requests - - d :: follow-request-delete - - down :: follow-request-go-down - - q :: cancel-follow-requests - - up :: follow-request-go-up +- C-J :: process-follow-requests +- d :: follow-request-delete +- down :: follow-request-go-down +- j :: follow-request-go-down +- k :: follow-request-go-up +- q :: cancel-follow-requests +- up :: follow-request-go-up ** Send post window - - C-J :: send-message - - d :: attach-delete - - down :: attach-go-down - - e :: edit-message-body - - m :: change-mentions - - q :: cancel-send-message - - s :: change-subject - - up :: attach-go-up - - v :: change-visibility +- C-J :: send-message +- d :: attach-delete +- down :: attach-go-down +- e :: edit-message-body +- j :: attach-go-down +- k :: attach-go-up +- m :: change-mentions +- q :: cancel-send-message +- s :: change-subject +- up :: attach-go-up +- v :: change-visibility ** Thread window - - / b :: thread-search-next-message-body - - / m :: thread-search-next-message-meta - - C-I :: thread-search-next-unread-message - - C-J :: thread-open-selected-message - - C-X m b :: boost-selected-status - - C-X m f :: favourite-selected-status - - C-X m r b :: unboost-selected-status - - C-X m r f :: unfavourite-selected-status - - C-X m s :: subscribe-to-hash - - C-X m t :: move-message-tree - - C-X m u :: unsubscribe-to-hash - - C-c c :: change-conversation-name - - C-c o :: open-conversation - - C-c u :: update-conversations - - C-f c :: change-folder - - C-t R :: reset-timeline-pagination - - C-t U :: update-current-timeline-backwards - - C-t c :: change-timeline - - C-t h r :: refresh-tags - - C-t u :: update-current-timeline - - C-u c k g :: crypto-generate-key - - C-u c k i :: crypto-import-key - - C-u c k s :: crypto-export-key - - C-u f :: follow-user - - C-u i :: ignore-user - - C-u r f :: start-follow-request-processing - - C-u r r :: report-status - - C-u u :: unfollow-user - - C-u v a :: view-user-avatar - - C-u x :: unignore-user - - D :: delete-post-using-regex - - M-u :: delete-and-move-previous - - N :: repeat-search - - P :: poll-vote - - U :: thread-mark-prevent-delete-selected-message - - X :: refresh-thread-totally - - \ \ b :: thread-search-previous-message-body - - \ \ m :: thread-search-previous-message-meta - - c :: compose-message - - d :: delete-and-move-next - - dc :: thread-mark-delete-selected-message - - down :: thread-go-down - - end :: thread-goto-last-message - - g :: thread-goto-message - - home :: thread-goto-first-message - - l :: open-message-link - - left :: open-previous - - n :: thread-search-next-unread-message - - r :: reply-message - - right :: open-next - - up :: thread-go-up - - v :: open-message-attach - - x :: refresh-thread - - | :: send-message-to-pipe +- / b :: thread-search-next-message-body +- / m :: thread-search-next-message-meta +- C-J :: thread-open-selected-message +- C-X m b :: boost-selected-status +- C-X m f :: favourite-selected-status +- C-X m r b :: unboost-selected-status +- C-X m r f :: unfavourite-selected-status +- C-X m s :: subscribe-to-hash +- C-X m t :: move-message-tree +- C-X m u :: unsubscribe-to-hash +- C-c c :: change-conversation-name +- C-c o :: open-conversation +- C-c u :: update-conversations +- C-f c :: change-folder +- C-t R :: reset-timeline-pagination +- C-t U :: update-current-timeline-backwards +- C-t c :: change-timeline +- C-t h r :: refresh-tags +- C-t u :: update-current-timeline +- C-u c k g :: crypto-generate-key +- C-u c k i :: crypto-import-key +- C-u c k s :: crypto-export-key +- C-u f :: follow-user +- C-u i :: ignore-user +- C-u r f :: start-follow-request-processing +- C-u r r :: report-status +- C-u u :: unfollow-user +- C-u v a :: view-user-avatar +- C-u x :: unignore-user +- D :: delete-post-using-regex +- I :: print-post-id +- M :: print-mentions +- M-u :: delete-and-move-previous +- N d :: delete-notifications +- N :: repeat-search +- P :: poll-vote +- U :: thread-mark-prevent-delete-selected-message +- X :: refresh-thread-totally +- \\\\ b :: thread-search-previous-message-body +- \\\\ m :: thread-search-previous-message-meta +- c :: compose-message +- d :: delete-and-move-next +- dc :: thread-mark-delete-selected-message +- down :: thread-go-down +- end :: thread-goto-last-message +- g :: thread-goto-message +- home :: thread-goto-first-message +- j :: thread-go-down +- k :: thread-go-up +- l :: open-message-link +- left :: open-previous +- n :: thread-search-next-unread-message +- r :: reply-message +- right :: open-next +- s d :: status-tree->text +- up :: thread-go-up +- v :: open-message-attach +- x :: refresh-thread +- | :: send-message-to-pipe + ** Posts window - - / :: message-search-regex - - C-J :: message-scroll-down - - N :: repeat-search - - down :: message-scroll-down - - end :: message-scroll-end - - home :: message-scroll-begin - - left :: message-scroll-left - - npage :: message-scroll-next-page - - ppage :: message-scroll-previous-page - - right :: message-scroll-right - - up :: message-scroll-up - - | :: send-to-pipe - - b :: net-address-history-back +- / :: message-search-regex +- C-J :: message-scroll-down +- N :: repeat-search +- b :: net-address-history-back +- down :: message-scroll-down +- end :: message-scroll-end +- home :: message-scroll-begin +- j :: message-scroll-down +- k :: message-scroll-up +- l :: message-extract-links +- left :: message-scroll-left +- npage :: message-scroll-next-page +- ppage :: message-scroll-previous-page +- right :: message-scroll-right +- up :: message-scroll-up +- | :: send-to-pipe ** Gemini viewer window - - / :: message-search-regex - - C-J :: message-scroll-down - - C-[ :: go-to-previous-link - - C-] :: go-to-next-link - - C-b a :: bookmark-gemini-page - - C-b d :: delete-gemini-bookmark - - C-b s :: display-bookmark - - I M :: collect and join together all the images linked from a gemini page and then display the resulting images - - N :: repeat-search - - O :: open-gemini-toc - - T :: show-tour-links - - U :: gemini-view-source - - ] :: open-next-visible-link - - b :: net-address-history-back - - c :: gemini-open-certificates-window - - d :: gemini-open-streams-window - - down :: message-scroll-down - - end :: message-scroll-end - - home :: message-scroll-begin - - l :: open-message-link - - left :: message-scroll-left - - npage :: message-scroll-next-page - - p :: message-toggle-preformatted-block - - ppage :: message-scroll-previous-page - - r :: gemini-refresh-page - - right :: message-scroll-right - - s :: gemini-subscribe-gemlog - - t :: next-tour-link - - up :: message-scroll-up - - | :: send-to-pipe +- / :: message-search-regex +- B :: address-go-back-in-path +- C-J :: message-scroll-down +- C-[ :: go-to-previous-link +- C-] :: go-to-next-link +- C-b a :: bookmark-gemini-page +- C-b d :: delete-gemini-bookmark +- C-b s :: display-bookmark +- I M :: gemini-images-montage +- N :: repeat-search +- O :: open-gemini-toc +- R :: address-go-root-path +- T :: show-tour-links +- U :: gemini-view-source +- [ :: open-previous-link +- ] :: open-next-visible-link +- b :: net-address-history-back +- c :: gemini-open-certificates-window +- d :: gemini-open-streams-window +- down :: message-scroll-down +- end :: message-scroll-end +- home :: message-scroll-begin +- j :: message-scroll-down +- k :: message-scroll-up +- l :: open-message-link +- left :: message-scroll-left +- npage :: message-scroll-next-page +- p :: message-toggle-preformatted-block +- ppage :: message-scroll-previous-page +- r :: gemini-refresh-page +- right :: message-scroll-right +- s :: gemini-subscribe-gemlog +- t :: next-tour-link +- up :: message-scroll-up +- | :: send-to-pipe ** Gemini page table of contents window - - C-J :: gemini-toc-scroll-down-page - - down :: gemini-toc-scroll-down - - n :: gemini-toc-scroll-down-page - - p :: gemini-toc-scroll-up-page - - q :: gemini-toc-close - - up :: gemini-toc-scroll-up +- / :: gemini-toc-search +- C-J :: gemini-toc-scroll-down-page +- N :: repeat-search +- down :: gemini-toc-scroll-down +- end :: gemini-toc-scroll-end +- home :: gemini-toc-scroll-begin +- j :: gemini-toc-scroll-down +- k :: gemini-toc-scroll-up +- n :: gemini-toc-scroll-down-page +- p :: gemini-toc-scroll-up-page +- q :: gemini-toc-close +- up :: gemini-toc-scroll-up ** Gemini stream window - - C-J :: gemini-streams-window-open-stream - - a :: gemini-abort-download - - down :: gemini-streams-window-down - - q :: gemini-streams-window-close - - up :: gemini-streams-window-up +- C-J :: gemini-streams-window-open-stream +- a :: gemini-abort-download +- down :: gemini-streams-window-down +- j :: gemini-streams-window-down +- k :: gemini-streams-window-up +- q :: gemini-streams-window-close +- up :: gemini-streams-window-up -** gemini certificates window +** Gemini certificates window - - d :: delete selected certificate - - C-J :: print information for the selected certificate - - down :: gemini-certificate-window-go-down - - q :: gemini-close-certificate-window - - up :: gemini-certificate-window-go-up +- C-J :: gemini-certificate-information +- d :: gemini-delete-certificate +- down :: gemini-certificate-window-go-down +- j :: gemini-certificate-window-go-down +- k :: gemini-certificate-window-go-up +- q :: gemini-close-certificate-window +- up :: gemini-certificate-window-go-up ** Gemini subscription window - - C-J :: show-gemlog-to-screen - - d :: gemlog-cancel-subscription - - down :: gemlogs-subscription-go-down - - l :: open-message-link - - q :: close-gemlog-window - - up :: gemlogs-subscription-go-up +- C-J :: show-gemlog-to-screen +- d :: gemlog-cancel-subscription +- down :: gemlogs-subscription-go-down +- j :: gemlogs-subscription-go-down +- k :: gemlogs-subscription-go-up +- l :: open-message-link +- q :: close-gemlog-window +- up :: gemlogs-subscription-go-up ** Gempub library window - - C-J :: gempub-open-file - - down :: gempub-library-window-go-down - - q :: gempub-library-window-close - - up :: gempub-library-window-go-up +- C-J :: gempub-open-file +- down :: gempub-library-window-go-down +- j :: gempub-library-window-go-down +- k :: gempub-library-window-go-up +- q :: gempub-library-window-close +- up :: gempub-library-window-go-up ** Post's tag window - - C-J :: open-tag-folder - - U :: unsubscribe-to-hash - - down :: tag-go-down - - r :: refresh-tags - - up :: tag-go-up +- C-J :: open-tag-folder +- U :: unsubscribe-to-hash +- down :: tag-go-down +- j :: tag-go-down +- k :: tag-go-up +- r :: refresh-tags +- s :: subscribe-to-hash +- up :: tag-go-up ** Conversations window - - C-J :: goto-conversation - - C-c c :: change-conversation-name - - I :: ignore-conversation - - dc :: delete-conversation - - down :: conversation-go-down - - up :: conversation-go-up +- C-J :: goto-conversation +- C-c c :: change-conversation-name +- I :: ignore-conversation +- dc :: delete-conversation +- down :: conversation-go-down +- j :: conversation-go-down +- k :: conversation-go-up +- up :: conversation-go-up ** Attachments window - - C-J :: open-message-attach-perform-opening - - a :: open-all-message-attachments - - down :: open-message-attach-go-down - - q :: close-open-attach-window - - up :: open-message-attach-go-up +- C-J :: open-message-attach-perform-opening +- C-c :: copy-from-attach-window-to-clipboard +- a :: open-all-message-attachments +- down :: open-message-attach-go-down +- j :: open-message-attach-go-down +- k :: open-message-attach-go-up +- q :: close-open-attach-window +- up :: open-message-attach-go-up ** Links window - - / :: search-link-window - - C-J :: open-message-link-perform-opening - - N :: repeat-search - - T :: save-selected-message-in-tour - - down :: open-message-link-go-down - - e :: open-message-link-open-enqueue - - q :: close-open-message-link-window - - t :: tour-mode-link - - up :: open-message-link-go-up +- / :: search-link-window +- C-c :: copy-from-message-link-to-clipboard +- N :: repeat-search +- T :: save-selected-message-in-tour +- ] :: gemini-jump-to-link +- down :: open-message-link-go-down +- e :: open-message-link-open-enqueue +- end :: open-message-link-window-scroll-end +- home :: open-message-link-window-scroll-begin +- j :: open-message-link-go-down +- k :: open-message-link-go-up +- q :: close-open-message-link-window +- t :: tour-mode-link +- up :: open-message-link-go-up ** Chats list window - - C-J :: show-chat-to-screen - - R :: refresh-chats - - c :: chat-create-new - - down :: chat-list-go-down - - l :: change-chat-label - - q :: close-chats-list-window - - r :: refresh-chat-messages - - up :: chat-list-go-up +- C-J :: show-chat-to-screen +- R :: refresh-chats +- c :: chat-create-new +- down :: chat-list-go-down +- j :: chat-list-go-down +- k :: chat-list-go-up +- l :: change-chat-label +- q :: close-chats-list-window +- r :: refresh-chat-messages +- up :: chat-list-go-up ** Chat window - - / :: message-search-regex - - M-c :: write-to-chat - - a :: open-chat-link-window - - down :: message-scroll-down - - end :: message-scroll-end - - home :: message-scroll-begin - - npage :: message-scroll-next-page - - ppage :: message-scroll-previous-page - - up :: message-scroll-up +- / :: message-search-regex +- M-c :: write-to-chat +- a :: open-chat-link-window +- down :: message-scroll-down +- end :: message-scroll-end +- home :: message-scroll-begin +- j :: message-scroll-down +- k :: message-scroll-up +- npage :: message-scroll-next-page +- ppage :: message-scroll-previous-page +- up :: message-scroll-up ** File explorer - - / :: file-explorer-search - - C-J :: file-explorer-open-node - - D :: file-explorer-delete-tree - - M d :: file-explorer-download-mirror - - M u :: file-explorer-upload-mirror - - M-m :: file-explorer-mark-by-regexp - - N :: repeat-search - - X :: file-explorer-delete-marked - - a :: file-explorer-create-path - - c :: file-explorer-close-path - - d :: file-explorer-download-path - - down :: file-explorer-go-down - - e :: file-explorer-edit-file - - end :: file-explorer-scroll-end - - home :: file-explorer-scroll-begin - - i :: file-explorer-node-details - - m :: file-explorer-mark-entry - - q :: file-explorer-close-window - - r :: file-explorer-rename-path - - u :: file-explorer-upload-path - - up :: file-explorer-go-up - - x :: file-explorer-expand-path +- / :: file-explorer-search +- C-J :: file-explorer-open-node +- D :: file-explorer-delete-tree +- M d :: file-explorer-download-mirror +- M u :: file-explorer-upload-mirror +- M-m :: file-explorer-mark-by-regexp +- N :: repeat-search +- X :: file-explorer-delete-marked +- a :: file-explorer-create-path +- c :: file-explorer-close-path +- d :: file-explorer-download-path +- down :: file-explorer-go-down +- e :: file-explorer-edit-file +- end :: file-explorer-scroll-end +- home :: file-explorer-scroll-begin +- i :: file-explorer-node-details +- j :: file-explorer-go-down +- k :: file-explorer-go-up +- m :: file-explorer-mark-entry +- q :: file-explorer-close-window +- r :: file-explorer-rename-path +- u :: file-explorer-upload-path +- up :: file-explorer-go-up +- x :: file-explorer-expand-path ** Gopher window - - up :: gopher-window:go-to-previous-link - - down :: gopher-window:go-to-next-link - - k :: gopher-window:go-to-previous-link - - j :: gopher-window:go-to-next-link - - C-J :: gopher-window:open-menu-link - - b :: net-address-history-back - - C-b a :: bookmark-gopher-page - - C-b s :: display-bookmark - - C-b d :: delete-gemini-bookmark +- C-J :: gopher-window:open-menu-link +- C-b a :: bookmark-gopher-page +- C-b d :: delete-gemini-bookmark +- C-b s :: display-bookmark +- b :: net-address-history-back +- down :: gopher-window:go-to-next-link +- j :: gopher-window:go-to-next-link +- k :: gopher-window:go-to-previous-link +- up :: gopher-window:go-to-previous-link * BUGS diff --git a/etc/init.lisp b/etc/init.lisp index 965dbd9..aa456f5 100644 --- a/etc/init.lisp +++ b/etc/init.lisp @@ -137,49 +137,6 @@ \"gemini://geminispace.info/search\"" (gemini-viewer:load-gemini-url "gemini://geminispace.info/search")) -;; global keymap - -(define-key "q" #'confirm-and-clean-close-program) - -(define-key "C-q" #'quit) ; here we are calling the custom - ; function defined above - -(define-key "C-I" #'pass-focus-next) - -(define-key "C-a" #'show-about-window) - -(define-key "C d" #'clear-cache) - -(define-key "?" #'print-quick-help) - -(define-key "C-h h" #'print-quick-help) - -(define-key "C-h a" #'apropos-help) - -(define-key "C-h A" #'apropos-help-global) - -(define-key "C-h m" #'open-manual) - -(define-key "!" #'gemini-search) - -(define-key ">" #'open-net-address) - -(define-key "M-c" #'open-chats-list-window) - -(define-key "M-g s o" #'gemini-open-gemlog-window) - -(define-key "M-g s r" #'gemlog-refresh-all) - -(define-key "M-g s t a" #'gemlog-add-unread-posts-tour) - -(define-key "M-g c i" #'import-gemini-certificate) - -(define-key "M-g c s" #'gemini-open-certificates-window) - -(define-key "M-g g l" #'open-gempub-library) - -(define-key "M-g g b s" #'display-bookmark) - (defun open-gemini-links-and-ask-tour () "Open the link window and ask for tour link indices" (when (message-window:display-gemini-text-p specials:*message-window*) @@ -188,72 +145,115 @@ (ui::focus-to-open-message-link-window) (ui:tour-mode-link))) -(define-key "M-t a" #'open-gemini-links-and-ask-tour) +;; global keymap -(define-key "M-t t" #'next-tour-link) +(define-key "!" #'gemini-search) -(define-key "M-t s" #'show-tour-links) +(define-key ">" #'open-net-address) -(define-key "M-t S" #'shuffle-tour) +(define-key "?" #'print-quick-help) -(define-key "M-t c" #'clean-all-tour) +(define-key "C d" #'clear-cache) -(define-key "M-right" #'pass-focus-on-right) +(define-key "C-I" #'pass-focus-next) -(define-key "M-left" #'pass-focus-on-left) +(define-key "C-a" #'show-about-window) + +(define-key "C-h A" #'apropos-help-global) + +(define-key "C-h a" #'apropos-help) + +(define-key "C-h h" #'print-quick-help) + +(define-key "C-h m" #'open-manual) + +(define-key "C-q" #'quit) + +(define-key "M-c" #'open-chats-list-window) (define-key "M-down" #'pass-focus-on-bottom) -(define-key "M-up" #'pass-focus-on-top) +(define-key "M-e" #'eval-command) + +(define-key "M-g c i" #'import-gemini-certificate) + +(define-key "M-g c s" #'gemini-open-certificates-window) + +(define-key "M-g g b s" #'display-bookmark) + +(define-key "M-g g l" #'open-gempub-library) + +(define-key "M-g s o" #'gemini-open-gemlog-window) + +(define-key "M-g s r" #'gemlog-refresh-all) + +(define-key "M-g s t a" #'gemlog-add-unread-posts-tour) + +(define-key "M-l" #'load-script-file) + +(define-key "M-left" #'pass-focus-on-left) + +(define-key "M-right" #'pass-focus-on-right) (define-key "M-s l" #'message-window-lock-scrolling) (define-key "M-s u" #'message-window-unlock-scrolling) -(define-key "M-e" #'eval-command) +(define-key "M-t S" #'shuffle-tour) + +(define-key "M-t a" #'open-gemini-links-and-ask-tour) + +(define-key "M-t c" #'clean-all-tour) + +(define-key "M-t s" #'show-tour-links) + +(define-key "M-t t" #'next-tour-link) + +(define-key "M-up" #'pass-focus-on-top) + +(define-key "q" #'confirm-and-clean-close-program) -(define-key "M-l" #'load-script-file) ;; follow requests keymap -(define-key "up" #'follow-request-go-up *follow-requests-keymap*) - -(define-key "down" #'follow-request-go-down *follow-requests-keymap*) - -(define-key "k" #'follow-request-go-up *follow-requests-keymap*) - -(define-key "j" #'follow-request-go-down *follow-requests-keymap*) +(define-key "C-J" #'process-follow-requests *follow-requests-keymap*) (define-key "d" #'follow-request-delete *follow-requests-keymap*) -(define-key "C-J" #'process-follow-requests *follow-requests-keymap*) +(define-key "down" #'follow-request-go-down *follow-requests-keymap*) + +(define-key "j" #'follow-request-go-down *follow-requests-keymap*) + +(define-key "k" #'follow-request-go-up *follow-requests-keymap*) (define-key "q" #'cancel-follow-requests *follow-requests-keymap*) +(define-key "up" #'follow-request-go-up *follow-requests-keymap*) + ;; send message keymap -(define-key "up" #'attach-go-up *send-message-keymap*) - -(define-key "down" #'attach-go-down *send-message-keymap*) - -(define-key "k" #'attach-go-up *send-message-keymap*) - -(define-key "j" #'attach-go-down *send-message-keymap*) +(define-key "C-J" #'send-message *send-message-keymap*) (define-key "d" #'attach-delete *send-message-keymap*) -(define-key "s" #'change-subject *send-message-keymap*) +(define-key "down" #'attach-go-down *send-message-keymap*) + +(define-key "e" #'edit-message-body *send-message-keymap*) + +(define-key "j" #'attach-go-down *send-message-keymap*) + +(define-key "k" #'attach-go-up *send-message-keymap*) (define-key "m" #'change-mentions *send-message-keymap*) (define-key "q" #'cancel-send-message *send-message-keymap*) +(define-key "s" #'change-subject *send-message-keymap*) + +(define-key "up" #'attach-go-up *send-message-keymap*) + (define-key "v" #'change-visibility *send-message-keymap*) -(define-key "e" #'edit-message-body *send-message-keymap*) - -(define-key "C-J" #'send-message *send-message-keymap*) - ;; thread window keymap (defun print-post-id () @@ -262,90 +262,54 @@ (status-id (db:row-message-status-id selected-row))) (ui:info-message (format nil "ID: ~a" status-id)))) -(define-key "I" #'print-post-id *thread-keymap*) - -(define-key "s d" #'status-tree->text *thread-keymap*) - -(define-key "up" #'thread-go-up *thread-keymap*) - -(define-key "down" #'thread-go-down *thread-keymap*) - -(define-key "k" #'thread-go-up *thread-keymap*) - -(define-key "j" #'thread-go-down *thread-keymap*) - -(define-key "C-J" #'thread-open-selected-message *thread-keymap*) - -(define-key "dc" #'thread-mark-delete-selected-message *thread-keymap*) - -(define-key "U" #'thread-mark-prevent-delete-selected-message *thread-keymap*) - -(define-key "right" #'open-next *thread-keymap*) - -(define-key "left" #'open-previous *thread-keymap*) - -(define-key "d" #'delete-and-move-next *thread-keymap*) - -(define-key "M-u" #'delete-and-move-previous *thread-keymap*) - -(define-key "D" #'delete-post-using-regex *thread-keymap*) - -(define-key "g" #'thread-goto-message *thread-keymap*) - (define-key "/ b" #'thread-search-next-message-body *thread-keymap*) -(define-key "\\\\ b" #'thread-search-previous-message-body *thread-keymap*) - (define-key "/ m" #'thread-search-next-message-meta *thread-keymap*) -(define-key "\\\\ m" #'thread-search-previous-message-meta *thread-keymap*) +(define-key "C-J" #'thread-open-selected-message *thread-keymap*) -(define-key "N" #'repeat-search *thread-keymap*) +(define-key "C-X m b" #'boost-selected-status *thread-keymap*) -(define-key "n" #'thread-search-next-unread-message *thread-keymap*) +(define-key "C-X m f" #'favourite-selected-status *thread-keymap*) -(define-key "home" #'thread-goto-first-message *thread-keymap*) +(define-key "C-X m r b" #'unboost-selected-status *thread-keymap*) -(define-key "end" #'thread-goto-last-message *thread-keymap*) +(define-key "C-X m r f" #'unfavourite-selected-status *thread-keymap*) -(define-key "c" #'compose-message *thread-keymap*) +(define-key "C-X m s" #'subscribe-to-hash *thread-keymap*) -(define-key "r" #'reply-message *thread-keymap*) +(define-key "C-X m t" #'move-message-tree *thread-keymap*) -(define-key "x" #'refresh-thread *thread-keymap*) - -(define-key "X" #'refresh-thread-totally *thread-keymap*) - -(define-key "v" #'open-message-attach *thread-keymap*) - -(define-key "l" #'open-message-link *thread-keymap*) - -(define-key "P" #'poll-vote *thread-keymap*) - -(define-key "C-c u" #'update-conversations *thread-keymap*) - -(define-key "C-c o" #'open-conversation *thread-keymap*) +(define-key "C-X m u" #'unsubscribe-to-hash *thread-keymap*) (define-key "C-c c" #'change-conversation-name *thread-keymap*) +(define-key "C-c o" #'open-conversation *thread-keymap*) + +(define-key "C-c u" #'update-conversations *thread-keymap*) + (define-key "C-f c" #'change-folder *thread-keymap*) -(define-key "C-t c" #'change-timeline *thread-keymap*) - -(define-key "C-t u" #'update-current-timeline *thread-keymap*) - -(define-key "C-t U" #'update-current-timeline-backwards *thread-keymap*) - (define-key "C-t R" #'reset-timeline-pagination *thread-keymap*) +(define-key "C-t U" #'update-current-timeline-backwards *thread-keymap*) + +(define-key "C-t c" #'change-timeline *thread-keymap*) + (define-key "C-t h r" #'refresh-tags *thread-keymap*) -(define-key "C-u i" #'ignore-user *thread-keymap*) +(define-key "C-t u" #'update-current-timeline *thread-keymap*) -(define-key "C-u x" #'unignore-user *thread-keymap*) +(define-key "C-u c k g" #'crypto-generate-key *thread-keymap*) + +(define-key "C-u c k i" #'crypto-import-key *thread-keymap*) + +(define-key "C-u c k s" #'crypto-export-key *thread-keymap*) (define-key "C-u f" #'follow-user *thread-keymap*) +(define-key "C-u i" #'ignore-user *thread-keymap*) + (define-key "C-u r f" #'start-follow-request-processing *thread-keymap*) (define-key "C-u r r" #'report-status *thread-keymap*) @@ -354,263 +318,301 @@ (define-key "C-u v a" #'view-user-avatar *thread-keymap*) -(define-key "C-u c k i" #'crypto-import-key *thread-keymap*) +(define-key "C-u x" #'unignore-user *thread-keymap*) -(define-key "C-u c k s" #'crypto-export-key *thread-keymap*) +(define-key "D" #'delete-post-using-regex *thread-keymap*) -(define-key "C-u c k g" #'crypto-generate-key *thread-keymap*) - -(define-key "C-X m t" #'move-message-tree *thread-keymap*) - -(define-key "C-X m f" #'favourite-selected-status *thread-keymap*) - -(define-key "C-X m r f" #'unfavourite-selected-status *thread-keymap*) - -(define-key "C-X m b" #'boost-selected-status *thread-keymap*) - -(define-key "C-X m r b" #'unboost-selected-status *thread-keymap*) - -(define-key "C-X m s" #'subscribe-to-hash *thread-keymap*) - -(define-key "C-X m u" #'unsubscribe-to-hash *thread-keymap*) - -(define-key "|" #'send-message-to-pipe *thread-keymap*) +(define-key "I" #'print-post-id *thread-keymap*) (define-key "M" #'print-mentions *thread-keymap*) +(define-key "M-u" #'delete-and-move-previous *thread-keymap*) + (define-key "N d" #'delete-notifications *thread-keymap*) +(define-key "N" #'repeat-search *thread-keymap*) + +(define-key "P" #'poll-vote *thread-keymap*) + +(define-key "U" #'thread-mark-prevent-delete-selected-message *thread-keymap*) + +(define-key "X" #'refresh-thread-totally *thread-keymap*) + +(define-key "\\\\ b" #'thread-search-previous-message-body *thread-keymap*) + +(define-key "\\\\ m" #'thread-search-previous-message-meta *thread-keymap*) + +(define-key "c" #'compose-message *thread-keymap*) + +(define-key "d" #'delete-and-move-next *thread-keymap*) + +(define-key "dc" #'thread-mark-delete-selected-message *thread-keymap*) + +(define-key "down" #'thread-go-down *thread-keymap*) + +(define-key "end" #'thread-goto-last-message *thread-keymap*) + +(define-key "g" #'thread-goto-message *thread-keymap*) + +(define-key "home" #'thread-goto-first-message *thread-keymap*) + +(define-key "j" #'thread-go-down *thread-keymap*) + +(define-key "k" #'thread-go-up *thread-keymap*) + +(define-key "l" #'open-message-link *thread-keymap*) + +(define-key "left" #'open-previous *thread-keymap*) + +(define-key "n" #'thread-search-next-unread-message *thread-keymap*) + +(define-key "r" #'reply-message *thread-keymap*) + +(define-key "right" #'open-next *thread-keymap*) + +(define-key "s d" #'status-tree->text *thread-keymap*) + +(define-key "up" #'thread-go-up *thread-keymap*) + +(define-key "v" #'open-message-attach *thread-keymap*) + +(define-key "x" #'refresh-thread *thread-keymap*) + +(define-key "|" #'send-message-to-pipe *thread-keymap*) + + ;; message window keymap -(define-key "up" #'message-scroll-up *message-keymap*) +(define-key "/" #'message-search-regex *message-keymap*) + +(define-key "C-J" #'message-scroll-down *message-keymap*) + +(define-key "N" #'repeat-search *message-keymap*) + +(define-key "b" #'net-address-history-back *message-keymap*) (define-key "down" #'message-scroll-down *message-keymap*) -(define-key "k" #'message-scroll-up *message-keymap*) +(define-key "end" #'message-scroll-end *message-keymap*) + +(define-key "home" #'message-scroll-begin *message-keymap*) (define-key "j" #'message-scroll-down *message-keymap*) +(define-key "k" #'message-scroll-up *message-keymap*) + (define-key "l" #'message-extract-links *message-keymap*) (define-key "left" #'message-scroll-left *message-keymap*) -(define-key "right" #'message-scroll-right *message-keymap*) - -(define-key "C-J" #'message-scroll-down *message-keymap*) - -(define-key "home" #'message-scroll-begin *message-keymap*) - -(define-key "end" #'message-scroll-end *message-keymap*) - -(define-key "/" #'message-search-regex *message-keymap*) - -(define-key "N" #'repeat-search *message-keymap*) - (define-key "npage" #'message-scroll-next-page *message-keymap*) (define-key "ppage" #'message-scroll-previous-page *message-keymap*) -(define-key "|" #'send-to-pipe *message-keymap*) +(define-key "right" #'message-scroll-right *message-keymap*) -(define-key "b" #'net-address-history-back *message-keymap*) +(define-key "up" #'message-scroll-up *message-keymap*) + +(define-key "|" #'send-to-pipe *message-keymap*) ;; gemini viewer keymap -(define-key "up" #'message-scroll-up *gemini-message-keymap*) - -(define-key "down" #'message-scroll-down *gemini-message-keymap*) - -(define-key "k" #'message-scroll-up *gemini-message-keymap*) - -(define-key "j" #'message-scroll-down *gemini-message-keymap*) - -(define-key "left" #'message-scroll-left *gemini-message-keymap*) - -(define-key "right" #'message-scroll-right *gemini-message-keymap*) - -(define-key "C-J" #'message-scroll-down *gemini-message-keymap*) - -(define-key "home" #'message-scroll-begin *gemini-message-keymap*) - -(define-key "end" #'message-scroll-end *gemini-message-keymap*) - (define-key "/" #'message-search-regex *gemini-message-keymap*) -(define-key "N" #'repeat-search *gemini-message-keymap*) - -(define-key "npage" #'message-scroll-next-page *gemini-message-keymap*) - -(define-key "ppage" #'message-scroll-previous-page *gemini-message-keymap*) - -(define-key "l" #'open-message-link *gemini-message-keymap*) - -(define-key "b" #'net-address-history-back *gemini-message-keymap*) - (define-key "B" #'address-go-back-in-path *gemini-message-keymap*) -(define-key "R" #'address-go-root-path *gemini-message-keymap*) - -(define-key "C-b a" #'bookmark-gemini-page *gemini-message-keymap*) - -(define-key "C-b s" #'display-bookmark *gemini-message-keymap*) - -(define-key "C-b d" #'delete-gemini-bookmark *gemini-message-keymap*) - -(define-key "U" #'gemini-view-source *gemini-message-keymap*) - -(define-key "d" #'gemini-open-streams-window *gemini-message-keymap*) - -(define-key "c" #'gemini-open-certificates-window *gemini-message-keymap*) - -(define-key "r" #'gemini-refresh-page *gemini-message-keymap*) - -(define-key "s" #'gemini-subscribe-gemlog *gemini-message-keymap*) - -(define-key "p" #'message-toggle-preformatted-block *gemini-message-keymap*) - -(define-key "t" #'next-tour-link *gemini-message-keymap*) - -(define-key "O" #'open-gemini-toc *gemini-message-keymap*) - -(define-key "T" #'show-tour-links *gemini-message-keymap*) - -(define-key "|" #'send-to-pipe *gemini-message-keymap*) - -(define-key "]" #'open-next-visible-link *gemini-message-keymap*) - -(define-key "[" #'open-previous-link *gemini-message-keymap*) - -(define-key "C-]" #'go-to-next-link *gemini-message-keymap*) +(define-key "C-J" #'message-scroll-down *gemini-message-keymap*) (define-key "C-[" #'go-to-previous-link *gemini-message-keymap*) +(define-key "C-]" #'go-to-next-link *gemini-message-keymap*) + +(define-key "C-b a" #'bookmark-gemini-page *gemini-message-keymap*) + +(define-key "C-b d" #'delete-gemini-bookmark *gemini-message-keymap*) + +(define-key "C-b s" #'display-bookmark *gemini-message-keymap*) + (define-key "I M" #'gemini-images-montage *gemini-message-keymap*) +(define-key "N" #'repeat-search *gemini-message-keymap*) + +(define-key "O" #'open-gemini-toc *gemini-message-keymap*) + +(define-key "R" #'address-go-root-path *gemini-message-keymap*) + +(define-key "T" #'show-tour-links *gemini-message-keymap*) + +(define-key "U" #'gemini-view-source *gemini-message-keymap*) + +(define-key "[" #'open-previous-link *gemini-message-keymap*) + +(define-key "]" #'open-next-visible-link *gemini-message-keymap*) + +(define-key "b" #'net-address-history-back *gemini-message-keymap*) + +(define-key "c" #'gemini-open-certificates-window *gemini-message-keymap*) + +(define-key "d" #'gemini-open-streams-window *gemini-message-keymap*) + +(define-key "down" #'message-scroll-down *gemini-message-keymap*) + +(define-key "end" #'message-scroll-end *gemini-message-keymap*) + +(define-key "home" #'message-scroll-begin *gemini-message-keymap*) + +(define-key "j" #'message-scroll-down *gemini-message-keymap*) + +(define-key "k" #'message-scroll-up *gemini-message-keymap*) + +(define-key "l" #'open-message-link *gemini-message-keymap*) + +(define-key "left" #'message-scroll-left *gemini-message-keymap*) + +(define-key "npage" #'message-scroll-next-page *gemini-message-keymap*) + +(define-key "p" #'message-toggle-preformatted-block *gemini-message-keymap*) + +(define-key "ppage" #'message-scroll-previous-page *gemini-message-keymap*) + +(define-key "r" #'gemini-refresh-page *gemini-message-keymap*) + +(define-key "right" #'message-scroll-right *gemini-message-keymap*) + +(define-key "s" #'gemini-subscribe-gemlog *gemini-message-keymap*) + +(define-key "t" #'next-tour-link *gemini-message-keymap*) + +(define-key "up" #'message-scroll-up *gemini-message-keymap*) + +(define-key "|" #'send-to-pipe *gemini-message-keymap*) + + ;; gemini page table of contents keymap -(define-key "up" #'gemini-toc-scroll-up *gemini-toc-keymap*) - -(define-key "down" #'gemini-toc-scroll-down *gemini-toc-keymap*) - -(define-key "k" #'gemini-toc-scroll-up *gemini-toc-keymap*) - -(define-key "j" #'gemini-toc-scroll-down *gemini-toc-keymap*) - -(define-key "q" #'gemini-toc-close *gemini-toc-keymap*) - -(define-key "n" #'gemini-toc-scroll-down-page *gemini-toc-keymap*) +(define-key "/" #'gemini-toc-search *gemini-toc-keymap*) (define-key "C-J" #'gemini-toc-scroll-down-page *gemini-toc-keymap*) -(define-key "p" #'gemini-toc-scroll-up-page *gemini-toc-keymap*) +(define-key "N" #'repeat-search *gemini-toc-keymap*) -(define-key "home" #'gemini-toc-scroll-begin *gemini-toc-keymap*) +(define-key "down" #'gemini-toc-scroll-down *gemini-toc-keymap*) (define-key "end" #'gemini-toc-scroll-end *gemini-toc-keymap*) -(define-key "/" #'gemini-toc-search *gemini-toc-keymap*) +(define-key "home" #'gemini-toc-scroll-begin *gemini-toc-keymap*) -(define-key "N" #'repeat-search *gemini-toc-keymap*) +(define-key "j" #'gemini-toc-scroll-down *gemini-toc-keymap*) + +(define-key "k" #'gemini-toc-scroll-up *gemini-toc-keymap*) + +(define-key "n" #'gemini-toc-scroll-down-page *gemini-toc-keymap*) + +(define-key "p" #'gemini-toc-scroll-up-page *gemini-toc-keymap*) + +(define-key "q" #'gemini-toc-close *gemini-toc-keymap*) + +(define-key "up" #'gemini-toc-scroll-up *gemini-toc-keymap*) ;; gemini stream window keymap -(define-key "a" #'gemini-abort-download *gemini-downloads-keymap*) +(define-key "C-J" #'gemini-streams-window-open-stream *gemini-downloads-keymap*) -(define-key "up" #'gemini-streams-window-up *gemini-downloads-keymap*) +(define-key "a" #'gemini-abort-download *gemini-downloads-keymap*) (define-key "down" #'gemini-streams-window-down *gemini-downloads-keymap*) -(define-key "k" #'gemini-streams-window-up *gemini-downloads-keymap*) - (define-key "j" #'gemini-streams-window-down *gemini-downloads-keymap*) +(define-key "k" #'gemini-streams-window-up *gemini-downloads-keymap*) + (define-key "q" #'gemini-streams-window-close *gemini-downloads-keymap*) -(define-key "C-J" #'gemini-streams-window-open-stream *gemini-downloads-keymap*) +(define-key "up" #'gemini-streams-window-up *gemini-downloads-keymap*) ;; gemini certificates window keymap -(define-key "up" #'gemini-certificate-window-go-up *gemini-certificates-keymap*) - -(define-key "down" #'gemini-certificate-window-go-down *gemini-certificates-keymap*) - -(define-key "k" #'gemini-certificate-window-go-up *gemini-certificates-keymap*) - -(define-key "j" #'gemini-certificate-window-go-down *gemini-certificates-keymap*) - -(define-key "q" #'gemini-close-certificate-window *gemini-certificates-keymap*) +(define-key "C-J" #'gemini-certificate-information *gemini-certificates-keymap*) (define-key "d" #'gemini-delete-certificate *gemini-certificates-keymap*) -(define-key "C-J" #'gemini-certificate-information *gemini-certificates-keymap*) +(define-key "down" #'gemini-certificate-window-go-down *gemini-certificates-keymap*) + +(define-key "j" #'gemini-certificate-window-go-down *gemini-certificates-keymap*) + +(define-key "k" #'gemini-certificate-window-go-up *gemini-certificates-keymap*) + +(define-key "q" #'gemini-close-certificate-window *gemini-certificates-keymap*) + +(define-key "up" #'gemini-certificate-window-go-up *gemini-certificates-keymap*) ;; gemini subscription window (define-key "C-J" #'show-gemlog-to-screen *gemlog-subscription-keymap*) -(define-key "up" #'gemlogs-subscription-go-up *gemlog-subscription-keymap*) +(define-key "d" #'gemlog-cancel-subscription *gemlog-subscription-keymap*) (define-key "down" #'gemlogs-subscription-go-down *gemlog-subscription-keymap*) -(define-key "k" #'gemlogs-subscription-go-up *gemlog-subscription-keymap*) - (define-key "j" #'gemlogs-subscription-go-down *gemlog-subscription-keymap*) -(define-key "q" #'close-gemlog-window *gemlog-subscription-keymap*) - -(define-key "d" #'gemlog-cancel-subscription *gemlog-subscription-keymap*) +(define-key "k" #'gemlogs-subscription-go-up *gemlog-subscription-keymap*) (define-key "l" #'open-message-link *gemlog-subscription-keymap*) +(define-key "q" #'close-gemlog-window *gemlog-subscription-keymap*) + +(define-key "up" #'gemlogs-subscription-go-up *gemlog-subscription-keymap*) + ;; gempub library window keymap -(define-key "up" #'gempub-library-window-go-up *gempub-library-keymap*) - -(define-key "down" #'gempub-library-window-go-down *gempub-library-keymap*) - -(define-key "k" #'gempub-library-window-go-up *gempub-library-keymap*) - -(define-key "j" #'gempub-library-window-go-down *gempub-library-keymap*) - -(define-key "q" #'gempub-library-window-close *gempub-library-keymap*) - (define-key "C-J" #'gempub-open-file *gempub-library-keymap*) +(define-key "down" #'gempub-library-window-go-down *gempub-library-keymap*) + +(define-key "j" #'gempub-library-window-go-down *gempub-library-keymap*) + +(define-key "k" #'gempub-library-window-go-up *gempub-library-keymap*) + +(define-key "q" #'gempub-library-window-close *gempub-library-keymap*) + +(define-key "up" #'gempub-library-window-go-up *gempub-library-keymap*) + ;; tags keymap -(define-key "up" #'tag-go-up *tags-keymap*) - -(define-key "down" #'tag-go-down *tags-keymap*) - -(define-key "k" #'tag-go-up *tags-keymap*) - -(define-key "j" #'tag-go-down *tags-keymap*) - (define-key "C-J" #'open-tag-folder *tags-keymap*) (define-key "U" #'unsubscribe-to-hash *tags-keymap*) -(define-key "s" #'subscribe-to-hash *tags-keymap*) +(define-key "down" #'tag-go-down *tags-keymap*) + +(define-key "j" #'tag-go-down *tags-keymap*) + +(define-key "k" #'tag-go-up *tags-keymap*) (define-key "r" #'refresh-tags *tags-keymap*) -;; conversations keymap +(define-key "s" #'subscribe-to-hash *tags-keymap*) -(define-key "C-c c" #'change-conversation-name *conversations-keymap*) +(define-key "up" #'tag-go-up *tags-keymap*) + +;; conversations keymap (define-key "C-J" #'goto-conversation *conversations-keymap*) -(define-key "up" #'conversation-go-up *conversations-keymap*) +(define-key "C-c c" #'change-conversation-name *conversations-keymap*) -(define-key "down" #'conversation-go-down *conversations-keymap*) - -(define-key "k" #'conversation-go-up *conversations-keymap*) - -(define-key "j" #'conversation-go-down *conversations-keymap*) +(define-key "I" #'ignore-conversation *conversations-keymap*) (define-key "dc" #'delete-conversation *conversations-keymap*) -(define-key "I" #'ignore-conversation *conversations-keymap*) +(define-key "down" #'conversation-go-down *conversations-keymap*) + +(define-key "j" #'conversation-go-down *conversations-keymap*) + +(define-key "k" #'conversation-go-up *conversations-keymap*) + +(define-key "up" #'conversation-go-up *conversations-keymap*) ;; attachments keymap @@ -621,22 +623,22 @@ "Copy the selected link to clipboard" (copy-link-to-clipboard specials:*open-attach-window*)) -(define-key "C-c" #'copy-from-attach-window-to-clipboard *open-attach-keymap*) - (define-key "C-J" #'open-message-attach-perform-opening *open-attach-keymap*) +(define-key "C-c" #'copy-from-attach-window-to-clipboard *open-attach-keymap*) + (define-key "a" #'open-all-message-attachments *open-attach-keymap*) -(define-key "up" #'open-message-attach-go-up *open-attach-keymap*) - (define-key "down" #'open-message-attach-go-down *open-attach-keymap*) -(define-key "k" #'open-message-attach-go-up *open-attach-keymap*) - (define-key "j" #'open-message-attach-go-down *open-attach-keymap*) +(define-key "k" #'open-message-attach-go-up *open-attach-keymap*) + (define-key "q" #'close-open-attach-window *open-attach-keymap*) +(define-key "up" #'open-message-attach-go-up *open-attach-keymap*) + ;; message links keymap (define-key "C-J" #'open-message-link-perform-opening *open-message-link-keymap*) @@ -645,152 +647,152 @@ "Copy the selected link to clipboard" (copy-link-to-clipboard specials:*open-message-link-window*)) -(define-key "C-c" #'copy-from-message-link-to-clipboard *open-message-link-keymap*) - -(define-key "up" #'open-message-link-go-up *open-message-link-keymap*) - -(define-key "down" #'open-message-link-go-down *open-message-link-keymap*) - -(define-key "k" #'open-message-link-go-up *open-message-link-keymap*) - -(define-key "j" #'open-message-link-go-down *open-message-link-keymap*) - -(define-key "q" #'close-open-message-link-window *open-message-link-keymap*) - -(define-key "e" #'open-message-link-open-enqueue *open-message-link-keymap*) - (define-key "/" #'search-link-window *open-message-link-keymap*) +(define-key "C-c" #'copy-from-message-link-to-clipboard *open-message-link-keymap*) + (define-key "N" #'repeat-search *open-message-link-keymap*) -(define-key "t" #'tour-mode-link *open-message-link-keymap*) - (define-key "T" #'save-selected-message-in-tour *open-message-link-keymap*) -(define-key "home" #'open-message-link-window-scroll-begin *open-message-link-keymap*) - -(define-key "end" #'open-message-link-window-scroll-end *open-message-link-keymap*) - (define-key "]" #'gemini-jump-to-link *open-message-link-keymap*) +(define-key "down" #'open-message-link-go-down *open-message-link-keymap*) + +(define-key "e" #'open-message-link-open-enqueue *open-message-link-keymap*) + +(define-key "end" #'open-message-link-window-scroll-end *open-message-link-keymap*) + +(define-key "home" #'open-message-link-window-scroll-begin *open-message-link-keymap*) + +(define-key "j" #'open-message-link-go-down *open-message-link-keymap*) + +(define-key "k" #'open-message-link-go-up *open-message-link-keymap*) + +(define-key "q" #'close-open-message-link-window *open-message-link-keymap*) + +(define-key "t" #'tour-mode-link *open-message-link-keymap*) + +(define-key "up" #'open-message-link-go-up *open-message-link-keymap*) + ;; chats list window -(define-key "r" #'refresh-chat-messages *chats-list-keymap*) - -(define-key "R" #'refresh-chats *chats-list-keymap*) - -(define-key "q" #'close-chats-list-window *chats-list-keymap*) - (define-key "C-J" #'show-chat-to-screen *chats-list-keymap*) -(define-key "l" #'change-chat-label *chats-list-keymap*) +(define-key "R" #'refresh-chats *chats-list-keymap*) (define-key "c" #'chat-create-new *chats-list-keymap*) -(define-key "up" #'chat-list-go-up *chats-list-keymap*) - (define-key "down" #'chat-list-go-down *chats-list-keymap*) +(define-key "j" #'chat-list-go-down *chats-list-keymap*) + (define-key "k" #'chat-list-go-up *chats-list-keymap*) -(define-key "j" #'chat-list-go-down *chats-list-keymap*) +(define-key "l" #'change-chat-label *chats-list-keymap*) + +(define-key "q" #'close-chats-list-window *chats-list-keymap*) + +(define-key "r" #'refresh-chat-messages *chats-list-keymap*) + +(define-key "up" #'chat-list-go-up *chats-list-keymap*) ;; chat window (defun write-to-chat () (chat-loop (message-window:metadata specials:*message-window*))) +(define-key "/" #'message-search-regex *chat-message-keymap*) + (define-key "M-c" #'write-to-chat *chat-message-keymap*) -(define-key "up" #'message-scroll-up *chat-message-keymap*) +(define-key "a" #'open-chat-link-window *chat-message-keymap*) (define-key "down" #'message-scroll-down *chat-message-keymap*) -(define-key "k" #'message-scroll-up *chat-message-keymap*) - -(define-key "j" #'message-scroll-down *chat-message-keymap*) +(define-key "end" #'message-scroll-end *chat-message-keymap*) (define-key "home" #'message-scroll-begin *chat-message-keymap*) -(define-key "end" #'message-scroll-end *chat-message-keymap*) +(define-key "j" #'message-scroll-down *chat-message-keymap*) -(define-key "/" #'message-search-regex *chat-message-keymap*) +(define-key "k" #'message-scroll-up *chat-message-keymap*) (define-key "npage" #'message-scroll-next-page *chat-message-keymap*) (define-key "ppage" #'message-scroll-previous-page *chat-message-keymap*) -(define-key "a" #'open-chat-link-window *chat-message-keymap*) +(define-key "up" #'message-scroll-up *chat-message-keymap*) ;; file explorer -(define-key "x" #'file-explorer-expand-path *filesystem-explorer-keymap*) +(define-key "/" #'file-explorer-search *filesystem-explorer-keymap*) -(define-key "c" #'file-explorer-close-path *filesystem-explorer-keymap*) - -(define-key "r" #'file-explorer-rename-path *filesystem-explorer-keymap*) +(define-key "C-J" #'file-explorer-open-node *filesystem-explorer-keymap*) (define-key "D" #'file-explorer-delete-tree *filesystem-explorer-keymap*) +(define-key "M d" #'file-explorer-download-mirror *filesystem-explorer-keymap*) + +(define-key "M u" #'file-explorer-upload-mirror *filesystem-explorer-keymap*) + +(define-key "M-m" #'file-explorer-mark-by-regexp *filesystem-explorer-keymap*) + +(define-key "N" #'repeat-search *filesystem-explorer-keymap*) + (define-key "X" #'file-explorer-delete-marked *filesystem-explorer-keymap*) (define-key "a" #'file-explorer-create-path *filesystem-explorer-keymap*) +(define-key "c" #'file-explorer-close-path *filesystem-explorer-keymap*) + (define-key "d" #'file-explorer-download-path *filesystem-explorer-keymap*) -(define-key "u" #'file-explorer-upload-path *filesystem-explorer-keymap*) - -(define-key "/" #'file-explorer-search *filesystem-explorer-keymap*) - -(define-key "N" #'repeat-search *filesystem-explorer-keymap*) - -(define-key "m" #'file-explorer-mark-entry *filesystem-explorer-keymap*) - -(define-key "M-m" #'file-explorer-mark-by-regexp *filesystem-explorer-keymap*) - -(define-key "up" #'file-explorer-go-up *filesystem-explorer-keymap*) - (define-key "down" #'file-explorer-go-down *filesystem-explorer-keymap*) -(define-key "k" #'file-explorer-go-up *filesystem-explorer-keymap*) - -(define-key "j" #'file-explorer-go-down *filesystem-explorer-keymap*) - -(define-key "home" #'file-explorer-scroll-begin *filesystem-explorer-keymap*) +(define-key "e" #'file-explorer-edit-file *filesystem-explorer-keymap*) (define-key "end" #'file-explorer-scroll-end *filesystem-explorer-keymap*) -(define-key "q" #'file-explorer-close-window *filesystem-explorer-keymap*) - -(define-key "C-J" #'file-explorer-open-node *filesystem-explorer-keymap*) - -(define-key "e" #'file-explorer-edit-file *filesystem-explorer-keymap*) +(define-key "home" #'file-explorer-scroll-begin *filesystem-explorer-keymap*) (define-key "i" #'file-explorer-node-details *filesystem-explorer-keymap*) -(define-key "M u" #'file-explorer-upload-mirror *filesystem-explorer-keymap*) +(define-key "j" #'file-explorer-go-down *filesystem-explorer-keymap*) -(define-key "M d" #'file-explorer-download-mirror *filesystem-explorer-keymap*) +(define-key "k" #'file-explorer-go-up *filesystem-explorer-keymap*) + +(define-key "m" #'file-explorer-mark-entry *filesystem-explorer-keymap*) + +(define-key "q" #'file-explorer-close-window *filesystem-explorer-keymap*) + +(define-key "r" #'file-explorer-rename-path *filesystem-explorer-keymap*) + +(define-key "u" #'file-explorer-upload-path *filesystem-explorer-keymap*) + +(define-key "up" #'file-explorer-go-up *filesystem-explorer-keymap*) + +(define-key "x" #'file-explorer-expand-path *filesystem-explorer-keymap*) ;; gopher viewer keymap -(define-key "up" #'gopher-window:go-to-previous-link *gopher-keymap*) - -(define-key "down" #'gopher-window:go-to-next-link *gopher-keymap*) - -(define-key "k" #'gopher-window:go-to-previous-link *gopher-keymap*) - -(define-key "j" #'gopher-window:go-to-next-link *gopher-keymap*) - (define-key "C-J" #'gopher-window:open-menu-link *gopher-keymap*) -(define-key "b" #'net-address-history-back *gopher-keymap*) - (define-key "C-b a" #'bookmark-gopher-page *gopher-keymap*) +(define-key "C-b d" #'delete-gemini-bookmark *gopher-keymap*) + (define-key "C-b s" #'display-bookmark *gopher-keymap*) -(define-key "C-b d" #'delete-gemini-bookmark *gopher-keymap*) +(define-key "b" #'net-address-history-back *gopher-keymap*) + +(define-key "down" #'gopher-window:go-to-next-link *gopher-keymap*) + +(define-key "j" #'gopher-window:go-to-next-link *gopher-keymap*) + +(define-key "k" #'gopher-window:go-to-previous-link *gopher-keymap*) + +(define-key "up" #'gopher-window:go-to-previous-link *gopher-keymap*) ;;;; hooks