Hello,

I used hangulin feature nowadays, because it does not support
utf-8 encoding, I always ran vim with 'set encoding=cp949'.
But it gave me a pain whenever I open utf-8 encoded file.

So that, today I made a patch.  Any feedback is welcome!

Thanks,
namsh

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
diff --git a/src/gui.c b/src/gui.c
index fc2981c..0736522 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -1223,8 +1223,19 @@ gui_update_cursor(force, clear_selection)
            gui.highlight_mask = (cattr | attr);
 #ifdef FEAT_HANGULIN
            if (composing_hangul)
-               (void)gui_outstr_nowrap(composing_hangul_buffer, 2,
-                       GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR, cfg, cbg, 0);
+           {
+               char_u *comp_buf;
+               int comp_len;
+
+               comp_buf = hangul_composing_buffer_get(&comp_len);
+               if (comp_buf)
+               {
+                   (void)gui_outstr_nowrap(comp_buf, comp_len,
+                                           GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR,
+                                           cfg, cbg, 0);
+                   vim_free(comp_buf);
+               }
+           }
            else
 #endif
                (void)gui_screenchar(LineOffset[gui.row] + gui.col,
@@ -2572,9 +2583,19 @@ gui_undraw_cursor()
 #ifdef FEAT_HANGULIN
        if (composing_hangul
                    && gui.col == gui.cursor_col && gui.row == gui.cursor_row)
-           (void)gui_outstr_nowrap(composing_hangul_buffer, 2,
-                   GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR,
-                   gui.norm_pixel, gui.back_pixel, 0);
+       {
+           char_u *comp_buf;
+           int comp_len;
+
+           comp_buf = hangul_composing_buffer_get(&comp_len);
+           if (comp_buf)
+           {
+               (void)gui_outstr_nowrap(comp_buf, comp_len,
+                                       GUI_MON_IS_CURSOR | GUI_MON_NOCLEAR,
+                                       gui.norm_pixel, gui.back_pixel, 0);
+               vim_free(comp_buf);
+           }
+       }
        else
        {
 #endif
diff --git a/src/hangulin.c b/src/hangulin.c
index 24cf180..f02cad8 100644
--- a/src/hangulin.c
+++ b/src/hangulin.c
@@ -1619,3 +1619,49 @@ convert_3_to_ks(fv, mv, lv, des)
     *des++ = johab_lcon_to_wan[lv];
     return 8;
 }
+
+    char_u *
+hangul_string_convert(buf, p_len)
+    char_u  *buf;
+    int            *p_len;
+{
+    char_u *tmpbuf = NULL;
+    vimconv_T vc;
+
+    if (enc_utf8)
+    {
+       vc.vc_type = CONV_NONE;
+       if (convert_setup(&vc, (char_u *)"euc-kr", p_enc) == OK)
+       {
+           tmpbuf = string_convert(&vc, buf, p_len);
+           convert_setup(&vc, NULL, NULL);
+       }
+    }
+
+    return tmpbuf;
+}
+
+    char_u *
+hangul_composing_buffer_get(p_len)
+    int            *p_len;
+{
+    char_u *tmpbuf = NULL;
+
+    if (composing_hangul)
+    {
+       int len = 2;
+
+       tmpbuf = hangul_string_convert(composing_hangul_buffer, &len);
+       if (tmpbuf != NULL)
+       {
+           *p_len = len;
+       }
+       else
+       {
+           tmpbuf = vim_strnsave(composing_hangul_buffer, 2);
+           *p_len = 2;
+       }
+    }
+
+    return tmpbuf;
+}
diff --git a/src/proto/hangulin.pro b/src/proto/hangulin.pro
index adfde14..59e6986 100644
--- a/src/proto/hangulin.pro
+++ b/src/proto/hangulin.pro
@@ -6,4 +6,6 @@ void hangul_input_state_toggle __ARGS((void));
 void hangul_keyboard_set __ARGS((void));
 int hangul_input_process __ARGS((char_u *s, int len));
 void hangul_input_clear __ARGS((void));
+char_u *hangul_string_convert __ARGS((char_u *buf, int *p_len));
+char_u *hangul_composing_buffer_get __ARGS((int *p_len));
 /* vim: set ft=c : */
diff --git a/src/screen.c b/src/screen.c
index b1af862..de9e04d 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -10047,7 +10047,13 @@ showmode()
            if (gui.in_use)
            {
                if (hangul_input_state_get())
-                   MSG_PUTS_ATTR(" \307\321\261\333", attr);   /* HANGUL */
+               {
+                   /* HANGUL */
+                   if (enc_utf8)
+                       MSG_PUTS_ATTR(" \355\225\234\352\270\200", attr);
+                   else
+                       MSG_PUTS_ATTR(" \307\321\261\333", attr);
+               }
            }
 #endif
 #ifdef FEAT_INS_EXPAND
diff --git a/src/ui.c b/src/ui.c
index e0e54d9..a6a0128 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -1723,8 +1723,18 @@ push_raw_key(s, len)
     char_u  *s;
     int            len;
 {
+    vimconv_T vc;
+    char_u *tmpbuf;
+
+    tmpbuf = hangul_string_convert(s, &len);
+    if (tmpbuf != NULL)
+       s = tmpbuf;
+
     while (len--)
        inbuf[inbufcount++] = *s++;
+
+    if (tmpbuf != NULL)
+       vim_free(tmpbuf);
 }
 #endif
 

Raspunde prin e-mail lui