]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - keyboards/handwired/MS-sculpt-mobile/babblePaste.txt
docs for babblepaste
[qmk_firmware.git] / keyboards / handwired / MS-sculpt-mobile / babblePaste.txt
index 6170ec7af547d4140a4035a964d33f7f5ed9d032..cf75e153e882e1b8684eb78ac3c2c9826e23d940 100644 (file)
-/*  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 context is done by another macro, or TBD interaction with the host. 
+ BabblePaste is a library of common macros used to make sure that
+you can have one "paste" button on one layer, and it will do the 
+right thing on any OS or app. Windows=Ctrl-V. Mac = Command-V and so on. 
 
-Huge thanks to https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts
-and https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/jeebak/keymap.c 
-*/
+The babblepaste library looks for the current status in a babble_mode global variable. 
+To switch modes, run the switch_babble_mode() function, or a pre defined macro. 
+Currently supported  are Windows, OS X, Gnome/kde, Emacs, VI and readline, 
+across 42+ common macro actions. 
 
-#include "eeconfig.h"
 
+###To use the library
+1) Paste the following into your config.h. 
 
-// Comment out anything you will never use. 
-// Windows. 
-#define MS_MODE 0
-#define MAC_MODE 1
-//aka gnome+KDE
-#define LINUX_MODE 2 
-#define EMACS_MODE 3
-#define VI_MODE 4
-//#define WORDSTAR_MODE 5
+//////Begin//////
+#define USE_BABLPASTE 1 
+
+#ifdef USE_BABLPASTE
+/* define BabblePaste maps. Whatever = 0 will be the default. */
+// MAC_MODE   0
+// MS_MODE 1
+// LINUX_MODE 2 
+// EMACS_MODE 3
+// VI_MODE 3
 // Readline and tmux
-#define READMUX 6 
+// READMUX_MODE 2 
+// WORDSTAR_MODE 5
+#endif
 
-// GLOBAL variable. Sets startup default if no eeppom
-char babble_mode = MAC_MODE ;
+// Uncomment these to remove options an free up  flash space
 
+// This removes everything but cursor movement
+// BABL_MOVEMENTONLY
+// and this just removes browser shortcuts
+// BABL_NOBROWSER
+///////End///////
 
-/* minimum set required for babble:
-    // Cut & Paste
-    BABL_UNDO
-       BABL_REDO
-       BABL_CUT
-       BABL_COPY
-       BABL_PASTE
-       BABL_SELECT_ALL
-       
-       // Movement
-       BABL_DEL_RIGHT_1C
-       BABL_DEL_RIGHT_1C
-       BABL_DEL_LEFT_WORD
-       BABL_DEL_RIGHT_WORD
-       BABL_GO_LEFT_1C
-       BABL_GO_LEFT_WORD
-       BABL_GO_RIGHT_WORD
-       BABL_GOTO_START_LINE
-       BABL_GOTO_START_DOC
-       BABL_GOTO_END_LINE
-       BABL_GOTO_END_DOC
-       BABL_GOTO_NEXT_LINE // down arrow will do. 
-       BABL_GOTO_PREV_LINE // up arrow will do. 
-       BABL_PGDN
-       BABL_PGUP
-       
-       // GUI
-       BABL_FIND
-       BABL_FIND_NEXT
-       BABL_FIND_REPLACE
-       BABL_RUNAPP
-       BABL_SWITCH_NEXT
-       BABL_SWITCH_LAST // previous
-       BABL_CLOSE_APP
-       BABL_HELP
-*/
+2) Add the following to your keymap in the action_get_macro
 
+//////Begin//////
+#ifdef USE_BABLPASTE
 
+   if( id >= BABL_START_NUM && id < (BABL_START_NUM + BABL_NUM_MACROS ) ) {
+               if (record->event.pressed)  { // is there a case where this isn't desired?
+  
+                       babblePaste ( record,  id );
+                       return MACRO_NONE;
+               }
+       }
+#endif
+///////End///////
 
+3) add Babbelpaste actions to your keymap. See the full list in babblePaste.h, or the
+list below
+B_L1C  // go left 1 char
+B_R1C  // go Right 1 char
+ B_L1W //GO_LEFT_1 WORD
+ B_R1W  //BABL_GO_RIGHT_1 WORD
+ B_GSOL  // BABL_GOTO_START of _LINE
+ B_GEOL  // BABL_GOTO_END_LINE
+ B_GTOP  //BABL_GOTO_START_DOC
+ B_GEND  //BABL_GO_END_DOC
+ B_DOWN  //BABL_GO_NEXT_LINE
+ B_UP   // BABL_GO_PREV_LINE
+ B_PGDN  //PGDN
+ B_PGUP  //PGUP
+// B_BKSP  //backspace so why bother. 
+ B_DEL  // DEL_RIGHT_1 Char // usually = Del
+ B_DLW  // DEL_LEFT_ 1 WORD)
+ B_DRW   //DEL_RIGHT_1 WORD
+ B_DEOL  // delete from cursor to end of line
+ B_DSOL  // delete from cursor to begining line
+ B_UNDO  //UNDO
+ B_REDO  // REDO
+ B_CUT  // CUT)
+ B_COPY  // COPY)
+ B_PAST  // PASTE)
+ B_SELA  // SELECT_ALL
+ B_FIND  // FIND)
+ B_FINDN  //FIND_NEXT)
+ B_FINDR  // FIND_REPLACE)
+ B_RAPP  // open application launcher
+ B_NAPP  // switch to next app
+ B_PAPP  // switch to previous app
+ B_CAPP  // CLOSE_APP)
+ B_HELP  // HELP)
+ B_NTAB  // BROWSER_NEW_TAB)
+ B_CTAB  //BROWSER_CLOSE_TAB)
+ B_ROTB  //BROWSER_REOPEN_LAST_TAB)
+ B_NXTB  //BROWSER_NEXT_TAB)
+ B_PTAB  //BROWSER_PREV_TAB)
+ B_NURL //BROWSER_jump to URL_BAR)
+ B_BFWD  // BROWSER_FORWARD (in history) 
+ B_BBAK  //BROWSER_BACK (in history)
+ B_BFND  // BROWSER_FIND)
+ B_BOOK  //BROWSER_New BOOKMARK)
+ B_BDEV  //BROWSER_ Open DEV_TOOLS) // hard one to remember
+ B_BRLD  // BROWSER_RELOAD Page
+ B_BFUlL // BROWSER_FULLSCREEN)
+ B_ZMIN  // BROWSER_ZOOM_IN)
+ B_ZMOT  //BROWSER_ZOOM_OUT)
 
-static macro_t *babblePaste (keyrecord_t *record,  uint16_t shortcut) {
 
-    switch(babble_mode) {
-    
-#ifdef MS_MODE
-        case MS_MODE:
-               switch(shortcut) {
-         
-                       case BABL_UNDO:
-                                       return MACRO( D(LCTRL), T(Z), U(LCTRL), END );
-                       case BABL_REDO:
-                                       return MACRO( D(LCTRL), T(Y), U(LCTRL), END );
-                       case BABL_CUT:
-                                       return MACRO( D(LCTRL), T(X), U(LCTRL), END );
-                       case BABL_COPY:
-                                       return MACRO( D(LCTRL), T(C), U(LCTRL), END );
-                       case BABL_PASTE:
-                                       return MACRO( D(LCTRL), T(V), U(LCTRL), END );                  
-                       case BABL_SELECT_ALL:
-                                       return MACRO( D(LCTRL), T(A), U(LCTRL), END );   
-                       case BABL_DEL_RIGHT_1C:
-                                return MACRO( D(DEL), END );    
-                       case BABL_DEL_LEFT_WORD:
-                               return MACRO( D(LCTRL), T(BSPACE), U(LCTRL), END );
-                       case BABL_DEL_RIGHT_WORD:
-                               return MACRO( D(LCTRL), T(DEL), U(LCTRL), END );
-                       case BABL_GO_LEFT_1C:
-                               return MACRO( T(LEFT), END );
-                       case BABL_GO_RIGHT_1C:
-                               return MACRO( T(RIGHT), END );
-                       case BABL_GO_LEFT_WORD:
-                               return MACRO( D(LCTRL), T(LEFT), U(LCTRL), END );
-                       case BABL_GO_RIGHT_WORD:
-                               return MACRO( D(LCTRL), T(RIGHT), U(LCTRL), END );
-                       case BABL_GOTO_START_LINE:
-                               return MACRO( T(HOME), END );
-                       case BABL_GOTO_START_DOC:
-                               return MACRO( D(LCTRL),T(HOME),  U(LCTRL),END );
-                       case BABL_GOTO_END_LINE:
-                               return MACRO( T(END), END );
-                       case BABL_GOTO_END_DOC:
-                               return MACRO( D(LCTRL),T(END),  U(LCTRL),END );
-                       case BABL_GOTO_NEXT_LINE:
-                               return MACRO( T(DOWN), END );
-                       case BABL_GOTO_PREV_LINE:
-                               return MACRO( T(UP), END );
-                       case BABL_PGDN:
-                               return MACRO( T(PGDN), END );
-                       case BABL_PGUP:
-                               return MACRO( T(PGUP), END );
-                       case BABL_FIND:
-                               return MACRO( D(LCTRL),T(F),  U(LCTRL),END );
-                       case BABL_FIND_NEXT:
-                               return MACRO( T(F3),END );
-                       case BABL_FIND_REPLACE:
-                               return MACRO( D(LCTRL),T(H),  U(LCTRL),END );
-                       case BABL_RUNAPP:
-                               return MACRO( D(LGUI),T(R),  U(LGUI),END );
-                       case BABL_SWITCH_APP_NEXT:
-                               return MACRO( D(LALT),T(TAB), U(LALT),END );
-                       case BABL_SWITCH_APP_LAST:
-                               return MACRO( D(LSFT),D(LALT),T(TAB), U(LALT), U(LSFT),END );
-                       case BABL_CLOSE_APP:
-                               return MACRO( D(LALT),T(F4), U(LALT),END );
-                       case BABL_HELP:
-                               return MACRO( T(F1),END );
-                               break;
-        
-        return MACRO_NONE;
-       }
-       
-#endif 
-#ifdef LINUX_MODE
-        case LINUX_MODE:
-               switch(shortcut) {
-         
-                       case BABL_UNDO:
-                                       return MACRO( D(LCTRL), T(Z), U(LCTRL), END );
-                       case BABL_REDO:
-                                       return MACRO( D(LCTRL), T(Y), U(LCTRL), END );
-                       case BABL_CUT:
-                                       return MACRO( D(LCTRL), T(X), U(LCTRL), END );
-                       case BABL_COPY:
-                                       return MACRO( D(LCTRL), T(C), U(LCTRL), END );
-                       case BABL_PASTE:
-                                       return MACRO( D(LCTRL), T(V), U(LCTRL), END );                  
-                       case BABL_SELECT_ALL:
-                                       return MACRO( D(LCTRL), T(A), U(LCTRL), END );   
-                       case BABL_DEL_RIGHT_1C:
-                                return MACRO( D(DEL), END );    
-                       case BABL_DEL_LEFT_WORD:
-                               return MACRO( D(LCTRL), T(BSPACE), U(LCTRL), END );
-                       case BABL_DEL_RIGHT_WORD:
-                               return MACRO( D(LCTRL), T(DEL), U(LCTRL), END );
-                       case BABL_GO_LEFT_1C:
-                               return MACRO( T(LEFT), END );
-                       case BABL_GO_RIGHT_1C:
-                               return MACRO( T(RIGHT), END );
-                       case BABL_GO_LEFT_WORD:
-                               return MACRO( D(LCTRL), T(LEFT), U(LCTRL), END );
-                       case BABL_GO_RIGHT_WORD:
-                               return MACRO( D(LCTRL), T(RIGHT), U(LCTRL), END );
-                       case BABL_GOTO_START_LINE:
-                               return MACRO( T(HOME), END );
-                       case BABL_GOTO_START_DOC:
-                               return MACRO( D(LCTRL),T(HOME),  U(LCTRL),END );
-                       case BABL_GOTO_END_LINE:
-                               return MACRO( T(END), END );
-                       case BABL_GOTO_END_DOC:
-                               return MACRO( D(LCTRL),T(END),  U(LCTRL),END );
-                       case BABL_GOTO_NEXT_LINE:
-                               return MACRO( T(DOWN), END );
-                       case BABL_GOTO_PREV_LINE:
-                               return MACRO( T(UP), END );
-                       case BABL_PGDN:
-                               return MACRO( T(PGDN), END );
-                       case BABL_PGUP:
-                               return MACRO( T(PGUP), END );
-                       case BABL_FIND:
-                               return MACRO( D(LCTRL),T(F),  U(LCTRL),END );
-                       case BABL_FIND_NEXT:
-                               /* return MACRO( T(F3),END ); KDE */
-                               return MACRO( D(LCTRL),T(G),  U(LCTRL),END ); // Gnome*/
-                       case BABL_FIND_REPLACE:
-                               /* return MACRO( D(LCTRL),T(R),  U(LCTRL),END ); KDE */
-                               return MACRO( D(LCTRL),T(H),  U(LCTRL),END ); // Gnome*/
-                       case BABL_RUNAPP:
-                               return MACRO( D(LALT),T(F2),  U(LALT),END );
-                       case BABL_SWITCH_APP_NEXT:
-                               return MACRO( D(LCTL),T(TAB), U(LCTL),END );
-                       case BABL_SWITCH_APP_LAST:
-                               return MACRO( D(LSFT),D(LCTL),T(TAB), U(LCTL), U(LSFT),END );
-                       case BABL_CLOSE_APP:
-                               return MACRO( D(LALT),T(F4), U(LALT),END );
-                       case BABL_HELP:
-                               return MACRO_NONE;
-                               break;
-        
-        return MACRO_NONE;
-       }
-       
-#endif 
-       
-       
-    
-#ifdef MAC_MODE
-        case MAC_MODE:
-               switch(shortcut) {
-         
-                       case BABL_UNDO:
-                                       return MACRO( D(LGUI), T(Z), U(LGUI), END );
-                       case BABL_REDO:
-                                       return MACRO( D(LSFT),D(LGUI), T(Z), U(LSFT),U(LGUI), END );
-                       case BABL_CUT:
-                                       return MACRO( D(LGUI), T(X), U(LGUI), END );
-                       case BABL_COPY:
-                                       return MACRO( D(LGUI), T(C), U(LGUI), END );
-                       case BABL_PASTE:
-                                       return MACRO( D(LGUI), T(V), U(LGUI), END );                    
-                       case BABL_SELECT_ALL:
-                                       return MACRO( D(LGUI), T(A), U(LGUI), END );     
-                       case BABL_DEL_RIGHT_1C:
-                                return MACRO( D(DEL), END );    
-                       case BABL_DEL_LEFT_WORD:
-                               return MACRO( D(LALT), T(BSPACE), U(LALT), END );
-                       case BABL_DEL_RIGHT_WORD:
-                               return MACRO( D(LALT), T(DEL), U(LALT), END );
-                       case BABL_GO_LEFT_1C:
-                               return MACRO( T(LEFT), END );
-                       case BABL_GO_RIGHT_1C:
-                               return MACRO( T(RIGHT), END );
-                       case BABL_GO_LEFT_WORD:
-                               return MACRO( D(LALT), T(LEFT), U(LALT), END );
-                       case BABL_GO_RIGHT_WORD:
-                               return MACRO( D(LALT), T(RIGHT), U(LALT), END );
-                       case BABL_GOTO_START_LINE:
-                               return MACRO(  D(LGUI), T(LEFT), U(LGUI),  END );
-                       case BABL_GOTO_START_DOC:
-                               return MACRO( D(LGUI),T(UP),  U(LGUI),END );
-                       case BABL_GOTO_END_LINE:
-                               return MACRO(  D(LGUI), T(RIGHT), U(LGUI), END );
-                       case BABL_GOTO_END_DOC:
-                               return MACRO( D(LGUI),T(DOWN),  U(LGUI),END );
-                       case BABL_GOTO_NEXT_LINE:
-                               return MACRO( T(DOWN), END );
-                       case BABL_GOTO_PREV_LINE:
-                               return MACRO( T(UP), END );
-                       case BABL_PGDN:
-                               return MACRO( D(LALT), T(DOWN), U(LALT), END );
-                       case BABL_PGUP:
-                               return MACRO(  D(LALT), T(UP), U(LALT), END );
-                       case BABL_FIND:
-                               return MACRO( D(LGUI),T(F),  U(LGUI),END );
-                       case BABL_FIND_NEXT:
-                               return MACRO(  D(LGUI),T(G),  U(LGUI),END );
-                       case BABL_FIND_REPLACE:
-                               return MACRO( D(LGUI),T(F),  U(LGUI),END );
-                       case BABL_RUNAPP:
-                               return MACRO( D(LGUI),T(R),  U(LGUI),END );
-                       case BABL_SWITCH_APP_NEXT:
-                               return MACRO( D(LGUI),T(TAB), U(LGUI),END );
-                       case BABL_SWITCH_APP_LAST:
-                               return MACRO( D(LSFT),D(LGUI),T(TAB), U(LGUI), U(LSFT),END );
-                       case BABL_CLOSE_APP:
-                               return MACRO( D(LGUI),T(Q),  U(LGUI),END );
-                       case BABL_HELP:
-                               return MACRO( D(LSFT),D(LGUI),T(SLASH), U(LGUI), U(LSFT),END );
-                               break; 
-        
-        return MACRO_NONE;
-       }
-       
-#endif         
-       
-#ifdef EMACS_MODE
-        case EMACS_MODE:
-               switch(shortcut) {
-//probably should allow meta to not be ALT
-                       case BABL_UNDO:
-                                       return MACRO( D(LCTL), T(X), U(LCTL),T(C), END );
-                       case BABL_REDO:
-                                       return MACRO( D(LCTL), T(X), U(LCTL),T(C), END ); // arguably
-                       case BABL_CUT:
-                                       return MACRO( D(LCTL), T(W), U(LCTL), END );
-                       case BABL_COPY:
-                                       return MACRO( D(LALT), T(W), U(LALT), END );
-                       case BABL_PASTE:
-                                       return MACRO(  D(LCTL), T(Y), U(LCTL), END );                   
-                       case BABL_SELECT_ALL:
-                                       return MACRO(D(LCTL), T(X), U(LCTL),T(H), END );         
-                       case BABL_DEL_RIGHT_1C:
-                                return MACRO( D(LCTL), T(D), U(LCTL),END );     
-                       case BABL_DEL_LEFT_WORD:
-                               return MACRO( D(LCTL), T(BSPACE), U(LCTL), END );
-                       case BABL_DEL_RIGHT_WORD:
-                               return MACRO( D(LALT), T(D), U(LALT), END );
-                       case BABL_GO_LEFT_1C:
-                               return MACRO( T(LEFT), END );
-                       case BABL_GO_RIGHT_1C:
-                               return MACRO( T(RIGHT), END );
-                       case BABL_GO_LEFT_WORD:
-                               return MACRO( D(LALT), T(B), U(LALT), END );
-                       case BABL_GO_RIGHT_WORD:
-                               return MACRO( D(LALT), T(F), U(LALT), END );
-                       case BABL_GOTO_START_LINE:
-                               return MACRO(  D(LCTRL), T(A), U(LCTRL),  END );
-                       case BABL_GOTO_START_DOC:
-                               return MACRO( D(LALT), D(LSFT), T(COMM),U(LSFT), U(LALT) ,END );
-                       case BABL_GOTO_END_LINE:
-                               return MACRO(  D(LCTRL), T(E), U(LCTRL), END );
-                       case BABL_GOTO_END_DOC:
-                               return MACRO( D(LALT), D(LSFT), T(DOT),U(LSFT), U(LALT) ,END );
-                       case BABL_GOTO_NEXT_LINE:
-                               return MACRO(  D(LCTRL), T(N), U(LCTRL), END );
-                       case BABL_GOTO_PREV_LINE:
-                               rreturn MACRO(  D(LCTRL), T(P), U(LCTRL), END );
-                       case BABL_PGDN:
-                               return MACRO(D(LCTRL), T(V), U(LCTRL), END );
-                       case BABL_PGUP:
-                               return MACRO(  D(LALT), T(V), U(LALT), END );
-                       case BABL_FIND:
-                               return MACRO( D(LCTRL), T(S), U(LCTRL),END );
-                       case BABL_FIND_NEXT:
-                               return MACRO( D(LCTRL), T(S), U(LCTRL),END );
-                       case BABL_FIND_REPLACE:
-                               return MACRO(  D(LALT),D(LSFT), T(5),U(LSFT),  U(LALT), END );
-                       case BABL_RUNAPP:
-                               return MACRO( D(LALT), T(X), U(LALT),T(S),T(H),T(E),T(L),T(L),END );// arguably
-                       case BABL_SWITCH_APP_NEXT:
-                               return MACRO( D(LCTL), T(X), U(LCTL),T(RIGHT), END ); // arguably
-                       case BABL_SWITCH_APP_LAST:
-                               return MACRO( D(LCTL), T(X), U(LCTL),T(LEFT), END ); // arguably
-                       case BABL_CLOSE_APP:
-                               return MACRO(D(LCTL), T(X), U(LCTL),T(C),END );
-                       case BABL_HELP:
-                               return MACRO( D(LCTL),T(H), U(LCTL),T(A),END); // start search in help
-                               break;
-        
-        return MACRO_NONE;
-       }
-       
-#endif         
-#ifdef VI_MODE
-        case VI_MODE:
-               switch(shortcut) {
-//assume esc is already called
-                       case BABL_UNDO:
-                                       return MACRO( T(U), END );
-                       case BABL_REDO:
-                                       return MACRO(  D(LCTL), T(R), U(LCTL), END );  
-                       case BABL_CUT:
-                                       return MACRO(  T(X), END );
-                       case BABL_COPY:
-                                       return MACRO( T(Y),END );
-                       case BABL_PASTE:
-                                       return MACRO(  T(P), END );                     
-                       case BABL_SELECT_ALL:
-                                       return MACRO( T(COLN),T(PERC),T(Y), END ); // wrong but helpful? 
-                       case BABL_DEL_RIGHT_1C:
-                                return MACRO(  T(X),END );      
-                       case BABL_DEL_LEFT_WORD:
-                               return MACRO(  T(D),T(G),T(E),END );
-                       case BABL_DEL_RIGHT_WORD:
-                               return MACRO(  T(D),T(W),END );
-                       case BABL_GO_LEFT_1C:
-                               return MACRO( T(H), END );
-                       case BABL_GO_RIGHT_1C:
-                               return MACRO( T(L), END );
-                       case BABL_GO_LEFT_WORD:
-                               return MACRO( T(B),END );
-                       case BABL_GO_RIGHT_WORD:
-                               return MACRO( T(W), END );
-                       case BABL_GOTO_START_LINE:
-                               return MACRO(  T(CIRC), END );
-                       case BABL_GOTO_START_DOC:
-                               return MACRO( T(G),T(G) ,END );
-                       case BABL_GOTO_END_LINE:
-                               return MACRO(   T(DLR), END );
-                       case BABL_GOTO_END_DOC:
-                               return MACRO( D(LSFT), T(G),U(LSFT), ,END );
-                       case BABL_GOTO_NEXT_LINE:
-                               return MACRO(  T(J), END );
-                       case BABL_GOTO_PREV_LINE:
-                               rreturn MACRO(  T(K), END );
-                       case BABL_PGDN:
-                               return MACRO(D(LCTRL), T(F), U(LCTRL), END );
-                       case BABL_PGUP:
-                               return MACRO( D(LCTRL), T(B), U(LCTRL), END );
-                       case BABL_FIND:
-                               return MACRO(   T(SLASH),END );
-                       case BABL_FIND_NEXT:
-                               return MACRO( T(N),END );
-                       case BABL_FIND_REPLACE:
-                               return MACRO(  D(LALT),D(LSFT), T(5),U(LSFT),  U(LALT), END );
-                       case BABL_RUNAPP:
-                                return MACRO_NONE;
-                       case BABL_SWITCH_APP_NEXT:
-                                return MACRO_NONE;
-                       case BABL_SWITCH_APP_LAST:
-                                return MACRO_NONE;
-                       case BABL_CLOSE_APP:
-                               return MACRO(T(COLN), T(Q), T(EXLM),END );
-                       case BABL_HELP:
-                               return  MACRO(T(COLN),T(H),END); // start search in help
-                               break;
-        
-        return MACRO_NONE;
-       }
-       
-#endif
-#ifdef READMUX_MODE
-// I havent decided how much to do bash and how much tmux
-        case READMUX_MODE:
-               switch(shortcut) {
-                       case BABL_UNDO:
-                                       return MACRO( D(LALT), T(R), U(LALT) , END );
-                       case BABL_REDO:
-                                       return MACRO( D(LCTL), T(X), U(LCTL),T(C), END ); // arguably
-                       case BABL_CUT:
-                                       return MACRO( D(LCTL), T(K), U(LCTL), END ); // wrong half the time
-                       case BABL_COPY:
-                                       return MACRO_NONE;
-                       case BABL_PASTE:
-                                       return MACRO(  D(LCTL), T(Y), U(LCTL), END );                   
-                       case BABL_SELECT_ALL:
-                                       return MACRO(D(LCTL), T(A), T(K), T(Y), U(LCTL) , END );         // should this be tmux all?
-                       case BABL_DEL_RIGHT_1C:
-                                return MACRO( D(LCTL), T(D), U(LCTL),END );     
-                       case BABL_DEL_LEFT_WORD:
-                               return MACRO( D(LCTL), T(W), U(LCTL), END );
-                       case BABL_DEL_RIGHT_WORD:
-                               return MACRO( D(LALT), T(D), U(LALT), END );
-                       case BABL_GO_LEFT_1C:
-                               return MACRO( T(LEFT), END );
-                       case BABL_GO_RIGHT_1C:
-                               return MACRO( T(RIGHT), END );
-                       case BABL_GO_LEFT_WORD:
-                               return MACRO( D(LALT), T(B), U(LALT), END );
-                       case BABL_GO_RIGHT_WORD:
-                               return MACRO( D(LALT), T(F), U(LALT), END );
-                       case BABL_GOTO_START_LINE:
-                               return MACRO(  D(LCTRL), T(A), U(LCTRL),  END );
-                       case BABL_GOTO_START_DOC:
-                               return MACRO_NONE; // tmux?
-                       case BABL_GOTO_END_LINE:
-                               return MACRO(  D(LCTRL), T(E), U(LCTRL), END );
-                       case BABL_GOTO_END_DOC:
-                               return MACRO_NONE; // tmux?
-                       case BABL_GOTO_NEXT_LINE:
-                               return MACRO(  D(LCTRL), T(N), U(LCTRL), END );
-                       case BABL_GOTO_PREV_LINE:
-                               return MACRO(  D(LCTRL), T(P), U(LCTRL), END );
-                       case BABL_PGDN:
-                               return MACRO( T(PGDN), END );
-                       case BABL_PGUP:
-                               return MACRO( T(PGUP), END );
-                       case BABL_FIND:
-                               return MACRO(  D(LCTRL), T(R), U(LCTRL), END ); // search history
-                       case BABL_FIND_NEXT:
-                               eturn MACRO(  D(LCTRL), T(S), U(LCTRL), END );
-                       case BABL_FIND_REPLACE:
-                               return MACRO_NONE; // tmux?
-                       case BABL_RUNAPP:
-                               return MACRO(  D(LCTRL), T(B), U(LCTRL),  T(C),END );  //tmux
-                       case BABL_SWITCH_APP_NEXT:
-                               return MACRO(  D(LCTRL), T(B), U(LCTRL),  T(N),END );  //tmux
-                       case BABL_SWITCH_APP_LAST:
-                               return MACRO(  D(LCTRL), T(B), U(LCTRL),  T(P),END );  //tmux
-                       case BABL_CLOSE_APP:
-                               return MACRO( D(LCTRL), T(B), U(LCTRL),  T(D),END); // usually what I want
-                               break;
-                       case BABL_HELP:
-                               return MACRO_NONE;
-                               break;
-                               
-        return MACRO_NONE;
-       }
-       
-#endif                         
-       return MACRO_NONE;
-}
\ No newline at end of file
+#### Development notes
+-Why a new function? Because it would make the keymap too ugly to put it there.  
+-Why not return the macro to action_get_macro? Because I kept running into scope problems
+and pointers to the wrong type. 
+-Why not an array of arrays as a lookup instead of a function? That would allow you 
+to store the lookup table in PROGMEM.  True, but that takes more pre-processor skill 
+than I had. 
+
+-Have you tested this on every platform? No. Submit a patch.  
+
+
+### Next steps for someone. 
+Make it easier to pair macros with modifiers. So key foo will jump to start of line, and 
+Shift(foo) will jump to the first tab in a browser. 
+
+## Thanks
+
+Thanks to https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts
+and https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/jeebak/keymap.c
+And of course QMK... 
+