Add a read-only option

We don't save any configuration nor items if this is set. This should be
used with care, and hence there's no short option for this.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
Lukas Fleischer 2012-02-22 11:36:33 +01:00
parent f76e1cce40
commit 3bc9497fc8
7 changed files with 50 additions and 18 deletions

View File

@ -128,6 +128,12 @@ the *-c* flag.
Print events and appointments for the 'num' number of days and exit. If no Print events and appointments for the 'num' number of days and exit. If no
'num' is given, a range of 1 day is considered. 'num' is given, a range of 1 day is considered.
*--read-only*::
Don't save configuration nor appointments/todos.
+
'Warning:' Use this this with care! If you run an interactive calcurse instance
in read-only mode, all changes from this session will be lost without warning!
*-s*[date], *--startday*[=date]:: *-s*[date], *--startday*[=date]::
Print events and appointments from 'date' and exit. If no 'date' is given, Print events and appointments from 'date' and exit. If no 'date' is given,
the current day is considered. the current day is considered.

View File

@ -234,6 +234,12 @@ the `-c` flag.
Print events and appointments for the num number of days and exit. If no num Print events and appointments for the num number of days and exit. If no num
is given, a range of 1 day is considered. is given, a range of 1 day is considered.
`--read-only`::
Don't save configuration nor appointments/todos.
+
WARNING: Use this this with care! If you run an interactive calcurse instance
in read-only mode, all changes from this session will be lost without warning!
`-s[date], --startday[=date]`:: `-s[date], --startday[=date]`::
Print events and appointments from date and exit. If no date is given, the Print events and appointments from date and exit. If no date is given, the
current day is considered. current day is considered.

View File

@ -51,7 +51,8 @@ enum {
OPT_FMT_RAPT, OPT_FMT_RAPT,
OPT_FMT_EV, OPT_FMT_EV,
OPT_FMT_REV, OPT_FMT_REV,
OPT_FMT_TODO OPT_FMT_TODO,
OPT_READ_ONLY
}; };
/* /*
@ -665,6 +666,7 @@ parse_args (int argc, char **argv)
{"format-event", required_argument, NULL, OPT_FMT_EV}, {"format-event", required_argument, NULL, OPT_FMT_EV},
{"format-recur-event", required_argument, NULL, OPT_FMT_REV}, {"format-recur-event", required_argument, NULL, OPT_FMT_REV},
{"format-todo", required_argument, NULL, OPT_FMT_TODO}, {"format-todo", required_argument, NULL, OPT_FMT_TODO},
{"read-only", no_argument, NULL, OPT_READ_ONLY},
{NULL, no_argument, NULL, 0} {NULL, no_argument, NULL, 0}
}; };
@ -793,6 +795,9 @@ parse_args (int argc, char **argv)
case OPT_FMT_TODO: case OPT_FMT_TODO:
fmt_todo = optarg; fmt_todo = optarg;
break; break;
case OPT_READ_ONLY:
read_only = 1;
break;
default: default:
usage (); usage ();
usage_try (); usage_try ();

View File

@ -946,6 +946,7 @@ extern int resize;
extern unsigned colorize; extern unsigned colorize;
extern int foreground, background; extern int foreground, background;
extern enum ui_mode ui_mode; extern enum ui_mode ui_mode;
extern int read_only;
extern int days[12]; extern int days[12];
extern char *monthnames[12]; extern char *monthnames[12];
extern char *daynames[8]; extern char *daynames[8];

View File

@ -451,19 +451,11 @@ config_file_walk (config_fn_walk_cb_t fn_cb,
config_fn_walk_junk_cb_t fn_junk_cb, void *data) config_fn_walk_junk_cb_t fn_junk_cb, void *data)
{ {
FILE *data_file; FILE *data_file;
char *mesg_line1 = _("Failed to open config file");
char *mesg_line2 = _("Press [ENTER] to continue");
char buf[BUFSIZ], e_conf[BUFSIZ]; char buf[BUFSIZ], e_conf[BUFSIZ];
char *key, *value; char *key, *value;
data_file = fopen (path_conf, "r"); data_file = fopen (path_conf, "r");
if (data_file == NULL) EXIT_IF (data_file == NULL, _("failed to open configuration file"));
{
status_mesg (mesg_line1, mesg_line2);
wnoutrefresh (win[STA].p);
wins_doupdate ();
keys_getch (win[STA].p, NULL);
}
pthread_mutex_lock (&nbar.mutex); pthread_mutex_lock (&nbar.mutex);
for (;;) for (;;)
@ -561,6 +553,9 @@ config_save (void)
struct config_save_status status; struct config_save_status status;
int i; int i;
if (read_only)
return 1;
strncpy (tmppath, get_tempdir (), BUFSIZ); strncpy (tmppath, get_tempdir (), BUFSIZ);
strncat (tmppath, "/" CONF_PATH_NAME ".", BUFSIZ - strlen (tmppath) - 1); strncat (tmppath, "/" CONF_PATH_NAME ".", BUFSIZ - strlen (tmppath) - 1);
if ((tmpext = new_tempfile (tmppath, TMPEXTSIZ)) == NULL) if ((tmpext = new_tempfile (tmppath, TMPEXTSIZ)) == NULL)

View File

@ -355,6 +355,9 @@ io_save_apts (void)
llist_item_t *i; llist_item_t *i;
FILE *fp; FILE *fp;
if (read_only)
return 1;
if ((fp = fopen (path_apts, "w")) == NULL) if ((fp = fopen (path_apts, "w")) == NULL)
return 0; return 0;
@ -387,6 +390,9 @@ io_save_todo (void)
llist_item_t *i; llist_item_t *i;
FILE *fp; FILE *fp;
if (read_only)
return 1;
if ((fp = fopen (path_todo, "w")) == NULL) if ((fp = fopen (path_todo, "w")) == NULL)
return 0; return 0;
@ -406,6 +412,9 @@ io_save_keys (void)
{ {
FILE *fp; FILE *fp;
if (read_only)
return 1;
if ((fp = fopen (path_keys, "w")) == NULL) if ((fp = fopen (path_keys, "w")) == NULL)
return 0; return 0;
@ -424,6 +433,9 @@ io_save_cal (enum save_display display)
char *enter = _("Press [ENTER] to continue"); char *enter = _("Press [ENTER] to continue");
int show_bar; int show_bar;
if (read_only)
return;
pthread_mutex_lock (&io_save_mutex); pthread_mutex_lock (&io_save_mutex);
show_bar = 0; show_bar = 0;
@ -487,6 +499,8 @@ io_load_app (void)
start = end = until = *lt; start = end = until = *lt;
data_file = fopen (path_apts, "r"); data_file = fopen (path_apts, "r");
EXIT_IF (data_file == NULL, _("failed to open appointment file"));
for (;;) for (;;)
{ {
LLIST_INIT (&exc); LLIST_INIT (&exc);
@ -659,19 +673,14 @@ void
io_load_todo (void) io_load_todo (void)
{ {
FILE *data_file; FILE *data_file;
char *mesg_line1 = _("Failed to open todo file");
char *mesg_line2 = _("Press [ENTER] to continue");
char *newline; char *newline;
int nb_tod = 0; int nb_tod = 0;
int c, id; int c, id;
char buf[BUFSIZ], e_todo[BUFSIZ], note[MAX_NOTESIZ + 1]; char buf[BUFSIZ], e_todo[BUFSIZ], note[MAX_NOTESIZ + 1];
data_file = fopen (path_todo, "r"); data_file = fopen (path_todo, "r");
if (data_file == NULL) EXIT_IF (data_file == NULL, _("failed to open todo file"));
{
status_mesg (mesg_line1, mesg_line2);
wgetch (win[STA].p);
}
for (;;) for (;;)
{ {
c = getc (data_file); c = getc (data_file);
@ -771,7 +780,8 @@ io_load_keys (char *pager)
} }
keyfp = fopen (path_keys, "r"); keyfp = fopen (path_keys, "r");
EXIT_IF (keyfp == NULL, _("could not find any key file.")); EXIT_IF (keyfp == NULL, _("failed to open key file"));
log = io_log_init (); log = io_log_init ();
skipped = loaded = line = 0; skipped = loaded = line = 0;
while (fgets (buf, BUFSIZ, keyfp) != NULL) while (fgets (buf, BUFSIZ, keyfp) != NULL)
@ -883,6 +893,9 @@ io_load_keys (char *pager)
void void
io_check_dir (char *dir, int *missing) io_check_dir (char *dir, int *missing)
{ {
if (read_only)
return;
errno = 0; errno = 0;
if (mkdir (dir, 0700) != 0) if (mkdir (dir, 0700) != 0)
{ {
@ -919,6 +932,9 @@ io_file_exist (char *file)
void void
io_check_file (char *file, int *missing) io_check_file (char *file, int *missing)
{ {
if (read_only)
return;
errno = 0; errno = 0;
if (!io_file_exist (file)) if (!io_file_exist (file))
{ {

View File

@ -58,6 +58,9 @@ int foreground, background;
*/ */
enum ui_mode ui_mode = UI_CMDLINE; enum ui_mode ui_mode = UI_CMDLINE;
/* Don't save anything if this is set. */
int read_only = 0;
/* /*
* variables to store calendar names * variables to store calendar names
*/ */