Merged Irssi 0.8.2 from irssi.org cvs.
[silc.git] / apps / irssi / src / fe-text / term.c
index c32b24919403018dfae465ab00fa686d0d437bc1..a50fc8a31a46f08272d4e646984e0113964e01aa 100644 (file)
 #include "term.h"
 #include "mainwindows.h"
 
+#ifdef HAVE_NL_LANGINFO
+#  include <locale.h>
+#  include <langinfo.h>
+#endif
+
 #ifdef HAVE_SYS_IOCTL_H
 #  include <sys/ioctl.h>
 #endif
 
 #define MIN_SCREEN_WIDTH 20
 
+int term_width, term_height, term_detached;
+
 int term_use_colors;
+int term_type;
 
 static int force_colors;
 static int resize_dirty;
@@ -91,10 +99,25 @@ static void cmd_resize(void)
 
 static void read_settings(void)
 {
+        const char *str;
        int old_colors = term_use_colors;
+        int old_type = term_type;
 
         term_auto_detach(settings_get_bool("term_auto_detach"));
 
+        /* set terminal type */
+       str = settings_get_str("term_type");
+       if (g_strcasecmp(str, "utf-8") == 0)
+               term_type = TERM_TYPE_UTF8;
+       else if (g_strcasecmp(str, "big5") == 0)
+               term_type = TERM_TYPE_BIG5;
+       else
+               term_type = TERM_TYPE_8BIT;
+
+       if (old_type != term_type)
+                term_set_input_type(term_type);
+
+        /* change color stuff */
        if (force_colors != settings_get_bool("term_force_colors")) {
                force_colors = settings_get_bool("term_force_colors");
                term_force_colors(force_colors);
@@ -115,12 +138,21 @@ void term_common_init(void)
        settings_add_bool("lookandfeel", "colors", TRUE);
        settings_add_bool("lookandfeel", "term_force_colors", FALSE);
         settings_add_bool("lookandfeel", "term_auto_detach", FALSE);
-        settings_add_bool("lookandfeel", "term_utf8", FALSE);
+        settings_add_bool("lookandfeel", "mirc_blink_fix", FALSE);
+        settings_add_str("lookandfeel", "term_type", "8bit");
 
        force_colors = FALSE;
        term_use_colors = term_has_colors() && settings_get_bool("colors");
         read_settings();
 
+#if defined (HAVE_NL_LANGINFO) && defined(CODESET)
+        setlocale(LC_CTYPE, "");
+       if (strcmp(nl_langinfo(CODESET), "UTF-8") == 0) {
+               term_type = TERM_TYPE_UTF8;
+               term_set_input_type(TERM_TYPE_UTF8);
+       }
+#endif
+
        signal_add("beep", (SIGNAL_FUNC) term_beep);
        signal_add("setup changed", (SIGNAL_FUNC) read_settings);
        command_bind("resize", NULL, (SIGNAL_FUNC) cmd_resize);