X-Git-Url: https://git.distorted.org.uk/~mdw/tig/blobdiff_plain/ef5404a435209243e0e65b0bdbb1c32f1c66b43a..cbbf2d1be57f0bbd9eda37f3d5ab7e30d3ae179b:/tig.c diff --git a/tig.c b/tig.c index cda8a71..f110dae 100644 --- a/tig.c +++ b/tig.c @@ -12,7 +12,7 @@ */ #ifndef VERSION -#define VERSION "tig-0.3" +#define VERSION "tig-0.4.git" #endif #ifndef DEBUG @@ -80,7 +80,7 @@ static size_t utf8_length(const char *string, size_t max_width, int *coloffset, "git log --cc --stat -n100 %s" #define TIG_MAIN_CMD \ - "git log --topo-order --stat --pretty=raw %s" + "git log --topo-order --pretty=raw %s" /* XXX: Needs to be defined to the empty string. */ #define TIG_HELP_CMD "" @@ -770,6 +770,7 @@ static struct key key_table[] = { { "Down", KEY_DOWN }, { "Insert", KEY_IC }, { "Delete", KEY_DC }, + { "Hash", '#' }, { "Home", KEY_HOME }, { "End", KEY_END }, { "PageUp", KEY_PPAGE }, @@ -946,8 +947,22 @@ option_set_command(int argc, char *argv[]) } if (!strcmp(argv[0], "commit-encoding")) { - string_copy(opt_encoding, argv[2]); - return OK; + char *arg = argv[2]; + int delimiter = *arg; + int i; + + switch (delimiter) { + case '"': + case '\'': + for (arg++, i = 0; arg[i]; i++) + if (arg[i] == delimiter) { + arg[i] = 0; + break; + } + default: + string_copy(opt_encoding, arg); + return OK; + } } config_msg = "Unknown variable name"; @@ -1032,7 +1047,7 @@ read_option(char *opt, int optlen, char *value, int valuelen) /* Check for comment markers, since read_properties() will * only ensure opt and value are split at first " \t". */ - optlen = strcspn(opt, "#;"); + optlen = strcspn(opt, "#"); if (optlen == 0) return OK; @@ -1042,7 +1057,7 @@ read_option(char *opt, int optlen, char *value, int valuelen) } else { /* Look for comment endings in the value. */ - int len = strcspn(value, "#;"); + int len = strcspn(value, "#"); if (len < valuelen) { valuelen = len; @@ -2271,10 +2286,22 @@ main_read(struct view *view, char *line) break; if (end) { + char *email = end + 1; + for (; end > ident && isspace(end[-1]); end--) ; + + if (end == ident && *email) { + ident = email; + end = strchr(ident, '>'); + for (; end > ident && isspace(end[-1]); end--) ; + } *end = 0; } + /* End is NULL or ident meaning there's no author. */ + if (end <= ident) + ident = "Unknown"; + string_copy(commit->author, ident); /* Parse epoch and timezone */ @@ -2568,6 +2595,8 @@ init_display(void) /* Leave stdin and stdout alone when acting as a pager. */ FILE *io = fopen("/dev/tty", "r+"); + if (!io) + die("Failed to open /dev/tty"); cursed = !!newterm(NULL, io, io); }