diff options
| author | Araki Ken <arakiken@users.sf.net> | 2014-10-20 13:36:37 +0000 | 
|---|---|---|
| committer | Tatsuya Kinoshita <tats@debian.org> | 2014-12-06 11:47:05 +0000 | 
| commit | 982a8feab0928185053d83592ebe7fff28829b90 (patch) | |
| tree | 993525fc1330f4343bc47548829589e7177302c4 | |
| parent | If SCREEN_VARIANT=sixel on GNU screen, exec img2sixel without -P option. (diff) | |
| download | w3m-982a8feab0928185053d83592ebe7fff28829b90.tar.gz w3m-982a8feab0928185053d83592ebe7fff28829b90.zip | |
* Add n_terminal_image argument to put_image_{sixel|osc5379}(). * Use struct winsize to calculate ppc and ppl.
| -rw-r--r-- | image.c | 7 | ||||
| -rw-r--r-- | terms.c | 24 | 
2 files changed, 16 insertions, 15 deletions
| @@ -195,8 +195,8 @@ syncImage(void)      n_terminal_image = 0;  } -void put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh); -void put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh); +void put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image); +void put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image);  void  drawImage() @@ -247,7 +247,8 @@ drawImage()  		i->sx / pixel_per_char_i,  		i->sy / pixel_per_line_i,  		(i->width + i->sx % pixel_per_char_i + pixel_per_char_i - 1) / pixel_per_char_i, -		(i->height + i->sy % pixel_per_line_i + pixel_per_line_i - 1) / pixel_per_line_i); +		(i->height + i->sy % pixel_per_line_i + pixel_per_line_i - 1) / pixel_per_line_i, +		n_terminal_image);  	    continue ;  	} @@ -468,7 +468,7 @@ writestr(char *s)  #define MOVE(line,column)       writestr(tgoto(T_cm,column,line));  void -put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh) +put_image_osc5379(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image)  {      Str buf;      char *size ; @@ -578,10 +578,10 @@ void ttymode_set(int mode, int imode);  void ttymode_reset(int mode, int imode);  void -put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh) +put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, int sh, int n_terminal_image)  {      pid_t pid; -    int  do_anim; +    int do_anim;      MySignalHandler(*volatile previntr) (SIGNAL_ARG);      MySignalHandler(*volatile prevquit) (SIGNAL_ARG);      MySignalHandler(*volatile prevstop) (SIGNAL_ARG); @@ -589,7 +589,7 @@ put_image_sixel(char *url, int x, int y, int w, int h, int sx, int sy, int sw, i      MOVE(y,x);      flush_tty(); -    do_anim = (x == 0 && y == 0 && sx == 0 && sy == 0) ; +    do_anim = (n_terminal_image == 1 && x == 0 && y == 0 && sx == 0 && sy == 0);      previntr = mySignal(SIGINT, SIG_IGN);      prevquit = mySignal(SIGQUIT, SIG_IGN); @@ -663,19 +663,15 @@ get_pixel_per_cell(int *ppc, int *ppl)      int wp,hp,wc,hc;      int i; -    /* screen replaces ws.ws_col and ws.ws_row alone. */ -#if  0  #ifdef  TIOCGWINSZ      struct winsize ws;      if (ioctl(tty, TIOCGWINSZ, &ws) == 0 && ws.ws_ypixel > 0 && ws.ws_row > 0 &&          ws.ws_xpixel > 0 && ws.ws_col > 0) {  	*ppc = ws.ws_xpixel / ws.ws_col;  	*ppl = ws.ws_ypixel / ws.ws_row; -  	return 1;      }  #endif -#endif      fputs("\x1b[14t\x1b[18t",ttyf); flush_tty(); @@ -694,10 +690,14 @@ get_pixel_per_cell(int *ppc, int *ppl)  	p[len] = '\0';  	if (sscanf(buf,"\x1b[4;%d;%dt\x1b[8;%d;%dt",&hp,&wp,&hc,&wc) == 4) { -	    *ppc = wp / wc; -	    *ppl = hp / hc; - -	    return 1; +	    if (wp > 0 && wc > 0 && hp > 0 && hc > 0) { +		*ppc = wp / wc; +		*ppl = hp / hc; +		return 1; +	    } +	    else { +		return 0; +	    }  	}  	p += len;  	left -= len; | 
