libhangul 세벌식 자판 자동순서 교정

세벌의 이미지

https://kldp.org/node/163192 과 관련있는 글입니다.
위 글은 어떤 까닭인지 댓글을 쓸 수 없게 된 것 같습니다만 저는 상관 없습니다.
ibus-hangul 컴파일 하지 않아도 될 거 같아요.

ibus-setup-hangul 에
자동 순서 교정 체크 박스가 사라졌습니다.
https://sebuls.blogspot.com/2020/05/setupui-in-ibus-setup-hangul.html
참고하면 그 체크박스 나타나게 할 수는 있습니다.
그런데 그거 체크해도 동작 안 합니다.
libhangul 이 바뀐 거 같아요.

자동 교정 기능이 두벌식 사용자에게 불편을 주는 부작용이 있어서 꺼 놓은 거로 알고 있습니다.
자동 교정 기능 켜기/끄기 를 시용자가 선택할 수 있도록 하려면 어떻게 하면 되나요?
libhangul 은 적절히 건드려주면 될 거 같긴 한데요.
소스를 받아서 고쳐서 컴파일 해야 되나요? 아니면 다른 방법이 있나요? 어떻게 하면 되나요?

익명 사용자의 이미지

https://github.com/libhangul/ibus-hangul/blob/master/data/org.freedesktop.ibus.engine.hangul.gschema.xml
아래 내용이 있습니다.

    <key name="auto-reorder" type="b">
      <default>true</default>
      <summary>Auto reorder</summary>
      <description></description>
    </key>

auto-reorder 를 사용하는 부분을 https://github.com/libhangul/ibus-hangul/blob/master/src/engine.c 에서 찾아야 되죠.

    hangul_ic_connect_callback (hangul->context, "transition",
                                ibus_hangul_engine_on_transition, hangul);

static bool
ibus_hangul_engine_on_transition (HangulInputContext     *hic,
                                  ucschar                 c,
                                  const ucschar          *preedit,
                                  void                   *data)
{
    if (!auto_reorder) {
        if (hangul_is_choseong (c)) {
            if (hangul_ic_has_jungseong (hic) || hangul_ic_has_jongseong (hic))
                return false;
        }
 
        if (hangul_is_jungseong (c)) {
            if (hangul_ic_has_jongseong (hic))
                return false;
        }
    }
 
    return true;
}

이런 부분이 있습니다.

ibus_hangul_engine_on_transition() 함수 안의 내용을

  hangul_ic_set_option (hangul->context, HANGUL_IC_OPTION_AUTO_REORDER,
                        auto_reorder);

이렇게 바꿔줘야겠죠. 여기까지 한번 해보세요.
(아울러, ibus_hangul_engine_on_transition 함수 원형을
ibus_hangul_engine_on_auto_reorder 이런 식으로 바꿔주면 좋겠죠. 이것은 나중에 해보도록 하죠.)
익명 사용자의 이미지

써놓고 보니 오류가 있네요. 이렇게 해야겠군요.

  hangul_ic_set_option (hic, HANGUL_IC_OPTION_AUTO_REORDER,
                        auto_reorder);

고생하이소
세벌의 이미지

도움말 주셨는데 제 머리로 이해하기가 어렵네요.
libhangul ibus-hangul 어디를 어떻게 건드려야 할지...
모르겠어요.
제가 하고 싶은 거는 세벌식 자판에서 자동 순서 교정 기능이 동작하게 하는 거...

Stephen Kyoungwon Kim@Google의 이미지

업스트림 소스가 그걸 허용 안 하도록 변경했으니, 소스를 받아다 다시 고쳐서 되게 한 다음 빌드해서 쓰시라는 얘기로 보입니다. 그리고 꽤 자세하게 소스 어디를 고쳐야 하는지 나와 있고요.

세벌의 이미지

자세한 설명 보고 소스 고치고 make install 까지는 성공.
그러나 제가 원하는 결과(세벌식에서 자동 순서 교정)는 안 나오는 거 같네요.
제가 프로그램 공부를 더 해야 할 거 같네요.
고맙습니다.

익명 사용자의 이미지

이전 글에서 얘기한 데비안 방식으로 설치하셔야 잘 작동할거에요.
make install 로 했다면 /usr/local 디렉토리에 설치되었을거 같네요. 권투를 빕니다

익명 사용자의 이미지

아휴 죄송해요

    hangul_ic_connect_callback (hangul->context, "transition",
                                ibus_hangul_engine_on_transition, hangul);

위 부분을 g_signal_connect 를 쓰도록 바꿔야 되는군요. hangul 이 gobject 라면 g_signal_connect_data 함수써야 되겠요.
https://kldp.org/node/163053 님프 패치에 이미 적용된 부분입니다. 거기 코드 참고하셔서 ibus hangul 용 코드 만드시면 됩니다. nimf 가 LGPL 이라 그렇게 해도 아무 문제 없습니다. 그러라고 LGPL 오픈소스로 배포하는 거니까요. 패치 작성 하는 방법에 대한 한글 문서가 많이 부족한데 시간날 때 함 ibus hangul 패치 작성하는 법을 알려드리겠습니다.
세벌의 이미지

도움말 참고해서 어찌 어찌 하다 보니 되었네요.
/usr/local/libexec/ibus-engine-hangul &
한 다음에 한글 입력 해 보니 자동교정 동작 잘 하네요.
뭐가 뭔지 잘 모르고 따라 한 거라 정리가 좀 안 되긴 하지만 자동교정 되네요. 신기하네요.
고맙습니다. 도움말 참고하여 제가 바꾼 부분입니다.

static bool
ibus_hangul_engine_on_transition (HangulInputContext     *hic,
                                  ucschar                 c,
                                  const ucschar          *preedit,
                                  void                   *data)
{
/****** Sebul *****
    if (!auto_reorder) {
        if (hangul_is_choseong (c)) {
            if (hangul_ic_has_jungseong (hic) || hangul_ic_has_jongseong (hic))
                return false;
        }
 
        if (hangul_is_jungseong (c)) {
            if (hangul_ic_has_jongseong (hic))
                return false;
        }
    }
******* Sebul *****/
/* Sebul begin */
hangul_ic_set_option (hic, HANGUL_IC_OPTION_AUTO_REORDER, auto_reorder);
/* Sebul end */
    return true;
}
익명 사용자의 이미지

ibus_hangul_engine_init (IBusHangulEngine *hangul) 함수 내에... 이런 부분이 있는데,

    g_signal_connect (settings_panel, "changed",
                      G_CALLBACK (settings_changed), hangul);

아래 예처럼, 이런 식으로
g_signal_connect_data (settings_panel, "changed::뭐였더라..",
                      G_CALLBACK (auto reorder 변경시 실행시킬 콜백 함수 이름), NULL, 뭐였더라, hangul);

해줘야 됩니다. 아무튼 작동되신다카니 다행이네요. 시간날 때, 패치 함 작성하는 방법을 알려드리겠습니다~~~
세벌의 이미지

데비안에 cwryu 님의 커밋이 있네요.
https://salsa.debian.org/cwryu/ibus-hangul/-/commit/5ea26c8241ad9e900e6d5ecba29e8df7ddcbb9ab

도움 주신 모든 분 고맙습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.