리눅스에서 한글 입력 버그?

세벌의 이미지

데비안에서 한글입력기 ibus 씁니다. 한글입력하다가 다른 곳을 마우스로 찍으면 입력하던 마지막 글자가 마우스로 찍은 자리에 나오네요.
이런 현상은 어느 프로그램의 버그인가요? 해결책은 무엇일까요?

klyx의 이미지

Arch Linux에서 fcitx 사용중인데 그러한 문제는 안보입니다.
입력기를 바꿔서 해결되면 iBus의 버그일 테니 버그 리포팅을 하시면 될 듯합니다.

gonny95의 이미지

저도 그것때문에 IBUS-HANGUL제작자에게 물어봤는데 IBUS의 문제라고 합니다

dontpanic의 이미지

적응되서 그냥 쓰네요;;

익명 사용자의 이미지

데비안 wheezy, fcitx 4.2.4.1 에서도 끝글자 따라다니는 버그 있습니다.
fcitx의 코드가 ibus의 코드와 비슷하니 그럴 수 밖에요.
ibus쪽에 버그 리포팅 올려놓았는데, ibus 개발자가 버그로 인식을 하지 않습니다.
ibus의 설계상 그렇게 될 수 밖에 없어서 버그로 인식하지 않는 것 같습니다.
설계가 잘못되었으니 다시 설계하라고 할 수도 없고... 저도 참 난감하네요..

근본적 원인은 *_filter_keypress, process_key_event, key snooper, async, sync 와 관련이 있습니다.
filter_keypress가 항상 FALSE를 반환하니 GtkTextView에서 priv->need_im_reset = TRUE 로 설정될 일이 없어서 글쓰다가 마우스 클릭하면 조합 중인 글자가 커밋되지 않은 상태로 따라다니게 됩니다.
우선적으로 key snooper 을 제거하면 끝글자가 따라다니지는 않는데, 마우스 클릭 위치에 끝글자가 찍히게 됩니다. 오히려 이게 현재보다 더 나음.

key snooper 을 제거 후에는 async 호출을 sync 호출로 변경하면 마우스 클릭에 끝글자가 찍히는 것이 수정될 듯한데... 막상 해보니.. 마찬가지더군요.
오히려 버그가 하나더 늘어나는데 reset 을 기다리지 않고 process key event가 처리되는 것 같기도 하고 그래서 글자 순서가 바뀌는 오류가 발생되는 것 같습니다.

시행착오 수십번 겪으면 ibus 버그가 잡힐 것도 같은데... 소스 컴파일 시간이.. 후덜덜해서...
게다가 ibus 개발자가 버그로 인식을 하지 않으니... 이게 젤 문제.

klyx의 이미지

Arch Linux fcitx 4.2.8.5 사용중인데 문제 없습니다. 재현하기 위한 조건이 있나요?

익명 사용자의 이미지

재현하기 위한 특별한 조건은 없습니다.
gtk3 어플.. 예를 들먼 gedit 사용할 때도 그런 증세가 없나요?

익명 사용자의 이미지

fcitx도 그런 증세 있습니다. (2)

루부투 LXLE 사용 중인데
크롬에서 끝 글자 버그 있네요.

근데 미도리 브라우저에서는 괜찮아요.

rururara429의 이미지

fcitx도 그런 증세 있습니다. (2)

루부투 LXLE 사용 중인데
크롬에서 끝 글자 버그 있네요.

근데 미도리 브라우저에서는 괜찮아요.
파이어폭스도 멀쩡하구요.

joone의 이미지

현재로서 각 애플리케이션에서 그부분을 고려해서 버그를 수정할 수 밖에 없습니다.

관련 firefox 버그
https://bugzilla.mozilla.org/show_bug.cgi?id=867433

Prentice의 이미지

안 쓴 지 너무 오래돼서 기억이 가물가물하지만... 나비에서도 비슷한 문제 본 것 같은데 gtk용 imhangul에서는 괜찮았던 것 같기도 합니다.

익명 사용자의 이미지

ibus 끝글자 버그를 고쳤습니다.
데비안 wheezy 에서 gedit 와 iceweasel(파이어폭스) 에서 끝글자 버그없이 잘 됩니다.
아래에 코드 있으니 패치 적용하여 컴파일하여 사용하세요.

https://code.google.com/p/ibus/issues/detail?id=1264#c12

익명 사용자의 이미지

패치를 좀 깔끔하게 다시 작성했습니다.
아래 두 패치를 적용하면
gedit, iceweasel(파이어폭스), 리브레오피스 등에서 끝글자 버그가 사라집니다.
마지막 글자 때문에 CTRL키 한번더 누르는 습관이 생겼는데 CTRL 안 눌러도 잘 됩니다.
파이어폭스에서 끝글자 따라다니는 것 없어지고 두번 찍히는 것도 없어집니다.
qt는 아직이요

아래 패치는 상황에 따라 변경되거나 폐기될 수 있습니다.

ibus 패치 - pull 요청했는데 채택 여부는 모름.
https://github.com/ibus/ibus/pull/15

ibus-hangul 패치 - 위의 ibus 패치 적용 후 적용할 것.

diff --git a/src/engine.c b/src/engine.c
index bd009cb..c0be285 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -208,6 +208,8 @@ static gboolean word_commit = FALSE;
 static gboolean auto_reorder = TRUE;
 static int initial_input_mode = INPUT_MODE_DIRECT;
 
+static gboolean _does_ibus_commit_preedit_text_before_reset = FALSE;
+
 static glong
 ucschar_strlen (const ucschar* str)
 {
@@ -338,6 +340,13 @@ ibus_hangul_init (IBusBus *bus)
     value = ibus_config_get_value (config, "panel", "lookup-table-orientation");
     if (value != NULL) {
         lookup_table_orientation = g_variant_get_int32(value);
+        g_variant_unref (value);
+    }
+
+    value = ibus_bus_get_ibus_property (bus, "CommitPreeditTextBeforeResettingIM");
+    if (value != NULL) {
+        _does_ibus_commit_preedit_text_before_reset = g_variant_get_boolean (value);
+        g_variant_unref (value);
     }
 
     keymap = ibus_keymap_get("us");
@@ -1272,7 +1281,18 @@ ibus_hangul_engine_reset (IBusEngine *engine)
 {
     IBusHangulEngine *hangul = (IBusHangulEngine *) engine;
 
-    ibus_hangul_engine_flush (hangul);
+    if (_does_ibus_commit_preedit_text_before_reset) {
+        ibus_hangul_engine_hide_lookup_table (hangul);
+        hangul_ic_reset (hangul->context);
+
+        if (ustring_length (hangul->preedit) != 0)
+            ustring_clear(hangul->preedit);
+
+        ibus_hangul_engine_update_preedit_text (hangul);
+    } else {
+        ibus_hangul_engine_flush (hangul);
+    }
+
     parent_class->reset (engine);
 }
익명 사용자의 이미지

위 작업을 하다가 다솜 입력기를 만들게 되었습니다.
다솜 입력기 1.1 버전이 나왔습니다.

Dasom 1.1 and Dasom Jeongeum 1.1 Released
http://dasom-im.github.io/2015/11/22/dasom-1.1-dasom-jeongeum-1.1-released.html

프로젝트 주소
https://github.com/dasom-im
심심하신 개발자 분들... 이슈(버그, 기능추가 등) 좀 처리해 주세요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.