From 01980c96e9c1e8ab5aad0e89d03c0e15417712c8 Mon Sep 17 00:00:00 2001
From: milestogo <milestogo@users.noreply.github.com>
Date: Wed, 8 Mar 2017 01:06:25 -0800
Subject: [PATCH] added browser babble, removed code from keymap

---
 .../handwired/MS-sculpt-mobile/babblePaste.c  | 408 +++++++++++-------
 .../handwired/MS-sculpt-mobile/babblePaste.h  | 151 ++++++-
 .../keymaps/milestogo/config.h                |  13 +-
 .../keymaps/milestogo/keymap.c                |  78 ++--
 4 files changed, 438 insertions(+), 212 deletions(-)

diff --git a/keyboards/handwired/MS-sculpt-mobile/babblePaste.c b/keyboards/handwired/MS-sculpt-mobile/babblePaste.c
index 93ff486e0..491a79333 100644
--- a/keyboards/handwired/MS-sculpt-mobile/babblePaste.c
+++ b/keyboards/handwired/MS-sculpt-mobile/babblePaste.c
@@ -15,6 +15,13 @@ and https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/jee
 // GLOBAL variable to determine mode.  Sets startup default if no eeppom
 uint8_t babble_mode =0 ;
 
+// small function that we might also want to call from a keymap. 
+
+macro_t* switch_babble_mode( uint8_t id) {
+ babble_mode= id;
+ return MACRO_NONE; //less typing above
+}
+
 		
 // Today I learned that the preprocessor can not create a switch statement label from an argument
 // And else statements have problems, see https://gcc.gnu.org/onlinedocs/gcc-3.0.1/cpp_3.html#SEC15
@@ -23,63 +30,80 @@ uint8_t babble_mode =0 ;
 		 {  action_macro_play( MACRO(macro)); return MACRO_NONE; }   
 
 
-const  macro_t *babblePaste (keyrecord_t *record,  uint8_t shortcut) {
 /* this function runs the appropriate babblepaste macro, given
 the global babble_mode, and a shortcut from the ENUM in babblePaste.h 
 TODO, the pointers in this function should be stored in a PROGMEM array, not ram. 
 But that requires even more clever preprocessor foo.
 */
-
+const  macro_t *babblePaste (keyrecord_t *record,  uint8_t shortcut) {
+/*
 	 if ( shortcut < BABL_START_NUM || \
 			 shortcut >= (BABL_START_NUM + BABL_NUM_MACROS ) ) {
 			return MACRO_NONE;
 		}
-
-
+*/
   switch(babble_mode) {
-     	
-#ifdef MS_MODE
+     
+     
 
+#ifdef MS_MODE
+		if ( BABL_WINDOWS  == shortcut ) { return switch_babble_mode(MS_MODE);  } 
+		
 	 case MS_MODE:	
-		BABLM( BABL_DEL_RIGHT_1C,	T(DEL), END );
-		BABLM( BABL_DEL_LEFT_WORD,	D(LCTRL), T(BSPACE), U(LCTRL), END );
-		BABLM( BABL_DEL_RIGHT_WORD,D(LCTRL), T(DEL), U(LCTRL), END );
 		BABLM( BABL_GO_LEFT_1C,	T(LEFT), END );
 		BABLM( BABL_GO_RIGHT_1C ,	T(RIGHT), END );
-		BABLM( BABL_GO_LEFT_WORD,	D(LCTRL), T(LEFT), U(LCTRL), END );
-		BABLM( BABL_GO_RIGHT_WORD, D(LCTRL), T(RIGHT), U(LCTRL), END );
+		BABLM( BABL_GO_LEFT_WORD,	D(LCTL), T(LEFT), U(LCTL), END );
+		BABLM( BABL_GO_RIGHT_WORD, D(LCTL), T(RIGHT), U(LCTL), END );
 		BABLM( BABL_GO_START_LINE,	T(HOME), END );
-		BABLM( BABL_GO_START_DOC,	D(LCTRL),T(HOME),  U(LCTRL),END );
 		BABLM( BABL_GO_END_LINE,	T(END), END );
-		BABLM( BABL_GO_END_DOC,	D(LCTRL),T(END),  U(LCTRL),END );
+		BABLM( BABL_GO_START_DOC,	D(LCTL),T(HOME),  U(LCTL),END );
+		BABLM( BABL_GO_END_DOC,	D(LCTL),T(END),  U(LCTL),END );
 		BABLM( BABL_GO_NEXT_LINE,	T(DOWN), END );
 		BABLM( BABL_GO_PREV_LINE,	T(UP), END );
 		BABLM( BABL_PGDN,			T(PGDN), END );
 		BABLM( BABL_PGUP,			T(PGUP), END );
+		BABLM( BABL_DEL_RIGHT_1C,	T(DEL), END );
+		BABLM( BABL_DEL_LEFT_WORD,	D(LCTL), T(BSPACE), U(LCTL), END );
+		BABLM( BABL_DEL_RIGHT_WORD,		D(LCTL), T(DEL), U(LCTL), END );
+		BABLM( BABL_DEL_TO_LINE_END,	D(RSFT), T(HOME), U(RSFT), T(DEL),  END);
+		BABLM( BABL_DEL_TO_LINE_START,	D(RSFT), T(END), U(RSFT), T(DEL),  END );
 #ifndef BABL_MOVEMENTONLY
-		BABLM( BABL_UNDO, 		D(LCTRL), T(Z), U(LCTRL), END );
-		BABLM( BABL_REDO, 		D(LCTRL), T(Y), U(LCTRL), END );
-		BABLM( BABL_CUT, 		D(LCTRL), T(X), U(LCTRL), END );
-		BABLM( BABL_COPY, 		D(LCTRL), T(C), U(LCTRL), END );
-		BABLM( BABL_PASTE, 		D(LCTRL), T(V), U(LCTRL), END );		
-		BABLM( BABL_SELECT_ALL, D(LCTRL), T(A), U(LCTRL), END );
-		BABLM( BABL_UNDO, 		D(LCTRL), T(Z), U(LCTRL), END );
-		BABLM( BABL_REDO, 		D(LCTRL), T(Y), U(LCTRL), END );
-		BABLM( BABL_CUT, 		D(LCTRL), T(X), U(LCTRL), END );
-		BABLM( BABL_COPY, 		D(LCTRL), T(C), U(LCTRL), END );
-		BABLM( BABL_PASTE, 		D(LCTRL), T(V), U(LCTRL), END );			
-		BABLM( BABL_SELECT_ALL, 		D(LCTRL), T(A), U(LCTRL), END );
-		BABLM( BABL_FIND, 		D(LCTRL),T(F),  U(LCTRL),END );
+		BABLM( BABL_UNDO, 		D(LCTL), T(Z), U(LCTL), END );
+		BABLM( BABL_REDO, 		D(LCTL), T(Y), U(LCTL), END );
+		BABLM( BABL_CUT, 		D(LCTL), T(X), U(LCTL), END );
+		BABLM( BABL_COPY, 		D(LCTL), T(C), U(LCTL), END );
+		BABLM( BABL_PASTE, 		D(LCTL), T(V), U(LCTL), END );		
+		BABLM( BABL_SELECT_ALL, D(LCTL), T(A), U(LCTL), END );
+		BABLM( BABL_FIND, 		D(LCTL),T(F),  U(LCTL),END );
 		BABLM( BABL_FIND_NEXT, 			T(F3),END );
-		BABLM( BABL_FIND_REPLACE,		D(LCTRL),T(H),  U(LCTRL),END );
+		BABLM( BABL_FIND_REPLACE,		D(LCTL),T(H),  U(LCTL),END );
 		BABLM( BABL_RUNAPP, 	D(LGUI),T(R),  U(LGUI),END );
 		BABLM( BABL_SWITCH_APP_NEXT, D(LALT),T(TAB), U(LALT),END );
 		BABLM( BABL_SWITCH_APP_LAST, D(LSFT),D(LALT),T(TAB), U(LALT), U(LSFT),END );
 		BABLM( BABL_CLOSE_APP, 	D(LALT),T(F4), U(LALT),END );
 		BABLM( BABL_HELP,		T(F1),END );
+#ifndef BABL_NOBROWSER
+		BABLM( BABL_BROWSER_NEW_TAB,		D(LCTL), T(T), U(LCTL),END );
+		BABLM( BABL_BROWSER_CLOSE_TAB,		D(LCTL), T(W), U(LCTL),END );
+		BABLM( BABL_BROWSER_REOPEN_LAST_TAB,		D(LCTL), D(RSFT),T(T), U(RSFT),U(LCTL),END );
+		BABLM( BABL_BROWSER_NEXT_TAB,		D(LCTL), T(TAB), U(LCTL),END );
+		BABLM( BABL_BROWSER_PREV_TAB,		D(LCTL), D(RSFT), T(TAB), U(RSFT), U(LCTL),END );
+		BABLM( BABL_BROWSER_URL_BAR,		D(LCTL), T(L), U(LCTL),END );
+		BABLM( BABL_BROWSER_FORWARD,		D(LALT), T(RIGHT), U(LALT),END );
+		BABLM( BABL_BROWSER_BACK,			D(LALT), T(LEFT), U(LALT),END );
+		BABLM( BABL_BROWSER_FIND,			D(LCTL), T(F), U(LCTL),END );
+		BABLM( BABL_BROWSER_BOOKMARK,		D(LCTL), T(D), U(LCTL),END );
+		//BABLM( BABL_BROWSER_DEV_TOOLS,	T(F12), U(LCTL),END  ); // EDGE 
+		BABLM( BABL_BROWSER_DEV_TOOLS,		D(LCTL), T(T), U(LCTL),END  ); // Chrome
+		// Chrome
+		BABLM( BABL_BROWSER_RELOAD,			D(LCTL), T(F5), U(LCTL),END ); // hard reload w/o cache
+		BABLM( BABL_BROWSER_FULLSCREEN,		T(F11),END ); //command shift F
+		BABLM( BABL_BROWSER_ZOOM_IN,		D(LCTL), D(RSFT), T(EQL), U(RSFT), U(LCTL),END ); // ctr+ +
+		BABLM( BABL_BROWSER_ZOOM_OUT,		D(LCTL), T(MINS), U(LCTL),END );
+#endif
 #endif
 
-
+		// Todo, ring bell, flash light, show user this isn't supported
 		return MACRO_NONE;
 		
 	 	
@@ -87,62 +111,87 @@ But that requires even more clever preprocessor foo.
 
 
 #ifdef LINUX_MODE
+	if ( BABL_LINUX == shortcut ) { return switch_babble_mode(LINUX_MODE);  } 
+
 	 case LINUX_MODE:
-	
-		BABLM( BABL_DEL_RIGHT_1C  , 	D(DEL), END );	 
-		BABLM( BABL_DEL_LEFT_WORD  ,	D(LCTRL), T(BSPACE), U(LCTRL), END );
-		BABLM( BABL_DEL_RIGHT_WORD  , D(LCTRL), T(DEL), U(LCTRL), END );
 		BABLM( BABL_GO_LEFT_1C  , 	T(LEFT), END );
 		BABLM( BABL_GO_RIGHT_1C  , 	T(RIGHT), END );
-		BABLM( BABL_GO_LEFT_WORD  , 	D(LCTRL), T(LEFT), U(LCTRL), END );
-		BABLM( BABL_GO_RIGHT_WORD  , D(LCTRL), T(RIGHT), U(LCTRL), END );
+		BABLM( BABL_GO_LEFT_WORD  , 	D(LCTL), T(LEFT), U(LCTL), END );
+		BABLM( BABL_GO_RIGHT_WORD  , D(LCTL), T(RIGHT), U(LCTL), END );
 		BABLM( BABL_GO_START_LINE , 	T(HOME), END );
-		BABLM( BABL_GO_START_DOC  , 	D(LCTRL),T(HOME),  U(LCTRL),END );
 		BABLM( BABL_GO_END_LINE  ,	T(END), END );
-		BABLM( BABL_GO_END_DOC  , 	D(LCTRL),T(END),  U(LCTRL),END );
+		BABLM( BABL_GO_START_DOC  , 	D(LCTL),T(HOME),  U(LCTL),END );
+		BABLM( BABL_GO_END_DOC  , 	D(LCTL),T(END),  U(LCTL),END );
 		BABLM( BABL_GO_NEXT_LINE  , 	T(DOWN), END );
 		BABLM( BABL_GO_PREV_LINE  , 	T(UP), END );
 		BABLM( BABL_PGDN  , 			T(PGDN), END );
 		BABLM( BABL_PGUP  , 			T(PGUP), END );
+		BABLM( BABL_DEL_RIGHT_1C  , 	D(DEL), END );	 
+		BABLM( BABL_DEL_LEFT_WORD  ,	D(LCTL), T(BSPACE), U(LCTL), END );
+		BABLM( BABL_DEL_RIGHT_WORD  , D(LCTL), T(DEL), U(LCTL), END );
+		BABLM( BABL_DEL_TO_LINE_END,	D(RSFT), T(HOME), U(RSFT), T(DEL),  END);
+		BABLM( BABL_DEL_TO_LINE_START,	D(RSFT), T(END), U(RSFT), T(DEL),  END );
 #ifndef BABL_MOVEMENTONLY
-		BABLM( BABL_UNDO  , 	D(LCTRL), T(Z), U(LCTRL), END );
-		BABLM( BABL_REDO  , 	D(LCTRL), T(Y), U(LCTRL), END );
-		BABLM( BABL_CUT  , 	D(LCTRL), T(X), U(LCTRL), END );
-		BABLM( BABL_COPY  , 	D(LCTRL), T(C), U(LCTRL), END );
-		BABLM( BABL_PASTE  ,	D(LCTRL), T(V), U(LCTRL), END );			
-		BABLM( BABL_SELECT_ALL, D(LCTRL), T(A), U(LCTRL), END );	
-		BABLM( BABL_FIND,	D(LCTRL),T(F),  U(LCTRL),END );
+		BABLM( BABL_UNDO  , 	D(LCTL), T(Z), U(LCTL), END );
+		BABLM( BABL_REDO  , 	D(LCTL), T(Y), U(LCTL), END );
+		BABLM( BABL_CUT  , 	D(LCTL), T(X), U(LCTL), END );
+		BABLM( BABL_COPY  , 	D(LCTL), T(C), U(LCTL), END );
+		BABLM( BABL_PASTE  ,	D(LCTL), T(V), U(LCTL), END );			
+		BABLM( BABL_SELECT_ALL, D(LCTL), T(A), U(LCTL), END );	
+		BABLM( BABL_FIND,	D(LCTL),T(F),  U(LCTL),END );
 		/* BABLM(BABL_FIND_NEXT  , T(F3),END ); KDE */
-		BABLM( BABL_FIND_NEXT,	D(LCTRL),T(G),  U(LCTRL),END ); // Gnome*/
-		/* BABLM(  , D(LCTRL),T(R),  U(LCTRL),END ); KDE */
-		BABLM( BABL_FIND_REPLACE,	D(LCTRL),T(H),  U(LCTRL),END ); // Gnome*/
+		BABLM( BABL_FIND_NEXT,	D(LCTL),T(G),  U(LCTL),END ); // Gnome*/
+		/* BABLM(  , D(LCTL),T(R),  U(LCTL),END ); KDE */
+		BABLM( BABL_FIND_REPLACE,	D(LCTL),T(H),  U(LCTL),END ); // Gnome*/
 		BABLM( BABL_RUNAPP,			D(LALT),T(F2),  U(LALT),END );
 		BABLM( BABL_SWITCH_APP_NEXT,	D(LCTL),T(TAB), U(LCTL),END );
 		BABLM( BABL_SWITCH_APP_LAST,	D(LSFT),D(LCTL),T(TAB), U(LCTL), U(LSFT),END );
 		BABLM( BABL_CLOSE_APP,	D(LALT),T(F4), U(LALT),END );
-		BABLM( BABL_HELP, 		END ); 
+		//BABLM( BABL_HELP, 		END ); 
+
+#ifndef BABL_NOBROWSER
+		BABLM( BABL_BROWSER_NEW_TAB,		D(LCTL), T(T), U(LCTL),END );
+		BABLM( BABL_BROWSER_CLOSE_TAB,		D(LCTL), T(W), U(LCTL),END );
+		BABLM( BABL_BROWSER_REOPEN_LAST_TAB,		D(LCTL), D(RSFT),T(T), U(RSFT),U(LCTL),END );
+		BABLM( BABL_BROWSER_NEXT_TAB,		D(LCTL), T(TAB), U(LCTL),END );
+		BABLM( BABL_BROWSER_PREV_TAB,		D(LCTL), D(RSFT), T(TAB), U(RSFT), U(LCTL),END );
+		BABLM( BABL_BROWSER_URL_BAR,		D(LCTL), T(L), U(LCTL),END );
+		BABLM( BABL_BROWSER_FORWARD,		D(LALT), T(RIGHT), U(LALT),END );
+		BABLM( BABL_BROWSER_BACK,			D(LALT), T(LEFT), U(LALT),END );
+		BABLM( BABL_BROWSER_FIND,			D(LCTL), T(F), U(LCTL),END );
+		BABLM( BABL_BROWSER_BOOKMARK,		D(LCTL), T(D), U(LCTL),END );
+		BABLM( BABL_BROWSER_DEV_TOOLS,		D(LCTL), T(T), U(LCTL),END  ); // Chrome
+		BABLM( BABL_BROWSER_RELOAD,			D(LCTL), T(F5), U(LCTL),END ); // hard reload w/o cache
+		BABLM( BABL_BROWSER_FULLSCREEN,		T(F11),END ); //command shift F
+		BABLM( BABL_BROWSER_ZOOM_IN,		D(LCTL), T(PLUS), U(LCTL),END );
+		BABLM( BABL_BROWSER_ZOOM_OUT,		D(LCTL), T(MINS), U(LCTL),END );
+#endif
 #endif
 	 return MACRO_NONE;
 	
 #endif 
 	  
 #ifdef MAC_MODE
+	if ( BABL_MAC == shortcut) { return switch_babble_mode(MAC_MODE);  } 
+
 	 case MAC_MODE:
-		BABLM( BABL_DEL_RIGHT_1C ,	D(DEL), END );	 
-		BABLM( BABL_DEL_LEFT_WORD ,	D(LALT), T(BSPACE), U(LALT), END );
-		BABLM( BABL_DEL_RIGHT_WORD,	D(LALT), T(DEL), U(LALT), END );
 		BABLM( BABL_GO_LEFT_1C ,	T(LEFT), END );
 		BABLM( BABL_GO_RIGHT_1C,	T(RIGHT), END );
 		BABLM( BABL_GO_LEFT_WORD ,	D(LALT), T(LEFT), U(LALT), END );
 		BABLM( BABL_GO_RIGHT_WORD ,	D(LALT), T(RIGHT), U(LALT), END );
 		BABLM( BABL_GO_START_LINE ,	D(LGUI), T(LEFT), U(LGUI),  END );
-		BABLM( BABL_GO_START_DOC ,	D(LGUI),T(UP),  U(LGUI),END );
 		BABLM( BABL_GO_END_LINE ,	D(LGUI), T(RIGHT), U(LGUI), END );
+		BABLM( BABL_GO_START_DOC ,	D(LGUI),T(UP),  U(LGUI),END );
 		BABLM( BABL_GO_END_DOC ,	D(LGUI),T(DOWN),  U(LGUI),END );
 		BABLM( BABL_GO_NEXT_LINE ,	T(DOWN), END );
 		BABLM( BABL_GO_PREV_LINE ,	T(UP), END );
 		BABLM( BABL_PGDN ,		D(LALT),T(DOWN), U(LALT), END );
 		BABLM( BABL_PGUP ,  	D(LALT),T(UP), U(LALT), END );
+		BABLM( BABL_DEL_RIGHT_1C ,	D(DEL), END );	 
+		BABLM( BABL_DEL_LEFT_WORD ,	D(LALT), T(BSPACE), U(LALT), END );
+		BABLM( BABL_DEL_RIGHT_WORD,	D(LALT), T(DEL), U(LALT), END );
+		BABLM( BABL_DEL_TO_LINE_END,	D(LCTL), T(K), U(LCTL), END );// there must be another way
+		BABLM( BABL_DEL_TO_LINE_START,	D(LGUI), T(BSPACE), U(LGUI),   END );
 #ifndef BABL_MOVEMENTONLY
 		BABLM( BABL_UNDO , 		D(1), D(LGUI), T(Z), U(LGUI), END );
 		BABLM( BABL_REDO , 		D(LSFT),D(LGUI), T(Z), U(LSFT),U(LGUI), END );
@@ -158,75 +207,92 @@ But that requires even more clever preprocessor foo.
 		BABLM( BABL_SWITCH_APP_LAST ,	D(LSFT),D(LGUI),T(TAB), U(LGUI), U(LSFT),END );
 		BABLM( BABL_CLOSE_APP ,			D(LGUI),T(Q),  U(LGUI),END );
 		BABLM( BABL_HELP ,				D(LSFT),D(LGUI),T(SLASH), U(LGUI), U(LSFT),END );
+
+#ifndef BABL_NOBROWSER
+		BABLM( BABL_BROWSER_NEW_TAB,		D(LGUI), T(T), U(LGUI),END );
+		BABLM( BABL_BROWSER_CLOSE_TAB,		D(LGUI), T(W), U(LGUI),END );
+		BABLM( BABL_BROWSER_REOPEN_LAST_TAB,		D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
+		BABLM( BABL_BROWSER_NEXT_TAB,		D(LGUI),D(LALT), T(RIGHT),U(LALT), U(LGUI),END );
+		BABLM( BABL_BROWSER_PREV_TAB,		D(LGUI), D(RSFT), T(LEFT), U(RSFT), U(LGUI),END );
+		BABLM( BABL_BROWSER_URL_BAR,		D(LGUI), T(L), U(LGUI),END );
+		BABLM( BABL_BROWSER_FORWARD,		D(LGUI), T(RIGHT), U(LGUI),END );
+		BABLM( BABL_BROWSER_BACK,			D(LGUI), T(LEFT), U(LGUI),END );
+		BABLM( BABL_BROWSER_FIND,			D(LGUI), T(F), U(LGUI),END );
+		BABLM( BABL_BROWSER_BOOKMARK,		D(LGUI), T(D), U(LGUI),END );
+		//BABLM( BABL_BROWSER_DEV_TOOLS,	T(F12), U(LGUI),END  ); // EDGE 
+		BABLM( BABL_BROWSER_DEV_TOOLS,		D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END  ); // Chrome
+		// Chrome
+		BABLM( BABL_BROWSER_RELOAD,			D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
+		BABLM( BABL_BROWSER_FULLSCREEN,		D(LGUI), D(LCTL), T(P), U(LCTL), U(LGUI),END ); //command shift F
+		BABLM( BABL_BROWSER_ZOOM_IN,		D(LGUI), D(RSFT), T(EQL), U(RSFT), U(LGUI),END ); // ctr+ +
+		BABLM( BABL_BROWSER_ZOOM_OUT,		D(LGUI), T(MINS), U(LGUI),END );
+#endif
 #endif
 			
 	 return MACRO_NONE;
 #endif 	
 	
 #ifdef EMACS_MODE
+
+	if ( BABL_EMACS == shortcut  ) { return switch_babble_mode(EMACS_MODE);   }
+
 	 case EMACS_MODE:
 	 	switch(shortcut) {
 //probably should allow meta to not be ALT
-			
-			case BABL_DEL_RIGHT_1C:
-				 BABLM(  , D(LCTL), T(D), U(LCTL),END );	 
-			case BABL_DEL_LEFT_WORD:
- 				BABLM(  , D(LCTL), T(BSPACE), U(LCTL), END );
-			case BABL_DEL_RIGHT_WORD:
- 				BABLM(  , D(LALT), T(D), U(LALT), END );
-			case BABL_GO_LEFT_1C:
- 				BABLM(  , T(LEFT), END );
-			case BABL_GO_RIGHT_1C:
- 				BABLM(  , T(RIGHT), END );
-			case BABL_GO_LEFT_WORD:
- 				BABLM(  , D(LALT), T(B), U(LALT), END );
-			case BABL_GO_RIGHT_WORD:
- 				BABLM(  , D(LALT), T(F), U(LALT), END );
-			case BABL_GO_START_LINE:
- 				BABLM(  ,  D(LCTRL), T(A), U(LCTRL),  END );
-			case BABL_GO_START_DOC:
- 				BABLM(  , D(LALT), D(LSFT), T(COMM),U(LSFT), U(LALT) ,END );
-			case BABL_GO_END_LINE:
- 				BABLM(  ,  D(LCTRL), T(E), U(LCTRL), END );
-			case BABL_GO_END_DOC:
- 				BABLM(  , D(LALT), D(LSFT), T(DOT),U(LSFT), U(LALT) ,END );
-			case BABL_GO_NEXT_LINE:
- 				BABLM(  ,  D(LCTRL), T(N), U(LCTRL), END );
-			case BABL_GO_PREV_LINE:
-				BABLM(  ,  D(LCTRL), T(P), U(LCTRL), END );
-			case BABL_PGDN:
- 				BABLM(  ,D(LCTRL), T(V), U(LCTRL), END );
-			case BABL_PGUP:
-				BABLM(  ,  D(LALT), T(V), U(LALT), END );
+
+		BABLM( BABL_GO_LEFT_1C,			T(LEFT), END );
+		BABLM( BABL_GO_RIGHT_1C, 		T(RIGHT), END );
+		BABLM( BABL_GO_LEFT_WORD, 		D(LALT), T(B), U(LALT), END );
+		BABLM( BABL_GO_RIGHT_WORD ,		D(LALT), T(F), U(LALT), END );
+		BABLM( BABL_GO_START_LINE ,  	D(LCTL), T(A), U(LCTL),  END );
+		BABLM( BABL_GO_END_LINE ,  		D(LCTL), T(E), U(LCTL), END );
+		BABLM( BABL_GO_START_DOC , 		D(LALT), D(LSFT), T(COMM),U(LSFT), U(LALT) ,END );
+		BABLM( BABL_GO_END_DOC , 		D(LALT), D(LSFT), T(DOT), U(LSFT), U(LALT) ,END );
+		BABLM( BABL_GO_NEXT_LINE , 		D(LCTL), T(N), U(LCTL), END );
+		BABLM( BABL_GO_PREV_LINE ,  	D(LCTL), T(P), U(LCTL), END );
+		BABLM( BABL_PGDN ,				D(LCTL), T(V), U(LCTL), END );
+		BABLM( BABL_PGUP ,  			D(LALT), T(V), U(LALT), END );
+		BABLM( BABL_DEL_RIGHT_1C, 		D(LCTL), T(D), U(LCTL),END );	 
+		BABLM( BABL_DEL_LEFT_WORD , 	D(LCTL), T(BSPACE), U(LCTL), END );
+		BABLM( BABL_DEL_RIGHT_WORD , 	D(LALT), T(D), U(LALT), END );
+		BABLM( BABL_DEL_TO_LINE_END,	D(LCTL), T(K), U(LCTL), END ); 
+		BABLM( BABL_DEL_TO_LINE_START,	T(ESC),  T(0), D(LCTL), T(K), U(LCTL),  END );
 #ifndef BABL_MOVEMENTONLY
-			case BABL_UNDO:
-					BABLM(  , D(LCTL), T(X), U(LCTL),T(C), END );
-			case BABL_REDO:
- 					BABLM(  , D(LCTL), T(X), U(LCTL),T(C), END ); // arguably
-			case BABL_CUT:
- 					BABLM(  , D(LCTL), T(W), U(LCTL), END );
-			case BABL_COPY:
- 					BABLM(  , D(LALT), T(W), U(LALT), END ); //really?
-			case BABL_PASTE:
- 					BABLM(  ,  D(LCTL), T(Y), U(LCTL), END );			
-			case BABL_SELECT_ALL:
- 					BABLM(  ,D(LCTL), T(X), U(LCTL),T(H), END );	 
- 			case BABL_FIND:
- 				BABLM(  , D(LCTRL), T(S), U(LCTRL),END );
-			case BABL_FIND_NEXT:
- 				BABLM(  , D(LCTRL), T(S), U(LCTRL),END );
-			case BABL_FIND_REPLACE:
- 				BABLM(  ,  D(LALT),D(LSFT), T(5),U(LSFT),  U(LALT), END );
-			case BABL_RUNAPP:
-				BABLM(  , D(LALT), T(X), U(LALT),T(S),T(H),T(E),T(L),T(L),END );// arguably
-			case BABL_SWITCH_APP_NEXT:
-				BABLM(  , D(LCTL), T(X), U(LCTL),T(RIGHT), END ); // arguably
-			case BABL_SWITCH_APP_LAST:
-				BABLM(  , D(LCTL), T(X), U(LCTL),T(LEFT), END ); // arguably
-	 		case BABL_CLOSE_APP:
-				BABLM(  ,D(LCTL), T(X), U(LCTL),T(C),END );
-	 		case BABL_HELP:
-				BABLM(  , D(LCTL),T(H), U(LCTL),T(A),END); // start search in help
+		BABLM( BABL_UNDO , 		D(LCTL), T(X), U(LCTL),T(C), END );
+		BABLM( BABL_REDO , 		D(LCTL), T(X), U(LCTL),T(C), END ); // arguably
+		BABLM( BABL_CUT , 		D(LCTL), T(W), U(LCTL), END );
+		BABLM( BABL_COPY , 		D(LALT), T(W), U(LALT), END ); //really?
+		BABLM( BABL_PASTE ,  	D(LCTL), T(Y), U(LCTL), END );			
+		BABLM( BABL_SELECT_ALL ,D(LCTL), T(X), U(LCTL),T(H), END );	 
+		BABLM( BABL_FIND , 		D(LCTL), T(S), U(LCTL),END );
+		BABLM( BABL_FIND_NEXT , D(LCTL), T(S), U(LCTL),END );
+		BABLM( BABL_FIND_REPLACE , 		D(LALT),D(LSFT), T(5),U(LSFT),  U(LALT), END );
+		BABLM( BABL_RUNAPP , 			D(LALT), T(X), U(LALT),T(S),T(H),T(E),T(L),T(L),END );// arguably
+		BABLM( BABL_SWITCH_APP_NEXT , 	D(LCTL), T(X), U(LCTL),T(RIGHT), END ); // arguably
+		BABLM( BABL_SWITCH_APP_LAST , 	D(LCTL), T(X), U(LCTL),T(LEFT), END ); // arguably
+		BABLM( BABL_CLOSE_APP ,			D(LCTL), T(X), U(LCTL),T(C),END );
+		BABLM( BABL_HELP , 				D(LCTL),T(H), U(LCTL),T(A),END); // start search in help
+#ifndef BABL_NOBROWSER
+/* you get to figure w3 out 
+		BABLM( BABL_BROWSER_NEW_TAB,		D(LGUI), T(T), U(LGUI),END );
+		BABLM( BABL_BROWSER_CLOSE_TAB,		D(LGUI), T(W), U(LGUI),END );
+		BABLM( BABL_BROWSER_REOPEN_LAST_TAB,		D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
+		BABLM( BABL_BROWSER_NEXT_TAB,		D(LGUI),D(LALT), T(RIGHT),U(LALT), U(LGUI),END );
+		BABLM( BABL_BROWSER_PREV_TAB,		D(LGUI), D(RSFT), T(LEFT), U(RSFT), U(LGUI),END );
+		BABLM( BABL_BROWSER_URL_BAR,		D(LGUI), T(L), U(LGUI),END );
+		BABLM( BABL_BROWSER_FORWARD,		D(LGUI), T(RIGHT), U(LGUI),END );
+		BABLM( BABL_BROWSER_BACK,			D(LGUI), T(LEFT), U(LGUI),END );
+		BABLM( BABL_BROWSER_FIND,			D(LGUI), T(F), U(LGUI),END );
+		BABLM( BABL_BROWSER_BOOKMARK,		D(LGUI), T(D), U(LGUI),END );
+		//BABLM( BABL_BROWSER_DEV_TOOLS,	T(F12), U(LGUI),END  ); // EDGE 
+		BABLM( BABL_BROWSER_DEV_TOOLS,		D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END  ); // Chrome
+		// Chrome
+		BABLM( BABL_BROWSER_RELOAD,			D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
+		BABLM( BABL_BROWSER_FULLSCREEN,		D(LGUI), D(LCTL), T(P), U(LCTL), U(LGUI),END ); //command shift F
+		BABLM( BABL_BROWSER_ZOOM_IN,		D(LGUI), D(RSFT), T(EQL), U(RSFT), U(LGUI),END ); // ctr+ +
+		BABLM( BABL_BROWSER_ZOOM_OUT,		D(LGUI), T(MINS), U(LGUI),END );
+*/
+#endif
 #endif
 				break;
 	 
@@ -234,25 +300,31 @@ But that requires even more clever preprocessor foo.
 	}
 	
 #endif 	
+
+
 #ifdef VI_MODE
+	if ( BABL_VI == shortcut  ) { return switch_babble_mode(VI_MODE);   }
 	 case VI_MODE:
-//assume esc is already called
+// you have to track the modes yourself. Otherwise motion is awful (bell, bell, bell)
+			
 			
-			BABLM( BABL_DEL_RIGHT_1C ,  T(X),END );	 
-			BABLM( BABL_DEL_LEFT_WORD ,  T(D),T(G),T(E),END );
-			BABLM( BABL_DEL_RIGHT_WORD ,  T(D),T(W),END );
 			BABLM( BABL_GO_LEFT_1C , T(H), END );
 			BABLM( BABL_GO_RIGHT_1C , T(L), END );
 			BABLM( BABL_GO_LEFT_WORD , T(B),END );
 			BABLM( BABL_GO_RIGHT_WORD , T(W), END );
 			BABLM( BABL_GO_START_LINE , D(LSFT), T(6),U(LSFT), END ); //^
-			BABLM( BABL_GO_START_DOC , T(G),T(G) ,END );
 			BABLM( BABL_GO_END_LINE ,   D(LSFT), T(4),U(LSFT) , END ); //$
+			BABLM( BABL_GO_START_DOC , T(G),T(G) ,END );
 			BABLM( BABL_GO_END_DOC , D(LSFT), T(G),U(LSFT),END );
 			BABLM( BABL_GO_NEXT_LINE ,  T(J), END );
 			BABLM( BABL_GO_PREV_LINE,  T(K), END );
-			BABLM( BABL_PGDN ,D(LCTRL), T(F), U(LCTRL), END );
-			BABLM( BABL_PGUP , D(LCTRL), T(B), U(LCTRL), END );
+			BABLM( BABL_PGDN ,D(LCTL), T(F), U(LCTL), END );
+			BABLM( BABL_PGUP , D(LCTL), T(B), U(LCTL), END );
+			BABLM( BABL_DEL_RIGHT_1C ,  T(X),END );	 
+			BABLM( BABL_DEL_LEFT_WORD ,  T(D),T(G),T(E),END );
+			BABLM( BABL_DEL_RIGHT_WORD ,  T(D),T(W),END );
+			BABLM( BABL_DEL_TO_LINE_END,	T(D),D(LSFT), T(4),U(LSFT) ,END ); // d$
+			BABLM( BABL_DEL_TO_LINE_START,	T(D),D(LSFT), T(6),U(LSFT) ,END ); 
 #ifndef BABL_MOVEMENTONLY
 			BABLM( BABL_UNDO , T(U), END );
  			BABLM( BABL_REDO ,  D(LCTL), T(R), U(LCTL), END );  
@@ -268,6 +340,27 @@ But that requires even more clever preprocessor foo.
 			BABLM( BABL_SWITCH_APP_LAST		,END );
 			BABLM(BABL_CLOSE_APP,	D(LSFT), T(SCLN),U(LSFT), T(Q), D(RSFT), T(1),U(RSFT), END );
 			BABLM(BABL_HELP,	 D(LSFT), T(SCLN),U(LSFT),T(H),END); // start search in help
+#ifndef BABL_NOBROWSER
+/* you get to figure this out 
+		BABLM( BABL_BROWSER_NEW_TAB,		D(LGUI), T(T), U(LGUI),END );
+		BABLM( BABL_BROWSER_CLOSE_TAB,		D(LGUI), T(W), U(LGUI),END );
+		BABLM( BABL_BROWSER_REOPEN_LAST_TAB,		D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
+		BABLM( BABL_BROWSER_NEXT_TAB,		D(LGUI),D(LALT), T(RIGHT),U(LALT), U(LGUI),END );
+		BABLM( BABL_BROWSER_PREV_TAB,		D(LGUI), D(RSFT), T(LEFT), U(RSFT), U(LGUI),END );
+		BABLM( BABL_BROWSER_URL_BAR,		D(LGUI), T(L), U(LGUI),END );
+		BABLM( BABL_BROWSER_FORWARD,		D(LGUI), T(RIGHT), U(LGUI),END );
+		BABLM( BABL_BROWSER_BACK,			D(LGUI), T(LEFT), U(LGUI),END );
+		BABLM( BABL_BROWSER_FIND,			D(LGUI), T(F), U(LGUI),END );
+		BABLM( BABL_BROWSER_BOOKMARK,		D(LGUI), T(D), U(LGUI),END );
+		//BABLM( BABL_BROWSER_DEV_TOOLS,	T(F12), U(LGUI),END  ); // EDGE 
+		BABLM( BABL_BROWSER_DEV_TOOLS,		D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END  ); // Chrome
+		// Chrome
+		BABLM( BABL_BROWSER_RELOAD,			D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
+		BABLM( BABL_BROWSER_FULLSCREEN,		D(LGUI), D(LCTL), T(P), U(LCTL), U(LGUI),END ); //command shift F
+		BABLM( BABL_BROWSER_ZOOM_IN,		D(LGUI), T(PLUS), U(LGUI),END );
+		BABLM( BABL_BROWSER_ZOOM_OUT,		D(LGUI), T(MINS), U(LGUI),END );
+*/
+#endif
 #endif	 
 		 return MACRO_NONE;	
 #endif
@@ -278,37 +371,62 @@ But that requires even more clever preprocessor foo.
 #ifdef READMUX_MODE
 // Readline command line editing + tmux windowing
 // I havent decided how much to do readline and how much tmux
+	if ( BABL_READLINE == shortcut  ) { switch_babble_mode(READMUX_MODE); return MACRO_NONE; }
 	case READMUX_MODE:		
-		BABLM( BABL_DEL_RIGHT_1C , D(LCTL), T(D), U(LCTL),END );	 
+		
+		BABLM( BABL_GO_LEFT_1C , 		T(LEFT), END );
+		BABLM( BABL_GO_RIGHT_1C , 		T(RIGHT), END );
+		BABLM( BABL_GO_LEFT_WORD , 		D(LALT), T(B), U(LALT), END );
+		BABLM( BABL_GO_RIGHT_WORD , 	D(LALT), T(F), U(LALT), END );
+		BABLM( BABL_GO_START_LINE ,  	D(LCTL), T(A), U(LCTL),  END );
+		BABLM( BABL_GO_END_LINE ,  		D(LCTL), T(E), U(LCTL), END );
+		//BABLM( BABL_GO_START_DOC		,END );// tmux?
+		//BABLM( BABL_GO_END_DOC		,END );  // tmux?
+		BABLM( BABL_GO_NEXT_LINE ,  	D(LCTL), T(N), U(LCTL), END );
+		BABLM( BABL_GO_PREV_LINE ,  	D(LCTL), T(P), U(LCTL), END );
+		BABLM( BABL_PGDN , 			T(PGDN), END );
+		BABLM( BABL_PGUP , 			T(PGUP), END );
+		BABLM( BABL_DEL_RIGHT_1C , 	D(LCTL), T(D), U(LCTL),END );	 
 		BABLM( BABL_DEL_LEFT_WORD , D(LCTL), T(W), U(LCTL), END );
-		BABLM( BABL_DEL_RIGHT_WORD , D(LALT), T(D), U(LALT), END );
-		BABLM( BABL_GO_LEFT_1C , T(LEFT), END );
-		BABLM( BABL_GO_RIGHT_1C , T(RIGHT), END );
-		BABLM( BABL_GO_LEFT_WORD , D(LALT), T(B), U(LALT), END );
-		BABLM( BABL_GO_RIGHT_WORD , D(LALT), T(F), U(LALT), END );
-		BABLM( BABL_GO_START_LINE ,  D(LCTRL), T(A), U(LCTRL),  END );
-		BABLM( BABL_GO_START_DOC		,END );// tmux?
-		BABLM( BABL_GO_END_LINE ,  D(LCTRL), T(E), U(LCTRL), END );
-		BABLM( BABL_GO_END_DOC		,END );  // tmux?
-		BABLM( BABL_GO_NEXT_LINE ,  D(LCTRL), T(N), U(LCTRL), END );
-		BABLM( BABL_GO_PREV_LINE ,  D(LCTRL), T(P), U(LCTRL), END );
-		BABLM( BABL_PGDN , T(PGDN), END );
-		BABLM( BABL_PGUP , T(PGUP), END );
+		BABLM( BABL_DEL_RIGHT_WORD , 	D(LALT), T(D), U(LALT), END );
+		BABLM( BABL_DEL_TO_LINE_END,	D(LCTL), T(K), U(LCTL), END ); 
+		BABLM( BABL_DEL_TO_LINE_START,	D(LCTL), T(U), U(LCTL),  END );
 #ifndef BABL_MOVEMENTONLY
-		BABLM( BABL_UNDO , D(LALT), T(R), U(LALT) , END );
-		BABLM( BABL_REDO , D(LCTL), T(X), U(LCTL),T(C), END ); // arguably
-		BABLM( BABL_CUT , D(LCTL), T(K), U(LCTL), END ); // wrong half the time
-		BABLM( BABL_COPY		,END ); 
-		BABLM( BABL_PASTE ,  D(LCTL), T(Y), U(LCTL), END );			
-		BABLM( BABL_SELECT_ALL ,D(LCTL), T(A), T(K), T(Y), U(LCTL) , END );	 
-		BABLM( BABL_FIND ,  D(LCTRL), T(R), U(LCTRL), END ); // search history
-		BABLM(BABL_FIND_NEXT,  D(LCTRL), T(S), U(LCTRL), END );
-		BABLM( BABL_FIND_REPLACE		,END ); 
-		BABLM( BABL_RUNAPP ,  D(LCTRL), T(B), U(LCTRL),  T(C),END );  //tmux
-		BABLM( BABL_SWITCH_APP_NEXT ,  D(LCTRL), T(B), U(LCTRL),  T(N),END );  //tmux
-		BABLM( BABL_SWITCH_APP_LAST ,  D(LCTRL), T(B), U(LCTRL),  T(P),END );  //tmux
-		BABLM( BABL_CLOSE_APP , D(LCTRL), T(B), U(LCTRL),  T(D),END); // usually what I want
-		BABLM( BABL_HELP		,END ); 
+		BABLM( BABL_UNDO , 			D(LALT), T(R), U(LALT) , END );
+		BABLM( BABL_REDO , 			D(LCTL), T(X), U(LCTL),T(C), END ); // arguably
+		BABLM( BABL_CUT , 			D(LCTL), T(K), U(LCTL), END ); // wrong half the time
+		//BABLM( BABL_COPY		,END ); 
+		BABLM( BABL_PASTE ,  		D(LCTL), T(Y), U(LCTL), END );			
+		BABLM( BABL_SELECT_ALL ,	D(LCTL), T(A), T(K), T(Y), U(LCTL) , END );	 
+		BABLM( BABL_FIND ,  		D(LCTL), T(R), U(LCTL), END ); // search history
+		BABLM(BABL_FIND_NEXT,  		D(LCTL), T(S), U(LCTL), END );
+		//BABLM( BABL_FIND_REPLACE		,END ); 
+		BABLM( BABL_RUNAPP ,  		D(LCTL), T(B), U(LCTL),  T(C),END );  //tmux
+		BABLM( BABL_SWITCH_APP_NEXT ,  D(LCTL), T(B), U(LCTL),  T(N),END );  //tmux
+		BABLM( BABL_SWITCH_APP_LAST ,  D(LCTL), T(B), U(LCTL),  T(P),END );  //tmux
+		BABLM( BABL_CLOSE_APP , 		D(LCTL), T(B), U(LCTL),  T(D),END); // usually what I want
+		// BABLM( BABL_HELP		,END ); 
+#ifndef BABL_NOBROWSER
+/* Add lynx shortcuts? 
+		BABLM( BABL_BROWSER_NEW_TAB,		D(LGUI), T(T), U(LGUI),END );
+		BABLM( BABL_BROWSER_CLOSE_TAB,		D(LGUI), T(W), U(LGUI),END );
+		BABLM( BABL_BROWSER_REOPEN_LAST_TAB,		D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
+		BABLM( BABL_BROWSER_NEXT_TAB,		D(LGUI),D(LALT), T(RIGHT),U(LALT), U(LGUI),END );
+		BABLM( BABL_BROWSER_PREV_TAB,		D(LGUI), D(RSFT), T(LEFT), U(RSFT), U(LGUI),END );
+		BABLM( BABL_BROWSER_URL_BAR,		D(LGUI), T(L), U(LGUI),END );
+		BABLM( BABL_BROWSER_FORWARD,		D(LGUI), T(RIGHT), U(LGUI),END );
+		BABLM( BABL_BROWSER_BACK,			D(LGUI), T(LEFT), U(LGUI),END );
+		BABLM( BABL_BROWSER_FIND,			D(LGUI), T(F), U(LGUI),END );
+		BABLM( BABL_BROWSER_BOOKMARK,		D(LGUI), T(D), U(LGUI),END );
+		//BABLM( BABL_BROWSER_DEV_TOOLS,	T(F12), U(LGUI),END  ); // EDGE 
+		BABLM( BABL_BROWSER_DEV_TOOLS,		D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END  ); // Chrome
+		// Chrome
+		BABLM( BABL_BROWSER_RELOAD,			D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
+		BABLM( BABL_BROWSER_FULLSCREEN,		D(LGUI), D(LCTL), T(P), U(LCTL), U(LGUI),END ); //command shift F
+		BABLM( BABL_BROWSER_ZOOM_IN,		D(LGUI), T(PLUS), U(LGUI),END );
+		BABLM( BABL_BROWSER_ZOOM_OUT,		D(LGUI), T(MINS), U(LGUI),END );
+*/
+#endif
 #endif
 		
 	return MACRO_NONE;
diff --git a/keyboards/handwired/MS-sculpt-mobile/babblePaste.h b/keyboards/handwired/MS-sculpt-mobile/babblePaste.h
index 313fa80ec..67153fb0d 100644
--- a/keyboards/handwired/MS-sculpt-mobile/babblePaste.h
+++ b/keyboards/handwired/MS-sculpt-mobile/babblePaste.h
@@ -10,6 +10,8 @@ and jeebak & algernon's keymap
 #ifndef _babblePaste_h_included__
 #define _babblePaste_h_included__
 #include "action_layer.h"
+#include "quantum_keycodes.h"
+#include "config.h"
 
 #ifdef USE_BABLPASTE
 
@@ -39,23 +41,28 @@ and jeebak & algernon's keymap
 /* Macros handled by babblepaste. Most should be available for all platforms.
 Whatever isn't defined will NOP  */
 enum  {
- 
-	// Movement
-	BABL_DEL_RIGHT_1C= BABL_START_NUM,
-	BABL_DEL_LEFT_WORD,
-	BABL_DEL_RIGHT_WORD,
-	BABL_GO_LEFT_1C,
+// Movement macros
+	// left & right
+	BABL_GO_LEFT_1C= BABL_START_NUM,
 	BABL_GO_RIGHT_1C,
-	BABL_GO_LEFT_WORD,
+	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_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
 #ifndef BABL_MOVEMENTONLY
 	   // Cut & Paste
     BABL_UNDO,
@@ -64,20 +71,142 @@ enum  {
 	BABL_COPY,
 	BABL_PASTE,
 	BABL_SELECT_ALL,
-	// GUI or app
+	/* 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_REPLACE,
+		// GUI or app
 	BABL_RUNAPP,
 	BABL_SWITCH_APP_NEXT,
 	BABL_SWITCH_APP_LAST, // previous
 	BABL_CLOSE_APP,
-	BABL_HELP
+	BABL_HELP,
+
+#ifndef BABL_NOBROWSER
+	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,
+	
+#endif
+
 #endif
+// Macros for mode switching
+#ifdef MS_MODE
+	BABL_WINDOWS,
+#endif
+#ifdef MAC_MODE
+	BABL_MAC,
+#endif
+#ifdef LINUX_MODE
+	BABL_LINUX,
+#endif
+#ifdef EMACS_MODE
+	BABL_EMACS,
+#endif
+#ifdef VI_MODE
+	BABL_VI,
+#endif
+#ifdef READMUX_MODE
+	BABL_READLINE,
+#endif
+
+
 };
 
-// How many macros/ how many array elements?
-#define BABL_NUM_MACROS 28
+// BUG, used to jump to babble functiion. Surely there is a way to calculate size of enum? 
+#define BABL_NUM_MACROS 48 + 4 // 48 + # of defined modes. 
+
+/* And all the shorthand keymap ready versions */
+// First the mode switching macros
+#ifdef MS_MODE
+#define B_WIN  	M(BABL_WINDOWS)
+#endif
+#ifdef MAC_MODE
+#define B_MAC 	M(BABL_MAC)
+#endif
+#ifdef LINUX_MODE
+#define B_LNX 	M(BABL_LINUX)
+#endif
+#ifdef EMACS_MODE
+#define B_EMAX  M(BABL_EMACS)
+#endif
+#ifdef VI_MODE
+#define B_VI  	M(BABL_VI)
+#endif
+#ifdef READMUX_MODE
+#define B_READ  M(BABL_READLINE)
+#endif
+
+// and all the movement & action. 
+
+#define B_L1C  M(BABL_GO_LEFT_1C)
+#define B_R1C  M(BABL_GO_RIGHT_1C)
+#define B_L1W  M(BABL_GO_LEFT_WORD)
+#define B_R1W  M(BABL_GO_RIGHT_WORD)
+#define B_GSOL  M(BABL_GO_START_LINE)
+#define B_GEOL  M(BABL_GO_END_LINE)
+#define B_GTOP  M(BABL_GO_START_DOC)
+#define B_GEND  M(BABL_GO_END_DOC)
+#define B_DOWN  M(BABL_GO_NEXT_LINE)
+#define B_UP  M(BABL_GO_PREV_LINE)
+#define B_PGDN  M(BABL_PGDN)
+#define B_PGUP  M(BABL_PGUP)
+//#define B_BKSP  M(BABL_DEL_LEFT_1C) == backspace so why bother. 
+#define B_DEL  M(BABL_DEL_RIGHT_1C) // usually = Del
+#define B_DLW  M(BABL_DEL_LEFT_WORD)
+#define B_DRW  M(BABL_DEL_RIGHT_WORD)
+#define B_DEOL  M(BABL_DEL_TO_LINE_END) // delete from cursor to end of line
+#define B_DSOL  M(BABL_DEL_TO_LINE_START) // delete from cursor to begining line
+#define B_UNDO  M(BABL_UNDO)
+#define B_REDO  M(BABL_REDO)
+#define B_CUT  M(BABL_CUT)
+#define B_COPY  M(BABL_COPY)
+#define B_PAST  M(BABL_PASTE)
+#define B_SELA  M(BABL_SELECT_ALL)
+#define B_FIND  M(BABL_FIND)
+#define B_FINDN  M(BABL_FIND_NEXT)
+#define B_FINDR  M(BABL_FIND_REPLACE)
+#define B_RAPP  M(BABL_RUNAPP)
+#define B_NAPP  M(BABL_SWITCH_APP_NEXT)
+#define B_PAPP M(BABL_SWITCH_APP_LAST) // previous
+#define B_CAPP  M(BABL_CLOSE_APP)
+#define B_HELP  M(BABL_HELP)
+#define B_NTAB  M(BABL_BROWSER_NEW_TAB)
+#define B_CTAB  M(BABL_BROWSER_CLOSE_TAB)
+#define B_ROTB  M(BABL_BROWSER_REOPEN_LAST_TAB)
+#define B_NXTB  M(BABL_BROWSER_NEXT_TAB)
+#define B_PTAB  M(BABL_BROWSER_PREV_TAB)
+#define B_NURL M(BABL_BROWSER_URL_BAR)
+#define B_BFWD  M(BABL_BROWSER_FORWARD)
+#define B_BBAK  M(BABL_BROWSER_BACK)
+#define B_BFND  M(BABL_BROWSER_FIND)
+#define B_BOOK  M(BABL_BROWSER_BOOKMARK)
+#define B_BDEV  M(BABL_BROWSER_DEV_TOOLS) // hard one to remember
+#define B_BRLD  M(BABL_BROWSER_RELOAD)
+#define B_BFUlL  M(BABL_BROWSER_FULLSCREEN)
+#define B_ZMIN  M(BABL_BROWSER_ZOOM_IN)
+#define B_ZMOT  M(BABL_BROWSER_ZOOM_OUT)
+ 
+ 
+
+
+
 
 
 /*  from action_macro.h
diff --git a/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/config.h b/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/config.h
index 7ad1b0f0f..9f9b05094 100644
--- a/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/config.h
+++ b/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/config.h
@@ -5,23 +5,28 @@
 
 #define USE_BABLPASTE
 
+// Expect to get errors if you comment a feature out and leave it in your keymap. 
+
 #ifdef USE_BABLPASTE
 //define BabblePaste maps
 // Windows. 
-//#define MS_MODE 1
-#define MAC_MODE   0
+#define MS_MODE 0
+#define MAC_MODE   1
 //aka gnome+KDE
 //#define LINUX_MODE 2 
 //#define EMACS_MODE 3
-//#define VI_MODE 4
+#define VI_MODE 4
 //#define WORDSTAR_MODE 5
 // Readline and tmux
 #define READMUX_MODE 6 
 #endif
 
 // Uncomment if you need more free flash space
-// It removes everything but cursor movement
+
+// This removes everything but cursor movement
 //#define BABL_MOVEMENTONLY
+// and this just removes browser shortcuts
+//#define BABL_NOBROWSER
 
 // place overrides here
 #endif
diff --git a/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/keymap.c b/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/keymap.c
index 3a162db86..a66282547 100644
--- a/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/keymap.c
+++ b/keyboards/handwired/MS-sculpt-mobile/keymaps/milestogo/keymap.c
@@ -14,13 +14,6 @@
 #define _TRAN 5
 
 
-
-
-// adjust babblemode default
-extern uint8_t babble_mode;
-
-
-
 enum layer_keycodes {
 QWR,
 CDH,
@@ -46,11 +39,6 @@ TRAN
 enum macro_keycodes {
 DHPASTE=1,
 VIBRK,
-B_LNX,
-B_WIN,
-B_MAC,
-B_VI,
-B_READ ,
 };
 
 
@@ -115,24 +103,38 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   ____,    KC_SCLN, KC_TILDE,  KC_COLN,  KC_TILDE,  KC_PIPE,          KC_DLR, KC_ASTR, ____,  KC_DOT ,   KC_SLSH,     ____, ____, ____,\
   ____,     ____, ____, ____, ____, ____, ____, ____, ____,   ____
 ),
+/* 
+* |ESC | Win| MAC|RdLn| VI |    |    |    |    |    |    |    |    |    |    |    |
+*  -------------------------------------------------------------------------------'
+* |     |    |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |  0 |  - |  = |Bakspace| Del|
+* ---------------------------------------------------------------------------
+* | tab  |  q |  w |Find|    |pTab |DSOL|DelW| Up |DelW|DEOL|  [ |  ] |  \    |    |
+*  -------------------------------------------------------------------------------'
+* |Bak/Mov|  a |  s |  d |    |nTab |GSOL| <- | Dwn | -> | EOL |  ' | enter     |PgUp|
+* --------------------------------------------------------------------------------	
+* |Lsft    |Undo| Cut|Copy|Pste|  b |  n |  m |  , |  . |  / |      Rsft| Up| PgDn|
+* ---------------------------------------------------------------------------------	
+* |Lctl   |Lgui  |Lalt |       Space/Sym      | GUI |  Sym |  Rctl |Left|Down|Rght|
+* ---------------------------------------------------------------------------------	
+*/
 
 [_MOV] = KEYMAP (\
-  ____,     M(B_WIN),M(B_MAC),M(B_READ), M(B_VI), ____, ____, ____, ____,   ____, ____,    ____,     ____,   ____,    ____,     ____,  \
-  ____,     M(BABL_UNDO), ____, ____, ____, ____, ____, ____, ____,   ____, ____,    ____,     ____,   ____,    ____,   \
-  ____,     ____,RGUI(KC_TAB), ____,  ____, RCTL(KC_B), ____, M(BABL_DEL_LEFT_WORD), KC_UP,   M(BABL_DEL_RIGHT_WORD),   ____,  ____,     ____,   ____, \
-  ____,     RCTL(KC_A), KC_S, RCTL(KC_K), RCTL(KC_E), ____,   M(BABL_GO_START_LINE), KC_LEFT,KC_DOWN, KC_RIGHT,  M(BABL_GO_END_LINE), ____,____,____,\
-  ____,     ____, ____, ____, ____, ____, ____, ____, ____,   ____, ____,    ____,     ____,   ____, \
+  ____,    B_MAC,B_WIN,B_READ, B_VI, ____, ____, ____, ____,   ____, ____,    ____,     ____,   ____,    ____,     ____,  \
+  ____,      ____, B_PAPP, B_NAPP, ____, ____,      ____, ____, ____,   ____, ____,    ____,     ____,   ____,    ____,   \
+  ____,     B_UNDO, ____, B_BFND, ____, B_PTAB,     B_DSOL, B_DLW, B_UP,   B_DRW, B_DEOL,  ____,  ____,   ____, \
+  ____,     B_SELA, B_BRLD, ____, ____, B_NXTB,     B_GSOL, B_L1C, B_DOWN, B_R1C,B_GEOL,   ____, ____, ____,\
+  ____,     B_UNDO,B_CUT, B_COPY, B_PAST, B_PAST,    ____, ____, ____, ____, ____,       ____,  ____,   ____, \
   ____,     ____, ____, ____, ____, ____, ____, ____, ____,   ____
 ),
 
 [_TRAN] = KEYMAP (\
   ____,     ____, ____, ____, ____, ____, ____, ____, ____,   ____, ____,    ____,     ____,   ____,    ____,     ____,  \
-  ____,     ____, ____, ____, ____, ____, ____, ____, ____,   ____, ____,    ____,     ____,   ____,    ____,   \
-  ____,     ____, ____, ____, ____, ____, ____, ____, ____,   ____, ____,    ____,     ____,   ____, \
-  ____,     ____, ____, ____, ____, ____, ____, ____, ____,   ____, ____,    ____,     ____,   ____, \
-  ____,     ____, ____, ____, ____, ____, ____, ____, ____,   ____, ____,    ____,     ____,   ____, \
-  ____,     ____, ____, ____, ____, ____, ____, ____, ____,   ____
-)
+  ____,     ____, ____, ____, ____, ____,      ____, ____, ____, ____, ____,    ____, ____,   ____, ____,   \
+  ____,     ____, ____, ____, ____, ____,      ____, ____, ____, ____, ____,    ____, ____,   ____, \
+  ____,     ____, ____, ____, ____, ____,      ____, ____, ____, ____, ____,    ____, ____,   ____, \
+  ____,     ____, ____, ____, ____, ____,      ____, ____, ____, ____, ____,    ____, ____,   ____, \
+  ____,     ____, ____, ____, ____, ____,      ____, ____, ____, ____
+) 
 };
 
 const uint16_t PROGMEM fn_actions[] = {
@@ -188,6 +190,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 {
 
 /* If this is in the range of BABL macros, call a separate function */
+/* Any clever remapping with modifiers should happen here e.g. shift bablkey does opposite*/
 #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?
@@ -235,31 +238,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 
 
 
- 
-#ifdef USE_BABLPASTE
-
-#ifdef LINUX_MODE
-	case B_LNX:
-		return switch_babble_mode(LINUX_MODE);
-#endif
-#ifdef MS_MODE	
-	case B_WIN:
-		return switch_babble_mode(MS_MODE);
-#endif
-#ifdef MAC_MODE
-	case B_MAC:
-		return switch_babble_mode(MAC_MODE);
-#endif
-#ifdef VI_MODE
-	case B_VI:
-		return switch_babble_mode(VI_MODE);
-#endif
-#ifdef READMUX_MODE
-	case B_READ:
-		return switch_babble_mode(READMUX_MODE);
-#endif
-#endif
-
 
 	default:
     	return MACRO_NONE;
@@ -286,10 +264,6 @@ void led_set_user(uint8_t usb_led) {
 }
 
 
-macro_t* switch_babble_mode( uint8_t id) {
- babble_mode= id;
- return MACRO_NONE; //less typing above
-}
 
 
 
-- 
2.39.5