uim / uim

A multilingual input method framework
https://github.com/uim/uim
Other
263 stars 63 forks source link

Allow custom hangul layout/input rules similar to custom-ja-rk-rule.scm #79

Closed listx closed 8 years ago

listx commented 8 years ago

This is a somewhat unusual request, but basically can there be a way to allow a user to define a custom keyboard layout/mapping? I'd like to make some adjustments to the provided byeoru-layout-hangul2 layout (basically boils down to just rearranging some of the lines) but the only possible way I know of is to edit the source directly.

This request stems from my desire to create my own Korean layout, which is merely a rearrangement of the keys in byeoru-layout-hangul2, to match the syllabary frequency list as seen here http://codewar-textcube.blogspot.com/2009/10/%EC%98%81%EC%96%B4-%EC%95%8C%ED%8C%8C%EB%B2%B3-%ED%95%9C%EA%B8%80-%EC%82%AC%EC%9A%A9-%EB%B9%88%EB%8F%84.html in a Dvorak-like style (more frequent consonants/vowels on the home row).

33 is related to this (solving a similar, though not identical, problem). I feel that solving this ticket would obviate the need to solve #33.

jhyeon commented 8 years ago

Thank you for suggesting an interesting feature. It would be certainly nice to offer an easy-to-use interface to define a new Korean layout. In the meantime, you might modify byeoru-layout-hangul2 by putting its new definition in the file ~/.uim. For instance, the code snippet might read:

(require-module "byeoru")
(byeoru-define-layout byeoru-layout-hangul2
 ((0 . TLDE) . "`")
 ((0 . AE01) . "1")
 ((0 . AE02) . "2")
 ((0 . AE03) . "3")

[snip]

 ((1 . AB08) . "<")
 ((1 . AB09) . ">")
 ((1 . AB10) . "?"))

BTW, I believe that issue #33 has been resolved.

listx commented 8 years ago

Thanks for your response!

If I look in byeoru.scm, byeoru-layout-hangul2 is defined as:

(byeoru-define-layout byeoru-layout-hangul2
 ((0 . TLDE) . "`")
 ((0 . AE01) . "1")
 ((0 . AE02) . "2")
 ((0 . AE03) . "3")
 ((0 . AE04) . "4")
 ((0 . AE05) . "5")
 ((0 . AE06) . "6")
 ((0 . AE07) . "7")
 ((0 . AE08) . "8")
 ((0 . AE09) . "9")
 ((0 . AE10) . "0")
 ((0 . AE11) . "-")
 ((0 . AE12) . "=")
 ((0 . AD01) (choseong-bieub   . 1) (jongseong-bieub   . (3 4)))
 ((0 . AD02) (choseong-jieuj   . 1) (jongseong-jieuj   . (1 4)))
 ((0 . AD03) (choseong-digeud  . 1) (jongseong-digeud  . 1))
 ((0 . AD04) (choseong-giyeog  . 1) (jongseong-giyeog  . (3 4)))
 ((0 . AD05) (choseong-sios    . 1) (jongseong-sios    . (1 4)))
 ((0 . AD06) (jungseong-yo     . 1))
 ((0 . AD07) (jungseong-yeo    . 1))
 ((0 . AD08) (jungseong-ya     . 1))
 ((0 . AD09) (jungseong-ae     . (1 4)))
 ((0 . AD10) (jungseong-e      . (1 4)))
 ((0 . AD11) . "[")
 ((0 . AD12) . "]")
 ((0 . BKSL) . "\\")
 ((0 . AC01) (choseong-mieum   . 1) (jongseong-mieum   . (1 4)))
 ((0 . AC02) (choseong-nieun   . 1) (jongseong-nieun   . 3))
 ((0 . AC03) (choseong-ieung   . 1) (jongseong-ieung   . 1))
 ((0 . AC04) (choseong-rieul   . 1) (jongseong-rieul   . 3))
 ((0 . AC05) (choseong-hieuh   . 1) (jongseong-hieuh   . (1 4)))
 ((0 . AC06) (jungseong-o      . 3))
 ((0 . AC07) (jungseong-eo     . (1 4)))
 ((0 . AC08) (jungseong-a      . (1 4)))
 ((0 . AC09) (jungseong-i      . (1 4)))
 ((0 . AC10) . ";")
 ((0 . AC11) . "'")
 ((0 . AB01) (choseong-kieuk   . 1) (jongseong-kieuk   . 1))
 ((0 . AB02) (choseong-tieut   . 1) (jongseong-tieut   . (1 4)))
 ((0 . AB03) (choseong-chieuch . 1) (jongseong-chieuch . 1))
 ((0 . AB04) (choseong-pieup   . 1) (jongseong-pieup   . (1 4)))
 ((0 . AB05) (jungseong-yu     . 1))
 ((0 . AB06) (jungseong-u      . 3))
 ((0 . AB07) (jungseong-eu     . 3))
 ((0 . AB08) . ",")
 ((0 . AB09) . ".")
 ((0 . AB10) . "/")

 ((1 . TLDE) . "~")
 ((1 . AE01) . "!")
 ((1 . AE02) . "@")
 ((1 . AE03) . "#")
 ((1 . AE04) . "$")
 ((1 . AE05) . "%")
 ((1 . AE06) . "^")
 ((1 . AE07) . "&")
 ((1 . AE08) . "*")
 ((1 . AE09) . "(")
 ((1 . AE10) . ")")
 ((1 . AE11) . "_")
 ((1 . AE12) . "+")
 ((1 . AD01) (choseong-ssangbieub  . 5))
 ((1 . AD02) (choseong-ssangjieuj  . 5))
 ((1 . AD03) (choseong-ssangdigeud . 5))
 ((1 . AD04) (choseong-ssanggiyeog . 5) (jongseong-ssanggiyeog . 5))
 ((1 . AD05) (choseong-ssangsios   . 5) (jongseong-ssangsios   . 5))
 ((1 . AD06) (jungseong-yo     . 1))
 ((1 . AD07) (jungseong-yeo    . 1))
 ((1 . AD08) (jungseong-ya     . 1))
 ((1 . AD09) (jungseong-yae    . 1))
 ((1 . AD10) (jungseong-ye     . 1))
 ((1 . AD11) . "{")
 ((1 . AD12) . "}")
 ((1 . BKSL) . "|")
 ((1 . AC01) (choseong-mieum   . 1) (jongseong-mieum   . (1 4)))
 ((1 . AC02) (choseong-nieun   . 1) (jongseong-nieun   . 3))
 ((1 . AC03) (choseong-ieung   . 1) (jongseong-ieung   . 1))
 ((1 . AC04) (choseong-rieul   . 1) (jongseong-rieul   . 3))
 ((1 . AC05) (choseong-hieuh   . 1) (jongseong-hieuh   . (1 4)))
 ((1 . AC06) (jungseong-o      . 3))
 ((1 . AC07) (jungseong-eo     . (1 4)))
 ((1 . AC08) (jungseong-a      . (1 4)))
 ((1 . AC09) (jungseong-i      . (1 4)))
 ((1 . AC10) . ":")
 ((1 . AC11) . "\"")
 ((1 . AB01) (choseong-kieuk   . 1) (jongseong-kieuk   . 1))
 ((1 . AB02) (choseong-tieut   . 1) (jongseong-tieut   . (1 4)))
 ((1 . AB03) (choseong-chieuch . 1) (jongseong-chieuch . 1))
 ((1 . AB04) (choseong-pieup   . 1) (jongseong-pieup   . (1 4)))
 ((1 . AB05) (jungseong-yu     . 1))
 ((1 . AB06) (jungseong-u      . 3))
 ((1 . AB07) (jungseong-eu     . 3))
 ((1 . AB08) . "<")
 ((1 . AB09) . ">")
 ((1 . AB10) . "?"))

I tried to follow your template and simply copy/pasted the above definition (with some comments) into ~/.uim like this:

(require-module "byeoru")
(byeoru-define-layout byeoru-layout-hangul2
 ((0 . TLDE) . "`")
 ((0 . AE01) . "1")
 ((0 . AE02) . "2")
 ((0 . AE03) . "3")
 ((0 . AE04) . "4")
 ((0 . AE05) . "5")
 ((0 . AE06) . "6")
 ((0 . AE07) . "7")
 ((0 . AE08) . "8")
 ((0 . AE09) . "9")
 ((0 . AE10) . "0")
 ((0 . AE11) . "-")
 ((0 . AE12) . "=")
 ((0 . AD01) (choseong-bieub   . 1) (jongseong-bieub   . (3 4))) ; Q
 ((0 . AD02) (choseong-jieuj   . 1) (jongseong-jieuj   . (1 4))) ; W
 ((0 . AD03) (choseong-digeud  . 1) (jongseong-digeud  . 1)) ; E
 ((0 . AD04) (choseong-giyeog  . 1) (jongseong-giyeog  . (3 4))) ; R
 ((0 . AD05) (choseong-sios    . 1) (jongseong-sios    . (1 4))) ; T
 ((0 . AD06) (jungseong-yo     . 1)) ; Y
 ((0 . AD07) (jungseong-e      . (1 4))) ; U
 ((0 . AD08) (jungseong-ya     . 1)) ; I
 ((0 . AD09) (jungseong-ae     . (1 4))) ; O
 ((0 . AD10) (jungseong-yeo    . 1)) ; P
 ((0 . AD11) . "[")
 ((0 . AD12) . "]")
 ((0 . BKSL) . "\\")
 ((0 . AC01) (choseong-mieum   . 1) (jongseong-mieum   . (1 4))) ; A
 ((0 . AC02) (choseong-nieun   . 1) (jongseong-nieun   . 3)) ; S
 ((0 . AC03) (choseong-ieung   . 1) (jongseong-ieung   . 1)) ; D
 ((0 . AC04) (choseong-rieul   . 1) (jongseong-rieul   . 3)) ; F
 ((0 . AC05) (choseong-hieuh   . 1) (jongseong-hieuh   . (1 4))) ; G
 ((0 . AC06) (jungseong-o      . 3)) ; H
 ((0 . AC07) (jungseong-eo     . (1 4))) ; J
 ((0 . AC08) (jungseong-a      . (1 4))) ; K
 ((0 . AC09) (jungseong-i      . (1 4))) ; L
 ((0 . AC10) . ";")
 ((0 . AC11) . "'")
 ((0 . AB01) (choseong-kieuk   . 1) (jongseong-kieuk   . 1)) ; Z
 ((0 . AB02) (choseong-tieut   . 1) (jongseong-tieut   . (1 4))) ; X
 ((0 . AB03) (choseong-chieuch . 1) (jongseong-chieuch . 1)) ; C
 ((0 . AB04) (choseong-pieup   . 1) (jongseong-pieup   . (1 4))) ; V
 ((0 . AB05) (jungseong-yu     . 1)) ; B
 ((0 . AB06) (jungseong-u      . 3)) ; N
 ((0 . AB07) (jungseong-eu     . 3)) ; M
 ((0 . AB08) . ",")
 ((0 . AB09) . ".")
 ((0 . AB10) . "/")

 ((1 . TLDE) . "~")
 ((1 . AE01) . "!")
 ((1 . AE02) . "@")
 ((1 . AE03) . "#")
 ((1 . AE04) . "$")
 ((1 . AE05) . "%")
 ((1 . AE06) . "^")
 ((1 . AE07) . "&")
 ((1 . AE08) . "*")
 ((1 . AE09) . "(")
 ((1 . AE10) . ")")
 ((1 . AE11) . "_")
 ((1 . AE12) . "+")
 ((1 . AD01) (choseong-ssangbieub  . 5)) ; Q
 ((1 . AD02) (choseong-ssangjieuj  . 5)) ; W
 ((1 . AD03) (choseong-ssangdigeud . 5)) ; E
 ((1 . AD04) (choseong-ssanggiyeog . 5) (jongseong-ssanggiyeog . 5)) ; R
 ((1 . AD05) (choseong-ssangsios   . 5) (jongseong-ssangsios   . 5)) ; T
 ((1 . AD06) (jungseong-yo     . 1)) ; Y
 ((1 . AD07) (jungseong-ye     . 1)) ; U
 ((1 . AD08) (jungseong-ya     . 1)) ; I
 ((1 . AD09) (jungseong-yae    . 1)) ; O
 ((1 . AD10) (jungseong-yeo    . 1)) ; P
 ((1 . AD11) . "{")
 ((1 . AD12) . "}")
 ((1 . BKSL) . "|")
 ((1 . AC01) (choseong-mieum   . 1) (jongseong-mieum   . (1 4))) ; A
 ((1 . AC02) (choseong-nieun   . 1) (jongseong-nieun   . 3)) ; S
 ((1 . AC03) (choseong-ieung   . 1) (jongseong-ieung   . 1)) ; D
 ((1 . AC04) (choseong-rieul   . 1) (jongseong-rieul   . 3)) ; F
 ((1 . AC05) (choseong-hieuh   . 1) (jongseong-hieuh   . (1 4))) ; G
 ((1 . AC06) (jungseong-o      . 3)) ; H
 ((1 . AC07) (jungseong-eo     . (1 4))) ; J
 ((1 . AC08) (jungseong-a      . (1 4))) ; K
 ((1 . AC09) (jungseong-i      . (1 4))) ; L
 ((1 . AC10) . ":")
 ((1 . AC11) . "\"")
 ((1 . AB01) (choseong-kieuk   . 1) (jongseong-kieuk   . 1)) ; Z
 ((1 . AB02) (choseong-tieut   . 1) (jongseong-tieut   . (1 4))) ; X
 ((1 . AB03) (choseong-chieuch . 1) (jongseong-chieuch . 1)) ; C
 ((1 . AB04) (choseong-pieup   . 1) (jongseong-pieup   . (1 4))) ; V
 ((1 . AB05) (jungseong-yu     . 1)) ; B
 ((1 . AB06) (jungseong-u      . 3)) ; N
 ((1 . AB07) (jungseong-eu     . 3)) ; M
 ((1 . AB08) . "<")
 ((1 . AB09) . ">")
 ((1 . AB10) . "?"))

but then Korean input no longer works. If I delete the ~/.uim file, it works (I had to create the ~/.uim file to test out the suggested workaround). If I had to surmise a guess it would be that the symbols(?) like jungseong-eu need to be defined. It looks like byeoru.scm is the only place these symbols are defined, so I tried dumping the alist definitions like

(define byeoru-choseong-alist
  '((choseong-void         .  0)
    (choseong-giyeog       .  1)
    (choseong-ssanggiyeog  .  2)
    (choseong-nieun        .  3)
    (choseong-digeud       .  4)
    (choseong-ssangdigeud  .  5)
    (choseong-rieul        .  6)
    (choseong-mieum        .  7)
    (choseong-bieub        .  8)
    (choseong-ssangbieub   .  9)
    (choseong-sios         . 10)
    (choseong-ssangsios    . 11)
    (choseong-ieung        . 12)
    (choseong-jieuj        . 13)
    (choseong-ssangjieuj   . 14)
    (choseong-chieuch      . 15)
    (choseong-kieuk        . 16)
    (choseong-tieut        . 17)
    (choseong-pieup        . 18)
    (choseong-hieuh        . 19)))

into ~/.uim as well but it does not seem to help (if I switch to Korean input, I just get the underlying English letters as if Korean input is not active). I also tried to just remove all such symbol-based entries and tried out configurations like

(require-module "byeoru")
(byeoru-define-layout byeoru-layout-hangul2
 ((0 . TLDE) . "`")
 ((0 . AE01) . "1")
 ((0 . AE02) . "2")
 ((0 . AE03) . "3")
 ((0 . AE04) . "4")
 ((0 . AE05) . "5")
 ((0 . AE06) . "6")
 ((0 . AE07) . "7")
 ((0 . AE08) . "8")
 ((0 . AE09) . "9")
 ((0 . AE10) . "0")
 ((0 . AE11) . "-")
 ((0 . AE12) . "="))

but this too did not work.

In the meantime, is there a way to figure out where UIM is choking given a dirty ~/.uim file (logging)?

jhyeon commented 8 years ago

It is strange that your first code works for me. You do not need to define byeoru-choseong-alist etc. within ~/.uim if you have the line

(require-module "byeoru")

before the layout definition in the file. To check whether ~/.uim takes effect on the definition of byeoru-layout-hangul2 or not, you might try:

$ uim-sh 
uim> byeoru-layout-hangul2
(((0 . TLDE) . "`") ((0 . AE01) . "1") ((0 . AE02) . "2") ((0 . AE03) . "3") ((0 . AE04) . "4") ((0 . AE05) . "5") ((0 . AE06) . "6") ((0 . AE07) . "7") ((0 . AE08) . "8") ((0 . AE09) . "9") ((0 . AE10) . "0") ((0 . AE11) . "-") ((0 . AE12) . "="))
uim>

The above is what I get with your last configuration. Without ~/.uim, the following should result:

$ uim-sh 
uim> (require-module "byeoru")
*/usr/share/uim/byeoru.scm-loaded*
uim> byeoru-layout-hangul2
(((0 . TLDE) . "`") ((0 . AE01) . "1") ((0 . AE02) . "2") ((0 . AE03) . "3") ((0 . AE04) . "4") ((0 . AE05) . "5") ((0 . AE06) . "6") ((0 . AE07) . "7") ((0 . AE08) . "8") ((0 . AE09) . "9") ((0 . AE10) . "0") ((0 . AE11) . "-") ((0 . AE12) . "=") ((0 . AD01) (choseong-bieub . 1) (jongseong-bieub . 3) (jongseong-bieub . 4)) ((0 . AD02) (choseong-jieuj . 1) (jongseong-jieuj . 1) (jongseong-jieuj . 4)) ((0 . AD03) (choseong-digeud . 1) (jongseong-digeud . 1)) ((0 . AD04) (choseong-giyeog . 1) (jongseong-giyeog . 3) (jongseong-giyeog . 4)) ((0 . AD05) (choseong-sios . 1) (jongseong-sios . 1) (jongseong-sios . 4)) ((0 . AD06) (jungseong-yo . 1)) ((0 . AD07) (jungseong-yeo . 1)) ((0 . AD08) (jungseong-ya . 1)) ((0 . AD09) (jungseong-ae . 1) (jungseong-ae . 4)) ((0 . AD10) (jungseong-e . 1) (jungseong-e . 4)) ((0 . AD11) . "[") ((0 . AD12) . "]") ((0 . BKSL) . "\\") ((0 . AC01) (choseong-mieum . 1) (jongseong-mieum . 1) (jongseong-mieum . 4)) ((0 . AC02) (choseong-nieun . 1) (jongseong-nieun . 3)) ((0 . AC03) (choseong-ieung . 1) (jongseong-ieung . 1)) ((0 . AC04) (choseong-rieul . 1) (jongseong-rieul . 3)) ((0 . AC05) (choseong-hieuh . 1) (jongseong-hieuh . 1) (jongseong-hieuh . 4)) ((0 . AC06) (jungseong-o . 3)) ((0 . AC07) (jungseong-eo . 1) (jungseong-eo . 4)) ((0 . AC08) (jungseong-a . 1) (jungseong-a . 4)) ((0 . AC09) (jungseong-i . 1) (jungseong-i . 4)) ((0 . AC10) . ";") ((0 . AC11) . "'") ((0 . AB01) (choseong-kieuk . 1) (jongseong-kieuk . 1)) ((0 . AB02) (choseong-tieut . 1) (jongseong-tieut . 1) (jongseong-tieut . 4)) ((0 . AB03) (choseong-chieuch . 1) (jongseong-chieuch . 1)) ((0 . AB04) (choseong-pieup . 1) (jongseong-pieup . 1) (jongseong-pieup . 4)) ((0 . AB05) (jungseong-yu . 1)) ((0 . AB06) (jungseong-u . 3)) ((0 . AB07) (jungseong-eu . 3)) ((0 . AB08) . ",") ((0 . AB09) . ".") ((0 . AB10) . "/") ((1 . TLDE) . "~") ((1 . AE01) . "!") ((1 . AE02) . "@") ((1 . AE03) . "#") ((1 . AE04) . "$") ((1 . AE05) . "%") ((1 . AE06) . "^") ((1 . AE07) . "&") ((1 . AE08) . "*") ((1 . AE09) . "(") ((1 . AE10) . ")") ((1 . AE11) . "_") ((1 . AE12) . "+") ((1 . AD01) (choseong-ssangbieub . 5)) ((1 . AD02) (choseong-ssangjieuj . 5)) ((1 . AD03) (choseong-ssangdigeud . 5)) ((1 . AD04) (choseong-ssanggiyeog . 5) (jongseong-ssanggiyeog . 5)) ((1 . AD05) (choseong-ssangsios . 5) (jongseong-ssangsios . 5)) ((1 . AD06) (jungseong-yo . 1)) ((1 . AD07) (jungseong-yeo . 1)) ((1 . AD08) (jungseong-ya . 1)) ((1 . AD09) (jungseong-yae . 1)) ((1 . AD10) (jungseong-ye . 1)) ((1 . AD11) . "{") ((1 . AD12) . "}") ((1 . BKSL) . "|") ((1 . AC01) (choseong-mieum . 1) (jongseong-mieum . 1) (jongseong-mieum . 4)) ((1 . AC02) (choseong-nieun . 1) (jongseong-nieun . 3)) ((1 . AC03) (choseong-ieung . 1) (jongseong-ieung . 1)) ((1 . AC04) (choseong-rieul . 1) (jongseong-rieul . 3)) ((1 . AC05) (choseong-hieuh . 1) (jongseong-hieuh . 1) (jongseong-hieuh . 4)) ((1 . AC06) (jungseong-o . 3)) ((1 . AC07) (jungseong-eo . 1) (jungseong-eo . 4)) ((1 . AC08) (jungseong-a . 1) (jungseong-a . 4)) ((1 . AC09) (jungseong-i . 1) (jungseong-i . 4)) ((1 . AC10) . ":") ((1 . AC11) . "\"") ((1 . AB01) (choseong-kieuk . 1) (jongseong-kieuk . 1)) ((1 . AB02) (choseong-tieut . 1) (jongseong-tieut . 1) (jongseong-tieut . 4)) ((1 . AB03) (choseong-chieuch . 1) (jongseong-chieuch . 1)) ((1 . AB04) (choseong-pieup . 1) (jongseong-pieup . 1) (jongseong-pieup . 4)) ((1 . AB05) (jungseong-yu . 1)) ((1 . AB06) (jungseong-u . 3)) ((1 . AB07) (jungseong-eu . 3)) ((1 . AB08) . "<") ((1 . AB09) . ">") ((1 . AB10) . "?"))
uim>
listx commented 8 years ago

For further background, I am using uim 1.8.6 on NixOS. Anyway, I did the experiment with uim-sh, and indeed the first posting I did does redefine byeoru-layout-hangul2 just like in your first uim-sh example (same output pretty much). Interestingly, if I delete my ~/.uim and invoke uim-sh like in your second example, I get different output:

uim> (require-module "byeoru")
*/nix/store/n70b47zdfmf4swhhmq0xbr03mn8v40mz-uim-1.8.6/share/uim/byeoru.scm-loaded*
uim> byeoru-layout-hangul2
(("q" (choseong-bieub . 1) (jongseong-bieub . 3) (jongseong-bieub . 4)) ("w" (choseong-jieuj . 1) (jongseong-jieuj . 1) (jongseong-jieuj . 4)) ("e" (choseong-digeud . 1) (jongseong-digeud . 1)) ("r" (choseong-giyeog . 1) (jongseong-giyeog . 3) (jongseong-giyeog . 4)) ("t" (choseong-sios . 1) (jongseong-sios . 1) (jongseong-sios . 4)) ("y" (jungseong-yo . 1)) ("u" (jungseong-yeo . 1)) ("i" (jungseong-ya . 1)) ("o" (jungseong-ae . 1) (jungseong-ae . 4)) ("p" (jungseong-e . 1) (jungseong-e . 4)) ("a" (choseong-mieum . 1) (jongseong-mieum . 1) (jongseong-mieum . 4)) ("s" (choseong-nieun . 1) (jongseong-nieun . 3)) ("d" (choseong-ieung . 1) (jongseong-ieung . 1)) ("f" (choseong-rieul . 1) (jongseong-rieul . 3)) ("g" (choseong-hieuh . 1) (jongseong-hieuh . 1) (jongseong-hieuh . 4)) ("h" (jungseong-o . 3)) ("j" (jungseong-eo . 1) (jungseong-eo . 4)) ("k" (jungseong-a . 1) (jungseong-a . 4)) ("l" (jungseong-i . 1) (jungseong-i . 4)) ("z" (choseong-kieuk . 1) (jongseong-kieuk . 1)) ("x" (choseong-tieut . 1) (jongseong-tieut . 1) (jongseong-tieut . 4)) ("c" (choseong-chieuch . 1) (jongseong-chieuch . 1)) ("v" (choseong-pieup . 1) (jongseong-pieup . 1) (jongseong-pieup . 4)) ("b" (jungseong-yu . 1)) ("n" (jungseong-u . 3)) ("m" (jungseong-eu . 3)) ("Q" (choseong-ssangbieub . 5)) ("W" (choseong-ssangjieuj . 5)) ("E" (choseong-ssangdigeud . 5)) ("R" (choseong-ssanggiyeog . 5) (jongseong-ssanggiyeog . 5)) ("T" (choseong-ssangsios . 5) (jongseong-ssangsios . 5)) ("Y" (jungseong-yo . 1)) ("U" (jungseong-yeo . 1)) ("I" (jungseong-ya . 1)) ("O" (jungseong-yae . 1)) ("P" (jungseong-ye . 1)) ("A" (choseong-mieum . 1) (jongseong-mieum . 1) (jongseong-mieum . 4)) ("S" (choseong-nieun . 1) (jongseong-nieun . 3)) ("D" (choseong-ieung . 1) (jongseong-ieung . 1)) ("F" (choseong-rieul . 1) (jongseong-rieul . 3)) ("G" (choseong-hieuh . 1) (jongseong-hieuh . 1) (jongseong-hieuh . 4)) ("H" (jungseong-o . 3)) ("J" (jungseong-eo . 1) (jungseong-eo . 4)) ("K" (jungseong-a . 1) (jungseong-a . 4)) ("L" (jungseong-i . 1) (jungseong-i . 4)) ("Z" (choseong-kieuk . 1) (jongseong-kieuk . 1)) ("X" (choseong-tieut . 1) (jongseong-tieut . 1) (jongseong-tieut . 4)) ("C" (choseong-chieuch . 1) (jongseong-chieuch . 1)) ("V" (choseong-pieup . 1) (jongseong-pieup . 1) (jongseong-pieup . 4)) ("B" (jungseong-yu . 1)) ("N" (jungseong-u . 3)) ("M" (jungseong-eu . 3)))

It appears that I need to define byeoru-layout-hangul2 slightly differently is all.

EDIT: I did edit it using the syntax above and it indeed works fine (I only tested swapping the 'q' and 'w' ones, but the change does take affect). If this is not a bug then I guess feel free to close this ticket? Defining ~/.uim is easy enough.

jhyeon commented 8 years ago

I am happy that you found a solution. The format of layout definitions changed at commit f28132d48fc443dd73a945464e194a9af2d4bacb so that Korean layouts are described independently of the X layout. Thanks for the feedback.