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; |