| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
As discussed on the mailing lists, the various linked list
implementations we currently use at a dozen of different places in the
calcurse source tree are inconvenient and should be replaced by a single
generic solution.
This is a first approach to introduce such a generic implemetation. It
provides following functions:
* llist_init(): Initialize a list.
* llist_free_inner(): Loop through a list and free all items.
* llist_free(): Free the list itself (but not the individual items).
* llist_first(): Get the first item of a list.
* llist_nth(): Get the nth item of a list.
* llist_next(): Get the successor of a list item.
* llist_find_first(): Find an item using a callback function.
* llist_find_next(): Find the next match using a callback function.
* llist_find_nth(): Find the nth item in a list (using a callback).
* llist_get_data(): Get a pointer to the actual data of a list item.
* llist_add(): Add an item at the end of a list.
* llist_add_sorted(): Add an item to a sorted list (using a comparison
callback function).
* llist_remove(): Remove an item from a list.
Linked lists are stored in "llist_t" structures, list items are to be
stored in "llist_item_t" structs.
All of the llist_*() functions either expect a pointer to a llist_t
structure (in case the function operates on the list itself) or a
pointer to a llist_item_t (llist_*_next() and llist_get_data()).
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
|
|
|
|
|
|
| |
Functions that never return should be declared "noreturn" to tell the
compiler this fact. Also, clang-analyzer will detect this attribute and
take it into account when running scan-build.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
|
|
|
|
|
|
|
| |
Keeping empty notes doesn't make sense here. Also, there doesn't seem to
be a simple way to erase notes yet. This will make calcurse delete any
notes that are empty (meaning that they are either 0-byte files or
contain nothing but a newline character) when returning from the editor.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
|
|
| |
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
|
|
| |
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
|
|
|
|
|
|
| |
date_sec2hour_str() is superseded by date_sec2date_str() with "%H:%M" as
date format string, so replace all invocations and remove that function
from "utils.c".
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
|
|
| |
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
|
|
| |
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
|
|
|
|
|
|
|
| |
Short forms are only accepted in interactive mode (e.g. when using the
"Go to" function, editing a recurrent item's end date, and so on).
Samples: "1/1/30" for "01/01/2030", "26" for the 26th of the currently
selected month/year or "3/1" for Mar 01 (or Jan 03, depending on the
date format) of the currently selected year.
|
|
|
|
| |
for reporting it).
|
| |
|
| |
|
| |
|
|
|