From 498455403e6b891f7ecbce98163ba2b3def25dbb Mon Sep 17 00:00:00 2001 From: Christopher Browne Date: Mon, 13 Jun 2016 19:06:32 -0400 Subject: [PATCH] Renaming planck/cbbrowne in keeping with recent naming conventions (#405) * More documentation * Saving crontab for user on host * Restructuring in keeping with recent changes to conventions * Simplify submitting my fave cbbrowne keystroke by using SEND_STRING() * Local change, not apropos to have in this repo * Simplify logic; no need to return so much --- keyboard/planck/keymaps/README.md | 3 +- keyboard/planck/keymaps/cbbrowne/.gitignore | 1 + keyboard/planck/keymaps/cbbrowne/README.md | 16 ----- keyboard/planck/keymaps/cbbrowne/compiled.hex | Bin 65775 -> 0 bytes .../planck/keymaps/cbbrowne/config_user.h | 7 ++ keyboard/planck/keymaps/cbbrowne/keymap.c | 37 +++++----- keyboard/planck/keymaps/cbbrowne/readme.md | 63 ++++++++++++++++++ 7 files changed, 89 insertions(+), 38 deletions(-) create mode 100644 keyboard/planck/keymaps/cbbrowne/.gitignore delete mode 100644 keyboard/planck/keymaps/cbbrowne/README.md delete mode 100644 keyboard/planck/keymaps/cbbrowne/compiled.hex create mode 100644 keyboard/planck/keymaps/cbbrowne/config_user.h create mode 100644 keyboard/planck/keymaps/cbbrowne/readme.md diff --git a/keyboard/planck/keymaps/README.md b/keyboard/planck/keymaps/README.md index 9152353017..c1711aed80 100644 --- a/keyboard/planck/keymaps/README.md +++ b/keyboard/planck/keymaps/README.md @@ -19,4 +19,5 @@ When adding your keymap to this list, keep it organised alphabetically (select l # List of Planck keymaps -* **default** default Planck layout \ No newline at end of file +* **default** default Planck layout +* **cbbrowne** cbbrowne's Planck layout \ No newline at end of file diff --git a/keyboard/planck/keymaps/cbbrowne/.gitignore b/keyboard/planck/keymaps/cbbrowne/.gitignore new file mode 100644 index 0000000000..0cf0c6cc56 --- /dev/null +++ b/keyboard/planck/keymaps/cbbrowne/.gitignore @@ -0,0 +1 @@ +compiled.hex diff --git a/keyboard/planck/keymaps/cbbrowne/README.md b/keyboard/planck/keymaps/cbbrowne/README.md deleted file mode 100644 index 323e9a8596..0000000000 --- a/keyboard/planck/keymaps/cbbrowne/README.md +++ /dev/null @@ -1,16 +0,0 @@ -cbbrowne custom keyboard -============================== - -Due to cbbrowne@acm.org -Christopher Browne - -This was originally based on the default keyboard map, but I have been -doing sundry experimentation: - - * To figure things out about the toolset - * I'm an Emacs guy, so will be needing a fair bit of tuning - * It made sense to mess around some with keyboard maps. - - I added Workman alongside Dvorak and Colemak - - Boy, oh boy, these don't help - - I have done 30 years of learning of Emacs key mappings, and these alternative keyboards massively mess me up - - I added a keypad, originally based on keymaps/numpad.c, but mighty substantially revised, as that one seems to be rotated 90 degrees from usual conventions for number pads \ No newline at end of file diff --git a/keyboard/planck/keymaps/cbbrowne/compiled.hex b/keyboard/planck/keymaps/cbbrowne/compiled.hex deleted file mode 100644 index f5a208372a6a75182eb2e43aae68bdccf1ca8412..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65775 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 diff --git a/keyboard/planck/keymaps/cbbrowne/config_user.h b/keyboard/planck/keymaps/cbbrowne/config_user.h new file mode 100644 index 0000000000..de46ec6aaa --- /dev/null +++ b/keyboard/planck/keymaps/cbbrowne/config_user.h @@ -0,0 +1,7 @@ +/* cbbrowne user configuration */ + +#define randadd 53 +#define randmul 181 +#define randmod 167 + + diff --git a/keyboard/planck/keymaps/cbbrowne/keymap.c b/keyboard/planck/keymaps/cbbrowne/keymap.c index 250d412ced..482cf63e11 100644 --- a/keyboard/planck/keymaps/cbbrowne/keymap.c +++ b/keyboard/planck/keymaps/cbbrowne/keymap.c @@ -2,6 +2,8 @@ #ifdef BACKLIGHT_ENABLE #include "backlight.h" #endif +#include "config_user.h" +#include "quantum.h" /* Each layer is given a name to aid in readability, which is then used in the keymap matrix below. The underscores do not denote @@ -19,26 +21,25 @@ /* Things I did not like about the default mapping - - I find control too hard to get to. I think I'll want it on a - left finger. Gonna need to lose something to do that... - - Almost certainly, KC_LCTL should be on [2][1] - - having dash on [lower-j] is a bit nonintuitive, but may be OK + - I found control too hard to get to. I use it more than Tab, so + switched it there. + - Having dash on [lower-j] is a bit nonintuitive, but may be OK - I'll bet I should switch ESC/TAB - I'm suspicious that I want to shift M(0) from [4][1] to [4][2], and shift ESC off the first column so KC_LCTL and KC_LALT can be on the first column. - - I think I wanna swap ' and ENTER + - I needed to swap ' and ENTER - All of the above are done :-) - - I'm keeping Colemak and Dvorak around for reference, and added - Workman just for fun. They're useless to me, though. + - Dropped out support for Dvorak and friends. They aren't + improvements to me */ /* Some interesting things implemented - - There is a macro that writes out "cbbrowne" just because I could + - There is a macro that writes out "cbbrowne" to show that I could - There is a (somewhat cruddy) linear congruential random number generator. - I would like to be seeding it with clock info to make it look @@ -50,16 +51,15 @@ of the random number generator - in both, note the use of register_code()/unregister_code() to indicate the desired key + - I do indeed want a sweet number pad! */ /* Other things to do... - Need to think about what zsh and readline actions I use lots - - Wanna figure out macros, so I can put in a "cbbrowne" macro - Ought to ensure that Control-Alt-Delete is convenient enough - How about Alt-F1 thru Alt-F8? - What's the keystroke to get from X to console these days? - - I do indeed want a sweet number pad! - A layer for doing console switching would not be a bad idea */ @@ -99,10 +99,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_TRNS, DF(_KP), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} }, [_KP] = { /* Key Pad */ - {KC_ESC, M(M_USERNAME), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_KP_ENTER, KC_KP_PLUS, KC_KP_PLUS, KC_KP_ENTER, KC_BSPC}, - {KC_LCTL, M(M_RANDDIGIT), KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_MINUS, KC_7, KC_8, KC_9, KC_ENT}, - {KC_LSFT, M(M_RANDLETTER), KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_PLUS, KC_4, KC_5, KC_6, KC_DOT}, - {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QW), KC_1, KC_2, KC_3, KC_0} + {KC_ESC, M(M_USERNAME), KC_F9, KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC}, + {KC_LCTL, M(M_RANDDIGIT), KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE}, + {KC_LSFT, M(M_RANDLETTER), KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER}, + {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QW), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT} } }; @@ -110,11 +110,8 @@ const uint16_t PROGMEM fn_actions[] = { }; /* This bit of logic seeds a wee linear congruential random number generator */ - +/* lots of prime numbers everywhere... */ static uint16_t random_value = 157; -#define randadd 53 -#define randmul 181 -#define randmod 167 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { @@ -135,9 +132,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case M_USERNAME: if (record->event.pressed) { - return MACRO( I(1), T(C), T(B), T(B), T(R), T(O), T(W), T(N), T(E)); - } else { - return MACRO_NONE ; + SEND_STRING("cbbrowne"); } break; case M_RANDDIGIT: diff --git a/keyboard/planck/keymaps/cbbrowne/readme.md b/keyboard/planck/keymaps/cbbrowne/readme.md new file mode 100644 index 0000000000..edb33f483d --- /dev/null +++ b/keyboard/planck/keymaps/cbbrowne/readme.md @@ -0,0 +1,63 @@ +cbbrowne custom keyboard +============================== + +Due to cbbrowne@acm.org +Christopher Browne + +This was originally based on the default keyboard map, but I have been +doing sundry experimentation: + +1. Experiments +---------------------------------------- + + * To figure things out about the toolset + * I'm an Emacs guy, so will be needing a fair bit of tuning + * It made sense to mess around some with keyboard maps. + - I tried added Workman alongside Dvorak and Colemak + - Boy, oh boy, these don't help!!! + - I have done 30 years of learning of Emacs key mappings, and + these alternative keyboards massively mess me up + - I added a keypad, originally based on keymaps/numpad.c, but + mighty substantially revised, as that one seems to be rotated 90 + degrees from usual conventions for number pads + * The keypad layer also includes some sample "hacks" of cool things, + all using actions attached in using the function action_get_macro() + - Key [1][2] aka "q" types out my name, cbbrowne, as a fun example + of a key generating a bunch of keystrokes. The keystroke is + sufficiently inconvenient that it isn't terribly practical for me + to use it, but hey, it shows how others might use this facility + in a more useful context. + - Key [2][2] aka "a" uses a random number generator to select a digit 0-9 at random + - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random + +2. Some code structure ideas +--------------------------------------------------- + + Each layer is given a name to aid in readability, which is then + used in the keymap matrix below. The underscores do not denote + anything - you can have a layer called STUFF or any other name. + + Layer names don't all need to be of the same length, obviously, and + you could also skip them entirely and just use numbers, though that + means needing to manage the numbers. + + It is preferable to keep the symbols short so that a line worth of + key mappings fits compactly onto a line of code. It might be an + interesting idea to express the maps rotated 90%, so that you + only need to fit 4 symbols onto each line, rather than 12. + + I used enums to manage layer IDs and macro IDs so that I don't need + to care (beyond "start at 0", and arguably that's not needed) about + their values. + +3. Things I did not like about the default mapping +--------------------------------------------------------- + + * I found control too hard to get to. I use it more than Tab, so + switched it there. + * Having dash on [lower-j] is a bit nonintuitive, but may be OK + * I switched ESC/TAB/M(0) around + * I'm suspicious that I want to shift M(0) from [4][1] to [4][2], + and shift ESC off the first column so KC_LCTL and KC_LALT can + be on the first column. + * I needed to swap ' and ENTER