From 2c25d99ad036c9ad473167b4f2f8e7dea9cd946e Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Wed, 17 Jul 2013 01:00:53 +0200 Subject: Add help command This adds a "help" command to the list of available command mode commands. You can currently type "help", followed by a topic like "add". calcurse will then try to open a file named "add.txt" in the documentation directory and display it in an external pager. Signed-off-by: Lukas Fleischer --- src/Makefile.am | 1 + src/calcurse.c | 31 ++++++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index 44d1ae8..3559a25 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,6 +2,7 @@ AUTOMAKE_OPTIONS = foreign bin_PROGRAMS = calcurse +AM_CPPFLAGS = -DDOCDIR=\"@docdir@\" AM_CFLAGS = -std=c99 -pedantic -D_POSIX_C_SOURCE=200809L calcurse_SOURCES = \ diff --git a/src/calcurse.c b/src/calcurse.c index 460f4c4..d20e9d0 100644 --- a/src/calcurse.c +++ b/src/calcurse.c @@ -491,12 +491,41 @@ static inline void key_generic_quit(void) static inline void key_generic_cmd(void) { char cmd[BUFSIZ] = ""; + char *cmd_name; status_mesg(_("Command:"), ""); if (getstring(win[STA].p, cmd, BUFSIZ, 0, 1) != GETSTRING_VALID) return; - wins_update(FLAG_STA); + cmd_name = strtok(cmd, " "); + + if (!strcmp(cmd_name, "help")) { + char *topic = strtok(NULL, " "); + char path[BUFSIZ]; + + snprintf(path, BUFSIZ, DOCDIR "/%s.txt", topic); + if (io_file_exist(path)) { + wins_launch_external(path, conf.pager); + } else { + char error_msg[BUFSIZ]; + + snprintf(error_msg, BUFSIZ, + _("Help topic does not exist: %s"), + topic); + error_msg[BUFSIZ - 1] = '\0'; + + warnbox(error_msg); + } + } else { + char error_msg[BUFSIZ]; + + snprintf(error_msg, BUFSIZ, _("No such command: %s"), cmd); + error_msg[BUFSIZ - 1] = '\0'; + + warnbox(error_msg); + } + + wins_update(FLAG_ALL); } /* -- cgit v1.2.3