billiob pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=ef543aa753bc0540b1e32ce4f5c012863975a7fd

commit ef543aa753bc0540b1e32ce4f5c012863975a7fd
Author: Boris Faure <bill...@gmail.com>
Date:   Sun Jun 16 22:32:50 2013 +0200

    have a config to choose whether to set TERM to xterm-256color
---
 src/bin/config.c           |  5 +++++
 src/bin/config.h           |  1 +
 src/bin/options_behavior.c | 22 +++++++++++++++++++++-
 src/bin/termio.c           |  3 ++-
 src/bin/termio.h           |  1 +
 src/bin/termpty.c          | 15 +++++++++++----
 src/bin/termpty.h          |  3 ++-
 7 files changed, 43 insertions(+), 7 deletions(-)

diff --git a/src/bin/config.c b/src/bin/config.c
index 34a9e0d..ecbd2c9 100644
--- a/src/bin/config.c
+++ b/src/bin/config.c
@@ -84,6 +84,8 @@ config_init(void)
    EET_DATA_DESCRIPTOR_ADD_BASIC
      (edd_base, Config, "multi_instance", multi_instance, EET_T_UCHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC
+     (edd_base, Config, "xterm_256color", xterm_256color, EET_T_UCHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC
      (edd_base, Config, "custom_geometry", custom_geometry, EET_T_UCHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC
      (edd_base, Config, "cg_width", cg_width, EET_T_INT);
@@ -176,6 +178,7 @@ config_sync(const Config *config_src, Config *config)
    config->multi_instance = config_src->multi_instance;
    config->application_server = config_src->application_server;
    config->application_server_restore_views = 
config_src->application_server_restore_views;
+   config->xterm_256color = config_src->xterm_256color;
    config->temporary = config_src->temporary;
    config->custom_geometry = config_src->custom_geometry;
    config->cg_width = config_src->cg_width;
@@ -434,6 +437,7 @@ config_load(const char *key)
              config->multi_instance = EINA_FALSE;
              config->application_server = EINA_FALSE;
              config->application_server_restore_views = EINA_FALSE;
+             config->xterm_256color = EINA_FALSE;
              config->custom_geometry = EINA_FALSE;
              config->cg_width = 80;
              config->cg_height = 24;
@@ -484,6 +488,7 @@ config_fork(Config *config)
    CPY(multi_instance);
    CPY(application_server);
    CPY(application_server_restore_views);
+   CPY(xterm_256color);
    CPY(custom_geometry);
    CPY(cg_width);
    CPY(cg_height);
diff --git a/src/bin/config.h b/src/bin/config.h
index 78446f5..29390a4 100644
--- a/src/bin/config.h
+++ b/src/bin/config.h
@@ -42,6 +42,7 @@ struct _Config
    Eina_Bool         multi_instance;
    Eina_Bool         application_server;
    Eina_Bool         application_server_restore_views;
+   Eina_Bool         xterm_256color;
    Eina_Bool         custom_geometry;
    Eina_Bool         drag_links;
    int               cg_width;
diff --git a/src/bin/options_behavior.c b/src/bin/options_behavior.c
index 47b39d0..5b54412 100644
--- a/src/bin/options_behavior.c
+++ b/src/bin/options_behavior.c
@@ -144,6 +144,16 @@ _cb_op_behavior_application_server_chg(void *data, 
Evas_Object *obj, void *event
 }
 
 static void
+_cb_op_behavior_xterm_256color_chg(void *data, Evas_Object *obj,
+                                   void *event EINA_UNUSED)
+{
+   Evas_Object *term = data;
+   Config *config = termio_config_get(term);
+   config->xterm_256color = elm_check_state_get(obj);
+   config_save(config, NULL);
+}
+
+static void
 _cb_op_behavior_wsep_chg(void *data, Evas_Object *obj, void *event EINA_UNUSED)
 {
    Evas_Object *term = data;
@@ -345,7 +355,17 @@ options_behavior(Evas_Object *opbox, Evas_Object *term)
    evas_object_show(o);
    evas_object_smart_callback_add(o, "changed",
                                   _cb_op_behavior_multi_instance_chg, term);
-   
+
+   o = elm_check_add(bx);
+   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
+   elm_object_text_set(o, "set TERM to xterm-256color");
+   elm_check_state_set(o, config->xterm_256color);
+   elm_box_pack_end(bx, o);
+   evas_object_show(o);
+   evas_object_smart_callback_add(o, "changed",
+                                  _cb_op_behavior_xterm_256color_chg, term);
+
    o = elm_check_add(bx);
    evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
    evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5);
diff --git a/src/bin/termio.c b/src/bin/termio.c
index 41bcbfd..54bc60b 100644
--- a/src/bin/termio.c
+++ b/src/bin/termio.c
@@ -4172,7 +4172,8 @@ termio_add(Evas_Object *parent, Config *config, const 
char *cmd, Eina_Bool login
                        _smart_cb_drop, obj);
 #endif
    
-   sd->pty = termpty_new(cmd, login_shell, cd, w, h, config->scrollback);
+   sd->pty = termpty_new(cmd, login_shell, cd, w, h, config->scrollback,
+                         config->xterm_256color);
    if (!sd->pty)
      {
         ERR("Cannot allocate termpty");
diff --git a/src/bin/termio.h b/src/bin/termio.h
index f6e82dc..934abf9 100644
--- a/src/bin/termio.h
+++ b/src/bin/termio.h
@@ -31,5 +31,6 @@ const char  *termio_title_get(Evas_Object *obj);
 const char  *termio_icon_name_get(Evas_Object *obj);
 void         termio_debugwhite_set(Evas_Object *obj, Eina_Bool dbg);
 void         termio_config_set(Evas_Object *obj, Config *config);
+Config      *termio_config_get(const Evas_Object *obj);
 
 #endif
diff --git a/src/bin/termpty.c b/src/bin/termpty.c
index a3cdeb3..648a45d 100644
--- a/src/bin/termpty.c
+++ b/src/bin/termpty.c
@@ -267,7 +267,8 @@ _limit_coord(Termpty *ty, Termstate *state)
 }
 
 Termpty *
-termpty_new(const char *cmd, Eina_Bool login_shell, const char *cd, int w, int 
h, int backscroll)
+termpty_new(const char *cmd, Eina_Bool login_shell, const char *cd,
+            int w, int h, int backscroll, Eina_Bool xterm_256color)
 {
    Termpty *ty;
    const char *pty;
@@ -399,9 +400,15 @@ termpty_new(const char *cmd, Eina_Bool login_shell, const 
char *cd, int w, int h
         
         /* TODO: should we reset signals here? */
 
-        // pretend to be xterm
-        putenv("TERM=xterm");
-//        putenv("TERM=xterm-256color");
+        /* pretend to be xterm */
+        if (xterm_256color)
+          {
+             putenv("TERM=xterm-256color");
+          }
+        else
+          {
+             putenv("TERM=xterm");
+          }
         putenv("XTERM_256_COLORS=1");
         if (!login_shell)
           execvp(args[0], (char *const *)args);
diff --git a/src/bin/termpty.h b/src/bin/termpty.h
index c0cd9fe..0f22ca4 100644
--- a/src/bin/termpty.h
+++ b/src/bin/termpty.h
@@ -191,7 +191,8 @@ struct _Termexp
 void       termpty_init(void);
 void       termpty_shutdown(void);
 
-Termpty   *termpty_new(const char *cmd, Eina_Bool login_shell, const char *cd, 
int w, int h, int backscroll);
+Termpty   *termpty_new(const char *cmd, Eina_Bool login_shell, const char *cd,
+                      int w, int h, int backscroll, Eina_Bool xterm_256color);
 void       termpty_free(Termpty *ty);
 void       termpty_cellcomp_freeze(Termpty *ty);
 void       termpty_cellcomp_thaw(Termpty *ty);

-- 


Reply via email to