Merge remote-tracking branch 'jackhumbert/master' into typematrix
|
@ -12,3 +12,4 @@ tags
|
||||||
*~
|
*~
|
||||||
build/
|
build/
|
||||||
*.bak
|
*.bak
|
||||||
|
.vagrant/
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Quick Start Directions
|
||||||
|
|
||||||
|
This project includes a Vagrantfile that will allow you to build a new firmware for your keyboard very easily without major changes to your primary operating system. This also ensures that when you clone the project and perform a build, you have the exact same environment as anyone else using the Vagrantfile to build. This makes it much easier for people to help you troubleshoot any issues you encounter.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
Using the Vagrantfile in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as [VirtualBox](https://www.virtualbox.org/) (or [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware) but the (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion).
|
||||||
|
|
||||||
|
*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12.
|
||||||
|
|
||||||
|
Other than having Vagrant and Virtualbox installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start a Linux virtual machine that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
|
||||||
|
|
||||||
|
Build Firmware and Program Controller
|
||||||
|
-------------------------------------
|
||||||
|
See [doc/build.md](tmk_core/doc/build.md), or the README in the particular keyboard/* folder.
|
||||||
|
|
||||||
|
Change your keymap
|
||||||
|
------------------
|
||||||
|
See [doc/keymap.md](tmk_core/doc/keymap.md).
|
||||||
|
|
||||||
|
## Flashing the firmware
|
||||||
|
|
||||||
|
The "easy" way to flash the firmware is using a tool from your host OS like the Teensy programming app. [ErgoDox EZ](keyboard/ergodox_ez/README.md) gives a great example.
|
||||||
|
|
||||||
|
If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.
|
23
README.md
|
@ -13,6 +13,7 @@ The documentation below explains QMK customizations and elaborates on some of th
|
||||||
## Getting started
|
## Getting started
|
||||||
|
|
||||||
* **If you're looking to customize a keyboard that currently runs QMK or TMK** , find your keyboard's directory under `/keyboard/` and read the README file. This will get you all set up.
|
* **If you're looking to customize a keyboard that currently runs QMK or TMK** , find your keyboard's directory under `/keyboard/` and read the README file. This will get you all set up.
|
||||||
|
* Read the [QUICK_START.md](QUICK_START.md) if you want to hit the ground running with minimal fuss or you aren't a technical person and you just want to build the firmware with the least amount of hassle possible.
|
||||||
* If you're looking to apply this firmware to an entirely new hardware project (a new kind of keyboard), you can create your own Quantum-based project by using `./new_project.sh <project_name>`, which will create `/keyboard/<project_name>` with all the necessary components for a Quantum project.
|
* If you're looking to apply this firmware to an entirely new hardware project (a new kind of keyboard), you can create your own Quantum-based project by using `./new_project.sh <project_name>`, which will create `/keyboard/<project_name>` with all the necessary components for a Quantum project.
|
||||||
|
|
||||||
You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you.
|
You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you.
|
||||||
|
@ -46,6 +47,7 @@ Your keymap can include shortcuts to common operations (called "function actions
|
||||||
* `RGUI(kc)` - applies right GUI (command/win) to *kc*
|
* `RGUI(kc)` - applies right GUI (command/win) to *kc*
|
||||||
* `HYPR(kc)` - applies Hyper (all modifiers) to *kc*
|
* `HYPR(kc)` - applies Hyper (all modifiers) to *kc*
|
||||||
* `MEH(kc)` - applies Meh (all modifiers except Win/Cmd) to *kc*
|
* `MEH(kc)` - applies Meh (all modifiers except Win/Cmd) to *kc*
|
||||||
|
* `LCAG(kc)` - applies CtrlAltGui to *kc*
|
||||||
|
|
||||||
You can also chain these, like this:
|
You can also chain these, like this:
|
||||||
|
|
||||||
|
@ -89,6 +91,7 @@ We've added shortcuts to make common modifier/tap (mod-tap) mappings more compac
|
||||||
* `ALT_T(kc)` - is LALT when held and *kc* when tapped
|
* `ALT_T(kc)` - is LALT when held and *kc* when tapped
|
||||||
* `GUI_T(kc)` - is LGUI when held and *kc* when tapped
|
* `GUI_T(kc)` - is LGUI when held and *kc* when tapped
|
||||||
* `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
|
* `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
|
||||||
|
* `LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped
|
||||||
* `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift.
|
* `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift.
|
||||||
|
|
||||||
### Temporarily setting the default layer
|
### Temporarily setting the default layer
|
||||||
|
@ -175,3 +178,23 @@ This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happeni
|
||||||
## Bluetooth functionality
|
## Bluetooth functionality
|
||||||
|
|
||||||
This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will.
|
This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will.
|
||||||
|
|
||||||
|
## International Characters on Windows
|
||||||
|
|
||||||
|
[AutoHotkey](https://autohotkey.com) allows Windows users to create custom hotkeys amont others.
|
||||||
|
|
||||||
|
The method does not require Unicode support in the keyboard itself but depends instead of AutoHotkey running in the background.
|
||||||
|
|
||||||
|
First you need to select a modifier combination that is not in use by any of your programs.
|
||||||
|
CtrlAltWin is not used very widely and should therefore be perfect for this.
|
||||||
|
There is a macro defined for a mod-tab combo `LCAG_T`.
|
||||||
|
Add this mod-tab combo to a key on your keyboard, e.g.: `LCAG_T(KC_TAB)`.
|
||||||
|
This makes the key behave like a tab key if pressed and released immediately but changes it to the modifier if used with another key.
|
||||||
|
|
||||||
|
In the default script of AutoHotkey you can define custom hotkeys.
|
||||||
|
|
||||||
|
<^<!<#a::Send, ä
|
||||||
|
<^<!<#<+a::Send, Ä
|
||||||
|
|
||||||
|
The hotkeys above are for the combination CtrlAltGui and CtrlAltGuiShift plus the letter a.
|
||||||
|
AutoHotkey inserts the Text right of `Send, ` when this combination is pressed.
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
# -*- mode: ruby -*-
|
||||||
|
# vi: set ft=ruby :
|
||||||
|
|
||||||
|
Vagrant.configure(2) do |config|
|
||||||
|
# You can only have one config.vm.box uncommented at a time
|
||||||
|
|
||||||
|
# Comment this and uncomment another if you don't want to use the minimal Arch box
|
||||||
|
config.vm.box = "dragon788/arch-ala-elasticdog"
|
||||||
|
|
||||||
|
# VMware/Virtualbox 64 bit
|
||||||
|
# config.vm.box = "phusion/ubuntu-14.04-amd64"
|
||||||
|
#
|
||||||
|
# VMware/Virtualbox 64 bit
|
||||||
|
#config.vm.box = "puphpet/centos65-x64"
|
||||||
|
#
|
||||||
|
# The opensuse boxes don't have dfu-util in their default repositories
|
||||||
|
#
|
||||||
|
# The virtualbox version has tools issues
|
||||||
|
# VMware/Virtualbox 64 bit
|
||||||
|
#config.vm.box = "bento/opensuse-13.2-x86_64"
|
||||||
|
#
|
||||||
|
# Virtualbox only
|
||||||
|
#config.vm.box = "bento/opensuse-13.2-i386"
|
||||||
|
# config.vm.box = ""
|
||||||
|
# config.vm.box = ""
|
||||||
|
|
||||||
|
# This section allows you to customize the Virtualbox VM
|
||||||
|
# settings, ie showing the GUI or upping the memory
|
||||||
|
# or cores if desired
|
||||||
|
config.vm.provider "virtualbox" do |vb|
|
||||||
|
# Hide the VirtualBox GUI when booting the machine
|
||||||
|
vb.gui = false
|
||||||
|
# Uncomment the below lines if you want to program
|
||||||
|
# your Teensy via the VM rather than your host OS
|
||||||
|
#vb.customize ['modifyvm', :id, '--usb', 'on']
|
||||||
|
#vb.customize ['usbfilter', 'add', '0',
|
||||||
|
# '--target', :id,
|
||||||
|
# '--name', 'teensy',
|
||||||
|
# '--vendorid', '0x16c0',
|
||||||
|
# '--productid','0x0478'
|
||||||
|
# ]
|
||||||
|
# Customize the amount of memory on the VM:
|
||||||
|
vb.memory = "512"
|
||||||
|
end
|
||||||
|
|
||||||
|
# This section allows you to customize the VMware VM
|
||||||
|
# settings, ie showing the GUI or upping the memory
|
||||||
|
# or cores if desired
|
||||||
|
config.vm.provider "vmware_workstation" do |vmw|
|
||||||
|
# Hide the VMware GUI when booting the machine
|
||||||
|
vmw.gui = false
|
||||||
|
|
||||||
|
# Customize the amount of memory on the VM:
|
||||||
|
vmw.memory = "512"
|
||||||
|
end
|
||||||
|
|
||||||
|
config.vm.provider "vmware_fusion" do |vmf|
|
||||||
|
# Hide the vmfare GUI when booting the machine
|
||||||
|
vmf.gui = false
|
||||||
|
|
||||||
|
# Customize the amount of memory on the VM:
|
||||||
|
vmf.memory = "512"
|
||||||
|
end
|
||||||
|
|
||||||
|
# This script ensures the required packages for AVR programming are installed
|
||||||
|
# It also ensures the system always gets the latest updates when powered on
|
||||||
|
# If this causes issues you can run a 'vagrant destroy' and then
|
||||||
|
# add a # before ,args: and run 'vagrant up' to get a working
|
||||||
|
# non-updated box and then attempt to troubleshoot or open a Github issue
|
||||||
|
|
||||||
|
config.vm.provision "shell", run: "always", path: "avr_setup.sh", args: "-update"
|
||||||
|
|
||||||
|
config.vm.post_up_message = """
|
||||||
|
Log into the VM using 'vagrant ssh' on OSX or from Git Bash (Win)
|
||||||
|
or 'vagrant ssh-config' and Putty or Bitvise SSH or another SSH tool
|
||||||
|
|
||||||
|
Change directory (cd) to the keyboard you wish to program
|
||||||
|
(Optionally) modify your layout,
|
||||||
|
then run 'make clean'
|
||||||
|
and then 'make' to compile the .eep and .hex files.
|
||||||
|
|
||||||
|
Or you can copy and paste the example line below.
|
||||||
|
|
||||||
|
cd /vagrant; cd keyboard; cd ergodox_ez; make clean; make
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
end
|
|
@ -0,0 +1,72 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# This script will attempt to setup the Linux dependencies for compiling QMK/TMK
|
||||||
|
|
||||||
|
# This could probably go much lower, but since we are including an Arch vagrant,
|
||||||
|
# making it the first match makes sense
|
||||||
|
|
||||||
|
if [[ -n "$(type -P pacman )" ]]; then
|
||||||
|
# Arch linux and derivatives like Apricity
|
||||||
|
# Future improvements:
|
||||||
|
# Allow user to speed up package installs using powerpill/wget tweaks
|
||||||
|
# Always run the pacman mirror update script if possible when vagrant comes up
|
||||||
|
# This will ensure that users never get stalled on a horribly slow mirror
|
||||||
|
pacman -Syyu --needed --noconfirm
|
||||||
|
pacman -S --needed --noconfirm \
|
||||||
|
base-devel \
|
||||||
|
avr-gcc \
|
||||||
|
avr-binutils \
|
||||||
|
avr-libc \
|
||||||
|
dfu-util
|
||||||
|
|
||||||
|
elif [[ -n "$(type -P apt-get)" ]]; then
|
||||||
|
# Debian and derivatives
|
||||||
|
# This block performs completely non-interactive updates {{
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
export DEBCONF_NONINTERACTIVE_SEEN=true
|
||||||
|
echo "grub-pc hold" | dpkg --set-selections
|
||||||
|
apt-get -y update
|
||||||
|
apt-get -y --allow-unauthenticated upgrade \
|
||||||
|
-o Dpkg::Options::="--force-confdef" \
|
||||||
|
-o Dpkg::Options::="--force-confold"
|
||||||
|
# }}
|
||||||
|
apt-get install -y \
|
||||||
|
build-essential \
|
||||||
|
gcc \
|
||||||
|
unzip \
|
||||||
|
wget \
|
||||||
|
zip \
|
||||||
|
gcc-avr \
|
||||||
|
binutils-avr \
|
||||||
|
avr-libc \
|
||||||
|
dfu-util
|
||||||
|
|
||||||
|
elif [[ -n "$(type -P yum)" ]]; then
|
||||||
|
# Fedora, CentOS or RHEL and derivatives
|
||||||
|
yum -y makecache && yum -y update
|
||||||
|
yum -y install \
|
||||||
|
gcc \
|
||||||
|
glibc-headers \
|
||||||
|
kernel-devel \
|
||||||
|
kernel-headers \
|
||||||
|
make \
|
||||||
|
perl \
|
||||||
|
git \
|
||||||
|
wget \
|
||||||
|
avr-binutils \
|
||||||
|
avr-gcc \
|
||||||
|
avr-libc \
|
||||||
|
dfu-util
|
||||||
|
|
||||||
|
elif [[ -n "$(type -P zypper)" ]]; then
|
||||||
|
# openSUSE
|
||||||
|
zypper --non-interactive refresh && zypper --non-interactive update
|
||||||
|
zypper --non-interactive install \
|
||||||
|
git \
|
||||||
|
make \
|
||||||
|
gcc \
|
||||||
|
kernel-devel \
|
||||||
|
patch \
|
||||||
|
wget \
|
||||||
|
dfu-programmer
|
||||||
|
|
||||||
|
fi
|
|
@ -31,15 +31,14 @@ SRC = ergodox_ez.c \
|
||||||
matrix.c
|
matrix.c
|
||||||
|
|
||||||
ifdef KEYMAP
|
ifdef KEYMAP
|
||||||
SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
|
SRC := keymaps/$(KEYMAP)/keymap.c $(SRC)
|
||||||
else
|
else
|
||||||
SRC := keymaps/keymap_default.c $(SRC)
|
SRC := keymaps/default/keymap.c $(SRC)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CONFIG_H = config.h
|
CONFIG_H = config.h
|
||||||
|
|
||||||
# MCU name
|
# MCU name
|
||||||
#MCU = at90usb1287
|
|
||||||
MCU = atmega32u4
|
MCU = atmega32u4
|
||||||
|
|
||||||
# Processor frequency.
|
# Processor frequency.
|
||||||
|
@ -94,13 +93,13 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
CUSTOM_MATRIX = yes # Custom matrix file for the ErgoDox EZ
|
CUSTOM_MATRIX = yes # Custom matrix file for the ErgoDox EZ
|
||||||
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||||
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
# MIDI_ENABLE = yes # MIDI controls
|
# MIDI_ENABLE = yes # MIDI controls
|
||||||
# uNICODE_ENABLE = yes # Unicode
|
# UNICODE_ENABLE = yes # Unicode
|
||||||
|
|
||||||
|
|
||||||
# Optimize size but this may cause error "relocation truncated to fit"
|
# Optimize size but this may cause error "relocation truncated to fit"
|
||||||
|
|
|
@ -38,6 +38,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define MOUSEKEY_MAX_SPEED 3
|
#define MOUSEKEY_MAX_SPEED 3
|
||||||
#define MOUSEKEY_TIME_TO_MAX 10
|
#define MOUSEKEY_TIME_TO_MAX 10
|
||||||
|
|
||||||
|
#define TAPPING_TOGGLE 1
|
||||||
|
|
||||||
#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
|
#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
|
||||||
#define ROWS (int []){ D0, D5, B5, B6 }
|
#define ROWS (int []){ D0, D5, B5, B6 }
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,137 @@
|
||||||
|
#include "ergodox_ez.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "keymap_extras/keymap_neo2.h"
|
||||||
|
|
||||||
|
// Layer names
|
||||||
|
#define BASE 0 // default layer
|
||||||
|
#define FMU 1 // FMU layer
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Layer 0 (default)
|
||||||
|
* ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
|
||||||
|
* │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │
|
||||||
|
* ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
|
||||||
|
* │ Y │ X │ V │ L │ C │ W │ HOM │ │ END │ K │ H │ G │ F │ Q │ ß │
|
||||||
|
* ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤
|
||||||
|
* │ Mod3 │ U │ I │ A │ E │ O ├─────┤ ├─────┤ S │ N │ R │ T │ D │ Mod3 │
|
||||||
|
* ├───────┼─────┼─────┼─────╄─────╃─────┤ TL2 │ │ TL3 ├─────╄─────╃─────┼─────┼─────┼───────┤
|
||||||
|
* │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │
|
||||||
|
* └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
|
||||||
|
* │ CTL │ ALT │ MO1 │ Win │ Mod4│ │ Mod4│ Win │ MO1 │ Alt │ CTL │
|
||||||
|
* └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
|
||||||
|
* │ ← │ ↑ │ │ ↓ │ → │
|
||||||
|
* ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
|
||||||
|
* │ │ │ ─ │ │ ─ │ │ │
|
||||||
|
* │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │
|
||||||
|
* │ │ │ HYP │ │ MEH │ │ │
|
||||||
|
* └─────┴─────┴─────┘ └─────┴─────┴─────┘
|
||||||
|
*/
|
||||||
|
[BASE] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,
|
||||||
|
NEO_Y, NEO_X, NEO_V, NEO_L, NEO_C, NEO_W, KC_HOME,
|
||||||
|
NEO_L1_L, NEO_U, NEO_I, NEO_A, NEO_E, NEO_O,
|
||||||
|
KC_LSFT, NEO_UE, NEO_OE, NEO_AE, NEO_P, NEO_Z, KC_TRNS,
|
||||||
|
KC_LCTL, KC_LALT,MO(FMU),KC_LGUI,NEO_L2_L,
|
||||||
|
KC_LEFT, KC_UP,
|
||||||
|
KC_MINS,
|
||||||
|
KC_SPC, KC_ENT, ALL_T(KC_NO),
|
||||||
|
// right hand
|
||||||
|
DE_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||||
|
KC_END, NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS,
|
||||||
|
NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_L1_R,
|
||||||
|
KC_TRNS, NEO_B, NEO_M, KC_COMM,KC_DOT, NEO_J, KC_RSFT,
|
||||||
|
NEO_L2_R,KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
|
||||||
|
KC_DOWN, KC_RGHT,
|
||||||
|
KC_MINS,
|
||||||
|
MEH_T(KC_NO),KC_ENT,KC_SPC
|
||||||
|
),
|
||||||
|
/* Layer 1 (F-keys, Mouse and Unicode)
|
||||||
|
* ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||||
|
* ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
|
||||||
|
* │ │ │ │ │ ✕ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │
|
||||||
|
* ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤
|
||||||
|
* │ │ │ │ │ ✓ │ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │
|
||||||
|
* ├───────┼─────┼─────┼─────╄─────╃─────┤ │ │ ├─────╄─────╃─────┼─────┼─────┼───────┤
|
||||||
|
* │ │ │ │ │ │ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │
|
||||||
|
* └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
|
||||||
|
* │ │ │(MO1)│ │ │ │ │ │(MO1)│ │ │
|
||||||
|
* └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
|
||||||
|
* │ Ms← │ Ms↑ │ │ Ms↓ │ Ms→ │
|
||||||
|
* ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
|
||||||
|
* │ │ │ MLC │ │ MRC │ │ │
|
||||||
|
* │ │ ├─────┤ ├─────┤ │ │
|
||||||
|
* │ │ │ │ │ │ │ │
|
||||||
|
* └─────┴─────┴─────┘ └─────┴─────┴─────┘
|
||||||
|
*/
|
||||||
|
[FMU] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2713),KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2715),KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_MS_L, KC_MS_U,
|
||||||
|
KC_BTN1,
|
||||||
|
KC_TRNS,KC_TRNS, KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
|
||||||
|
KC_TRNS,KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_MS_D, KC_MS_R,
|
||||||
|
KC_BTN2,
|
||||||
|
KC_TRNS, KC_TRNS,KC_TRNS
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_LAYER_TAP_TOGGLE(FMU)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void * matrix_init_user(void) {
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void * matrix_scan_user(void)
|
||||||
|
{
|
||||||
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
switch (layer) {
|
||||||
|
case FMU:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
default:
|
||||||
|
ergodox_board_led_off();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,184 @@
|
||||||
|
#include "ergodox_ez.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
#define BASE 0 // default layer
|
||||||
|
#define SYMB 1 // symbols
|
||||||
|
#define MDIA 2 // media keys
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | BkSp | A | R | S | T | D |------| |------| H | N | E | I |O / L2| ' |
|
||||||
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
|
* | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | App | LGui | | Alt |Ctrl/Esc|
|
||||||
|
* ,------|------|------| |------+--------+------.
|
||||||
|
* | | | Home | | PgUp | | |
|
||||||
|
* | Space|Backsp|------| |------| Tab |Enter |
|
||||||
|
* | |ace | End | | PgDn | | |
|
||||||
|
* `--------------------' `----------------------'
|
||||||
|
*/
|
||||||
|
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||||
|
// Otherwise, it needs KC_*
|
||||||
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
|
// left hand
|
||||||
|
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
|
||||||
|
KC_DELT, KC_Q, KC_W, KC_F, KC_P, KC_G, TG(SYMB),
|
||||||
|
KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D,
|
||||||
|
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
|
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
||||||
|
ALT_T(KC_APP), KC_LGUI,
|
||||||
|
KC_HOME,
|
||||||
|
KC_SPC,KC_BSPC,KC_END,
|
||||||
|
// right hand
|
||||||
|
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||||
|
TG(SYMB), KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
|
||||||
|
KC_H, KC_N, KC_E, KC_I, LT(MDIA, KC_O), KC_QUOT,
|
||||||
|
MEH_T(KC_NO),KC_K, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||||
|
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
||||||
|
KC_LALT, CTL_T(KC_ESC),
|
||||||
|
KC_PGUP,
|
||||||
|
KC_PGDN,KC_TAB, KC_ENT
|
||||||
|
),
|
||||||
|
/* Keymap 1: Symbol Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | . | 0 | = | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// SYMBOLS
|
||||||
|
[SYMB] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||||
|
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
|
||||||
|
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||||
|
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||||
|
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||||
|
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* Keymap 2: Media and mouse keys
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | MsUp | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | | Prev | Next | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | |Brwser|
|
||||||
|
* | | |------| |------| |Back |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// MEDIA AND MOUSE
|
||||||
|
[MDIA] = KEYMAP(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
|
||||||
|
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_WBAK
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void * matrix_init_user(void) {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void * matrix_scan_user(void) {
|
||||||
|
|
||||||
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
switch (layer) {
|
||||||
|
// TODO: Make this relevant to the ErgoDox EZ.
|
||||||
|
case 1:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// none
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,4 @@
|
||||||
|
# ErgoDox EZ Colemak Configuration
|
||||||
|
|
||||||
|
Colemak layout with same layers as default ergodox ez keymap.
|
||||||
|
|
Before Width: | Height: | Size: 180 KiB After Width: | Height: | Size: 180 KiB |
Before Width: | Height: | Size: 753 KiB After Width: | Height: | Size: 753 KiB |
|
@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[BASE] = KEYMAP( // layer 0 : default
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
// left hand
|
// left hand
|
||||||
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
|
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
|
||||||
KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1),
|
KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
|
||||||
KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
||||||
|
@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
KC_SPC,KC_BSPC,KC_END,
|
KC_SPC,KC_BSPC,KC_END,
|
||||||
// right hand
|
// right hand
|
||||||
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||||
TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||||
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT,
|
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT,
|
||||||
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||||
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
||||||
|
@ -114,7 +114,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* `--------------------' `--------------------'
|
* `--------------------' `--------------------'
|
||||||
*/
|
*/
|
||||||
// MEDIA AND MOUSE
|
// MEDIA AND MOUSE
|
||||||
KEYMAP(
|
[MDIA] = KEYMAP(
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
|
@ -0,0 +1,5 @@
|
||||||
|
# ErgoDox EZ Default Configuration
|
||||||
|
|
||||||
|
This is what we ship with out of the factory. :) The image says it all:
|
||||||
|
|
||||||
|
![Default](default_highres.png)
|
Before Width: | Height: | Size: 754 KiB After Width: | Height: | Size: 754 KiB |
|
@ -0,0 +1,8 @@
|
||||||
|
# The OSX Friendly Version of the Default Firmware
|
||||||
|
|
||||||
|
So, I took the default firmware and just made a couple of tweaks that make it easier to use with OS X:
|
||||||
|
|
||||||
|
1. The Cmd key is now on the right side, making Cmd+Space easier.
|
||||||
|
2. The media keys work on OSX (But not on Windows).
|
||||||
|
|
||||||
|
![default osx](default_osx_highres.png)
|
|
@ -0,0 +1,229 @@
|
||||||
|
#include "ergodox_ez.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
#define BASE 0 // default layer
|
||||||
|
#define SYMB 1 // symbols
|
||||||
|
#define MDIA 2 // media keys
|
||||||
|
#define PLVR 3 // Plover layer
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | = | 1 | 2 | 3 | 4 | 5 | LGui | |Plover| 6 | 7 | 8 | 9 | 0 | - |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | Tab | Q | W | E | R | T | L1 | | L2 | Y | U | I | O | P | \ |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* |Esc/Ctrl| A | S | D | F | G |------| |------| H | J | K | L | ; | '"/Ctrl|
|
||||||
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
|
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | ~L1 | Grv | '" | Left |Rgt/L2| | Up/L2| Down | [ | ] | ~L1 |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | App | Home | | PgUp |Ctrl/Esc|
|
||||||
|
* ,------|------|------| |------+--------+------.
|
||||||
|
* | | | End | | PgDn | | |
|
||||||
|
* |Backsp|Delete|------| |------| Enter |Space |
|
||||||
|
* | ace | | LAlt | |TabCtl| | |
|
||||||
|
* `--------------------' `----------------------'
|
||||||
|
*/
|
||||||
|
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||||
|
// Otherwise, it needs KC_*
|
||||||
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
|
// left hand
|
||||||
|
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1),
|
||||||
|
CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
|
KC_FN1, KC_GRV, KC_QUOT,KC_LEFT, LT(MDIA, KC_RGHT),
|
||||||
|
KC_APP, KC_HOME,
|
||||||
|
KC_END,
|
||||||
|
KC_BSPC,KC_DELT,KC_LALT,
|
||||||
|
// right hand
|
||||||
|
TG(3), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||||
|
TG(2), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||||
|
KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTL_T(KC_QUOT),
|
||||||
|
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
|
LT(MDIA, KC_UP), KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
||||||
|
KC_PGUP, CTL_T(KC_ESC),
|
||||||
|
KC_PGDN,
|
||||||
|
CTL_T(KC_TAB),KC_ENT, KC_SPC
|
||||||
|
),
|
||||||
|
/* Keymap 1: Symbol Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | . | 0 | = | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | Calc |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// SYMBOLS
|
||||||
|
[SYMB] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||||
|
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
|
||||||
|
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||||
|
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||||
|
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||||
|
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
|
||||||
|
KC_TRNS, KC_CALC,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* Keymap 2: Media and mouse keys
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | Rclk | Lclk | | | | | | Lclk | Rclk | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | |MsLeft| MsUp |MsDown|MsRght|------| |------|MsLeft|MsDown| MsUp |MsRght| | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | Lclk | Rclk | | | | | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | Prev | |VolUp | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | Play | | Mute |Brwser|Brwser|
|
||||||
|
* | Lclk | Rclk |------| |------|Fwd |Back |
|
||||||
|
* | | | Next | |VolDn | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// MEDIA AND MOUSE
|
||||||
|
KEYMAP(
|
||||||
|
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_U, KC_MS_D, KC_MS_R,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_MPRV,
|
||||||
|
KC_MPLY,
|
||||||
|
KC_BTN1, KC_BTN2, KC_MNXT,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_VOLU, KC_TRNS,
|
||||||
|
KC_MUTE,
|
||||||
|
KC_VOLD, KC_WBAK, KC_WFWD
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Keymap 4: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | q | w | e | r | t |------| |------| y | u | i | o | p | [ |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | a | s | d | f | g | | | | h | j | k | l | ; | ' |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | c | v |------| |------| n | m |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[PLVR] = KEYMAP( // layout: layer 4: Steno for Plover
|
||||||
|
// left hand
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO,
|
||||||
|
KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T,
|
||||||
|
KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_FN4, KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_C, KC_V, KC_NO,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
|
||||||
|
KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
|
||||||
|
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
|
||||||
|
KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
|
KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_NO, KC_N, KC_M
|
||||||
|
),
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void * matrix_init_user(void) {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void * matrix_scan_user(void) {
|
||||||
|
|
||||||
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
switch (layer) {
|
||||||
|
// TODO: Make this relevant to the ErgoDox EZ.
|
||||||
|
case 1:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// none
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |
|
@ -0,0 +1,190 @@
|
||||||
|
#include "ergodox_ez.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
#define BASE 0 // default layer
|
||||||
|
#define SYMB 1 // symbols
|
||||||
|
#define MDIA 2 // media keys
|
||||||
|
|
||||||
|
/* About this file: This is just an experimental keymap for my own use, with some ideas I'm testing out.
|
||||||
|
* Changlog:
|
||||||
|
* Jan 19: * Made J into dual-action key (Alt when held down), to make Alt-tab more ergonomic.
|
||||||
|
* * Made ' into dual-action key (Win/Cmd when held down).
|
||||||
|
*/
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | BkSp | A | S | D | F | G |------| |------| H | Alt/J| K | L |; / L2| LGui/' |
|
||||||
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | App | LGui | | Alt |Ctrl/Esc|
|
||||||
|
* ,------|------|------| |------+--------+------.
|
||||||
|
* | | | Home | | PgUp | | |
|
||||||
|
* | Space|Backsp|------| |------| Tab |Enter |
|
||||||
|
* | |ace | End | | PgDn | | |
|
||||||
|
* `--------------------' `----------------------'
|
||||||
|
*/
|
||||||
|
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||||
|
// Otherwise, it needs KC_*
|
||||||
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
|
// left hand
|
||||||
|
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
|
||||||
|
KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
|
||||||
|
KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
|
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
||||||
|
ALT_T(KC_APP), KC_LGUI,
|
||||||
|
KC_HOME,
|
||||||
|
KC_SPC,KC_BSPC,KC_END,
|
||||||
|
// right hand
|
||||||
|
KC_RGHT, KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||||
|
TG(SYMB), KC_Y,KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||||
|
KC_H,ALT_T(KC_J),KC_K, KC_L, LT(MDIA,KC_SCLN),GUI_T(KC_QUOT),
|
||||||
|
MEH_T(KC_NO),KC_N,KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||||
|
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
||||||
|
KC_LALT, CTL_T(KC_ESC),
|
||||||
|
KC_PGUP,
|
||||||
|
KC_PGDN,KC_TAB, KC_ENT
|
||||||
|
),
|
||||||
|
/* Keymap 1: Symbol Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | . | 0 | = | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// SYMBOLS
|
||||||
|
[SYMB] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||||
|
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
|
||||||
|
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||||
|
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||||
|
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||||
|
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* Keymap 2: Media and mouse keys
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | MsUp | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | | Prev | Next | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | |Brwser|
|
||||||
|
* | | |------| |------| |Back |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// MEDIA AND MOUSE
|
||||||
|
[MDIA] = KEYMAP(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
|
||||||
|
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_WBAK
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void * matrix_init_user(void) {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void * matrix_scan_user(void) {
|
||||||
|
|
||||||
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
switch (layer) {
|
||||||
|
// TODO: Make this relevant to the ErgoDox EZ.
|
||||||
|
case 1:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// none
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,11 @@
|
||||||
|
# Erez's experimental layout
|
||||||
|
|
||||||
|
This is my personal layout which I use to test out ideas which may or may not make it onto the default layout we ship with. It's based off the default layout, with various tweaks.
|
||||||
|
|
||||||
|
Changelog:
|
||||||
|
|
||||||
|
## Jan 19, 2016:
|
||||||
|
|
||||||
|
* Made J into dual-action key (Alt when held down), to make Alt-tab more ergonomic.
|
||||||
|
* Made ' into dual-action key (Win/Cmd when held down).
|
||||||
|
|
|
@ -0,0 +1,186 @@
|
||||||
|
#include "ergodox_ez.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
#define BASE 0 // default layer
|
||||||
|
#define SYMB 1 // symbols
|
||||||
|
#define MDIA 2 // media keys
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | Grv | 1 | 2 | 3 | 4 | 5 | [ | | ] | 6 | 7 | 8 | 9 | 0 | BkSp |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | Tab | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* |Ctrl/Esc| A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' |
|
||||||
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | ~L1 | '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | App | Home | | PgUp |Ctrl/Esc|
|
||||||
|
* ,------|------|------| |------+--------+------.
|
||||||
|
* | | | End | | PgDn | | |
|
||||||
|
* |Space | LGui |------| |------| Tab |Enter |
|
||||||
|
* | | |Shift | | Alt | | |
|
||||||
|
* `--------------------' `----------------------'
|
||||||
|
*/
|
||||||
|
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||||
|
// Otherwise, it needs KC_*
|
||||||
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
|
// left hand
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LBRC,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS,
|
||||||
|
CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
|
KC_FN1, KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
||||||
|
|
||||||
|
ALT_T(KC_APP), KC_HOME,
|
||||||
|
KC_END,
|
||||||
|
KC_SPC, KC_LGUI, KC_LSHIFT,
|
||||||
|
// right hand
|
||||||
|
KC_RBRC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||||
|
KC_EQL, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||||
|
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT,
|
||||||
|
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||||
|
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
||||||
|
|
||||||
|
KC_PGUP, CTL_T(KC_ESC),
|
||||||
|
KC_PGDN,
|
||||||
|
KC_LALT, KC_TAB, KC_ENT
|
||||||
|
),
|
||||||
|
/* Keymap 1: Symbol Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | . | 0 | = | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// SYMBOLS
|
||||||
|
[SYMB] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||||
|
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
|
||||||
|
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||||
|
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||||
|
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||||
|
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* Keymap 2: Media and mouse keys
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | MsUp | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | | Prev | Next | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | |Brwser|
|
||||||
|
* | | |------| |------| |Back |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// MEDIA AND MOUSE
|
||||||
|
KEYMAP(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
|
||||||
|
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_WBAK
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void * matrix_init_user(void) {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void * matrix_scan_user(void) {
|
||||||
|
|
||||||
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
switch (layer) {
|
||||||
|
// TODO: Make this relevant to the ErgoDox EZ.
|
||||||
|
case 1:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// none
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,28 @@
|
||||||
|
# J3RN's Mac-centric Ergodox EZ keymap
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Essentially, I wanted to switch to a layout that was less jarring than the default Ergodox EZ layout, and did not require finger gymnastics to perform common OS X shortcuts (most of which involve the CMD (LGui) key).
|
||||||
|
|
||||||
|
## How is it different from the default Ergodox EZ layout?
|
||||||
|
|
||||||
|
This layout more closely resembles that of the Mac keyboard, and has some other goodness baked in. Here is a rundown of what that means:
|
||||||
|
|
||||||
|
### Mac-like changes
|
||||||
|
|
||||||
|
- **The key to the left of "1" is "~" instead of "=".**
|
||||||
|
- **The key to the right of "0" is Backspace instead of "-"** (misleadingly labeled "delete" on the Mac's keyboard). There was no room to fit in "-" and "=" between "0" and Backspace, unfortunately.
|
||||||
|
- **The key to the left of "Q" is Tab instead of Delete.**
|
||||||
|
- **The rightmost big key on the left thumb is CMD (LGui) instead of Backspace.**
|
||||||
|
|
||||||
|
### Other changes
|
||||||
|
|
||||||
|
- **The button to the left of "A" is Ctrl/Esc instead of Backspace.** This is actually how I have the keyboard on my Macbook set up to be, since it's loads more convenient than a CAPS LOCK key. This is the Ctrl key I find myself using most.
|
||||||
|
- **The key to the right of "5" and the key to left of "6" are "[" and "]", respectively, instead of Left and Right.** There is a more convenient set of Left and Right already present. Truth be told, I don't really use these keys, as they are a stretch to reach.
|
||||||
|
- **The Toggle L1 keys have been replaced by the otherwise displaced "-" and "=".** They are laid out, left-to-right, in the same order as on the Mac keyboard. Honestly, they are not terribly conveniently placed, and their placement might change in a later version. I found that I did not toggle L1 frequently at all, and found using the momentary keys to access L1 to fit my workflow better.
|
||||||
|
- **The "~"/L1 key in the bottom-left is now just momentary L1.** The "~" key was moved to the top-left as mentioned before, and I like to keep my multi-use keys to a minimum due to the latency for them to switch from "press" to "hold."
|
||||||
|
- **The Home and End buttons have been shifted up on the left thumb, and Shift inserted below them.** This makes doing Shift-5 and other such combinations less painful.
|
||||||
|
- **The Page Up and Page Down buttons have been shifted up on the right thumb, and Alt was moved from above them to below them.** I use Alt more than Page Up or Page Down (mostly in terminal applications), and thought that it deserved a more accessible location.
|
||||||
|
|
||||||
|
|
||||||
|
**I'm always open to feedback and/or suggestions!**
|
Before Width: | Height: | Size: 181 KiB |
Before Width: | Height: | Size: 738 KiB |
|
@ -0,0 +1,184 @@
|
||||||
|
#include "ergodox_ez.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
#define BASE 0 // default layer
|
||||||
|
#define SYMB 1 // symbols
|
||||||
|
#define MDIA 2 // media keys
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | Caps | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
|
||||||
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
|
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | Esc | Grv |Insert| Left | Right| | Up | Down | [ | ] | L2 |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | Ctrl | Alt | | LGui | Ctrl |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | Home | | PgUp | | |
|
||||||
|
* |Backsp| Del |------| |------| Enter| Space|
|
||||||
|
* |ace | | End | | PgDn | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||||
|
// Otherwise, it needs KC_*
|
||||||
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
|
// left hand
|
||||||
|
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
|
||||||
|
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
|
KC_ESC, KC_GRV, KC_INS, KC_LEFT, KC_RGHT,
|
||||||
|
KC_LCTL,KC_LALT,
|
||||||
|
KC_HOME,
|
||||||
|
KC_BSPC,KC_DEL,KC_END,
|
||||||
|
// right hand
|
||||||
|
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||||
|
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||||
|
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
|
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
|
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN2,
|
||||||
|
KC_LGUI, KC_RCTL,
|
||||||
|
KC_PGUP,
|
||||||
|
KC_PGDN, KC_ENT, KC_SPC
|
||||||
|
),
|
||||||
|
/* Keymap 1: Symbol Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | PrScr | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | ScrLk | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | Pause | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | . | 0 | = | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// SYMBOLS
|
||||||
|
[SYMB] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_PSCR,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||||
|
KC_SLCK,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
|
||||||
|
KC_PAUS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||||
|
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||||
|
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||||
|
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* Keymap 2: Media and mouse keys
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | MsUp | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | | Prev | Next | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | |Brwser|
|
||||||
|
* | | |------| |------| |Back |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// MEDIA AND MOUSE
|
||||||
|
[MDIA] = KEYMAP(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
|
||||||
|
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_WBAK
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void * matrix_init_user(void) {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void * matrix_scan_user(void) {
|
||||||
|
|
||||||
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
switch (layer) {
|
||||||
|
// TODO: Make this relevant to the ErgoDox EZ.
|
||||||
|
case 1:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// none
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,19 @@
|
||||||
|
This keymap attempts to match the Kinesis Contoured (aka Advantage) default
|
||||||
|
layout as closely as possible. See
|
||||||
|
http://www.kinesis-ergo.com/wp-content/uploads/2013/06/advantage_layout_win.pdf
|
||||||
|
|
||||||
|
Apart from the obvious mappings, this keymap also:
|
||||||
|
|
||||||
|
* removes the dual-purpose momentary layer/normal keys: Z, /, and Grv;
|
||||||
|
because the author--coming from a Kinesis keyboard--finds the delays and
|
||||||
|
accidental modifiers to be more disconcerting than helpful.
|
||||||
|
|
||||||
|
* puts Esc in the bottom left since there's no place for it in the top
|
||||||
|
left to match the Kinesis.
|
||||||
|
|
||||||
|
* changes the bottom-right key into an L2 toggle since there's otherwise no
|
||||||
|
way to get to L2.
|
||||||
|
|
||||||
|
* adds PrScr, ScrLk and Pause to the L1 keymap, down the left side, since
|
||||||
|
they're present on the Kinesis but not available in the default
|
||||||
|
ergodox_ez keymap.
|
After Width: | Height: | Size: 732 KiB |
|
@ -9,7 +9,7 @@
|
||||||
#define BASE 0 // default layer
|
#define BASE 0 // default layer
|
||||||
#define SYMB 1 // symbols
|
#define SYMB 1 // symbols
|
||||||
#define MDIA 2 // media keys
|
#define MDIA 2 // media keys
|
||||||
#define CRSR 3 // media keys
|
#define ADNW 3 // media keys
|
||||||
#define NUMB 4 // number keys
|
#define NUMB 4 // number keys
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,38 +18,38 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* Keymap 0: Basic layer
|
/* Keymap 0: Basic layer
|
||||||
*
|
*
|
||||||
* ,--------------------------------------------------. ,--------------------------------------------------.
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
* | ESC | 1 | 2 | 3 | 4 | 5 |Lctrl | |Rctrl | 6 | 7 | 8 | 9 | 0 | ß |
|
* | ESC | 1 | 2 | 3 | 4 | 5 |CMD-V | |CMD-C | 6 | 7 | 8 | 9 | 0 | ß |
|
||||||
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
* | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü |
|
* | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü |
|
||||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
* | L3 | A | S | D | F | G |------| |------| H | J | K | L | ö | ä/L2 |
|
* | ADNW | A | S | D | F | G |------| |------| H | J | K | L | ö | ä/L2 |
|
||||||
* |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------|
|
* |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------|
|
||||||
* | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift |
|
* | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift |
|
||||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
* |</L1| ^° |AltShf| Left | Right| | Up | Down | CMD-SHIFT | + | #/L1 |
|
* |</L1| ^° |AltShf| Left | Right| | Up | Down | CMD-SHIFT | + | #/L1 |
|
||||||
* `----------------------------------' `----------------------------------'
|
* `----------------------------------' `----------------------------------'
|
||||||
* ,-------------. ,-------------.
|
* ,-------------. ,---------------.
|
||||||
* | L1 | LGui | | Alt |Ctrl/Esc|
|
* | MDIA | Meh | | Hyper| NUM |
|
||||||
* ,------|------|------| |------+--------+------.
|
* ,------|------|------| |------+--------+------.
|
||||||
* | | | Home | | PgUp | | |
|
* | | | Home | | PgUp | | |
|
||||||
* | Space|Backsp|------| |------| Enter | Space|
|
* | Back-| Del |------| |------| Enter | Space|
|
||||||
* | |ace | End | | PgDn | | |
|
* | Space| | End | | PgDn | | |
|
||||||
* `--------------------' `----------------------'
|
* `--------------------' `----------------------'
|
||||||
*/
|
*/
|
||||||
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||||
// Otherwise, it needs KC_*
|
// Otherwise, it needs KC_*
|
||||||
[BASE] = KEYMAP( // layer 0 : default
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
// left hand
|
// left hand
|
||||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LCTL,
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_V),
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LGUI,
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LGUI,
|
||||||
TG(3), KC_A, KC_S, KC_D, KC_F, KC_G,
|
TG(3), KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LALT,
|
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LALT,
|
||||||
LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
||||||
TG(2), MEH_T(KC_NO),
|
TG(2), MEH_T(LSFT(DE_ACUT)),
|
||||||
KC_HOME,
|
KC_HOME,
|
||||||
KC_SPC,KC_BSPC,KC_END,
|
KC_BSPC,KC_DEL,KC_END,
|
||||||
// right hand
|
// right hand
|
||||||
KC_RCTL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
LGUI(KC_C), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||||
KC_RGUI, KC_Y, KC_U, KC_I, KC_O, KC_P, DE_UE,
|
KC_RGUI, KC_Y, KC_U, KC_I, KC_O, KC_P, DE_UE,
|
||||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN,LT(MDIA,DE_AE),
|
KC_H, KC_J, KC_K, KC_L, KC_SCLN,LT(MDIA,DE_AE),
|
||||||
KC_RALT,KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
KC_RALT,KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||||
|
@ -126,7 +126,7 @@ KEYMAP(
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
|
||||||
KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
|
@ -141,27 +141,48 @@ KEYMAP(
|
||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_WBAK
|
KC_TRNS, KC_TRNS, KC_WBAK
|
||||||
),
|
),
|
||||||
// Cursor layer
|
/* Keymap 3: ADNW-Koy layer
|
||||||
|
* ADNW-Koy is a special layout designed to be ergonomic. Was created using software to determine the most ergonomic way to type German and English texts.
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | ESC | 1 | 2 | 3 | 4 | 5 |Lctrl | |Rctrl | 6 | 7 | 8 | 9 | 0 | - |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | TAB | K | . | O | , | Y | CMD | | CMD | V | G | C | L | ß | Z |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | ADNW | H | A | E | I | U |------| |------| D | T | R | N | S | F/L2 |
|
||||||
|
* |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------|
|
||||||
|
* | LShift |X/Ctrl| Q | Ä | Ü | Ö | | | | B | P | W | M |J/Ctrl| RShift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |</L1| ^ |AltShf| Left | Right| | Up | Down | CMD-SHIFT | ´ | //L1 |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | L1 | LGui | | Alt |Ctrl/Esc|
|
||||||
|
* ,------|------|------| |------+--------+------.
|
||||||
|
* | | | Home | | PgUp | | |
|
||||||
|
* | Space|Backsp|------| |------| Enter | Space|
|
||||||
|
* | |ace | End | | PgDn | | |
|
||||||
|
* `--------------------' `----------------------'
|
||||||
|
*/
|
||||||
KEYMAP(
|
KEYMAP(
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_K, KC_DOT, KC_O, KC_COMM, KC_Z, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_H, KC_A, KC_E, KC_I, KC_U,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, CTL_T(KC_X),KC_Q, DE_AE, DE_UE, DE_OE, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
// right hand
|
// right hand
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLSH,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_V, KC_G, KC_C, KC_L, KC_MINS, KC_Y,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_D, KC_T, KC_R, KC_N, KC_S, LT(MDIA,KC_F),
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS,
|
KC_TRNS, KC_B, KC_P, KC_W, KC_M, CTL_T(KC_J), KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS,
|
KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
),
|
),
|
||||||
//number pad
|
|
||||||
KEYMAP(
|
KEYMAP(
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
@ -185,7 +206,7 @@ KEYMAP(
|
||||||
|
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols)
|
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols)
|
||||||
[2] = ACTION_LAYER_TAP_TOGGLE(CRSR) // FN2 - Momentary Layer 2 (Cursors)
|
[2] = ACTION_LAYER_TAP_TOGGLE(ADNW) // FN2 - Momentary Layer 2 (ADNW)
|
||||||
};
|
};
|
||||||
|
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
@ -231,7 +252,7 @@ void * matrix_scan_user(void) {
|
||||||
case 4:
|
case 4:
|
||||||
ergodox_right_led_1_on();
|
ergodox_right_led_1_on();
|
||||||
ergodox_right_led_3_on();
|
ergodox_right_led_3_on();
|
||||||
ergodox_board_led_on();
|
//ergodox_board_led_on();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// none
|
// none
|
|
@ -0,0 +1,228 @@
|
||||||
|
#include "ergodox_ez.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
|
||||||
|
#define BASE 0 // default layer
|
||||||
|
#define SYMB 1 // symbols
|
||||||
|
#define MDIA 2 // media keys
|
||||||
|
#define PLVR 3 // Plover layer
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap 0: Basic layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | = | 1 | 2 | 3 | 4 | 5 | LGui | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | Tab | Q | W | E | R | T | L1 | |Plover| Y | U | I | O | P | \ |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | Esc | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' |
|
||||||
|
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
|
||||||
|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | App | Home | | Alt |Ctrl/Esc|
|
||||||
|
* ,------|------|------| |------+--------+------.
|
||||||
|
* | | | End | | PgUp | | |
|
||||||
|
* |Backsp|Delete|------| |------| Enter |Space |
|
||||||
|
* | ace | | LAlt | | PgDn | | |
|
||||||
|
* `--------------------' `----------------------'
|
||||||
|
*/
|
||||||
|
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
|
||||||
|
// Otherwise, it needs KC_*
|
||||||
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
|
// left hand
|
||||||
|
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI,
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1),
|
||||||
|
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
|
||||||
|
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
|
||||||
|
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
|
||||||
|
ALT_T(KC_APP), KC_HOME,
|
||||||
|
KC_END,
|
||||||
|
KC_BSPC,KC_DELT,KC_LALT,
|
||||||
|
// right hand
|
||||||
|
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||||
|
TG(3), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||||
|
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT,
|
||||||
|
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
|
||||||
|
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
|
||||||
|
KC_LALT, CTL_T(KC_ESC),
|
||||||
|
KC_PGUP,
|
||||||
|
KC_PGDN,KC_ENT, KC_SPC
|
||||||
|
),
|
||||||
|
/* Keymap 1: Symbol Layer
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | . | 0 | = | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | | |------| |------| | |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// SYMBOLS
|
||||||
|
[SYMB] = KEYMAP(
|
||||||
|
// left hand
|
||||||
|
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
|
||||||
|
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
|
||||||
|
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
|
||||||
|
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS,KC_TRNS,KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
|
||||||
|
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
|
||||||
|
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
|
||||||
|
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
/* Keymap 2: Media and mouse keys
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | |------| |------|MsLeft|MsDown| MsUp |MsRght| | Play |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | | | | | | | | | | | Prev | Next | | |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | |Brwser|Brwser|
|
||||||
|
* | Lclk | Rclk |------| |------|Fwd |Back |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
// MEDIA AND MOUSE
|
||||||
|
KEYMAP(
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_BTN1, KC_BTN2, KC_TRNS,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_MPLY,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
|
||||||
|
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_TRNS, KC_WBAK, KC_WFWD
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Keymap 4: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd
|
||||||
|
*
|
||||||
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
||||||
|
* | | | | | | | | | | | | | | | |
|
||||||
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
||||||
|
* | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | q | w | e | r | t |------| |------| y | u | i | o | p | [ |
|
||||||
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||||
|
* | | a | s | d | f | g | | | | h | j | k | l | ; | ' |
|
||||||
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||||
|
* | | | | | | | | | | | |
|
||||||
|
* `----------------------------------' `----------------------------------'
|
||||||
|
* ,-------------. ,-------------.
|
||||||
|
* | | | | | |
|
||||||
|
* ,------|------|------| |------+------+------.
|
||||||
|
* | | | | | | | |
|
||||||
|
* | c | v |------| |------| n | m |
|
||||||
|
* | | | | | | | |
|
||||||
|
* `--------------------' `--------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[PLVR] = KEYMAP( // layout: layer 4: Steno for Plover
|
||||||
|
// left hand
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO,
|
||||||
|
KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T,
|
||||||
|
KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO,
|
||||||
|
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_FN4, KC_NO,
|
||||||
|
KC_NO,
|
||||||
|
KC_C, KC_V, KC_NO,
|
||||||
|
// right hand
|
||||||
|
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
|
||||||
|
KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
|
||||||
|
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
|
||||||
|
KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||||
|
KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO,
|
||||||
|
KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS,
|
||||||
|
KC_NO, KC_N, KC_M
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs just one time when the keyboard initializes.
|
||||||
|
void * matrix_init_user(void) {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Runs constantly in the background, in a loop.
|
||||||
|
void * matrix_scan_user(void) {
|
||||||
|
|
||||||
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
|
ergodox_board_led_off();
|
||||||
|
ergodox_right_led_1_off();
|
||||||
|
ergodox_right_led_2_off();
|
||||||
|
ergodox_right_led_3_off();
|
||||||
|
switch (layer) {
|
||||||
|
// TODO: Make this relevant to the ErgoDox EZ.
|
||||||
|
case 1:
|
||||||
|
ergodox_right_led_1_on();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ergodox_right_led_2_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// none
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
|
@ -17,14 +17,25 @@ This requires a little bit of familiarity with coding.
|
||||||
2. Clone the repository (download it)
|
2. Clone the repository (download it)
|
||||||
3. Set up a build environment as per [pjrc.com/teensy/gcc.html](https://www.pjrc.com/teensy/gcc.html)
|
3. Set up a build environment as per [pjrc.com/teensy/gcc.html](https://www.pjrc.com/teensy/gcc.html)
|
||||||
- Using a Mac and have homebrew? just run `brew tap osx-cross/avr && brew install avr-libc`
|
- Using a Mac and have homebrew? just run `brew tap osx-cross/avr && brew install avr-libc`
|
||||||
4. Copy `keymaps/keymap_default.c` into `keymaps/keymap_your_name.c` (for example, `keymaps/keymap_german.c`)
|
4. Copy `keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`)
|
||||||
5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly.
|
5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly. See below for more tips on sharing your work.
|
||||||
6. Compile your firmware by running `make clean` followed by `make KEYMAP=your_name`. Note that you must omit the `keymap_` prefix for your filename in this command -- for example, `make KEYMAP=german`. This will result in a hex file, which will always be called `ergodox_ez.hex`, regardless of your keymap name.
|
6. Compile your firmware by running `make clean` followed by `make KEYMAP=your_name`. For example, `make KEYMAP=german`. This will result in a hex file, which will always be called `ergodox_ez.hex`, regardless of your keymap name.
|
||||||
6. Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above.
|
6. Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above.
|
||||||
7. Submit your work as a pull request to this repository, so others can also use it. :)
|
7. Submit your work as a pull request to this repository, so others can also use it. :) See below on specifics.
|
||||||
|
|
||||||
Good luck! :)
|
Good luck! :)
|
||||||
|
|
||||||
|
## Contributing your keymap
|
||||||
|
|
||||||
|
The ErgoDox EZ firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed almost 20 user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox EZ. To make it easy for these people to use your layout, I recommend submitting your PR in the following format.
|
||||||
|
|
||||||
|
1. All work goes inside your keymap subdirectory (`keymaps/german` in this example).
|
||||||
|
2. `keymap.c` - this is your actual keymap file; please update the ASCII comments in the file so they correspond with what you did.
|
||||||
|
3. `german.hex` - a compiled version of your keymap. Commit it to the repo with `git add -f` as hex files are ignored by default. This allows people to just download your hex file and flash it without having to set up a build toolchain to make it.
|
||||||
|
3. `readme.md` - a Readme file, which GitHub would display by default when people go to your directory. Explain what's different about your keymap, what you tweaked or how it works. No specific format to follow, just communicate what you did. :)
|
||||||
|
4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your Readme can just embed the graphic as a link, just like I did with the default layout.
|
||||||
|
|
||||||
|
|
||||||
## Finding the keycodes you need
|
## Finding the keycodes you need
|
||||||
|
|
||||||
Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`.
|
Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`.
|
|
@ -0,0 +1,149 @@
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# On command line:
|
||||||
|
#
|
||||||
|
# make all = Make software.
|
||||||
|
#
|
||||||
|
# make clean = Clean out built project files.
|
||||||
|
#
|
||||||
|
# make coff = Convert ELF to AVR COFF.
|
||||||
|
#
|
||||||
|
# make extcoff = Convert ELF to AVR Extended COFF.
|
||||||
|
#
|
||||||
|
# make program = Download the hex file to the device.
|
||||||
|
# Please customize your programmer settings(PROGRAM_CMD)
|
||||||
|
#
|
||||||
|
# make teensy = Download the hex file to the device, using teensy_loader_cli.
|
||||||
|
# (must have teensy_loader_cli installed).
|
||||||
|
#
|
||||||
|
# make dfu = Download the hex file to the device, using dfu-programmer (must
|
||||||
|
# have dfu-programmer installed).
|
||||||
|
#
|
||||||
|
# make flip = Download the hex file to the device, using Atmel FLIP (must
|
||||||
|
# have Atmel FLIP installed).
|
||||||
|
#
|
||||||
|
# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
|
||||||
|
# (must have dfu-programmer installed).
|
||||||
|
#
|
||||||
|
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
|
||||||
|
# (must have Atmel FLIP installed).
|
||||||
|
#
|
||||||
|
# make debug = Start either simulavr or avarice as specified for debugging,
|
||||||
|
# with avr-gdb or avr-insight as the front end for debugging.
|
||||||
|
#
|
||||||
|
# make filename.s = Just compile filename.c into the assembler code only.
|
||||||
|
#
|
||||||
|
# make filename.i = Create a preprocessed source file for use in submitting
|
||||||
|
# bug reports to the GCC project.
|
||||||
|
#
|
||||||
|
# To rebuild project do "make clean" then "make all".
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Target file name (without extension).
|
||||||
|
TARGET = hhkb_qmk
|
||||||
|
|
||||||
|
|
||||||
|
# Directory common source filess exist
|
||||||
|
TOP_DIR = ../..
|
||||||
|
TMK_DIR = ../../tmk_core
|
||||||
|
|
||||||
|
# Directory keyboard dependent files exist
|
||||||
|
TARGET_DIR = .
|
||||||
|
|
||||||
|
# # project specific files
|
||||||
|
SRC = hhkb_qmk.c \
|
||||||
|
matrix.c
|
||||||
|
|
||||||
|
ifdef KEYMAP
|
||||||
|
SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
|
||||||
|
else
|
||||||
|
SRC := keymaps/keymap_default.c $(SRC)
|
||||||
|
endif
|
||||||
|
|
||||||
|
CONFIG_H = config.h
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
#MCU = at90usb1287
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# LUFA specific
|
||||||
|
#
|
||||||
|
# Target architecture (see library "Board Types" documentation).
|
||||||
|
ARCH = AVR8
|
||||||
|
|
||||||
|
# Input clock frequency.
|
||||||
|
# This will define a symbol, F_USB, in all source code files equal to the
|
||||||
|
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||||
|
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||||
|
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||||
|
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||||
|
# at the end, this will be done automatically to create a 32-bit value in your
|
||||||
|
# source code.
|
||||||
|
#
|
||||||
|
# If no clock division is performed on the input clock inside the AVR (via the
|
||||||
|
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||||
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
|
# Interrupt driven control endpoint task(+60)
|
||||||
|
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
#OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
# as per original hasu settings
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
CUSTOM_MATRIX = yes # Custom matrix file for the HHKB
|
||||||
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
|
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||||
|
# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
|
# MIDI_ENABLE = YES # MIDI controls
|
||||||
|
# UNICODE_ENABLE = YES # Unicode
|
||||||
|
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
|
||||||
|
|
||||||
|
# Optimize size but this may cause error "relocation truncated to fit"
|
||||||
|
#EXTRALDFLAGS = -Wl,--relax
|
||||||
|
|
||||||
|
# Search Path
|
||||||
|
VPATH += $(TARGET_DIR)
|
||||||
|
VPATH += $(TOP_DIR)
|
||||||
|
VPATH += $(TMK_DIR)
|
||||||
|
|
||||||
|
debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
|
||||||
|
debug-on: all
|
||||||
|
|
||||||
|
debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT
|
||||||
|
debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS))
|
||||||
|
debug-off: all
|
||||||
|
|
||||||
|
include $(TOP_DIR)/quantum/quantum.mk
|
|
@ -0,0 +1,180 @@
|
||||||
|
hhkb_qmk keyboard firmware
|
||||||
|
======================
|
||||||
|
|
||||||
|
## Quantum MK Firmware
|
||||||
|
|
||||||
|
You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you.
|
||||||
|
|
||||||
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
|
MIDI_ENABLE = yes # MIDI controls
|
||||||
|
# UNICODE_ENABLE = yes # Unicode support - this is commented out, just as an example. You have to use #, not //
|
||||||
|
BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
|
||||||
|
## Quick aliases to common actions
|
||||||
|
|
||||||
|
Your keymap can include shortcuts to common operations (called "function actions" in tmk).
|
||||||
|
|
||||||
|
### Switching and toggling layers
|
||||||
|
|
||||||
|
`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
|
||||||
|
|
||||||
|
`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer).
|
||||||
|
|
||||||
|
`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack.
|
||||||
|
|
||||||
|
### Fun with modifier keys
|
||||||
|
|
||||||
|
* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias
|
||||||
|
* `RSFT(kc)` - applies right Shift to *kc*
|
||||||
|
* `LCTL(kc)` - applies left Control to *kc*
|
||||||
|
* `RCTL(kc)` - applies right Control to *kc*
|
||||||
|
* `LALT(kc)` - applies left Alt to *kc*
|
||||||
|
* `RALT(kc)` - applies right Alt to *kc*
|
||||||
|
* `LGUI(kc)` - applies left GUI (command/win) to *kc*
|
||||||
|
* `RGUI(kc)` - applies right GUI (command/win) to *kc*
|
||||||
|
|
||||||
|
You can also chain these, like this:
|
||||||
|
|
||||||
|
LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
|
||||||
|
|
||||||
|
The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`.
|
||||||
|
|
||||||
|
KC_TILD ~
|
||||||
|
KC_EXLM !
|
||||||
|
KC_AT @
|
||||||
|
KC_HASH #
|
||||||
|
KC_DLR $
|
||||||
|
KC_PERC %
|
||||||
|
KC_CIRC ^
|
||||||
|
KC_AMPR &
|
||||||
|
KC_ASTR *
|
||||||
|
KC_LPRN (
|
||||||
|
KC_RPRN )
|
||||||
|
KC_UNDS _
|
||||||
|
KC_PLUS +
|
||||||
|
KC_LCBR {
|
||||||
|
KC_RCBR }
|
||||||
|
KC_PIPE |
|
||||||
|
KC_COLN :
|
||||||
|
|
||||||
|
`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.
|
||||||
|
|
||||||
|
These are the values you can use for the `mod` in `MT()` (right-hand modifiers are not available):
|
||||||
|
|
||||||
|
* MOD_LCTL
|
||||||
|
* MOD_LSFT
|
||||||
|
* MOD_LALT
|
||||||
|
* MOD_LGUI
|
||||||
|
|
||||||
|
These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
|
||||||
|
|
||||||
|
We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
|
||||||
|
|
||||||
|
* `CTL_T(kc)` - is LCTL when held and *kc* when tapped
|
||||||
|
* `SFT_T(kc)` - is LSFT when held and *kc* when tapped
|
||||||
|
* `ALT_T(kc)` - is LALT when held and *kc* when tapped
|
||||||
|
* `GUI_T(kc)` - is LGUI when held and *kc* when tapped
|
||||||
|
* `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
|
||||||
|
|
||||||
|
### Temporarily setting the default layer
|
||||||
|
|
||||||
|
`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does.
|
||||||
|
|
||||||
|
### Remember: These are just aliases
|
||||||
|
|
||||||
|
These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action).
|
||||||
|
|
||||||
|
Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
|
||||||
|
|
||||||
|
## Macro shortcuts: Send a whole string when pressing just one key
|
||||||
|
|
||||||
|
Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c).
|
||||||
|
|
||||||
|
```c
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
|
||||||
|
{
|
||||||
|
switch(id) {
|
||||||
|
case 0: // this would trigger when you hit a key mapped as M(0)
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
A macro can include the following commands:
|
||||||
|
|
||||||
|
* I() change interval of stroke in milliseconds.
|
||||||
|
* D() press key.
|
||||||
|
* U() release key.
|
||||||
|
* T() type key(press and release).
|
||||||
|
* W() wait (milliseconds).
|
||||||
|
* END end mark.
|
||||||
|
|
||||||
|
So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends.
|
||||||
|
|
||||||
|
Note: Using macros to have your keyboard send passwords for you is a bad idea.
|
||||||
|
|
||||||
|
### Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc)
|
||||||
|
|
||||||
|
Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap:
|
||||||
|
|
||||||
|
#include "keymap_<layout>.h"
|
||||||
|
|
||||||
|
Where <layout> is "colemak" or "dvorak". After including this line, you will get access to:
|
||||||
|
|
||||||
|
* `CM_*` for all of the Colemak-equivalent characters
|
||||||
|
* `DV_*` for all of the Dvorak-equivalent characters
|
||||||
|
|
||||||
|
These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features.
|
||||||
|
|
||||||
|
To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`.
|
||||||
|
|
||||||
|
## Additional language support
|
||||||
|
|
||||||
|
In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support).
|
||||||
|
|
||||||
|
## Unicode support
|
||||||
|
|
||||||
|
You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile.
|
||||||
|
|
||||||
|
## Other firmware shortcut keycodes
|
||||||
|
|
||||||
|
* `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`)
|
||||||
|
* `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things
|
||||||
|
* `BL_ON` - turns the backlight on
|
||||||
|
* `BL_OFF` - turns the backlight off
|
||||||
|
* `BL_<n>` - sets the backlight to level *n*
|
||||||
|
* `BL_INC` - increments the backlight level by one
|
||||||
|
* `BL_DEC` - decrements the backlight level by one
|
||||||
|
* `BL_TOGG` - toggles the backlight
|
||||||
|
* `BL_STEP` - steps through the backlight levels
|
||||||
|
|
||||||
|
Enable the backlight from the Makefile.
|
||||||
|
|
||||||
|
## MIDI functionalty
|
||||||
|
|
||||||
|
This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
|
||||||
|
|
||||||
|
## Bluetooth functionality
|
||||||
|
|
||||||
|
This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will.
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
Download or clone the whole firmware and navigate to the keyboard/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
|
||||||
|
|
||||||
|
Depending on which keymap you would like to use, you will have to compile slightly differently.
|
||||||
|
|
||||||
|
### Default
|
||||||
|
To build with the default keymap, simply run `make`.
|
||||||
|
|
||||||
|
### Other Keymaps
|
||||||
|
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
|
||||||
|
|
||||||
|
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
|
||||||
|
```
|
||||||
|
$ make KEYMAP=[default|jack|<name>]
|
||||||
|
```
|
||||||
|
Keymaps follow the format **__keymap\_\<name\>.c__** and are stored in the `keymaps` folder.
|
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* USB Device descriptor parameter */
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0xCAFE
|
||||||
|
#define DEVICE_VER 0x0104
|
||||||
|
#define MANUFACTURER q.m.k
|
||||||
|
#define PRODUCT HHKB mod
|
||||||
|
#define DESCRIPTION q.m.k keyboard firmware for HHKB
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 8
|
||||||
|
#define MATRIX_COLS 8
|
||||||
|
|
||||||
|
#define TAPPING_TERM 200
|
||||||
|
|
||||||
|
/* number of backlight levels */
|
||||||
|
#define BACKLIGHT_LEVELS 3
|
||||||
|
|
||||||
|
/* Set 0 if debouncing isn't needed */
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
|
||||||
|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||||
|
//#define LOCKING_SUPPORT_ENABLE
|
||||||
|
/* Locking resynchronize hack */
|
||||||
|
//#define LOCKING_RESYNC_ENABLE
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* disable action features */
|
||||||
|
//#define NO_ACTION_LAYER
|
||||||
|
//#define NO_ACTION_TAPPING
|
||||||
|
//#define NO_ACTION_ONESHOT
|
||||||
|
//#define NO_ACTION_MACRO
|
||||||
|
//#define NO_ACTION_FUNCTION
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,167 @@
|
||||||
|
#ifndef HHKB_AVR_H
|
||||||
|
#define HHKB_AVR_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
|
||||||
|
|
||||||
|
// Timer resolution check
|
||||||
|
#if (1000000/TIMER_RAW_FREQ > 20)
|
||||||
|
# error "Timer resolution(>20us) is not enough for HHKB matrix scan tweak on V-USB."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* HHKB Matrix I/O
|
||||||
|
*
|
||||||
|
* row: HC4051[A,B,C] selects scan row0-7
|
||||||
|
* row-ext: [En0,En1] row extention for JP
|
||||||
|
* col: LS145[A,B,C,D] selects scan col0-7 and enable(D)
|
||||||
|
* key: on: 0/off: 1
|
||||||
|
* prev: hysteresis control: assert(1) when previous key state is on
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__AVR_ATmega32U4__)
|
||||||
|
/*
|
||||||
|
* For TMK HHKB alt controller(ATMega32U4)
|
||||||
|
*
|
||||||
|
* row: PB0-2
|
||||||
|
* col: PB3-5,6
|
||||||
|
* key: PD7(pull-uped)
|
||||||
|
* prev: PB7
|
||||||
|
* power: PD4(L:off/H:on)
|
||||||
|
* row-ext: PC6,7 for HHKB JP(active low)
|
||||||
|
*/
|
||||||
|
static inline void KEY_ENABLE(void) { (PORTB &= ~(1<<6)); }
|
||||||
|
static inline void KEY_UNABLE(void) { (PORTB |= (1<<6)); }
|
||||||
|
static inline bool KEY_STATE(void) { return (PIND & (1<<7)); }
|
||||||
|
static inline void KEY_PREV_ON(void) { (PORTB |= (1<<7)); }
|
||||||
|
static inline void KEY_PREV_OFF(void) { (PORTB &= ~(1<<7)); }
|
||||||
|
#ifdef HHKB_POWER_SAVING
|
||||||
|
static inline void KEY_POWER_ON(void) {
|
||||||
|
DDRB = 0xFF; PORTB = 0x40; // change pins output
|
||||||
|
DDRD |= (1<<4); PORTD |= (1<<4); // MOS FET switch on
|
||||||
|
/* Without this wait you will miss or get false key events. */
|
||||||
|
_delay_ms(5); // wait for powering up
|
||||||
|
}
|
||||||
|
static inline void KEY_POWER_OFF(void) {
|
||||||
|
/* input with pull-up consumes less than without it when pin is open. */
|
||||||
|
DDRB = 0x00; PORTB = 0xFF; // change pins input with pull-up
|
||||||
|
DDRD |= (1<<4); PORTD &= ~(1<<4); // MOS FET switch off
|
||||||
|
}
|
||||||
|
static inline bool KEY_POWER_STATE(void) { return PORTD & (1<<4); }
|
||||||
|
#else
|
||||||
|
static inline void KEY_POWER_ON(void) {}
|
||||||
|
static inline void KEY_POWER_OFF(void) {}
|
||||||
|
static inline bool KEY_POWER_STATE(void) { return true; }
|
||||||
|
#endif
|
||||||
|
static inline void KEY_INIT(void)
|
||||||
|
{
|
||||||
|
/* row,col,prev: output */
|
||||||
|
DDRB = 0xFF;
|
||||||
|
PORTB = 0x40; // unable
|
||||||
|
/* key: input with pull-up */
|
||||||
|
DDRD &= ~0x80;
|
||||||
|
PORTD |= 0x80;
|
||||||
|
#ifdef HHKB_JP
|
||||||
|
/* row extention for HHKB JP */
|
||||||
|
DDRC |= (1<<6|1<<7);
|
||||||
|
PORTC |= (1<<6|1<<7);
|
||||||
|
#endif
|
||||||
|
KEY_UNABLE();
|
||||||
|
KEY_PREV_OFF();
|
||||||
|
|
||||||
|
KEY_POWER_OFF();
|
||||||
|
}
|
||||||
|
static inline void KEY_SELECT(uint8_t ROW, uint8_t COL)
|
||||||
|
{
|
||||||
|
PORTB = (PORTB & 0xC0) | (((COL) & 0x07)<<3) | ((ROW) & 0x07);
|
||||||
|
#ifdef HHKB_JP
|
||||||
|
if ((ROW) & 0x08) PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<6);
|
||||||
|
else PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<7);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(__AVR_AT90USB1286__)
|
||||||
|
/*
|
||||||
|
* For Teensy++(AT90USB1286)
|
||||||
|
*
|
||||||
|
* HHKB pro HHKB pro2
|
||||||
|
* row: PB0-2 (6-8) (5-7)
|
||||||
|
* col: PB3-5,6 (9-12) (8-11)
|
||||||
|
* key: PE6(pull-uped) (4) (3)
|
||||||
|
* prev: PE7 (5) (4)
|
||||||
|
*
|
||||||
|
* TODO: convert into 'staitc inline' function
|
||||||
|
*/
|
||||||
|
#define KEY_INIT() do { \
|
||||||
|
DDRB |= 0x7F; \
|
||||||
|
DDRE |= (1<<7); \
|
||||||
|
DDRE &= ~(1<<6); \
|
||||||
|
PORTE |= (1<<6); \
|
||||||
|
} while (0)
|
||||||
|
#define KEY_SELECT(ROW, COL) (PORTB = (PORTB & 0xC0) | \
|
||||||
|
(((COL) & 0x07)<<3) | \
|
||||||
|
((ROW) & 0x07))
|
||||||
|
#define KEY_ENABLE() (PORTB &= ~(1<<6))
|
||||||
|
#define KEY_UNABLE() (PORTB |= (1<<6))
|
||||||
|
#define KEY_STATE() (PINE & (1<<6))
|
||||||
|
#define KEY_PREV_ON() (PORTE |= (1<<7))
|
||||||
|
#define KEY_PREV_OFF() (PORTE &= ~(1<<7))
|
||||||
|
#define KEY_POWER_ON()
|
||||||
|
#define KEY_POWER_OFF()
|
||||||
|
#define KEY_POWER_STATE() true
|
||||||
|
|
||||||
|
|
||||||
|
#else
|
||||||
|
# error "define code for matrix scan"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// For ATMega328P with V-USB
|
||||||
|
//
|
||||||
|
// #elif defined(__AVR_ATmega328P__)
|
||||||
|
// Ports for V-USB
|
||||||
|
// key: PB0(pull-uped)
|
||||||
|
// prev: PB1
|
||||||
|
// row: PB2-4
|
||||||
|
// col: PC0-2,3
|
||||||
|
// power: PB5(Low:on/Hi-z:off)
|
||||||
|
#define KEY_INIT() do { \
|
||||||
|
DDRB |= 0x3E; \
|
||||||
|
DDRB &= ~(1<<0); \
|
||||||
|
PORTB |= 1<<0; \
|
||||||
|
DDRC |= 0x0F; \
|
||||||
|
KEY_UNABLE(); \
|
||||||
|
KEY_PREV_OFF(); \
|
||||||
|
} while (0)
|
||||||
|
#define KEY_SELECT(ROW, COL) do { \
|
||||||
|
PORTB = (PORTB & 0xE3) | ((ROW) & 0x07)<<2; \
|
||||||
|
PORTC = (PORTC & 0xF8) | ((COL) & 0x07); \
|
||||||
|
} while (0)
|
||||||
|
#define KEY_ENABLE() (PORTC &= ~(1<<3))
|
||||||
|
#define KEY_UNABLE() (PORTC |= (1<<3))
|
||||||
|
#define KEY_STATE() (PINB & (1<<0))
|
||||||
|
#define KEY_PREV_ON() (PORTB |= (1<<1))
|
||||||
|
#define KEY_PREV_OFF() (PORTB &= ~(1<<1))
|
||||||
|
// Power supply switching
|
||||||
|
#define KEY_POWER_ON() do { \
|
||||||
|
KEY_INIT(); \
|
||||||
|
PORTB &= ~(1<<5); \
|
||||||
|
_delay_ms(1); \
|
||||||
|
} while (0)
|
||||||
|
#define KEY_POWER_OFF() do { \
|
||||||
|
DDRB &= ~0x3F; \
|
||||||
|
PORTB &= ~0x3F; \
|
||||||
|
DDRC &= ~0x0F; \
|
||||||
|
PORTC &= ~0x0F; \
|
||||||
|
} while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,29 @@
|
||||||
|
#include "hhkb_qmk.h"
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void * matrix_init_user(void) {
|
||||||
|
// leave these blank
|
||||||
|
};
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void * matrix_scan_user(void) {
|
||||||
|
// leave these blank
|
||||||
|
};
|
||||||
|
|
||||||
|
void * matrix_init_kb(void) {
|
||||||
|
// put your keyboard start-up code here
|
||||||
|
// runs once when the firmware starts up
|
||||||
|
|
||||||
|
if (matrix_init_user) {
|
||||||
|
(*matrix_init_user)();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
void * matrix_scan_kb(void) {
|
||||||
|
// put your looping keyboard code here
|
||||||
|
// runs every cycle (a lot)
|
||||||
|
|
||||||
|
if (matrix_scan_user) {
|
||||||
|
(*matrix_scan_user)();
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef HHKB_QMK_H
|
||||||
|
#define HHKB_QMK_H
|
||||||
|
|
||||||
|
#include "matrix.h"
|
||||||
|
#include "keymap_common.h"
|
||||||
|
//#include "backlight.h"
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define KEYMAP( \
|
||||||
|
K31, K30, K00, K10, K11, K20, K21, K40, K41, K60, K61, K70, K71, K50, K51, \
|
||||||
|
K32, K01, K02, K13, K12, K23, K22, K42, K43, K62, K63, K73, K72, K52, \
|
||||||
|
K33, K04, K03, K14, K15, K24, K25, K45, K44, K65, K64, K74, K53, \
|
||||||
|
K34, K05, K06, K07, K16, K17, K26, K46, K66, K76, K75, K55, K54, \
|
||||||
|
K35, K36, K37, K57, K56) \
|
||||||
|
\
|
||||||
|
{ \
|
||||||
|
{ K00, K01, K02, K03, K04, K05, K06, K07 }, \
|
||||||
|
{ K10, K11, K12, K13, K14, K15, K16, K17 }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, KC_NO }, \
|
||||||
|
{ K30, K31, K32, K33, K34, K35, K36, K37 }, \
|
||||||
|
{ K40, K41, K42, K43, K44, K45, K46, KC_NO }, \
|
||||||
|
{ K50, K51, K52, K53, K54, K55, K56, K57 }, \
|
||||||
|
{ K60, K61, K62, K63, K64, K65, K66, KC_NO }, \
|
||||||
|
{ K70, K71, K72, K73, K74, K75, K76, KC_NO } \
|
||||||
|
}
|
||||||
|
|
||||||
|
void * matrix_init_user(void);
|
||||||
|
void * matrix_scan_user(void);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,78 @@
|
||||||
|
/* -*- eval: (turn-on-orgtbl); -*-
|
||||||
|
* default HHKB Layout
|
||||||
|
*/
|
||||||
|
#include "hhkb_qmk.h"
|
||||||
|
|
||||||
|
#define BASE 0
|
||||||
|
#define HHKB 1
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* BASE Level: Default Layer
|
||||||
|
|-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
|
||||||
|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|
||||||
|
|-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
|
||||||
|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|
||||||
|
|-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
|
||||||
|
| Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
|
||||||
|
|-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
|
||||||
|
| Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
|
||||||
|
|-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
|
||||||
|
|
||||||
|
|------+------+-----------------------+------+------|
|
||||||
|
| LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
|
||||||
|
|------+------+-----------------------+------+------|
|
||||||
|
*/
|
||||||
|
|
||||||
|
[BASE] = KEYMAP( // default layer
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
|
||||||
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \
|
||||||
|
KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT),
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Layer HHKB: HHKB mode (HHKB Fn)
|
||||||
|
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
|
||||||
|
| Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
|
||||||
|
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
|
||||||
|
| Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
|
||||||
|
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
|
||||||
|
| | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
|
||||||
|
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
|
||||||
|
| | | | | | | + | - | End | PgD | Dow | | | | |
|
||||||
|
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
|
||||||
|
|
||||||
|
|------+------+----------------------+------+------+
|
||||||
|
| **** | **** | ******************** | **** | **** |
|
||||||
|
|------+------+----------------------+------+------+
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
[HHKB] = KEYMAP(
|
||||||
|
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
|
||||||
|
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
|
||||||
|
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)};
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
|
@ -0,0 +1,208 @@
|
||||||
|
/* -*- eval: (turn-on-orgtbl); -*-
|
||||||
|
* lxol HHKB Layout
|
||||||
|
*/
|
||||||
|
#include "hhkb_qmk.h"
|
||||||
|
|
||||||
|
#define BASE 0
|
||||||
|
#define WIN 1
|
||||||
|
#define HHKB 2
|
||||||
|
#define RGUILEV 3
|
||||||
|
#define LGUILEV 4
|
||||||
|
#define RALTLEV 5
|
||||||
|
#define LALTLEV 6
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* Layer 0: Default Layer
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
|
||||||
|
|------+------+-------+------+------|
|
||||||
|
| LAlt | LGUI | Space | RGUI | RAlt |
|
||||||
|
|------+------+-------+------+------|
|
||||||
|
*/
|
||||||
|
|
||||||
|
[BASE] = KEYMAP( // layer 0 : default
|
||||||
|
|
||||||
|
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
|
||||||
|
KC_LCTL, LT(LALTLEV,KC_A), LT(LGUILEV,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RGUILEV,KC_L), LT(RALTLEV,KC_SCLN), KC_QUOT, KC_FN0, \
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \
|
||||||
|
KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT),
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Layer 1: HHKB mode (HHKB Fn)
|
||||||
|
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
|
||||||
|
| Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
|
||||||
|
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
|
||||||
|
| Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
|
||||||
|
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
|
||||||
|
| | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
|
||||||
|
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
|
||||||
|
| | | | | | | + | - | End | PgD | Dow | | | | |
|
||||||
|
|------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
|
||||||
|
|
||||||
|
|---+---+---+---+---|
|
||||||
|
| | | | | |
|
||||||
|
|---+---+---+---+---|
|
||||||
|
*/
|
||||||
|
|
||||||
|
[HHKB] = KEYMAP(
|
||||||
|
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
|
||||||
|
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
|
||||||
|
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||||
|
|
||||||
|
|
||||||
|
/* Layer LGUI: All keys with RGUI modifier
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
|
||||||
|
|------+------+-------+------+------|
|
||||||
|
| LAlt | LGUI | Space | RGUI | RAlt |
|
||||||
|
|------+------+-------+------+------|
|
||||||
|
*/
|
||||||
|
|
||||||
|
[RGUILEV] = KEYMAP( // Right GUI layer by KC_L
|
||||||
|
|
||||||
|
RGUI(KC_ESC), RGUI(KC_1), RGUI(KC_2), RGUI(KC_3), RGUI(KC_4), RGUI(KC_5), RGUI(KC_6), RGUI(KC_7), RGUI(KC_8), RGUI(KC_9), RGUI(KC_0), RGUI(KC_MINS), RGUI(KC_EQL), RGUI(KC_BSLS), RGUI(KC_GRV), \
|
||||||
|
RGUI(KC_TAB), RGUI(KC_Q), RGUI(KC_W), RGUI(KC_E), RGUI(KC_R), RGUI(KC_T), RGUI(KC_Y), RGUI(KC_U), RGUI(KC_I), RGUI(KC_O), RGUI(KC_P), RGUI(KC_LBRC), RGUI(KC_RBRC), RGUI(KC_BSPC), \
|
||||||
|
RGUI(KC_LCTL), RGUI(KC_A), RGUI(KC_S), RGUI(KC_D), RGUI(KC_F), RGUI(KC_G), RGUI(KC_H), RGUI(KC_J), RGUI(KC_K), KC_TRNS, KC_TRNS, RGUI(KC_QUOT), KC_FN0, \
|
||||||
|
RGUI(KC_LSFT), RGUI(KC_Z), RGUI(KC_X), RGUI(KC_C), RGUI(KC_V), RGUI(KC_B), RGUI(KC_N), RGUI(KC_M), RGUI(KC_COMM), RGUI(KC_DOT), RGUI(KC_SLSH), RGUI(KC_RSFT), KC_TRNS, \
|
||||||
|
KC_LALT, KC_LGUI, RGUI(KC_SPC), KC_RGUI, KC_RALT),
|
||||||
|
|
||||||
|
/* Layer LGUI: All keys with LGUI modifier
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
|
||||||
|
|------+------+-------+------+------|
|
||||||
|
| LAlt | LGUI | Space | LGUI | RAlt |
|
||||||
|
|------+------+-------+------+------|
|
||||||
|
*/
|
||||||
|
|
||||||
|
[LGUILEV] = KEYMAP( // Right GUI layer by KC_L
|
||||||
|
|
||||||
|
LGUI(KC_ESC), LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LGUI(KC_MINS), LGUI(KC_EQL), LGUI(KC_BSLS), LGUI(KC_GRV), \
|
||||||
|
LGUI(KC_TAB), LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), LGUI(KC_BSPC), \
|
||||||
|
LGUI(KC_LCTL), KC_TRNS, KC_TRNS, LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), LGUI(KC_SCLN), LGUI(KC_QUOT), KC_FN0, \
|
||||||
|
KC_LSFT, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), KC_RSFT, KC_TRNS, \
|
||||||
|
KC_LALT, KC_LGUI, LGUI(KC_SPC), KC_LGUI, KC_RALT),
|
||||||
|
|
||||||
|
/* Layer LALT: All keys with RALT modifier
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
|
||||||
|
|------+------+-------+------+------|
|
||||||
|
| LAlt | LGUI | Space | RGUI | RAlt |
|
||||||
|
|------+------+-------+------+------|
|
||||||
|
*/
|
||||||
|
|
||||||
|
[RALTLEV] = KEYMAP( // Right ALT layer by KC_L
|
||||||
|
|
||||||
|
RALT(KC_ESC), RALT(KC_1), RALT(KC_2), RALT(KC_3), RALT(KC_4), RALT(KC_5), RALT(KC_6), RALT(KC_7), RALT(KC_8), RALT(KC_9), RALT(KC_0), RALT(KC_MINS), RALT(KC_EQL), RALT(KC_BSLS), RALT(KC_GRV), \
|
||||||
|
RALT(KC_TAB), RALT(KC_Q), RALT(KC_W), RALT(KC_E), RALT(KC_R), RALT(KC_T), RALT(KC_Y), RALT(KC_U), RALT(KC_I), RALT(KC_O), RALT(KC_P), RALT(KC_LBRC), RALT(KC_RBRC), RALT(KC_BSPC), \
|
||||||
|
RALT(KC_LCTL), RALT(KC_A), RALT(KC_S), RALT(KC_D), RALT(KC_F), RALT(KC_G), RALT(KC_H), RALT(KC_J), RALT(KC_K), KC_TRNS, KC_TRNS, RALT(KC_QUOT), KC_FN0, \
|
||||||
|
RALT(KC_LSFT), RALT(KC_Z), RALT(KC_X), RALT(KC_C), RALT(KC_V), RALT(KC_B), RALT(KC_N), RALT(KC_M), RALT(KC_COMM), RALT(KC_DOT), RALT(KC_SLSH), RALT(KC_RSFT), KC_TRNS, \
|
||||||
|
KC_LALT, KC_LGUI, RALT(KC_SPC), KC_RGUI, KC_RALT),
|
||||||
|
|
||||||
|
/* Layer LALT: All keys with LALT modifier
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
| Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
|
||||||
|
|
||||||
|
|------+------+-------+------+------|
|
||||||
|
| LAlt | LGUI | Space | LGUI | RAlt |
|
||||||
|
|------+------+-------+------+------|
|
||||||
|
*/
|
||||||
|
|
||||||
|
[LALTLEV] = KEYMAP( // Right ALT layer by KC_L
|
||||||
|
|
||||||
|
LALT(KC_ESC), LALT(KC_1), LALT(KC_2), LALT(KC_3), LALT(KC_4), LALT(KC_5), LALT(KC_6), LALT(KC_7), LALT(KC_8), LALT(KC_9), LALT(KC_0), LALT(KC_MINS), LALT(KC_EQL), LALT(KC_BSLS), LALT(KC_GRV), \
|
||||||
|
LALT(KC_TAB), LALT(KC_Q), LALT(KC_W), LALT(KC_E), LALT(KC_R), LALT(KC_T), LALT(KC_Y), LALT(KC_U), LALT(KC_I), LALT(KC_O), LALT(KC_P), LALT(KC_LBRC), LALT(KC_RBRC), LALT(KC_BSPC), \
|
||||||
|
LALT(KC_LCTL), KC_TRNS, KC_TRNS, LALT(KC_D), LALT(KC_F), LALT(KC_G), LALT(KC_H), LALT(KC_J), LALT(KC_K), LALT(KC_L), LALT(KC_SCLN), LALT(KC_QUOT), KC_FN0, \
|
||||||
|
KC_LSFT, LALT(KC_Z), LALT(KC_X), LALT(KC_C), LALT(KC_V), LALT(KC_B), LALT(KC_N), LALT(KC_M), LALT(KC_COMM), LALT(KC_DOT), LALT(KC_SLSH), KC_RSFT, KC_TRNS, \
|
||||||
|
KC_LALT, KC_LGUI, LALT(KC_SPC), KC_LGUI, KC_RALT),
|
||||||
|
|
||||||
|
|
||||||
|
/* Layer WIN: Win layer
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
|
||||||
|
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
|
||||||
|
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
|
||||||
|
| Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
|
||||||
|
| Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
|
||||||
|
|--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
|
||||||
|
|
||||||
|
|------+------+-------+------+------|
|
||||||
|
| LGui | LAlt | Space | RGui | Ralt |
|
||||||
|
|------+------+-------+------+------|
|
||||||
|
*/
|
||||||
|
|
||||||
|
[WIN] = KEYMAP( // BASE level with swapped GUI/ALT
|
||||||
|
|
||||||
|
|
||||||
|
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
|
||||||
|
KC_LCTL, LT(LGUILEV,KC_A), LT(LALTLEV,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RALTLEV,KC_L), LT(RGUILEV,KC_SCLN), KC_QUOT, KC_FN0, \
|
||||||
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \
|
||||||
|
KC_RGUI, KC_RALT, KC_SPC, KC_RALT, KC_RGUI)};
|
||||||
|
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT) // RControl with tap Enter*
|
||||||
|
};
|
||||||
|
|
||||||
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
// MACRODOWN only works in this function
|
||||||
|
switch(id) {
|
||||||
|
case 0:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
register_code(KC_RSFT);
|
||||||
|
} else {
|
||||||
|
unregister_code(KC_RSFT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return MACRO_NONE;
|
||||||
|
};
|
|
@ -0,0 +1,196 @@
|
||||||
|
/*
|
||||||
|
Copyright 2011 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* scan matrix
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include "print.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "util.h"
|
||||||
|
#include "timer.h"
|
||||||
|
#include "matrix.h"
|
||||||
|
#include "hhkb_avr.h"
|
||||||
|
#include <avr/wdt.h>
|
||||||
|
#include "suspend.h"
|
||||||
|
#include "lufa.h"
|
||||||
|
|
||||||
|
|
||||||
|
// matrix power saving
|
||||||
|
#define MATRIX_POWER_SAVE 10000
|
||||||
|
static uint32_t matrix_last_modified = 0;
|
||||||
|
|
||||||
|
// matrix state buffer(1:on, 0:off)
|
||||||
|
static matrix_row_t *matrix;
|
||||||
|
static matrix_row_t *matrix_prev;
|
||||||
|
static matrix_row_t _matrix0[MATRIX_ROWS];
|
||||||
|
static matrix_row_t _matrix1[MATRIX_ROWS];
|
||||||
|
|
||||||
|
|
||||||
|
inline
|
||||||
|
uint8_t matrix_rows(void)
|
||||||
|
{
|
||||||
|
return MATRIX_ROWS;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
uint8_t matrix_cols(void)
|
||||||
|
{
|
||||||
|
return MATRIX_COLS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init(void)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
debug_enable = true;
|
||||||
|
debug_keyboard = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
KEY_INIT();
|
||||||
|
|
||||||
|
// initialize matrix state: all keys off
|
||||||
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00;
|
||||||
|
for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix1[i] = 0x00;
|
||||||
|
matrix = _matrix0;
|
||||||
|
matrix_prev = _matrix1;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t matrix_scan(void)
|
||||||
|
{
|
||||||
|
uint8_t *tmp;
|
||||||
|
|
||||||
|
tmp = matrix_prev;
|
||||||
|
matrix_prev = matrix;
|
||||||
|
matrix = tmp;
|
||||||
|
|
||||||
|
// power on
|
||||||
|
if (!KEY_POWER_STATE()) KEY_POWER_ON();
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||||
|
for (uint8_t col = 0; col < MATRIX_COLS; col++) {
|
||||||
|
KEY_SELECT(row, col);
|
||||||
|
_delay_us(5);
|
||||||
|
|
||||||
|
// Not sure this is needed. This just emulates HHKB controller's behaviour.
|
||||||
|
if (matrix_prev[row] & (1<<col)) {
|
||||||
|
KEY_PREV_ON();
|
||||||
|
}
|
||||||
|
_delay_us(10);
|
||||||
|
|
||||||
|
// NOTE: KEY_STATE is valid only in 20us after KEY_ENABLE.
|
||||||
|
// If V-USB interrupts in this section we could lose 40us or so
|
||||||
|
// and would read invalid value from KEY_STATE.
|
||||||
|
uint8_t last = TIMER_RAW;
|
||||||
|
|
||||||
|
KEY_ENABLE();
|
||||||
|
|
||||||
|
// Wait for KEY_STATE outputs its value.
|
||||||
|
// 1us was ok on one HHKB, but not worked on another.
|
||||||
|
// no wait doesn't work on Teensy++ with pro(1us works)
|
||||||
|
// no wait does work on tmk PCB(8MHz) with pro2
|
||||||
|
// 1us wait does work on both of above
|
||||||
|
// 1us wait doesn't work on tmk(16MHz)
|
||||||
|
// 5us wait does work on tmk(16MHz)
|
||||||
|
// 5us wait does work on tmk(16MHz/2)
|
||||||
|
// 5us wait does work on tmk(8MHz)
|
||||||
|
// 10us wait does work on Teensy++ with pro
|
||||||
|
// 10us wait does work on 328p+iwrap with pro
|
||||||
|
// 10us wait doesn't work on tmk PCB(8MHz) with pro2(very lagged scan)
|
||||||
|
_delay_us(5);
|
||||||
|
|
||||||
|
if (KEY_STATE()) {
|
||||||
|
matrix[row] &= ~(1<<col);
|
||||||
|
} else {
|
||||||
|
matrix[row] |= (1<<col);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore if this code region execution time elapses more than 20us.
|
||||||
|
// MEMO: 20[us] * (TIMER_RAW_FREQ / 1000000)[count per us]
|
||||||
|
// MEMO: then change above using this rule: a/(b/c) = a*1/(b/c) = a*(c/b)
|
||||||
|
if (TIMER_DIFF_RAW(TIMER_RAW, last) > 20/(1000000/TIMER_RAW_FREQ)) {
|
||||||
|
matrix[row] = matrix_prev[row];
|
||||||
|
}
|
||||||
|
|
||||||
|
_delay_us(5);
|
||||||
|
KEY_PREV_OFF();
|
||||||
|
KEY_UNABLE();
|
||||||
|
|
||||||
|
// NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE.
|
||||||
|
// This takes 25us or more to make sure KEY_STATE returns to idle state.
|
||||||
|
#ifdef HHKB_JP
|
||||||
|
// Looks like JP needs faster scan due to its twice larger matrix
|
||||||
|
// or it can drop keys in fast key typing
|
||||||
|
_delay_us(30);
|
||||||
|
#else
|
||||||
|
_delay_us(75);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
if (matrix[row] ^ matrix_prev[row]) matrix_last_modified = timer_read32();
|
||||||
|
}
|
||||||
|
// power off
|
||||||
|
if (KEY_POWER_STATE() &&
|
||||||
|
(USB_DeviceState == DEVICE_STATE_Suspended ||
|
||||||
|
USB_DeviceState == DEVICE_STATE_Unattached ) &&
|
||||||
|
timer_elapsed32(matrix_last_modified) > MATRIX_POWER_SAVE) {
|
||||||
|
KEY_POWER_OFF();
|
||||||
|
suspend_power_down();
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool matrix_is_modified(void)
|
||||||
|
{
|
||||||
|
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||||
|
if (matrix[i] != matrix_prev[i])
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
bool matrix_has_ghost(void)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
bool matrix_is_on(uint8_t row, uint8_t col)
|
||||||
|
{
|
||||||
|
return (matrix[row] & (1<<col));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
matrix_row_t matrix_get_row(uint8_t row)
|
||||||
|
{
|
||||||
|
return matrix[row];
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_print(void)
|
||||||
|
{
|
||||||
|
print("\nr/c 01234567\n");
|
||||||
|
for (uint8_t row = 0; row < matrix_rows(); row++) {
|
||||||
|
xprintf("%02X: %08b\n", row, bitrev(matrix_get_row(row)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_power_up(void) {
|
||||||
|
KEY_POWER_ON();
|
||||||
|
}
|
||||||
|
void matrix_power_down(void) {
|
||||||
|
KEY_POWER_OFF();
|
||||||
|
}
|
|
@ -68,6 +68,7 @@ extern const uint16_t fn_actions[];
|
||||||
#define LGUI(kc) kc | 0x0800
|
#define LGUI(kc) kc | 0x0800
|
||||||
#define HYPR(kc) kc | 0x0F00
|
#define HYPR(kc) kc | 0x0F00
|
||||||
#define MEH(kc) kc | 0x0700
|
#define MEH(kc) kc | 0x0700
|
||||||
|
#define LCAG(kc) kc | 0x0D00 // Modifier Ctrl Alt and GUI
|
||||||
|
|
||||||
#define RCTL(kc) kc | 0x1100
|
#define RCTL(kc) kc | 0x1100
|
||||||
#define RSFT(kc) kc | 0x1200
|
#define RSFT(kc) kc | 0x1200
|
||||||
|
@ -193,6 +194,7 @@ extern const uint16_t fn_actions[];
|
||||||
#define GUI_T(kc) MT(0x8, kc)
|
#define GUI_T(kc) MT(0x8, kc)
|
||||||
#define C_S_T(kc) MT(0x3, kc) // Control + Shift e.g. for gnome-terminal
|
#define C_S_T(kc) MT(0x3, kc) // Control + Shift e.g. for gnome-terminal
|
||||||
#define MEH_T(kc) MT(0x7, kc) // Meh is a less hyper version of the Hyper key -- doesn't include Win or Cmd, so just alt+shift+ctrl
|
#define MEH_T(kc) MT(0x7, kc) // Meh is a less hyper version of the Hyper key -- doesn't include Win or Cmd, so just alt+shift+ctrl
|
||||||
|
#define LCAG_T(kc) MT(0xD, kc) // Left control alt and gui
|
||||||
#define ALL_T(kc) MT(0xF, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
|
#define ALL_T(kc) MT(0xF, kc) // see http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/
|
||||||
|
|
||||||
// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap
|
// Dedicated keycode versions for Hyper and Meh, if you want to use them as standalone keys rather than mod-tap
|
||||||
|
|
|
@ -11,6 +11,45 @@
|
||||||
#define DE_Z KC_Y
|
#define DE_Z KC_Y
|
||||||
#define DE_Y KC_Z
|
#define DE_Y KC_Z
|
||||||
|
|
||||||
|
#define DE_A KC_A
|
||||||
|
#define DE_B KC_B
|
||||||
|
#define DE_C KC_C
|
||||||
|
#define DE_D KC_D
|
||||||
|
#define DE_E KC_E
|
||||||
|
#define DE_F KC_F
|
||||||
|
#define DE_G KC_G
|
||||||
|
#define DE_H KC_H
|
||||||
|
#define DE_I KC_I
|
||||||
|
#define DE_J KC_J
|
||||||
|
#define DE_K KC_K
|
||||||
|
#define DE_L KC_L
|
||||||
|
#define DE_M KC_M
|
||||||
|
#define DE_N KC_N
|
||||||
|
#define DE_O KC_O
|
||||||
|
#define DE_P KC_P
|
||||||
|
#define DE_Q KC_Q
|
||||||
|
#define DE_R KC_R
|
||||||
|
#define DE_S KC_S
|
||||||
|
#define DE_T KC_T
|
||||||
|
#define DE_U KC_U
|
||||||
|
#define DE_V KC_V
|
||||||
|
#define DE_W KC_W
|
||||||
|
#define DE_X KC_X
|
||||||
|
|
||||||
|
#define DE_0 KC_0
|
||||||
|
#define DE_1 KC_1
|
||||||
|
#define DE_2 KC_2
|
||||||
|
#define DE_3 KC_3
|
||||||
|
#define DE_4 KC_4
|
||||||
|
#define DE_5 KC_5
|
||||||
|
#define DE_6 KC_6
|
||||||
|
#define DE_7 KC_7
|
||||||
|
#define DE_8 KC_8
|
||||||
|
#define DE_9 KC_9
|
||||||
|
|
||||||
|
#define DE_DOT KC_DOT
|
||||||
|
#define DE_COMM KC_COMM
|
||||||
|
|
||||||
#define DE_SS KC_MINS
|
#define DE_SS KC_MINS
|
||||||
#define DE_AE KC_QUOT
|
#define DE_AE KC_QUOT
|
||||||
#define DE_UE KC_LBRC
|
#define DE_UE KC_LBRC
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
#ifndef KEYMAP_GERMAN_OSX
|
||||||
|
#define KEYMAP_GERMAN_OSX
|
||||||
|
|
||||||
|
#ifdef KEYMAP_GERMAN
|
||||||
|
#warning redefining german keys
|
||||||
|
#endif
|
||||||
|
#include "keymap_common.h"
|
||||||
|
|
||||||
|
// Alt gr
|
||||||
|
|
||||||
|
// normal characters
|
||||||
|
#define DE_Z KC_Y
|
||||||
|
#define DE_Y KC_Z
|
||||||
|
|
||||||
|
#define DE_A KC_A
|
||||||
|
#define DE_B KC_B
|
||||||
|
#define DE_C KC_C
|
||||||
|
#define DE_D KC_D
|
||||||
|
#define DE_E KC_E
|
||||||
|
#define DE_F KC_F
|
||||||
|
#define DE_G KC_G
|
||||||
|
#define DE_H KC_H
|
||||||
|
#define DE_I KC_I
|
||||||
|
#define DE_J KC_J
|
||||||
|
#define DE_K KC_K
|
||||||
|
#define DE_L KC_L
|
||||||
|
#define DE_M KC_M
|
||||||
|
#define DE_N KC_N
|
||||||
|
#define DE_O KC_O
|
||||||
|
#define DE_P KC_P
|
||||||
|
#define DE_Q KC_Q
|
||||||
|
#define DE_R KC_R
|
||||||
|
#define DE_S KC_S
|
||||||
|
#define DE_T KC_T
|
||||||
|
#define DE_U KC_U
|
||||||
|
#define DE_V KC_V
|
||||||
|
#define DE_W KC_W
|
||||||
|
#define DE_X KC_X
|
||||||
|
|
||||||
|
#define DE_0 KC_0
|
||||||
|
#define DE_1 KC_1
|
||||||
|
#define DE_2 KC_2
|
||||||
|
#define DE_3 KC_3
|
||||||
|
#define DE_4 KC_4
|
||||||
|
#define DE_5 KC_5
|
||||||
|
#define DE_6 KC_6
|
||||||
|
#define DE_7 KC_7
|
||||||
|
#define DE_8 KC_8
|
||||||
|
#define DE_9 KC_9
|
||||||
|
|
||||||
|
#define DE_DOT KC_DOT
|
||||||
|
#define DE_COMM KC_COMM
|
||||||
|
|
||||||
|
#define DE_SS KC_MINS
|
||||||
|
#define DE_AE KC_QUOT
|
||||||
|
#define DE_UE KC_LBRC
|
||||||
|
#define DE_OE KC_SCLN
|
||||||
|
|
||||||
|
#define DE_CIRC KC_NUBS // accent circumflex ^ and ring °
|
||||||
|
#define DE_ACUT KC_EQL // accent acute ´ and grave `
|
||||||
|
#define DE_PLUS KC_RBRC // + and * and ~
|
||||||
|
#define DE_HASH KC_BSLS // # and '
|
||||||
|
#define DE_LESS KC_GRV // < and > and |
|
||||||
|
#define DE_MINS KC_SLSH // - and _
|
||||||
|
|
||||||
|
// shifted characters
|
||||||
|
#define DE_RING LSFT(DE_CIRC) // °
|
||||||
|
#define DE_EXLM LSFT(KC_1) // !
|
||||||
|
#define DE_DQOT LSFT(KC_2) // "
|
||||||
|
#define DE_PARA LSFT(KC_3) // §
|
||||||
|
#define DE_DLR LSFT(KC_4) // $
|
||||||
|
#define DE_PERC LSFT(KC_5) // %
|
||||||
|
#define DE_AMPR LSFT(KC_6) // &
|
||||||
|
#define DE_SLSH LSFT(KC_7) // /
|
||||||
|
#define DE_LPRN LSFT(KC_8) // (
|
||||||
|
#define DE_RPRN LSFT(KC_9) // )
|
||||||
|
#define DE_EQL LSFT(KC_0) // =
|
||||||
|
#define DE_QST LSFT(DE_SS) // ?
|
||||||
|
#define DE_GRV LSFT(DE_ACUT) // `
|
||||||
|
#define DE_ASTR LSFT(DE_PLUS) // *
|
||||||
|
#define DE_QUOT LSFT(DE_HASH) // '
|
||||||
|
#define DE_MORE LSFT(DE_LESS) // >
|
||||||
|
#define DE_COLN LSFT(KC_DOT) // :
|
||||||
|
#define DE_SCLN LSFT(KC_COMM) // ;
|
||||||
|
#define DE_UNDS LSFT(DE_MINS) // _
|
||||||
|
|
||||||
|
// Alt-ed characters
|
||||||
|
#define DE_SQ2 LALT(KC_2) // ²
|
||||||
|
#define DE_SQ3 LALT(KC_3) // ³
|
||||||
|
#define DE_LCBR LALT(KC_7) // {
|
||||||
|
#define DE_LBRC LALT(KC_5) // [
|
||||||
|
#define DE_RBRC LALT(KC_6) // ]
|
||||||
|
#define DE_RCBR LALT(KC_9) // }
|
||||||
|
#define DE_BSLS LALT(LSFT(KC_7)) // backslash
|
||||||
|
#define DE_AT LALT(DE_L) // @
|
||||||
|
#define DE_EURO LALT(KC_E) // €
|
||||||
|
#define DE_TILD LALT(DE_N) // ~
|
||||||
|
#define DE_PIPE LALT(DE_7) // |
|
||||||
|
|
||||||
|
#endif
|
|
@ -6,7 +6,7 @@ Download and Install
|
||||||
--------------------
|
--------------------
|
||||||
### 1. Install Tools
|
### 1. Install Tools
|
||||||
|
|
||||||
1. **Toolchain** On Windows install [MHV AVR Tools][mhv] for AVR GCC compiler and [Cygwin][cygwin](or [MinGW][mingw]) for shell terminal. On Mac you can use [CrossPack][crosspack]. On Linux you can install AVR GCC with your favorite package manager.
|
1. **Toolchain** On Windows install [MHV AVR Tools][mhv] for AVR GCC compiler and [Cygwin][cygwin](or [MinGW][mingw]) for shell terminal. On Mac you can use [CrossPack][crosspack]. On Linux you can install AVR GCC (and avr-libc) with your favorite package manager.
|
||||||
|
|
||||||
2. **Programmer** On Windows install [Atmel FLIP][flip]. On Mac and Linux install [dfu-programmer][dfu-prog].
|
2. **Programmer** On Windows install [Atmel FLIP][flip]. On Mac and Linux install [dfu-programmer][dfu-prog].
|
||||||
|
|
||||||
|
|