mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-17 09:06:06 +09:00
altgr for string input
This commit is contained in:
@@ -1,19 +1,19 @@
|
|||||||
{"n":"US Colemak","t":[[""],[undefined],
|
{"n":"US Colemak","capslock":"back","t":[[""],[undefined],
|
||||||
[undefined],
|
[undefined],
|
||||||
["<HOME>"],
|
["<HOME>"],
|
||||||
[undefined],
|
[undefined],
|
||||||
["<CALL>"],
|
["<CALL>"],
|
||||||
["<ENDCALL>"],
|
["<ENDCALL>"],
|
||||||
["0",")"],
|
["0",")","’","”"],
|
||||||
["1","!"],
|
["1","!","¡","¹"],
|
||||||
["2","@"],
|
["2","@","º","²"],
|
||||||
["3","#"],
|
["3","#","ª","³"],
|
||||||
["4","$"],
|
["4","$","¢","£"],
|
||||||
["5","%"],
|
["5","%","€","¥"],
|
||||||
["6","^"],
|
["6","^","ħ","Ħ"],
|
||||||
["7","&"],
|
["7","&","ð","Ð"],
|
||||||
["8","*"],
|
["8","*","þ","Þ"],
|
||||||
["9","("],
|
["9","(","‘","“"],
|
||||||
["*"],
|
["*"],
|
||||||
["#"],
|
["#"],
|
||||||
["<UP>"],
|
["<UP>"],
|
||||||
@@ -26,54 +26,54 @@
|
|||||||
["<POWER>"],
|
["<POWER>"],
|
||||||
["<CAMERA>"],
|
["<CAMERA>"],
|
||||||
["<CLEAR>"],
|
["<CLEAR>"],
|
||||||
["a","A"],
|
["a","A","á","Á"],
|
||||||
["b","B"],
|
["b","B","\u0306","©"],
|
||||||
["c","C"],
|
["c","C","ç","Ç"],
|
||||||
["s","S"],
|
["s","S","ß","ẞ"],
|
||||||
["f","F"],
|
["f","F","ã","Ã"],
|
||||||
["t","T"],
|
["t","T","\u0301","\u030B"],
|
||||||
["d","D"],
|
["d","D","\u0308","°"],
|
||||||
["h","H"],
|
["h","H","\u030C","±"],
|
||||||
["u","U"],
|
["u","U","ú","Ú"],
|
||||||
["n","N"],
|
["n","N","ñ","Ñ"],
|
||||||
["e","E"],
|
["e","E","é","É"],
|
||||||
["i","I"],
|
["i","I","í","Í"],
|
||||||
["m","M"],
|
["m","M","\u0304","µ"],
|
||||||
["k","K"],
|
["k","K","\u030A","№"],
|
||||||
["y","Y"],
|
["y","Y","ü","Ü"],
|
||||||
[";",":"],
|
[";",":","ö","Ö"],
|
||||||
["q","Q"],
|
["q","Q","ä","Ä"],
|
||||||
["p","P"],
|
["p","P","ø","Ø"],
|
||||||
["r","R"],
|
["r","R","\u0300","®"],
|
||||||
["g","G"],
|
["g","G","\u0328","¶"],
|
||||||
["l","L"],
|
["l","L","ł","Ł"],
|
||||||
["v","V"],
|
["v","V","œ","Œ"],
|
||||||
["w","W"],
|
["w","W","å","Å"],
|
||||||
["x","X"],
|
["x","X","\u0302","¤"],
|
||||||
["j","J"],
|
["j","J","đ","Đ"],
|
||||||
["z","Z"],
|
["z","Z","æ","Æ"],
|
||||||
[",","<"],
|
[",","<","\u0327","·"],
|
||||||
[".",">"],
|
[".",">","\u0307","…"],
|
||||||
["<ALT_L>"],
|
["<ALT_L>"],
|
||||||
["<ALT_R>"],
|
["<ALT_R>"],
|
||||||
["<SHIFT_L>"],
|
["<SHIFT_L>"],
|
||||||
["<SHIFT_R>"],
|
["<SHIFT_R>"],
|
||||||
["<TAB>"],
|
["<TAB>"],
|
||||||
[" "],
|
[" "," ","\u00A0","\u00A0"],
|
||||||
["<SYM>"],
|
["<SYM>"],
|
||||||
["<EXPLORER>"],
|
["<EXPLORER>"],
|
||||||
["<ENVELOPE>"],
|
["<ENVELOPE>"],
|
||||||
["\n"],
|
["\n"],
|
||||||
["\x08"],
|
["\x08"],
|
||||||
["`","~"],
|
["`","~","\u0303","≈"],
|
||||||
["-","_"],
|
["-","_","–","—"],
|
||||||
["=","+"],
|
["=","+","×","÷"],
|
||||||
["[","{"],
|
["[","{","«","‹"],
|
||||||
["]","}"],
|
["]","}","»","›"],
|
||||||
["\\","|"],
|
["\\","|,"~","¦"],
|
||||||
["o","O"],
|
["o","O","ó","Ó"],
|
||||||
["'",'"'],
|
["'",'"',"õ","Õ"],
|
||||||
["/","?"],
|
["/","?","¿","§"],
|
||||||
["<AT>"],
|
["<AT>"],
|
||||||
["<NUM_LOCK>"],
|
["<NUM_LOCK>"],
|
||||||
["<HEADSETHOOK>"],
|
["<HEADSETHOOK>"],
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
{"n":"US Colemak-DH","t":[[""],[undefined],
|
{"n":"US Colemak-DH","capslock":"back","t":[[""],[undefined],
|
||||||
[undefined],
|
[undefined],
|
||||||
["<HOME>"],
|
["<HOME>"],
|
||||||
[undefined],
|
[undefined],
|
||||||
["<CALL>"],
|
["<CALL>"],
|
||||||
["<ENDCALL>"],
|
["<ENDCALL>"],
|
||||||
["0",")"],
|
["0",")","’","”"],
|
||||||
["1","!"],
|
["1","!","¡","¹"],
|
||||||
["2","@"],
|
["2","@","º","²"],
|
||||||
["3","#"],
|
["3","#","ª","³"],
|
||||||
["4","$"],
|
["4","$","¢","£"],
|
||||||
["5","%"],
|
["5","%","€","¥"],
|
||||||
["6","^"],
|
["6","^","ħ","Ħ"],
|
||||||
["7","&"],
|
["7","&","ð","Ð"],
|
||||||
["8","*"],
|
["8","*","þ","Þ"],
|
||||||
["9","("],
|
["9","(","‘","“"],
|
||||||
["*"],
|
["*"],
|
||||||
["#"],
|
["#"],
|
||||||
["<UP>"],
|
["<UP>"],
|
||||||
@@ -26,54 +26,54 @@
|
|||||||
["<POWER>"],
|
["<POWER>"],
|
||||||
["<CAMERA>"],
|
["<CAMERA>"],
|
||||||
["<CLEAR>"],
|
["<CLEAR>"],
|
||||||
["a","A"],
|
["a","A","á","Á"],
|
||||||
["v","V"],
|
["v","V","œ","Œ"],
|
||||||
["c","C"],
|
["c","C","ç","Ç"],
|
||||||
["s","S"],
|
["s","S","ß","ẞ"],
|
||||||
["f","F"],
|
["f","F","ã","Ã"],
|
||||||
["t","T"],
|
["t","T","\u0301","\u030B"],
|
||||||
["g","G"],
|
["g","G","\u0328","¶"],
|
||||||
["m","M"],
|
["m","M","\u0304","µ"],
|
||||||
["u","U"],
|
["u","U","ú","Ú"],
|
||||||
["n","N"],
|
["n","N","ñ","Ñ"],
|
||||||
["e","E"],
|
["e","E","é","É"],
|
||||||
["i","I"],
|
["i","I","í","Í"],
|
||||||
["h","H"],
|
["h","H","\u030C","±"],
|
||||||
["k","K"],
|
["k","K","\u030A","№"],
|
||||||
["y","Y"],
|
["y","Y","ü","Ü"],
|
||||||
[";",":"],
|
[";",":","ö","Ö"],
|
||||||
["q","Q"],
|
["q","Q","ä","Ä"],
|
||||||
["p","P"],
|
["p","P","ø","Ø"],
|
||||||
["r","R"],
|
["r","R","\u0300","®"],
|
||||||
["b","B"],
|
["b","B","\u0306","©"],
|
||||||
["l","L"],
|
["l","L","ł","Ł"],
|
||||||
["d","D"],
|
["d","D","\u0308","°"],
|
||||||
["w","W"],
|
["w","W","å","Å"],
|
||||||
["x","X"],
|
["x","X","\u0302","¤"],
|
||||||
["j","J"],
|
["j","J","đ","Đ"],
|
||||||
["z","Z"],
|
["z","Z","æ","Æ"],
|
||||||
[",","<"],
|
[",","<","\u0327","·"],
|
||||||
[".",">"],
|
[".",">","\u0307","…"],
|
||||||
["<ALT_L>"],
|
["<ALT_L>"],
|
||||||
["<ALT_R>"],
|
["<ALT_R>"],
|
||||||
["<SHIFT_L>"],
|
["<SHIFT_L>"],
|
||||||
["<SHIFT_R>"],
|
["<SHIFT_R>"],
|
||||||
["<TAB>"],
|
["<TAB>"],
|
||||||
[" "],
|
[" "," ","\u00A0","\u00A0"],
|
||||||
["<SYM>"],
|
["<SYM>"],
|
||||||
["<EXPLORER>"],
|
["<EXPLORER>"],
|
||||||
["<ENVELOPE>"],
|
["<ENVELOPE>"],
|
||||||
["\n"],
|
["\n"],
|
||||||
["\x08"],
|
["\x08"],
|
||||||
["`","~"],
|
["`","~","\u0303","≈"],
|
||||||
["-","_"],
|
["-","_","–","—"],
|
||||||
["=","+"],
|
["=","+","×","÷"],
|
||||||
["[","{"],
|
["[","{","«","‹"],
|
||||||
["]","}"],
|
["]","}","»","›"],
|
||||||
["\\","|"],
|
["\\","|,"~","¦"],
|
||||||
["o","O"],
|
["o","O","ó","Ó"],
|
||||||
["'",'"'],
|
["'",'"',"õ","Õ"],
|
||||||
["/","?"],
|
["/","?","¿","§"],
|
||||||
["<AT>"],
|
["<AT>"],
|
||||||
["<NUM_LOCK>"],
|
["<NUM_LOCK>"],
|
||||||
["<HEADSETHOOK>"],
|
["<HEADSETHOOK>"],
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{"n":"US Qwerty","t":[[""],[undefined],
|
{"n":"US Qwerty","capslock":"caps","t":[[""],[undefined],
|
||||||
[undefined],
|
[undefined],
|
||||||
["<HOME>"],
|
["<HOME>"],
|
||||||
[undefined],
|
[undefined],
|
||||||
|
|||||||
@@ -8,9 +8,14 @@ typealias IMEOutput = String
|
|||||||
|
|
||||||
data class TerrarumKeyLayout(
|
data class TerrarumKeyLayout(
|
||||||
val name: String,
|
val name: String,
|
||||||
|
val capsMode: TerrarumKeyCapsMode,
|
||||||
val symbols: Array<Array<String?>>?
|
val symbols: Array<Array<String?>>?
|
||||||
)
|
)
|
||||||
|
|
||||||
|
enum class TerrarumKeyCapsMode {
|
||||||
|
CAPS, SHIFT, BACK
|
||||||
|
}
|
||||||
|
|
||||||
data class TerrarumIME(
|
data class TerrarumIME(
|
||||||
val name: String,
|
val name: String,
|
||||||
val config: TerrarumIMEConf,
|
val config: TerrarumIMEConf,
|
||||||
@@ -101,17 +106,25 @@ object IME {
|
|||||||
return highLayers.keys.toList()
|
return highLayers.keys.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun String.toCapsMode() = when (this.lowercase()) {
|
||||||
|
"caps" -> TerrarumKeyCapsMode.CAPS
|
||||||
|
"shift" -> TerrarumKeyCapsMode.SHIFT
|
||||||
|
"back" -> TerrarumKeyCapsMode.BACK
|
||||||
|
else -> throw IllegalArgumentException("Unknown capslock mode: $this")
|
||||||
|
}
|
||||||
|
|
||||||
private fun String.toViewCount() = when (this.lowercase()) {
|
private fun String.toViewCount() = when (this.lowercase()) {
|
||||||
"none" -> TerrarumIMEViewCount.NONE
|
"none" -> TerrarumIMEViewCount.NONE
|
||||||
"one" -> TerrarumIMEViewCount.ONE
|
"one" -> TerrarumIMEViewCount.ONE
|
||||||
"many" -> TerrarumIMEViewCount.MANY
|
"many" -> TerrarumIMEViewCount.MANY
|
||||||
else -> throw IllegalArgumentException(this)
|
else -> throw IllegalArgumentException("Unknown candidates mode: $this")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseKeylayoutFile(file: File): TerrarumKeyLayout {
|
private fun parseKeylayoutFile(file: File): TerrarumKeyLayout {
|
||||||
val src = file.readText(Charsets.UTF_8)
|
val src = file.readText(Charsets.UTF_8)
|
||||||
val jsval = context.eval("js", "'use strict';Object.freeze($src)")
|
val jsval = context.eval("js", "'use strict';Object.freeze($src)")
|
||||||
val name = jsval.getMember("n").asString()
|
val name = jsval.getMember("n").asString()
|
||||||
|
val capsmode = jsval.getMember("capslock").asString().toCapsMode()
|
||||||
|
|
||||||
val out = Array(256) { Array<String?>(4) { null } }
|
val out = Array(256) { Array<String?>(4) { null } }
|
||||||
|
|
||||||
@@ -131,7 +144,7 @@ object IME {
|
|||||||
|
|
||||||
// println("[IME] Test Keymap print for $name:"); for (keycode in 0 until 256) { print("$keycode:\t"); println(out[keycode].joinToString("\t")) }
|
// println("[IME] Test Keymap print for $name:"); for (keycode in 0 until 256) { print("$keycode:\t"); println(out[keycode].joinToString("\t")) }
|
||||||
|
|
||||||
return TerrarumKeyLayout(name, out)
|
return TerrarumKeyLayout(name, capsmode, out)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun String.toCanditates(): List<String> =
|
private fun String.toCanditates(): List<String> =
|
||||||
|
|||||||
@@ -57,14 +57,21 @@ object InputStrober {
|
|||||||
repeatCount += 1
|
repeatCount += 1
|
||||||
|
|
||||||
val shiftin = keys.contains(Input.Keys.SHIFT_LEFT) || keys.contains(Input.Keys.SHIFT_RIGHT)
|
val shiftin = keys.contains(Input.Keys.SHIFT_LEFT) || keys.contains(Input.Keys.SHIFT_RIGHT)
|
||||||
|
val altgrin = keys.contains(Input.Keys.ALT_RIGHT)
|
||||||
val keysym0 = keysToStr(keymap, keys)
|
val keysym0 = keysToStr(keymap, keys)
|
||||||
val newKeysym0 = keysToStr(keymap, keyDiff)
|
val newKeysym0 = keysToStr(keymap, keyDiff)
|
||||||
val keysym = if (keysym0 == null) null
|
val keysym =
|
||||||
else if (shiftin && keysym0[1]?.isNotBlank() == true) keysym0[1]
|
if (keysym0 == null) null
|
||||||
else keysym0[0]
|
else if (shiftin && altgrin && keysym0[3]?.isNotBlank() == true) keysym0[3]
|
||||||
val newKeysym = if (newKeysym0 == null) null
|
else if (altgrin && keysym0[2]?.isNotBlank() == true) keysym0[2]
|
||||||
else if (shiftin && newKeysym0[1]?.isNotBlank() == true) newKeysym0[1]
|
else if (shiftin && keysym0[1]?.isNotBlank() == true) keysym0[1]
|
||||||
else newKeysym0[0]
|
else keysym0[0]
|
||||||
|
val newKeysym =
|
||||||
|
if (newKeysym0 == null) null
|
||||||
|
else if (shiftin && altgrin && newKeysym0[3]?.isNotBlank() == true) newKeysym0[3]
|
||||||
|
else if (altgrin && newKeysym0[2]?.isNotBlank() == true) newKeysym0[2]
|
||||||
|
else if (shiftin && newKeysym0[1]?.isNotBlank() == true) newKeysym0[1]
|
||||||
|
else newKeysym0[0]
|
||||||
|
|
||||||
val headKeyCode = if (keyDiff.size < 1) keys[0] else keyDiff[0]
|
val headKeyCode = if (keyDiff.size < 1) keys[0] else keyDiff[0]
|
||||||
|
|
||||||
|
|||||||
@@ -170,6 +170,7 @@ class UIItemTextLineInput(
|
|||||||
fboUpdateLatch = true
|
fboUpdateLatch = true
|
||||||
forceLitCursor()
|
forceLitCursor()
|
||||||
val ime = getIME()
|
val ime = getIME()
|
||||||
|
val lowLayer = IME.getLowLayerByName(App.getConfigString("basekeyboardlayout"))
|
||||||
|
|
||||||
if (keycodes.contains(App.getConfigInt("control_key_toggleime")) && repeatCount == 1) {
|
if (keycodes.contains(App.getConfigInt("control_key_toggleime")) && repeatCount == 1) {
|
||||||
toggleIME()
|
toggleIME()
|
||||||
@@ -182,7 +183,7 @@ class UIItemTextLineInput(
|
|||||||
endComposing()
|
endComposing()
|
||||||
copyToClipboard()
|
copyToClipboard()
|
||||||
}
|
}
|
||||||
else if (keycodes.contains(Input.Keys.BACKSPACE)) {
|
else if (keycodes.contains(Input.Keys.BACKSPACE) || (keycodes.contains(Input.Keys.CAPS_LOCK) && lowLayer.capsMode == TerrarumKeyCapsMode.BACK)) {
|
||||||
if (ime != null && ime.composing()) {
|
if (ime != null && ime.composing()) {
|
||||||
candidates = ime.backspace().map { CodepointSequence(it.toCodePoints()) }
|
candidates = ime.backspace().map { CodepointSequence(it.toCodePoints()) }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user