# Ctrl  : C-, ^
# Escape: ESC-, M-, ^[
# Space : SPC, ' '
# Tab   : TAB, ^i, ^I
# Delete: DEL, ^?
# Up    : UP, ^[[A
# Down  : DOWN, ^[[B
# Right : RIGHT, ^[[C
# Left  : LEFT, ^[[D

# Marks {{{

# The most important
keymap m    MARK
keymap .    NEXT_MARK
keymap ,    PREV_MARK
# Mark all search terms
keymap \"   REG_MARK
# Mark URL-like strings as anchors
keymap  :   NULL
keymap ";"  MARK_URL
# Mark current word as URL
keymap M-";"  MARK_WORD
keymap M-:  MARK_MID

# }}}
# Navigation, links, tabs {{{

# Scroll screen up one line
keymap C-e  UP
keymap J    UP
# Scroll screen down one line
keymap K    DOWN
keymap C-y  DOWN
# Scroll screen left
keymap M-,  LEFT
# Scroll screen right
keymap M-.  RIGHT

# Movement across the page
keymap h    MOVE_LEFT
keymap C-p  MOVE_UP
keymap k    MOVE_UP
keymap C-n  MOVE_DOWN
keymap j    MOVE_DOWN
keymap l    MOVE_RIGHT
keymap M-<  SHIFT_LEFT
keymap M->  SHIFT_RIGHT
keymap b    PREV_WORD
keymap w    NEXT_WORD

# Various ways to to proceed page by page
keymap =    NEXT_PAGE
keymap +    NEXT_PAGE
keymap C-d  NEXT_PAGE
keymap SPC  NEXT_PAGE
keymap DOWN NEXT_PAGE
keymap -    PREV_PAGE
keymap C-u  PREV_PAGE
keymap UP   PREV_PAGE

keymap TAB  NEXT_LINK
keymap M-TAB PREV_LINK

# First link on page
keymap [    LINK_BEGIN
# Last link
keymap ]    LINK_END

keymap C-a  LINE_BEGIN
keymap 0    LINE_BEGIN
keymap \^   LINE_BEGIN
keymap $    LINE_END

# Top of page
keymap g    NULL
keymap gg   BEGIN
# Bottom of page
keymap G    END
# Undo last movement/jump across the page
keymap (    UNDO
# Redo the same
keymap )    REDO
keymap M-g  GOTO_LINE
keymap Z    CENTER_H
keymap z    CENTER_V

# }}}
# Search {{{

# Incremental search
keymap C-r  ISEARCH_BACK
keymap C-s  ISEARCH

# Regular search
keymap /    SEARCH
keymap ?    SEARCH_BACK
keymap N    SEARCH_PREV
keymap n    SEARCH_NEXT

# }}}
# Tab operations {{{

keymap {        PREV_TAB
keymap DEL      PREV_TAB
keymap }        NEXT_TAB

# Move tabs around
keymap M-{      TAB_LEFT
keymap M-}      TAB_RIGHT

keymap C-q      CLOSE_TAB
keymap C-w      CLOSE_TAB
keymap C-t      NEW_TAB
keymap M-t      TAB_MENU

# }}}
# Links {{{

# Open link in new tab
keymap t    TAB_LINK
keymap T    TAB_LINK

keymap a    SAVE_LINK

# Open current link in ext browser (application) defined in the config file
keymap o    EXTERN_LINK
keymap M-M  EXTERN_LINK

# Custom EXTERN/EXTERN_LINK commands
# https://github.com/gotbletu/shownotes/blob/master/w3m_extern_link.md
# Also see https://github.com/gotbletu/dotfiles_v2 for some of the below CGIs

# yank url to multiple clipboard
keymap  yy EXTERN_LINK   "url=%s ; printf "%b" "$url" | xsel -b ; printf "%b" "$url" | tmux load-buffer -"
keymap  YY EXTERN        "url=%s ; printf "%b" "$url" | xsel -b ; printf "%b" "$url" | tmux load-buffer -"

keymap  xa EXTERN        "~/.w3m/cgi-bin/save_bookmark_surfraw.cgi"
keymap  xB COMMAND       "EXTERN ~/.w3m/cgi-bin/fzf_bookmarks_surfraw.cgi; GOTO file:/cgi-bin/goto_tmux_clipboard.cgi"
keymap  xb COMMAND       "EXTERN ~/.w3m/cgi-bin/fzf_bookmarks_w3m.cgi; GOTO file:/cgi-bin/goto_tmux_clipboard.cgi"
# queue download, external media player (queued), etc
keymap  xc EXTERN_LINK   'NQDIR=$XDG_CACHE_HOME/w3m_queue nq curl -s --output-dir ~/Downloads -O'
keymap  xd EXTERN_LINK   'NQDIR=$XDG_CACHE_HOME/w3m_queue nq wget -q -c -P ~/Downloads'
# Requires config option ext_image_viewer 0
keymap  xi EXTERN_LINK   'w3m -o display_image=1 -o imgdisplay=w3mimgdisplay'
keymap  xm EXTERN_LINK   "NQDIR=$XDG_CACHE_HOME/mpv_queue nq mpv --quiet --ytdl-format='bestvideo[height<=480]+bestaudio/best[height<=480]' >/dev/null 2>&1"

# The surfraw engine too slow on Termux and not useful in common workflow
#keymap  xf COMMAND       "SHELL ~/.w3m/cgi-bin/fzf_surfraw_tmux.cgi; GOTO file:/cgi-bin/goto_tmux_clipboard.cgi"

# queue-monitoring
keymap  xs SHELL         'watch NQDIR=$XDG_CACHE_HOME/w3m_queue fq -anq \| tail'
keymap  xS SHELL         'watch NQDIR=$XDG_CACHE_HOME/mpv_queue fq -anq \| tail'

# Display the link url
keymap u    PEEK_LINK
# menu of links
keymap M-l  LIST_MENU
# Another link list
keymap L    LIST
# jump to link in page (same as LIST_MENU?)
keymap M-M  MOVE_LIST_MENU

# }}}
# Buffer operations {{{

# Previous buffer, close current
keymap B    BACK
# Navigate back without deleting current buffer
keymap <        PREV
keymap LEFT     PREV
# Navigate forward without deleting current buffer
keymap >        NEXT
keymap RIGHT    NEXT
# Display current buffer URL
keymap c    PEEK
# Pop-up menu with open buffers
keymap s    SELECT_MENU
# Open current buffer in an external browser (app)
keymap O    EXTERN
# Open new URL
keymap U    GOTO
keymap M-u  GOTO_RELATIVE
# Open local file
keymap V    LOAD
keymap :e   LOAD

# edit buffer (the textual rendering, not the html source) in VIM (or editor)
keymap M-e  EDIT_SCREEN
# Edit source in VIM (or editor)
keymap E    EDIT

keymap |    PIPE_BUF

# Save buffer
keymap S    SAVE_SCREEN
# Save html (source)
keymap M-s  SAVE
keymap :w   SAVE

keymap C-l  REDRAW

# Reload source URL
keymap R    RELOAD

# View source
keymap v    VIEW

# }}}
# Image operations {{{
# See /usr/share/doc/w3m/README.img
# Hover over image placeholder to view externally
keymap I    VIEW_IMAGE

keymap M-I  SAVE_IMAGE
# Peek at image URL while hovered over placeholder
keymap i    PEEK_IMG

# }}}
# Misc {{{

keymap gM   MAIN_MENU

# Trigger input field submit action
keymap C-c  SUBMIT
# Current line #, total lines, cols, etc
keymap C-g  LINE_INFO
# Browsing history
keymap C-h  HISTORY
#keymap C-k COOKIE
# Options page
keymap C-o  OPTIONS
# Reload config options
keymap M-r  REINIT
keymap M-o  SET_OPTION
keymap C-z  SUSPEND
keymap !    SHELL
keymap #    PIPE_SHELL
keymap @    READ_SHELL
# page info, including the response HTTP header
keymap M-+  INFO
keymap D    DOWNLOAD_LIST
# Toggle frames
keymap F    FRAME
# View the key mappings (with w3m descriptions), including the possible unassigned commands
keymap H    HELP
keymap M-m  MOUSE_TOGGLE
keymap ZZ   QUIT
keymap q    QUIT
keymap Q    NULL
keymap ZQ   EXIT
keymap r    VERSION

# Optionally configurable menu (~/.w3m/menu)
keymap M    MENU

keymap M-a ADD_BOOKMARK
# Bookmark page
keymap M-b BOOKMARK
# Run internal command
keymap :: COMMAND
keymap M-c COMMAND
keymap M-k DEFINE_KEY
# Invoke the external dictionary with input word
keymap M-w DICT_WORD
# Invoke the dictionary with word under cursor
keymap M-W DICT_WORD_AT

keymap W WRAP_TOGGLE
# }}}
# User-defined bindings {{{
keymap  :b       SHELL "$EDITOR ~/.config/surfraw/bookmarks"
keymap  :c       SHELL "$EDITOR ~/.w3m/config"
keymap  :k       SHELL "$EDITOR ~/.w3m/keymap"
keymap  :u       SHELL "$EDITOR ~/.w3m/urimethodmap"
# }}}
# Scripts/cgi-bin {{{
keymap pp GOTO file:/cgi-bin/goto_clipboard.cgi
keymap pt GOTO file:/cgi-bin/goto_tmux_clipboard.cgi
# }}}
# Macros {{{

# strip out extra 'pre-content' on CMS-rich or wordpress sites with id="content" tag
#keymap  M-7        COMMAND "VIEW; PIPE_BUF \"sed -n '1,/<body/p; /id=\\\"content\\\"/,$p'\" VIEW"

# Thanks to gotbletu for revealing the possibility of 2+ stroke combinations
#   https://github.com/gotbletu/shownotes/blob/master/w3m_macros.md

# Proceed straight to these user-defined commands in the help page
keymap M-?  COMMAND "HELP; SEARCH ^User-Defined; NEXT_PAGE; CENTER_V"
keymap \\\? COMMAND "HELP; SEARCH ^User-Defined; NEXT_PAGE; CENTER_V"
# Treat URL strings as links
keymap \\\u COMMAND "SET_OPTION mark_all_pages=toggle ; RELOAD"
# Hinting mode for links: proceed with <link number> + [
keymap \\\h COMMAND "SET_OPTION display_link_number=toggle ; RESHAPE"
# Hinting mode for lines: proceed with <line number> + g
keymap \\\l COMMAND "SET_OPTION show_lnum=toggle ; RESHAPE"
keymap \\\t COMMAND "SET_OPTION display_borders=toggle ; RESHAPE"
keymap \\\i COMMAND "SET_OPTION display_image=toggle ; RELOAD"
keymap \\\e COMMAND "SET_OPTION user_agent='' ; RELOAD"
keymap \\\A COMMAND "SET_OPTION user_agent='Opera/9.80 (S60; SymbOS; Opera Mobi/SYB-1107071606; U; en) Presto/2.8.149 Version/11.10' ; RELOAD"
# Open search engine, proceed to and select the search box
keymap M-/ COMMAND  "GOTO https://duckduckgo.com/lite/; NEXT_LINK; GOTO_LINK"
keymap \\\s COMMAND "GOTO https://duckduckgo.com/lite/; NEXT_LINK; GOTO_LINK"
keymap \\\g COMMAND "GOTO https://google.com; GOTO_LINE 6; NEXT_LINK; GOTO_LINK"
keymap \\\w GOTO http://wttr.in/?lang=fr&m
# Pipe to an external table-to-csv converter, then edit the rendered buffer
keymap \\\T COMMAND "VIEW; PIPE_BUF tabletocsv; EDIT_SCREEN"
keymap \\\L COMMAND "PIPE_BUF linkgrabber; BACK; REDRAW"
# Open add-bookmark dialogue, editing bookmark title
keymap \\\b COMMAND "ADD_BOOKMARK; LINK_END; PREV_LINK; GOTO_LINK"
# Pass the page through the readability (readability-cli) plugin
#   reqs: https://aur.archlinux.org/readability-cli.git, nodejs > 12
keymap \\\r COMMAND "READ_SHELL 'readable $W3M_URL -p html-title,html-content > /tmp/readable.html' ; LOAD /tmp/readable.html; DELETE_PREVBUF"

# }}}
# Mouse Ops {{{

keymap M-[E     MENU
keymap M-[L     MENU
keymap M-[Z     PREV_LINK

keymap M-[1~    BEGIN
keymap M-[2~    MENU
keymap M-[4~    END
keymap M-[5~    PREV_PAGE
keymap M-[6~    NEXT_PAGE
keymap M-[28~   MENU

# }}}
