aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAraki Ken <arakiken@users.sf.net>2014-10-20 13:36:37 +0000
committerTatsuya Kinoshita <tats@debian.org>2014-12-06 11:47:05 +0000
commit982a8feab0928185053d83592ebe7fff28829b90 (patch)
tree993525fc1330f4343bc47548829589e7177302c4
parentIf SCREEN_VARIANT=sixel on GNU screen, exec img2sixel without -P option. (diff)
downloadw3m-982a8feab0928185053d83592ebe7fff28829b90.tar.gz
w3m-982a8feab0928185053d83592ebe7fff28829b90.zip
* Add n_terminal_image argument to put_image_{sixel|osc5379}(). * Use struct winsize to calculate ppc and ppl.
Diffstat (limited to '')
-rw-r--r--image.c7
-rw-r--r--terms.c24
2 files changed, 16 insertions, 15 deletions
diff --git a/image.c b/image.c
index f4fb487..91034ee 100644
--- a/image.c
+++ b/image.c
@@ -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 ;
}
diff --git a/terms.c b/terms.c
index 1545157..7028f3d 100644
--- a/terms.c
+++ b/terms.c
@@ -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;