summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAriadna Vigo <arivigodr@gmail.com>2020-12-18 00:41:28 +0100
committerAriadna Vigo <arivigodr@gmail.com>2020-12-18 00:41:28 +0100
commit82f271b348d6a7b647d75f7d8a06c10e3d1392c4 (patch)
tree2c0e6cbfd91a5dc549e2065dd0b930485c6b1a99
parent70000500ad92afcd29e21017c4cfb9ccfd034f77 (diff)
Implemented new edit mode
-rw-r--r--cras.c39
1 files changed, 37 insertions, 2 deletions
diff --git a/cras.c b/cras.c
index 9874829..9098604 100644
--- a/cras.c
+++ b/cras.c
@@ -14,7 +14,7 @@ static char *argv0; /* Required here by arg.h */
#include "tasklst.h"
#define TASK_NONEXIST_MSG "Task #%d does not exist."
-#define NUMARG_SIZE 5 /* 4 digits + '\0' for the numerical arg of -d/-t/-T */
+#define NUMARG_SIZE 5 /* 4 digits + '\0' for arg of -d/-e/-t/-T */
enum {
SHORT_OUTPUT,
@@ -27,6 +27,7 @@ enum {
INVAL_MODE,
NEW_MODE,
OUT_MODE,
+ EDIT_MODE,
DLT_MODE,
MARK_MODE
};
@@ -44,6 +45,7 @@ static int parse_tasknum(const char *id);
static void usage(void);
static void input_mode(const char *crasfile, int append);
static void output_mode(const char *crasfile, int mode);
+static void edit_mode(const char *crasfile, const char *id);
static void delete_mode(const char *crasfile, const char *id);
static void mark_list_mode(const char *crasfile, const char *id, int value);
static void inval_mode(const char *crasfile);
@@ -216,7 +218,7 @@ parse_tasknum(const char *id)
static void
usage(void)
{
- die("usage: cras [-ainov] [-dtT num] file");
+ die("usage: cras [-ainov] [-detT num] file");
}
static void
@@ -263,6 +265,30 @@ output_mode(const char *crasfile, int mode)
task_lst_cleanup(&list);
}
+static void
+edit_mode(const char *crasfile, const char *id)
+{
+ int tasknum;
+ TaskLst list;
+ char newstr[TASK_LST_DESC_MAX_SIZE];
+
+ tasknum = parse_tasknum(id);
+
+ task_lst_init(&list);
+ read_crasfile(&list, crasfile);
+
+ fgets(newstr, TASK_LST_DESC_MAX_SIZE, stdin);
+ if (newstr[strlen(newstr) - 1] == '\n')
+ newstr[strlen(newstr) - 1] = '\0';
+
+ if (task_lst_edit_task(&list, tasknum - 1, newstr) < 0) {
+ task_lst_cleanup(&list);
+ die(TASK_NONEXIST_MSG, tasknum);
+ }
+ write_crasfile(crasfile, list);
+
+ task_lst_cleanup(&list);
+}
static void
delete_mode(const char *crasfile, const char *id)
@@ -363,6 +389,12 @@ main(int argc, char *argv[])
mode = DLT_MODE;
strncpy(numarg, EARGF(usage()), NUMARG_SIZE);
break;
+ case 'e':
+ if (mode != DEF_MODE)
+ usage();
+ mode = EDIT_MODE;
+ strncpy(numarg, EARGF(usage()), NUMARG_SIZE);
+ break;
case 't':
if (mode != DEF_MODE)
usage();
@@ -397,6 +429,9 @@ main(int argc, char *argv[])
case OUT_MODE:
output_mode(argv[0], SHORT_OUTPUT);
return 0;
+ case EDIT_MODE:
+ edit_mode(argv[0], numarg);
+ return 0;
case DLT_MODE:
delete_mode(argv[0], numarg);
return 0;