1263 Commits

Author SHA1 Message Date
Lukas Fleischer
ce13b70c5a Allow passing additional parameters to shell_exec()
This allows for specifying multiple command line parameters to be passed
on to the command in a way similar to fork_exec(). This is useful if we
want to wrap editor or pager invocations in a shell.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-16 19:31:47 +02:00
Baptiste Jonglez
2951cf8320 Add dummy help for cut and paste
It looks like cutting and pasting are only half-implemented: this only
avoids a segfault when trying to get help on these functions.

Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-14 19:32:18 +02:00
Baptiste Jonglez
d6e551c1a5 Allow resize events while prompting the user
When asking the user to choose between multiple alternatives, properly
handle resize events.

Note that we would also need to do so in getstring()...

Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-14 19:32:18 +02:00
Baptiste Jonglez
b17475128d Various fixes.
Use snprintf(3) instead of sprintf(3) and fix a missing i18n tag.

Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-14 19:32:18 +02:00
Baptiste Jonglez
13d6f8703b Factorize boolean user prompting.
Introduce a new `status_ask_bool()` function, and use it where
applicable.

This greatly reduces code duplication, and will allow handling special
events (resize, user escape) much more uniformely.

Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-14 19:31:13 +02:00
Baptiste Jonglez
7d4ef08345 Use status_ask_choice() on more difficult cases
These cases are also candidates for the factorisation process, but
they are somewhat more tricky to get right.

Since we use a completely different approach, the result (from a user
perspective) looks different.

Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-14 19:31:13 +02:00
Baptiste Jonglez
1d9c90bb18 Use status_ask_choice() where applicable
These cases make obvious candidates for factorisation.

Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-14 19:31:13 +02:00
Baptiste Jonglez
4087cd4e5e Use status_ask_simplechoice() where applicable
Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-14 19:31:13 +02:00
Baptiste Jonglez
b2c92b2eb4 src/utils.c: Add a status_ask_simplechoice() function
We need a simpler version, based on the previously defined
`status_ask_choice()` function, that asks to choose amongst a number
of alternatives that can simply enumerated, without needing to bind
keys on them.

Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-14 19:31:12 +02:00
Baptiste Jonglez
f5dd276edb src/utils.c: Add a status_ask_choice() function
This function allows the user to choose between various alternatives,
each one being associated to a given key.

This will allow a great deal of factorisation, which will make it
easier to handle special events (like resizing, user escape...) in an
uniform manner.

The cool part of the approach taken here is that it allows full i18n
(i.e. the key bound to an alternative can be different depending on
the language), at the expense of a somewhat less readable code on the
caller side.

Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-14 19:31:12 +02:00
Lukas Fleischer
6da787a5cc Declare several parameters/variables constant
Add the "const" keyword to parameters and variables that are never
modified. Most of these were spotted by "-Wwrite-strings".

We cast the second parameter to execvp() explicitly as it expects a
"char *const[]" where it should expect a "const char *const[]"
(according to the documentation, this is due to compatibility reasons).
This should be changed once we come up with a better solution.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-08 21:50:05 +02:00
Lukas Fleischer
a20f36c5de src/args.c: Add "void" in some function declarations
These functions don't take any parameters, "void" is the right parameter
signature to use here.

Fixes some warnings seen with "-Wstrict-prototypes".

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-08 21:49:59 +02:00
Baptiste Jonglez
f2c94fb19c src/args.c: Add a mention of "--read-only" in "calcurse --help"
Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-02 17:11:23 +02:00
Baptiste Jonglez
6f80d84d5e Various code cleanup
Remove obsolete bits of code that weren't thrown away by b5c1981;
simplify some others areas of the code.

Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-02 17:11:19 +02:00
Baptiste Jonglez
0a352fe519 src/utils.c: Get rid of "semantic range checks" when parsing duration
Don't restrict ranges when entering durations. We now accept duration
like "+1d42h600m". This might not seem very logical, but it's
perfectly valid, and being able to enter "+36h" is useful when you
don't want to do the maths yourself.

Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-02 17:11:13 +02:00
Baptiste Jonglez
6fd0ae2ea7 src/apoint.c: Change the status message displayed when editing a duration
The duration format has recently changed to allow durations of the
form "2d18h42m", but the status message didn't advertize this new
possibility.

Signed-off-by: Baptiste Jonglez <baptiste--git@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-05-02 17:10:58 +02:00
Lukas Fleischer
1691d562a3 src/htable.h: Add missing prototypes
We only generated prototypes for a small subset of all supported
functions in the HTABLE_PROTOTYPE macro. Add missing prototypes to allow
for accessing corresponding functions if HTABLE_GENERATE is used in a
separate compilation unit. This also fixes a couple of compiler warnings
seen with "-Wmissing-prototypes".

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-21 11:22:50 +02:00
Lukas Fleischer
2c77124972 Add prototypes for hash table functions
These can be generated dynamically using the HTABLE_PROTOTYPE macro.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-21 11:22:50 +02:00
Lukas Fleischer
674f398ee9 src/mem.c: Skip dbg_*() if memory stats are disabled
These functions only need to be compiled if calcurse is built with
"--enable-memory-debug". Tell the preprocessor to strip them if memory
debugging/stats are disabled.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-21 11:05:38 +02:00
Lukas Fleischer
315b33540a Mark several functions static
These are not needed outside of the corresponding compilation units.
Spotted with "-Wmissing-prototypes".

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-20 23:10:56 +02:00
Lukas Fleischer
0791eaabca Merge "%(start"{,str}")" and "%(end"{,str}")"
Add "default" and "epoch" extended formats for dates. "default" is the
same as "%H:%M", "epoch" prints the number of seconds since January 1,
1970.

Also, change the semantics of "%(start)" to return dates in default
format (same format that "%(startstr)" used to use before this patch).
The old "%(start)" behavior can be emulated by using "%(start:epoch)".
The same applies to "%(end)" and "%(endstr)".

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-17 11:10:11 +02:00
Lukas Fleischer
b80c1f6364 Support extended date formats
Add support for appending a strftime()-style format string to "%(start)"
and "%(end)".

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-17 11:10:11 +02:00
Lukas Fleischer
68b26ff854 Allow passing extended formats
Extended formats can be specified by adding custom format strings to the
end of a long format specifier, separated by a colon (":"). This feature
is currently unused. Extended format support for several format
specifiers will be added in following patches.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-17 11:10:11 +02:00
Lukas Fleischer
b73ce859db Add support for long format specifiers
Adds following long format specifiers for each short format specifier:

* s: (start)
* S: (startstr)
* d: (duration)
* e: (end)
* E: (endstr)
* m: (message)
* n: (noteid)
* N: (note)
* p: (priority)

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-17 11:10:11 +02:00
Lukas Fleischer
cd4f8bb68f src/utils.c: Break out format specifier parsing
Move the format specifier parser to a separate function. This is done in
preparation for supporting long format specifiers.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-17 11:10:11 +02:00
Lukas Fleischer
45f2b76285 test/: Add a README
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
Signed-off-by: Frederic Culot <frederic@culot.org>
Signed-off-by: Erik Saule <esaule@bmi.osu.edu>
2012-04-17 11:10:11 +02:00
Lukas Fleischer
ec12276079 src/calcurse.c: Start all helper threads in one go
Makes our initialization code a tad cleaner and seems to reduce flicker
when starting calcurse (the notification bar is no longer drawn before
other windows are shown).

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-12 23:53:09 +02:00
Lukas Fleischer
691f8a6015 Refactor startup screen branch
Removes the pointless first parameter to io_startup_screen() and saves
one wins_update() call if system dialogs are disabled.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-12 23:43:20 +02:00
Lukas Fleischer
c65ccb0e77 Use percentage-based width for the sidebar
Use percentage-based widths internally. This slightly impairs (user)
feedback but brings the sidebar configuration menu closer to the actual
configuration format (the user now configures percentage-based widths,
not absolute width values). As a bonus, the sidebar is now resized
automatically on each window resize (based on the percentage values).

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-12 23:11:33 +02:00
Lukas Fleischer
b4d5316125 src/mem.c: Fix putchar() parameter
putchar() expects a single character, not a string.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-06 23:51:13 +02:00
Lukas Fleischer
1c442e6aef Miscellaneous small code cleanups
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-06 23:23:58 +02:00
Lukas Fleischer
d0b0ed3c20 src/keys.c: Use generic list implementation
Be consistent and replace the custom linked list implementation we used
here by the generic list implementation we use everywhere else. This
reduces code complexity, while slightly improving memory overhead.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-05 23:47:14 +02:00
Lukas Fleischer
50be1a1772 Mark some more variables/parameters constant
Fixes a couple of warnings seen with GCC 4.7.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-05 22:18:51 +02:00
Lukas Fleischer
80f7e8ead5 Mark localized string literals constant
Translated strings returned by gettext() are statically allocated and
shouldn't be modified.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-04-05 22:18:46 +02:00
Lukas Fleischer
516a793375 Do not use LLIST_*_CONT for appointments
This no longer works since we allow appointments lasting longer than 24
hours. This means that there might be an appointment that starts after
another one and lasts until the selected day, even though the former
doesn't. A simple example, where the old LLIST_TS_FOREACH_CONT approach
fails, is:

    03/29/2012 @ 19:00 -> 03/30/2012 @ 10:00 |Long event
    03/29/2012 @ 21:00 -> 03/29/2012 @ 23:15 |Event 1 (shown)
    03/30/2012 @ 14:00 -> 03/30/2012 @ 15:00 |Event 2 (not shown)

Instead, allow incoherent appointments and only break if the current
appointment *starts after* the selected day.

Reported-by: Baptiste Jonglez <baptiste@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-30 21:46:46 +02:00
Lukas Fleischer
d31cda5424 Revert a bunch of strncmp() conversions
All strncmp() usages were replaced by (evidently) equivalent strcmp()
invocations in commit 2c9499bf272e06a62902711c6c20621ef3f80e64. However,
some of the strncmp() calls were perfectly justified and we actually
broke iCal import and "C-"-style key bindings by converting them to
strcmp(). Fix this by reverting all affected conversions.

Reported-by: Baptiste Jonglez <baptiste@jonglez.org>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-30 15:50:27 +02:00
Lukas Fleischer
f3ccc70e37 README: Update with recent changes
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-30 10:22:36 +02:00
Lukas Fleischer
c85c3cce55 Fix semantics of "general."{systemdialogs,progressbar}
These were renamed from "skip_"* to *. However, we only changed syntax
and didn't invert their semantic meaning. Fix this by negating the
semantics of those variables. Also, negate these in the configuration
file automatically when running `calcurse-upgrade`.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-29 17:06:56 +02:00
Lukas Fleischer
8916293a26 src/config.c: Detect legacy configuration files
Check configuration variable names against a list of pre-3.0.0
configuration keys and display a warning if such a variable is found.
This reduces the chance of users going wild due to the non-backwards
compatible configuration file changes.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-29 12:14:44 +02:00
Lukas Fleischer
573cccb778 test/data/conf: Update variable names
Update the default configuration file used in our test suite to match
the new configuration variable naming scheme.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-29 11:55:23 +02:00
Lukas Fleischer
afa57d77c0 Add a configuration file upgrade script
This isn't ready for distribution but allows users of the -git version
of calcurse to easily update their configuration files without having to
edit them manually.

Following things are still missing here:

* A command line parameter to specify a custom data directory.
* A backup file that is created automatically before upgrading.
* Debug output.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-29 11:52:07 +02:00
Lukas Fleischer
a5eea86a07 src/config.c: Reorder configuration variables
Sort configuration variables lexicographically. This makes changes
easier to locate.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-29 11:21:05 +02:00
Lukas Fleischer
7cb0fc4cd9 src/config.c: Rename configuration variables
Classify configuration options into different sections. Use consistent
names and formatting.

This was discussed on the mailing lists. A script that updates
configuration files will come in following patches.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-27 21:21:23 +02:00
Lukas Fleischer
c9aff6d213 Update copyright ranges
Add 2012 to the copyright range for all source and documentation files.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-26 14:38:16 +02:00
Lukas Fleischer
481cb5524f Do not strncpy() strings returned by gettext()
Translated strings returned by gettext() are statically allocated.
There's no need to copy them to a buffer, we can use the pointers
returned by gettext() instead.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-12 20:36:22 +01:00
Lukas Fleischer
0f4b45e624 Get rid of string structures
These were only used to construct constant strings with additional
length fields. However, we can just use standard constant character
arrays instead and let the compiler calculate the string length.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-12 20:36:22 +01:00
Lukas Fleischer
2c9499bf27 Use strcmp() instead of strncmp()
strncmp() isn't intended to be a secure strcmp() replacement, it is
designed to be used if you want to compare the first n characters of two
strings. Since we always compare character pointers with string
literals, switch to using strcmp() everywhere.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-12 20:36:22 +01:00
Lukas Fleischer
7072c9c88a Avoid redundant window resets in config menu
There's no need to reset windows unless the layout was changed. Move
wins_reset() to a separate branch to reflect this.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-12 20:36:22 +01:00
Lukas Fleischer
03ed480654 Avoid redundant virtual screen updates
Remove some redundant wnoutrefresh() invocations. There's no need to
copy a window to the virtual screen unless doupdate() is invoked
immediately afterwards.

This reduces flicker when browsing in the calendar panel.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-12 20:36:22 +01:00
Lukas Fleischer
17aa73b73f Break out configuration main menu
This was the only big block of code left in our main loop. Move it to a
separate function, making the main loop a bit clearer.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-03-02 09:43:06 +01:00