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:
parent
f76e1cce40
commit
3bc9497fc8
@ -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.
|
||||||
|
@ -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.
|
||||||
|
@ -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 ();
|
||||||
|
@ -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];
|
||||||
|
13
src/config.c
13
src/config.c
@ -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)
|
||||||
|
32
src/io.c
32
src/io.c
@ -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))
|
||||||
{
|
{
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user