esv: detect passage line length based on terminal width
Implements: https://todo.sr.ht/~jeremy/esv/2
This commit is contained in:
parent
d68b83b722
commit
982273b9d7
1 changed files with 26 additions and 6 deletions
32
esv.d
32
esv.d
|
@ -44,6 +44,7 @@ string CFlag; /* config */
|
||||||
bool fFlag, FFlag; /* footnotes */
|
bool fFlag, FFlag; /* footnotes */
|
||||||
bool hFlag, HFlag; /* headings */
|
bool hFlag, HFlag; /* headings */
|
||||||
int lFlag; /* line length */
|
int lFlag; /* line length */
|
||||||
|
bool lFlagSpecified;
|
||||||
bool nFlag, NFlag; /* verse numbers */
|
bool nFlag, NFlag; /* verse numbers */
|
||||||
bool rFlag, RFlag; /* passage references */
|
bool rFlag, RFlag; /* passage references */
|
||||||
string sFlag; /* search passages */
|
string sFlag; /* search passages */
|
||||||
|
@ -70,7 +71,7 @@ main(string[] args)
|
||||||
import core.sys.openbsd.unistd : pledge;
|
import core.sys.openbsd.unistd : pledge;
|
||||||
import std.string : toStringz;
|
import std.string : toStringz;
|
||||||
|
|
||||||
promises = toStringz("stdio rpath wpath cpath inet dns proc exec prot_exec");
|
promises = toStringz("stdio rpath wpath cpath inet dns tty proc exec prot_exec");
|
||||||
pledge(promises, null);
|
pledge(promises, null);
|
||||||
}();
|
}();
|
||||||
|
|
||||||
|
@ -87,7 +88,7 @@ main(string[] args)
|
||||||
"C", &CFlag,
|
"C", &CFlag,
|
||||||
"F", &FFlag, "f", &fFlag,
|
"F", &FFlag, "f", &fFlag,
|
||||||
"H", &HFlag, "h", &hFlag,
|
"H", &HFlag, "h", &hFlag,
|
||||||
"l", &lFlag,
|
"l", &onLineLength,
|
||||||
"N", &NFlag, "n", &nFlag,
|
"N", &NFlag, "n", &nFlag,
|
||||||
"R", &RFlag, "r", &rFlag,
|
"R", &RFlag, "r", &rFlag,
|
||||||
"s", &sFlag,
|
"s", &sFlag,
|
||||||
|
@ -100,8 +101,6 @@ main(string[] args)
|
||||||
"missing argument for option " ~ e.extractOpt());
|
"missing argument for option " ~ e.extractOpt());
|
||||||
|
|
||||||
die(e.msg); /* catch-all */
|
die(e.msg); /* catch-all */
|
||||||
} catch (ConvException e) {
|
|
||||||
die("illegal argument to -l option -- must be integer");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VFlag) {
|
if (VFlag) {
|
||||||
|
@ -225,7 +224,8 @@ key = %s
|
||||||
/* Get line-length ([passage]) */
|
/* Get line-length ([passage]) */
|
||||||
try
|
try
|
||||||
esv.opts.i["line-length"] =
|
esv.opts.i["line-length"] =
|
||||||
ini["passage"].keyAs!int("line-length", 0);
|
lFlagSpecified ? lFlag :
|
||||||
|
ini["passage"].keyAs!int("line-length", terminalColumns());
|
||||||
catch (INITypeException e)
|
catch (INITypeException e)
|
||||||
die(configPath ~ ": " ~ e.msg);
|
die(configPath ~ ": " ~ e.msg);
|
||||||
|
|
||||||
|
@ -237,7 +237,6 @@ key = %s
|
||||||
if (HFlag) esv.opts.b["include-headings"] = false;
|
if (HFlag) esv.opts.b["include-headings"] = false;
|
||||||
if (NFlag) esv.opts.b["include-verse-numbers"] = false;
|
if (NFlag) esv.opts.b["include-verse-numbers"] = false;
|
||||||
if (RFlag) esv.opts.b["include-passage-references"] = false;
|
if (RFlag) esv.opts.b["include-passage-references"] = false;
|
||||||
if (lFlag != 0) esv.opts.i["line-length"] = lFlag;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
writeln(esv.getPassage(args[1].parseBook(), args[2]));
|
writeln(esv.getPassage(args[1].parseBook(), args[2]));
|
||||||
|
@ -263,6 +262,17 @@ die(string mesg) @trusted
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ushort
|
||||||
|
terminalColumns() @trusted
|
||||||
|
{
|
||||||
|
import core.sys.posix.sys.ioctl;
|
||||||
|
|
||||||
|
winsize w;
|
||||||
|
|
||||||
|
ioctl(1, TIOCGWINSZ, &w);
|
||||||
|
return w.ws_col > 72 ? 72 : w.ws_col;
|
||||||
|
}
|
||||||
|
|
||||||
private void
|
private void
|
||||||
enforceDie(A...)(bool cond, string fmt, A a)
|
enforceDie(A...)(bool cond, string fmt, A a)
|
||||||
{
|
{
|
||||||
|
@ -280,6 +290,16 @@ extractOpt(in GetOptException e)
|
||||||
return e.msg.matchFirst("-.")[0];
|
return e.msg.matchFirst("-.")[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void
|
||||||
|
onLineLength(string flag, string value)
|
||||||
|
{
|
||||||
|
lFlagSpecified = true;
|
||||||
|
try
|
||||||
|
lFlag = value.to!int();
|
||||||
|
catch (ConvException e)
|
||||||
|
die("illegal argument to -l option -- must be a positive integer");
|
||||||
|
}
|
||||||
|
|
||||||
private string
|
private string
|
||||||
parseBook(in string book)
|
parseBook(in string book)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue