[view] Write ansi output to --output-file
Was writing to stdout all this time!
This commit is contained in:
parent
3a319b59bd
commit
0004ec13a6
|
@ -29,6 +29,8 @@
|
||||||
|
|
||||||
#include "hb.hh"
|
#include "hb.hh"
|
||||||
|
|
||||||
|
#include <cairo.h>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
@ -377,9 +379,12 @@ static inline void
|
||||||
ansi_print_image_rgb24 (const uint32_t *data,
|
ansi_print_image_rgb24 (const uint32_t *data,
|
||||||
unsigned int width,
|
unsigned int width,
|
||||||
unsigned int height,
|
unsigned int height,
|
||||||
unsigned int stride)
|
unsigned int stride,
|
||||||
|
cairo_write_func_t write_func,
|
||||||
|
void *closure)
|
||||||
{
|
{
|
||||||
image_t image (width, height, data, stride);
|
image_t image (width, height, data, stride);
|
||||||
|
char buf[16];
|
||||||
|
|
||||||
unsigned int rows = (height + CELL_H - 1) / CELL_H;
|
unsigned int rows = (height + CELL_H - 1) / CELL_H;
|
||||||
unsigned int cols = (width + CELL_W - 1) / CELL_W;
|
unsigned int cols = (width + CELL_W - 1) / CELL_W;
|
||||||
|
@ -392,31 +397,35 @@ ansi_print_image_rgb24 (const uint32_t *data,
|
||||||
bi.set (cell);
|
bi.set (cell);
|
||||||
if (bi.unicolor) {
|
if (bi.unicolor) {
|
||||||
if (last_bg != bi.bg) {
|
if (last_bg != bi.bg) {
|
||||||
printf ("\e[%dm", 40 + bi.bg);
|
snprintf (buf, sizeof (buf), "\e[%dm", 40 + bi.bg);
|
||||||
|
write_func (closure, (unsigned char *) buf, strlen (buf));
|
||||||
last_bg = bi.bg;
|
last_bg = bi.bg;
|
||||||
}
|
}
|
||||||
printf (" ");
|
write_func (closure, (unsigned char *) " ", 1);
|
||||||
} else {
|
} else {
|
||||||
/* Figure out the closest character to the biimage */
|
/* Figure out the closest character to the biimage */
|
||||||
bool inverse = false;
|
bool inverse = false;
|
||||||
const char *c = block_best (bi, &inverse);
|
const char *c = block_best (bi, &inverse);
|
||||||
if (inverse) {
|
if (inverse) {
|
||||||
if (last_bg != bi.fg || last_fg != bi.bg) {
|
if (last_bg != bi.fg || last_fg != bi.bg) {
|
||||||
printf ("\e[%d;%dm", 30 + bi.bg, 40 + bi.fg);
|
snprintf (buf, sizeof (buf), "\e[%d;%dm", 30 + bi.bg, 40 + bi.fg);
|
||||||
|
write_func (closure, (unsigned char *) buf, strlen (buf));
|
||||||
last_bg = bi.fg;
|
last_bg = bi.fg;
|
||||||
last_fg = bi.bg;
|
last_fg = bi.bg;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (last_bg != bi.bg || last_fg != bi.fg) {
|
if (last_bg != bi.bg || last_fg != bi.fg) {
|
||||||
printf ("\e[%d;%dm", 40 + bi.bg, 30 + bi.fg);
|
snprintf (buf, sizeof (buf), "\e[%d;%dm", 40 + bi.bg, 30 + bi.fg);
|
||||||
|
write_func (closure, (unsigned char *) buf, strlen (buf));
|
||||||
last_bg = bi.bg;
|
last_bg = bi.bg;
|
||||||
last_fg = bi.fg;
|
last_fg = bi.fg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf ("%s", c);
|
write_func (closure, (unsigned char *) c, strlen (c));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf ("\e[0m\n"); /* Reset */
|
snprintf (buf, sizeof (buf), "\e[0m\n"); /* Reset */
|
||||||
|
write_func (closure, (unsigned char *) buf, strlen (buf));
|
||||||
last_bg = last_fg = -1;
|
last_bg = last_fg = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,9 @@
|
||||||
# define CELL_H (2 * CELL_W)
|
# define CELL_H (2 * CELL_W)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
chafa_print_image_rgb24 (const void *data, int width, int height, int stride, int level)
|
chafa_print_image_rgb24 (const void *data, int width, int height, int stride, int level,
|
||||||
|
cairo_write_func_t write_func,
|
||||||
|
void *closure)
|
||||||
{
|
{
|
||||||
ChafaTermInfo *term_info;
|
ChafaTermInfo *term_info;
|
||||||
ChafaSymbolMap *symbol_map;
|
ChafaSymbolMap *symbol_map;
|
||||||
|
@ -114,7 +116,7 @@ chafa_print_image_rgb24 (const void *data, int width, int height, int stride, in
|
||||||
|
|
||||||
/* Print the string */
|
/* Print the string */
|
||||||
|
|
||||||
fwrite (gs->str, sizeof (char), gs->len, stdout);
|
write_func (closure, (const unsigned char *) gs->str, gs->len);
|
||||||
|
|
||||||
if (pixel_mode != CHAFA_PIXEL_MODE_SIXELS)
|
if (pixel_mode != CHAFA_PIXEL_MODE_SIXELS)
|
||||||
fputc ('\n', stdout);
|
fputc ('\n', stdout);
|
||||||
|
@ -209,10 +211,12 @@ helper_cairo_surface_write_to_ansi_stream (cairo_surface_t *surface,
|
||||||
if (env)
|
if (env)
|
||||||
chafa_level = atoi (env);
|
chafa_level = atoi (env);
|
||||||
if (chafa_level)
|
if (chafa_level)
|
||||||
chafa_print_image_rgb24 (data, width, height, stride, chafa_level);
|
chafa_print_image_rgb24 (data, width, height, stride, chafa_level,
|
||||||
|
write_func, closure);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
ansi_print_image_rgb24 (data, width, height, stride / 4);
|
ansi_print_image_rgb24 (data, width, height, stride / 4,
|
||||||
|
write_func, closure);
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_surface_destroy (surface);
|
cairo_surface_destroy (surface);
|
||||||
|
|
Loading…
Reference in New Issue