ialign widechars, optimize space a bit for 80x25, fix mailto: link - stagit-gopher - A git gopher frontend. (mirror) Err bitreich.org 70 hgit clone git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/ URL:git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/ bitreich.org 70 1Log /scm/stagit-gopher/log.gph bitreich.org 70 1Files /scm/stagit-gopher/files.gph bitreich.org 70 1Refs /scm/stagit-gopher/refs.gph bitreich.org 70 1Tags /scm/stagit-gopher/tag bitreich.org 70 1README /scm/stagit-gopher/file/README.gph bitreich.org 70 1LICENSE /scm/stagit-gopher/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit e13c9e5eec3eca1670477033fa276e9b48e78f58 /scm/stagit-gopher/commit/e13c9e5eec3eca1670477033fa276e9b48e78f58.gph bitreich.org 70 1parent e95a7d9de8805d9264b1d7cdcf43f15d2ec6b49c /scm/stagit-gopher/commit/e95a7d9de8805d9264b1d7cdcf43f15d2ec6b49c.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Wed, 14 Jun 2017 20:33:16 +0200 Err bitreich.org 70 i Err bitreich.org 70 ialign widechars, optimize space a bit for 80x25, fix mailto: link Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M TODO | 3 ++- Err bitreich.org 70 i M stagit-index.c | 40 +++++++++++++++++++++++++++---- Err bitreich.org 70 i M stagit.c | 56 +++++++++++++++++++++++-------- Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 79 insertions(+), 20 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/TODO b/TODO /scm/stagit-gopher/file/TODO.gph bitreich.org 70 i@@ -1,6 +1,7 @@ Err bitreich.org 70 i gopher: Err bitreich.org 70 i Err bitreich.org 70 i-- align UTF-8 characters (and wide?). Err bitreich.org 70 i+- cleanup code: escaping. Err bitreich.org 70 i+? printutf8pad: print '...' when truncated? Err bitreich.org 70 i - update documentation: Err bitreich.org 70 i - document new gopher-specific options. Err bitreich.org 70 i Err bitreich.org 70 1diff --git a/stagit-index.c b/stagit-index.c /scm/stagit-gopher/file/stagit-index.c.gph bitreich.org 70 i@@ -8,6 +8,7 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i+#include Err bitreich.org 70 i Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i@@ -25,6 +26,31 @@ static char owner[255]; Err bitreich.org 70 i #define pledge(p1,p2) 0 Err bitreich.org 70 i #endif Err bitreich.org 70 i Err bitreich.org 70 i+#define ISUTF8(c) (((c) & 0xc0) != 0x80) Err bitreich.org 70 i+ Err bitreich.org 70 i+/* print `len' columns of characters. If string is shorter pad the rest Err bitreich.org 70 i+ * with characters `pad`. */ Err bitreich.org 70 i+void Err bitreich.org 70 i+printutf8pad(FILE *fp, const char *s, size_t len, int pad) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ wchar_t w; Err bitreich.org 70 i+ size_t n = 0, i; Err bitreich.org 70 i+ int r; Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (i = 0; *s && n < len; i++, s++) { Err bitreich.org 70 i+ if (ISUTF8(*s)) { Err bitreich.org 70 i+ if ((r = mbtowc(&w, s, 4)) == -1) Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ if ((r = wcwidth(w)) == -1) Err bitreich.org 70 i+ r = 1; Err bitreich.org 70 i+ n += (size_t)r; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ putc(*s, fp); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ for (; n < len; n++) Err bitreich.org 70 i+ putc(pad, fp); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i void Err bitreich.org 70 i trim(char *buf, size_t bufsiz, const char *src) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -87,9 +113,9 @@ writeheader(FILE *fp) Err bitreich.org 70 i trim(buf, sizeof(buf), description); Err bitreich.org 70 i if (buf[0] == 't') Err bitreich.org 70 i fputc('t', fp); Err bitreich.org 70 i- fprintf(fp, "%s\n", buf); Err bitreich.org 70 i+ fprintf(fp, "%s\n\n", buf); Err bitreich.org 70 i Err bitreich.org 70 i- fprintf(fp, "%-25.25s ", "Name"); Err bitreich.org 70 i+ fprintf(fp, "%-20.20s ", "Name"); Err bitreich.org 70 i fprintf(fp, "%-50.50s ", "Description"); Err bitreich.org 70 i fprintf(fp, "%-25.25s ", "Owner"); Err bitreich.org 70 i fprintf(fp, "%-16.16s\n", "Last commit"); Err bitreich.org 70 i@@ -131,12 +157,16 @@ writelog(FILE *fp) Err bitreich.org 70 i if (!strcmp(p, ".git")) Err bitreich.org 70 i *p = '\0'; Err bitreich.org 70 i Err bitreich.org 70 i+ fputs("[1|", fp); Err bitreich.org 70 i trim(buf, sizeof(buf), stripped_name); Err bitreich.org 70 i- fprintf(fp, "[1|%-25.25s ", buf); Err bitreich.org 70 i+ printutf8pad(fp, buf, 20, ' '); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i trim(buf, sizeof(buf), description); Err bitreich.org 70 i- fprintf(fp, "%-50.50s ", buf); Err bitreich.org 70 i+ printutf8pad(fp, buf, 50, ' '); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i trim(buf, sizeof(buf), owner); Err bitreich.org 70 i- fprintf(fp, "%-25.25s ", buf); Err bitreich.org 70 i+ printutf8pad(fp, buf, 25, ' '); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i if (author) Err bitreich.org 70 i printtimeshort(fp, &(author->when)); Err bitreich.org 70 i trim(buf, sizeof(buf), stripped_name); Err bitreich.org 70 1diff --git a/stagit.c b/stagit.c /scm/stagit-gopher/file/stagit.c.gph bitreich.org 70 i@@ -9,6 +9,7 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i+#include Err bitreich.org 70 i Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i@@ -67,6 +68,31 @@ static const char *cachefile; Err bitreich.org 70 i #define pledge(p1,p2) 0 Err bitreich.org 70 i #endif Err bitreich.org 70 i Err bitreich.org 70 i+#define ISUTF8(c) (((c) & 0xc0) != 0x80) Err bitreich.org 70 i+ Err bitreich.org 70 i+/* print `len' columns of characters. If string is shorter pad the rest Err bitreich.org 70 i+ * with characters `pad`. */ Err bitreich.org 70 i+void Err bitreich.org 70 i+printutf8pad(FILE *fp, const char *s, size_t len, int pad) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ wchar_t w; Err bitreich.org 70 i+ size_t n = 0, i; Err bitreich.org 70 i+ int r; Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (i = 0; *s && n < len; i++, s++) { Err bitreich.org 70 i+ if (ISUTF8(*s)) { Err bitreich.org 70 i+ if ((r = mbtowc(&w, s, 4)) == -1) Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ if ((r = wcwidth(w)) == -1) Err bitreich.org 70 i+ r = 1; Err bitreich.org 70 i+ n += (size_t)r; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ putc(*s, fp); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ for (; n < len; n++) Err bitreich.org 70 i+ putc(pad, fp); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i void Err bitreich.org 70 i joinpath(char *buf, size_t bufsiz, const char *path, const char *path2) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -420,7 +446,7 @@ writeheader(FILE *fp, const char *title) Err bitreich.org 70 i fprintf(fp, "[1|README|%sfile/README.gph|server|port]\n", relpath); Err bitreich.org 70 i if (haslicense) Err bitreich.org 70 i fprintf(fp, "[1|LICENSE|%sfile/LICENSE.gph|server|port]\n", relpath); Err bitreich.org 70 i- fputs("===\n", fp); Err bitreich.org 70 i+ fputs("---\n", fp); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i@@ -432,7 +458,7 @@ int Err bitreich.org 70 i writeblobgph(FILE *fp, const git_blob *blob) Err bitreich.org 70 i { Err bitreich.org 70 i size_t n = 0, i, j, prev; Err bitreich.org 70 i- const char *nfmt = "%8d "; Err bitreich.org 70 i+ const char *nfmt = "%6d "; Err bitreich.org 70 i const char *s = git_blob_rawcontent(blob); Err bitreich.org 70 i git_off_t len = git_blob_rawsize(blob); Err bitreich.org 70 i Err bitreich.org 70 i@@ -479,12 +505,11 @@ printcommit(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i ci->parentoid, relpath, ci->parentoid); Err bitreich.org 70 i Err bitreich.org 70 i if (ci->author) { Err bitreich.org 70 i- /* TODO: fix author email link to redirect as mailto: */ Err bitreich.org 70 i- fputs("[1|Author: ", fp); Err bitreich.org 70 i+ fputs("[h|Author: ", fp); Err bitreich.org 70 i gphlink(fp, ci->author->name, strlen(ci->author->name)); Err bitreich.org 70 i fputs(" <", fp); Err bitreich.org 70 i gphlink(fp, ci->author->email, strlen(ci->author->email)); Err bitreich.org 70 i- fputs(">|mailto:", fp); Err bitreich.org 70 i+ fputs(">|URL:mailto:", fp); Err bitreich.org 70 i gphlink(fp, ci->author->email, strlen(ci->author->email)); Err bitreich.org 70 i fputs("|server|port]\n", fp); Err bitreich.org 70 i fputs("Date: ", fp); Err bitreich.org 70 i@@ -556,7 +581,7 @@ printshowfile(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i ci->addcount, ci->addcount == 1 ? "" : "s", Err bitreich.org 70 i ci->delcount, ci->delcount == 1 ? "" : "s"); Err bitreich.org 70 i Err bitreich.org 70 i- fputs("===\n", fp); Err bitreich.org 70 i+ fputs("---\n", fp); Err bitreich.org 70 i Err bitreich.org 70 i for (i = 0; i < ci->ndeltas; i++) { Err bitreich.org 70 i patch = ci->deltas[i]->patch; Err bitreich.org 70 i@@ -605,12 +630,12 @@ writelogline(FILE *fp, struct commitinfo *ci) Err bitreich.org 70 i fputs(" ", fp); Err bitreich.org 70 i if (ci->summary) { Err bitreich.org 70 i trim(buf, sizeof(buf), ci->summary); Err bitreich.org 70 i- fprintf(fp, "%-50.50s", buf); Err bitreich.org 70 i+ printutf8pad(fp, buf, 50, ' '); Err bitreich.org 70 i } Err bitreich.org 70 i fputs(" ", fp); Err bitreich.org 70 i if (ci->author) { Err bitreich.org 70 i trim(buf, sizeof(buf), ci->author->name); Err bitreich.org 70 i- fprintf(fp, "%-25.25s", buf); Err bitreich.org 70 i+ printutf8pad(fp, buf, 25, ' '); Err bitreich.org 70 i } Err bitreich.org 70 i fprintf(fp, " %5zu", ci->filecount); Err bitreich.org 70 i fprintf(fp, " %5zu+", ci->addcount); Err bitreich.org 70 i@@ -766,7 +791,7 @@ writeblob(git_object *obj, const char *fpath, const char *filename, git_off_t fi Err bitreich.org 70 i writeheader(fp, filename); Err bitreich.org 70 i gphtext(fp, filename, strlen(filename)); Err bitreich.org 70 i fprintf(fp, " (%juB)\n", (uintmax_t)filesize); Err bitreich.org 70 i- fputs("===\n", fp); Err bitreich.org 70 i+ fputs("---\n", fp); Err bitreich.org 70 i Err bitreich.org 70 i if (git_blob_is_binary((git_blob *)obj)) { Err bitreich.org 70 i fputs("Binary file.\n", fp); Err bitreich.org 70 i@@ -872,7 +897,8 @@ writefilestree(FILE *fp, git_tree *tree, const char *path) Err bitreich.org 70 i fputs(filemode(git_tree_entry_filemode(entry)), fp); Err bitreich.org 70 i fputs(" ", fp); Err bitreich.org 70 i trim(buf, sizeof(buf), entrypath); Err bitreich.org 70 i- fprintf(fp, "%-50.50s ", buf); Err bitreich.org 70 i+ printutf8pad(fp, buf, 50, ' '); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i if (lc > 0) Err bitreich.org 70 i fprintf(fp, "%7dL", lc); Err bitreich.org 70 i else Err bitreich.org 70 i@@ -882,7 +908,8 @@ writefilestree(FILE *fp, git_tree *tree, const char *path) Err bitreich.org 70 i git_object_free(obj); Err bitreich.org 70 i } else if (!git_submodule_lookup(&module, repo, entryname)) { Err bitreich.org 70 i fputs("[1|m--------- ", fp); Err bitreich.org 70 i- gphlink(fp, entrypath, strlen(entrypath)); Err bitreich.org 70 i+ trim(buf, sizeof(buf), entrypath); Err bitreich.org 70 i+ printutf8pad(fp, buf, 50, ' '); Err bitreich.org 70 i fprintf(fp, "|%sfile/.gitmodules.gph|server|port]\n", relpath); Err bitreich.org 70 i /* NOTE: linecount omitted */ Err bitreich.org 70 i git_submodule_free(module); Err bitreich.org 70 i@@ -983,7 +1010,7 @@ writerefs(FILE *fp) Err bitreich.org 70 i /* print header if it has an entry (first). */ Err bitreich.org 70 i if (++count == 1) { Err bitreich.org 70 i fprintf(fp, "%s\n", titles[j]); Err bitreich.org 70 i- fprintf(fp, " %-25.25s", "Name"); Err bitreich.org 70 i+ fprintf(fp, " %-20.20s", "Name"); Err bitreich.org 70 i fprintf(fp, " %-16.16s", "Last commit date"); Err bitreich.org 70 i fprintf(fp, " %-25.25s\n", "Author"); Err bitreich.org 70 i } Err bitreich.org 70 i@@ -992,13 +1019,14 @@ writerefs(FILE *fp) Err bitreich.org 70 i Err bitreich.org 70 i fputs(" ", fp); Err bitreich.org 70 i trim(buf, sizeof(buf), name); Err bitreich.org 70 i- fprintf(fp, "%-25.25s ", name); Err bitreich.org 70 i+ printutf8pad(fp, buf, 20, ' '); Err bitreich.org 70 i+ fputs(" ", fp); Err bitreich.org 70 i if (ci->author) Err bitreich.org 70 i printtimeshort(fp, &(ci->author->when)); Err bitreich.org 70 i fputs(" ", fp); Err bitreich.org 70 i if (ci->author) { Err bitreich.org 70 i trim(buf, sizeof(buf), ci->author->name); Err bitreich.org 70 i- fprintf(fp, "%-25.25s\n", buf); Err bitreich.org 70 i+ printutf8pad(fp, buf, 25, ' '); Err bitreich.org 70 i } Err bitreich.org 70 i fputs("\n", fp); Err bitreich.org 70 i Err bitreich.org 70 .