1412 Commits

Author SHA1 Message Date
Lukas Fleischer
0f20693b07 Remove the erase flag and legacy deletion code
This is no longer needed. Note removal, as well as exception handling,
have been moved to separate functions and the cut feature has been
merged into the deletion function.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-07-07 21:40:56 +02:00
Lukas Fleischer
13c21ac280 Merge cut/delete
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>
2012-07-07 21:39:35 +02:00
Lukas Fleischer
88588ad704 Refactor exception handling
Remove the exception handling code from recur_*_erase() and move it to
separate functions recur_*_add_exc(). Create a wrapper function
day_item_add_exc() that can be used to add an exception to generic
items.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-07-07 21:36:38 +02:00
Lukas Fleischer
7fb25a84d4 Refactor note removal
Remove the note removal code from *_delete()/*_erase() and create a new
wrapper function called day_item_erase_note() that is be used to drop
the note being associated to an item.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-07-07 21:35:02 +02:00
Lukas Fleischer
69345edd77 Add support for copy/paste registers
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>
2012-07-07 21:27:01 +02:00
Lukas Fleischer
dd059ca812 Add a key binding for generic-copy
This finally adds full copy-paste support. Implements FR#15.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-07-06 01:59:24 +02:00
Lukas Fleischer
a3cf63b374 Add interact_day_item_copy()
This can be used to copy an item, so that it can be pasted somewhere
else later.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-07-06 01:59:01 +02:00
Lukas Fleischer
a9efce76f3 Do not bind "c" to "generic-config-menu" by default
The "c" key will be used for the generic-copy command in the future. The
configuration menu isn't needed a lot, so binding it to "C" only seems
legit.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-07-06 01:57:03 +02:00
Lukas Fleischer
352887887f Duplicate items when pasting
This allows pasting items more than once.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-07-06 01:56:42 +02:00
Lukas Fleischer
3b259b5620 Add day_item_fork()
Add a new function that can be used to copy one day item into another,
cloning the actual item that is linked.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-07-06 01:55:40 +02:00
Lukas Fleischer
a1394e9833 Refactor *_dup()
* Actually duplicate an item instead of copying data only.
* Properly clone an item without a note.
* Mark *_dup() public.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-07-06 01:54:09 +02:00
Lukas Fleischer
1c53c9d8c3 Revise todo_delete_note_bynum()
Pass an item instead of passing a list item index (analogous to commit
02c90ba53a658686bad5cb5f88c555d9eef06399).

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-07-04 08:46:41 +02:00
Lukas Fleischer
3f1359cdeb Remove unused function day_item_nb()
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-07-04 08:46:41 +02:00
Stéphane Aulery
ceab447e75 Summarize all contributions to translations
Signed-off-by: Stéphane Aulery <lkppo@free.fr>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-07-04 08:46:10 +02:00
Lukas Fleischer
b526d46fae Add a test case to reproduce BUG#2
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:37 +02:00
Lukas Fleischer
86c465b0e5 Allow passing both "-D" and "-c"
This is particularly useful if one wants to use configuration and key
bindings from a specific directory, while using an appointment file from
somewhere else. "-c" has precedence over "-D".

Also update the usage message, man page and documentation.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:37 +02:00
Lukas Fleischer
7a75415a61 Implement a cache for the monthly view
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>
2012-06-30 14:34:36 +02:00
Lukas Fleischer
81d97315c7 Remove unneeded parameter/return value
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>
2012-06-30 14:34:36 +02:00
Lukas Fleischer
57c4f9d8ea Remove legacy cut/paste code
Note that this doesn't remove *_dup() since these might still be needed
later.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:36 +02:00
Lukas Fleischer
6907ae73e7 Revise cut/pasting
Instead of calling type-specific duplication handlers and inserting
clones of the original items when pasting, save the generic day item and
remove the actual item from the linked list, so that it can be inserted
anywhere else later.

The cut/paste buffer is moved to the interaction unit, item-specific cut
operations are changed to remove the item from the linked list only
instead of copying and freeing it. An item is only freed if another item
is cut before the current cut/paste buffer is pasted. All paste
operations are changed and reinsert the actual item instead of creating
a clone.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:36 +02:00
Lukas Fleischer
b230e2949e Make *_free() public
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:36 +02:00
Lukas Fleischer
47d5fe2d45 Move apoint_{cut,paste}() to interaction unit
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>
2012-06-30 14:34:36 +02:00
Lukas Fleischer
44d3c96828 Remove "appt_pos" member from day items
This is no longer used and removing it saves a few bytes per item.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:36 +02:00
Lukas Fleischer
954e3fd8ee Add an item parameter to various todo_*() functions
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>
2012-06-30 14:34:36 +02:00
Lukas Fleischer
318e685ffe Add an item parameter to various day_*() functions
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>
2012-06-30 14:34:35 +02:00
Lukas Fleischer
02c90ba53a Revise *_delete{,_bynum}()
Always pass an item instead of passing a date and a index. This makes
use of the NULL callback that was added with one of the previous
patches.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:35 +02:00
Lukas Fleischer
e1fbee0071 src/llist.c: Compare data pointers if callback is NULL
If a NULL callback is passed to llist_find_*(), fall back to comparing
data pointers. The check for a NULL callback pointer is done outside the
main loop with an eye towards performance.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:35 +02:00
Lukas Fleischer
b8b6830dfd Allow passing more complex data to list callbacks
Change the data type of the "data" parameter from "long" to "void *" in
llist_find_*() signatures to allow for passing more complex objects.
Change all llist_find_*() invocations and callbacks accordingly.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:35 +02:00
Lukas Fleischer
8a85aaafa5 Rename interaction functions
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>
2012-06-30 14:34:35 +02:00
Lukas Fleischer
9ed7494f5e Move interaction functions to a separate file
This is a first step to clean up several compilation units and separate
the front end from back-end operations. All functions that require user
interaction are moved to a new compilation unit "interaction.c". Also,
following things are adjusted to the new layout:

* Make day_item_get_*() and a few other functions public, so that it can
  be accessed from the new compilation unit.

* Use apoint_hilt(), todo_hilt(), etc. instead of directly accessing
  static variables.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:35 +02:00
Lukas Fleischer
ba28426fc0 Remove unused functions
Remove apoint_get(), event_get(), recur_get_apoint() and
recur_get_event(), since they are no longer used.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:35 +02:00
Lukas Fleischer
0504875219 Simplify apoint_switch_notify()
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>
2012-06-30 14:34:35 +02:00
Lukas Fleischer
b97c2a09cf day_store_items(): Return the number of items found
Return the total number of items found instead of the pad length, since
this is used to store items in non-interactive mode as well now. The pad
length can still be calculated by using the appointment and event count
parameters.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:34 +02:00
Lukas Fleischer
f3858d899c src/args.c: Revise app_arg()
This kills the hackish code we used to filter and display appointments
and events in non-interactive mode. From now on, the same algorithm that
is used in interactive mode (read day_store_items() for details) is
called, resulting in code that is much easier to maintain.

The resulting performance loss is rather small. Here are the run times
of `calcurse -s01/01/1902 -r18250 -D ../test/data >/dev/null` before and
after the patch was applied:

    0.30user 0.26system 0:01.22elapsed 46%CPU (0avgtext+0avgdata 1340maxresident)k
    0inputs+0outputs (0major+398minor)pagefaults 0swaps

    0.33user 0.21system 0:01.18elapsed 46%CPU (0avgtext+0avgdata 1360maxresident)k
    0inputs+0outputs (0major+395minor)pagefaults 0swaps

Note that this also fixes a few bugs that were encountered in
non-interactive mode, most notably BUG#2.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:34 +02:00
Lukas Fleischer
3763aa1ebf src/day.c: Add day_write_stdout()
This function allows for writing stored items to stdout in a fashion
similar to day_write_pad(). This will be used as a convenience wrapper
when switching to day_store_items() in non-interactive mode and also
allows for easily implementing a "pipe-day" feature.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:34 +02:00
Lukas Fleischer
244b6c927d Make day_store_items() public
Remove the "static" keyword from day_store_items(), so that it is
accessible from other compilation units. Also, allow for discarding the
event/appointment counters by passing NULL pointers and move the
"regex.h" header inclusion to "calcurse.h".

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:34 +02:00
Lukas Fleischer
1f2fe16a84 day_store_*(): Add regular expression filter parameter
Allows to filter stored items using a regular expression. This is
currently unused but can be used to implement a filter in interactive
mode and will also be needed when we switch to using day_store_items()
in non-interactive mode.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:34 +02:00
Lukas Fleischer
75dd5eb037 Do not re-fetch items in day_*_{item,note}()
We can access these using the pointer field of the generic item
structure now -- there's no need to search for these twice any more.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:34 +02:00
Lukas Fleischer
75d0c4dc17 Remove the need for the "day_saved_item" struct
Do not store the currently selected item in day_write_pad() -- use
day_get_item() and apoint_hilt() in day_popup_item() instead.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:34 +02:00
Lukas Fleischer
920875d7cb Simplify display_item*()
Pass the generic item container instead of individual fields to
display_item() and display_item_date(). This reduces some code
duplication and cleans up day_write_pad() a bit.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:34 +02:00
Lukas Fleischer
80e24954c2 Simplify recur_apoint_switch_notify()
Pass the recurrent appointment itself instead of passing a date and an
item number. This is quite simple as we can just pass the pointer that
is contained in the generic item structure and don't have to
LLIST_TS_FIND_*() the item first any more.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:33 +02:00
Lukas Fleischer
52bfc54333 Rework generic item container
Instead of copying all members of the individual item structures to a
generic structure containing all fields, create compulsory fields only
and set up a pointer to the actual item. This results in lower memory
footprint and lets us clean up some code.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:33 +02:00
Lukas Fleischer
cbc5d46880 test/data/apts: Add a fair bit of items to 01/01/1902
This might turn out to be useful if we want to do performance tests and
check what happens if a day with a large amount of items is processed.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 14:34:33 +02:00
Lukas Fleischer
6b6067a53b Release 3.0.0
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 13:27:33 +02:00
Lukas Fleischer
41f70382bd src/config.c: Fix parsing an unset color theme
If color support is disabled, the color theme configuration value is set
to "0" or "none", which is a value we no longer accepted since commit
a5486605696f92a749277d49c77bb5b194dc67a5. Re-introduce the branch that
checks for an unset color theme before actually parsing it.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 13:25:49 +02:00
Lukas Fleischer
82d86ad7c7 Fix compilation with NLS disabled
* src/utils.c: Only call setlocale() if NLS is enabled.
* src/calcurse.h: Define a fallback macro ngettext() if NLS is disabled.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-30 12:34:54 +02:00
Lukas Fleischer
681a63ea76 po/: Translation updates from Transifex
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-24 01:25:54 +02:00
Lukas Fleischer
e08809bef8 po/calcurse.pot: Update message catalog
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-24 01:11:53 +02:00
Lukas Fleischer
ed55cdcb16 src/args.c: Fix bugs address in usage message
* Point out that bug reports should be sent to the bugs mailing list,
  not to misc in help and usage messages.

* Call more_info() when displaying the help message instead of
  copy-pasting strings to avoid double translation.

Reported-by: rafael ff1 <rafael.f.f1@gmail.com>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-18 17:49:04 +02:00
Lukas Fleischer
b8393ef948 src/help.c: Add missing _()
Add a missing gettext wrapper. This string should be translated.

Reported-by: rafael ff1 <rafael.f.f1@gmail.com>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
2012-06-18 00:15:29 +02:00