Skip to content

Commit

Permalink
Adds optional hebrew layout (Unicode) (qmk#14156)
Browse files Browse the repository at this point in the history
  • Loading branch information
josjoha authored Sep 16, 2021
1 parent b5cc2bd commit d140e41
Show file tree
Hide file tree
Showing 13 changed files with 1,157 additions and 132 deletions.
291 changes: 291 additions & 0 deletions keyboards/thevankeyboards/minivan/keymaps/josjoha/base_hebrew.c

Large diffs are not rendered by default.

52 changes: 52 additions & 0 deletions keyboards/thevankeyboards/minivan/keymaps/josjoha/base_hebrew.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* License (GPL):
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/>.
* Author: © 2021 by Jos Boersema
*
*/

#pragma once

// --------------------------------------v---------------------------------------
// Configuration:
// --------------------------------------v---------------------------------------

/* Harmonize layout with a Latin layout
*
* See base_hebrew.md for design objectives.
*/
#define HEBREW_ISRAEL // Close to standard Israeli hebrew.
//#define HEBREW_QWERTY // Harmonize punctuation symbols with Qwerty.
//#define HEBREW_DVORAK // Harmonize punctuation symbols with Dvorak.

// --------------------------------------^---------------------------------------
// Below here no more comfortable configuration options.....
// --------------------------------------^---------------------------------------

/* Redefine a layer in this file
*
* _Activate_ one or more of the below BASESFILE_LAYER_..., to redefine the layer
* in this file. The version in ./keymap.c will be ignored. Keep in mind to use
* transparent keys (_______) for “hold” layer switch keys on the BASE map, for
* your new layer.
*/
// #define BASESFILE_LAYER_ACC
// #define BASESFILE_LAYER_DRA
// #define BASESFILE_LAYER_BON
// #define BASESFILE_LAYER_PAD
// #define BASESFILE_LAYER_MOV
// #define BASESFILE_LAYER_RAR
// #define BASESFILE_LAYER_FUN
198 changes: 198 additions & 0 deletions keyboards/thevankeyboards/minivan/keymaps/josjoha/base_hebrew.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
# Minifan layout

Compiled for: Hebrew
====================

This file details the compile version `#define BASE_HEBREW__DEF_BASE,
BASE_HEBREW__ALT_BASE`. This is a basic Hebrew layout, without niqqud.

Only the most common symbols are implemented. Hebrew symbols are all
done in Unicode.

See also ![./readme.md](./readme.md) chapter 7 _Language support_.

Parenthesis/braces/etc direction seems to be dealt with at the computer
side, depending on the surrounding symbols. The keyboard is printing
these symbols unchanged from what they are in standard Latin layouts,
and are represented that way in the manual.

Options
=======

You can compile the hebrew to be like a common Israeli layout, or to harmonize the
punctuation symbols with either Dvorak or Qwerty. See the configuration file
![./base_hebrew.h](./base_hebrew.h)

☞ Israeli Hebrew

As close to a simple standard hebrew layout as possible.
A little larger memory cost than the other options. No `'"` ASCII quotes symbols,
but proper ׳ and ״ (in Unicode).

☞ Qwerty with Hebrew

The letters ת, ץ get displaced from the standard hebrew layout.
Numerical layer is the same as standard Qwerty, except the symbol
`_` symbol becomes `־` (Maqaf). No `;` symbol.

☞ Qwerty derivatives with Hebrew

It is adviced to use Qwerty with Hebrew in this case, and adjust by hand
coding if needed. “Workman” should harmonize the same as Qwerty.
Colemak displaces the “;:” key relative to Qwerty, therefore you may
like to change the “:” shifted symbol (by hand). The obscurity of this
use case gets extreme, there will not be options for this.

☞ Dvorak with Hebrew

The letter ק gets displaced from the standard hebrew layout.
Numerical layer is the same as standard Dvorak. No `;` symbol.


Flash memory cost
-----------------

This layout adds several dozen new Unicode symbols, which takes up a certain
amount of additional space in keyboard memory. If you end up going over
the limit, you may need to change your compilation software setup, and/or
you can look into the “Eviscerations” chapters in ![./user_config.h](./user_config.h)

Hebrew keymaps
--------------

──────────Hebrew Israel────────

![Minivan layout Image BASEdef-alt](http://socialism.nl/misc/minivan/minivan_base_layer_hebrew-israel_ve.jpg)
Layer: `..._BASE`

![Minivan layout Image NSYdef-alt](http://socialism.nl/misc/minivan/minivan_nsy_layer_hebrew-israel_vd.jpg)
Layer: `..._NSY`

──────────in common────────────

(…)

──────────Hebrew Qwerty────────

![Minivan layout Image BASEdef-alt](http://socialism.nl/misc/minivan/minivan_base_layer_hebrew-qwerty_ve.jpg)
Layer: `..._BASE`

![Minivan layout Image NSYdef-alt](http://socialism.nl/misc/minivan/minivan_nsy_layer_hebrew-israel_vd.jpg)
Layer: `..._NSY`

──────────in common────────────

(…)

──────────Hebrew Dvorak────────

![Minivan layout Image BASEdef-alt](http://socialism.nl/misc/minivan/minivan_base_layer_hebrew-dvorak_ve.jpg)
Layer: `..._BASE`

![Minivan layout Image NSYdef-alt](http://socialism.nl/misc/minivan/minivan_nsy_layer_dvorak_vc.jpg)
Layer: `..._NSY` (Same as Dvorak.)

──────────in common────────────

(…)

For more about the other layers, see ➡ ![readme.md](./readme.md)

![Minivan illustration Overview layers by key, Hebrew](http://socialism.nl/misc/minivan/minivan-all-layers-clear-visualization-by-key_hebrew_2000_vk.jpg)

Layers (text)
=============

(The “x” padding was necessary to undo the direction of these characters being reversed.
This layout might still not be represenetd correctly on your system. See the graphics instead.)

HEBREW_ISRAEL
| Right hand
<pink2 <pinky<ring <middl<index<indx2| indx2>index>middl>ring> pinky>pinky2> // Keys by finger
-o- <|> ... //-o- BASE access
Escxxxxxxxx/;xxxx׳xxxxxקxxxxxרxxxxxאxxxxx|xטxxxxxוxxxxxןxxxxxםxxxxxפxxxxxxxxxxBksp
Tab+LCtlxxxשxxxxxדxxxxxג/RLMxכx₪xxxעxxxxx|xיxxxxxחxxxxxל/LRMxךxxxxxף:xxxxxxxxxxx,״ //Right-Left-Mark
LSht+_PADxxזxxxxxסxxxxxבxxxxxהxxxxxנxxxxx|xמxxxxxצxxxxxת<xxxxץ>xxxx.?xxxxRSht+_FUN //<>os side flip?
+_MOV⁵ | +_RAR⁶
---------------------------------------------------------------------------------------

HEBREW_QWERTY
| Right hand
<pink2 <pinky<ring <middl<index<indx2| indx2>index>middl>ring> pinky>pinky2> // Keys by finger
-o- <|> ... //-o- BASE access
Escxxxxxxxxת•xxxxץ•xxxxקxxxxxרxxxxxאxxxxx|xטxxxxxוxxxxxןxxxxxםx׳xxxפx״xxxxxxxxBksp
Tab+LCtlxxxשxxxxxדxxxxxג/RLMxכx₪xxxעxxxxx|xיxxxxxחxxxxxל/LRMxךxxxxxף:xxxxxxxxxxx'" //Right-Left-Mark
LSht+_PADxxזxxxxxסxxxxxבxxxxxהxxxxxנxxxxx|xמxxxxxצxxxxx,<xxxx.>xxxx/?xxxxRSht+_FUN
+_MOV⁵ | +_RAR⁶
---------------------------------------------------------------------------------------
(…)

HEBREW_DVORAK
Layer _..._BASE (LeTteRs, standard Hebrew)
| Right hand
<pink2 <pinky<ring <middl<index<indx2| indx2>index>middl>ring> pinky>pinky2> // Keys by finger
-o- <|> ... //-o- BASE access
Escxxxxxxxx'"xxxx,<xxxx.>xxxxרxxxxxאxxxxx|xטxxxxxוxxxxxןxxxxxםx׳xxxפx״xxxxxxxxBksp
Tab+LCtlxxxשxxxxxדxxxxxג/RLMxכx₪xxxעxxxxx|xיxxxxxחxxxxxל/LRMxךxxxxxףxxxxxxxxxxxxx־ //Right/Left-Mark
LSht+_PADxxז:xxxxסxxxxxבxxxxxהxxxxxנxxxxx|xמxxxxxצxxxxxתxxxxxץxxxxxק•xxxxRSht+_FUN
+_MOV⁵ | +_RAR⁶
---------------------------------------------------------------------------------------
Left+LAlt Del;_ACC _DEF_NSY(_DRA) Enter+_MOV| Space _DEF_NSY(_DRA) RGUI Right;_RAR
hold hold₍₁,₂٭₎ hold | hold₍₁,₂٭₎ hold // switch type
hold₍₂₎ ^-┃-----------------------+--------^ ┃ // ₁₎ both = _DRA
┗━━━_BON━━━╋┅───────────┄┄┄«or»┄┄┄─+─────────┅┛ // ₂₎ both = _BON
<1 ± <2 <3 <4 | 4> 3> 2> ± 1> // Keys by number
^³ ^⁴ // Optional more keys
(LGUI) (_MOV)


₁) Dual hold for _DRA, single hold for _DEF_NSY. Marked by: ^--…--^
₂) Hold key “<2” with either٭ key “<3” or “3>” for _BON, single hold “<2” for _ACC. Marked: ┗━━…━━┛
₃) 'South paw' hardware configuration. Configurable, default shown.
₄) 'Arrow' hardware configuration Configurable, default shown.
₃ ₄) There are two more optional hardware keys, to make it easier to compile for
a 12x12x12x11 or 12x12x12x12 layouts.
₅) Left Shift when pressed with another key. Medium long: to toggle _PAD. Long: toggle _MOV.
₆) Right shift when pressed with another key. medium long: to toggle _FUN. Long: toggle _RAR.
⁷) Letters marked with • are displaced from standard hebrew layout.

Remarks: The left modifiers have a slight delay in combination with an outside pointer device (mouse, stylus).
It seems this will be difficult to fix, because it is spread over two devices. To avoid the
±0.2 second delay, activate a layer where the modifiers are direct (`_PAD`), using the layer toggle on left shift.

The two keys with ';' (Del;`_ACC`, Right;`_RAR`) do not auto-repeat on double tap, like QMK normal layer-tap keys.
There is an uncluttered _Delete_ on `_PAD`, an uncluttered _Right_ arrow on the `_MOV` layer.

Holding both `_DEF_NSY` keys left and right of the "split space bar" (enter, space) results in layer `_DRA`.

Holding either one of the just above mentioned `_DEF_NSY` layer keys (<3 and 3>), with the `_ACC` layer key
(on <2) results in layer `_BON`.

- - -

Layer _..._NSY (Numbers and SYmbols)

HEBREW_ISRAEL & HEBREW_QWERTY (_ becomes ־ Maqaf)
<pink2 <pinky<ring <middl<index<indx2| indx2>index>middl>ring>pin>pink2>
-*- <|> //(toggle) Access on _FUN
BASExxxxx!xxxxx@xxxxx#xxxxx$xxxxx%xxxxx|x^xxxxx&xxxxx*xxxxx(xxxx)xxxxxxxDel
Tab+LCtlx1!xxxx2@xxxx3#xxxx4$xxxx5%xxxx|x6^xxxx7&xxxx8*xxxx9(xxx0)xx`~+RCtl
-+LShtxxx[{xxxx]}xxxx-_xxxx\|xxxx=+xxxx|x+xxxxx|xxxxx־xxxxx{xxxxx}xxx~+RSht
^ // Only difference with Qwerty
---------------------------------------------------------------------------
Left+LAlt ___ ___ Ent | . ___ RGUI Right+RAlt
-*- <|> -*- //(hold) Access on _DEF_BASE
<1 ± <2 <3 <4 | 4> 3> 2> ± 1>
^ ^
(LGUI) (_MOV)


HEBREW_DVORAK (Same as standard Dvorak)
<pink2 <pinky<ring <middl<index<indx2| indx2>index>middl>ring>pin>pink2>
-*- <|> //(toggle) Access on _FUN
BASE ! @ # $ % | ^ & * ( ) Del
Tab+LCtl 1! 2@ 3# 4$ 5% | 6^ 7& 8* 9( 0) `~+RCtl
-+LSht [{ ]} /? \| =+ | + | ? { } ~+RSht
---------------------------------------------------------------------------
(…)
- - -
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

#pragma once

// --------------------------------------v---------------------------------------
// Configuration:
// --------------------------------------v---------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

#pragma once

// --------------------------------------v---------------------------------------
// Configuration:
// --------------------------------------v---------------------------------------
Expand Down
13 changes: 9 additions & 4 deletions keyboards/thevankeyboards/minivan/keymaps/josjoha/keymap.c
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ bool led_middle_on = TRUE; // Set to off later, if startup setting is off.
bool isolate_trigger = FALSE; // detects if _FUN layer move was pressed, and no other key (no normal use of Shift).
bool capslock; // keeps track of capslock state
bool numlock; // keeps track of numlock state
layer_state_t state_recall; // We are calling the function set_led_colors_ from this file as well.
//layer_state_t state_recall; // We are calling the function set_led_colors_ from this file as well.
// speed measuring
bool speed_measure = SPEED_INIT_VALUE; // feature activated or not on startup
uint32_t speed_counttime; // counts the time
Expand Down Expand Up @@ -289,8 +289,8 @@ void speed_led (int speed) {

// do this in one place to handle left/right leds being off here
void isolate_rgblight_set () {
# ifdef RGBLIGHT_ENABLE

# ifdef RGBLIGHT_ENABLE
if (!leds_on) { // left/right leds are off
// overwrite previously colors
uint8_t led0r = 0; uint8_t led0g = 0; uint8_t led0b = 0;
Expand All @@ -305,8 +305,8 @@ void isolate_rgblight_set () {
setrgb(led2r, led2g, led2b, (LED_TYPE *)&led[2]); // Led 2
}
rgblight_set ();

# endif

}


Expand Down Expand Up @@ -335,7 +335,7 @@ void indicate_fun_stay (void) {


// _RAR layer leds
// It is a function because this is called when the Base layer OTHER_BASE key is pressed
// It is a function because this is also called when the Base layer OTHER_BASE key is pressed
void indicate_base (void) {
# ifdef RGBLIGHT_ENABLE

Expand Down Expand Up @@ -614,6 +614,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
# include "./base_numpad.c" // Numbers pad
# endif

// * Hebrew *
# if defined(BASE_HEBREW__DEF_BASE) || defined(BASE_HEBREW__ALT_BASE)
# include "./base_hebrew.c" // Hebrew
# endif

// // ⬇ insert your ./base_YOUR_KEYMAP.c #include here:


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,29 @@ 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/>.
* © 2020,2021 by Jos Boersema
* © 2020,2021 by Jos Boersema
*/

#pragma once

/*
* If MINIFAN_CONFIG_COMPACT in ./user_config.h ⬇
*/

//#define BASE_QWERTY__DEF_BASE
//#define BASE_QWERTY__ALT_BASE
//#define BASE_QWERTY_BASEARROW__DEF_BASE
//#define BASE_QWERTY_BASEARROW__ALT_BASE
//#define BASE_QWERTY_BASEARROW__DEF_BASE // ➡ base_qwerty_basearrow.h
//#define BASE_QWERTY_BASEARROW__ALT_BASE // ➡ base_qwerty_basearrow.h
#define BASE_DVORAK__DEF_BASE
//#define BASE_DVORAK__ALT_BASE
#define BASE_DVORAK_DESCRAMBLE__ALT_BASE
//#define BASE_DVORAK_DESCRAMBLE__ALT_BASE
//#define BASE_COLEMAK__DEF_BASE
//#define BASE_COLEMAK__ALT_BASE
//#define BASE_WORKMAN__DEF_BASE
//#define BASE_WORKMAN__ALT_BASE
//#define BASE_NUMPAD__ALT_BASE
//#define BASE_NUMPAD__ALT_BASE // ➡ base_numpad.h
//#define BASE_HEBREW__DEF_BASE // ➡ base_hebrew.h
#define BASE_HEBREW__ALT_BASE // ➡ base_hebrew.h

//#define MINIFAN_SINGLE_LAYOUT

Expand Down Expand Up @@ -66,7 +70,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define ARROWS_TRIANGLE
//#define VI_SWITCHERYDOO

//#define NUMPAD_COMMON_SQUARE
#define NUMPAD_COMMON_SQUARE

#define SPEED_COUNTDOWN 25
#define SPEED_HUE_STEP 8
Expand Down Expand Up @@ -100,5 +104,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define FULL_DRA_4THROW
#define FULL_BON_4THROW

#define LEDS_OFF_BASE_DEF
#define LEDS_OFF_BASE_ALT
//#define LEDS_OFF_BASE_DEF
//#define LEDS_OFF_BASE_ALT
Loading

0 comments on commit d140e41

Please sign in to comment.