You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					124 lines
				
				3.6 KiB
			
		
		
			
		
	
	
					124 lines
				
				3.6 KiB
			| 
								 
											9 years ago
										 
									 | 
							
								 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. 
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								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. 
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								###To use the library
							 | 
						||
| 
								 | 
							
								1) Paste the following into your config.h. 
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								//////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
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								// Readline and tmux
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								// READMUX_MODE 2 
							 | 
						||
| 
								 | 
							
								// WORDSTAR_MODE 5
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								// Uncomment these to remove options an free up  flash space
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								// This removes everything but cursor movement
							 | 
						||
| 
								 | 
							
								// BABL_MOVEMENTONLY
							 | 
						||
| 
								 | 
							
								// and this just removes browser shortcuts
							 | 
						||
| 
								 | 
							
								// BABL_NOBROWSER
							 | 
						||
| 
								 | 
							
								///////End///////
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								2) Add the following to your keymap in the action_get_macro
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								//////Begin//////
							 | 
						||
| 
								 | 
							
								#ifdef USE_BABLPASTE
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								   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///////
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								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)
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											9 years ago
										 
									 | 
							
								#### 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... 
							 | 
						||
| 
								 | 
							
								
							 |