1585 Commits

Author SHA1 Message Date
Lukas Fleischer
f9208c0b3d Use backwards-compatible out format for queries
Print TODO items before appointments in query outputs and add an empty
line between the list of TODO items and the list of appointments. This
is how items were printed before the big parser refactoring.

Also, add a test to ensure we do not unintentionally change that format
in the future.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-08-06 15:48:02 +02:00
Lukas Fleischer
c2dc3109ae Do not use filters in GC or import mode
Filtering items when running garbage collection or when importing data
might result in data loss, so simply ignore filters here.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-08-06 12:08:14 +02:00
Lukas Fleischer
aa682f7a11 Rework command line argument handling
Add a new range query mode (--days) and refactor the command line
argument parser.

Note: This slightly changes the behavior of some command line
parameters, since date arguments no longer use the input date format
from the configuration file!

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-08-06 12:08:14 +02:00
Lukas Fleischer
1878b7c4b0 Allow for filtering TODO items
The item filters now apply to both appointments and TODO items. Also,
add a new type mask "todo" and the following new filter options:

* --filter-priority
* --filter-completed
* --filter-uncompleted

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-08-06 12:08:14 +02:00
Lukas Fleischer
86553f35fe Add a query mode
Add a new parameter -Q that can be used to print all appointments inside
a given query range, followed by all TODO items. The date range can be
specified using the --from and --to arguments. The start date defaults
to the current day, the end date defaults to the day after the start
date if not specified.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-08-06 12:08:14 +02:00
Lukas Fleischer
9ce5861468 Add pattern filter option
This adds a new item filter option --filter-pattern and removes the
whole -S parameter logic, while making -S an alias for --filter-pattern.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-08-06 12:08:14 +02:00
Lukas Fleischer
bfe73d0e5d Add item filters
This adds the following filter options that allow for restricting the
set of items that are read from the appointments file:

* --filter-type
* --filter-start-from
* --filter-start-to
* --filter-start-after
* --filter-start-before
* --filter-end-from
* --filter-end-to
* --filter-end-after
* --filter-end-before

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-08-06 12:08:14 +02:00
Lukas Fleischer
4ec7fe1239 po/calcurse.pot: Update message catalog
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-08-03 23:51:35 +02:00
Lukas Fleischer
5bfe2daeff Document compact mode and default panel options
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-08-03 23:51:10 +02:00
Lukas Fleischer
ea900a863a Set default panel before showing system dialogs
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-08-03 23:51:10 +02:00
Lukas Fleischer
c093fcdfbf Make compact mode and default panel configurable
Create configuration entries for these (currently undocumented) options
which were added in 4d0c095 (Add compact panels support, 2012-11-25) and
in 660eef8 (Add configuration option to set a default panel,
2012-11-24).

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-08-03 23:51:08 +02:00
Lukas Fleischer
1c7b1befe3 po/: Translation updates from Transifex
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-08-03 23:14:43 +02:00
Lukas Fleischer
0d481aa00c Document the reload feature
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-28 13:12:42 +02:00
Lukas Fleischer
1cf173106a po/calcurse.pot: Update message catalog
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-28 12:52:07 +02:00
Lukas Fleischer
b32adc8b7b Show system dialog after reloading items
Suggested-by: Håkan Jerning <jerning@home.se>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-28 12:51:14 +02:00
Lukas Fleischer
6aa21da8c6 ical.c: Parse multiple exception rules properly
There can be multiple EXDATE lines per event. Parse them correctly
instead of making the last line overwrite the previous ones.

Reported-by: Håkan Jerning <jerning@home.se>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-28 12:43:00 +02:00
Lukas Fleischer
6ca2535f5e ical.c: Simplify and fix ical_durtime2long()
Correctly parse all types of durations. Before this change, durations
without an hour or minute component were not parsed properly.

Reported-by: Håkan Jerning <jerning@home.se>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-28 12:43:00 +02:00
Lukas Fleischer
a366b5c2ba io.c: Remove superfluous space from message
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-28 12:43:00 +02:00
Lukas Fleischer
81894cbbd8 tests/: Add basic iCal import tests
Tests ical-002.sh and ical-003.sh currently fail due to bugs in duration
and exception parsing.

Reported-by: Håkan Jerning <jerning@home.se>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-28 12:43:00 +02:00
Lukas Fleischer
132cf86a6f ui-day.c: Reorganize some free() operations
Fixes regressions introduced in 21fc7a4 (Replace several uses of
snprintf() by asprintf(), 2014-07-21).

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-27 11:05:12 +02:00
Lukas Fleischer
d6eee30215 Do not error out when calling xfree(NULL)
Calling free() with NULL as parameter is perfectly safe, no need to
error out here.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-27 10:58:03 +02:00
Lukas Fleischer
3fe9942017 Fix find_basedir() and display_help()
Fixes two regressions introduced in 21fc7a4 (Replace several uses of
snprintf() by asprintf(), 2014-07-21).

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-27 10:58:00 +02:00
Lukas Fleischer
f52ca8fe12 config.c: Rework configuration serialization
Avoid preallocating buffers on the stack, use dynamic memory allocation
instead.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-22 12:08:41 +02:00
Lukas Fleischer
66ce00153b Refactor new_tempfile()
Avoid preallocating buffers on the stack, use dynamic memory allocation
instead. Also, change the semantics of new_tempfile() so that it returns
the full name of the temporary file and fix all call sites.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-22 11:47:18 +02:00
Lukas Fleischer
21fc7a4b74 Replace several uses of snprintf() by asprintf()
Use asprintf() in some cold code paths. While allocating memory on the
heap is a bit slower, using asprintf() is a bit more memory efficient
and less prone to buffer overflow errors.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-22 11:47:14 +02:00
Lukas Fleischer
6203966fbf Add vasprintf() and asprintf()
The new utils.c functions vasprintf() and asprintf() are analogs to
sprintf() and vsprintf(). However, instead of requiring a buffer that is
large enough to hold the output data, the functions allocate a string
and return a pointer to it.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-22 11:06:54 +02:00
Lukas Fleischer
9d8d0c18b0 Small code cleanups
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-18 17:19:37 +02:00
Lukas Fleischer
919a40f561 Use wins_set_bindings() for the configuration menu
Make use of the general key binding context switching implementation for
the configuration main menu.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-18 10:26:36 +02:00
Lukas Fleischer
035faa883b Make bindings always fill the whole status bar
Compute padding for key bindings in the status bar such that they use
all available space (without exceeding the given page size).

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-18 09:51:13 +02:00
Lukas Fleischer
8d9e4c6102 Always fix selection in listbox_load_items()
Since commit 80a7267 (Fix selection in listbox_load_items(),
2014-07-18), listbox_fix_sel() is called if the selection is out of
range after loading the new set of items. However, we should *always*
fix the selection to make sure the selection doesn't move to a caption
row when reloading items.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-18 09:16:45 +02:00
Lukas Fleischer
e9d4d3c505 Do not use malloc() or xmalloc()
Use mem_malloc() instead which automatically picks the right
implementation depending on whether memory debugging is enabled or not.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-18 08:47:23 +02:00
Lukas Fleischer
58f6ac62aa Do not display dialog on periodic save
When periodic save is enabled, do not print the "The data files were
successfully saved" dialog every time io_save_cal() is called.

Reported-by: Håkan Jerning <jerning@home.se>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-18 08:41:45 +02:00
Lukas Fleischer
d0916ced78 Initialize prompt buffers in the configuration menus
malloc() does not make sure that the buffer is initialized to contain
all zeros. Initialize the buffer with the empty string.

Reported-by: Håkan Jerning <jerning@home.se>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-18 08:38:15 +02:00
Lukas Fleischer
80a7267f8c Fix selection in listbox_load_items()
Call listbox_fix_sel() after setting an initial selection in
listbox_load_items() to make sure we do not pick a caption row.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-18 08:30:09 +02:00
Lukas Fleischer
0ad6ff74df keys.c: Merge keydef and binding_labels
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-17 21:16:33 +02:00
Lukas Fleischer
76563c9b90 Rework key binding context switching
Store key binding contexts using another data structure to optimize
space usage and execution time.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-17 21:08:55 +02:00
Lukas Fleischer
8f28b8f9cc Pause notification thread when reloading items
Prevent the notification thread from accessing data structures for
appointments and todo items while we are recreating them.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-17 20:12:27 +02:00
Lukas Fleischer
ae7d2d4c6b Only run the merge tool on files with differences
If the backup file and the data file are equal, there is no need to run
the merge tool.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-17 12:03:34 +02:00
Lukas Fleischer
7920e761c9 Reintroduce key bindings in configuration menus
The key bindings display in the status bar was removed from the general
options menu in bd182fb (Use generic list box for general options,
2014-05-13) and from the notification options menu in 5eea05a (Use
generic list box for notification options, 2014-05-13). Display the new
key bindings to use for navigation.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-17 09:08:46 +02:00
Lukas Fleischer
6792a2e204 Split out code to set bindings
Split wins_status_bar() into wins_set_bindings(), wins_update_bindings()
and wins_status_bar(). This allows for using wins_set_bindings() to set
custom key bindings to be displayed.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-17 08:49:16 +02:00
Lukas Fleischer
33414c6fa1 wins.c: Drop NB_*_CMDS
Store the current number of commands in a static variable and drop the
NB_*_CMDS variables which we outdated anyway.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-17 08:41:36 +02:00
Lukas Fleischer
71234ec0bd Refactor wins_launch_external()
Allow for passing an arbitrary number of arguments. This also allows us
to remove wins_launch_external2() and use wins_launch_external() at all
call sites instead.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-16 23:53:30 +02:00
Lukas Fleischer
b37ed2fcc8 Avoid cancelling the save thread during saving
Ensure that we never cancel the periodic save thread when it currently
saves the configuration and data files.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-16 23:39:07 +02:00
Lukas Fleischer
5aec540895 Allow for merging data files when reloading
This allows for merging the (unsaved) items with the items from the data
files when invoking the reload operation. To this end, an external merge
tool (defaults to vimdiff) is used.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-16 23:31:31 +02:00
Lukas Fleischer
e93030befb Add a cleanup handler for the notify main thread
Make sure we do not leave behind unusable mutexes when calling
pthread_cancel().

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-16 23:19:10 +02:00
Lukas Fleischer
e6b0282a18 day.c: Fix typo in error message
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-16 20:09:29 +02:00
Lukas Fleischer
46d260a438 Warn when reloading with unsaved modifications
Since the reload operation overwrites all changes, warn before reloading
if there are unsaved modifications.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-16 20:05:21 +02:00
Lukas Fleischer
b36d253dce Automatically select first item in list boxes
If the selection is empty during listbox_load_items() and there is at
least one item in the list, automatically select the first item.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-16 16:13:07 +02:00
Lukas Fleischer
6550591b08 Add a key binding to reload appointments and todos
This allows for reloading the appointment and todo item files without
having to restart calcurse.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-16 16:03:26 +02:00
Lukas Fleischer
f7f49da17c Initialize linked list for recurrent items
When switching to the generic linked list implementation for recurring
events in 9fab248 (Use generic lists for recurring apointments and
events., 2011-04-16), no initialization routine for the list of
recurring events was added. Fix this and properly initialize the list on
startup.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2014-07-16 15:52:33 +02:00