Skip to content

Commit

Permalink
Merge pull request #15 from yuanw/emacs
Browse files Browse the repository at this point in the history
Emacs friendly layout
  • Loading branch information
yuanwang-wf authored Jul 9, 2024
2 parents 5dc6a6a + 0bae175 commit af78436
Show file tree
Hide file tree
Showing 6 changed files with 271 additions and 70 deletions.
72 changes: 33 additions & 39 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 20 additions & 20 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
};

svalboard_firmware = {
url = "git+https://github.com/svalboard/vial-qmk?ref=vial&submodules=1&shallow=1";
flake = false;
url = "git+https://github.com/svalboard/vial-qmk?ref=vial&submodules=1&shallow=1";
flake = false;
};
};

Expand All @@ -49,7 +49,7 @@
}:
let

inherit (inputs.poetry2nix.lib.mkPoetry2Nix { inherit pkgs; }) defaultPoetryOverrides mkPoetryApplication;
inherit (inputs.poetry2nix.lib.mkPoetry2Nix { inherit pkgs; }) defaultPoetryOverrides mkPoetryApplication;
in
{
packages.drawer = mkPoetryApplication {
Expand Down Expand Up @@ -123,35 +123,35 @@
SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";

buildPhase = ''
make bastardkb/charybdis/3x5/v2/splinky_3:yuanw
${pkgs.qmk}/bin/qmk -v c2json -kb bastardkb/charybdis/3x5/v2/splinky_3 -km yuanw ./keyboards/bastardkb/charybdis/3x5/keymaps/yuanw/keymap.c > reiryoku.json
make bastardkb/charybdis/3x5:yuanw
${pkgs.qmk}/bin/qmk -v c2json -kb bastardkb/charybdis/3x5 -km yuanw ./keyboards/bastardkb/charybdis/3x5/keymaps/yuanw/keymap.c > reiryoku.json
mkdir $out
mkdir -p $out/share
'';

installPhase = ''
mv bastardkb_charybdis_3x5_v2_splinky_3_yuanw.uf2 $out/share
mv bastardkb_charybdis_3x5_yuanw.uf2 $out/share
mv reiryoku.json $out/share
'';
};
packages.flash = pkgs.writeScriptBin "reiryoku-flash" ''
cd ${inputs.qmk_firmware}
${pkgs.qmk}/bin/qmk flash ${config.packages.firmware}/share/bastardkb_charybdis_3x5_v2_splinky_3_yuanw.uf2
${pkgs.qmk}/bin/qmk flash ${config.packages.firmware}/share/bastardkb_charybdis_3x5_yuanw.uf2
'';
packages.draw = pkgs.writeShellApplication {
name ="reiryoku-draw";
name = "reiryoku-draw";
runtimeInputs = with pkgs;
[
config.packages.drawer
(python3.withPackages (ps: [ ps.pyyaml ]))
];
text = ''
keymap parse -c 10 -q ${config.packages.firmware}/share/reiryoku.json > reiryoku.yaml
sed -i -E "s/LAYOUT_charybdis_3x5/LAYOUT/g" reiryoku.yaml
keymap draw reiryoku.yaml > reiryoku.svg
python process.py
keymap draw output.yaml > reiryoku.svg
'';
[
config.packages.drawer
(python3.withPackages (ps: [ ps.pyyaml ]))
];
text = ''
keymap parse -c 10 -q ${config.packages.firmware}/share/reiryoku.json > reiryoku.yaml
sed -i -E "s/LAYOUT_charybdis_3x5/LAYOUT/g" reiryoku.yaml
keymap draw reiryoku.yaml > reiryoku.svg
python process.py
keymap draw output.yaml > reiryoku.svg
'';
};

# Default shell.
Expand All @@ -176,6 +176,6 @@
program = config.packages.draw;
};
apps.default = config.apps.flash;
};
};
};
}
87 changes: 87 additions & 0 deletions qmk/yuanw/features/custom_shift_keys.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
// Copyright 2021-2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/**
* @file custom_shift_keys.c
* @brief Custom Shift Keys implementation
*
* For full documentation, see
* <https://getreuer.info/posts/keyboards/custom-shift-keys>
*/

#include "custom_shift_keys.h"

#if !defined(IS_QK_MOD_TAP)
// Attempt to detect out-of-date QMK installation, which would fail with
// implicit-function-declaration errors in the code below.
#error "custom_shift_keys: QMK version is too old to build. Please update QMK."
#else

bool process_custom_shift_keys(uint16_t keycode, keyrecord_t *record) {
static uint16_t registered_keycode = KC_NO;

// If a custom shift key is registered, then this event is either releasing
// it or manipulating another key at the same time. Either way, we release
// the currently registered key.
if (registered_keycode != KC_NO) {
unregister_code16(registered_keycode);
registered_keycode = KC_NO;
}

if (record->event.pressed) { // Press event.
const uint8_t saved_mods = get_mods();
#ifndef NO_ACTION_ONESHOT
const uint8_t mods = saved_mods | get_weak_mods() | get_oneshot_mods();
#else
const uint8_t mods = saved_mods | get_weak_mods();
#endif // NO_ACTION_ONESHOT
if ((mods & MOD_MASK_SHIFT) != 0 // Shift is held.
#if CUSTOM_SHIFT_KEYS_NEGMODS != 0
// Nothing in CUSTOM_SHIFT_KEYS_NEGMODS is held.
&& (mods & (CUSTOM_SHIFT_KEYS_NEGMODS)) == 0
#endif // CUSTOM_SHIFT_KEYS_NEGMODS != 0
) {
// Continue default handling if this is a tap-hold key being held.
if ((IS_QK_MOD_TAP(keycode) || IS_QK_LAYER_TAP(keycode)) &&
record->tap.count == 0) {
return true;
}

// Search for a custom shift key whose keycode is `keycode`.
for (int i = 0; i < NUM_CUSTOM_SHIFT_KEYS; ++i) {
if (keycode == custom_shift_keys[i].keycode) {
registered_keycode = custom_shift_keys[i].shifted_keycode;
if (IS_QK_MODS(registered_keycode) && // Should keycode be shifted?
(QK_MODS_GET_MODS(registered_keycode) & MOD_LSFT) != 0) {
register_code16(registered_keycode); // If so, press it directly.
} else {
// Otherwise cancel shift mods, press the key, and restore mods.
del_weak_mods(MOD_MASK_SHIFT);
#ifndef NO_ACTION_ONESHOT
del_oneshot_mods(MOD_MASK_SHIFT);
#endif // NO_ACTION_ONESHOT
unregister_mods(MOD_MASK_SHIFT);
register_code16(registered_keycode);
set_mods(saved_mods);
}
return false;
}
}
}
}

return true; // Continue with default handling.
}

#endif // version check
Loading

0 comments on commit af78436

Please sign in to comment.