mirror of
https://github.com/dankamongmen/notcurses.git
synced 2024-11-20 03:25:47 +00:00
Merge branch 'master' of github.com:dankamongmen/notcurses into master
This commit is contained in:
commit
fe7eededa8
@ -8,7 +8,7 @@ notcurses-view - Render images and video to a terminal
|
|||||||
|
|
||||||
# SYNOPSIS
|
# SYNOPSIS
|
||||||
|
|
||||||
**notcurses-view** [**-h|--help**] [**-d delaymult**] [**-l loglevel**] [**-s scalemode**] [**-k**] files
|
**notcurses-view** [**-h**] [**-q**] [**-d delaymult**] [**-l loglevel**] [**-s scalemode**] [**-k**] files
|
||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
@ -30,6 +30,10 @@ or **braille**.
|
|||||||
|
|
||||||
**-k**: Inhibit use of the alternate screen. Necessary if you want the output left on your terminal after the program exits.
|
**-k**: Inhibit use of the alternate screen. Necessary if you want the output left on your terminal after the program exits.
|
||||||
|
|
||||||
|
**-q**: Don't print frame/timing information along the top of the screen.
|
||||||
|
|
||||||
|
**-h**: Print help information, and exit with success.
|
||||||
|
|
||||||
files: Select which files to render, and what order to render them in.
|
files: Select which files to render, and what order to render them in.
|
||||||
|
|
||||||
Default margins are all 0 and default scaling is **stretch**. The full
|
Default margins are all 0 and default scaling is **stretch**. The full
|
||||||
|
@ -17,7 +17,9 @@ static void usage(std::ostream& os, const char* name, int exitcode)
|
|||||||
__attribute__ ((noreturn));
|
__attribute__ ((noreturn));
|
||||||
|
|
||||||
void usage(std::ostream& o, const char* name, int exitcode){
|
void usage(std::ostream& o, const char* name, int exitcode){
|
||||||
o << "usage: " << name << " [ -h ] [ -m margins ] [ -l loglevel ] [ -d mult ] [ -s scaletype ] [ -k ] files" << '\n';
|
o << "usage: " << name << " [ -h ] [ -q ] [ -m margins ] [ -l loglevel ] [ -d mult ] [ -s scaletype ] [ -k ] files" << '\n';
|
||||||
|
o << " -h: display help and exit with success\n";
|
||||||
|
o << " -q: be quiet (no frame/timing information along top of screen)\n";
|
||||||
o << " -k: don't use the alternate screen\n";
|
o << " -k: don't use the alternate screen\n";
|
||||||
o << " -l loglevel: integer between 0 and 9, goes to stderr'\n";
|
o << " -l loglevel: integer between 0 and 9, goes to stderr'\n";
|
||||||
o << " -s scaletype: one of 'none', 'scale', or 'stretch'\n";
|
o << " -s scaletype: one of 'none', 'scale', or 'stretch'\n";
|
||||||
@ -56,7 +58,11 @@ auto perframe(struct ncvisual* ncv, struct ncvisual_options* vopts,
|
|||||||
}
|
}
|
||||||
std::unique_ptr<Plane> stdn(nc.get_stdplane());
|
std::unique_ptr<Plane> stdn(nc.get_stdplane());
|
||||||
int* framecount = static_cast<int*>(vframecount);
|
int* framecount = static_cast<int*>(vframecount);
|
||||||
|
// negative framecount means don't print framecount/timing (quiet mode)
|
||||||
|
if(*framecount >= 0){
|
||||||
++*framecount;
|
++*framecount;
|
||||||
|
}
|
||||||
|
const bool quiet = (*framecount < 0);
|
||||||
stdn->set_fg_rgb(0x80c080);
|
stdn->set_fg_rgb(0x80c080);
|
||||||
struct timespec now;
|
struct timespec now;
|
||||||
clock_gettime(CLOCK_MONOTONIC, &now);
|
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||||
@ -66,9 +72,10 @@ auto perframe(struct ncvisual* ncv, struct ncvisual_options* vopts,
|
|||||||
blitter = ncvisual_default_blitter(notcurses_canutf8(nc), vopts->scaling);
|
blitter = ncvisual_default_blitter(notcurses_canutf8(nc), vopts->scaling);
|
||||||
vopts->blitter = blitter;
|
vopts->blitter = blitter;
|
||||||
}
|
}
|
||||||
// clear top line only
|
if(!quiet){
|
||||||
stdn->printf(0, NCAlign::Left, "frame %06d\u2026 (%s)", *framecount,
|
stdn->printf(0, NCAlign::Left, "frame %06d\u2026 (%s)", *framecount,
|
||||||
notcurses_str_blitter(blitter));
|
notcurses_str_blitter(blitter));
|
||||||
|
}
|
||||||
char* subtitle = ncvisual_subtitle(ncv);
|
char* subtitle = ncvisual_subtitle(ncv);
|
||||||
if(subtitle){
|
if(subtitle){
|
||||||
if(!subtitle_plane){
|
if(!subtitle_plane){
|
||||||
@ -95,8 +102,10 @@ auto perframe(struct ncvisual* ncv, struct ncvisual_options* vopts,
|
|||||||
ns -= m * (60 * NANOSECS_IN_SEC);
|
ns -= m * (60 * NANOSECS_IN_SEC);
|
||||||
const intmax_t s = ns / NANOSECS_IN_SEC;
|
const intmax_t s = ns / NANOSECS_IN_SEC;
|
||||||
ns -= s * NANOSECS_IN_SEC;
|
ns -= s * NANOSECS_IN_SEC;
|
||||||
|
if(!quiet){
|
||||||
stdn->printf(0, NCAlign::Right, "%02jd:%02jd:%02jd.%04jd",
|
stdn->printf(0, NCAlign::Right, "%02jd:%02jd:%02jd.%04jd",
|
||||||
h, m, s, ns / 1000000);
|
h, m, s, ns / 1000000);
|
||||||
|
}
|
||||||
if(!nc.render()){
|
if(!nc.render()){
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -142,17 +151,20 @@ auto perframe(struct ncvisual* ncv, struct ncvisual_options* vopts,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// can exit() directly. returns index in argv of first non-option param.
|
// can exit() directly. returns index in argv of first non-option param.
|
||||||
auto handle_opts(int argc, char** argv, notcurses_options& opts,
|
auto handle_opts(int argc, char** argv, notcurses_options& opts, bool* quiet,
|
||||||
float* timescale, ncscale_e* scalemode, ncblitter_e* blitter)
|
float* timescale, ncscale_e* scalemode, ncblitter_e* blitter)
|
||||||
-> int {
|
-> int {
|
||||||
*timescale = 1.0;
|
*timescale = 1.0;
|
||||||
*scalemode = NCSCALE_STRETCH;
|
*scalemode = NCSCALE_STRETCH;
|
||||||
int c;
|
int c;
|
||||||
while((c = getopt(argc, argv, "hl:d:s:b:m:k")) != -1){
|
while((c = getopt(argc, argv, "hql:d:s:b:m:k")) != -1){
|
||||||
switch(c){
|
switch(c){
|
||||||
case 'h':
|
case 'h':
|
||||||
usage(std::cout, argv[0], EXIT_SUCCESS);
|
usage(std::cout, argv[0], EXIT_SUCCESS);
|
||||||
break;
|
break;
|
||||||
|
case 'q':
|
||||||
|
*quiet = true;
|
||||||
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
if(notcurses_lex_scalemode(optarg, scalemode)){
|
if(notcurses_lex_scalemode(optarg, scalemode)){
|
||||||
std::cerr << "Scaling type should be one of stretch, scale, none (got "
|
std::cerr << "Scaling type should be one of stretch, scale, none (got "
|
||||||
@ -226,7 +238,8 @@ auto main(int argc, char** argv) -> int {
|
|||||||
ncscale_e scalemode;
|
ncscale_e scalemode;
|
||||||
notcurses_options nopts{};
|
notcurses_options nopts{};
|
||||||
ncblitter_e blitter = NCBLIT_DEFAULT;
|
ncblitter_e blitter = NCBLIT_DEFAULT;
|
||||||
auto nonopt = handle_opts(argc, argv, nopts, ×cale, &scalemode, &blitter);
|
bool quiet = false;
|
||||||
|
auto nonopt = handle_opts(argc, argv, nopts, &quiet, ×cale, &scalemode, &blitter);
|
||||||
nopts.flags |= NCOPTION_INHIBIT_SETLOCALE;
|
nopts.flags |= NCOPTION_INHIBIT_SETLOCALE;
|
||||||
NotCurses nc{nopts};
|
NotCurses nc{nopts};
|
||||||
if(!nc.can_open_images()){
|
if(!nc.can_open_images()){
|
||||||
@ -239,7 +252,7 @@ auto main(int argc, char** argv) -> int {
|
|||||||
{
|
{
|
||||||
std::unique_ptr<Plane> stdn(nc.get_stdplane(&dimy, &dimx));
|
std::unique_ptr<Plane> stdn(nc.get_stdplane(&dimy, &dimx));
|
||||||
for(auto i = nonopt ; i < argc ; ++i){
|
for(auto i = nonopt ; i < argc ; ++i){
|
||||||
int frames = 0;
|
int frames = quiet ? -1 : 0;
|
||||||
std::unique_ptr<Visual> ncv;
|
std::unique_ptr<Visual> ncv;
|
||||||
try{
|
try{
|
||||||
ncv = std::make_unique<Visual>(argv[i]);
|
ncv = std::make_unique<Visual>(argv[i]);
|
||||||
|
Loading…
Reference in New Issue
Block a user