refactor printing of terminal title - lchat - A line oriented chat front end for ii.
 (HTM) git clone git://git.suckless.org/lchat
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit e821ed80afb2e4c922c000dbe59043064096516b
 (DIR) parent 91579d79ea33b7f14db6b8187255971b467f2553
 (HTM) Author: Jan Klemkow <j.klemkow@wemelug.de>
       Date:   Sun,  9 Oct 2022 23:33:33 +0200
       
       refactor printing of terminal title
       
        - fix segmentation fault reported by NRK <nrk@disroot.org>
        - remove redundant code
        - move code to util.c.  So, filter programs can also use
          this feature.
        - while here, reorder util.h in the same order as util.c
       
       Diffstat:
         M lchat.c                             |      16 ++++++----------
         M util.c                              |       9 +++++++++
         M util.h                              |       3 ++-
       
       3 files changed, 17 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/lchat.c b/lchat.c
       @@ -37,6 +37,7 @@
        
        static struct termios origin_term;
        static struct winsize winsize;
       +static char *TERM;
        
        static void
        sigwinch(int sig)
       @@ -48,13 +49,8 @@ sigwinch(int sig)
        static void
        exit_handler(void)
        {
       -        char *title = getenv("TERM");
       -
                /* reset terminal's window name */
       -        if (strncmp(title, "screen", 6) == 0)
       -                printf("\033k%s\033\\", title);
       -        else
       -                printf("\033]0;%s\a", title);
       +        set_title(TERM, TERM);
        
                if (tcsetattr(STDIN_FILENO, TCSANOW, &origin_term) == -1)
                        die("tcsetattr:");
       @@ -171,6 +167,9 @@ main(int argc, char *argv[])
                char *prompt = read_file_line(".prompt");
                char *title = read_file_line(".title");
        
       +        if ((TERM = getenv("TERM")) == NULL)
       +                TERM = "";
       +
                if (sl == NULL)
                        die("Failed to initialize slackline");
        
       @@ -252,10 +251,7 @@ main(int argc, char *argv[])
                        if ((title = basename(path)) == NULL)
                                die("basename:");
                }
       -        if (strncmp(getenv("TERM"), "screen", 6) == 0)
       -                printf("\033k%s\033\\", title);
       -        else
       -                printf("\033]0;%s\a", title);
       +        set_title(TERM, title);
        
                /* prepare terminal reset on exit */
                if (tcgetattr(fd, &origin_term) == -1)
 (DIR) diff --git a/util.c b/util.c
       @@ -62,3 +62,12 @@ bell_match(const char *str, const char *regex_file)
        
                return false;
        }
       +
       +void
       +set_title(const char *term, char *title)
       +{
       +        if (strncmp(term, "screen", 6) == 0)
       +                printf("\033k%s\033\\", title);
       +        else
       +                printf("\033]0;%s\a", title);
       +}
 (DIR) diff --git a/util.h b/util.h
       @@ -1,7 +1,8 @@
        #ifndef _UTIL_H_
        #define _UTIL_H_
        
       -bool bell_match(const char *str, const char *regex_file);
        void die(const char *fmt, ...);
       +bool bell_match(const char *str, const char *regex_file);
       +void set_title(const char *term, const char *title);
        
        #endif