Merge branch 'master' of https://github.com/jackhumbert/qmk_firmware
This commit is contained in:
commit
b0dfb037dc
121 changed files with 6291 additions and 750 deletions
10
.travis.yml
10
.travis.yml
|
|
@ -2,7 +2,6 @@ os: linux
|
|||
dist: trusty
|
||||
sudo: required
|
||||
language: c
|
||||
compiler: avr-gcc
|
||||
branches:
|
||||
except:
|
||||
- /^.*-automated-build$/
|
||||
|
|
@ -12,13 +11,18 @@ env:
|
|||
matrix:
|
||||
- TARGET=all-keyboards AUTOGEN=true
|
||||
- TARGET=test AUTOGEN=false
|
||||
before_install:
|
||||
- wget http://www.atmel.com/images/avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
|
||||
install:
|
||||
- tar -zxf avr8-gnu-toolchain-3.5.4.1709-linux.any.x86_64.tar.gz
|
||||
- export PATH="$PATH:$TRAVIS_BUILD_DIR/avr8-gnu-toolchain-linux_x86_64/bin"
|
||||
before_script:
|
||||
- avr-gcc --version
|
||||
script:
|
||||
- make $TARGET AUTOGEN=$AUTOGEN
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- avr-libc
|
||||
- gcc-avr
|
||||
- dfu-programmer
|
||||
- pandoc
|
||||
- gcc-arm-none-eabi
|
||||
|
|
|
|||
|
|
@ -25,4 +25,5 @@ ENV subproject=ez
|
|||
ENV keymap=default
|
||||
|
||||
VOLUME /qmk
|
||||
WORKDIR /qmk
|
||||
WORKDIR /qmk
|
||||
CMD make clean ; make keyboard=${keyboard} subproject=${subproject} keymap=${keymap}
|
||||
|
|
|
|||
40
Makefile
40
Makefile
|
|
@ -16,10 +16,10 @@ ifdef SILENT
|
|||
endif
|
||||
|
||||
# We need to make sure that silent is always turned off at the top level
|
||||
# Otherwise the [OK], [ERROR] and [WARN] messags won't be displayed correctly
|
||||
# Otherwise the [OK], [ERROR] and [WARN] messages won't be displayed correctly
|
||||
override SILENT := false
|
||||
|
||||
ON_ERROR := error_occured=1
|
||||
ON_ERROR := error_occurred=1
|
||||
|
||||
STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST))
|
||||
ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST))
|
||||
|
|
@ -34,13 +34,13 @@ ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE))
|
|||
STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
|
||||
BUILD_DIR := $(ROOT_DIR)/.build
|
||||
TEST_DIR := $(BUILD_DIR)/test
|
||||
ERROR_FILE := $(BUILD_DIR)/error_occured
|
||||
ERROR_FILE := $(BUILD_DIR)/error_occurred
|
||||
|
||||
MAKEFILE_INCLUDED=yes
|
||||
|
||||
# Helper function to process the newt element of a space separated path
|
||||
# It works a bit like the traditional functional head tail
|
||||
# so the CURRENT_PATH_ELEMENT will beome the new head
|
||||
# so the CURRENT_PATH_ELEMENT will become the new head
|
||||
# and the PATH_ELEMENTS are the rest that are still unprocessed
|
||||
define NEXT_PATH_ELEMENT
|
||||
$$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS)))
|
||||
|
|
@ -84,7 +84,7 @@ endif
|
|||
# Only consider folders with makefiles, to prevent errors in case there are extra folders
|
||||
KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile)))
|
||||
|
||||
#Compability with the old make variables, anything you specify directly on the command line
|
||||
#Compatibility with the old make variables, anything you specify directly on the command line
|
||||
# always overrides the detected folders
|
||||
ifdef keyboard
|
||||
KEYBOARD := $(keyboard)
|
||||
|
|
@ -106,7 +106,7 @@ endif
|
|||
#$(info Keyboards: $(KEYBOARDS))
|
||||
|
||||
|
||||
# Set the default goal depening on where we are running make from
|
||||
# Set the default goal depending on where we are running make from
|
||||
# this handles the case where you run make without any arguments
|
||||
.DEFAULT_GOAL := all
|
||||
ifneq ($(KEYMAP),)
|
||||
|
|
@ -170,7 +170,7 @@ define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3
|
|||
endef
|
||||
|
||||
# A recursive helper function for finding the longest match
|
||||
# $1 The list to be checed
|
||||
# $1 The list to be checked
|
||||
# It works by always removing the currently matched item from the list
|
||||
# and call itself recursively, until a match is found
|
||||
define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2
|
||||
|
|
@ -180,7 +180,7 @@ define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2
|
|||
$$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1))
|
||||
# If a match is found in the current list, otherwise just return what we had before
|
||||
ifeq ($$(RULE_FOUND),true)
|
||||
# Save the best match so far and call itself recursivel
|
||||
# Save the best match so far and call itself recursively
|
||||
BEST_MATCH := $$(MATCHED_ITEM)
|
||||
BEST_MATCH_RULE := $$(RULE)
|
||||
RULE_FOUND := false
|
||||
|
|
@ -337,7 +337,7 @@ define PARSE_SUBPROJECT
|
|||
$$(eval $$(call PARSE_ALL_KEYMAPS))
|
||||
endif
|
||||
else
|
||||
# As earlier mentione,d when allsb is specified, we call our self recursively
|
||||
# As earlier mentioned when allsb is specified, we call our self recursively
|
||||
# for all of the subprojects
|
||||
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$(SUBPROJECTS)))
|
||||
endif
|
||||
|
|
@ -403,11 +403,11 @@ define BUILD
|
|||
printf "$$(MAKE_MSG)\n\n"; \
|
||||
$$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; \
|
||||
if [ $$$$? -gt 0 ]; \
|
||||
then error_occured=1; \
|
||||
then error_occurred=1; \
|
||||
fi;
|
||||
endef
|
||||
|
||||
# Just parse all the keymaps for a specifc keyboard
|
||||
# Just parse all the keymaps for a specific keyboard
|
||||
define PARSE_ALL_KEYMAPS
|
||||
$$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS)))
|
||||
endef
|
||||
|
|
@ -428,7 +428,7 @@ define BUILD_TEST
|
|||
printf "$$(TEST_MSG)\n"; \
|
||||
$$(TEST_EXECUTABLE); \
|
||||
if [ $$$$? -gt 0 ]; \
|
||||
then error_occured=1; \
|
||||
then error_occurred=1; \
|
||||
fi; \
|
||||
printf "\n";
|
||||
endif
|
||||
|
|
@ -448,7 +448,7 @@ endef
|
|||
|
||||
|
||||
# Set the silent mode depending on if we are trying to compile multiple keyboards or not
|
||||
# By default it's on in that case, but it can be overriden by specifying silent=false
|
||||
# By default it's on in that case, but it can be overridden by specifying silent=false
|
||||
# from the command line
|
||||
define SET_SILENT_MODE
|
||||
ifdef SUB_IS_SILENT
|
||||
|
|
@ -465,16 +465,16 @@ include $(ROOT_DIR)/message.mk
|
|||
# The empty line is important here, as it will force a new shell to be created for each command
|
||||
# Otherwise the command line will become too long with a lot of keyboards and keymaps
|
||||
define RUN_COMMAND
|
||||
+error_occured=0;\
|
||||
+error_occurred=0;\
|
||||
$(COMMAND_$(SILENT_MODE)_$(COMMAND))\
|
||||
if [ $$error_occured -gt 0 ]; then echo $$error_occured > $(ERROR_FILE); fi;
|
||||
if [ $$error_occurred -gt 0 ]; then echo $$error_occurred > $(ERROR_FILE); fi;
|
||||
|
||||
|
||||
endef
|
||||
define RUN_TEST
|
||||
+error_occured=0;\
|
||||
+error_occurred=0;\
|
||||
$($(TEST)_COMMAND)\
|
||||
if [ $$error_occured -gt 0 ]; then echo $$error_occured > $(ERROR_FILE); fi;
|
||||
if [ $$error_occurred -gt 0 ]; then echo $$error_occurred > $(ERROR_FILE); fi;
|
||||
|
||||
endef
|
||||
|
||||
|
|
@ -487,7 +487,7 @@ $(SUBPROJECTS): %: %-allkm
|
|||
.PHONY: %
|
||||
%:
|
||||
# Check if we have the CMP tool installed
|
||||
cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
|
||||
cmp $(ROOT_DIR)/Makefile $(ROOT_DIR)/Makefile >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
|
||||
# Check if the submodules are dirty, and display a warning if they are
|
||||
ifndef SKIP_GIT
|
||||
git submodule status --recursive 2>/dev/null | \
|
||||
|
|
@ -514,7 +514,7 @@ endif
|
|||
.PHONY: all
|
||||
all: all-keyboards test-all
|
||||
|
||||
# Define some shortcuts, mostly for compability with the old syntax
|
||||
# Define some shortcuts, mostly for compatibility with the old syntax
|
||||
.PHONY: all-keyboards
|
||||
all-keyboards: allkb-allsp-allkm
|
||||
|
||||
|
|
@ -537,4 +537,4 @@ BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")
|
|||
$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h)
|
||||
$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h)
|
||||
|
||||
include $(ROOT_DIR)/testlist.mk
|
||||
include $(ROOT_DIR)/testlist.mk
|
||||
|
|
|
|||
|
|
@ -221,7 +221,11 @@ OPT_DEFS += $(TMK_COMMON_DEFS)
|
|||
EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
|
||||
|
||||
ifeq ($(PLATFORM),AVR)
|
||||
ifeq ($(strip $(PROTOCOL)), VUSB)
|
||||
include $(TMK_PATH)/protocol/vusb.mk
|
||||
else
|
||||
include $(TMK_PATH)/protocol/lufa.mk
|
||||
endif
|
||||
include $(TMK_PATH)/avr.mk
|
||||
endif
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
1. If you have ever installed WinAVR, uninstall it.
|
||||
2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
|
||||
3. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
|
||||
4. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
|
||||
4. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/qmk/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
|
||||
5. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
|
||||
6. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
|
||||
7. Future build commands should be run from the standard Windows command prompt, which you can find by searching for "command prompt" from the start menu or start screen. Ignore the "MHV AVR Shell".
|
||||
|
|
@ -38,7 +38,7 @@ Debian/Ubuntu example:
|
|||
If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](VAGRANT_GUIDE.md).
|
||||
|
||||
## Verify Your Installation
|
||||
1. If you haven't already, obtain this repository ([https://github.com/jackhumbert/qmk_firmware](https://github.com/jackhumbert/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application.
|
||||
1. If you haven't already, obtain this repository ([https://github.com/qmk/qmk_firmware](https://github.com/qmk/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application.
|
||||
2. Open up a terminal or command prompt and navigate to the `qmk_firmware` folder using the `cd` command. The command prompt will typically open to your home directory. If, for example, you cloned the repository to your Documents folder, then you would type `cd Documents/qmk_firmware`. If you extracted the file from a zip, then it may be named `qmk_firmware-master` instead.
|
||||
3. To confirm that you're in the correct location, you can display the contents of your current folder using the `dir` command on Windows, or the `ls` command on Linux or Mac. You should see several files, including `readme.md` and a `quantum` folder. From here, you need to navigate to the appropriate folder under `keyboards/`. For example, if you're building for a Planck, run `cd keyboards/planck`.
|
||||
4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process. More information about the `make` command can be found below.
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@ If you did everything else right. This part should be a snap! Grab the latest so
|
|||
###Build Planck and Load the Firmware
|
||||
```
|
||||
$ cd ~/src
|
||||
$ git clone https://github.com/jackhumbert/qmk_firmware.git
|
||||
$ git clone https://github.com/qmk/qmk_firmware.git
|
||||
$ cd qmk_firmware/keyboards/planck
|
||||
$ make
|
||||
```
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@ As you move along, be sure that the Teensy is staying in place - recutting and s
|
|||
|
||||
From here, you should have a working keyboard with the correct firmware. Before we attach the Teensy permanently to the keyboard, let's quickly get some firmware loaded onto the Teensy so we can test each keyswitch.
|
||||
|
||||
To start out, download [the firmware](https://github.com/jackhumbert/qmk_firmware/) - we'll be using my (Jack's) fork of TMK called QMK/Quantum. We'll be doing a lot from the Terminal/command prompt, so get that open, along with a decent text editor like [Sublime Text](http://www.sublimetext.com/).
|
||||
To start out, download [the firmware](https://github.com/qmk/qmk_firmware/) - we'll be using my (Jack's) fork of TMK called QMK/Quantum. We'll be doing a lot from the Terminal/command prompt, so get that open, along with a decent text editor like [Sublime Text](http://www.sublimetext.com/).
|
||||
|
||||
The first thing we're going to do is create a new project using the script in the root directory of the firmware. In your terminal, run this command with `<project_name>` replaced by the name of your project - it'll need to be different from any other project in the `keyboards/` folder:
|
||||
|
||||
|
|
@ -276,7 +276,7 @@ This can be accomplished by using the following `keymaps` definition:
|
|||
),
|
||||
};
|
||||
|
||||
Note that the layout of the keycodes is similar to the physical layout of our keyboard - this make it much easier to see what's going on. A lot of the keycodes should be fairly obvious, but for a full list of them, check out [tmk_code/doc/keycode.txt](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keycode.txt) - there are also a lot of aliases to condense your keymap file.
|
||||
Note that the layout of the keycodes is similar to the physical layout of our keyboard - this make it much easier to see what's going on. A lot of the keycodes should be fairly obvious, but for a full list of them, check out [tmk_code/doc/keycode.txt](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/doc/keycode.txt) - there are also a lot of aliases to condense your keymap file.
|
||||
|
||||
It's also important to use the `KEYMAP` function we defined earlier - this is what allows the firmware to associate our intended readable keymap with the actual wiring.
|
||||
|
||||
|
|
@ -306,7 +306,7 @@ If you've done all of these things, keep in mind that sometimes you might have h
|
|||
|
||||
Now that you have a working board, it's time to get things in their permanent positions. I've often used liberal amounts of hot glue to secure and insulate things, so if that's your style, start spreading that stuff like butter. Otherwise, double-sided tape is always an elegant solution, and electrical tape is a distant second. Due to the nature of these builds, a lot of this part is up to you and how you planned (or didn't plan) things out.
|
||||
|
||||
There are a lot of possibilities inside the firmware - check out the [readme](https://github.com/jackhumbert/qmk_firmware/blob/master/readme.md) for a full feature list, and dive into the different project (Planck, Ergodox EZ, etc) to see how people use all of them. You can always stop by [the OLKB subreddit for help!](http://reddit.com/r/olkb)
|
||||
There are a lot of possibilities inside the firmware - check out the [readme](https://github.com/qmk/qmk_firmware/blob/master/readme.md) for a full feature list, and dive into the different project (Planck, Ergodox EZ, etc) to see how people use all of them. You can always stop by [the OLKB subreddit for help!](http://reddit.com/r/olkb)
|
||||
|
||||
## Trouble-shooting compiling
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
### Windows
|
||||
1. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
|
||||
2. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
|
||||
3. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
|
||||
3. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/qmk/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
|
||||
4. Right-click on the 1-setup-path-win batch script, select "Run as administrator", and accept the User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
|
||||
5. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
|
||||
|
||||
|
|
@ -32,7 +32,7 @@ Note that, since it will be directly accessing USB hardware, the
|
|||
`dfu-programmer` program needs to be run as root.
|
||||
|
||||
## Verify Your Installation
|
||||
1. Clone the following repository: https://github.com/jackhumbert/qmk_firmware
|
||||
1. Clone the following repository: https://github.com/qmk/qmk_firmware
|
||||
2. Open a Terminal and `cd` into `qmk_firmware/keyboards/planck`
|
||||
3. Run `make`. This should output a lot of information about the build process.
|
||||
|
||||
|
|
@ -80,7 +80,7 @@ when trying to 'make dfu' on Windows you need to copy the dfu-programmer.exe to
|
|||
|
||||
### Keymap
|
||||
|
||||
Unlike the other keymaps, prefixing the keycodes with `KC_` is required. A full list of the keycodes is available [here](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keycode.txt). For the keycodes available only in the extended keymap, see this [header file](https://github.com/jackhumbert/qmk_firmware/blob/master/quantum/keymap_common.h).
|
||||
Unlike the other keymaps, prefixing the keycodes with `KC_` is required. A full list of the keycodes is available [here](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/doc/keycode.txt). For the keycodes available only in the extended keymap, see this [header file](https://github.com/qmk/qmk_firmware/blob/master/quantum/keymap_common.h).
|
||||
|
||||
You can use modifiers with keycodes like this:
|
||||
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ We've added shortcuts to make common modifier/tap (mod-tap) mappings more compac
|
|||
|
||||
### 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).
|
||||
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/qmk/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.
|
||||
|
||||
|
|
@ -169,7 +169,7 @@ This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboar
|
|||
|
||||
## Building
|
||||
|
||||
Download or clone the whole firmware and navigate to the keyboards/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.
|
||||
Download or clone the whole firmware and navigate to the keyboards/atreus 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.
|
||||
|
||||
|
|
|
|||
5
keyboards/atreus62/keymaps/mneme/Makefile
Normal file
5
keyboards/atreus62/keymaps/mneme/Makefile
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
TAP_DANCE_ENABLE = yes
|
||||
NKRO_ENABLE = true
|
||||
MOUSEKEY_ENABLE = no
|
||||
EXTRAKEY_ENABLE = yes
|
||||
CONSOLE_ENABLE = no
|
||||
56
keyboards/atreus62/keymaps/mneme/README.md
Normal file
56
keyboards/atreus62/keymaps/mneme/README.md
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
<!-- -*- mode: markdown; fill-column: 8192 -*- -->
|
||||
|
||||
Mnemes Swedish Bonaza
|
||||
=======================
|
||||
|
||||
My Layout in process, most of the code is shamelessly stolen from [algernons][algernon] excellent layout
|
||||
|
||||
[algernon]: https://github.com/algernon/ergodox-layout
|
||||
|
||||
It's for Windows (current work forces me to) and Swedish (matter of birth) so ymmw.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Layouts](#layouts)
|
||||
- [Base layer](#base-layer)
|
||||
- [Nav layer](#nav-layer)
|
||||
- [Sym layer](#sym-layer)
|
||||
- [LED states](#led-states)
|
||||
|
||||
# Layouts
|
||||
|
||||
## Base layer
|
||||
|
||||

|
||||
|
||||
|
||||
* The number row doubles as a function row. Short presses produces numbers, long presses produces Fxx
|
||||
* The `Shift`, `Alt`, and `Control` modifiers are one-shot.
|
||||
* `Backspace` and `Enter` doubles as switches to the `sym` layer when held
|
||||
* The `ESC` key also doubles as a one-shot cancel key.
|
||||
* The **Lead** key is followed by a sequence of keys.
|
||||
- `LEAD l` : `lgui+l`.
|
||||
- `LEAD s l` : `λ`.
|
||||
- `LEAD s s` : `¯\_(ツ)_/¯`
|
||||
- `LEAD s f` : `凸(ツ)凸`
|
||||
- `LEAD a *` : Application switching based on position in start menu. Very specific to my computer.
|
||||
|
||||
|
||||
## Nav layer
|
||||
|
||||

|
||||
|
||||
Basic navigation on the right hand and modifiers close
|
||||
by for the left. The latter because I tend to use `ctrl+arrows` quite a lot.
|
||||
|
||||
## Sym layer
|
||||
|
||||

|
||||
|
||||
* Easy access to most symbols I use on a daily basis. Most common are on the home row, the rest are grouped as best as I could.
|
||||
|
||||
- `eq` : Tapdance, produces `===` and `!==`
|
||||
- `fun`: Tapdance, produces `=>` and `() => {\n`
|
||||
|
||||
# License
|
||||
GPL-3+
|
||||
7
keyboards/atreus62/keymaps/mneme/config.h
Normal file
7
keyboards/atreus62/keymaps/mneme/config.h
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#define ONESHOT_TIMEOUT 3000
|
||||
#define TAPPING_TERM 200
|
||||
#define PREVENT_STUCK_MODIFIERS
|
||||
|
||||
#define LEADER_TIMEOUT 1000
|
||||
|
||||
#include "../../config.h"
|
||||
BIN
keyboards/atreus62/keymaps/mneme/img/base.png
Normal file
BIN
keyboards/atreus62/keymaps/mneme/img/base.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 448 KiB |
BIN
keyboards/atreus62/keymaps/mneme/img/fun.png
Normal file
BIN
keyboards/atreus62/keymaps/mneme/img/fun.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 421 KiB |
BIN
keyboards/atreus62/keymaps/mneme/img/sym.png
Normal file
BIN
keyboards/atreus62/keymaps/mneme/img/sym.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 423 KiB |
337
keyboards/atreus62/keymaps/mneme/keymap.c
Normal file
337
keyboards/atreus62/keymaps/mneme/keymap.c
Normal file
|
|
@ -0,0 +1,337 @@
|
|||
#include <stdarg.h>
|
||||
#include "atreus62.h"
|
||||
#include "led.h"
|
||||
#include "action_layer.h"
|
||||
#include "action_util.h"
|
||||
|
||||
/*
|
||||
*WINDOWS SWEDISH
|
||||
*/
|
||||
#define KN_HALF KC_GRV // 1/2
|
||||
#define KN_PLUS KC_MINS // +
|
||||
#define KN_ACUT KC_EQL // ´
|
||||
#define KN_AO KC_LBRC // Å
|
||||
#define KN_UMLA KC_RBRC // ¨
|
||||
#define KN_OE KC_SCLN // Ö
|
||||
#define KN_AE KC_QUOT // Ä
|
||||
#define KN_QUOT KC_NUHS // '
|
||||
#define KN_LABK KC_NUBS // <
|
||||
#define KN_MINS KC_SLSH // -
|
||||
#define KN_EXLM LSFT(KC_1) // !
|
||||
#define KN_DQT LSFT(KC_2) // "
|
||||
#define KN_AT RALT(KC_2) // @
|
||||
#define KN_HASH LSFT(KC_3) // #
|
||||
#define KN_DLR RALT(KC_4) // $
|
||||
#define KN_PERC LSFT(KC_5) // %
|
||||
#define KN_AMPR LSFT(KC_6) // &
|
||||
#define KN_SLSH LSFT(KC_7) // /
|
||||
#define KN_LPRN LSFT(KC_8) // (
|
||||
#define KN_RPRN LSFT(KC_9) // )
|
||||
#define KN_EQL LSFT(KC_0) // =
|
||||
#define KN_UNDS LSFT(KN_MINS) // _
|
||||
#define KN_QUES LSFT(KN_PLUS) // ?
|
||||
#define KN_GRAV LSFT(KN_ACUT) // `
|
||||
#define KN_LCBR RALT(KC_7) // {
|
||||
#define KN_RCBR RALT(KC_0) // }
|
||||
#define KN_LBRC RALT(KC_8) // [
|
||||
#define KN_RBRC RALT(KC_9) // ]
|
||||
#define KN_RABK LSFT(KN_LABK) // <
|
||||
#define KN_COLN LSFT(KC_DOT) // :
|
||||
#define KN_SCLN LSFT(KC_COMM) // :
|
||||
#define KN_PIPE RALT(KN_LABK) // |
|
||||
#define KN_QUES LSFT(KN_PLUS) // ?
|
||||
#define KN_CIRC LSFT(KN_UMLA) // ^
|
||||
#define KN_ASTR LSFT(KN_QUOT) // *
|
||||
#define KN_TILD RALT(KN_UMLA) // ~
|
||||
#define KN_BSLS RALT(KN_PLUS) //
|
||||
|
||||
#define OSM_LCTL OSM(MOD_LCTL)
|
||||
#define OSM_LALT OSM(MOD_LALT)
|
||||
#define OSM_LSFT OSM(MOD_LSFT)
|
||||
|
||||
#define KC_HYP LSFT(LALT(LCTL(KC_LGUI)))
|
||||
|
||||
#define KC_COPY LCTL(KC_C)
|
||||
#define KC_PASTE LCTL(KC_V)
|
||||
#define KC_UNDO LCTL(KC_Z)
|
||||
#define KC_REDO LCTL(LSFT(KC_Z))
|
||||
|
||||
// Layers
|
||||
enum {
|
||||
BASE = 0,
|
||||
NAV,
|
||||
SYM
|
||||
};
|
||||
|
||||
//Macros
|
||||
enum {
|
||||
KF_1 = 0, // 1, F1
|
||||
KF_2, // ...
|
||||
KF_3,
|
||||
KF_4,
|
||||
KF_5,
|
||||
KF_6,
|
||||
KF_7,
|
||||
KF_8,
|
||||
KF_9,
|
||||
KF_10,
|
||||
KF_11,
|
||||
KF_12
|
||||
};
|
||||
|
||||
// Tapdance
|
||||
enum {
|
||||
TD_FUN = 0,
|
||||
TD_EQ
|
||||
};
|
||||
|
||||
//Custom keycodes
|
||||
enum {
|
||||
PLACEHOLDER = SAFE_RANGE
|
||||
};
|
||||
|
||||
//State and timers
|
||||
uint16_t kf_timers[12];
|
||||
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[BASE] = {
|
||||
|
||||
{ M(KF_11) ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,KC_NO ,M(KF_6) ,M(KF_7) ,M(KF_8) ,M(KF_9) ,M(KF_10) ,M(KF_12) },
|
||||
{ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_NO ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KN_AO },
|
||||
{ OSM_LCTL ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_NO ,KC_H ,KC_J ,KC_K ,KC_L ,KN_OE ,KN_AE },
|
||||
{ OSM_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_DELT ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KN_MINS ,OSM_LSFT },
|
||||
{ MO(NAV) ,OSM_LCTL ,OSM_LALT ,KC_LGUI ,KC_SPC ,LT(SYM,KC_BSPC) ,KC_HYP ,LT(SYM,KC_ENT) ,KC_SPC ,KC_LEAD ,KC_LALT ,KC_LCTRL ,MO(NAV) }
|
||||
|
||||
},
|
||||
[NAV] = {
|
||||
|
||||
{ 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_NO ,KC_PGUP ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS },
|
||||
{ KC_TRNS ,KC_LSFT ,KC_LCTL ,KC_LALT ,KC_L ,KC_TRNS ,KC_NO ,KC_PGDN ,KC_LEFT ,KC_DOWN ,KC_RIGHT ,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 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_VOLD ,KC_VOLU }
|
||||
|
||||
},
|
||||
[SYM] = {
|
||||
|
||||
{ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,TD(TD_EQ) ,KC_NO ,TD(TD_FUN) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
|
||||
{ KC_TRNS ,KN_LABK ,KN_RABK ,KN_LCBR ,KN_RCBR ,KN_PLUS ,KC_NO ,KN_AT ,KN_DQT ,KN_QUOT ,KN_GRAV ,KN_SLSH ,KC_TRNS },
|
||||
{ KC_TRNS ,KN_EXLM ,KN_EQL ,KN_LPRN ,KN_RPRN ,KN_MINS ,KC_NO ,KN_UNDS ,KN_SCLN ,KN_COLN ,KN_AMPR ,KN_PIPE ,KC_TRNS },
|
||||
{ KC_TRNS ,KN_DLR ,KN_PERC ,KN_LBRC ,KN_RBRC ,KN_ASTR ,KC_TRNS ,KN_HASH ,KC_COMM ,KC_DOT ,KN_QUES ,KN_BSLS ,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 }
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
#define TAP_ONCE(code) \
|
||||
register_code (code); \
|
||||
unregister_code (code)
|
||||
|
||||
static void m_tapn (uint8_t code, ...) {
|
||||
uint8_t kc = code;
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, code);
|
||||
do {
|
||||
register_code(kc);
|
||||
unregister_code(kc);
|
||||
wait_ms(50);
|
||||
kc = va_arg(ap, int);
|
||||
} while (kc != 0);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
static void m_handle_kf (keyrecord_t *record, uint8_t id) {
|
||||
uint8_t code = id - KF_1;
|
||||
|
||||
if (record->event.pressed) {
|
||||
kf_timers[code] = timer_read ();
|
||||
} else {
|
||||
uint8_t kc_base;
|
||||
uint8_t long_press = (kf_timers[code] && timer_elapsed (kf_timers[code]) > TAPPING_TERM);
|
||||
|
||||
kf_timers[code] = 0;
|
||||
|
||||
switch(id){
|
||||
case KF_1 ... KF_10:
|
||||
if (long_press) {
|
||||
// Long press
|
||||
kc_base = KC_F1;
|
||||
} else {
|
||||
kc_base = KC_1;
|
||||
}
|
||||
code += kc_base;
|
||||
break;
|
||||
case KF_11:
|
||||
code = long_press ? KC_F11 : KC_ESC;
|
||||
break;
|
||||
case KF_12:
|
||||
code = long_press ? KC_F12 : KN_PLUS;
|
||||
break;
|
||||
}
|
||||
register_code (code);
|
||||
unregister_code (code);
|
||||
}
|
||||
}
|
||||
|
||||
const uint16_t PROGMEM fn_actions[] = {
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||
{
|
||||
switch (id) {
|
||||
case KF_1 ... KF_12:
|
||||
m_handle_kf(record, id);
|
||||
break;
|
||||
}
|
||||
return MACRO_NONE;
|
||||
};
|
||||
|
||||
// Custom keycodes
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
bool queue = true;
|
||||
|
||||
//Cancle one-shot mods.
|
||||
switch (keycode) {
|
||||
case KC_ESC:
|
||||
if (record->event.pressed && get_oneshot_mods() && !has_oneshot_mods_timed_out()) {
|
||||
clear_oneshot_mods();
|
||||
queue = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return queue;
|
||||
}
|
||||
|
||||
// TAP DANCE SETTINGS
|
||||
void dance_eq (qk_tap_dance_state_t *state, void *user_data) {
|
||||
switch (state->count) {
|
||||
case 1: // ===
|
||||
register_code(KC_LSHIFT);
|
||||
m_tapn(KC_0, KC_0, KC_0, 0);
|
||||
unregister_code(KC_LSHIFT);
|
||||
break;
|
||||
case 2:
|
||||
register_code(KC_LSHIFT);
|
||||
m_tapn(KC_1, KC_0, KC_0, 0);
|
||||
unregister_code(KC_LSHIFT);
|
||||
break;
|
||||
default:
|
||||
reset_tap_dance(state);
|
||||
}
|
||||
}
|
||||
|
||||
void dance_fun (qk_tap_dance_state_t *state, void *user_data) {
|
||||
switch (state->count) {
|
||||
case 1: // =>
|
||||
register_code(KC_LSHIFT);
|
||||
m_tapn(KC_0, KN_LABK, 0);
|
||||
unregister_code(KC_LSHIFT);
|
||||
break;
|
||||
case 2: // () => {}
|
||||
register_code(KC_LSHIFT);
|
||||
m_tapn(KC_8, KC_9, KC_SPC, KC_0, KN_LABK, KC_SPC, 0);
|
||||
unregister_code(KC_LSHIFT);
|
||||
register_code(KC_RALT);
|
||||
m_tapn(KC_7, 0);
|
||||
unregister_code(KC_RALT);
|
||||
TAP_ONCE(KC_ENT);
|
||||
break;
|
||||
default:
|
||||
reset_tap_dance(state);
|
||||
}
|
||||
}
|
||||
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
[TD_FUN] = ACTION_TAP_DANCE_FN (dance_fun)
|
||||
,[TD_EQ] = ACTION_TAP_DANCE_FN (dance_eq)
|
||||
};
|
||||
|
||||
// Runs just one time when the keyboard initializes.
|
||||
void matrix_init_user(void) {
|
||||
set_unicode_input_mode(UC_WINC);
|
||||
};
|
||||
|
||||
LEADER_EXTERNS();
|
||||
// Runs constantly in the background, in a loop.
|
||||
void matrix_scan_user(void) {
|
||||
LEADER_DICTIONARY() {
|
||||
leading = false;
|
||||
leader_end();
|
||||
SEQ_ONE_KEY(KC_L){
|
||||
register_code(KC_RGUI);
|
||||
TAP_ONCE(KC_L);
|
||||
unregister_code(KC_RGUI);
|
||||
};
|
||||
|
||||
|
||||
SEQ_TWO_KEYS (KC_A, KC_W) {
|
||||
//Web - chrome
|
||||
register_code (KC_LGUI); TAP_ONCE (KC_1); unregister_code (KC_LGUI);
|
||||
}
|
||||
SEQ_TWO_KEYS (KC_A, KC_P) {
|
||||
//sPotify
|
||||
register_code (KC_LGUI); TAP_ONCE (KC_2); unregister_code (KC_LGUI);
|
||||
|
||||
}
|
||||
SEQ_TWO_KEYS (KC_A, KC_T) {
|
||||
//Total Commander
|
||||
register_code (KC_LGUI); TAP_ONCE (KC_3); unregister_code (KC_LGUI);
|
||||
|
||||
}
|
||||
SEQ_TWO_KEYS (KC_A, KC_A) {
|
||||
//Atom
|
||||
register_code (KC_LGUI); TAP_ONCE (KC_4); unregister_code (KC_LGUI);
|
||||
|
||||
}
|
||||
SEQ_TWO_KEYS (KC_A, KC_E) {
|
||||
//Emacs
|
||||
register_code (KC_LGUI); TAP_ONCE (KC_5); unregister_code (KC_LGUI);
|
||||
|
||||
}
|
||||
SEQ_TWO_KEYS (KC_A, KC_C) {
|
||||
//Cmdr
|
||||
register_code (KC_LGUI); TAP_ONCE (KC_6); unregister_code (KC_LGUI);
|
||||
|
||||
}
|
||||
SEQ_TWO_KEYS (KC_A, KC_S) {
|
||||
//Slack
|
||||
register_code (KC_LGUI); TAP_ONCE (KC_7); unregister_code (KC_LGUI);
|
||||
}
|
||||
|
||||
|
||||
SEQ_TWO_KEYS (KC_S, KC_S) {
|
||||
// ¯\_(ツ)_/¯
|
||||
unicode_input_start(); register_hex(0xaf); unicode_input_finish();
|
||||
register_code (KC_LALT);
|
||||
register_code (KC_LCTL);
|
||||
TAP_ONCE (KN_PLUS);
|
||||
unregister_code (KC_LCTL);
|
||||
unregister_code (KC_LALT);
|
||||
|
||||
register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
|
||||
unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
|
||||
register_code (KC_RSFT); TAP_ONCE (KC_9); TAP_ONCE(KC_7); unregister_code (KC_RSFT);
|
||||
unicode_input_start (); register_hex(0xaf); unicode_input_finish();
|
||||
}
|
||||
|
||||
SEQ_TWO_KEYS (KC_S, KC_F) {
|
||||
// 凸(ツ)凸
|
||||
unicode_input_start(); register_hex(0x51F8); unicode_input_finish();
|
||||
register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
|
||||
unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
|
||||
register_code (KC_RSFT); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
|
||||
unicode_input_start (); register_hex(0x51F8); unicode_input_finish();
|
||||
}
|
||||
|
||||
SEQ_TWO_KEYS (KC_S, KC_L) {
|
||||
// λ
|
||||
unicode_input_start();
|
||||
register_hex(0x03bb);
|
||||
unicode_input_finish();
|
||||
}
|
||||
};
|
||||
};
|
||||
114
keyboards/atreus62/keymaps/mneme/unicode
Normal file
114
keyboards/atreus62/keymaps/mneme/unicode
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
Todo
|
||||
☐ 2610 Todo
|
||||
☑ 2611 Done
|
||||
☒ 2612 Failed
|
||||
|
||||
Operator
|
||||
× 00D7 Multiplication
|
||||
÷ 00F7 Division
|
||||
≤ 2264 LessEqual
|
||||
≥ 2265 MoreEqual
|
||||
± 00B1 Plusminus
|
||||
|
||||
Math
|
||||
∏ 220F Product
|
||||
∑ 2211 Sum
|
||||
≈ 2248 Almost
|
||||
≡ 2261 Equivalent
|
||||
∞ 221E Infinity
|
||||
‰ 2030 Mille
|
||||
|
||||
Set
|
||||
⊂ 2282 Subset
|
||||
⊃ 2283 sUperset
|
||||
∩ 2229 Intersextion
|
||||
∪ 222A Union
|
||||
∈ 2208 Element
|
||||
∉ 2209 Notelement
|
||||
∍ 220D Contains
|
||||
∌ 220C doesNotcontain
|
||||
|
||||
Logic
|
||||
¬ 00AC Not
|
||||
∧ 2227 And
|
||||
∨ 2228 Or
|
||||
∃ 2203 Exists
|
||||
∄ 2204 Notexists
|
||||
|
||||
Greek
|
||||
µ 00B5 Micro
|
||||
λ 03BB Lamda
|
||||
Ω 2126 Omega
|
||||
α 03B1 Alpha
|
||||
β 03B2 Beta
|
||||
γ 03B3 Gamma
|
||||
π 03C0 Pi
|
||||
δ 03B4 Delta
|
||||
|
||||
Other
|
||||
☁ 2601 Cloud
|
||||
☼ 263C Sun
|
||||
☂ 2602 Rain
|
||||
☠ 2620 Skull
|
||||
♺ 267A Recycle
|
||||
👍1F44D thumbsUp
|
||||
👎1F44E thumbsDown
|
||||
💩 1F4A9 Poo
|
||||
|
||||
|
||||
//Todo
|
||||
SEQ_THREE_KEYS(KC_U, KC_G, KC_T){m_unicode(0x2610);}; // Todo
|
||||
SEQ_THREE_KEYS(KC_U, KC_G, KC_D){m_unicode(0x2611);}; // Done
|
||||
SEQ_THREE_KEYS(KC_U, KC_G, KC_F){m_unicode(0x2612);}; // Failed
|
||||
|
||||
//Operator
|
||||
SEQ_THREE_KEYS(KC_U, KC_O, KC_M){m_unicode(0x00D7);}; // Multiplication
|
||||
SEQ_THREE_KEYS(KC_U, KC_O, KC_D){m_unicode(0x00F7);}; // Division
|
||||
SEQ_THREE_KEYS(KC_U, KC_O, KC_L){m_unicode(0x2264);}; // LessEqual
|
||||
SEQ_THREE_KEYS(KC_U, KC_O, KC_M){m_unicode(0x2265);}; // MoreEqual
|
||||
SEQ_THREE_KEYS(KC_U, KC_O, KC_P){m_unicode(0x00B1);}; // Plusminus
|
||||
|
||||
//Math
|
||||
SEQ_THREE_KEYS(KC_U, KC_M, KC_P){m_unicode(0x220F);}; // Product
|
||||
SEQ_THREE_KEYS(KC_U, KC_M, KC_S){m_unicode(0x2211);}; // Sum
|
||||
SEQ_THREE_KEYS(KC_U, KC_M, KC_A){m_unicode(0x2248);}; // Almost
|
||||
SEQ_THREE_KEYS(KC_U, KC_M, KC_E){m_unicode(0x2261);}; // Equivalent
|
||||
SEQ_THREE_KEYS(KC_U, KC_M, KC_I){m_unicode(0x221E);}; // Infinity
|
||||
SEQ_THREE_KEYS(KC_U, KC_M, KC_M){m_unicode(0x2030);}; // Mille
|
||||
|
||||
//Set
|
||||
SEQ_THREE_KEYS(KC_U, KC_S, KC_S){m_unicode(0x2282);}; Subset
|
||||
SEQ_THREE_KEYS(KC_U, KC_S, KC_P){m_unicode(0x2283);}; suPerset
|
||||
SEQ_THREE_KEYS(KC_U, KC_S, KC_I){m_unicode(0x2229);}; Intersection
|
||||
SEQ_THREE_KEYS(KC_U, KC_S, KC_U){m_unicode(0x222A);}; Union
|
||||
SEQ_THREE_KEYS(KC_U, KC_S, KC_E){m_unicode(0x2208);}; Element
|
||||
SEQ_THREE_KEYS(KC_U, KC_S, KC_N){m_unicode(0x2209);}; Notelement
|
||||
SEQ_THREE_KEYS(KC_U, KC_S, KC_C){m_unicode(0x220D);}; Contains
|
||||
SEQ_THREE_KEYS(KC_U, KC_S, KC_D){m_unicode(0x220C);}; doesNotcontain
|
||||
|
||||
//Logic
|
||||
SEQ_THREE_KEYS(KC_U, KC_L, KC_N){m_unicode(0x00AC);}; // Not
|
||||
SEQ_THREE_KEYS(KC_U, KC_L, KC_A){m_unicode(0x2227);}; // And
|
||||
SEQ_THREE_KEYS(KC_U, KC_L, KC_O){m_unicode(0x2228);}; // Or
|
||||
SEQ_THREE_KEYS(KC_U, KC_L, KC_E){m_unicode(0x2203);}; // Exists
|
||||
SEQ_THREE_KEYS(KC_U, KC_L, KC_N){m_unicode(0x2204);}; // Notexists
|
||||
|
||||
//Greek
|
||||
SEQ_THREE_KEYS(KC_U, KC_G, KC_M){m_unicode(0x00B5);}; // Micro
|
||||
SEQ_THREE_KEYS(KC_U, KC_G, KC_L){m_unicode(0x03BB);}; // Lamda
|
||||
SEQ_THREE_KEYS(KC_U, KC_G, KC_O){m_unicode(0x2126);}; // Omega
|
||||
SEQ_THREE_KEYS(KC_U, KC_G, KC_A){m_unicode(0x03B1);}; // Alpha
|
||||
SEQ_THREE_KEYS(KC_U, KC_G, KC_B){m_unicode(0x03B2);}; // Beta
|
||||
SEQ_THREE_KEYS(KC_U, KC_G, KC_G){m_unicode(0x03B3);}; // Gamma
|
||||
SEQ_THREE_KEYS(KC_U, KC_G, KC_P){m_unicode(0x03C0);}; // Pi
|
||||
SEQ_THREE_KEYS(KC_U, KC_G, KC_D){m_unicode(0x03B4);}; // Delta
|
||||
|
||||
//Zother
|
||||
SEQ_THREE_KEYS(KC_U, KC_Z, KC_C){m_unicode(0x2601);}; // Cloud
|
||||
SEQ_THREE_KEYS(KC_U, KC_Z, KC_S){m_unicode(0x263C);}; // Sun
|
||||
SEQ_THREE_KEYS(KC_U, KC_Z, KC_R){m_unicode(0x2602);}; // Rain
|
||||
SEQ_THREE_KEYS(KC_U, KC_Z, KC_K){m_unicode(0x2620);}; // sKull
|
||||
SEQ_THREE_KEYS(KC_U, KC_Z, KC_R){m_unicode(0x267A);}; // rEcycle
|
||||
SEQ_THREE_KEYS(KC_U, KC_Z, KC_U){m_unicode(0x1F44D);}; // thumbsUp
|
||||
SEQ_THREE_KEYS(KC_U, KC_Z, KC_D){m_unicode(0x1F44E);}; // thumbsDown
|
||||
SEQ_THREE_KEYS(KC_U, KC_Z, KC_P){m_unicode(0x1F4A9);}; // Poo
|
||||
|
|
@ -49,7 +49,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#define RGBLIGHT_SAT_STEP 255
|
||||
#define RGBLIGHT_VAL_STEP 12
|
||||
|
||||
#define RGB_MIDI
|
||||
// #define RGB_MIDI
|
||||
#define RGBW_BB_TWI
|
||||
|
||||
#define RGBW 1
|
||||
|
|
|
|||
|
|
@ -52,9 +52,9 @@ uint8_t init_mcp23018(void) {
|
|||
|
||||
// I2C subsystem
|
||||
|
||||
uint8_t sreg_prev;
|
||||
sreg_prev=SREG;
|
||||
cli();
|
||||
// uint8_t sreg_prev;
|
||||
// sreg_prev=SREG;
|
||||
// cli();
|
||||
if (i2c_initialized == 0) {
|
||||
i2c_init(); // on pins D(1,0)
|
||||
i2c_initialized++;
|
||||
|
|
@ -83,7 +83,7 @@ uint8_t init_mcp23018(void) {
|
|||
out:
|
||||
i2c_stop();
|
||||
|
||||
SREG=sreg_prev;
|
||||
// SREG=sreg_prev;
|
||||
|
||||
return mcp23018_status;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ Beginner's keymap emulates standard QWERTY keyboard for beginners. Once you get
|
|||
* Easy on beginners. It has everything you need for your day to day usage.
|
||||
|
||||
#### Cons
|
||||
* Keys are not ergonomically placed to take full advantage of Ergodox-EZ. Take a look at this [Default Keymap](https://github.com/jackhumbert/qmk_firmware/blob/master/keyboards/ergodox_ez/keymaps/default/readme.md)
|
||||
* Keys are not ergonomically placed to take full advantage of Ergodox-EZ. Take a look at this [Default Keymap](https://github.com/qmk/qmk_firmware/blob/master/keyboards/ergodox_ez/keymaps/default/readme.md)
|
||||
* While multiple layers are possible, beginner's keymap only uses one additional layer for mouse, function and volume keys.
|
||||
|
||||
#### Notes
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue