|
|
- /* A library to output the right key shortcut in any common app.
- Given a global variable babble_mode to show the environment and a
- key that calls the paste macro, do the right type of paste.
-
- Setting the bable_mode is done by another macro, or TBD interaction with the host.
-
- Huge thanks to https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts
- and jeebak & algernon's keymap
- */
-
- #pragma once
- #include "quantum.h"
-
- #ifdef USE_BABBLEPASTE
-
- void set_babble_mode(uint8_t id);
- void babble_mode_increment(void);
- void babble_mode_decrement(void);
- void babble_modeswitch_user(uint8_t mode);
- void babble_modeswitch_kb(uint8_t mode);
-
- // manually re-order these if you want to set the order or default.
- enum babble_modes {
- # ifdef BABL_MAC
- BABL_MAC_MODE,
- # endif
- # ifdef BABL_READMUX
- BABL_READMUX_MODE,
- # endif
- # ifdef BABL_WINDOWS
- BABL_WINDOWS_MODE,
- # endif
- # ifdef BABL_VI
- BABL_VI_MODE,
- # endif
- # ifdef BABL_EMACS
- BABL_EMACS_MODE,
- # endif
- # ifdef BABL_NANO
- BABL_NANO_MODE,
- # endif
- # ifdef BABL_KITTY
- BABL_KITTY_MODE,
- # endif
- # ifdef BABL_CHROMEOS
- BABL_CHROMEOS_MODE,
- # endif
- # ifdef BABL_LINUX
- BABL_LINUX_MODE,
- # endif
- BABL_MODEMAX
- };
-
-
- /// Hacks to make it easier to create sendstring macros
-
- //"outer" versions wrap text
- # define OMCTL(arg) SS_DOWN(X_LCTRL) arg SS_UP(X_LCTRL)
- # define OMGUI(arg) SS_DOWN(X_LGUI) arg SS_UP(X_LGUI)
- # define OMALT(arg) SS_DOWN(X_LALT) arg SS_UP(X_LALT)
- # define OMSFT(...) SS_DOWN(X_LSHIFT) __VA_ARGS__ SS_UP(X_LSHIFT)
- //"inner" versions wrap a key tap
- # define IMCTL(arg) SS_DOWN(X_LCTRL) SS_TAP(arg) SS_UP(X_LCTRL)
- # define IMGUI(arg) SS_DOWN(X_LGUI) SS_TAP(arg) SS_UP(X_LGUI)
- # define IMALT(arg) SS_DOWN(X_LALT) SS_TAP(arg) SS_UP(X_LALT)
- # define IMSFT(arg) SS_DOWN(X_LSHIFT) SS_TAP(arg) SS_UP(X_LSHIFT)
-
- # define BABLM(ent, ...) \
- if (ent == keycode) { \
- SEND_STRING(__VA_ARGS__); \
- return true; \
- }
-
- // BabblePaste should be loaded first (header in userspace .h file, before all else)
- // if not,we'll do our best.
- # if defined(NEW_SAFE_RANGE)
- # define BABBLE_START NEW_SAFE_RANGE
- # else
- # if defined(KEYMAP_SAFE_RANGE)
- # define BABBLE_START KEYMAP_SAFE_RANGE
- # else
- # define BABBLE_START SAFE_RANGE
- # endif
- # endif
-
- enum babble_keycodes {
- FIRST = BABBLE_START,
- BABL_MODE_INCREMENT,
- BABL_MODE_DECREMENT,
- # ifdef BABL_MODSWAP
- BABL_PRIMARY_OS_MOD,
- BABL_SECONDARY_OS_MOD,
- BABL_TERTIARY_OS_MOD,
- # endif
- # ifdef BABL_MOVE
- // Movement macros
- // left & right
- BABL_GO_LEFT_1C,
- BABL_GO_RIGHT_1C,
- BABL_GO_LEFT_WORD,
- BABL_GO_RIGHT_WORD,
- BABL_GO_START_LINE,
- BABL_GO_END_LINE,
- // now up & down
- BABL_GO_START_DOC,
- BABL_GO_END_DOC,
- BABL_GO_NEXT_LINE,
- BABL_GO_PREV_LINE,
- BABL_GO_PARA_START,
- BABL_GO_PARA_END,
- BABL_PGDN,
- BABL_PGUP,
- // And the delete options
- BABL_DEL_LEFT_1C, // == backspace, so why bother?
- BABL_DEL_RIGHT_1C, // usually = Del
- BABL_DEL_LEFT_WORD,
- BABL_DEL_RIGHT_WORD,
- BABL_DEL_TO_LINE_END, // delete from cursor to end of line
- BABL_DEL_TO_LINE_START, // delete from cursor to begining line
- BABL_MODE, // print out string saying what mode we're in.
- # endif
- # ifdef BABL_OSKEYS
- BABL_UNDO,
- BABL_REDO,
- BABL_CUT,
- BABL_COPY,
- BABL_PASTE,
- BABL_SELECT_ALL,
- /* not yet implemented
- BABL_SWAP_LAST2C, // swap last characters before the cursor
- BABL_SWAP_LAST2W, // Swap the last two words before the cursor
- */
- // find & replace
- BABL_FIND,
- BABL_FIND_NEXT,
- BABL_FIND_PREV,
- BABL_FIND_REPLACE,
- // GUI or app
- BABL_RUNAPP,
- BABL_SWITCH_APP_NEXT,
- BABL_SWITCH_APP_LAST, // previous
- BABL_WINDOW_NEXT,
- BABL_WINDOW_PREV,
- BABL_WINDOW_NEW,
- BABL_CLOSE_APP,
- BABL_HELP,
- BABL_LOCK,
- BABL_SCREENCAPTURE,
- BABL_SWITCH_KEYBOARD_LAYOUT,
- # endif
- # ifdef BABL_BROWSER
- BABL_BROWSER_NEW_TAB,
- BABL_BROWSER_CLOSE_TAB,
- BABL_BROWSER_REOPEN_LAST_TAB,
- BABL_BROWSER_NEXT_TAB,
- BABL_BROWSER_PREV_TAB,
- BABL_BROWSER_URL_BAR,
- BABL_BROWSER_FORWARD,
- BABL_BROWSER_BACK,
- BABL_BROWSER_FIND,
- BABL_BROWSER_BOOKMARK,
- BABL_BROWSER_DEV_TOOLS, // hard one to remember
- BABL_BROWSER_RELOAD,
- BABL_BROWSER_FULLSCREEN,
- BABL_BROWSER_ZOOM_IN,
- BABL_BROWSER_ZOOM_OUT,
- BABL_BROWSER_VIEWSRC,
- # endif
- # ifdef BABL_APP
- BABL_APP_SAVE, // save file blurs app & os. Move?
- BABL_APP_PASTE_VALUES, // paste only values, or with some special formatting. ctrl shift v chrome, // Ctrl+Alt+V, excel
- // App hotkeys will be flawed, since you may use different spreadsheets across OSes.
- # ifdef BABL_APP_CELLS // spreadsheets and tables
- BABL_APP_CENTER_ALIGN, // Center align contents of a cell in table or spreadsheet.
- BABL_APP_CLEAR_FORMATTING, //
- BABL_APP_SCROLL_ACTIVE_CELL, // scroll to active cell.
- BABL_NEWLINE_IN_CELL, // newline inside cell of table,
- BABL_INSERT_COMMENT, // insert comment
- BABL_INSERT_COL_LEFT, // insert columns to the left
- BABL_INSERT_ROW, // insert row
- BABL_DELETE_ROW, // delete row // excel ctrl minus // chrome ctrl alt minus
- BABL_SELECT_COL, // select column - ctrl space //same in both
- BABL_SELECT_ROW, // select row shift spaced // same in both.
- # endif // BABL_APP_CELLS
- # ifdef BABL_APP_EDITOR
- BABL_APP_MULTI_SELECT, /* www.sublimetext.com/docs/2/multiple_selection_with_the_keyboard.html */
- BABL_APP_SET_MARK, // set editor mark
- # endif // BABL_APP_EDITOR
- # ifdef BABL_APP_WINDOWSPLITTING
- // These aren't useful on most oses.
- BABL_SPLIT_FRAME_VERT,
- BABL_UNSPLIT_FRAME_VERT,
- BABL_SPLIT_FRAME_HORIZONTAL,
- BABL_UNSPLIT_FRAME_HORIZONTAL,
- BABL_NEXT_FRAME,
- BABL_PREV_FRAME,
- # endif
-
- # endif
-
- // Macros for mode switching
- # ifdef BABL_WINDOWS
- BABL_DO_WINDOWS,
- # endif
- # ifdef BABL_MAC
- BABL_DO_MAC,
- # endif
- # ifdef BABL_LINUX
- BABL_DO_LINUX,
- # endif
- # ifdef BABL_EMACS
- BABL_DO_EMACS,
- # endif
- # ifdef BABL_NANO
- BABL_DO_NANO,
- # endif
- # ifdef BABL_KITTY
- BABL_DO_KITTY,
- # endif
- # ifdef BABL_VI
- BABL_DO_VI,
- # endif
- # ifdef BABL_READMUX
- BABL_DO_READMUX,
- # endif
- # ifdef BABL_CHROMEOS
- BABL_DO_CHROMEOS,
- # endif
- BABBLE_END_RANGE
- };
-
- // primary function.
- bool babblePaste(uint16_t keycode, bool is_pressed);
-
- /****************************************************/
- /* All per-os includes and short mode switch macros*/
- # ifdef BABL_WINDOWS
- # define B_WIN BABL_DO_WINDOWS
- bool babblePaste_win(uint16_t keycode);
- # endif
- # ifdef BABL_MAC
- # define B_MAC BABL_DO_MAC
- bool babblePaste_mac(uint16_t keycode);
- # endif
- # ifdef BABL_LINUX
- # define B_LINUX BABL_DO_LINUX
- bool babblePaste_linux(uint16_t keycode);
- # endif
- # ifdef BABL_EMACS
- # define B_EMACS BABL_DO_EMACS
- bool babblePaste_emacs(uint16_t keycode);
- # endif
- # ifdef BABL_NANO
- # define B_NANO BABL_DO_NANO
- bool babblePaste_nano(uint16_t keycode);
- # endif
- # ifdef BABL_KITTY
- # define B_KITTY BABL_DO_KITTY
- bool babblePaste_kitty(uint16_t keycode);
- # endif
- # ifdef BABL_VI
- # define B_VI BABL_DO_VI
- bool babblePaste_vi(uint16_t keycode);
- # endif
- # ifdef BABL_READMUX
- # define B_READ BABL_DO_READMUX
- bool babblePaste_readmux(uint16_t keycode);
- # endif
- # ifdef BABL_CHROMEOS
- # define B_CROM BABL_DO_CHROMEOS
- bool babblePaste_chromeos(uint16_t keycode);
- # endif
-
-
- /****************************************************
- ** All keyboard macros for Babble Actions
- *****************************************************/
- # define B_INC BABL_MODE_INCREMENT
- # define B_DEC BABL_MODE_DECREMENT
- # ifdef BABL_MODSWAP
- # define B_1ME BABL_PRIMARY_OS_MOD
- # define B_2ME BABL_SECONDARY_OS_MOD
- # define B_3ME BABL_TERTIARY_OS_MOD
- # endif
-
- # ifdef BABL_MOVE
- # define B_L1C BABL_GO_LEFT_1C
- # define B_R1C BABL_GO_RIGHT_1C
- # define B_L1W BABL_GO_LEFT_WORD
- # define B_R1W BABL_GO_RIGHT_WORD
- # define B_GSOL BABL_GO_START_LINE
- # define B_GEOL BABL_GO_END_LINE
- # define B_GTOP BABL_GO_START_DOC
- # define B_GEND BABL_GO_END_DOC
- # define B_DOWN BABL_GO_NEXT_LINE
- # define B_UP BABL_GO_PREV_LINE
- # define B_PTOP BABL_GO_PARA_START
- # define B_PEND BABL_GO_PARA_END
- # define B_PGDN BABL_PGDN
- # define B_PGUP BABL_PGUP
- //#define B_BKSP BABL_DEL_LEFT_1C == backspace so why bother.
- # define B_DEL BABL_DEL_RIGHT_1C // usually = Del
- # define B_DLW BABL_DEL_LEFT_WORD
- # define B_DRW BABL_DEL_RIGHT_WORD
- # define B_DEOL BABL_DEL_TO_LINE_END // delete from cursor to end of line
- # define B_DSOL BABL_DEL_TO_LINE_START // delete from cursor to begining line
- # define B_MODE BABL_MODE // type out name of current mode.
- # endif
-
- # ifdef BABL_OSKEYS
- # define B_UNDO BABL_UNDO
- # define B_REDO BABL_REDO
- # define B_CUT BABL_CUT
- # define B_COPY BABL_COPY
- # define B_PASTE BABL_PASTE
- # define B_SELALL BABL_SELECT_ALL
- # define B_SELA BABL_SELECT_ALL
- # define B_FIND BABL_FIND
- # define B_FINDN BABL_FIND_NEXT
- # define B_FINDP BABL_FIND_PREV
- # define B_RPLACE BABL_FIND_REPLACE
- # define B_RUNAPP BABL_RUNAPP
- # define B_NAPP BABL_SWITCH_APP_NEXT
- # define B_PAPP BABL_SWITCH_APP_LAST // previous
- # define B_NWIN BABL_WINDOW_NEXT
- # define B_PWIN BABL_WINDOW_PREV
- # define B_WINN BABL_WINDOW_NEW
- # define B_CAPP BABL_CLOSE_APP
- # define B_HELP BABL_HELP
- # define B_LOCK BABL_LOCK
- # define B_SCAP BABL_SCREENCAPTURE
- # define B_KEYB BABL_SWITCH_KEYBOARD_LAYOUT
- # endif
-
- # ifdef BABL_BROWSER
- # define B_NTAB BABL_BROWSER_NEW_TAB
- # define B_CTAB BABL_BROWSER_CLOSE_TAB
- # define B_ROTB BABL_BROWSER_REOPEN_LAST_TAB
- # define B_NXTB BABL_BROWSER_NEXT_TAB
- # define B_PTAB BABL_BROWSER_PREV_TAB
- # define B_NURL BABL_BROWSER_URL_BAR
- # define B_BFWD BABL_BROWSER_FORWARD
- # define B_BBAK BABL_BROWSER_BACK
- # define B_BFND BABL_BROWSER_FIND
- # define B_BOOK BABL_BROWSER_BOOKMARK
- # define B_BDEV BABL_BROWSER_DEV_TOOLS // hard one to remember
- # define B_BRLD BABL_BROWSER_RELOAD
- # define B_BFULL BABL_BROWSER_FULLSCREEN
- # define B_ZIN BABL_BROWSER_ZOOM_IN
- # define B_ZOUT BABL_BROWSER_ZOOM_OUT
- # endif
-
- # ifdef BABL_APP
- # define B_SAVE BABL_APP_SAVE
- # ifdef BABL_APP_CELLS // spreadsheets and tables
- # define B_PASTV BABL_APP_PASTE_VALUES
- # define B_CALN BABL_APP_CENTER_ALIGN
- # define B_CFMT BABL_APP_CLEAR_FORMATTING
- # define B_SCLA BABL_APP_SCROLL_ACTIVE_CELL
- # define B_NCEL BABL_NEWLINE_IN_CELL
- # define B_IPRW BABL_INSERT_ROW_ABOVE
- # define B_ICOL BABL_INSERT_COL_LEFT
- # define B_IROW BABL_INSERT_ROW
- # define B_DROW BABL_DELETE_ROW
- # define B_SELC BABL_SELECT_COL
- # define B_SELR BABL_SELECT_ROW
- # endif // BABL_APP_CELLS
- # ifdef BABL_APP_EDITOR
- # define B_MSEL BABL_APP_MULTI_SELECT
- # define B_MARK BABL_APP_SET_MARK
- /* www.sublimetext.com/docs/2/multiple_selection_with_the_keyboard.html */
- # endif // BABL_APP_EDITOR
- # ifdef BABL_APP_WINDOWSPLITTING
- # define B_VSPLIT BABL_SPLIT_FRAME_VERT
- # define B_VUNSPT BABL_UNSPLIT_FRAME_VERT
- # define B_HSPLIT BABL_SPLIT_FRAME_HORIZONTAL
- # define B_HUNSPT BABL_UNSPLIT_FRAME_HORIZONTAL
- # define B_NXTFM BABL_NEXT_FRAME
- # define B_PRVFM BABL_PREV_FRAME
- # endif // BABL_APP_WINDOWSPLITTING
- # endif // BABL_APP
-
- #endif
|