Age | Commit message (Collapse) | Author |
|
Check if the appointment panel contains any items and unset the
highlight counter if it doesn't. Not doing this resulted in core dumps
if the edit command was invoked after switching to a day without any
appointments/events.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
After BUG#6 had apparently been closed with the screen locks introduced
in commit a80f8dcf2c6eb3b54658218bc081ee9694204dd5, some people still
had problems with random characters appearing in the notification bar.
This was obviously caused by wgetch() refreshing the screen if the
status panel was changed. From wgetch(3):
If the window is not a pad, and it has been moved or modified since
the last call to wrefresh, wrefresh will be called before another
character is read.
Since the wgetch(3) isn't thread-safe, there were race conditions
between the notification bar thread drawing to the notification bar and
wgetch() updating the screen. Introduce a (hidden) window that handles
all key presses and never gets changed in order to avoid this.
Also, call wins_wrefresh() explicitly in status_mesg(), since we can no
longer rely on wgetch() updating windows automatically.
Fixes reopened BUG#6. Note that this is a hotfix -- FR#26 has been
opened to ensure we fix this properly in the next major release.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
This allows for customizing the panel that is selected by default when
calcurse is started.
Note that this patch doesn't add any documentation. Also, this
configuration option currently cannot be configured using the
configuration menu.
Implements FR#19.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
We only call this once. Remove the wrapper and directly call the wrapped
function instead.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Remove the export bar and use a simple status_ask_choice() dialog
instead. This reduces code complexity and replaces another unnecessary
menu by the well-tested dialog feature that is used everywhere else.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
This is no longer needed since different keys use different handlers
now.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Supersedes the "key" parameter from following functions:
* key_generic_prev_day()
* key_generic_next_day()
* key_generic_prev_week()
* key_generic_next_week()
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Split up key_change_priority() into key_raise_priority(),
key_lower_priority() which are wrappers around a new convenience
function change_priority().
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Split out key_generic_goto_today() into a separate function. This
simplifies the control flow and supersedes the "key" parameter in
key_generic_goto().
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Instead of passing a key, pass the number of steps to increase the
priority by.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Break up the big switch statement into several functions. The functions
are declared inline to avoid unnecessary function calls.
Also:
* Add a "KEY_HANDLER" macro can be used as a short version of a "case"
statement, followed by a function call.
* Declare several state variables global to avoid having to pass them to
each of the new handlers.
* Pass the pressed key to each of the handler functions in order not to
break handlers that handled more than one key before the handlers were
pulled out.
These three changes were introduced to keep this patch as atomic as
possible and are intended to be removed in following patches.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Remove the cut function and merge it into the del-item command. This
allows for vim-style cutting/pasting.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
This adds support for vim-style copy/paste registers which allows
cutting and copying multiple items without having to overwrite the
copy/paste buffer. Registers can be specified using the quote key ('"').
To access a register, type '"x' before a command where "x" is the name
of a register. If you want to copy the currently selected item into
register 1, type '"1c'.
Valid registers are 0-9, a-z, "-" and "_". Note that the latter is the
so-called black hole register, which works similar to the black hole
register in vim.
The register prefix key is currently hardcoded and cannot be configured.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
This finally adds full copy-paste support. Implements FR#15.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Add a very simple cache, which is used to store the days that contain an
event or an appointment. This makes redrawing and browsing the calendar
panel much faster.
The cache has a size of 31 integers (which is equivalent to 124 bytes on
a 32 bit system and 248 bytes on a 64 bit system) and invalidates itself
if the current month has changed. If an item is added/changed/removed,
the cache needs to be invalidated manually by calling
calendar_monthly_view_cache_set_invalid(). Note that this will always
invalidate the whole cache, even if only one item at the last day of the
month was removed. This is a trade-off between simplicity and
efficiency.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
The item type parameter/return value no longer needs to be
passed/returned to interact_day_item_{paste,cut}(), since the type
descriptor is saved when cutting an item now.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
These functions get the current selection, call day_*_item() and fix the
current selection on the appointment panel, so move them where they
belong.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
These functions operate on arbitrary items. Pull out the code that gets
the currently selected item, get the current selection when one of the
functions is called and pass it as a parameter.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
These functions operate on arbitrary items. Pull out the code that gets
the currently selected item, get the current selection when one of the
functions is called and pass it as a parameter.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Rename all interaction functions for the sake of consistency and add a
"interact_" prefix. Also, mark day_erase_item() static since it is not
used anywhere else.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Pull out code from apoint_switch_notify() -- especially the fallback
routine that calls recur_apoint_switch_notify() if the currently
selected item is a recurrent item -- and move it to a wrapper function
day_item_switch_notify().
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
In addition to generic key bindings for moving one day (week)
forward/backward, define similar bindings for moving a month or a year.
Of course, count prefixes are allowed here as well.
Also add status bar hints and help texts.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
* Rename "LEFT" to "DAY_PREV", "RIGHT" to "DAY_NEXT", "UP" to
"WEEK_PREV" and "DOWN" to "WEEK_NEXT" to reflect the semantics of
these operations. Remove the unneeded "MOVES" element.
* Reorder code to improve consistency.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Convert our code base to adhere to Linux kernel coding style using
Lindent, with the following exceptions:
* Use spaces, instead of tabs, for indentation.
* Use 2-character indentations (instead of 8 characters).
Rationale: We currently have too much levels of indentation. Using
8-character tabs would make huge code parts unreadable. These need to be
cleaned up before we can switch to 8 characters.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
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>
|
|
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>
|
|
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>
|
|
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Translated strings returned by gettext() are statically allocated and
shouldn't be modified.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
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>
|
|
Add 2012 to the copyright range for all source and documentation files.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
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>
|
|
We used custom_load_conf() to load the configuration file and
io_save_conf() to save configuration. Move these functions, including
all helpers, to a central location.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
This is one of the few valid use cases for a global variable. No need to
make it pseudo-local and pass it from one function to another.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Add a global count buffer to our main loop and pass it to keys_getch()
as well as to all motion commands.
This enables some fancy shortcuts:
* Type "2l" to jump to the day after tomorrow.
* Type "4k" (or "28l") to move forward four weeks.
* Type "2$" to go to the end of next week.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Key commands can be prefixed with a natural number - keys_getch() will
store this number in the buffer pointed to by the second parameter. Set
this parameter to NULL to disable count prefixes.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
This allows for moving more than one item up/down.
This currently isn't used anywhere but will be bound to a key with one
of the following patches.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Allows for moving more than one step forward/backward.
This is not used anywhere yet but a key binding will likely be added in
one of the following patches.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Add a window bitmask to wins_update() and only update windows that might
actually require an update in our main loop. This improves response
times of the user interface a bit.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Instead of using a hacky flag, simply move the storage update code to a
separate function and call it when needed.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Add an additional check to apoint_update_panel() and todo_update_panel()
and only highlight currently selected items if the corresponding panel
is active. This allows us to remove all the highlight pointer juggling
that we used whenever the panel selection changed.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
If "auto_gc" is enabled, the garbage collector for note files will be
run on every exit. As this is an experimental feature and may cause data
loss, this is disabled by default.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Removes the need to pass the terminal's default background color round.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
We don't need to refresh windows every time an unassigned key is
pressed. Add a condition to skip the refresh part if that is the case.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
This removes the need of reading the whole data file and find matching
entries if we want to parse appointments in external programs.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Use a global flag to record whether the terminal was resized instead of
redrawing everything each time a KEY_RESIZE is read.
Add some additional checks to help_write_pad() as invalid actions may be
passed now due to using signals instead of virtual key presses.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
* Update copyright dates (use 2004-2011 as date range everywhere).
* Change copyright holder from "Frederic Culot" to "calcurse Development
Team".
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Use the new generic list implementation instead of "next" pointers in
todo items.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Use the new generic list implementation instead of those insane "next"
pointers in events. Includes some cleanups.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|
|
Use spaces instead of tabs for source code indentation only, strip
trailing whitespaces from lines.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
|