aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/make.yml6
-rw-r--r--.tx/config49
-rw-r--r--CHANGES.md92
-rw-r--r--COPYING2
-rw-r--r--README.md29
-rwxr-xr-xautogen.sh2
-rwxr-xr-xbuild-aux/git-version-gen2
-rw-r--r--configure.ac75
-rw-r--r--contrib/caldav/README.md13
-rwxr-xr-xcontrib/caldav/calcurse-caldav.py21
-rw-r--r--contrib/caldav/config.sample8
-rwxr-xr-xcontrib/caldav/hooks/post-sync2
-rw-r--r--doc/Makefile.am2
-rw-r--r--doc/calcurse.1.txt4
-rw-r--r--doc/credits.txt2
-rw-r--r--doc/de/credits.txt2
-rw-r--r--doc/es/credits.txt2
-rw-r--r--doc/fr/credits.txt2
-rw-r--r--doc/manual.txt8
-rw-r--r--doc/nl/credits.txt2
-rw-r--r--doc/pt_BR/credits.txt2
-rw-r--r--doc/ru/credits.txt2
-rw-r--r--doc/submitting-patches.txt2
-rw-r--r--po/calcurse.pot74
-rw-r--r--po/de.po123
-rw-r--r--po/en.po1540
-rw-r--r--po/es.po126
-rw-r--r--po/fr.po135
-rw-r--r--po/nl.po103
-rw-r--r--po/pt_BR.po131
-rw-r--r--po/ru.po129
-rw-r--r--scripts/calcurse-upgrade.sh.in2
-rw-r--r--src/apoint.c10
-rw-r--r--src/args.c4
-rw-r--r--src/calcurse.c105
-rw-r--r--src/calcurse.h51
-rw-r--r--src/config.c28
-rw-r--r--src/custom.c76
-rw-r--r--src/day.c66
-rw-r--r--src/dmon.c2
-rw-r--r--src/event.c2
-rw-r--r--src/getstring.c4
-rw-r--r--src/help.c6
-rw-r--r--src/hooks.c2
-rw-r--r--src/htable.h2
-rw-r--r--src/ical.c19
-rw-r--r--src/io.c178
-rw-r--r--src/keys.c335
-rw-r--r--src/listbox.c2
-rw-r--r--src/llist.c2
-rw-r--r--src/llist.h2
-rw-r--r--src/llist_ts.h2
-rw-r--r--src/mem.c2
-rw-r--r--src/note.c2
-rw-r--r--src/notify.c2
-rw-r--r--src/pcal.c6
-rw-r--r--src/queue.c2
-rw-r--r--src/recur.c22
-rw-r--r--src/sha1.c3
-rw-r--r--src/sha1.h4
-rw-r--r--src/sigs.c2
-rw-r--r--src/strings.c2
-rw-r--r--src/todo.c2
-rw-r--r--src/ui-calendar.c123
-rw-r--r--src/ui-day.c2
-rw-r--r--src/ui-todo.c23
-rw-r--r--src/utf8.c2
-rw-r--r--src/utils.c38
-rw-r--r--src/vars.c5
-rw-r--r--src/vector.c2
-rw-r--r--src/vector.h2
-rw-r--r--src/wins.c16
-rwxr-xr-xtest/ical-009.sh3
-rw-r--r--test/run-test.c2
74 files changed, 1631 insertions, 2228 deletions
diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml
index cbbe996..7700ff3 100644
--- a/.github/workflows/make.yml
+++ b/.github/workflows/make.yml
@@ -24,15 +24,19 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Install dependencies (Ubuntu)
- run: sudo apt-get install asciidoc autopoint gettext xmlto
+ run: |
+ sudo apt-get update
+ sudo apt-get install asciidoc autopoint gettext xmlto autoconf-archive
if: matrix.os == 'ubuntu-latest'
- name: Install dependencies (MacOS)
run: |
brew update
+ brew install --overwrite python
brew install automake
brew install asciidoc
brew install gettext
brew install xmlto
+ brew install autoconf-archive
brew link --force gettext
sudo mkdir /etc/xml
sudo ln -s /usr/local/etc/xml/catalog /etc/xml/catalog
diff --git a/.tx/config b/.tx/config
index b9ac976..376e152 100644
--- a/.tx/config
+++ b/.tx/config
@@ -1,123 +1,122 @@
[main]
host = https://www.transifex.com
-type = PO
-[calcurse.calcurse]
+[o:lfleischer:p:calcurse:r:calcurse]
file_filter = po/<lang>.po
source_file = po/calcurse.pot
source_lang = en
-[calcurse.doc-add]
+[o:lfleischer:p:calcurse:r:doc-add]
file_filter = po/doc/add-<lang>.po
source_file = po/doc/add.pot
source_lang = en
-[calcurse.doc-config]
+[o:lfleischer:p:calcurse:r:doc-config]
file_filter = po/doc/config-<lang>.po
source_file = po/doc/config.pot
source_lang = en
-[calcurse.doc-copy-paste]
+[o:lfleischer:p:calcurse:r:doc-copy-paste]
file_filter = po/doc/copy-paste-<lang>.po
source_file = po/doc/copy-paste.pot
source_lang = en
-[calcurse.doc-credits]
+[o:lfleischer:p:calcurse:r:doc-credits]
file_filter = po/doc/credits-<lang>.po
source_file = po/doc/credits.pot
source_lang = en
-[calcurse.doc-delete]
+[o:lfleischer:p:calcurse:r:doc-delete]
file_filter = po/doc/delete-<lang>.po
source_file = po/doc/delete.pot
source_lang = en
-[calcurse.doc-displacement]
+[o:lfleischer:p:calcurse:r:doc-displacement]
file_filter = po/doc/displacement-<lang>.po
source_file = po/doc/displacement.pot
source_lang = en
-[calcurse.doc-edit]
+[o:lfleischer:p:calcurse:r:doc-edit]
file_filter = po/doc/edit-<lang>.po
source_file = po/doc/edit.pot
source_lang = en
-[calcurse.doc-enote]
+[o:lfleischer:p:calcurse:r:doc-enote]
file_filter = po/doc/enote-<lang>.po
source_file = po/doc/enote.pot
source_lang = en
-[calcurse.doc-export]
+[o:lfleischer:p:calcurse:r:doc-export]
file_filter = po/doc/export-<lang>.po
source_file = po/doc/export.pot
source_lang = en
-[calcurse.doc-flag]
+[o:lfleischer:p:calcurse:r:doc-flag]
file_filter = po/doc/flag-<lang>.po
source_file = po/doc/flag.pot
source_lang = en
-[calcurse.doc-general]
+[o:lfleischer:p:calcurse:r:doc-general]
file_filter = po/doc/general-<lang>.po
source_file = po/doc/general.pot
source_lang = en
-[calcurse.doc-goto]
+[o:lfleischer:p:calcurse:r:doc-goto]
file_filter = po/doc/goto-<lang>.po
source_file = po/doc/goto.pot
source_lang = en
-[calcurse.doc-import]
+[o:lfleischer:p:calcurse:r:doc-import]
file_filter = po/doc/import-<lang>.po
source_file = po/doc/import.pot
source_lang = en
-[calcurse.doc-intro]
+[o:lfleischer:p:calcurse:r:doc-intro]
file_filter = po/doc/intro-<lang>.po
source_file = po/doc/intro.pot
source_lang = en
-[calcurse.doc-other]
+[o:lfleischer:p:calcurse:r:doc-other]
file_filter = po/doc/other-<lang>.po
source_file = po/doc/other.pot
source_lang = en
-[calcurse.doc-pipe]
+[o:lfleischer:p:calcurse:r:doc-pipe]
file_filter = po/doc/pipe-<lang>.po
source_file = po/doc/pipe.pot
source_lang = en
-[calcurse.doc-priority]
+[o:lfleischer:p:calcurse:r:doc-priority]
file_filter = po/doc/priority-<lang>.po
source_file = po/doc/priority.pot
source_lang = en
-[calcurse.doc-reload]
+[o:lfleischer:p:calcurse:r:doc-reload]
file_filter = po/doc/reload-<lang>.po
source_file = po/doc/reload.pot
source_lang = en
-[calcurse.doc-repeat]
+[o:lfleischer:p:calcurse:r:doc-repeat]
file_filter = po/doc/repeat-<lang>.po
source_file = po/doc/repeat.pot
source_lang = en
-[calcurse.doc-save]
+[o:lfleischer:p:calcurse:r:doc-save]
file_filter = po/doc/save-<lang>.po
source_file = po/doc/save.pot
source_lang = en
-[calcurse.doc-tab]
+[o:lfleischer:p:calcurse:r:doc-tab]
file_filter = po/doc/tab-<lang>.po
source_file = po/doc/tab.pot
source_lang = en
-[calcurse.doc-view]
+[o:lfleischer:p:calcurse:r:doc-view]
file_filter = po/doc/view-<lang>.po
source_file = po/doc/view.pot
source_lang = en
-[calcurse.doc-vnote]
+[o:lfleischer:p:calcurse:r:doc-vnote]
file_filter = po/doc/vnote-<lang>.po
source_file = po/doc/vnote.pot
source_lang = en
diff --git a/CHANGES.md b/CHANGES.md
index 4124197..acc24e4 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,98 @@
Release Notes
=============
+Version 4.8.1 (2023-05-22)
+--------------------------
+
+- Bug fixes:
+
+ * Fixed characters in weekly view.
+
+ * AsciiDoc checks are skipped if --disable-docs is used.
+
+ * Fixed import for iCal files with empty description (fixed by Marian
+ Buschsieweke).
+
+ * Fixed handling of note files edited outside calcurse (fixed by Nicholas
+ Johnson).
+
+ * Fixed handling of recurrent open-ended appointments at 00:00.
+
+ * Default description for items with empty descriptions (reported and
+ partially implemented by Jonathan van der Steege).
+
+- New calcurse-caldav features:
+
+ * The PasswordCommand option can now be used to manage passwords in an
+ external program and is the new recommended way of storing passwords for
+ calcurse-caldav (implemented by Ryan Lue).
+
+Version 4.8.0 (2022-04-16)
+--------------------------
+
+- New features:
+
+ * Support any weekday as first day of week; previously, only Sunday and
+ Monday were allowed (implemented by Morgan Seltzer).
+
+ * Configuration of the format in which appointment time is displayed
+ (implemented by mercurialmoon).
+
+ * Actions without key bindings.
+
+ * generic-prev-view key binding to cycle backwards through windows
+ (implemented by Aurora).
+
+ * Support for Home/End keys in text input mode.
+
+- Bug fixes:
+
+ * Support compilation on big-endian systems (reported by nmeum).
+
+ * Fixed --docdir support (fixed by Marco Sirabella).
+
+ * Allow newlines in iCal SUMMARY by replacing them with blanks (reported by
+ Matthias Braun).
+
+ * Fixed sidebar configuration sometimes not increasing width (fixed by
+ Morgan Seltzer).
+
+ * Layout change recognizes changed appointment space; before this change, a
+ layout change did not update the maximum number of appointments visible
+ until the config menu was left (fixed by Morgan Seltzer).
+
+- calcurse-caldav bug fixes:
+
+ * Fixed InsecureSSL support (reported by Pitido).
+
+Version 4.7.1 (2021-04-11)
+--------------------------
+
+- Bug fixes:
+
+ * Multiple iCal import fixes: Make iCal event import independent of
+ property ordering. Return failure if an item is skipped. Avoid double
+ free on import errors. Fix parsing of UNTIL.
+
+ * Do not remove an empty note file after edit session.
+
+ * Keep internal linked list sorted when moving items.
+
+ * Prevent external hook/notification commands from interacting with the UI.
+
+- calcurse-caldav bug fixes:
+
+ * Allow non-ASCII characters in username and password (fixed by Henrik
+ Grimler).
+
+ * Improved error handling for the configuration file. Unknown keys are now
+ reported as errors instead of ignored.
+
+ * Always request href from server after pushing a new object to prevent
+ items from being erroneously deleted or created when path contains
+ characters that need to be URL-encoded (reported and fixed by Max
+ Deineko).
+
Version 4.7.0 (2020-10-12)
--------------------------
diff --git a/COPYING b/COPYING
index d3ebf1b..ceb0721 100644
--- a/COPYING
+++ b/COPYING
@@ -1,4 +1,4 @@
-Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/README.md b/README.md
index 4475762..009a5e6 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,26 @@
-calcurse
-========
+# calcurse
[![Build and test](https://github.com/lfos/calcurse/actions/workflows/make.yml/badge.svg)](https://github.com/lfos/calcurse/actions/workflows/make.yml)
[![Lint Python](https://github.com/lfos/calcurse/actions/workflows/lint_python.yml/badge.svg)](https://github.com/lfos/calcurse/actions/workflows/lint_python.yml)
![Demo](https://calcurse.org/images/demo.gif)
-Building
---------
+## Installation
-Install the following build dependencies. If your distro segments development
-files from core packages (i.e., \*-devel or \*-dev packages), you may need to
-install those as well:
+calcurse is available on a number of Linux distributions:
+
+[![Packaging status](https://repology.org/badge/vertical-allrepos/calcurse.svg)](https://repology.org/project/calcurse/versions)
+
+## Building from Source
+
+Install the following build dependencies. If your distribution segments
+development files from core packages (i.e., \*-devel or \*-dev packages), you
+may need to install those as well:
* gcc
+* autoconf-archive
* automake
+* autopoint
* asciidoc
* gettext with development files
* ncurses with development files
@@ -29,8 +35,7 @@ and install calcurse:
Note that `make install` needs to be run as root. When working on a Git
checkout, you need to run `./autogen.sh` before `./configure`.
-Package Overview
-----------------
+## Source Overview
* `build-aux`: auxiliary files for the build process
* `contrib`: useful tools such as hooks or the CalDAV synchronization script
@@ -40,8 +45,7 @@ Package Overview
* `src`: the actual calcurse source files
* `test`: test suite and test cases for calcurse
-Authors
--------
+## Authors
calcurse was created by Frederic Culot in 2004. Since 2011, the project is
maintained by Lukas Fleischer. Many core features added to calcurse since 2017
@@ -51,8 +55,7 @@ Of course, there are numerous other contributors. Check the Git commit log and
the `Thanks` section in the manual for a list of people who have contributed by
reporting bugs, sending fixes, or suggesting improvements.
-Contributing and Donations
---------------------------
+## Contributing and Donations
Patches, bug reports and other requests are always welcome! You can submit them
to one of our mailing lists (check the [patch submission
diff --git a/autogen.sh b/autogen.sh
index 55c7768..ee8f12f 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+# Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen
index fe1ec84..40c04b5 100755
--- a/build-aux/git-version-gen
+++ b/build-aux/git-version-gen
@@ -6,7 +6,7 @@ then
exit 1
fi
-DEF_VER=4.7.0
+DEF_VER=4.8.1
VERFILE="$1"
if [ -d '.git' ]
diff --git a/configure.ac b/configure.ac
index 1f6ec61..da211d0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,16 +1,14 @@
#-------------------------------------------------------------------------------
# Init
#-------------------------------------------------------------------------------
-AC_PREREQ(2.59)
-AC_INIT([calcurse],
- m4_esyscmd([build-aux/git-version-gen .version]),
- [bugs@calcurse.org])
+AC_PREREQ([2.71])
+AC_INIT([calcurse],[m4_esyscmd(build-aux/git-version-gen .version)],[bugs@calcurse.org])
AM_INIT_AUTOMAKE
#m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
AM_GNU_GETTEXT([external])
-AM_GNU_GETTEXT_VERSION([0.14.1])
+AM_GNU_GETTEXT_VERSION([0.19.8])
AC_CONFIG_SRCDIR([src/calcurse.c])
-AC_CONFIG_HEADER([config.h])
+AC_CONFIG_HEADERS([config.h])
#-------------------------------------------------------------------------------
# Checks for system type
#-------------------------------------------------------------------------------
@@ -19,37 +17,22 @@ AC_CANONICAL_HOST
# Checks for programs
#-------------------------------------------------------------------------------
AC_PROG_CC
+AC_C_BIGENDIAN
#-------------------------------------------------------------------------------
# Checks for header files
#-------------------------------------------------------------------------------
-AC_HEADER_STDC
AC_CHECK_HEADERS([ctype.h getopt.h locale.h math.h signal.h stdio.h stdlib.h \
string.h sys/stat.h sys/types.h sys/wait.h time.h unistd.h \
fcntl.h paths.h errno.h limits.h regex.h])
#-------------------------------------------------------------------------------
# Checks for system libs
#-------------------------------------------------------------------------------
-AC_CHECK_FUNC(initscr,,
-[
- available_ncurses="none"
- for lib in ncursesw ncurses
- do
- AC_CHECK_LIB($lib, initscr,
- [available_ncurses="$lib"; break])
- done
- if test "$available_ncurses" = none; then
- AC_MSG_ERROR(Either ncurses or ncursesw library is required to build calcurse!)
- elif test "$available_ncurses" = ncursesw; then
- AC_CHECK_HEADERS([ncursesw/ncurses.h],,
- [AC_CHECK_HEADERS([ncurses.h],,
- AC_MSG_ERROR([Missing ncursesw header file]))])
- else
- AC_CHECK_HEADERS([ncurses/ncurses.h],,
- [AC_CHECK_HEADERS([ncurses.h],,
- AC_MSG_ERROR([Missing ncurses header file]))])
- fi
- LIBS="$LIBS -l$available_ncurses"
-])
+AX_WITH_CURSES
+if test "x$ax_cv_ncursesw" != xyes && test "x$ax_cv_ncurses" != xyes; then
+ AC_MSG_ERROR(Either ncurses or ncursesw library is required to build calcurse!)
+fi
+
+LIBS="$LIBS $CURSES_LIBS"
AC_CHECK_HEADERS([pthread.h], [
AC_CHECK_LIB(pthread, pthread_create, [
@@ -76,7 +59,6 @@ AC_ARG_ENABLE(docs,
[enabledocs=$enableval], [enabledocs=yes])
if test x"$enabledocs" != x"yes"; then
enabledocs=no
- AC_MSG_WARN([Skipping documentation!])
fi
AC_MSG_CHECKING([whether to include documentation])
AC_MSG_RESULT($enabledocs)
@@ -87,7 +69,21 @@ AC_ARG_WITH(asciidoc,
[use AsciiDoc to regenerate documentation]),
[use_asciidoc=$withval],
[use_asciidoc="auto"])
-if test x"$use_asciidoc" = x"auto"; then
+if test x"$enabledocs" = x"no" -o x"$use_asciidoc" = x"no"; then
+ AC_MSG_WARN([Will not rebuild documentation!])
+ have_asciidoc=no
+ have_a2x=no
+elif test x"$use_asciidoc" = x"yes"; then
+ AC_PATH_PROG([ASCIIDOC], [asciidoc])
+ if test -z "$ASCIIDOC"; then
+ AC_MSG_ERROR([AsciiDoc not found and "--with-asciidoc" specified!])
+ fi
+ AC_PATH_PROG([A2X], [a2x])
+ if test -z "$A2X"; then
+ AC_MSG_ERROR([a2x not found and "--with-asciidoc" specified!])
+ fi
+ have_asciidoc=yes
+elif test x"$use_asciidoc" = x"auto"; then
AC_PATH_PROG([ASCIIDOC], [asciidoc])
if test -z "$ASCIIDOC"; then
have_asciidoc=no
@@ -112,20 +108,6 @@ if test x"$use_asciidoc" = x"auto"; then
else
have_a2x=yes
fi
-elif test x"$use_asciidoc" = x"yes"; then
- AC_PATH_PROG([ASCIIDOC], [asciidoc])
- if test -z "$ASCIIDOC"; then
- AC_MSG_ERROR([AsciiDoc not found and "--with-asciidoc" specified!])
- fi
- AC_PATH_PROG([A2X], [a2x])
- if test -z "$A2X"; then
- AC_MSG_ERROR([a2x not found and "--with-asciidoc" specified!])
- fi
- have_asciidoc=yes
-elif test x"$use_asciidoc" = x"no"; then
- AC_MSG_WARN([Will not rebuild documentation!])
- have_asciidoc=no
- have_a2x=no
fi
AM_CONDITIONAL(HAVE_ASCIIDOC, test $have_asciidoc = yes)
AM_CONDITIONAL(HAVE_A2X, test $have_a2x = yes)
@@ -152,9 +134,10 @@ AM_CONDITIONAL(CALCURSE_MEMORY_DEBUG, test x$memdebug = xyes)
#-------------------------------------------------------------------------------
# Create Makefiles
#-------------------------------------------------------------------------------
-AC_OUTPUT(Makefile doc/Makefile src/Makefile test/Makefile \
+AC_CONFIG_FILES([Makefile doc/Makefile src/Makefile test/Makefile \
scripts/Makefile po/Makefile.in po/Makefile \
- contrib/caldav/Makefile contrib/vdir/Makefile)
+ contrib/caldav/Makefile contrib/vdir/Makefile])
+AC_OUTPUT
#-------------------------------------------------------------------------------
# Summary
#-------------------------------------------------------------------------------
diff --git a/contrib/caldav/README.md b/contrib/caldav/README.md
index a842081..b464dc9 100644
--- a/contrib/caldav/README.md
+++ b/contrib/caldav/README.md
@@ -34,13 +34,12 @@ argument. You can choose between the following initialization modes:
For subsequent calcurse-caldav invocations, you don't need to specify any
additional parameters.
-You can specify a username and password for basic authentication in the
-config file. Alternatively, the password can be passed securely from another
-program (such as *pass*) via the `CALCURSE_CALDAV_PASSWORD` environment variable like
-so:
-```
-CALCURSE_CALDAV_PASSWORD=$(pass show calcurse) calcurse-caldav
-```
+Specify your HTTP Basic authentication credentials under the config file's
+`Auth` section. The most secure approach is to save your password in a CLI
+encrypted password store (_e.g.,_ [pass](https://www.passwordstore.org/)), and
+then set `PasswordCommand` to the shell command used to retrieve it.
+If security is not a priority, you may store your password in plain text
+instead.
Hooks
-----
diff --git a/contrib/caldav/calcurse-caldav.py b/contrib/caldav/calcurse-caldav.py
index 3f57fdf..f9488e6 100755
--- a/contrib/caldav/calcurse-caldav.py
+++ b/contrib/caldav/calcurse-caldav.py
@@ -6,6 +6,7 @@ import configparser
import os
import pathlib
import re
+import shlex
import subprocess
import sys
import textwrap
@@ -30,6 +31,7 @@ class Config:
self._map = {
'Auth': {
'Password': None,
+ 'PasswordCommand': None,
'Username': None,
},
'CustomHeaders': {},
@@ -657,9 +659,6 @@ verbose = args.verbose
debug = args.debug
debug_raw = args.debug_raw
-# Read environment variables
-password = os.getenv('CALCURSE_CALDAV_PASSWORD')
-
# Read configuration.
config = Config(configfn)
@@ -674,7 +673,17 @@ path = config.get('General', 'Path')
sync_filter = config.get('General', 'SyncFilter')
verbose = verbose or config.get('General', 'Verbose')
-password = password or config.get('Auth', 'Password')
+if os.getenv('CALCURSE_CALDAV_PASSWORD'):
+ # This approach is deprecated, but preserved for backwards compatibility
+ password = os.getenv('CALCURSE_CALDAV_PASSWORD')
+elif config.get('Auth', 'Password'):
+ password = config.get('Auth', 'Password')
+elif config.get('Auth', 'PasswordCommand'):
+ tokenized_cmd = shlex.split(config.get('Auth', 'PasswordCommand'))
+ password = subprocess.run(tokenized_cmd, capture_output=True).stdout.decode('UTF-8')
+else:
+ password = None
+
username = config.get('Auth', 'Username')
client_id = config.get('OAuth2', 'ClientID')
@@ -733,9 +742,7 @@ try:
# Connect to the server.
if verbose:
print('Connecting to ' + hostname + '...')
- conn = httplib2.Http()
- if insecure_ssl:
- conn.disable_ssl_certificate_validation = True
+ conn = httplib2.Http(disable_ssl_certificate_validation=insecure_ssl)
if authmethod == 'oauth2':
# Authenticate with OAuth2 and authorize HTTP object
diff --git a/contrib/caldav/config.sample b/contrib/caldav/config.sample
index e2c6c2d..0ba8fa8 100644
--- a/contrib/caldav/config.sample
+++ b/contrib/caldav/config.sample
@@ -48,11 +48,13 @@ DryRun = Yes
# Enable this if you want detailed logs written to stdout.
Verbose = Yes
-# Credentials for HTTP Basic Authentication. Leave this commented out if you do
-# not want to use authentication.
+# Credentials for HTTP Basic Authentication (if required).
+# Set `Password` to your password in plaintext (unsafe),
+# or `PasswordCommand` to a shell command that retrieves it (recommended).
#[Auth]
#Username = user
-#Password = pass
+#Password = password
+#PasswordCommand = pass baikal
# Optionally specify additional HTTP headers here.
#[CustomHeaders]
diff --git a/contrib/caldav/hooks/post-sync b/contrib/caldav/hooks/post-sync
index 62ebe11..db0059b 100755
--- a/contrib/caldav/hooks/post-sync
+++ b/contrib/caldav/hooks/post-sync
@@ -26,7 +26,7 @@ commit_dir() {
if [ -d .git ] && command -v git >/dev/null; then
git add "$@"
if ! git diff-index --quiet --cached HEAD; then
- git commit -m "Automatic commit by the post-save hook"
+ git commit -m "Automatic commit by the post-sync hook"
fi
fi
}
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 73cd8ce..adee962 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -57,8 +57,6 @@ CLEANFILES = \
submitting-patches.html \
calcurse.1
-docdir = $(datadir)/doc/$(PACKAGE)
-
.txt.html:
if HAVE_ASCIIDOC
$(AM_V_GEN) $(ASCIIDOC) $(ASCIIDOC_ARGS) $<
diff --git a/doc/calcurse.1.txt b/doc/calcurse.1.txt
index 4605219..1f79f9a 100644
--- a/doc/calcurse.1.txt
+++ b/doc/calcurse.1.txt
@@ -1,6 +1,6 @@
////
/*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -764,5 +764,5 @@ AUTHORS
COPYRIGHT
---------
-Copyright (c) 2004-2020 calcurse Development Team.
+Copyright (c) 2004-2023 calcurse Development Team.
This software is released under the BSD License.
diff --git a/doc/credits.txt b/doc/credits.txt
index ac7c1ab..e1f5ae7 100644
--- a/doc/credits.txt
+++ b/doc/credits.txt
@@ -1,7 +1,7 @@
Calcurse - text-based organizer
===============================
-Copyright (c) 2004-2020 calcurse Development Team
+Copyright (c) 2004-2023 calcurse Development Team
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/doc/de/credits.txt b/doc/de/credits.txt
index ac7c1ab..e1f5ae7 100644
--- a/doc/de/credits.txt
+++ b/doc/de/credits.txt
@@ -1,7 +1,7 @@
Calcurse - text-based organizer
===============================
-Copyright (c) 2004-2020 calcurse Development Team
+Copyright (c) 2004-2023 calcurse Development Team
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/doc/es/credits.txt b/doc/es/credits.txt
index ac7c1ab..e1f5ae7 100644
--- a/doc/es/credits.txt
+++ b/doc/es/credits.txt
@@ -1,7 +1,7 @@
Calcurse - text-based organizer
===============================
-Copyright (c) 2004-2020 calcurse Development Team
+Copyright (c) 2004-2023 calcurse Development Team
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/doc/fr/credits.txt b/doc/fr/credits.txt
index ac7c1ab..e1f5ae7 100644
--- a/doc/fr/credits.txt
+++ b/doc/fr/credits.txt
@@ -1,7 +1,7 @@
Calcurse - text-based organizer
===============================
-Copyright (c) 2004-2020 calcurse Development Team
+Copyright (c) 2004-2023 calcurse Development Team
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/doc/manual.txt b/doc/manual.txt
index 7eaa211..03a27ff 100644
--- a/doc/manual.txt
+++ b/doc/manual.txt
@@ -1,6 +1,6 @@
////
/*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -143,7 +143,7 @@ Install process
First you need to gunzip and untar the source archive:
----
-$ tar zxvf calcurse-4.7.0.tar.gz
+$ tar zxvf calcurse-4.8.1.tar.gz
----
Once you meet the requirements and have extracted the archive, the install
@@ -650,9 +650,9 @@ directory. Also make sure the scripts are executable.
*pre-load*::
Executed before the data files are loaded.
*post-load*::
- Executed after the data files are saved.
+ Executed after the data files are loaded.
*pre-save*::
- Executed before the data files are loaded.
+ Executed before the data files are saved.
*post-save*::
Executed after the data files are saved.
diff --git a/doc/nl/credits.txt b/doc/nl/credits.txt
index ac7c1ab..e1f5ae7 100644
--- a/doc/nl/credits.txt
+++ b/doc/nl/credits.txt
@@ -1,7 +1,7 @@
Calcurse - text-based organizer
===============================
-Copyright (c) 2004-2020 calcurse Development Team
+Copyright (c) 2004-2023 calcurse Development Team
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/doc/pt_BR/credits.txt b/doc/pt_BR/credits.txt
index 5cddabc..82efeb5 100644
--- a/doc/pt_BR/credits.txt
+++ b/doc/pt_BR/credits.txt
@@ -1,7 +1,7 @@
Calcurse - organizador baseado em texto
=======================================
-Copyright (c) 2004-2020 Equipe de Desenvolvimento do Calcurse
+Copyright (c) 2004-2023 Equipe de Desenvolvimento do Calcurse
Todos os direitos reservados.
A redistribuição e uso na forma de código-fonte e binário, com ou
diff --git a/doc/ru/credits.txt b/doc/ru/credits.txt
index ac7c1ab..e1f5ae7 100644
--- a/doc/ru/credits.txt
+++ b/doc/ru/credits.txt
@@ -1,7 +1,7 @@
Calcurse - text-based organizer
===============================
-Copyright (c) 2004-2020 calcurse Development Team
+Copyright (c) 2004-2023 calcurse Development Team
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/doc/submitting-patches.txt b/doc/submitting-patches.txt
index 056bfb5..6514949 100644
--- a/doc/submitting-patches.txt
+++ b/doc/submitting-patches.txt
@@ -1,6 +1,6 @@
////
/*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/po/calcurse.pot b/po/calcurse.pot
index 37c3361..f1894e3 100644
--- a/po/calcurse.pot
+++ b/po/calcurse.pot
@@ -1,14 +1,14 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR calcurse Development Team <misc@calcurse.org>
-# This file is distributed under the same license as the PACKAGE package.
+# This file is distributed under the same license as the calcurse package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: calcurse 4.8.1\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2021-04-10 09:12-0400\n"
+"POT-Creation-Date: 2023-05-22 14:19-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -50,7 +50,7 @@ msgstr ""
msgid "calcurse %s -- text-based organizer\n"
msgstr ""
-msgid "Copyright (c) 2004-2020 calcurse Development Team."
+msgid "Copyright (c) 2004-2023 calcurse Development Team."
msgstr ""
msgid "This is free software; see the source for copying conditions."
@@ -419,12 +419,6 @@ msgstr ""
msgid "(if set to YES, confirmation is required before deleting an event)"
msgstr ""
-msgid "Monday"
-msgstr ""
-
-msgid "Sunday"
-msgstr ""
-
msgid "(specifies the first day of week in the calendar view)"
msgstr ""
@@ -449,12 +443,18 @@ msgstr ""
msgid "(Format of the date displayed in the appointments panel)"
msgstr ""
+msgid "(Format of the time displayed in the appointments panel)"
+msgstr ""
+
msgid "Enter a text string (an empty string for the default text)"
msgstr ""
msgid "Enter the date format (see 'man 3 strftime' for possible formats) "
msgstr ""
+msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
+msgstr ""
+
msgid "Enter the date format: "
msgstr ""
@@ -467,7 +467,7 @@ msgstr ""
msgid "Undefined option!"
msgstr ""
-msgid "undefined"
+msgid "UNDEFINED"
msgstr ""
msgid "keys configuration"
@@ -480,7 +480,7 @@ msgstr ""
msgid "The key '%s' is already used for %s. Choose another one."
msgstr ""
-msgid "Some actions do not have any associated key bindings!"
+msgid "Some actions are left undefined!"
msgstr ""
msgid ""
@@ -581,6 +581,12 @@ msgstr ""
msgid "unknown ical type"
msgstr ""
+msgid "(empty)"
+msgstr ""
+
+msgid "ical_store_event: out of memory"
+msgstr ""
+
msgid "need DTSTART to determine event type."
msgstr ""
@@ -643,9 +649,6 @@ msgstr ""
msgid "malformed summary."
msgstr ""
-msgid "line break in summary."
-msgstr ""
-
msgid "item start date not defined."
msgstr ""
@@ -803,31 +806,37 @@ msgstr ""
msgid "failed to open key file"
msgstr ""
-msgid ""
-"\n"
-"Too many errors while reading configuration file!\n"
-"Please backup your keys file, remove it from directory, and launch calcurse "
-"again.\n"
+msgid "Could not read key label"
msgstr ""
-msgid "Could not read key label"
+#, c-format
+msgid "Key label not recognized: \"%s\""
msgstr ""
-msgid "Key label not recognized"
+#, c-format
+msgid "No keys assigned to \"%s\"."
msgstr ""
#, c-format
-msgid "Error reading key: \"%s\""
+msgid "Keyname not recognized: \"%s\""
msgstr ""
#, c-format
-msgid "\"%s\" assigned multiple times!"
+msgid "\"%s\" assigned twice: \"%s\"."
+msgstr ""
+
+#, c-format
+msgid ""
+"Action \"%s\" absent, but default key \"%s\" assigned to another action."
+msgstr ""
+
+msgid "Errors in the keys file."
msgstr ""
-msgid "There were some errors when loading keys file."
+msgid "Remove offending line(s) from the keys file, aborting..."
msgstr ""
-msgid "Too many errors while reading keys file, aborting..."
+msgid "Some actions do not have any associated key bindings!"
msgstr ""
#, c-format
@@ -954,6 +963,9 @@ msgstr ""
msgid "Chg Win"
msgstr ""
+msgid "Prev Win"
+msgstr ""
+
msgid "Import"
msgstr ""
@@ -1132,6 +1144,9 @@ msgstr ""
msgid "Select next panel in calcurse main screen."
msgstr ""
+msgid "Select previous panel in calcurse main screen."
+msgstr ""
+
msgid "Import data from an external file."
msgstr ""
@@ -1252,7 +1267,7 @@ msgid "FATAL ERROR: null file pointer."
msgstr ""
#, c-format
-msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
+msgid "Default key(s) assigned to %d action%s."
msgstr ""
msgid "xmalloc: zero size"
@@ -1370,9 +1385,6 @@ msgstr ""
msgid "(Log activity when running in background)"
msgstr ""
-msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
-msgstr ""
-
msgid "Enter the number of seconds (0 not to be warned before an appointment)"
msgstr ""
@@ -1761,7 +1773,7 @@ msgstr ""
msgid ""
"\n"
-"Copyright (c) 2004-2020 calcurse Development Team.\n"
+"Copyright (c) 2004-2023 calcurse Development Team.\n"
"This is free software; see the source for copying conditions.\n"
msgstr ""
diff --git a/po/de.po b/po/de.po
index 63c51b1..19dcf19 100644
--- a/po/de.po
+++ b/po/de.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2021-04-10 09:12-0400\n"
+"POT-Creation-Date: 2023-05-22 14:19-0400\n"
"PO-Revision-Date: 2020-10-12 15:20+0000\n"
"Last-Translator: Lukas Fleischer\n"
"Language-Team: German (http://www.transifex.com/lfleischer/calcurse/language/"
@@ -59,7 +59,7 @@ msgstr "Der Aufruf `calcurse -h` zeigt weitere Hilfen."
msgid "calcurse %s -- text-based organizer\n"
msgstr "calcurse %s -- Terminplaner im Textmodus\n"
-msgid "Copyright (c) 2004-2020 calcurse Development Team."
+msgid "Copyright (c) 2004-2023 calcurse Development Team."
msgstr ""
msgid "This is free software; see the source for copying conditions."
@@ -437,12 +437,6 @@ msgstr ""
"(Ist JA gewählt, ist eine Bestätigung erforderlich, um ein Ereignis zu "
"löschen)"
-msgid "Monday"
-msgstr "Montag"
-
-msgid "Sunday"
-msgstr "Sonntag"
-
msgid "(specifies the first day of week in the calendar view)"
msgstr "(lege den ersten Tag der Woche in der Kalenderansicht fest)"
@@ -467,12 +461,19 @@ msgstr "(Position des Titels in der Terminleiste)"
msgid "(Format of the date displayed in the appointments panel)"
msgstr "(Format des Datums in der Termin-Anzeige)"
+#, fuzzy
+msgid "(Format of the time displayed in the appointments panel)"
+msgstr "(Format des Datums in der Termin-Anzeige)"
+
msgid "Enter a text string (an empty string for the default text)"
msgstr ""
msgid "Enter the date format (see 'man 3 strftime' for possible formats) "
msgstr "Geben Sie das Datumsformat an (vgl. 'man 3 strftime')"
+msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
+msgstr "Zeitformat eingeben (vgl. 'man 3 strftime')"
+
msgid "Enter the date format: "
msgstr "Datumsformat eingeben:"
@@ -487,8 +488,8 @@ msgstr "Allgemeine Einstellungen"
msgid "Undefined option!"
msgstr "Unbestimmte Einstellung!"
-msgid "undefined"
-msgstr "unbestimmt"
+msgid "UNDEFINED"
+msgstr ""
msgid "keys configuration"
msgstr "Tasteneinstellung"
@@ -500,8 +501,9 @@ msgstr "Taste drücken, die zugewiesen werden soll:"
msgid "The key '%s' is already used for %s. Choose another one."
msgstr "Die Taste '%s' wird schon von %s benutzt. Wählen Sie eine andere."
-msgid "Some actions do not have any associated key bindings!"
-msgstr "Einige Aktionen haben keine Tastenzuordnung!"
+#, fuzzy
+msgid "Some actions are left undefined!"
+msgstr "Option nicht definiert"
msgid ""
"Sorry, colors are not supported by your terminal\n"
@@ -606,6 +608,13 @@ msgstr "Hauptspeicher reicht nicht aus"
msgid "unknown ical type"
msgstr "Unbekannter ICal-Typ"
+msgid "(empty)"
+msgstr ""
+
+#, fuzzy
+msgid "ical_store_event: out of memory"
+msgstr "xcalloc: Speicher ist voll"
+
msgid "need DTSTART to determine event type."
msgstr ""
@@ -674,9 +683,6 @@ msgstr ""
msgid "malformed summary."
msgstr ""
-msgid "line break in summary."
-msgstr ""
-
#, fuzzy
msgid "item start date not defined."
msgstr "Anfangsdatum des Eintrags fehlt."
@@ -844,37 +850,40 @@ msgstr ""
msgid "failed to open key file"
msgstr "Konnte Tastenkonfigurationsdatei nicht öffnen"
-msgid ""
-"\n"
-"Too many errors while reading configuration file!\n"
-"Please backup your keys file, remove it from directory, and launch calcurse "
-"again.\n"
-msgstr ""
-"\n"
-"Zu viele Fehler beim Lesen der Konfigurationsdatei!\n"
-"Bitte die Einstellungsdatei der Tastaturkürzel sichern, diese aus dem\n"
-"Verzeichnis löschen und calcurse neu starten.\n"
-
msgid "Could not read key label"
msgstr "Tastenbezeichnung nicht lesbar"
-msgid "Key label not recognized"
+#, fuzzy, c-format
+msgid "Key label not recognized: \"%s\""
msgstr "Tastenbezeichnung nicht erkannt"
#, c-format
-msgid "Error reading key: \"%s\""
-msgstr "Fehler beim Lesen der Taste \"%s\""
+msgid "No keys assigned to \"%s\"."
+msgstr ""
-#, c-format
-msgid "\"%s\" assigned multiple times!"
+#, fuzzy, c-format
+msgid "Keyname not recognized: \"%s\""
+msgstr "Tastenbezeichnung nicht erkannt"
+
+#, fuzzy, c-format
+msgid "\"%s\" assigned twice: \"%s\"."
msgstr "\"%s\" ist mehrfach zugeordnet!"
-msgid "There were some errors when loading keys file."
+#, c-format
+msgid ""
+"Action \"%s\" absent, but default key \"%s\" assigned to another action."
+msgstr ""
+
+msgid "Errors in the keys file."
msgstr ""
-msgid "Too many errors while reading keys file, aborting..."
+#, fuzzy
+msgid "Remove offending line(s) from the keys file, aborting..."
msgstr "Zu viele Fehler beim Lesen der 'keys'-Datei, Abbruch..."
+msgid "Some actions do not have any associated key bindings!"
+msgstr "Einige Aktionen haben keine Tastenzuordnung!"
+
#, c-format
msgid "FATAL ERROR: could not create %s: %s\n"
msgstr "SCHWERER FEHLER Konnte %s nicht erstellen: %s\n"
@@ -1004,6 +1013,9 @@ msgstr "Einfügen"
msgid "Chg Win"
msgstr "Wechseln"
+msgid "Prev Win"
+msgstr ""
+
msgid "Import"
msgstr "Importieren"
@@ -1191,6 +1203,10 @@ msgstr "Item an aktueller Position einfügen."
msgid "Select next panel in calcurse main screen."
msgstr "Wähle nächstes Fenster im calcurse-Hauptbildschirm."
+#, fuzzy
+msgid "Select previous panel in calcurse main screen."
+msgstr "Wähle nächstes Fenster im calcurse-Hauptbildschirm."
+
msgid "Import data from an external file."
msgstr "Importiere Daten von einer externen Datei."
@@ -1323,9 +1339,8 @@ msgid "FATAL ERROR: null file pointer."
msgstr "SCHWERER FEHLER: Null-Datei-Zeiger."
#, c-format
-msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
+msgid "Default key(s) assigned to %d action%s."
msgstr ""
-"Beim Hinzufügen einer Default-Taste für \"%s\" war \"%s\" bereits zugewiesen!"
msgid "xmalloc: zero size"
msgstr "xmalloc: Länge 0"
@@ -1443,9 +1458,6 @@ msgstr ""
msgid "(Log activity when running in background)"
msgstr "(Aufzeichnen von Aktivitäten, wenn im Hintergrund ausgeführt)"
-msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
-msgstr "Zeitformat eingeben (vgl. 'man 3 strftime')"
-
msgid "Enter the number of seconds (0 not to be warned before an appointment)"
msgstr "Geben Sie die Zeit in Sekunden ein (0 um keine Hinweis zu erhalten)."
@@ -1849,11 +1861,12 @@ msgstr "unbekannte Ansicht"
msgid "Usage: calcurse-upgrade [-h|-v|--config <file>]"
msgstr "Verwendung: calcurse-upgrade [-h|-v|--config <file>]"
+#, fuzzy
msgid ""
"\n"
-"Copyright (c) 2004-2020 calcurse Development Team.\n"
+"Copyright (c) 2004-2023 calcurse Development Team.\n"
"This is free software; see the source for copying conditions.\n"
-msgstr ""
+msgstr "This is free software; see the source for copying conditions."
msgid "unrecognized option:"
msgstr "unbekannte Option:"
@@ -1903,6 +1916,36 @@ msgstr "Aktualisiere Konfigurationsanweisungen..."
msgid "Remove temporary backup..."
msgstr "Entferne temporäres Backup..."
+#~ msgid "Monday"
+#~ msgstr "Montag"
+
+#~ msgid "Sunday"
+#~ msgstr "Sonntag"
+
+#~ msgid "undefined"
+#~ msgstr "unbestimmt"
+
+#~ msgid ""
+#~ "\n"
+#~ "Too many errors while reading configuration file!\n"
+#~ "Please backup your keys file, remove it from directory, and launch "
+#~ "calcurse again.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Zu viele Fehler beim Lesen der Konfigurationsdatei!\n"
+#~ "Bitte die Einstellungsdatei der Tastaturkürzel sichern, diese aus dem\n"
+#~ "Verzeichnis löschen und calcurse neu starten.\n"
+
+#, c-format
+#~ msgid "Error reading key: \"%s\""
+#~ msgstr "Fehler beim Lesen der Taste \"%s\""
+
+#, c-format
+#~ msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
+#~ msgstr ""
+#~ "Beim Hinzufügen einer Default-Taste für \"%s\" war \"%s\" bereits "
+#~ "zugewiesen!"
+
#~ msgid ""
#~ "(if set to YES, messages about loaded and saved data will be displayed)"
#~ msgstr ""
diff --git a/po/en.po b/po/en.po
index 56beca4..72378ee 100644
--- a/po/en.po
+++ b/po/en.po
@@ -1,15 +1,13 @@
-# English/GB translation of calcurse.
-# Copyright (C) 2006 Copyright (c) Frederic Culot <frederic@culot.org>
+# English/GB translation of calcurse
+# Copyright (C) 2021 calcurse Development Team <misc@calcurse.org>
# This file is distributed under the same license as the calcurse package.
# Neil Williams <linux@codehelp.co.uk>, 2006.
-# , fuzzy
-#
#
msgid ""
msgstr ""
-"Project-Id-Version: calcurse 1.4\n"
+"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2021-04-10 09:12-0400\n"
+"POT-Creation-Date: 2023-05-22 14:19-0400\n"
"PO-Revision-Date: 2006-07-03 00:05+0100\n"
"Last-Translator: Neil Williams <linux@codehelp.co.uk>\n"
"Language-Team: English/GB <en_GB@li.org>\n"
@@ -17,25 +15,22 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "null pointer"
msgstr ""
-#, fuzzy
msgid "illegal date in appointment"
-msgstr "Appointment :"
+msgstr ""
-#, fuzzy
msgid "error in appointment description"
-msgstr "Appointment :"
+msgstr ""
-#, fuzzy
msgid "date error in appointment"
-msgstr "Appointment :"
+msgstr ""
-#, fuzzy
msgid "no such appointment"
-msgstr "Appointment :"
+msgstr ""
msgid ""
"Usage:\n"
@@ -47,31 +42,21 @@ msgid ""
"daemon"
msgstr ""
-#, fuzzy
msgid "Try `calcurse -h` for more information."
-msgstr "Try 'calcurse -h' for more information.\n"
+msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "calcurse %s -- text-based organizer\n"
-msgstr "Calcurse %s - text-based organizer\n"
+msgstr ""
-#, fuzzy
-msgid "Copyright (c) 2004-2020 calcurse Development Team."
+msgid "Copyright (c) 2004-2023 calcurse Development Team."
msgstr ""
-"\n"
-"Copyright (c) 2004-2006 Frederic Culot.\n"
-"This is free software; see the source for copying conditions.\n"
-#, fuzzy
msgid "This is free software; see the source for copying conditions."
msgstr ""
-"\n"
-"Copyright (c) 2004-2006 Frederic Culot.\n"
-"This is free software; see the source for copying conditions.\n"
-#, fuzzy
msgid "Operations in command line mode:"
-msgstr "starting interactive mode...\n"
+msgstr ""
msgid " -Q, --query Print items in a given query range"
msgstr ""
@@ -155,20 +140,15 @@ msgid ""
" -x, --export[<format>] Export to stdout in ical (default) or pcal format"
msgstr ""
-#, fuzzy
msgid ""
"For more information, type '?' from within calcurse, or read the manpage."
msgstr ""
-"\n"
-"For more information, type '?' from within Calcurse, or read the manpage.\n"
-#, fuzzy
msgid "Submit feature requests and suggestions to <misc@calcurse.org>."
-msgstr "Mail bug reports and suggestions to <misc@calcurse.org>.\n"
+msgstr ""
-#, fuzzy
msgid "Submit bug reports to <bugs@calcurse.org>."
-msgstr "Mail bug reports and suggestions to <misc@calcurse.org>.\n"
+msgstr ""
#, c-format
msgid ""
@@ -192,11 +172,10 @@ msgid "completed tasks:\n"
msgstr ""
msgid "to do:\n"
-msgstr "to do:\n"
+msgstr ""
-#, fuzzy
msgid "next appointment:\n"
-msgstr "Appointment :"
+msgstr ""
#, c-format
msgid "invalid range: %s"
@@ -236,13 +215,13 @@ msgstr ""
msgid "calcurse is running (pid = %d)"
msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "invalid input date format: %s"
-msgstr "Enter the new ToDo item : "
+msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "invalid output date format: %s"
-msgstr "Enter the new ToDo item : "
+msgstr ""
msgid "invalid argument combination"
msgstr ""
@@ -256,13 +235,11 @@ msgstr ""
msgid "Unable to find documentation."
msgstr ""
-#, fuzzy
msgid "Data were saved successfully"
-msgstr "The data files were successfully saved"
+msgstr ""
-#, fuzzy
msgid "Data were saved/reloaded successfully"
-msgstr "The data files were successfully saved"
+msgstr ""
msgid "Save cancelled"
msgstr ""
@@ -270,17 +247,14 @@ msgstr ""
msgid "Data were already saved"
msgstr ""
-#, fuzzy
msgid "Cannot open data file"
-msgstr "Failed to open todo file"
+msgstr ""
-#, fuzzy
msgid "Data were reloaded successfully"
-msgstr "The data files were successfully saved"
+msgstr ""
-#, fuzzy
msgid "Date were merged/reloaded successfully"
-msgstr "The data files were successfully saved"
+msgstr ""
msgid "Reload cancelled"
msgstr ""
@@ -297,9 +271,8 @@ msgstr ""
msgid "There are unsaved changes. Should they be saved?"
msgstr ""
-#, fuzzy
msgid "Do you really want to quit?"
-msgstr "Do you really want to quit ?"
+msgstr ""
msgid "Command: [ h(elp) | w(rite)(!) | q(uit)(!) | wq(!) | n(ext) | p(rev) ]"
msgstr ""
@@ -330,13 +303,11 @@ msgstr ""
msgid "No such command: %s"
msgstr ""
-#, fuzzy
msgid "unknown color"
-msgstr "Colour"
+msgstr "unknown colour"
-#, fuzzy
msgid "failed to open configuration file"
-msgstr "Failed to open config file"
+msgstr ""
#, c-format
msgid "invalid configuration directive: \"%s\""
@@ -351,21 +322,20 @@ msgstr ""
msgid "unknown user option: \"%s\" (ignored)"
msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "invalid option format: \"%s\" (ignored)"
-msgstr "Enter the new ToDo item : "
+msgstr ""
#, c-format
msgid "unknown user option: \"%s\" (disabled)"
msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "invalid option format: \"%s\" (disabled)"
-msgstr "Enter the new ToDo item : "
+msgstr ""
-#, fuzzy
msgid "layout configuration"
-msgstr "CalCurse %s | general options"
+msgstr ""
msgid "Foreground"
msgstr ""
@@ -376,19 +346,17 @@ msgstr ""
msgid "(terminal's default)"
msgstr ""
-#, fuzzy
msgid "color theme"
-msgstr "CalCurse %s | help"
+msgstr "colour theme"
-#, fuzzy
msgid "(if set to YES, compact panels are used)"
-msgstr "(if set to YES, progress bar will not be displayed when saving data)"
+msgstr ""
msgid "Calendar"
-msgstr "Calendar"
+msgstr ""
msgid "Appointments"
-msgstr "Appointments"
+msgstr ""
msgid "TODO"
msgstr ""
@@ -433,7 +401,7 @@ msgid "(display more than one day in the appointments panel)"
msgstr ""
msgid "(if set to YES, automatic save is done when quitting)"
-msgstr "(if set to YES, automatic save is done when quitting)"
+msgstr ""
msgid "(run the garbage collector when quitting)"
msgstr ""
@@ -445,15 +413,9 @@ msgid "(if YES, system events are turned into appointments (or else deleted))"
msgstr ""
msgid "(if set to YES, confirmation is required before quitting)"
-msgstr "(if set to YES, confirmation is required before quitting)"
-
-msgid "(if set to YES, confirmation is required before deleting an event)"
-msgstr "(if set to YES, confirmation is required before deleting an event)"
-
-msgid "Monday"
msgstr ""
-msgid "Sunday"
+msgid "(if set to YES, confirmation is required before deleting an event)"
msgstr ""
msgid "(specifies the first day of week in the calendar view)"
@@ -480,32 +442,35 @@ msgstr ""
msgid "(Format of the date displayed in the appointments panel)"
msgstr ""
+msgid "(Format of the time displayed in the appointments panel)"
+msgstr ""
+
msgid "Enter a text string (an empty string for the default text)"
msgstr ""
msgid "Enter the date format (see 'man 3 strftime' for possible formats) "
msgstr ""
-#, fuzzy
+msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
+msgstr ""
+
msgid "Enter the date format: "
-msgstr "Enter the new ToDo item : "
+msgstr ""
msgid "Enter the delay, in minutes, between automatic saves (0 to disable) "
msgstr ""
-#, fuzzy
msgid "general options"
-msgstr "CalCurse %s | general options"
+msgstr ""
msgid "Undefined option!"
msgstr ""
-msgid "undefined"
+msgid "UNDEFINED"
msgstr ""
-#, fuzzy
msgid "keys configuration"
-msgstr "CalCurse %s | general options"
+msgstr ""
msgid "Press the key you want to assign to:"
msgstr ""
@@ -514,7 +479,7 @@ msgstr ""
msgid "The key '%s' is already used for %s. Choose another one."
msgstr ""
-msgid "Some actions do not have any associated key bindings!"
+msgid "Some actions are left undefined!"
msgstr ""
msgid ""
@@ -524,67 +489,62 @@ msgstr ""
"Sorry, colours are not supported by your terminal\n"
"(Press [ENTER] to continue)"
-#, fuzzy, c-format
+#, c-format
msgid "Could not save %s."
-msgstr "Enter description :"
+msgstr ""
msgid "unknown item type"
msgstr ""
-#, fuzzy
msgid "Note:"
-msgstr "Add Item"
+msgstr ""
-#, fuzzy
msgid "Event:"
-msgstr "Event :"
+msgstr ""
-#, fuzzy
msgid "Appointment:"
-msgstr "Appointment :"
+msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "Could not stop daemon properly: %s\n"
-msgstr "Enter description :"
+msgstr ""
#, c-format
msgid "terminated at %s with signal %d\n"
msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "Could not remove daemon lock file: %s\n"
-msgstr "Enter description :"
+msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "Could not fork: %s\n"
-msgstr "Enter description :"
+msgstr ""
#, c-format
msgid "Could not detach from the controlling terminal: %s\n"
msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "Could not change working directory: %s\n"
-msgstr "Enter description :"
+msgstr ""
msgid "Cannot daemonize, aborting\n"
msgstr ""
-#, fuzzy
msgid "Could not set lock file\n"
-msgstr "Enter description :"
+msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "Could not access \"%s\": %s\n"
-msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
+msgstr ""
#, c-format
msgid "started at %s\n"
msgstr ""
-#, fuzzy
msgid "error loading next appointment\n"
-msgstr "Appointment :"
+msgstr ""
#, c-format
msgid "launching notification at %s for: \"%s\"\n"
@@ -603,16 +563,15 @@ msgstr[1] ""
msgid "awakened at %s\n"
msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "Could not stop calcurse daemon: %s\n"
-msgstr "Enter description :"
+msgstr ""
msgid "illegal date in event"
msgstr ""
-#, fuzzy
msgid "date error in event\n"
-msgstr "FATAL ERROR in event_scan: date error in the event\n"
+msgstr ""
msgid "Internal error: line too long"
msgstr ""
@@ -620,9 +579,14 @@ msgstr ""
msgid "out of memory"
msgstr ""
-#, fuzzy
msgid "unknown ical type"
-msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
+msgstr ""
+
+msgid "(empty)"
+msgstr ""
+
+msgid "ical_store_event: out of memory"
+msgstr ""
msgid "need DTSTART to determine event type."
msgstr ""
@@ -639,9 +603,8 @@ msgstr ""
msgid "rrule frequency not supported."
msgstr ""
-#, fuzzy
msgid "invalid interval."
-msgstr "Enter the new ToDo item : "
+msgstr ""
msgid "either until or count."
msgstr ""
@@ -649,9 +612,8 @@ msgstr ""
msgid "missing until value."
msgstr ""
-#, fuzzy
msgid "invalid until format."
-msgstr "Enter the new ToDo item : "
+msgstr ""
msgid "invalid count value."
msgstr ""
@@ -671,31 +633,25 @@ msgstr ""
msgid "malformed exceptions line."
msgstr ""
-#, fuzzy
msgid "invalid exception."
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "malformed %s line."
-msgstr "Enter description :"
+msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "malformed %s."
-msgstr "Enter description :"
+msgstr ""
-#, fuzzy
msgid "malformed summary line."
-msgstr "Enter description :"
-
-msgid "malformed summary."
msgstr ""
-msgid "line break in summary."
+msgid "malformed summary."
msgstr ""
-#, fuzzy
msgid "item start date not defined."
-msgstr "The day you entered is not valid"
+msgstr ""
msgid "malformed start time line."
msgstr ""
@@ -715,17 +671,14 @@ msgstr ""
msgid "end must be later than start."
msgstr ""
-#, fuzzy
msgid "either end or duration."
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
-#, fuzzy
msgid "malformed duration line."
-msgstr "Enter description :"
+msgstr ""
-#, fuzzy
msgid "invalid duration."
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
msgid "exception date, but no recurrence rule."
msgstr ""
@@ -748,9 +701,8 @@ msgstr ""
msgid "item could not be identified."
msgstr ""
-#, fuzzy
msgid "only one description allowed."
-msgstr "Enter description :"
+msgstr ""
msgid "only one location allowed."
msgstr ""
@@ -758,9 +710,8 @@ msgstr ""
msgid "The ical file seems to be malformed. The end of item was not found."
msgstr ""
-#, fuzzy
msgid "could not retrieve item summary."
-msgstr "Enter description :"
+msgstr ""
msgid "item priority is invalid (must be between 0 and 9)."
msgstr ""
@@ -774,13 +725,12 @@ msgstr ""
msgid "The file cannot be accessed, please enter another file name."
msgstr ""
-#, fuzzy
msgid "Press [ENTER] to continue."
-msgstr "Press [ENTER] to continue"
+msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "Failed to open \"%s\", - %s\n"
-msgstr "Failed to open todo file"
+msgstr ""
msgid "Failed to build message\n"
msgstr ""
@@ -797,9 +747,8 @@ msgstr ""
msgid "%s does not exist"
msgstr ""
-#, fuzzy
msgid "Data files have changed and will be overwritten:"
-msgstr "Data files found. Data will be loaded now."
+msgstr ""
msgid "(c)ontinue"
msgstr ""
@@ -813,37 +762,29 @@ msgstr ""
msgid "[cma]"
msgstr ""
-#, fuzzy
msgid "failed to open appointment file"
-msgstr "Failed to open config file"
+msgstr ""
-#, fuzzy
msgid "syntax error in the item date"
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
-#, fuzzy
msgid "no event nor appointment found"
-msgstr "FATAL ERROR in load_app: no event nor appointment found\n"
+msgstr ""
-#, fuzzy
msgid "syntax error in item time or duration"
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
-#, fuzzy
msgid "syntax error in item identifier"
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
-#, fuzzy
msgid "wrong format in the appointment or event"
-msgstr "FATAL ERROR in load_app: wrong format in the appointment or event\n"
+msgstr ""
-#, fuzzy
msgid "syntax error in item repetition"
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
-#, fuzzy
msgid "syntax error in until date"
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
msgid "until date error"
msgstr ""
@@ -854,58 +795,60 @@ msgstr ""
msgid "missing end of recurrence"
msgstr ""
-#, fuzzy
msgid "syntax error in item state"
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
-#, fuzzy
msgid "failed to open todo file"
-msgstr "Failed to open todo file"
+msgstr ""
msgid "Screen data have changed and will be lost:"
msgstr ""
-#, fuzzy
msgid "failed to open key file"
-msgstr "Failed to open todo file"
-
-msgid ""
-"\n"
-"Too many errors while reading configuration file!\n"
-"Please backup your keys file, remove it from directory, and launch calcurse "
-"again.\n"
msgstr ""
msgid "Could not read key label"
msgstr ""
-msgid "Key label not recognized"
+#, c-format
+msgid "Key label not recognized: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "No keys assigned to \"%s\"."
+msgstr ""
+
+#, c-format
+msgid "Keyname not recognized: \"%s\""
msgstr ""
#, c-format
-msgid "Error reading key: \"%s\""
+msgid "\"%s\" assigned twice: \"%s\"."
msgstr ""
#, c-format
-msgid "\"%s\" assigned multiple times!"
+msgid ""
+"Action \"%s\" absent, but default key \"%s\" assigned to another action."
msgstr ""
-msgid "There were some errors when loading keys file."
+msgid "Errors in the keys file."
msgstr ""
-msgid "Too many errors while reading keys file, aborting..."
+msgid "Remove offending line(s) from the keys file, aborting..."
msgstr ""
-#, fuzzy, c-format
+msgid "Some actions do not have any associated key bindings!"
+msgstr ""
+
+#, c-format
msgid "FATAL ERROR: could not create %s: %s\n"
-msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
+msgstr ""
-#, fuzzy
msgid "The data were successfully exported"
-msgstr "The data files were successfully saved"
+msgstr ""
msgid "Press [ENTER] to continue"
-msgstr "Press [ENTER] to continue"
+msgstr ""
msgid "unknown export type"
msgstr ""
@@ -926,9 +869,8 @@ msgstr ""
msgid "FATAL ERROR: the input file cannot be accessed, Aborting..."
msgstr ""
-#, fuzzy
msgid "FATAL ERROR: wrong import mode"
-msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
+msgstr ""
#, c-format
msgid "%d app"
@@ -1002,13 +944,13 @@ msgid "Credits"
msgstr ""
msgid "Help"
-msgstr "Help"
+msgstr ""
msgid "Quit"
-msgstr "Quit"
+msgstr ""
msgid "Save"
-msgstr "Save"
+msgstr ""
msgid "Reload"
msgstr ""
@@ -1019,9 +961,11 @@ msgstr ""
msgid "Paste"
msgstr ""
-#, fuzzy
msgid "Chg Win"
-msgstr "Chg View"
+msgstr ""
+
+msgid "Prev Win"
+msgstr ""
msgid "Import"
msgstr ""
@@ -1029,41 +973,35 @@ msgstr ""
msgid "Export"
msgstr ""
-#, fuzzy
msgid "Go to"
-msgstr "Goto:\n"
+msgstr ""
msgid "OtherCmd"
msgstr ""
msgid "Config"
-msgstr "Config"
+msgstr ""
msgid "Redraw"
-msgstr "Redraw"
+msgstr ""
-#, fuzzy
msgid "Add Appt"
-msgstr "Add Item"
+msgstr ""
msgid "Add Todo"
msgstr ""
-#, fuzzy
msgid "-1 Day"
-msgstr "-/+1 Day"
+msgstr ""
-#, fuzzy
msgid "+1 Day"
-msgstr "-/+1 Day"
+msgstr ""
-#, fuzzy
msgid "-1 Week"
-msgstr "-/+1 Week"
+msgstr ""
-#, fuzzy
msgid "+1 Week"
-msgstr "-/+1 Week"
+msgstr ""
msgid "-1 Month"
msgstr ""
@@ -1077,13 +1015,11 @@ msgstr ""
msgid "+1 Year"
msgstr ""
-#, fuzzy
msgid "Nxt View"
-msgstr "View"
+msgstr ""
-#, fuzzy
msgid "Prv View"
-msgstr "View"
+msgstr ""
msgid "Today"
msgstr ""
@@ -1097,51 +1033,44 @@ msgstr ""
msgid "Left"
msgstr ""
-#, fuzzy
msgid "Down"
-msgstr "Up/Down"
+msgstr ""
msgid "Up"
msgstr ""
-#, fuzzy
msgid "beg Week"
-msgstr "-/+1 Week"
+msgstr ""
-#, fuzzy
msgid "end Week"
-msgstr "-/+1 Week"
+msgstr ""
msgid "Add Item"
-msgstr "Add Item"
+msgstr ""
msgid "Del Item"
-msgstr "Del Item"
+msgstr ""
-#, fuzzy
msgid "Edit Itm"
-msgstr "Add Item"
+msgstr ""
msgid "View"
-msgstr "View"
+msgstr ""
msgid "Pipe"
msgstr ""
-#, fuzzy
msgid "Flag Itm"
-msgstr "Del Item"
+msgstr ""
msgid "Repeat"
msgstr ""
-#, fuzzy
msgid "EditNote"
-msgstr "Add Item"
+msgstr ""
-#, fuzzy
msgid "ViewNote"
-msgstr "View"
+msgstr ""
msgid "Prio.+"
msgstr ""
@@ -1159,25 +1088,23 @@ msgid ""
"# interface. It should not be edited directly.\n"
msgstr ""
-#, fuzzy
msgid "FATAL ERROR: could not create default keys file."
-msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
+msgstr ""
-#, fuzzy
msgid "FATAL ERROR: key value out of bounds"
-msgstr "FATAL ERROR in update_windows: no window selected\n"
+msgstr ""
msgid "General"
-msgstr "General"
+msgstr ""
msgid "Layout"
-msgstr "Layout"
+msgstr ""
msgid "Sidebar"
msgstr ""
msgid "Color"
-msgstr "Colour"
+msgstr ""
msgid "Notify"
msgstr ""
@@ -1185,9 +1112,8 @@ msgstr ""
msgid "Keys"
msgstr ""
-#, fuzzy
msgid "Unknown"
-msgstr "Colour"
+msgstr ""
msgid "Cancel the ongoing action."
msgstr ""
@@ -1219,6 +1145,9 @@ msgstr ""
msgid "Select next panel in calcurse main screen."
msgstr ""
+msgid "Select previous panel in calcurse main screen."
+msgstr ""
+
msgid "Import data from an external file."
msgstr ""
@@ -1231,9 +1160,8 @@ msgstr ""
msgid "Show next possible actions inside status bar."
msgstr ""
-#, fuzzy
msgid "Enter the configuration menu."
-msgstr "CalCurse %s | general options"
+msgstr ""
msgid "Redraw calcurse's screen."
msgstr ""
@@ -1336,12 +1264,11 @@ msgstr ""
msgid "Lower a task priority inside the todo panel."
msgstr ""
-#, fuzzy
msgid "FATAL ERROR: null file pointer."
-msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
+msgstr ""
#, c-format
-msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
+msgid "Default key(s) assigned to %d action%s."
msgstr ""
msgid "xmalloc: zero size"
@@ -1371,9 +1298,8 @@ msgstr ""
msgid "could not allocate memory to store block info"
msgstr ""
-#, fuzzy
msgid "Block not found"
-msgstr "Appointment :"
+msgstr ""
#, c-format
msgid "overflow at %s"
@@ -1435,9 +1361,8 @@ msgstr ""
msgid "Warning: could not open %s, Aborting..."
msgstr ""
-#, fuzzy
msgid "(if set to YES, notify-bar will be displayed)"
-msgstr "(if set to YES, progress bar will not be displayed when saving data)"
+msgstr ""
msgid "(Format of the date to be displayed inside notify-bar)"
msgstr ""
@@ -1461,9 +1386,6 @@ msgstr ""
msgid "(Log activity when running in background)"
msgstr ""
-msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
-msgstr ""
-
msgid "Enter the number of seconds (0 not to be warned before an appointment)"
msgstr ""
@@ -1504,32 +1426,26 @@ msgstr ""
msgid "event not found"
msgstr ""
-#, fuzzy
msgid "appointment not found"
-msgstr "Appointment :"
+msgstr ""
-#, fuzzy
msgid "syntax error in bymonthday"
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
-#, fuzzy
msgid "syntax error in bywday"
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
-#, fuzzy
msgid "syntax error in bymonth"
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
msgid "illegal bymonth value"
msgstr ""
-#, fuzzy
msgid "syntax error in item date"
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
-#, fuzzy
msgid "date error in item exception"
-msgstr "FATAL ERROR in event_scan: date error in the event\n"
+msgstr ""
#, c-format
msgid "Error setting signal #%d : %s\n"
@@ -1545,22 +1461,22 @@ msgid "ERROR setting first day of week"
msgstr ""
msgid "The day you entered is not valid"
-msgstr "The day you entered is not valid"
+msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "Enter the day to go to [ENTER for today] : %s"
-msgstr "Enter the day to go to [ENTER for today] : dd/mm/yyyy"
+msgstr ""
#, c-format
msgid "The move failed (%d/%d/%d)."
msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "Enter start date [%s] and/or time ([hh:mm] or [hhmm]):"
-msgstr "Enter end time ([hh:mm] or [h:mm]) or duration (in minutes) : "
+msgstr ""
msgid "Press [Enter] to continue"
-msgstr "Press [Enter] to continue"
+msgstr ""
msgid "Invalid date or time."
msgstr ""
@@ -1582,23 +1498,20 @@ msgstr ""
msgid "Time: hh:mm (hh: or :mm) or hhmm. Duration: +mm, +hh:mm, +??d??h??m."
msgstr ""
-#, fuzzy
msgid "Invalid time or duration."
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
msgid "Invalid date: end time must come after start time."
msgstr ""
-#, fuzzy
msgid "Enter the new item description:"
-msgstr "Enter description :"
+msgstr ""
msgid "Exception days:"
msgstr ""
-#, fuzzy
msgid "Invalid date format - try again:."
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
msgid "Limit repetition to listed days."
msgstr ""
@@ -1651,20 +1564,17 @@ msgstr ""
msgid "Monthdays 1|..|31 or -1|..|-31, space-separated list, '?' for help:"
msgstr ""
-#, fuzzy
msgid "Invalid format - try again."
-msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
+msgstr ""
-#, fuzzy
msgid "Press any key to continue."
-msgstr "Press any key to continue..."
+msgstr ""
msgid "Base period:"
msgstr ""
-#, fuzzy
msgid "day"
-msgstr "May"
+msgstr ""
msgid "week"
msgstr ""
@@ -1684,9 +1594,8 @@ msgstr ""
msgid "Invalid frequency."
msgstr ""
-#, fuzzy
msgid "Until date, increment or repeat count ('?' for input formats):"
-msgstr "Possible argument formats are : 'mm/dd/yyyy' or 'n'\n"
+msgstr ""
#, c-format
msgid "Date: %s (year, month may be omitted, endless: 0)."
@@ -1709,16 +1618,14 @@ msgstr ""
msgid "Repetition must begin on start day (%s); any change discarded."
msgstr ""
-#, fuzzy
msgid "Description"
-msgstr "Enter description :"
+msgstr ""
msgid "Repetition"
msgstr ""
-#, fuzzy
msgid "Edit: "
-msgstr "Add Item"
+msgstr ""
msgid "Start time"
msgstr ""
@@ -1732,18 +1639,15 @@ msgstr ""
msgid "Pipe item to external command:"
msgstr ""
-#, fuzzy
msgid "Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:"
msgstr ""
-"Enter start time ([hh:mm] or [h:mm]), leave blank for an all-day event : "
msgid ""
"Enter end time as date (and/or time) or duration ('?' for input formats):"
msgstr ""
-#, fuzzy
msgid "Enter description:"
-msgstr "Enter description :"
+msgstr ""
#, c-format
msgid "Date: %s (and/or time), year or month may be omitted."
@@ -1787,16 +1691,14 @@ msgstr ""
msgid "A (s)imple or (a)dvanced repetition?"
msgstr ""
-#, fuzzy
msgid "Enter the new TODO item:"
-msgstr "Enter the new ToDo item : "
+msgstr ""
msgid "Enter the TODO priority [0 (none), 1 (highest) - 9 (lowest)]:"
msgstr ""
-#, fuzzy
msgid "Do you really want to delete this task?"
-msgstr "Do you really want to delete this task ?"
+msgstr ""
msgid "This item has a note attached to it. Delete (t)odo or just its (n)ote?"
msgstr ""
@@ -1804,16 +1706,15 @@ msgstr ""
msgid "[tn]"
msgstr ""
-#, fuzzy
msgid "Enter the new TODO description:"
-msgstr "Enter the new ToDo item : "
+msgstr ""
msgid "TODO:"
msgstr ""
-#, fuzzy, c-format
+#, c-format
msgid "Could not remove calcurse lock file: %s\n"
-msgstr "Enter description :"
+msgstr ""
msgid "/!\\ INTERNAL ERROR /!\\"
msgstr ""
@@ -1825,7 +1726,7 @@ msgid "[yn]"
msgstr ""
msgid "Press any key to continue..."
-msgstr "Press any key to continue..."
+msgstr ""
msgid "failure in mktime"
msgstr ""
@@ -1834,10 +1735,10 @@ msgid "error in mktime"
msgstr ""
msgid "yes"
-msgstr "yes"
+msgstr ""
msgid "no"
-msgstr "no"
+msgstr ""
msgid "option not defined"
msgstr ""
@@ -1871,30 +1772,23 @@ msgstr ""
msgid "Usage: calcurse-upgrade [-h|-v|--config <file>]"
msgstr ""
-#, fuzzy
msgid ""
"\n"
-"Copyright (c) 2004-2020 calcurse Development Team.\n"
+"Copyright (c) 2004-2023 calcurse Development Team.\n"
"This is free software; see the source for copying conditions.\n"
msgstr ""
-"\n"
-"Copyright (c) 2004-2006 Frederic Culot.\n"
-"This is free software; see the source for copying conditions.\n"
msgid "unrecognized option:"
msgstr ""
-#, fuzzy
msgid "Configuration file not found:"
-msgstr "FATAL ERROR in fill_config_var: wrong configuration variable format.\n"
+msgstr ""
-#, fuzzy
msgid "Pre-3.0.0 configuration file format detected..."
-msgstr "FATAL ERROR in fill_config_var: wrong configuration variable format.\n"
+msgstr ""
-#, fuzzy
msgid "Create temporary backup of the configuration file..."
-msgstr "Failed to open config file"
+msgstr ""
msgid "Old backup file found:"
msgstr ""
@@ -1923,1027 +1817,3 @@ msgstr ""
msgid "Remove temporary backup..."
msgstr ""
-
-#, fuzzy
-#~ msgid "error while launching command: could not fork"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "(if set to YES, messages about loaded and saved data will be displayed)"
-#~ msgstr ""
-#~ "(if set to YES, messages about loaded and saved data will not be "
-#~ "displayed)"
-
-#, fuzzy
-#~ msgid "empty description."
-#~ msgstr "Enter description :"
-
-#~ msgid "Welcome to Calcurse. Missing data files were created."
-#~ msgstr "Welcome to Calcurse. Missing data files were created."
-
-#~ msgid "Data files found. Data will be loaded now."
-#~ msgstr "Data files found. Data will be loaded now."
-
-#, fuzzy
-#~ msgid "Enter the new repetition type:"
-#~ msgstr "Enter description :"
-
-#, fuzzy
-#~ msgid "Enter the repetition frequency:"
-#~ msgstr "Enter description :"
-
-#, fuzzy
-#~ msgid "Do you really want to delete this item?"
-#~ msgstr "Do you really want to delete this item ?"
-
-#, fuzzy
-#~ msgid "Enter the repetition type:"
-#~ msgstr "Enter description :"
-
-#, fuzzy
-#~ msgid "could not get entire item description."
-#~ msgstr "Enter description :"
-
-#, fuzzy
-#~ msgid "configuration variable unknown: \"%s\""
-#~ msgstr ""
-#~ "FATAL ERROR in fill_config_var: wrong configuration variable format.\n"
-
-#, fuzzy
-#~ msgid "wrong configuration variable format for \"%s\""
-#~ msgstr ""
-#~ "FATAL ERROR in fill_config_var: wrong configuration variable format.\n"
-
-#, fuzzy
-#~ msgid "(if set to YES, progress bar will be displayed when saving data)"
-#~ msgstr ""
-#~ "(if set to YES, progress bar will not be displayed when saving data)"
-
-#~ msgid "Saving..."
-#~ msgstr "Saving..."
-
-#~ msgid "Loading..."
-#~ msgstr "Loading..."
-
-#, fuzzy
-#~ msgid "Exporting..."
-#~ msgstr "aborting...\n"
-
-#~ msgid "Problems accessing data file ..."
-#~ msgstr "Problems accessing data file ..."
-
-#~ msgid "The data files were successfully saved"
-#~ msgstr "The data files were successfully saved"
-
-#, fuzzy
-#~ msgid "You entered an invalid time, should be [hh:mm] or [hhmm]"
-#~ msgstr "You entered an invalid start time, should be [h:mm] or [hh:mm]"
-
-#, fuzzy
-#~ msgid ""
-#~ "Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):"
-#~ msgstr "Enter end time ([hh:mm] or [h:mm]) or duration (in minutes) : "
-
-#, fuzzy
-#~ msgid "The entered date is not valid."
-#~ msgstr "The day you entered is not valid"
-
-#, fuzzy
-#~ msgid "Possible formats are [%s] or '0' for an endless repetition."
-#~ msgstr "Possible argument formats are : 'mm/dd/yyyy' or 'n'\n"
-
-#, fuzzy
-#~ msgid "Enter the new repetition frequency:"
-#~ msgstr "Enter description :"
-
-#, fuzzy
-#~ msgid "Enter end date ([%s]), duration ([+xxwxxd]) or '0':"
-#~ msgstr "Enter end time ([hh:mm] or [h:mm]) or duration (in minutes) : "
-
-#, fuzzy
-#~ msgid "You entered an invalid start time, should be [hh:mm] or [hhmm]"
-#~ msgstr "You entered an invalid start time, should be [h:mm] or [hh:mm]"
-
-#, fuzzy
-#~ msgid ""
-#~ "Invalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], "
-#~ "[+xxxdxxhxxm] or [+mm]"
-#~ msgstr ""
-#~ "You entered an invalid end time, should be [h:mm] or [hh:mm] or [mm]"
-
-#, fuzzy
-#~ msgid "Possible formats are [%s], [+xxwxxd] or '0'."
-#~ msgstr "Possible argument formats are : 'mm/dd/yyyy' or 'n'\n"
-
-#, fuzzy
-#~ msgid "Enter an option number to change its value"
-#~ msgstr "Enter an option number to change its value [Q to quit] "
-
-#, fuzzy
-#~ msgid "The frequence you entered is not valid."
-#~ msgstr "The day you entered is not valid"
-
-#~ msgid "January"
-#~ msgstr "January"
-
-#~ msgid "February"
-#~ msgstr "February"
-
-#~ msgid "March"
-#~ msgstr "March"
-
-#~ msgid "April"
-#~ msgstr "April"
-
-#~ msgid "June"
-#~ msgstr "June"
-
-#~ msgid "July"
-#~ msgstr "July"
-
-#~ msgid "August"
-#~ msgstr "August"
-
-#~ msgid "September"
-#~ msgstr "September"
-
-#~ msgid "October"
-#~ msgstr "October"
-
-#~ msgid "November"
-#~ msgstr "November"
-
-#~ msgid "December"
-#~ msgstr "December"
-
-#~ msgid "Sun"
-#~ msgstr "Sun"
-
-#~ msgid "Mon"
-#~ msgstr "Mon"
-
-#~ msgid "Tue"
-#~ msgstr "Tue"
-
-#~ msgid "Wed"
-#~ msgstr "Wed"
-
-#~ msgid "Thu"
-#~ msgstr "Thu"
-
-#~ msgid "Fri"
-#~ msgstr "Fri"
-
-#~ msgid "Sat"
-#~ msgstr "Sat"
-
-#, fuzzy
-#~ msgid ""
-#~ "Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i<file>] [-x[format]]\n"
-#~ " [-d <date>|<num>] [-s[date]] [-r[range]]\n"
-#~ " [-c<file>] [-D<dir>] [-S<regex>] [--status]\n"
-#~ " [--read-only]\n"
-#~ msgstr "Usage: calcurse [-h | -v] [-at] [-d date|num] [-c file]\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "\n"
-#~ "Miscellaneous:\n"
-#~ " -h, --help\n"
-#~ "\tprint this help and exit.\n"
-#~ "\n"
-#~ " -v, --version\n"
-#~ "\tprint calcurse version and exit.\n"
-#~ "\n"
-#~ " --status\n"
-#~ "\tdisplay the status of running instances of calcurse.\n"
-#~ "\n"
-#~ " --read-only\n"
-#~ "\tDon't save configuration nor appointments/todos. Use with care.\n"
-#~ "\n"
-#~ "Files:\n"
-#~ " -c <file>, --calendar <file>\n"
-#~ "\tspecify the calendar <file> to use (has precedence over '-D').\n"
-#~ "\n"
-#~ " -D <dir>, --directory <dir>\n"
-#~ "\tspecify the data directory to use.\n"
-#~ "\tIf not specified, the default directory is ~/.calcurse\n"
-#~ "\n"
-#~ "Non-interactive:\n"
-#~ " -a, --appointment\n"
-#~ " \tprint events and appointments for current day and exit.\n"
-#~ "\n"
-#~ " -d <date|num>, --day <date|num>\n"
-#~ "\tprint events and appointments for <date> or <num> upcoming days and\n"
-#~ "\texit. To specify both a starting date and a range, use the\n"
-#~ "\t'--startday' and the '--range' option.\n"
-#~ "\n"
-#~ " -g, --gc\n"
-#~ "\trun the garbage collector for note files and exit. \n"
-#~ "\n"
-#~ " -i <file>, --import <file>\n"
-#~ "\timport the icalendar data contained in <file>. \n"
-#~ "\n"
-#~ " -n, --next\n"
-#~ "\tprint next appointment within upcoming 24 hours and exit. Also given\n"
-#~ "\tis the remaining time before this next appointment.\n"
-#~ "\n"
-#~ " -l <num>, --limit <num>\n"
-#~ "\tonly print information regarding the next <num> items. \n"
-#~ "\n"
-#~ " -r[num], --range[=num]\n"
-#~ "\tprint events and appointments for the [num] number of days\n"
-#~ "\tand exit. If no [num] is given, a range of 1 day is considered.\n"
-#~ "\n"
-#~ " -s[date], --startday[=date]\n"
-#~ "\tprint events and appointments from [date] and exit.\n"
-#~ "\tIf no [date] is given, the current day is considered.\n"
-#~ "\n"
-#~ " -S<regex>, --search=<regex>\n"
-#~ "\tsearch for the given regular expression within events, appointments,\n"
-#~ "\tand todos description.\n"
-#~ "\n"
-#~ " -t[num], --todo[=num]\n"
-#~ "\tprint todo list and exit. If the optional number [num] is given,\n"
-#~ "\tthen only todos having a priority equal to [num] will be returned.\n"
-#~ "\tThe priority number must be between 1 (highest) and 9 (lowest).\n"
-#~ "\tIt is also possible to specify '0' for the priority, in which case\n"
-#~ "\tonly completed tasks will be shown.\n"
-#~ "\n"
-#~ " -x[format], --export[=format]\n"
-#~ "\texport user data to the specified format. Events, appointments and\n"
-#~ "\ttodos are converted and echoed to stdout.\n"
-#~ "\tTwo possible formats are available: 'ical' and 'pcal'.\n"
-#~ "\tIf the optional argument format is not given, ical format is\n"
-#~ "\tselected by default.\n"
-#~ "\tnote: redirect standard output to export data to a file,\n"
-#~ "\tby issuing a command such as: calcurse --export > calcurse.dat\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Miscellaneous:\n"
-#~ " -h\t\tprint this help and exit.\n"
-#~ " -v\t\tprint calcurse version and exit.\n"
-#~ "\n"
-#~ "Options:\n"
-#~ " -c <file>\tspecify the calendar <file> to use.\n"
-#~ "\n"
-#~ "Non-interactive:\n"
-#~ " -a \t\tprint events and appointments for current day and exit.\n"
-#~ " -d <date|num>\tprint events and appointments for <date> or <num> "
-#~ "upcoming\n"
-#~ "\t\tdays and exit.\n"
-#~ " -t\t\tprint todo list and exit.\n"
-#~ "\n"
-#~ "For more information, type '?' from within Calcurse, or read the "
-#~ "manpage.\n"
-#~ "Mail bug reports and suggestions to <misc@calcurse.org>.\n"
-
-#, fuzzy
-#~ msgid "Enter the new ending date: [%s] or '0'"
-#~ msgstr "Possible argument formats are : 'mm/dd/yyyy' or 'n'\n"
-
-#, fuzzy
-#~ msgid "Possible formats are [%s] or '0' for an endless repetition"
-#~ msgstr "Possible argument formats are : 'mm/dd/yyyy' or 'n'\n"
-
-#~ msgid "Argument to the '-d' flag is not valid\n"
-#~ msgstr "Argument to the '-d' flag is not valid\n"
-
-#, fuzzy
-#~ msgid "Argument is not valid\n"
-#~ msgstr "Argument to the '-d' flag is not valid\n"
-
-#, fuzzy
-#~ msgid "%s does not exist, create it now [y/n]? "
-#~ msgstr "%s does not exist, create it now [y or n] ? "
-
-#~ msgid "aborting...\n"
-#~ msgstr "aborting...\n"
-
-#~ msgid "%s successfully created\n"
-#~ msgstr "%s successfully created\n"
-
-#~ msgid "Exit"
-#~ msgstr "Exit"
-
-#, fuzzy
-#~ msgid "No color"
-#~ msgstr "Colour"
-
-#, fuzzy
-#~ msgid "Add key"
-#~ msgstr "Add Item"
-
-#, fuzzy
-#~ msgid "Del key"
-#~ msgstr "Del Item"
-
-#, fuzzy
-#~ msgid "unknwon type"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#~ msgid "To do :"
-#~ msgstr "To do :"
-
-#, fuzzy
-#~ msgid "Calcurse help"
-#~ msgstr "CalCurse %s | help"
-
-#~ msgid " Welcome to Calcurse. This is the main help screen.\n"
-#~ msgstr " Welcome to Calcurse. This is the main help screen.\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Moving around: Press '%s' or '%s' to scroll text upward or downward\n"
-#~ " inside help screens, if necessary.\n"
-#~ "\n"
-#~ " Exit help: When finished, press '%s' to exit help and go back to\n"
-#~ " the main Calcurse screen.\n"
-#~ "\n"
-#~ " Help topic: At the bottom of this screen you can see a panel with\n"
-#~ " different fields, represented by a letter and a short\n"
-#~ " title. This panel contains all the available actions\n"
-#~ " you can perform when using Calcurse.\n"
-#~ " By pressing one of the letters appearing in this\n"
-#~ " panel, you will be shown a short description of the\n"
-#~ " corresponding action. At the top right side of the\n"
-#~ " description screen are indicated the user-defined key\n"
-#~ " bindings that lead to the action.\n"
-#~ "\n"
-#~ " Credits: Press '%s' for credits."
-#~ msgstr ""
-#~ " Moving around: Press CTRL-P or CTRL-N to scroll text upward or\n"
-#~ " downward inside help screens, if necessary.\n"
-#~ "\n"
-#~ " Exit help: When finished, press 'Q' to exit help and go back\n"
-#~ " to the main Calcurse screen.\n"
-#~ "\n"
-#~ " Help topic: At the bottom of this screen you can see a panel\n"
-#~ " with different fields, represented by a letter and\n"
-#~ " a short title. This panel contains all the available\n"
-#~ " actions you can perform when using Calcurse.\n"
-#~ " By pressing one of the letters appearing in this\n"
-#~ " panel, you will be shown a short description of the\n"
-#~ " corresponding action.\n"
-#~ "\n"
-#~ " Credits: Press '@' for credits."
-
-#, fuzzy
-#~ msgid "Save\n"
-#~ msgstr "Save:\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Save calcurse data.\n"
-#~ "Data are splitted into four different files which contain :\n"
-#~ "\n"
-#~ " / ~/.calcurse/conf -> user configuration\n"
-#~ " | (layout, color, general options)\n"
-#~ " | ~/.calcurse/apts -> data related to the appointments\n"
-#~ " | ~/.calcurse/todo -> data related to the todo list\n"
-#~ " \\ ~/.calcurse/keys -> user-defined key bindings\n"
-#~ "\n"
-#~ "In the config menu, you can choose to save the Calcurse data\n"
-#~ "automatically before quitting."
-#~ msgstr ""
-#~ "Pressing 'S' saves the Calcurse data.\n"
-#~ "\n"
-#~ "The data is splitted into three different files which contains :\n"
-#~ "\n"
-#~ " / ~/.calcurse/conf -> the user configuration\n"
-#~ " | (layout, colour, general options)\n"
-#~ " | ~/.calcurse/apts -> the data related to the appointments\n"
-#~ " \\ ~/.calcurse/todo -> the data related to the todo list\n"
-#~ "\n"
-#~ "In the config menu, you can choose to save the Calcurse data\n"
-#~ "automatically before quitting."
-
-#, fuzzy
-#~ msgid "Export\n"
-#~ msgstr "aborting...\n"
-
-#, fuzzy
-#~ msgid "Displacement keys\n"
-#~ msgstr "Displacement keys:\n"
-
-#, fuzzy
-#~ msgid "View\n"
-#~ msgstr "View:\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "View the item you select in either the Todo or Appointment panel.\n"
-#~ "\n"
-#~ "This is usefull when an event description is longer than the available\n"
-#~ "space to display it. If that is the case, the description will be\n"
-#~ "shortened and its end replaced by '...'. To be able to read the entire\n"
-#~ "description, just press '%s' and a popup window will appear, containing\n"
-#~ "the whole event.\n"
-#~ "\n"
-#~ "Press any key to close the popup window and go back to the main\n"
-#~ "Calcurse screen."
-#~ msgstr ""
-#~ "Pressing 'V' allows you to view the item you select in either the ToDo\n"
-#~ "or Appointment panel.\n"
-#~ "\n"
-#~ "This is usefull when an event description is longer than the available\n"
-#~ "space to display it. If that is the case, the description will be\n"
-#~ "shortened and its end replaced by '...'. To be able to read the entire\n"
-#~ "description, just press 'V' and a popup window will appear, containing\n"
-#~ "the whole event.\n"
-#~ "\n"
-#~ "Press any key to close the popup window and go back to the main\n"
-#~ "Calcurse screen."
-
-#, fuzzy
-#~ msgid "Tab\n"
-#~ msgstr "Tab:\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Switch between panels.\n"
-#~ "The panel currently in use has its border colorized.\n"
-#~ "\n"
-#~ "Some actions are possible only if the right panel is selected.\n"
-#~ "For example, if you want to add a task in the TODO list, you need first\n"
-#~ "to press the '%s' key to get the TODO panel selected. Then you can\n"
-#~ "press '%s' to add your item.\n"
-#~ "\n"
-#~ "Notice that at the bottom of the screen the list of possible actions\n"
-#~ "change while pressing '%s', so you always know what action can be\n"
-#~ "performed on the selected panel."
-#~ msgstr ""
-#~ "Pressing 'Tab' allows you to switch between panels.\n"
-#~ "The panel currently in use has its border in colour.\n"
-#~ "\n"
-#~ "Some actions are possible only if the right panel is selected.\n"
-#~ "For example, if you want to add a task in the TODO list, you need first\n"
-#~ "to press the 'Tab' key to get the TODO panel selected. Then you can\n"
-#~ "press 'A' to add your item.\n"
-#~ "\n"
-#~ "Notice that at the bottom of the screen the list of possible actions\n"
-#~ "change while pressing 'Tab', so you always know what action can be\n"
-#~ "performed on the selected panel."
-
-#, fuzzy
-#~ msgid "Goto\n"
-#~ msgstr "Goto:\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Jump to a specific day in the calendar.\n"
-#~ "\n"
-#~ "Using this command, you do not need to travel to that day using\n"
-#~ "the displacement keys inside the calendar panel.\n"
-#~ "If you hit [ENTER] without specifying any date, Calcurse checks the\n"
-#~ "system current date and you will be taken to that date.\n"
-#~ "\n"
-#~ "Notice that pressing '%s', whatever panel is\n"
-#~ "selected, will select current day in the calendar."
-#~ msgstr ""
-#~ "Pressing 'G' allows you to jump to a specific day in the calendar.\n"
-#~ "\n"
-#~ "Using this command, you do not need to travel to that day using\n"
-#~ "the displacement keys inside the calendar panel.\n"
-#~ "If you hit [ENTER] without specifying any date, Calcurse checks the\n"
-#~ "system current date and you will be taken to that date."
-
-#, fuzzy
-#~ msgid "Delete\n"
-#~ msgstr "Delete:\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Delete an element in the ToDo or Appointment list.\n"
-#~ "\n"
-#~ "Depending on which panel is selected when you press the delete key,\n"
-#~ "the hilighted item of either the ToDo or Appointment list will be \n"
-#~ "removed from this list.\n"
-#~ "\n"
-#~ "If the item to be deleted is recurrent, you will be asked if you\n"
-#~ "wish to suppress all of the item occurences or just the one you\n"
-#~ "selected.\n"
-#~ "\n"
-#~ "If the general option 'confirm_delete' is set to 'YES', then you will\n"
-#~ "be asked for confirmation before deleting the selected event.\n"
-#~ "Do not forget to save the calendar data to retrieve the modifications\n"
-#~ "next time you launch Calcurse."
-#~ msgstr ""
-#~ "Pressing 'D' deletes an element in the ToDo or Appointment list.\n"
-#~ "\n"
-#~ "Depending on which panel is selected when you press the delete key,\n"
-#~ "the highlighted item of either the ToDo or Appointment list will be \n"
-#~ "removed from this list.\n"
-#~ "\n"
-#~ "If the general option 'confirm_delete' is set to 'YES', then you will\n"
-#~ "be asked for confirmation before deleting the selected event.\n"
-#~ "Do not forget to save the calendar data to retrieve the modifications\n"
-#~ "next time you launch Calcurse."
-
-#, fuzzy
-#~ msgid "Add\n"
-#~ msgstr "Add:\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Add an item in either the ToDo or Appointment list, depending on which\n"
-#~ "panel is selected when you press '%s'.\n"
-#~ "\n"
-#~ "To enter a new item in the TODO list, you will need first to enter the\n"
-#~ "description of this new item. Then you will be asked to specify the todo\n"
-#~ "priority. This priority is represented by a number going from 9 for the\n"
-#~ "lowest priority, to 1 for the highest one. It is still possible to\n"
-#~ "change the item priority afterwards, by using the '%s' and '%s' keys\n"
-#~ "inside the todo panel.\n"
-#~ "\n"
-#~ "If the APPOINTMENT panel is selected while pressing '%s', you will be\n"
-#~ "able to enter either a new appointment or a new all-day long event.\n"
-#~ "To enter a new event, press [ENTER] instead of the item start time, and\n"
-#~ "just fill in the event description.\n"
-#~ "To enter a new appointment to be added in the APPOINTMENT list, you\n"
-#~ "will need to enter successively the time at which the appointment\n"
-#~ "begins, the appointment length (either by specifying the end time in\n"
-#~ "[hh:mm] or the duration in [+hh:mm], [+xxdxxhxxm] or [+mm] format), \n"
-#~ "and the description of the event.\n"
-#~ "\n"
-#~ "The day at which occurs the event or appointment is the day currently\n"
-#~ "selected in the calendar, so you need to move to the desired day before\n"
-#~ "pressing '%s'.\n"
-#~ "\n"
-#~ "Notes:\n"
-#~ " o if an appointment lasts for such a long time that it continues\n"
-#~ " on the next days, this event will be indicated on all the\n"
-#~ " corresponding days, and the beginning or ending hour will be\n"
-#~ " replaced by '..' if the event does not begin or end on the day.\n"
-#~ " o if you only press [ENTER] at the APPOINTMENT or TODO event\n"
-#~ " description prompt, without any description, no item will be\n"
-#~ " added.\n"
-#~ " o do not forget to save the calendar data to retrieve the new\n"
-#~ " event next time you launch Calcurse."
-#~ msgstr ""
-#~ "Pressing 'A' allows you to add an item in either the ToDo or Appointment\n"
-#~ "list, depending on which panel is selected when you press 'A'.\n"
-#~ "\n"
-#~ "To enter a new item in the TODO list, you only need to enter the\n"
-#~ "description of this new item.\n"
-#~ "\n"
-#~ "If the APPOINTMENT panel is selected while pressing 'A', you will be\n"
-#~ "able to enter either a new appointment or a new all-day long event.\n"
-#~ "To enter a new event, press [ENTER] instead of the item start time, and\n"
-#~ "just fill in the event description.\n"
-#~ "To enter a new appointment to be added in the APPOINTMENT list, you\n"
-#~ "will need to enter successively the time at which the appointment\n"
-#~ "begins, the appointment length (either by specifying the duration in\n"
-#~ "minutes, or the end time in [hh:mm] or [h:mm] format), and the\n"
-#~ "description of the event.\n"
-#~ "\n"
-#~ "The day at which occurs the event or appointment is the day currently\n"
-#~ "selected in the calendar, so you need to move to the desired day before\n"
-#~ "pressing 'A'.\n"
-#~ "\n"
-#~ "Notes:\n"
-#~ " o if an appointment lasts for such a long time that it continues\n"
-#~ " into the next days, this event will be indicated on all the\n"
-#~ " corresponding days, and the beginning or ending hour will be\n"
-#~ " replaced by '..' if the event does not begin or end on the day.\n"
-#~ " o if you only press [ENTER] at the APPOINTMENT or TODO event\n"
-#~ " description prompt, without any description, no item will be\n"
-#~ " added.\n"
-#~ " o do not forget to save the calendar data to retrieve the new\n"
-#~ " event next time you launch Calcurse."
-
-#, fuzzy
-#~ msgid "Edit Item\n"
-#~ msgstr "Add Item"
-
-#, fuzzy
-#~ msgid "EditNote\n"
-#~ msgstr "Add Item"
-
-#, fuzzy
-#~ msgid "ViewNote\n"
-#~ msgstr "View:\n"
-
-#, fuzzy
-#~ msgid "Repeat\n"
-#~ msgstr "Redraw:\n"
-
-#, fuzzy
-#~ msgid "Flag Item\n"
-#~ msgstr "Add Item"
-
-#, fuzzy
-#~ msgid "Config\n"
-#~ msgstr "Config:\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Open the configuration submenu.\n"
-#~ "From this submenu, you can select between color, layout, notification\n"
-#~ "and general options, and you can also configure your keybindings.\n"
-#~ "\n"
-#~ "The color submenu lets you choose the color theme.\n"
-#~ "The layout submenu lets you choose the Calcurse screen layout, in other\n"
-#~ "words where to place the three different panels on the screen.\n"
-#~ "The general options submenu brings a screen with the different options\n"
-#~ "which modifies the way Calcurse interacts with the user.\n"
-#~ "The notify submenu allows you to change the notify-bar settings.\n"
-#~ "The keys submenu lets you define your own key bindings.\n"
-#~ "\n"
-#~ "Do not forget to save the calendar data to retrieve your configuration\n"
-#~ "next time you launch Calcurse."
-#~ msgstr ""
-#~ "Pressing 'C' leads to the configuration submenu, from which you can\n"
-#~ "select between colour, layout, and general options.\n"
-#~ "\n"
-#~ "The colour submenu lets you choose the colour theme.\n"
-#~ "\n"
-#~ "The layout submenu lets you choose the Calcurse screen layout, in other\n"
-#~ "words where to place the three different panels on the screen.\n"
-#~ "\n"
-#~ "The general options submenu brings a screen with the different options\n"
-#~ "which modifies the way Calcurse interacts with the user.\n"
-#~ "\n"
-#~ "Do not forget to save the calendar data to retrieve your configuration\n"
-#~ "next time you launch Calcurse."
-
-#~ msgid "Calcurse - text-based organizer"
-#~ msgstr "Calcurse - text-based organizer"
-
-#, fuzzy
-#~ msgid ""
-#~ "Enter end time ([hh:mm] or [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm] "
-#~ "or [+mm]) : "
-#~ msgstr "Enter end time ([hh:mm] or [h:mm]) or duration (in minutes) : "
-
-#, fuzzy
-#~ msgid "could not convert string"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#~ msgid "ToDo"
-#~ msgstr "ToDo"
-
-#~ msgid "Appointment"
-#~ msgstr "Appointment"
-
-#, fuzzy
-#~ msgid "missing colors in config file"
-#~ msgstr "Failed to open config file"
-
-#~ msgid "auto_save = "
-#~ msgstr "auto_save = "
-
-#, fuzzy
-#~ msgid "periodic_save = "
-#~ msgstr "auto_save = "
-
-#~ msgid "confirm_quit = "
-#~ msgstr "confirm_quit = "
-
-#~ msgid "confirm_delete = "
-#~ msgstr "confirm_delete = "
-
-#~ msgid "skip_system_dialogs = "
-#~ msgstr "skip_system_dialogues = "
-
-#~ msgid "skip_progress_bar = "
-#~ msgstr "skip_progress_bar = "
-
-#~ msgid "week_begins_on_monday = "
-#~ msgstr "week_begins_on_monday = "
-
-#~ msgid ""
-#~ "(if set to YES, monday is the first day of the week, else it is sunday)"
-#~ msgstr ""
-#~ "(if set to YES, monday is the first day of the week, otherwise it is "
-#~ "sunday)"
-
-#, fuzzy
-#~ msgid "Week"
-#~ msgstr "-/+1 Week"
-
-#, fuzzy
-#~ msgid "could not find any key file."
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "could not remove note"
-#~ msgstr "Enter description :"
-
-#~ msgid "Enter an option number to change its value [Q to quit] "
-#~ msgstr "Enter an option number to change its value [Q to quit] "
-
-#, fuzzy
-#~ msgid "CalCurse %s | notify-bar options"
-#~ msgstr "CalCurse %s | general options"
-
-#, fuzzy
-#~ msgid ""
-#~ "\n"
-#~ "Copyright (c) 2004-2008 Frederic Culot\n"
-#~ "\n"
-#~ "This program is free software; you can redistribute it and/or modify\n"
-#~ "it under the terms of the GNU General Public License as published by\n"
-#~ "the Free Software Foundation; either version 2 of the License, or\n"
-#~ "(at your option) any later version.\n"
-#~ "\n"
-#~ "This program is distributed in the hope that it will be useful,\n"
-#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-#~ "GNU General Public License for more details.\n"
-#~ "\n"
-#~ "\n"
-#~ "Send your feedback or comments to : misc@calcurse.org\n"
-#~ "Calcurse home page : http://calcurse.org"
-#~ msgstr ""
-#~ "Copyright (c) 2004-2006 Frederic Culot\n"
-#~ "\n"
-#~ "This program is free software; you can redistribute it and/or modify\n"
-#~ "it under the terms of the GNU General Public License as published by\n"
-#~ "the Free Software Foundation; either version 2 of the License, or\n"
-#~ "(at your option) any later version.\n"
-#~ "\n"
-#~ "This program is distributed in the hope that it will be useful,\n"
-#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-#~ "GNU General Public License for more details.\n"
-#~ "\n"
-#~ "\n"
-#~ "Send your feedback or comments to : misc@calcurse.org\n"
-#~ "Calcurse home page : http://calcurse.org"
-
-#~ msgid "Pick the desired layout on next screen [press ENTER]"
-#~ msgstr "Pick the desired layout on next screen [press ENTER]"
-
-#, fuzzy
-#~ msgid "('A'= Appointment panel, 'C'= calendar panel, 'T'= todo panel)"
-#~ msgstr "('A'= Appointment panel, 'c'= calendar panel, 't'= todo panel)"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in apoint_delete: no such type\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#~ msgid "FATAL ERROR in apoint_scan: date error in the appointment\n"
-#~ msgstr "FATAL ERROR in apoint_scan: date error in the appointment\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in apoint_get: no such item\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in apoint_delete_bynum: no such appointment"
-#~ msgstr "FATAL ERROR in apoint_delete_bynum: no such appointment\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in apoint_switch_notify: no such appointment"
-#~ msgstr "FATAL ERROR in apoint_delete_bynum: no such appointment\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in custom_load_color: wrong color number.\n"
-#~ msgstr ""
-#~ "FATAL ERROR in fill_config_var: wrong configuration variable format.\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in custom_load_color: wrong color name.\n"
-#~ msgstr "FATAL ERROR in load_app: wrong format in the appointment or event\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "FATAL ERROR in custom_load_color: wrong configuration variable format.\n"
-#~ msgstr ""
-#~ "FATAL ERROR in fill_config_var: wrong configuration variable format.\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in custom_color_theme_name: unknown color\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in day_popup_item: unknown item type\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in event_get: no such item\n"
-#~ msgstr "FATAL ERROR in event_delete_bynum: no such event\n"
-
-#~ msgid "FATAL ERROR in event_delete_bynum: no such event\n"
-#~ msgstr "FATAL ERROR in event_delete_bynum: no such event\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in foreach_date_dump: incoherent repetition type\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "FATAL ERROR in pcal_export_recur_events: incoherent repetition type\n"
-#~ msgstr "FATAL ERROR in event_delete_bynum: no such event\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "FATAL ERROR in pcal_export_recur_apoints: incoherent repetition type\n"
-#~ msgstr "FATAL ERROR in apoint_delete_bynum: no such appointment\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in io_export_data: wrong export mode\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in io_export_data: unknown export type\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in io_import_data: unknown import type"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in launch_cmd: could not launch user command"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in recur_def2char: unknown recur type\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in recur_char2def: unknown char\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in recur_event_scan: date error in the event\n"
-#~ msgstr "FATAL ERROR in event_scan: date error in the event\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in recur_item_inday: unknown item type\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in recur_event_erase: no such event\n"
-#~ msgstr "FATAL ERROR in event_delete_bynum: no such event\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in recur_apoint_erase: no such appointment\n"
-#~ msgstr "FATAL ERROR in apoint_delete_bynum: no such appointment\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in recur_repeat_item: wrong item type\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in recur_exc_scan: syntax error in the item date\n"
-#~ msgstr "FATAL ERROR in load_app: syntax error in the item date\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in recur_get_apoint: no such item\n"
-#~ msgstr "FATAL ERROR in apoint_delete_bynum: no such appointment\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in recur_get_event: no such item\n"
-#~ msgstr "FATAL ERROR in event_delete_bynum: no such event\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in recur_apoint_switch_notify: no such item\n"
-#~ msgstr "FATAL ERROR in apoint_delete_bynum: no such appointment\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in todo_delete_note_bynum: no note attached\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in todo_delete_note_bynum: no such todo\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#~ msgid "FATAL ERROR in todo_delete_bynum: no such todo\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in todo_get_position: todo not found\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in todo_chg_priority: no such action\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#~ msgid "FATAL ERROR in date2sec: failure in mktime\n"
-#~ msgstr "FATAL ERROR in date2sec: failure in mktime\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in date_sec_change: failure in mktime\n"
-#~ msgstr "FATAL ERROR in date2sec: failure in mktime\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in other_status_page: unknown panel\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in mystrtol: number is out of range"
-#~ msgstr "FATAL ERROR in update_windows: no window selected\n"
-
-#~ msgid "option not defined - Problem in print_option_incolor()"
-#~ msgstr "option not defined - Problem in print_option_incolor()"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in erase_note: could not remove note\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in wins_update: no window selected\n"
-#~ msgstr "FATAL ERROR in update_windows: no window selected\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "You can use either 'H','J','K','L' or the arrow keys '<','v','^','>'\n"
-#~ "to move into the calendar.\n"
-#~ "\n"
-#~ "The following scheme explains how :\n"
-#~ "\n"
-#~ " move to previous week\n"
-#~ " K ^ \n"
-#~ " move to previous day H < > L move to next day\n"
-#~ " J v \n"
-#~ " move to next week\n"
-#~ "\n"
-#~ "Moreover, while inside the calendar panel, the '0' (zero) key moves\n"
-#~ "to the first day of the week, and the '$' key selects the last day of\n"
-#~ "the week.\n"
-#~ "\n"
-#~ "When the Appointment or ToDo panel is selected, the up and down keys\n"
-#~ "(respectively K or up arrow, and J or down arrow) allows you to select\n"
-#~ "an item from those lists."
-#~ msgstr ""
-#~ "You can use either 'H','J','K','L' or the arrow keys '<','v','^','>'\n"
-#~ "to move into the calendar.\n"
-#~ "\n"
-#~ "The following scheme explains how :\n"
-#~ "\n"
-#~ " move to previous week\n"
-#~ " K ^ \n"
-#~ " move to previous day H < > L move to next day\n"
-#~ " J v \n"
-#~ " move to next week\n"
-#~ "\n"
-#~ "When the Appointment or ToDo panel is selected, the up and down keys\n"
-#~ "(respectively K or up arrow, and J or down arrow) allows you to select\n"
-#~ "an item from those lists."
-
-#~ msgid "CalCurse %s | help"
-#~ msgstr "CalCurse %s | help"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in wins_prop: property unknown\n"
-#~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n"
-
-#~ msgid ""
-#~ "Please resize your terminal screen\n"
-#~ "(to at least 80x24),\n"
-#~ "and restart calcurse.\n"
-#~ msgstr ""
-#~ "Please resize your terminal screen\n"
-#~ "(to at least 80x24),\n"
-#~ "and restart calcurse.\n"
-
-#, fuzzy
-#~ msgid "FATAL ERROR in update_time_in_date: failure in mktime\n"
-#~ msgstr "FATAL ERROR in date2sec: failure in mktime\n"
-
-#~ msgid "Pick the number corresponding to the color scheme (Q to exit) :"
-#~ msgstr "Pick the number corresponding to the colour scheme (Q to exit) :"
-
-#~ msgid "([>0<] for black & white)"
-#~ msgstr "([>0<] for black & white)"
-
-#~ msgid "-- Press 'N' for next page --"
-#~ msgstr "-- Press 'N' for next page --"
-
-#~ msgid "-- Press 'P' for previous page --"
-#~ msgstr "-- Press 'P' for previous page --"
-
-#~ msgid " |Ac| |At| |cA| |tA|"
-#~ msgstr " |Ac| |At| |cA| |tA|"
-
-#~ msgid "[1]|At| [2]|Ac| [3]|tA| [4]|cA|"
-#~ msgstr "[1]|At| [2]|Ac| [3]|tA| [4]|cA|"
-
-#~ msgid "Redraw:\n"
-#~ msgstr "Redraw:\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Pressing CTRL-L redraws the Calcurse panels.\n"
-#~ "\n"
-#~ "You might want to use this function when you resize your terminal\n"
-#~ "screen for example, and you want Calcurse to take into account the new\n"
-#~ "size of the terminal.\n"
-#~ "\n"
-#~ "This function can also be useful when garbage appears in the display,\n"
-#~ "and you want to clean it."
-#~ msgstr ""
-#~ "Pressing 'R' redraws the Calcurse panels.\n"
-#~ "\n"
-#~ "You might want to use this function when you resize your terminal\n"
-#~ "screen for example, and you want Calcurse to take into account the new\n"
-#~ "size of the terminal.\n"
-#~ "\n"
-#~ "This function can also be useful when garbage appears in the display,\n"
-#~ "and you want to clear it."
-
-#~ msgid "GoTo"
-#~ msgstr "GoTo"
diff --git a/po/es.po b/po/es.po
index 448f9a2..b3736b7 100644
--- a/po/es.po
+++ b/po/es.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2021-04-10 09:12-0400\n"
+"POT-Creation-Date: 2023-05-22 14:19-0400\n"
"PO-Revision-Date: 2020-10-12 15:20+0000\n"
"Last-Translator: Lukas Fleischer\n"
"Language-Team: Spanish (http://www.transifex.com/lfleischer/calcurse/"
@@ -57,7 +57,7 @@ msgstr "Consulte `calcurse -h` para más información."
msgid "calcurse %s -- text-based organizer\n"
msgstr "calcurse %s -- organizador basado en texto\n"
-msgid "Copyright (c) 2004-2020 calcurse Development Team."
+msgid "Copyright (c) 2004-2023 calcurse Development Team."
msgstr ""
msgid "This is free software; see the source for copying conditions."
@@ -442,12 +442,6 @@ msgid "(if set to YES, confirmation is required before deleting an event)"
msgstr ""
"(si se le asigna YES, se requiere confirmación antes de borrar un evento)"
-msgid "Monday"
-msgstr "Lunes"
-
-msgid "Sunday"
-msgstr "Domingo"
-
msgid "(specifies the first day of week in the calendar view)"
msgstr "(especifica el primer día de la semana en la vista de calendario)"
@@ -472,6 +466,10 @@ msgstr "(posición de la cabecera en el panel de citas)"
msgid "(Format of the date displayed in the appointments panel)"
msgstr "(Formato de la fecha mostrado en el panel de citas)"
+#, fuzzy
+msgid "(Format of the time displayed in the appointments panel)"
+msgstr "(Formato de la fecha mostrado en el panel de citas)"
+
msgid "Enter a text string (an empty string for the default text)"
msgstr ""
@@ -480,6 +478,11 @@ msgstr ""
"Ingrese el formato de la fecha (ver 'man 3 strftime' para los formatos "
"posibles) "
+msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
+msgstr ""
+"Introduzca el formato de la hora (ver 'man 3 strftime' para los formatos "
+"posibles) "
+
msgid "Enter the date format: "
msgstr "Ingrese el formato de fecha:"
@@ -494,8 +497,8 @@ msgstr "opciones generales"
msgid "Undefined option!"
msgstr "¡Opción no definida!"
-msgid "undefined"
-msgstr "sin definir"
+msgid "UNDEFINED"
+msgstr ""
msgid "keys configuration"
msgstr "configuración de teclas"
@@ -507,8 +510,9 @@ msgstr "Presione la tecla que quiere asignarle a:"
msgid "The key '%s' is already used for %s. Choose another one."
msgstr "La tecla '%s' ya está en uso por %s. Elija otra."
-msgid "Some actions do not have any associated key bindings!"
-msgstr "¡Algunas acciones no tienen ninguna tecla asociada!"
+#, fuzzy
+msgid "Some actions are left undefined!"
+msgstr "opción no definida"
msgid ""
"Sorry, colors are not supported by your terminal\n"
@@ -613,6 +617,13 @@ msgstr "memoria agotada"
msgid "unknown ical type"
msgstr "tipo ical desconocido"
+msgid "(empty)"
+msgstr ""
+
+#, fuzzy
+msgid "ical_store_event: out of memory"
+msgstr "xcalloc: memoria agotada"
+
msgid "need DTSTART to determine event type."
msgstr ""
@@ -681,9 +692,6 @@ msgstr ""
msgid "malformed summary."
msgstr ""
-msgid "line break in summary."
-msgstr ""
-
#, fuzzy
msgid "item start date not defined."
msgstr "la fecha de comienzo del elemento no está definida."
@@ -853,37 +861,40 @@ msgstr ""
msgid "failed to open key file"
msgstr "no pudo abrirse el archivo de teclas"
-msgid ""
-"\n"
-"Too many errors while reading configuration file!\n"
-"Please backup your keys file, remove it from directory, and launch calcurse "
-"again.\n"
-msgstr ""
-"\n"
-"¡Demasiados errores al leer el archivo de configuración!\n"
-"Por favor respalde el archivo de teclas, elimínelo del directorio y vuelva a "
-"iniciar calcurse.\n"
-
msgid "Could not read key label"
msgstr "No se pudo leer etiqueta de tecla"
-msgid "Key label not recognized"
+#, fuzzy, c-format
+msgid "Key label not recognized: \"%s\""
msgstr "Etiqueta de tecla no reconocida"
#, c-format
-msgid "Error reading key: \"%s\""
-msgstr "Error leyendo tecla: \"%s\""
+msgid "No keys assigned to \"%s\"."
+msgstr ""
-#, c-format
-msgid "\"%s\" assigned multiple times!"
+#, fuzzy, c-format
+msgid "Keyname not recognized: \"%s\""
+msgstr "Etiqueta de tecla no reconocida"
+
+#, fuzzy, c-format
+msgid "\"%s\" assigned twice: \"%s\"."
msgstr "¡\"%s\" asignado múltiples veces!"
-msgid "There were some errors when loading keys file."
+#, c-format
+msgid ""
+"Action \"%s\" absent, but default key \"%s\" assigned to another action."
+msgstr ""
+
+msgid "Errors in the keys file."
msgstr ""
-msgid "Too many errors while reading keys file, aborting..."
+#, fuzzy
+msgid "Remove offending line(s) from the keys file, aborting..."
msgstr "Demasiados errores al leer archivo de teclas, abortando..."
+msgid "Some actions do not have any associated key bindings!"
+msgstr "¡Algunas acciones no tienen ninguna tecla asociada!"
+
#, c-format
msgid "FATAL ERROR: could not create %s: %s\n"
msgstr "ERROR FATAL: no pudo crearse %s: %s\n"
@@ -1017,6 +1028,9 @@ msgstr "Pegar"
msgid "Chg Win"
msgstr "CmbVent"
+msgid "Prev Win"
+msgstr ""
+
msgid "Import"
msgstr "Importar"
@@ -1204,6 +1218,10 @@ msgstr "Pegar un elemento en la posición actual."
msgid "Select next panel in calcurse main screen."
msgstr "Seleccionar el panel siguiente en la pantalla principal de calcurse."
+#, fuzzy
+msgid "Select previous panel in calcurse main screen."
+msgstr "Seleccionar el panel siguiente en la pantalla principal de calcurse."
+
msgid "Import data from an external file."
msgstr "Importar datos desde un archivo externo."
@@ -1347,9 +1365,8 @@ msgid "FATAL ERROR: null file pointer."
msgstr "ERROR FATAL: puntero nulo a archivo."
#, c-format
-msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
+msgid "Default key(s) assigned to %d action%s."
msgstr ""
-"Al añadir la tecla por defecto para \"%s\", ¡\"%s\" ya estaba asignada!!"
msgid "xmalloc: zero size"
msgstr "xmalloc: tamaño cero"
@@ -1468,11 +1485,6 @@ msgstr ""
msgid "(Log activity when running in background)"
msgstr "(Registrar actividad al ejecutar en segundo plano)"
-msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
-msgstr ""
-"Introduzca el formato de la hora (ver 'man 3 strftime' para los formatos "
-"posibles) "
-
msgid "Enter the number of seconds (0 not to be warned before an appointment)"
msgstr ""
"Introduzca el número de segundos (con 0 no se avisará antes de una cita)"
@@ -1881,11 +1893,14 @@ msgstr "panel desconocido"
msgid "Usage: calcurse-upgrade [-h|-v|--config <file>]"
msgstr "Uso: calcurse-upgrade [-h|-v|--config <file>]"
+#, fuzzy
msgid ""
"\n"
-"Copyright (c) 2004-2020 calcurse Development Team.\n"
+"Copyright (c) 2004-2023 calcurse Development Team.\n"
"This is free software; see the source for copying conditions.\n"
msgstr ""
+"Esto es software libre; consulte el código fuente para ver las condiciones "
+"de copia."
msgid "unrecognized option:"
msgstr "opción no reconocida:"
@@ -1937,6 +1952,35 @@ msgstr "Actualizar directivas de configuración..."
msgid "Remove temporary backup..."
msgstr "Eliminar respaldo temporal..."
+#~ msgid "Monday"
+#~ msgstr "Lunes"
+
+#~ msgid "Sunday"
+#~ msgstr "Domingo"
+
+#~ msgid "undefined"
+#~ msgstr "sin definir"
+
+#~ msgid ""
+#~ "\n"
+#~ "Too many errors while reading configuration file!\n"
+#~ "Please backup your keys file, remove it from directory, and launch "
+#~ "calcurse again.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "¡Demasiados errores al leer el archivo de configuración!\n"
+#~ "Por favor respalde el archivo de teclas, elimínelo del directorio y "
+#~ "vuelva a iniciar calcurse.\n"
+
+#, c-format
+#~ msgid "Error reading key: \"%s\""
+#~ msgstr "Error leyendo tecla: \"%s\""
+
+#, c-format
+#~ msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
+#~ msgstr ""
+#~ "Al añadir la tecla por defecto para \"%s\", ¡\"%s\" ya estaba asignada!!"
+
#~ msgid ""
#~ "(if set to YES, messages about loaded and saved data will be displayed)"
#~ msgstr ""
diff --git a/po/fr.po b/po/fr.po
index ef032ff..1f0aed5 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2021-04-10 09:12-0400\n"
+"POT-Creation-Date: 2023-05-22 14:19-0400\n"
"PO-Revision-Date: 2020-10-12 15:20+0000\n"
"Last-Translator: Lukas Fleischer\n"
"Language-Team: French (http://www.transifex.com/lfleischer/calcurse/language/"
@@ -67,7 +67,7 @@ msgstr "Tapez `calcurse -h` pour plus d'informations"
msgid "calcurse %s -- text-based organizer\n"
msgstr "calcurse %s -- organiseur en mode texte\n"
-msgid "Copyright (c) 2004-2020 calcurse Development Team."
+msgid "Copyright (c) 2004-2023 calcurse Development Team."
msgstr ""
msgid "This is free software; see the source for copying conditions."
@@ -468,12 +468,6 @@ msgid "(if set to YES, confirmation is required before deleting an event)"
msgstr ""
"(si fixé à OUI, il est nécessaire de confirmer avant d'effacer un élément)"
-msgid "Monday"
-msgstr "Lundi"
-
-msgid "Sunday"
-msgstr "Dimanche"
-
msgid "(specifies the first day of week in the calendar view)"
msgstr "(indique le premier jour de la semaine dans la vue de calendrier)"
@@ -498,6 +492,10 @@ msgstr "(position de l'entête dans le panneau rendez-vous)"
msgid "(Format of the date displayed in the appointments panel)"
msgstr "(Format de la date affichée dans le panneau rendez-vous)"
+#, fuzzy
+msgid "(Format of the time displayed in the appointments panel)"
+msgstr "(Format de la date affichée dans le panneau rendez-vous)"
+
msgid "Enter a text string (an empty string for the default text)"
msgstr ""
@@ -505,6 +503,11 @@ msgid "Enter the date format (see 'man 3 strftime' for possible formats) "
msgstr ""
"Saisir le format de date (voir 'man 3 strftime' pour les formats possibles)"
+msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
+msgstr ""
+"Saisir le format de l'heure (voir 'man 3 strftime' pour les formats "
+"possibles)"
+
msgid "Enter the date format: "
msgstr "Saisir le format de date : "
@@ -519,8 +522,8 @@ msgstr "options générales"
msgid "Undefined option!"
msgstr "Option inconnue !"
-msgid "undefined"
-msgstr "inconnue"
+msgid "UNDEFINED"
+msgstr ""
msgid "keys configuration"
msgstr "Configuration des raccourcis"
@@ -532,8 +535,9 @@ msgstr "Pressez la touche que vous voulez assigner :"
msgid "The key '%s' is already used for %s. Choose another one."
msgstr "Le raccourci '%s' est déjà utilisé for %s. Choisissez en un autre."
-msgid "Some actions do not have any associated key bindings!"
-msgstr "Certaines actions n'ont pas de raccourcis clavier associés !"
+#, fuzzy
+msgid "Some actions are left undefined!"
+msgstr "option non définie"
msgid ""
"Sorry, colors are not supported by your terminal\n"
@@ -638,6 +642,13 @@ msgstr "dépassement de mémoire"
msgid "unknown ical type"
msgstr "type ical inconnu"
+msgid "(empty)"
+msgstr ""
+
+#, fuzzy
+msgid "ical_store_event: out of memory"
+msgstr "xcalloc : dépassement de mémoire"
+
msgid "need DTSTART to determine event type."
msgstr ""
@@ -707,9 +718,6 @@ msgstr ""
msgid "malformed summary."
msgstr ""
-msgid "line break in summary."
-msgstr ""
-
#, fuzzy
msgid "item start date not defined."
msgstr "la date de début de l'élément n'est pas définie."
@@ -880,40 +888,41 @@ msgstr "Les données à l'écran ont été modifiées et seront perdues :"
msgid "failed to open key file"
msgstr "impossible d'ouvrir le fichier des raccourcis clavier"
-msgid ""
-"\n"
-"Too many errors while reading configuration file!\n"
-"Please backup your keys file, remove it from directory, and launch calcurse "
-"again.\n"
-msgstr ""
-"\n"
-"Trop d'erreurs à la lecture du fichier de configuration !\n"
-"Veuillez faire une sauvegarde de votre fichier de raccourcis, supprimer le "
-"du répertoire, puis relancer calcurse.\n"
-
msgid "Could not read key label"
msgstr "Impossible de lire le libellé de la touche"
-msgid "Key label not recognized"
+#, fuzzy, c-format
+msgid "Key label not recognized: \"%s\""
msgstr "Libellé de la touche non reconnu"
#, c-format
-msgid "Error reading key: \"%s\""
-msgstr "Erreur de lecture de la touche : \"%s\""
+msgid "No keys assigned to \"%s\"."
+msgstr ""
-#, c-format
-msgid "\"%s\" assigned multiple times!"
+#, fuzzy, c-format
+msgid "Keyname not recognized: \"%s\""
+msgstr "Libellé de la touche non reconnu"
+
+#, fuzzy, c-format
+msgid "\"%s\" assigned twice: \"%s\"."
msgstr "\"%s\" est assignée plusieurs fois !"
-msgid "There were some errors when loading keys file."
+#, c-format
+msgid ""
+"Action \"%s\" absent, but default key \"%s\" assigned to another action."
msgstr ""
-"Il y a eu des erreurs au chargement du fichier de configuration des "
-"raccourcis."
-msgid "Too many errors while reading keys file, aborting..."
+msgid "Errors in the keys file."
+msgstr ""
+
+#, fuzzy
+msgid "Remove offending line(s) from the keys file, aborting..."
msgstr ""
"Trop d'erreurs durant la lecture du fichier de raccourcis, annulation..."
+msgid "Some actions do not have any associated key bindings!"
+msgstr "Certaines actions n'ont pas de raccourcis clavier associés !"
+
#, c-format
msgid "FATAL ERROR: could not create %s: %s\n"
msgstr "ERREUR FATALE : impossible de créer %s : %s\n"
@@ -1048,6 +1057,9 @@ msgstr "Coller"
msgid "Chg Win"
msgstr "Chg.Fen."
+msgid "Prev Win"
+msgstr ""
+
msgid "Import"
msgstr "Importer"
@@ -1237,6 +1249,10 @@ msgstr "Coller un élément à la position actuelle."
msgid "Select next panel in calcurse main screen."
msgstr "Sélectionner le panneau suivant dans l'écran général de calcurse."
+#, fuzzy
+msgid "Select previous panel in calcurse main screen."
+msgstr "Sélectionner le panneau suivant dans l'écran général de calcurse."
+
msgid "Import data from an external file."
msgstr "Importer les données d'un fichier externe."
@@ -1376,10 +1392,8 @@ msgid "FATAL ERROR: null file pointer."
msgstr "ERREUR FATALE : pointeur de fichier nul."
#, c-format
-msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
+msgid "Default key(s) assigned to %d action%s."
msgstr ""
-"Pendant l'ajout de la touche par défaut pour \"%s\", \"%s\" était déjà "
-"assignée !"
msgid "xmalloc: zero size"
msgstr "xmalloc : taille nulle"
@@ -1504,11 +1518,6 @@ msgstr ""
msgid "(Log activity when running in background)"
msgstr "(Enregistrer l'activité lors de l'exécution en arrière-plan)"
-msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
-msgstr ""
-"Saisir le format de l'heure (voir 'man 3 strftime' pour les formats "
-"possibles)"
-
msgid "Enter the number of seconds (0 not to be warned before an appointment)"
msgstr ""
"Saisir le nombre de secondes (0 pour désactiver l'alerte qui précéde un "
@@ -1934,11 +1943,14 @@ msgstr "panneau inconnu"
msgid "Usage: calcurse-upgrade [-h|-v|--config <file>]"
msgstr "Utilisation : calcurse-upgrade [-h|-v|--config <fichier>]"
+#, fuzzy
msgid ""
"\n"
-"Copyright (c) 2004-2020 calcurse Development Team.\n"
+"Copyright (c) 2004-2023 calcurse Development Team.\n"
"This is free software; see the source for copying conditions.\n"
msgstr ""
+"Ceci est un logiciel libre : consultez le code source pour connaître les "
+"conditions légales d'utilisation."
msgid "unrecognized option:"
msgstr "option non reconnue :"
@@ -1988,6 +2000,41 @@ msgstr "Mise à jour des instructions de configuration..."
msgid "Remove temporary backup..."
msgstr "Suppression de la sauvegarde temporaire..."
+#~ msgid "Monday"
+#~ msgstr "Lundi"
+
+#~ msgid "Sunday"
+#~ msgstr "Dimanche"
+
+#~ msgid "undefined"
+#~ msgstr "inconnue"
+
+#~ msgid ""
+#~ "\n"
+#~ "Too many errors while reading configuration file!\n"
+#~ "Please backup your keys file, remove it from directory, and launch "
+#~ "calcurse again.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Trop d'erreurs à la lecture du fichier de configuration !\n"
+#~ "Veuillez faire une sauvegarde de votre fichier de raccourcis, supprimer "
+#~ "le du répertoire, puis relancer calcurse.\n"
+
+#, c-format
+#~ msgid "Error reading key: \"%s\""
+#~ msgstr "Erreur de lecture de la touche : \"%s\""
+
+#~ msgid "There were some errors when loading keys file."
+#~ msgstr ""
+#~ "Il y a eu des erreurs au chargement du fichier de configuration des "
+#~ "raccourcis."
+
+#, c-format
+#~ msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
+#~ msgstr ""
+#~ "Pendant l'ajout de la touche par défaut pour \"%s\", \"%s\" était déjà "
+#~ "assignée !"
+
#~ msgid ""
#~ "(if set to YES, messages about loaded and saved data will be displayed)"
#~ msgstr ""
diff --git a/po/nl.po b/po/nl.po
index cb12654..fc164b5 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2021-04-10 09:12-0400\n"
+"POT-Creation-Date: 2023-05-22 14:19-0400\n"
"PO-Revision-Date: 2020-10-12 15:20+0000\n"
"Last-Translator: Lukas Fleischer\n"
"Language-Team: Dutch (http://www.transifex.com/lfleischer/calcurse/language/"
@@ -56,7 +56,7 @@ msgstr "Probeer `calcurse -h` voor meer informatie."
msgid "calcurse %s -- text-based organizer\n"
msgstr "calcurse %s -- tekst gebaseerde agenda\n"
-msgid "Copyright (c) 2004-2020 calcurse Development Team."
+msgid "Copyright (c) 2004-2023 calcurse Development Team."
msgstr ""
msgid "This is free software; see the source for copying conditions."
@@ -428,12 +428,6 @@ msgstr "(Bij JA, wordt er een bevestiging gevraagd bij eindigen programma"
msgid "(if set to YES, confirmation is required before deleting an event)"
msgstr "(Bij JA, is een bevestiging nodig voor het wissen van een gebeurtenis)"
-msgid "Monday"
-msgstr "maandag"
-
-msgid "Sunday"
-msgstr "zondag"
-
msgid "(specifies the first day of week in the calendar view)"
msgstr ""
@@ -458,12 +452,19 @@ msgstr ""
msgid "(Format of the date displayed in the appointments panel)"
msgstr ""
+#, fuzzy
+msgid "(Format of the time displayed in the appointments panel)"
+msgstr "(Formaat van de tijd in de informatiebalk.)"
+
msgid "Enter a text string (an empty string for the default text)"
msgstr ""
msgid "Enter the date format (see 'man 3 strftime' for possible formats) "
msgstr "Geef het formaat van de datum (zie 'man 3 strftime')"
+msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
+msgstr "Geef het formaat van de tijd (zie 'man 3 strftime')"
+
msgid "Enter the date format: "
msgstr ""
@@ -478,8 +479,8 @@ msgstr "Algemene opties"
msgid "Undefined option!"
msgstr "Niet gekende optie!"
-msgid "undefined"
-msgstr "Ongekend"
+msgid "UNDEFINED"
+msgstr ""
msgid "keys configuration"
msgstr "Toetsinstellingen"
@@ -491,7 +492,7 @@ msgstr "Druk de toets die u wilt toewijzen:"
msgid "The key '%s' is already used for %s. Choose another one."
msgstr ""
-msgid "Some actions do not have any associated key bindings!"
+msgid "Some actions are left undefined!"
msgstr ""
msgid ""
@@ -597,6 +598,12 @@ msgstr ""
msgid "unknown ical type"
msgstr "onbekend ical type"
+msgid "(empty)"
+msgstr ""
+
+msgid "ical_store_event: out of memory"
+msgstr ""
+
msgid "need DTSTART to determine event type."
msgstr ""
@@ -659,9 +666,6 @@ msgstr ""
msgid "malformed summary."
msgstr ""
-msgid "line break in summary."
-msgstr ""
-
#, fuzzy
msgid "item start date not defined."
msgstr "item onbekend"
@@ -826,38 +830,41 @@ msgstr ""
msgid "failed to open key file"
msgstr ""
-msgid ""
-"\n"
-"Too many errors while reading configuration file!\n"
-"Please backup your keys file, remove it from directory, and launch calcurse "
-"again.\n"
-msgstr ""
-"\n"
-"Teveel fouten tijdens het lezen van het configuratiebestand!\n"
-"Maak een backup van het sneltoetsenbestand, verwijder het van de map en "
-"start calcurse opnieuw op.\n"
-
msgid "Could not read key label"
msgstr ""
-msgid "Key label not recognized"
+#, c-format
+msgid "Key label not recognized: \"%s\""
msgstr ""
#, c-format
-msgid "Error reading key: \"%s\""
+msgid "No keys assigned to \"%s\"."
msgstr ""
#, c-format
-msgid "\"%s\" assigned multiple times!"
+msgid "Keyname not recognized: \"%s\""
+msgstr ""
+
+#, fuzzy, c-format
+msgid "\"%s\" assigned twice: \"%s\"."
msgstr "\"%s\" meer dan eens toegewezen!"
-msgid "There were some errors when loading keys file."
+#, c-format
+msgid ""
+"Action \"%s\" absent, but default key \"%s\" assigned to another action."
+msgstr ""
+
+msgid "Errors in the keys file."
msgstr ""
-msgid "Too many errors while reading keys file, aborting..."
+#, fuzzy
+msgid "Remove offending line(s) from the keys file, aborting..."
msgstr ""
"Teveel fouten bij het laden van het sneltoetsenbestand, wordt afgebroken ..."
+msgid "Some actions do not have any associated key bindings!"
+msgstr ""
+
#, c-format
msgid "FATAL ERROR: could not create %s: %s\n"
msgstr "FATALE FOUT: kan %s niet aanmaken: %s\n"
@@ -983,6 +990,9 @@ msgstr "Plak"
msgid "Chg Win"
msgstr ""
+msgid "Prev Win"
+msgstr ""
+
msgid "Import"
msgstr "Import"
@@ -1161,6 +1171,9 @@ msgstr ""
msgid "Select next panel in calcurse main screen."
msgstr ""
+msgid "Select previous panel in calcurse main screen."
+msgstr ""
+
msgid "Import data from an external file."
msgstr "Importeer gegevens uit een extern bestand."
@@ -1283,7 +1296,7 @@ msgid "FATAL ERROR: null file pointer."
msgstr ""
#, c-format
-msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
+msgid "Default key(s) assigned to %d action%s."
msgstr ""
msgid "xmalloc: zero size"
@@ -1403,9 +1416,6 @@ msgstr ""
msgid "(Log activity when running in background)"
msgstr ""
-msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
-msgstr "Geef het formaat van de tijd (zie 'man 3 strftime')"
-
msgid "Enter the number of seconds (0 not to be warned before an appointment)"
msgstr "Geef het aantal seconden (0 voor geen waarschuwing voor een afspraak)."
@@ -1800,11 +1810,12 @@ msgstr ""
msgid "Usage: calcurse-upgrade [-h|-v|--config <file>]"
msgstr ""
+#, fuzzy
msgid ""
"\n"
-"Copyright (c) 2004-2020 calcurse Development Team.\n"
+"Copyright (c) 2004-2023 calcurse Development Team.\n"
"This is free software; see the source for copying conditions.\n"
-msgstr ""
+msgstr "Dit is vrije software; bekijk de broncode voor de kopieer voorwaarden"
msgid "unrecognized option:"
msgstr ""
@@ -1846,6 +1857,26 @@ msgstr ""
msgid "Remove temporary backup..."
msgstr ""
+#~ msgid "Monday"
+#~ msgstr "maandag"
+
+#~ msgid "Sunday"
+#~ msgstr "zondag"
+
+#~ msgid "undefined"
+#~ msgstr "Ongekend"
+
+#~ msgid ""
+#~ "\n"
+#~ "Too many errors while reading configuration file!\n"
+#~ "Please backup your keys file, remove it from directory, and launch "
+#~ "calcurse again.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Teveel fouten tijdens het lezen van het configuratiebestand!\n"
+#~ "Maak een backup van het sneltoetsenbestand, verwijder het van de map en "
+#~ "start calcurse opnieuw op.\n"
+
#~ msgid "item duration malformed."
#~ msgstr "item tijdsduur onjuist"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index aa7fe42..b32085a 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2021-04-10 09:12-0400\n"
+"POT-Creation-Date: 2023-05-22 14:19-0400\n"
"PO-Revision-Date: 2020-10-12 15:20+0000\n"
"Last-Translator: Lukas Fleischer\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/lfleischer/"
@@ -62,7 +62,7 @@ msgstr "Tente `calcurse -h` para mais informações."
msgid "calcurse %s -- text-based organizer\n"
msgstr "calcurse %s -- agenda baseada em texto\n"
-msgid "Copyright (c) 2004-2020 calcurse Development Team."
+msgid "Copyright (c) 2004-2023 calcurse Development Team."
msgstr ""
msgid "This is free software; see the source for copying conditions."
@@ -463,12 +463,6 @@ msgstr ""
"(se definida como SIM, uma confirmação será necessária antes da exclusão de "
"um evento)"
-msgid "Monday"
-msgstr "Segunda-feira"
-
-msgid "Sunday"
-msgstr "Domingo"
-
msgid "(specifies the first day of week in the calendar view)"
msgstr "(especifica o primeiro dia da semana na visão de calendário)"
@@ -493,6 +487,10 @@ msgstr "(posição do cabeçalho no painel de agendamentos)"
msgid "(Format of the date displayed in the appointments panel)"
msgstr "(Formato da data exibida no painel de agendamentos)"
+#, fuzzy
+msgid "(Format of the time displayed in the appointments panel)"
+msgstr "(Formato da data exibida no painel de agendamentos)"
+
msgid "Enter a text string (an empty string for the default text)"
msgstr ""
@@ -501,6 +499,11 @@ msgstr ""
"Entre com o formato da data (veja \"man 3 strftime\" para formatos "
"possíveis) "
+msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
+msgstr ""
+"Entre com o formato do horário (veja \"man 3 strftime\" para formatos "
+"possíveis) "
+
msgid "Enter the date format: "
msgstr "Entre com formato da data: "
@@ -514,8 +517,8 @@ msgstr "Opções Gerais"
msgid "Undefined option!"
msgstr "Opção indefinida!"
-msgid "undefined"
-msgstr "indefinida"
+msgid "UNDEFINED"
+msgstr ""
msgid "keys configuration"
msgstr "Configuração das Teclas"
@@ -527,8 +530,9 @@ msgstr "Pressione a tecla que você quer designar para:"
msgid "The key '%s' is already used for %s. Choose another one."
msgstr "A tecla '%s' já está em uso para %s. Selecione outra."
-msgid "Some actions do not have any associated key bindings!"
-msgstr "Algumas ações não têm teclas de atalho associadas!"
+#, fuzzy
+msgid "Some actions are left undefined!"
+msgstr "opção não definida"
msgid ""
"Sorry, colors are not supported by your terminal\n"
@@ -633,6 +637,13 @@ msgstr "memória insuficiente"
msgid "unknown ical type"
msgstr "tipo de ical desconhecido"
+msgid "(empty)"
+msgstr ""
+
+#, fuzzy
+msgid "ical_store_event: out of memory"
+msgstr "xcalloc: memória insuficiente"
+
msgid "need DTSTART to determine event type."
msgstr ""
@@ -701,9 +712,6 @@ msgstr ""
msgid "malformed summary."
msgstr ""
-msgid "line break in summary."
-msgstr ""
-
#, fuzzy
msgid "item start date not defined."
msgstr "data de início do ítem não foi definida."
@@ -872,37 +880,40 @@ msgstr ""
msgid "failed to open key file"
msgstr "falha na abertura do arquivo de teclas"
-msgid ""
-"\n"
-"Too many errors while reading configuration file!\n"
-"Please backup your keys file, remove it from directory, and launch calcurse "
-"again.\n"
-msgstr ""
-"\n"
-"Muitos erros de leitura do arquivo de configuração!\n"
-"Favor faça backup de seus arquivos de teclas, exclua-o de seu diretório e "
-"carregue calcurse novamente.\n"
-
msgid "Could not read key label"
msgstr "Não foi possível ler o rótulo de tecla"
-msgid "Key label not recognized"
+#, fuzzy, c-format
+msgid "Key label not recognized: \"%s\""
msgstr "Rótulo de tecla não reconhecida"
#, c-format
-msgid "Error reading key: \"%s\""
-msgstr "Erro na leitura da tecla: \"%s\""
+msgid "No keys assigned to \"%s\"."
+msgstr ""
-#, c-format
-msgid "\"%s\" assigned multiple times!"
+#, fuzzy, c-format
+msgid "Keyname not recognized: \"%s\""
+msgstr "Rótulo de tecla não reconhecida"
+
+#, fuzzy, c-format
+msgid "\"%s\" assigned twice: \"%s\"."
msgstr "\"%s\" alocada múltiplas vezes!"
-msgid "There were some errors when loading keys file."
+#, c-format
+msgid ""
+"Action \"%s\" absent, but default key \"%s\" assigned to another action."
msgstr ""
-msgid "Too many errors while reading keys file, aborting..."
+msgid "Errors in the keys file."
+msgstr ""
+
+#, fuzzy
+msgid "Remove offending line(s) from the keys file, aborting..."
msgstr "Erros demais na leitura do arquivo de chaves, abortando..."
+msgid "Some actions do not have any associated key bindings!"
+msgstr "Algumas ações não têm teclas de atalho associadas!"
+
#, c-format
msgid "FATAL ERROR: could not create %s: %s\n"
msgstr "ERRO FATAL: não foi possível criar %s: %s\n"
@@ -1034,6 +1045,9 @@ msgstr "Colar"
msgid "Chg Win"
msgstr "MudarJan"
+msgid "Prev Win"
+msgstr ""
+
msgid "Import"
msgstr "Importar"
@@ -1212,6 +1226,10 @@ msgstr "Cola um item na posição atual."
msgid "Select next panel in calcurse main screen."
msgstr "Seleciona o próximo painel na tela principal do calcurse."
+#, fuzzy
+msgid "Select previous panel in calcurse main screen."
+msgstr "Seleciona o próximo painel na tela principal do calcurse."
+
msgid "Import data from an external file."
msgstr "Importa dados a partir de um arquivo externo."
@@ -1357,8 +1375,8 @@ msgid "FATAL ERROR: null file pointer."
msgstr "ERRO FATAL: ponteiro nulo de arquivo."
#, c-format
-msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
-msgstr "Quando adicionava tecla padrão para \"%s\", \"%s\" já foi designada!"
+msgid "Default key(s) assigned to %d action%s."
+msgstr ""
msgid "xmalloc: zero size"
msgstr "xmalloc: tamanho zero"
@@ -1462,8 +1480,8 @@ msgstr "(Formato de horário a ser exibido dentro da barra de notificação)"
msgid ""
"(Warn user if an appointment is within next 'notify-bar_warning' seconds)"
msgstr ""
-"(Avisa o usuário se um agendamento ocorrerá nos próximos \"notify-bar_warning"
-"\" segundos)"
+"(Avisa o usuário se um agendamento ocorrerá nos próximos \"notify-"
+"bar_warning\" segundos)"
msgid "(Command used to notify user of an upcoming appointment)"
msgstr "(Comando usado para notificar usuário de um agendamento próximo)"
@@ -1477,11 +1495,6 @@ msgstr "(Executa em plano de fundo para pegar notificações depois de sair)"
msgid "(Log activity when running in background)"
msgstr "(Registra atividades quando estiver executando em plano de fundo)"
-msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
-msgstr ""
-"Entre com o formato do horário (veja \"man 3 strftime\" para formatos "
-"possíveis) "
-
msgid "Enter the number of seconds (0 not to be warned before an appointment)"
msgstr ""
"Entre com o número de segundos (0 para não ser avisado antes do agendamento)"
@@ -1892,11 +1905,14 @@ msgstr "painel desconhecido"
msgid "Usage: calcurse-upgrade [-h|-v|--config <file>]"
msgstr "Uso: calcurse-upgrade [-h|-v|--config <arquivo>]"
+#, fuzzy
msgid ""
"\n"
-"Copyright (c) 2004-2020 calcurse Development Team.\n"
+"Copyright (c) 2004-2023 calcurse Development Team.\n"
"This is free software; see the source for copying conditions.\n"
msgstr ""
+"Esse programa é livre; veja o arquivo fonte para as condições aplicadas em "
+"cópias."
msgid "unrecognized option:"
msgstr "opção não reconhecida:"
@@ -1945,6 +1961,35 @@ msgstr "Atualizar diretivas de configuração..."
msgid "Remove temporary backup..."
msgstr "Excluir backup temporário..."
+#~ msgid "Monday"
+#~ msgstr "Segunda-feira"
+
+#~ msgid "Sunday"
+#~ msgstr "Domingo"
+
+#~ msgid "undefined"
+#~ msgstr "indefinida"
+
+#~ msgid ""
+#~ "\n"
+#~ "Too many errors while reading configuration file!\n"
+#~ "Please backup your keys file, remove it from directory, and launch "
+#~ "calcurse again.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Muitos erros de leitura do arquivo de configuração!\n"
+#~ "Favor faça backup de seus arquivos de teclas, exclua-o de seu diretório e "
+#~ "carregue calcurse novamente.\n"
+
+#, c-format
+#~ msgid "Error reading key: \"%s\""
+#~ msgstr "Erro na leitura da tecla: \"%s\""
+
+#, c-format
+#~ msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
+#~ msgstr ""
+#~ "Quando adicionava tecla padrão para \"%s\", \"%s\" já foi designada!"
+
#~ msgid ""
#~ "(if set to YES, messages about loaded and saved data will be displayed)"
#~ msgstr ""
diff --git a/po/ru.po b/po/ru.po
index 2a14e54..219fb6b 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
-"POT-Creation-Date: 2021-04-10 09:12-0400\n"
+"POT-Creation-Date: 2023-05-22 14:19-0400\n"
"PO-Revision-Date: 2020-10-12 17:52+0000\n"
"Last-Translator: ÐлекÑей Мехоношин <ruskidecko@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/lfleischer/calcurse/"
@@ -20,9 +20,9 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
-"%100>=11 && n%100<=14)? 2 : 3);\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
+"(n%100>=11 && n%100<=14)? 2 : 3);\n"
msgid "null pointer"
msgstr "пуÑтой указатель"
@@ -64,7 +64,8 @@ msgstr "Выполните 'calcurse -h' Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑправкÐ
msgid "calcurse %s -- text-based organizer\n"
msgstr "calcurse %s - текÑтовый органайзер\n"
-msgid "Copyright (c) 2004-2020 calcurse Development Team."
+#, fuzzy
+msgid "Copyright (c) 2004-2023 calcurse Development Team."
msgstr "Копирайт (c) 2004-2020 calcurse Development Team."
msgid "This is free software; see the source for copying conditions."
@@ -446,12 +447,6 @@ msgstr "(yes/no) Подтверждение выхода из программы
msgid "(if set to YES, confirmation is required before deleting an event)"
msgstr "(yes/no) Подтверждение ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñобытий"
-msgid "Monday"
-msgstr "Пн"
-
-msgid "Sunday"
-msgstr "Ð’Ñ"
-
msgid "(specifies the first day of week in the calendar view)"
msgstr "(указание первого Ð´Ð½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸ в календаре)"
@@ -476,12 +471,19 @@ msgstr ""
msgid "(Format of the date displayed in the appointments panel)"
msgstr "(Формат даты, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÐµÑ‚ÑÑ Ð² панели задач)"
+#, fuzzy
+msgid "(Format of the time displayed in the appointments panel)"
+msgstr "(Формат даты, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÐµÑ‚ÑÑ Ð² панели задач)"
+
msgid "Enter a text string (an empty string for the default text)"
msgstr ""
msgid "Enter the date format (see 'man 3 strftime' for possible formats) "
msgstr "Задайте формат даты (Ñм. 'man 3 strftime' Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… форматов)"
+msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
+msgstr "Задайте формат времени (Ñм. 'man 3 strftime' Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… форматов) "
+
msgid "Enter the date format: "
msgstr "Задайте формат даты: "
@@ -494,8 +496,8 @@ msgstr "ОÑновные наÑтройки"
msgid "Undefined option!"
msgstr "ÐÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ Ð½Ð°Ñтройка!"
-msgid "undefined"
-msgstr "неопределено"
+msgid "UNDEFINED"
+msgstr ""
msgid "keys configuration"
msgstr "ÐаÑтройка клавиш"
@@ -507,8 +509,9 @@ msgstr "Ðажмите клавишу, чтобы привÑзать её к:"
msgid "The key '%s' is already used for %s. Choose another one."
msgstr "Ключ '%s' уже иÑпользуетÑÑ Ð´Ð»Ñ %s. Выберите другой ключ."
-msgid "Some actions do not have any associated key bindings!"
-msgstr "Ðекоторые дейÑÑ‚Ð²Ð¸Ñ Ð½Ðµ привÑзаны к клавишам!"
+#, fuzzy
+msgid "Some actions are left undefined!"
+msgstr "параметр не уÑтановлен"
msgid ""
"Sorry, colors are not supported by your terminal\n"
@@ -613,6 +616,13 @@ msgstr "нехватка памÑти"
msgid "unknown ical type"
msgstr "неизвеÑтный тип ical"
+msgid "(empty)"
+msgstr ""
+
+#, fuzzy
+msgid "ical_store_event: out of memory"
+msgstr "xcalloc: out of memory"
+
msgid "need DTSTART to determine event type."
msgstr ""
@@ -682,9 +692,6 @@ msgstr ""
msgid "malformed summary."
msgstr ""
-msgid "line break in summary."
-msgstr ""
-
#, fuzzy
msgid "item start date not defined."
msgstr "Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ определено."
@@ -852,37 +859,40 @@ msgstr ""
msgid "failed to open key file"
msgstr "ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° ключа"
-msgid ""
-"\n"
-"Too many errors while reading configuration file!\n"
-"Please backup your keys file, remove it from directory, and launch calcurse "
-"again.\n"
-msgstr ""
-"\n"
-"Обнаружены ошибки при чтении файла наÑтроек!\n"
-"Сделайте копию keys-файла, удалите его из каталога и запуÑтите calcurse "
-"Ñнова.\n"
-
msgid "Could not read key label"
msgstr "Ðевозможно раÑпознать клавишу"
-msgid "Key label not recognized"
+#, fuzzy, c-format
+msgid "Key label not recognized: \"%s\""
msgstr "Клавиша не опознана"
#, c-format
-msgid "Error reading key: \"%s\""
-msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸: \"%s\""
+msgid "No keys assigned to \"%s\"."
+msgstr ""
-#, c-format
-msgid "\"%s\" assigned multiple times!"
+#, fuzzy, c-format
+msgid "Keyname not recognized: \"%s\""
+msgstr "Клавиша не опознана"
+
+#, fuzzy, c-format
+msgid "\"%s\" assigned twice: \"%s\"."
msgstr "\"%s\" определено множеÑтво времён!"
-msgid "There were some errors when loading keys file."
+#, c-format
+msgid ""
+"Action \"%s\" absent, but default key \"%s\" assigned to another action."
+msgstr ""
+
+msgid "Errors in the keys file."
msgstr ""
-msgid "Too many errors while reading keys file, aborting..."
+#, fuzzy
+msgid "Remove offending line(s) from the keys file, aborting..."
msgstr "Обнаружены ошибки при чтении keys-файла, отмена..."
+msgid "Some actions do not have any associated key bindings!"
+msgstr "Ðекоторые дейÑÑ‚Ð²Ð¸Ñ Ð½Ðµ привÑзаны к клавишам!"
+
#, c-format
msgid "FATAL ERROR: could not create %s: %s\n"
msgstr "ФÐТÐЛЬÐÐЯ ОШИБКÐ: невозможно Ñоздать %s: %s\n"
@@ -1018,6 +1028,9 @@ msgstr "Ð’Ñтавить"
msgid "Chg Win"
msgstr "Панель"
+msgid "Prev Win"
+msgstr ""
+
msgid "Import"
msgstr "Импорт"
@@ -1203,6 +1216,10 @@ msgstr "Ð’Ñтавить запиÑÑŒ в текущую позицию"
msgid "Select next panel in calcurse main screen."
msgstr "Выбрать Ñлед. панель на главном Ñкране calcurse"
+#, fuzzy
+msgid "Select previous panel in calcurse main screen."
+msgstr "Выбрать Ñлед. панель на главном Ñкране calcurse"
+
msgid "Import data from an external file."
msgstr "Импортированть данные Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ файла."
@@ -1325,8 +1342,8 @@ msgid "FATAL ERROR: null file pointer."
msgstr "FATAL ERROR: null file pointer."
#, c-format
-msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
-msgstr "При назначении клав. \"%s\", \"%s\" уже была назначена!"
+msgid "Default key(s) assigned to %d action%s."
+msgstr ""
msgid "xmalloc: zero size"
msgstr "xmalloc: zero size"
@@ -1444,9 +1461,6 @@ msgstr "(ЗапуÑтить в фоновом режиме, Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð
msgid "(Log activity when running in background)"
msgstr "(Лог активен во Ð²Ñ€ÐµÐ¼Ñ Ñ„Ð¾Ð½Ð¾Ð²Ð¾Ð³Ð¾ режима)"
-msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
-msgstr "Задайте формат времени (Ñм. 'man 3 strftime' Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… форматов) "
-
msgid "Enter the number of seconds (0 not to be warned before an appointment)"
msgstr "Введите количеÑтво Ñекунд (0 - отмена Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð¾ ÑобытиÑ)"
@@ -1854,11 +1868,14 @@ msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ"
msgid "Usage: calcurse-upgrade [-h|-v|--config <file>]"
msgstr "ИÑпользовать: calcurse-upgrade [-h|-v|--config <file>]"
+#, fuzzy
msgid ""
"\n"
-"Copyright (c) 2004-2020 calcurse Development Team.\n"
+"Copyright (c) 2004-2023 calcurse Development Team.\n"
"This is free software; see the source for copying conditions.\n"
msgstr ""
+"Это Ñвободное ПО. Ð”Ð»Ñ Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñ ÑƒÑловиÑми ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐŸÐž, ознакомьтеÑÑŒ "
+"Ñ Ð¸Ñходным кодом."
msgid "unrecognized option:"
msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ:"
@@ -1906,6 +1923,34 @@ msgstr "Обновление конфигурации..."
msgid "Remove temporary backup..."
msgstr "Удалить временный архивный файл..."
+#~ msgid "Monday"
+#~ msgstr "Пн"
+
+#~ msgid "Sunday"
+#~ msgstr "Ð’Ñ"
+
+#~ msgid "undefined"
+#~ msgstr "неопределено"
+
+#~ msgid ""
+#~ "\n"
+#~ "Too many errors while reading configuration file!\n"
+#~ "Please backup your keys file, remove it from directory, and launch "
+#~ "calcurse again.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Обнаружены ошибки при чтении файла наÑтроек!\n"
+#~ "Сделайте копию keys-файла, удалите его из каталога и запуÑтите calcurse "
+#~ "Ñнова.\n"
+
+#, c-format
+#~ msgid "Error reading key: \"%s\""
+#~ msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸: \"%s\""
+
+#, c-format
+#~ msgid "When adding default key for \"%s\", \"%s\" was already assigned!"
+#~ msgstr "При назначении клав. \"%s\", \"%s\" уже была назначена!"
+
#~ msgid ""
#~ "(if set to YES, messages about loaded and saved data will be displayed)"
#~ msgstr "(yes/no) Отображение ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ загрузке и Ñохранении данных"
diff --git a/scripts/calcurse-upgrade.sh.in b/scripts/calcurse-upgrade.sh.in
index c9c9c78..b6a7438 100644
--- a/scripts/calcurse-upgrade.sh.in
+++ b/scripts/calcurse-upgrade.sh.in
@@ -15,7 +15,7 @@ if [ "$#" -gt 0 ]; then
elif [ "$1" = "-v" -o "$1" = "--version" ]; then
echo "calcurse-upgrade @PACKAGE_VERSION@"
echo "$(gettext "
-Copyright (c) 2004-2020 calcurse Development Team.
+Copyright (c) 2004-2023 calcurse Development Team.
This is free software; see the source for copying conditions.
")"
else
diff --git a/src/apoint.c b/src/apoint.c
index 4cb77f6..e138e5e 100644
--- a/src/apoint.c
+++ b/src/apoint.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -42,6 +42,8 @@
#include "calcurse.h"
#include "sha1.h"
+#define APPT_TIME_LENGTH 25
+
llist_ts_t alist_p;
void apoint_free(struct apoint *apt)
@@ -134,16 +136,14 @@ void apoint_sec2str(struct apoint *o, time_t day, char *start, char *end)
} else {
t = o->start;
localtime_r(&t, &lt);
- snprintf(start, HRMIN_SIZE, "%02u:%02u", lt.tm_hour,
- lt.tm_min);
+ strftime(start, APPT_TIME_LENGTH, conf.timefmt, &lt);
}
if (o->start + o->dur > day + DAYLEN(day)) {
strncpy(end, "..:..", 6);
} else {
t = o->start + o->dur;
localtime_r(&t, &lt);
- snprintf(end, HRMIN_SIZE, "%02u:%02u", lt.tm_hour,
- lt.tm_min);
+ strftime(end, APPT_TIME_LENGTH, conf.timefmt, &lt);
}
}
diff --git a/src/args.c b/src/args.c
index c66c724..57cbe63 100644
--- a/src/args.c
+++ b/src/args.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -112,7 +112,7 @@ static void version_arg(void)
{
printf(_("calcurse %s -- text-based organizer\n"), VERSION);
putchar('\n');
- printf("%s\n", _("Copyright (c) 2004-2020 calcurse Development Team."));
+ printf("%s\n", _("Copyright (c) 2004-2023 calcurse Development Team."));
printf("%s\n", _("This is free software; see the source for copying conditions."));
}
diff --git a/src/calcurse.c b/src/calcurse.c
index cd143d6..c89d1dd 100644
--- a/src/calcurse.c
+++ b/src/calcurse.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -41,37 +41,6 @@
#define HANDLE_KEY(key, fn) case key: fn(); break;
int count, reg;
-/*
- * Store events and appointments for a range of days in the day vector -
- * beginning with the selected day - and load them into the APP listbox. If no
- * day-change occurs, reset the selected APP item and with it the selected day,
- * thereby storing and loading the same range of days.
- */
-static void do_storage(int day_changed)
-{
- int pre_sel;
- /*
- * Save the selected item before rebuilding the day vector -
- * unless a preselection is already set.
- */
- if (!(pre_sel = day_check_sel_data()))
- day_set_sel_data(ui_day_get_sel());
-
- if (!day_changed)
- ui_day_sel_reset();
-
- /* The day_items vector. */
- day_store_items(get_slctd_day(), 1, day_get_days());
- /* The APP listbox. */
- ui_day_load_items();
-
- if (day_changed && !pre_sel)
- ui_day_sel_reset();
- else
- ui_day_find_sel();
-
- day_set_sel_data(&empty_day);
-}
static inline void key_generic_change_view(void)
{
@@ -80,6 +49,13 @@ static inline void key_generic_change_view(void)
wins_update(FLAG_ALL);
}
+static inline void key_generic_prev_view(void)
+{
+ wins_reset_status_page();
+ wins_slctd_prev();
+ wins_update(FLAG_ALL);
+}
+
static inline void key_generic_other_cmd(void)
{
wins_other_status_page();
@@ -91,7 +67,7 @@ static inline void key_generic_goto(void)
wins_erase_status_bar();
ui_calendar_set_current_date();
ui_calendar_change_day(conf.input_datefmt);
- do_storage(1);
+ day_do_storage(1);
wins_update(FLAG_CAL | FLAG_APP | FLAG_STA);
}
@@ -100,7 +76,7 @@ static inline void key_generic_goto_today(void)
wins_erase_status_bar();
ui_calendar_set_current_date();
ui_calendar_goto_today();
- do_storage(1);
+ day_do_storage(1);
wins_update(FLAG_CAL | FLAG_APP | FLAG_STA);
}
@@ -118,14 +94,14 @@ static inline void key_generic_config_menu(void)
wins_erase_status_bar();
wins_reset_status_page();
custom_config_main();
- do_storage(0);
+ day_do_storage(0);
wins_update(FLAG_ALL);
}
static inline void key_generic_add_appt(void)
{
ui_day_item_add();
- do_storage(0);
+ day_do_storage(0);
wins_update(FLAG_CAL | FLAG_APP | FLAG_STA);
}
@@ -141,7 +117,7 @@ static inline void key_add_item(void)
case APP:
case CAL:
ui_day_item_add();
- do_storage(0);
+ day_do_storage(0);
wins_update(FLAG_CAL | FLAG_APP | FLAG_STA);
break;
case TOD:
@@ -157,7 +133,7 @@ static inline void key_edit_item(void)
{
if (wins_slctd() == APP && !event_dummy(ui_day_get_sel())) {
ui_day_item_edit();
- do_storage(0);
+ day_do_storage(0);
wins_update(FLAG_CAL | FLAG_APP | FLAG_STA);
} else if (wins_slctd() == TOD) {
ui_todo_edit();
@@ -169,7 +145,7 @@ static inline void key_del_item(void)
{
if (wins_slctd() == APP && !event_dummy(ui_day_get_sel())) {
ui_day_item_delete(reg);
- do_storage(0);
+ day_do_storage(0);
wins_update(FLAG_CAL | FLAG_APP | FLAG_STA);
} else if (wins_slctd() == TOD) {
ui_todo_delete();
@@ -187,7 +163,7 @@ static inline void key_generic_paste(void)
{
if (wins_slctd() == APP) {
ui_day_item_paste(reg);
- do_storage(0);
+ day_do_storage(0);
wins_update(FLAG_CAL | FLAG_APP);
}
}
@@ -196,7 +172,7 @@ static inline void key_repeat_item(void)
{
if (wins_slctd() == APP && !event_dummy(ui_day_get_sel())) {
ui_day_item_repeat();
- do_storage(0);
+ day_do_storage(0);
wins_update(FLAG_CAL | FLAG_APP | FLAG_STA);
}
}
@@ -205,7 +181,7 @@ static inline void key_flag_item(void)
{
if (wins_slctd() == APP && !event_dummy(ui_day_get_sel())) {
ui_day_flag();
- do_storage(0);
+ day_do_storage(0);
wins_update(FLAG_APP);
} else if (wins_slctd() == TOD) {
ui_todo_flag();
@@ -244,7 +220,7 @@ static inline void key_edit_note(void)
{
if (wins_slctd() == APP && !event_dummy(ui_day_get_sel())) {
ui_day_edit_note();
- do_storage(0);
+ day_do_storage(0);
} else if (wins_slctd() == TOD) {
ui_todo_edit_note();
}
@@ -284,7 +260,7 @@ static inline void key_generic_save(void)
if (ret == IO_SAVE_RELOAD) {
ui_todo_load_items();
ui_todo_sel_reset();
- do_storage(0);
+ day_do_storage(0);
notify_check_next_app(1);
ui_calendar_monthly_view_cache_set_invalid();
}
@@ -319,7 +295,7 @@ static inline void key_generic_reload(void)
ret == IO_RELOAD_MERGE) {
ui_todo_load_items();
ui_todo_sel_reset();
- do_storage(0);
+ day_do_storage(0);
notify_check_next_app(1);
ui_calendar_monthly_view_cache_set_invalid();
}
@@ -349,7 +325,7 @@ static inline void key_generic_import(void)
wins_erase_status_bar();
io_import_data(IO_IMPORT_ICAL, NULL, NULL, NULL, NULL, NULL, NULL);
ui_calendar_monthly_view_cache_set_invalid();
- do_storage(0);
+ day_do_storage(0);
ui_todo_load_items();
wins_update(FLAG_ALL);
}
@@ -374,14 +350,14 @@ static inline void key_generic_export()
break;
}
- do_storage(0);
+ day_do_storage(0);
wins_update(FLAG_ALL);
}
static inline void key_generic_prev_day(void)
{
ui_calendar_move(DAY_PREV, count);
- do_storage(1);
+ day_do_storage(1);
wins_update(FLAG_CAL | FLAG_APP);
}
@@ -394,7 +370,7 @@ static inline void key_move_left(void)
static inline void key_generic_next_day(void)
{
ui_calendar_move(DAY_NEXT, count);
- do_storage(1);
+ day_do_storage(1);
wins_update(FLAG_CAL | FLAG_APP);
}
@@ -407,7 +383,7 @@ static inline void key_move_right(void)
static inline void key_generic_prev_week(void)
{
ui_calendar_move(WEEK_PREV, count);
- do_storage(1);
+ day_do_storage(1);
wins_update(FLAG_CAL | FLAG_APP);
}
@@ -418,7 +394,7 @@ static inline void key_move_up(void)
} else if (wins_slctd() == APP) {
if (!ui_day_sel_move(-1)) {
ui_calendar_move(DAY_PREV, 1);
- do_storage(1);
+ day_do_storage(1);
ui_day_sel_dayend();
}
wins_update(FLAG_APP | FLAG_CAL);
@@ -431,7 +407,7 @@ static inline void key_move_up(void)
static inline void key_generic_next_week(void)
{
ui_calendar_move(WEEK_NEXT, count);
- do_storage(1);
+ day_do_storage(1);
wins_update(FLAG_CAL | FLAG_APP);
}
@@ -442,7 +418,7 @@ static inline void key_move_down(void)
} else if (wins_slctd() == APP) {
if (!ui_day_sel_move(1)) {
ui_calendar_move(DAY_PREV, day_get_days() - 2);
- do_storage(1);
+ day_do_storage(1);
ui_day_sel_daybegin(day_get_days() - 1);
}
wins_update(FLAG_APP | FLAG_CAL);
@@ -455,28 +431,28 @@ static inline void key_move_down(void)
static inline void key_generic_prev_month(void)
{
ui_calendar_move(MONTH_PREV, count);
- do_storage(1);
+ day_do_storage(1);
wins_update(FLAG_CAL | FLAG_APP);
}
static inline void key_generic_next_month(void)
{
ui_calendar_move(MONTH_NEXT, count);
- do_storage(1);
+ day_do_storage(1);
wins_update(FLAG_CAL | FLAG_APP);
}
static inline void key_generic_prev_year(void)
{
ui_calendar_move(YEAR_PREV, count);
- do_storage(1);
+ day_do_storage(1);
wins_update(FLAG_CAL | FLAG_APP);
}
static inline void key_generic_next_year(void)
{
ui_calendar_move(YEAR_NEXT, count);
- do_storage(1);
+ day_do_storage(1);
wins_update(FLAG_CAL | FLAG_APP);
}
@@ -484,7 +460,7 @@ static inline void key_start_of_week(void)
{
if (wins_slctd() == CAL) {
ui_calendar_move(WEEK_START, count);
- do_storage(1);
+ day_do_storage(1);
wins_update(FLAG_CAL | FLAG_APP);
}
}
@@ -493,7 +469,7 @@ static inline void key_end_of_week(void)
{
if (wins_slctd() == CAL) {
ui_calendar_move(WEEK_END, count);
- do_storage(1);
+ day_do_storage(1);
wins_update(FLAG_CAL | FLAG_APP);
}
}
@@ -650,7 +626,7 @@ static inline void key_generic_cmd(void)
item->order = next;
ui_calendar_set_slctd_day(sec2date(next));
day_set_sel_data(item);
- do_storage(1);
+ day_do_storage(1);
valid = 1;
}
@@ -695,7 +671,7 @@ static inline void key_generic_cmd(void)
item->order = prev;
ui_calendar_set_slctd_day(sec2date(prev));
day_set_sel_data(item);
- do_storage(1);
+ day_do_storage(1);
valid = 1;
}
@@ -805,7 +781,7 @@ int main(int argc, char **argv)
*/
wins_wrefresh(win[KEY].p);
ui_calendar_monthly_view_cache_set_invalid();
- do_storage(1);
+ day_do_storage(1);
ui_todo_load_items();
ui_todo_sel_reset();
wins_update(FLAG_ALL);
@@ -825,7 +801,7 @@ int main(int argc, char **argv)
que_show();
if (conf.systemevents) {
que_save();
- do_storage(0);
+ day_do_storage(0);
}
wins_update(FLAG_ALL);
que_rem();
@@ -835,7 +811,7 @@ int main(int argc, char **argv)
resize = 0;
wins_reset();
if (conf.multiple_days) {
- do_storage(0);
+ day_do_storage(0);
wins_update(FLAG_APP);
}
}
@@ -851,6 +827,7 @@ int main(int argc, char **argv)
wtimeout(win[KEY].p, -1);
switch (key) {
HANDLE_KEY(KEY_GENERIC_CHANGE_VIEW, key_generic_change_view);
+ HANDLE_KEY(KEY_GENERIC_PREV_VIEW, key_generic_prev_view);
HANDLE_KEY(KEY_GENERIC_OTHER_CMD, key_generic_other_cmd);
HANDLE_KEY(KEY_GENERIC_GOTO, key_generic_goto);
HANDLE_KEY(KEY_GENERIC_GOTO_TODAY, key_generic_goto_today);
diff --git a/src/calcurse.h b/src/calcurse.h
index d5ba355..8322416 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -111,9 +111,6 @@
#define STATUSHEIGHT 2
#define MAX_NOTESIZ 40
-/* Format for appointment hours is: HH:MM */
-#define HRMIN_SIZE 6
-
/* Maximum number of colors available. */
#define NBUSERCOLORS 6
@@ -155,7 +152,7 @@
* The argument (d) is the "Sunday"-numbering of member tm_wday in struct tm.
*/
#define WDAY(d) \
- (ui_calendar_week_begins_on_monday() ? ((d ? d : WEEKINDAYS) - 1) : d)
+ (modify_wday(d, -ui_calendar_get_wday_start()))
/* Key definitions. */
#define CTRLVAL 0x1F
@@ -306,9 +303,11 @@ struct conf {
int input_datefmt; /* format for reading date */
enum pos heading_pos; /* left/center/right for heading in appts panel */
char day_heading[BUFSIZ]; /* format for displaying heading in appts panel */
+ char timefmt[BUFSIZ]; /* format for displaying time in appts panel*/
};
#define EMPTY_DAY_DEFAULT "--"
+#define EMPTY_EVENT_DESC_DEFAULT _("(empty description)")
/* Daemon-related configuration. */
struct dmon_conf {
@@ -338,6 +337,9 @@ enum datefmt {
/* Day heading default format. */
#define DAY_HEADING_DEFAULT "%B %e, %Y"
+/* Appointment time default format. */
+#define APPT_TIME_DEFAULT "%H:%M"
+
/*
* Calcurse representation of the date of a day in the calendar.
* When time_t is a 32-bit signed integer, the year range is 1902 - 2037.
@@ -515,8 +517,8 @@ struct io_file {
char *name;
};
-/* Available keys. */
-enum key {
+/* Virtual keys. */
+enum vkey {
KEY_GENERIC_CANCEL,
KEY_GENERIC_SELECT,
KEY_GENERIC_CREDITS,
@@ -527,6 +529,7 @@ enum key {
KEY_GENERIC_COPY,
KEY_GENERIC_PASTE,
KEY_GENERIC_CHANGE_VIEW,
+ KEY_GENERIC_PREV_VIEW,
KEY_GENERIC_IMPORT,
KEY_GENERIC_EXPORT,
KEY_GENERIC_GOTO,
@@ -566,7 +569,7 @@ enum key {
KEY_RAISE_PRIORITY,
KEY_LOWER_PRIORITY,
- NBKEYS,
+ NBVKEYS,
KEY_UNDEF,
/* Non-configurable, context sensitive key bindings. */
@@ -809,7 +812,7 @@ void ui_calendar_set_current_date(void);
struct date *ui_calendar_get_today(void);
void ui_calendar_set_first_day_of_week(enum wday);
void ui_calendar_change_first_day_of_week(void);
-unsigned ui_calendar_week_begins_on_monday(void);
+int ui_calendar_get_wday_start(void);
void ui_calendar_store_current_date(struct date *);
void ui_calendar_init_slctd_day(void);
struct date *ui_calendar_get_slctd_day(void);
@@ -855,6 +858,7 @@ void day_display_item_date(struct day_item *, WINDOW *, int, time_t, int, int);
void day_display_item(struct day_item *, WINDOW *, int, int, int, int);
void day_write_stdout(time_t, const char *, const char *, const char *,
const char *, int *);
+void day_do_storage(int day_changed);
void day_popup_item(struct day_item *);
int day_check_if_item(struct date);
unsigned day_chk_busy_slices(struct date, int, int *);
@@ -946,24 +950,26 @@ int io_get_modified(void);
void keys_init(void);
void keys_free(void);
void keys_dump_defaults(char *);
-const char *keys_get_label(enum key);
-enum key keys_get_action(int);
+const char *keys_get_label(enum vkey);
+const char *keys_get_binding(enum vkey);
+enum vkey keys_get_action(int);
int keys_wgetch(WINDOW *);
void keys_wait_for_any_key(WINDOW *);
-enum key keys_get(WINDOW *, int *, int *);
-int keys_assign_binding(int, enum key);
-void keys_remove_binding(int, enum key);
+enum vkey keys_get(WINDOW * win, int *, int *);
+int keys_assign_binding(int, enum vkey);
+void keys_remove_binding(int, enum vkey);
int keys_str2int(const char *);
char *keys_int2str(int);
-int keys_action_count_keys(enum key);
-const char *keys_action_firstkey(enum key);
-const char *keys_action_nkey(enum key, int);
-char *keys_action_allkeys(enum key);
+int keys_action_count_keys(enum vkey);
+const char *keys_action_firstkey(enum vkey);
+const char *keys_action_nkey(enum vkey, int);
+char *keys_action_allkeys(enum vkey);
void keys_display_bindings_bar(WINDOW *, int *, int, int, int);
-void keys_popup_info(enum key);
+void keys_popup_info(enum vkey);
void keys_save_bindings(FILE *);
-int keys_check_missing_bindings(void);
-void keys_fill_missing(void);
+int keys_check_missing(void);
+int keys_check_undefined(void);
+int keys_fill_missing(void);
/* listbox.c */
void listbox_init(struct listbox *, int, int, int, int, const char *,
@@ -1230,6 +1236,8 @@ time_t date_sec_change(time_t, int, int);
time_t update_time_in_date(time_t, unsigned, unsigned);
time_t get_sec_date(struct date);
long min2sec(unsigned);
+int modify_wday(int,int);
+char *get_wday_default_string(int);
void draw_scrollbar(struct scrollwin *, int);
void item_in_popup(const char *, const char *, const char *, const char *);
time_t get_today(void);
@@ -1325,6 +1333,7 @@ void wins_sbar_wdec(void);
enum win wins_slctd(void);
void wins_slctd_set(enum win);
void wins_slctd_next(void);
+void wins_slctd_prev(void);
void wins_init(void);
void wins_scrollwin_init(struct scrollwin *, int, int, int, int, const char *);
void wins_scrollwin_resize(struct scrollwin *, int, int, int, int);
diff --git a/src/config.c b/src/config.c
index f621320..4e0f7db 100644
--- a/src/config.c
+++ b/src/config.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -36,6 +36,8 @@
#include <ctype.h>
#include <unistd.h>
+#include <string.h>
+#include <strings.h>
#include "calcurse.h"
@@ -109,6 +111,7 @@ static const struct confvar confmap[] = {
{"format.inputdate", config_parse_input_datefmt, config_serialize_input_datefmt, NULL},
{"format.notifydate", CONFIG_HANDLER_STR(nbar.datefmt)},
{"format.notifytime", CONFIG_HANDLER_STR(nbar.timefmt)},
+ {"format.appointmenttime", CONFIG_HANDLER_STR(conf.timefmt)},
{"format.outputdate", config_parse_output_datefmt, config_serialize_output_datefmt, NULL},
{"format.dayheading", CONFIG_HANDLER_STR(conf.day_heading)},
{"general.autogc", CONFIG_HANDLER_BOOL(conf.auto_gc)},
@@ -260,14 +263,16 @@ static int config_parse_default_panel(void *dummy, const char *val)
static int config_parse_first_day_of_week(void *dummy, const char *val)
{
- if (!strcmp(val, "monday"))
- ui_calendar_set_first_day_of_week(MONDAY);
- else if (!strcmp(val, "sunday"))
- ui_calendar_set_first_day_of_week(SUNDAY);
- else
- return 0;
+ int i;
- return 1;
+ for (i = 0; i < WEEKINDAYS; i++) {
+ if(!strcasecmp(val, get_wday_default_string(i))) {
+ ui_calendar_set_first_day_of_week(i);
+ return 1;
+ }
+ }
+
+ return 0;
}
static int config_parse_color_theme(void *dummy, const char *val)
@@ -467,10 +472,9 @@ static int config_serialize_default_panel(char **buf, void *dummy)
static int config_serialize_first_day_of_week(char **buf, void *dummy)
{
- if (ui_calendar_week_begins_on_monday())
- *buf = mem_strdup("monday");
- else
- *buf = mem_strdup("sunday");
+ *buf = mem_strdup(get_wday_default_string(ui_calendar_get_wday_start()));
+ /* now stores string with uppercase first letter, changing to lower */
+ **buf = tolower(**buf);
return 1;
}
diff --git a/src/custom.c b/src/custom.c
index 0e5e554..2cd385c 100644
--- a/src/custom.c
+++ b/src/custom.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -38,6 +38,7 @@
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
+#include <langinfo.h>
#include "calcurse.h"
@@ -545,6 +546,7 @@ enum {
INPUT_DATE_FMT,
HEADING_POS,
DAY_HEADING_FMT,
+ APPOINTMENT_TIME_FMT,
NB_OPTIONS
};
@@ -573,7 +575,8 @@ static void print_general_option(int i, WINDOW *win, int y, int hilt, void *cb_d
"format.outputdate = ",
"format.inputdate = ",
"appearance.headingposition = ",
- "format.dayheading = "
+ "format.dayheading = ",
+ "format.appointmenttime = "
};
const char *panel;
const char *position;
@@ -700,8 +703,7 @@ static void print_general_option(int i, WINDOW *win, int y, int hilt, void *cb_d
case FIRST_DAY_OF_WEEK:
custom_apply_attr(win, ATTR_HIGHEST);
mvwaddstr(win, y, XPOS + strlen(opt[FIRST_DAY_OF_WEEK]),
- ui_calendar_week_begins_on_monday()? _("Monday") :
- _("Sunday"));
+ nl_langinfo(DAY_1 + ui_calendar_get_wday_start()));
custom_remove_attr(win, ATTR_HIGHEST);
mvwaddstr(win, y + 1, XPOS,
_("(specifies the first day of week in the calendar view)"));
@@ -746,6 +748,14 @@ static void print_general_option(int i, WINDOW *win, int y, int hilt, void *cb_d
mvwaddstr(win, y + 1, XPOS,
_("(Format of the date displayed in the appointments panel)"));
break;
+ case APPOINTMENT_TIME_FMT:
+ custom_apply_attr(win, ATTR_HIGHEST);
+ mvwaddstr(win, y, XPOS + strlen(opt[APPOINTMENT_TIME_FMT]),
+ conf.timefmt);
+ custom_remove_attr(win, ATTR_HIGHEST);
+ mvwaddstr(win, y + 1, XPOS,
+ _("(Format of the time displayed in the appointments panel)"));
+ break;
}
if (hilt)
@@ -771,6 +781,8 @@ static void general_option_edit(int i)
_("Enter a text string (an empty string for the default text)");
const char *output_datefmt_str =
_("Enter the date format (see 'man 3 strftime' for possible formats) ");
+ const char *output_timefmt_str =
+ _("Enter the time format (see 'man 3 strftime' for possible formats) ");
const char *input_datefmt_prefix = _("Enter the date format: ");
const char *periodic_save_str =
_("Enter the delay, in minutes, between automatic saves (0 to disable) ");
@@ -893,6 +905,15 @@ static void general_option_edit(int i)
conf.day_heading[BUFSIZ - 1] = '\0';
}
break;
+ case APPOINTMENT_TIME_FMT:
+ status_mesg(output_timefmt_str, "");
+ strncpy(buf, conf.timefmt, BUFSIZ);
+ buf[BUFSIZ - 1] = '\0';
+ if (updatestring(win[STA].p, &buf, 0, 1) == 0) {
+ strncpy(conf.timefmt, buf, BUFSIZ);
+ conf.timefmt[BUFSIZ - 1] = '\0';
+ }
+ break;
}
mem_free(buf);
@@ -975,10 +996,11 @@ print_keys_bindings(WINDOW * win, int selected_row, int selected_elm,
const int XPOS = 1;
const int EQUALPOS = 23;
const int KEYPOS = 25;
- int noelm, action, y;
+ int noelm, action, y, pos;
+ const char *key = NULL;
noelm = y = 0;
- for (action = 0; action < NBKEYS; action++) {
+ for (action = 0; action < NBVKEYS; action++) {
char *actionstr;
int nbkeys;
@@ -990,18 +1012,15 @@ print_keys_bindings(WINDOW * win, int selected_row, int selected_elm,
mem_free(actionstr);
mvwaddstr(win, y, EQUALPOS, "=");
if (nbkeys == 0)
- mvwaddstr(win, y, KEYPOS, _("undefined"));
+ mvwaddstr(win, y, KEYPOS, _("UNDEFINED"));
if (action == selected_row)
custom_remove_attr(win, ATTR_HIGHEST);
if (nbkeys > 0) {
if (action == selected_row) {
- const char *key;
- int pos;
-
+ /* Elements may have been added or deleted. */
+ wclrtoeol(win);
pos = KEYPOS;
- while ((key =
- keys_action_nkey(action,
- noelm)) != NULL) {
+ while ((key = keys_action_nkey(action, noelm))) {
if (noelm == selected_elm)
print_key_incolor(win, key,
y, pos);
@@ -1012,8 +1031,9 @@ print_keys_bindings(WINDOW * win, int selected_row, int selected_elm,
pos += utf8_strwidth((char *)key) + 1;
}
} else {
- mvwaddstr(win, y, KEYPOS,
- keys_action_allkeys(action));
+ key = keys_action_allkeys(action);
+ mvwaddstr(win, y, KEYPOS, key);
+ mem_free((char *)key);
}
}
y += yoff;
@@ -1045,9 +1065,11 @@ void custom_keys_config(void)
const int LABELLINES = 3;
clear();
- nbdisplayed = ((notify_bar() ? row - 3 : row - 2) - LABELLINES) / LINESPERKEY;
- wins_scrollwin_init(&kwin, 0, 0, notify_bar() ? row - 3 : row - 2, col, _("keys configuration"));
- wins_scrollwin_set_pad(&kwin, NBKEYS * LINESPERKEY);
+ nbdisplayed = ((notify_bar() ? row - 3 : row - 2) -
+ LABELLINES) / LINESPERKEY;
+ wins_scrollwin_init(&kwin, 0, 0, notify_bar() ? row - 3 : row - 2, col,
+ _("keys configuration"));
+ wins_scrollwin_set_pad(&kwin, NBVKEYS * LINESPERKEY);
wins_scrollwin_draw_deco(&kwin, 0);
custom_keys_config_bar();
selrow = selelm = 0;
@@ -1072,7 +1094,7 @@ void custom_keys_config(void)
}
break;
case KEY_MOVE_DOWN:
- if (selrow < NBKEYS - 1) {
+ if (selrow < NBVKEYS - 1) {
selrow++;
selelm = 0;
if (selrow == lastrow) {
@@ -1103,7 +1125,7 @@ void custom_keys_config(void)
keys_get_label(selrow), 0);
for (;;) {
ch = keys_wgetch(grabwin);
- enum key action = keys_get_action(ch);
+ enum vkey action = keys_get_action(ch);
/* Is the key already used by this action? */
if (action == selrow)
break;
@@ -1142,10 +1164,8 @@ void custom_keys_config(void)
selelm--;
break;
case KEY_GENERIC_QUIT:
- if (keys_check_missing_bindings() != 0) {
- WARN_MSG(_("Some actions do not have any associated "
- "key bindings!"));
- }
+ if (keys_check_undefined())
+ WARN_MSG(_("Some actions are left undefined!"));
wins_scrollwin_delete(&kwin);
return;
}
@@ -1222,7 +1242,7 @@ void custom_config_main(void)
old_layout = wins_layout();
custom_layout_config();
if (wins_layout() != old_layout)
- wins_reset();
+ wins_resize();
break;
case 'G':
case 'g':
@@ -1248,7 +1268,11 @@ void custom_config_main(void)
resize = 0;
wins_reset();
}
-
+
+ /* needed to update app list */
+ day_do_storage(0);
+
+ /* wins_update(FLAG_ALL), but with custom bindings */
wins_set_bindings(bindings, ARRAY_SIZE(bindings));
wins_update_border(FLAG_ALL);
wins_update_panels(FLAG_ALL);
diff --git a/src/day.c b/src/day.c
index 6a18dc1..78f4acf 100644
--- a/src/day.c
+++ b/src/day.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -58,7 +58,7 @@ static struct day_item sel_data = { 0, 0, 0, {NULL}};
/*
* Save the item to become the selected APP item.
- * Public function used to override the setting in do_storage().
+ * Public function used to override the setting in day_do_storage().
*/
int day_set_sel_data(struct day_item *d)
{
@@ -198,7 +198,8 @@ static void day_add_item(int type, time_t start, time_t order, union aptev_ptr i
/* Get the message of an item. */
char *day_item_get_mesg(struct day_item *day)
{
- switch (day->type) {
+ switch (day->type)
+ {
case APPT:
return day->item.apt->mesg;
case EVNT:
@@ -212,6 +213,15 @@ char *day_item_get_mesg(struct day_item *day)
}
}
+/* Get the display message of an item. */
+char *day_item_get_display_mesg(struct day_item *day)
+{
+ char *msg = day_item_get_mesg(day);
+ if (msg[0] == '\0')
+ return EMPTY_EVENT_DESC_DEFAULT;
+ return msg;
+}
+
/* Get the note attached to an item. */
char *day_item_get_note(struct day_item *day)
{
@@ -529,7 +539,7 @@ day_display_item(struct day_item *day, WINDOW *win, int incolor, int width,
if (width <= 0)
return;
- char *mesg = day_item_get_mesg(day);
+ char *mesg = day_item_get_display_mesg(day);
ch_recur = (day->type == RECUR_EVNT) ? '*' : ' ';
ch_note = day_item_get_note(day) ? '>' : ' ';
@@ -578,6 +588,38 @@ void day_write_stdout(time_t date, const char *fmt_apt, const char *fmt_rapt,
}
}
+/*
+ * Store events and appointments for a range of days in the day vector -
+ * beginning with the selected day - and load them into the APP listbox. If no
+ * day-change occurs, reset the selected APP item and with it the selected day,
+ * thereby storing and loading the same range of days.
+ */
+void day_do_storage(int day_changed)
+{
+ int pre_sel;
+ /*
+ * Save the selected item before rebuilding the day vector -
+ * unless a preselection is already set.
+ */
+ if(!(pre_sel = day_check_sel_data()))
+ day_set_sel_data(ui_day_get_sel());
+
+ if (!day_changed)
+ ui_day_sel_reset();
+
+ /* The day_items vector. */
+ day_store_items(get_slctd_day(), 1, day_get_days());
+ /* The APP listbox. */
+ ui_day_load_items();
+
+ if (day_changed && !pre_sel)
+ ui_day_sel_reset();
+ else
+ ui_day_find_sel();
+
+ day_set_sel_data(&empty_day);
+}
+
/* Display an item inside a popup window. */
void day_popup_item(struct day_item *day)
{
@@ -592,15 +634,19 @@ void day_popup_item(struct day_item *day)
asprintf(&notepath, "%s%s", path_notes, day_item_get_note(day));
fp = fopen(notepath, "r");
+ if (fp == NULL) {
+ item_in_popup(NULL, NULL, day_item_get_mesg(day), _("Event:"));
+ return;
+ }
note_read_contents(note, note_size, fp);
fclose(fp);
mem_free(notepath);
- asprintf(&msg, "%s\n\n%s\n%s", day_item_get_mesg(day), note_heading, note);
+ asprintf(&msg, "%s\n\n%s\n%s", day_item_get_display_mesg(day), note_heading, note);
item_in_popup(NULL, NULL, msg, _("Event:"));
mem_free(msg);
} else {
- item_in_popup(NULL, NULL, day_item_get_mesg(day), _("Event:"));
+ item_in_popup(NULL, NULL, day_item_get_display_mesg(day), _("Event:"));
}
} else if (day->type == APPT || day->type == RECUR_APPT) {
char a_st[100], a_end[100];
@@ -619,15 +665,19 @@ void day_popup_item(struct day_item *day)
asprintf(&notepath, "%s%s", path_notes, day_item_get_note(day));
fp = fopen(notepath, "r");
+ if (fp == NULL) {
+ item_in_popup(a_st, a_end, day_item_get_mesg(day), _("Appointment:"));
+ return;
+ }
note_read_contents(note, note_size, fp);
fclose(fp);
mem_free(notepath);
- asprintf(&msg, "%s\n\n%s\n%s", day_item_get_mesg(day), note_heading, note);
+ asprintf(&msg, "%s\n\n%s\n%s", day_item_get_display_mesg(day), note_heading, note);
item_in_popup(a_st, a_end, msg, _("Appointment:"));
mem_free(msg);
} else {
- item_in_popup(a_st, a_end, day_item_get_mesg(day), _("Appointment:"));
+ item_in_popup(a_st, a_end, day_item_get_display_mesg(day), _("Appointment:"));
}
} else {
EXIT(_("unknown item type"));
diff --git a/src/dmon.c b/src/dmon.c
index e61caf5..11d3458 100644
--- a/src/dmon.c
+++ b/src/dmon.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/event.c b/src/event.c
index e0da4c1..7c371e4 100644
--- a/src/event.c
+++ b/src/event.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/getstring.c b/src/getstring.c
index 7cdb84e..8ea5df5 100644
--- a/src/getstring.c
+++ b/src/getstring.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -241,9 +241,11 @@ enum getstr getstring(WINDOW * win, char *str, int l, int x, int y)
st.len = st.pos;
break;
case CTRL('A'): /* go to beginning of string */
+ case KEY_HOME:
st.pos = 0;
break;
case CTRL('E'): /* go to end of string */
+ case KEY_END:
st.pos = st.len;
break;
case KEY_LEFT: /* move one char backward */
diff --git a/src/help.c b/src/help.c
index 398fb6d..3f2c94f 100644
--- a/src/help.c
+++ b/src/help.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -105,7 +105,7 @@ int display_help(const char *topic)
if (!io_file_exists(path)) {
int ch = keys_str2int(topic);
- enum key action = keys_get_action(ch);
+ enum vkey action = keys_get_action(ch);
if (ch > 0 && action > 0 && action != KEY_UNDEF) {
topic = keys_get_label(action);
mem_free(path);
@@ -134,6 +134,8 @@ int display_help(const char *topic)
topic = "copy-paste";
else if (!strcmp(topic, "generic-change-view"))
topic = "tab";
+ else if (!strcmp(topic, "generic-prev-view"))
+ topic = "tab";
else if (!strcmp(topic, "generic-import"))
topic = "import";
else if (!strcmp(topic, "generic-export"))
diff --git a/src/hooks.c b/src/hooks.c
index 7bfd548..f649076 100644
--- a/src/hooks.c
+++ b/src/hooks.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/htable.h b/src/htable.h
index 5266213..92be6e2 100644
--- a/src/htable.h
+++ b/src/htable.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/ical.c b/src/ical.c
index 7c3768e..4a7738e 100644
--- a/src/ical.c
+++ b/src/ical.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -520,6 +520,10 @@ ical_store_event(char *mesg, char *note, time_t day, time_t end,
struct event *ev;
struct recur_event *rev;
+ if (!mesg)
+ mesg = mem_strdup(_("(empty)"));
+ EXIT_IF(!mesg, _("ical_store_event: out of memory"));
+
/*
* Repeating event. The end day is ignored, and the event becomes
* one-day even if multi-day.
@@ -572,6 +576,10 @@ ical_store_apoint(char *mesg, char *note, time_t start, long dur,
struct recur_apoint *rapt;
time_t day;
+ if (!mesg)
+ mesg = mem_strdup(_("(empty)"));
+ EXIT_IF(!mesg, _("ical_store_event: out of memory"));
+
if (has_alarm)
state |= APOINT_NOTIFY;
if (rpt) {
@@ -1331,12 +1339,9 @@ static char *ical_read_summary(char *line, unsigned *noskipped,
}
/* An event summary is one line only. */
- if (strchr(summary, '\n')) {
- ical_log(log, item_type, itemline, _("line break in summary."));
- (*noskipped)++;
- mem_free(summary);
- summary = NULL;
- }
+ for (p = summary; *p; p++)
+ if (*p == '\n')
+ *p = ' ';
leave:
return summary;
}
diff --git a/src/io.c b/src/io.c
index 71960f5..d596aab 100644
--- a/src/io.c
+++ b/src/io.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -50,8 +50,8 @@
struct ht_keybindings_s {
const char *label;
- enum key key;
- HTABLE_ENTRY(ht_keybindings_s);
+ enum vkey key;
+ HTABLE_ENTRY(ht_keybindings_s);
};
static void load_keys_ht_getkey(struct ht_keybindings_s *, const char **,
@@ -940,16 +940,6 @@ load_keys_ht_compare(struct ht_keybindings_s *data1,
}
/*
- * isblank(3) is protected by the __BSD_VISIBLE macro and this fails to be
- * visible in some specific cases. Thus replace it by the following is_blank()
- * function.
- */
-static int is_blank(int c)
-{
- return c == ' ' || c == '\t';
-}
-
-/*
* Load user-definable keys from file.
* A hash table is used to speed up loading process in avoiding string
* comparisons.
@@ -958,21 +948,21 @@ static int is_blank(int c)
*/
void io_load_keys(const char *pager)
{
- struct ht_keybindings_s keys[NBKEYS];
+ struct ht_keybindings_s virt_keys[NBVKEYS], *ht_elm, ht_entry;
FILE *keyfp;
- char buf[BUFSIZ];
+ char buf[BUFSIZ], key_label[BUFSIZ], key_str[BUFSIZ];
+ char *p, *msg;
struct io_file *log;
- int i, skipped, loaded, line;
- const int MAX_ERRORS = 5;
+ int i, n, skipped, loaded, line, assigned, undefined, key;
keys_init();
struct ht_keybindings ht_keys = HTABLE_INITIALIZER(&ht_keys);
- for (i = 0; i < NBKEYS; i++) {
- keys[i].key = (enum key)i;
- keys[i].label = keys_get_label((enum key)i);
- HTABLE_INSERT(ht_keybindings, &ht_keys, &keys[i]);
+ for (i = 0; i < NBVKEYS; i++) {
+ virt_keys[i].key = (enum vkey)i;
+ virt_keys[i].label = keys_get_label((enum vkey)i);
+ HTABLE_INSERT(ht_keybindings, &ht_keys, &virt_keys[i]);
}
keyfp = fopen(path_keys, "r");
@@ -981,111 +971,97 @@ void io_load_keys(const char *pager)
log = io_log_init();
skipped = loaded = line = 0;
while (fgets(buf, BUFSIZ, keyfp) != NULL) {
- char key_label[BUFSIZ], *p;
- struct ht_keybindings_s *ht_elm, ht_entry;
- const int AWAITED = 1;
- int assigned;
-
line++;
- if (skipped > MAX_ERRORS) {
- const char *too_many =
- _("\nToo many errors while reading configuration file!\n"
- "Please backup your keys file, remove it from directory, "
- "and launch calcurse again.\n");
-
- io_log_print(log, line, too_many);
- break;
- }
- for (p = buf; is_blank((int)*p); p++) ;
- if (p != buf)
- memmove(buf, p, strlen(p));
- if (buf[0] == '#' || buf[0] == '\n')
+ p = buf;
+ while (*p == ' ' || *p == '\t') p++;
+ if (*p == '#' || *p == '\n')
continue;
- if (sscanf(buf, "%s", key_label) != AWAITED) {
+ /* Find the virtual key by key label. */
+ if (sscanf(p, "%s", key_label) != 1) {
skipped++;
io_log_print(log, line,
_("Could not read key label"));
continue;
}
-
- /* Skip legacy entries. */
- if (strcmp(key_label, "generic-cut") == 0)
- continue;
-
+ p += strlen(key_label);
ht_entry.label = key_label;
- p = buf + strlen(key_label) + 1;
- ht_elm =
- HTABLE_LOOKUP(ht_keybindings, &ht_keys, &ht_entry);
+ ht_elm = HTABLE_LOOKUP(ht_keybindings, &ht_keys, &ht_entry);
if (!ht_elm) {
skipped++;
- io_log_print(log, line,
- _("Key label not recognized"));
+ asprintf(&msg,
+ _("Key label not recognized: \"%s\""),
+ key_label);
+ io_log_print(log, line, msg);
+ mem_free(msg);
continue;
}
- assigned = 0;
- for (;;) {
- char key_ch[BUFSIZ], tmpbuf[BUFSIZ];
-
- while (*p == ' ')
- p++;
- (void)strncpy(tmpbuf, p, BUFSIZ);
- tmpbuf[BUFSIZ - 1] = '\0';
- if (sscanf(tmpbuf, "%s", key_ch) == AWAITED) {
- int ch;
-
- if ((ch = keys_str2int(key_ch)) < 0) {
- char *unknown_key;
+ /* Assign keyboard keys to the virtual key. */
+ assigned = undefined = 0;
+ for (;;) {
+ if (sscanf(p, "%s%n", key_str, &n) != 1) {
+ if (assigned || undefined)
+ loaded++;
+ else {
skipped++;
- asprintf(&unknown_key,
- _("Error reading key: \"%s\""),
- key_ch);
- io_log_print(log, line, unknown_key);
- mem_free(unknown_key);
- } else {
- int used;
-
- used =
- keys_assign_binding(ch,
- ht_elm->
- key);
- if (used) {
- char *already_assigned;
-
- skipped++;
- asprintf(&already_assigned,
- _("\"%s\" assigned multiple times!"),
- key_ch);
- io_log_print(log, line,
- already_assigned);
- mem_free(already_assigned);
- } else {
- assigned++;
- }
+ asprintf(&msg,
+ _("No keys assigned to "
+ "\"%s\"."),
+ key_label);
+ io_log_print(log, line, msg);
+ mem_free(msg);
}
- p += strlen(key_ch) + 1;
- } else {
- if (assigned)
- loaded++;
break;
}
+ p += n;
+ if (!strcmp(key_str, "UNDEFINED")) {
+ undefined++;
+ keys_assign_binding(-1, ht_elm->key);
+ } else if ((key = keys_str2int(key_str)) < 0) {
+ skipped++;
+ asprintf(&msg,
+ _("Keyname not recognized: \"%s\""),
+ key_str);
+ io_log_print(log, line, msg);
+ mem_free(msg);
+ } else if (keys_assign_binding(key, ht_elm->key)) {
+ skipped++;
+ asprintf(&msg,
+ _("\"%s\" assigned twice: \"%s\"."),
+ key_str, key_label);
+ io_log_print(log, line, msg);
+ mem_free(msg);
+ } else
+ assigned++;
}
}
file_close(keyfp, __FILE_POS__);
+ if (loaded < NBVKEYS && (i = keys_fill_missing()) < 1) {
+ skipped++;
+ strcpy(key_label, keys_get_label((enum vkey)(-i)));
+ strcpy(key_str, keys_get_binding((enum vkey)(-i)));
+ asprintf(&msg, _("Action \"%s\" absent, but default key \"%s\" "
+ "assigned to another action."),
+ key_label, key_str);
+ io_log_print(log, line, msg);
+ mem_free(msg);
+ }
file_close(log->fd, __FILE_POS__);
if (skipped > 0) {
- const char *view_log =
- _("There were some errors when loading keys file.");
- io_log_display(log, view_log, pager);
+ msg = _("Errors in the keys file.");
+ io_log_display(log, msg, pager);
+ WARN_MSG(_("Remove offending line(s) from the keys file, "
+ "aborting..."));
+ exit_calcurse(EXIT_FAILURE);
}
io_log_free(log);
- EXIT_IF(skipped > MAX_ERRORS,
- _("Too many errors while reading keys file, aborting..."));
- if (loaded < NBKEYS)
- keys_fill_missing();
- if (keys_check_missing_bindings())
- WARN_MSG(_("Some actions do not have any associated key bindings!"));
+ /* Default keys were inserted. */
+ if (loaded < NBVKEYS)
+ io_save_keys();
+ /* Should never occur. */
+ EXIT_IF(keys_check_missing(),
+ _("Some actions do not have any associated key bindings!"));
}
int io_check_dir(const char *dir)
diff --git a/src/keys.c b/src/keys.c
index 3a25a0b..ae0375c 100644
--- a/src/keys.c
+++ b/src/keys.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -39,26 +39,73 @@
#include "calcurse.h"
-#define MAXKEYVAL KEY_MAX /* ncurses defines KEY_MAX as maximum key value */
-
-struct keydef_s {
- const char *label;
- const char *binding;
- const char *sb_label;
-};
+/*
+ * The interactive calcurse interface is controlled by "virtual keys", aka
+ * actions or commands. The virtual keys are defined by the type 'enum vkey',
+ * see calcurse.h. To each virtual key is assigned (or bound) zero or more
+ * keyboard keys/characters. A character (generated by a keyboard key) may be
+ * either an ordinary character or a pseudo-character. [An ordinary character
+ * is either a singlebyte ASCII character or a multibyte, UTF-8 encoded
+ * character; a pseudo-character (as supported by curses) is an escape sequence
+ * generated by a key.] A keyboard key/character is uniquely identified by its
+ * keyname (a character string) or by an integer (the Unicode code point of the
+ * character with a slight modification to accomodate the range of curses
+ * pseudo-characters). Mapping between the two forms is performed by the
+ * functions keys_str2int() and keys_int2str().
+ */
-static llist_t keys[NBKEYS];
-static enum key actions[MAXKEYVAL];
+/*
+ * Assignment of keys to virtual keys is held in the tabel keys[]. The entry for
+ * each virtual key is a linked list of keyboard keys (bindings); each list
+ * element is the keyname as returned by keys_int2str().
+ *
+ * At the very first run default keys are assigned to all virtual keys from a
+ * built-in table keydef[] and saved to disk in the calcurse config directory.
+ * Later the user may edit the key configuration and change the key bindings by
+ * adding/removing keys. If all keys are removed, the virtual key is left
+ * undefined. This state is also saved in the configuration file. The linked
+ * list for an undefined virtual key contains a single element with a null
+ * pointer as data.
+ */
+static llist_t keys[NBVKEYS];
+/*
+ * To cater for the other direction (which virtual key is a keyboard key
+ * assigned to), two constructions are needed: a table actions[] for the
+ * keyboard keys in the curses range, and a linked list actions_ext for
+ * multi-byte UTF-8 encoded keyboard characters.
+ *
+ * For each keyboard key (integer) in the curses key range, the virtual key
+ * (action) it is assigned to or, if not assigned, KEY_UNDEF.
+ */
+static enum vkey actions[KEY_MAX];
+/*
+ * For the millions of possible keyboard keys above the curses range, a linked
+ * list of keys which are actually bound to a virtual key.
+ * Each list element is a key_ext structure.
+ */
+llist_t actions_ext;
struct key_ext {
- int ch;
- enum key action;
+ int key;
+ enum vkey action;
};
-llist_t actions_ext;
+/*
+ * Assigning a keyboard key to a virtual key is accomplished by
+ * 1) either inserting the virtual key in the actions[] entry for the keyboard key
+ * or adding the pair (key, virtual key) to the list actions_ext
+ * 2) adding it in keys[] to the list for the virtual key
+ * See keys_assign_binding() below.
+ */
+/* The default key bindings for the virtual keys. */
+struct keydef_s {
+ const char *label; /* Name of the virtual key (action). */
+ const char *binding; /* String of space-separated keynames bound to it. */
+ const char *sb_label; /* Display name in the status bar menu. */
+};
#define gettext_noop(s) s
-static struct keydef_s keydef[NBKEYS] = {
+static struct keydef_s keydef[NBVKEYS] = {
{ "generic-cancel", "ESC", gettext_noop("Cancel") },
{ "generic-select", "SPC", gettext_noop("Select") },
{ "generic-credits", "@", gettext_noop("Credits") },
@@ -69,6 +116,7 @@ static struct keydef_s keydef[NBKEYS] = {
{ "generic-copy", "c", gettext_noop("Copy") },
{ "generic-paste", "p ^V", gettext_noop("Paste") },
{ "generic-change-view", "TAB", gettext_noop("Chg Win") },
+ { "generic-prev-view", "KEY_BTAB", gettext_noop("Prev Win") },
{ "generic-import", "i I", gettext_noop("Import") },
{ "generic-export", "x X", gettext_noop("Export") },
{ "generic-goto", "g G", gettext_noop("Go to") },
@@ -132,10 +180,11 @@ void keys_init(void)
int i;
const char *cp;
- for (i = 0; i < MAXKEYVAL; i++)
+ /* All keys unassigned. */
+ for (i = 0; i < KEY_MAX; i++)
actions[i] = KEY_UNDEF;
LLIST_INIT(&actions_ext);
- for (i = 0; i < NBKEYS; i++)
+ for (i = 0; i < NBVKEYS; i++)
LLIST_INIT(&keys[i]);
/* Initialization of the keynames table. */
@@ -146,7 +195,7 @@ void keys_init(void)
for (i = 1; i < 128; i++)
if ((cp = keyname(i)))
keynames[i] = mem_strdup(cp);
- /* ... and for the ncurses escape keys (pseudokeys). */
+ /* ... and for the ncurses pseudo-characters. */
for (i = KEY_MIN; i < KEY_MAX; i++)
if ((cp = keyname(i)))
keynames[i] = mem_strdup(cp);
@@ -189,7 +238,7 @@ void keys_free(void)
{
int i;
- for (i = 0; i < NBKEYS; i++) {
+ for (i = 0; i < NBVKEYS; i++) {
LLIST_FREE_INNER(&keys[i], key_free);
LLIST_FREE(&keys[i]);
}
@@ -205,31 +254,40 @@ void keys_dump_defaults(char *file)
_("FATAL ERROR: could not create default keys file."));
dump_intro(fd);
- for (i = 0; i < NBKEYS; i++)
+ for (i = 0; i < NBVKEYS; i++)
fprintf(fd, "%s %s\n", keydef[i].label,
keydef[i].binding);
file_close(fd, __FILE_POS__);
}
-const char *keys_get_label(enum key key)
+const char *keys_get_label(enum vkey key)
{
EXIT_IF(key < 0
- || key > NBKEYS,
+ || key > NBVKEYS,
_("FATAL ERROR: key value out of bounds"));
return keydef[key].label;
}
+const char *keys_get_binding(enum vkey key)
+{
+ EXIT_IF(key < 0
+ || key > NBVKEYS,
+ _("FATAL ERROR: key value out of bounds"));
+
+ return keydef[key].binding;
+}
+
static int key_ext_hasch(struct key_ext *k, void *cbdata)
{
- return (k->ch == *((int *)cbdata));
+ return (k->key == *((int *)cbdata));
}
-enum key keys_get_action(int pressed)
+enum vkey keys_get_action(int pressed)
{
if (pressed < 0) {
return -1;
- } else if (pressed > MAXKEYVAL) {
+ } else if (pressed > KEY_MAX) {
llist_item_t *i = LLIST_FIND_FIRST(&actions_ext, &pressed,
key_ext_hasch);
if (!i)
@@ -274,7 +332,7 @@ void keys_wait_for_any_key(WINDOW *win)
keys_wgetch(win);
}
-enum key keys_get(WINDOW *win, int *count, int *reg)
+enum vkey keys_get(WINDOW *win, int *count, int *reg)
{
int ch = '0';
@@ -312,60 +370,89 @@ enum key keys_get(WINDOW *win, int *count, int *reg)
}
}
-static void add_key_str(enum key action, int key)
+static void add_if_undefined(enum vkey action)
{
- if (action > NBKEYS)
- return;
+ /* If list is empty, mark action as UNDEFINED. */
+ if (!keys[action].head)
+ LLIST_ADD(&keys[action], NULL);
+}
- LLIST_ADD(&keys[action], keys_int2str(key));
+static void del_if_undefined(enum vkey action)
+{
+ /* Action UNDEFINED? */
+ if (!LLIST_GET_DATA(LLIST_FIRST(&keys[action])))
+ LLIST_REMOVE(&keys[action], keys[action].head);
}
-int keys_assign_binding(int key, enum key action)
+static void free_key_str(char *str)
{
- if (key < 0)
- return 1;
- if (key > KEY_MAX) {
- llist_item_t *i = LLIST_FIND_FIRST(&actions_ext, &key, key_ext_hasch);
- if (i)
- return 1;
- struct key_ext *k = mem_malloc(sizeof(struct key_ext));
- k->ch = key;
- k->action = action;
- LLIST_ADD(&actions_ext, k);
- } else {
- if (actions[key] != KEY_UNDEF)
- return 1;
- actions[key] = action;
- }
- add_key_str(action, key);
- return 0;
+ mem_free(str);
}
-static void del_key_str(enum key action, int key)
+static void add_key_str(enum vkey action, int key)
+{
+ if (action > NBVKEYS)
+ return;
+
+ del_if_undefined(action);
+ LLIST_ADD(&keys[action], keys_int2str(key));
+}
+
+static void del_key_str(enum vkey action, int key)
{
llist_item_t *i;
- char *oldstr = keys_int2str(key);;
+ char *oldstr = keys_int2str(key), *j;
- if (action > NBKEYS)
+ if (action > NBVKEYS)
return;
LLIST_FOREACH(&keys[action], i) {
- if (strcmp(LLIST_GET_DATA(i), oldstr) == 0) {
+ if (strcmp((j = LLIST_GET_DATA(i)), oldstr) == 0) {
LLIST_REMOVE(&keys[action], i);
+ free_key_str(j);
goto cleanup;
}
}
cleanup:
+ add_if_undefined(action);
mem_free(oldstr);
}
-void keys_remove_binding(int key, enum key action)
+/*
+ * Assign keyboard key "key" to virtual key "action" by
+ *
+ * - marking keyboard key "key" as used for virtual key "actual"
+ * - adding "key" to the list of assigned keys for "action" in the tabel keys[]
+ *
+ * The former is done by either inserting "action" in the "key" entry of tabel
+ * actions[], or for keys above the curses range, inserting (key, action) in the
+ * list actions_ext.
+ */
+int keys_assign_binding(int key, enum vkey action)
+{
+ if (key > KEY_MAX) {
+ if (LLIST_FIND_FIRST(&actions_ext, &key, key_ext_hasch))
+ return 1;
+ struct key_ext *k = mem_malloc(sizeof(struct key_ext));
+ k->key = key;
+ k->action = action;
+ LLIST_ADD(&actions_ext, k);
+ } else if (key > -1) {
+ if (actions[key] != KEY_UNDEF)
+ return 1;
+ actions[key] = action;
+ }
+ add_key_str(action, key);
+ return 0;
+}
+
+void keys_remove_binding(int key, enum vkey action)
{
if (key < 0)
return;
- if (key <= MAXKEYVAL) {
+ if (key <= KEY_MAX) {
actions[key] = KEY_UNDEF;
} else {
llist_item_t *i = LLIST_FIND_FIRST(&actions_ext, &key,
@@ -410,6 +497,8 @@ char *keys_int2str(int key)
{
char *res;
+ if (key == -1)
+ return NULL;
if (key < KEY_MAX) {
if (strcmp(keynames[key], "") == 0)
return NULL;
@@ -421,50 +510,44 @@ char *keys_int2str(int key)
}
}
-int keys_action_count_keys(enum key action)
+int keys_action_count_keys(enum vkey action)
{
llist_item_t *i;
int n = 0;
+ /* Action UNDEFINED? */
+ if (!LLIST_GET_DATA(LLIST_FIRST(&keys[action])))
+ return 0;
+
LLIST_FOREACH(&keys[action], i)
- n++;
+ n++;
return n;
}
-const char *keys_action_firstkey(enum key action)
+const char *keys_action_firstkey(enum vkey action)
{
const char *s = LLIST_GET_DATA(LLIST_FIRST(&keys[action]));
return (s != NULL) ? s : "XXX";
}
-const char *keys_action_nkey(enum key action, int keynum)
+const char *keys_action_nkey(enum vkey action, int keynum)
{
return LLIST_GET_DATA(LLIST_NTH(&keys[action], keynum));
}
-char *keys_action_allkeys(enum key action)
+char *keys_action_allkeys(enum vkey action)
{
llist_item_t *i;
- static char keystr[BUFSIZ];
- int keystrlen = 0;
- int entrylen;
-
- if (!LLIST_FIRST(&keys[action]))
- return NULL;
-
- keystr[0] = '\0';
- LLIST_FOREACH(&keys[action], i) {
- entrylen = strlen(LLIST_GET_DATA(i)) + 1;
- if (keystrlen + entrylen >= BUFSIZ)
- break;
- memcpy(keystr + keystrlen, LLIST_GET_DATA(i), entrylen - 1);
- keystr[keystrlen + entrylen - 1] = ' ';
- keystrlen += entrylen;
- }
-
- keystr[keystrlen] = '\0';
- return keystr;
+ struct string keystr;
+
+ string_init(&keystr);
+ if (!LLIST_GET_DATA(LLIST_FIRST(&keys[action])))
+ string_catf(&keystr, "%s", "UNDEFINED");
+ else
+ LLIST_FOREACH(&keys[action], i)
+ string_catf(&keystr, "%s ", LLIST_GET_DATA(i));
+ return string_buf(&keystr);
}
/* Need this to display keys properly inside status bar. */
@@ -509,7 +592,7 @@ keys_display_bindings_bar(WINDOW * win, int *bindings, int count,
const char *label;
- if (binding_key < NBKEYS) {
+ if (binding_key < NBVKEYS) {
strncpy(key, keys_action_firstkey(binding_key), UTF8_MAXLEN);
key[UTF8_MAXLEN] = '\0';
label = gettext(keydef[binding_key].sb_label);
@@ -561,9 +644,9 @@ keys_display_bindings_bar(WINDOW * win, int *bindings, int count,
* Display information about the given key.
* (could not add the keys descriptions to keydef variable, because of i18n).
*/
-void keys_popup_info(enum key key)
+void keys_popup_info(enum vkey key)
{
- char *info[NBKEYS];
+ char *info[NBVKEYS];
WINDOW *infowin;
info[KEY_GENERIC_CANCEL] = _("Cancel the ongoing action.");
@@ -582,6 +665,8 @@ void keys_popup_info(enum key key)
_("Paste an item at the current position.");
info[KEY_GENERIC_CHANGE_VIEW] =
_("Select next panel in calcurse main screen.");
+ info[KEY_GENERIC_PREV_VIEW] =
+ _("Select previous panel in calcurse main screen.");
info[KEY_GENERIC_IMPORT] = _("Import data from an external file.");
info[KEY_GENERIC_EXPORT] = _("Export data to a new file format.");
info[KEY_GENERIC_GOTO] = _("Select the day to go to.");
@@ -651,7 +736,7 @@ void keys_popup_info(enum key key)
info[KEY_LOWER_PRIORITY] =
_("Lower a task priority inside the todo panel.");
- if (key > NBKEYS)
+ if (key > NBVKEYS)
return;
#define WINROW 10
@@ -668,59 +753,75 @@ void keys_popup_info(enum key key)
void keys_save_bindings(FILE * fd)
{
int i;
- char *action;
+ char *keys;
EXIT_IF(fd == NULL, _("FATAL ERROR: null file pointer."));
dump_intro(fd);
- for (i = 0; i < NBKEYS; i++) {
- action = keys_action_allkeys(i);
- if (action)
- fprintf(fd, "%s %s\n", keydef[i].label, action);
+ for (i = 0; i < NBVKEYS; i++) {
+ if ((keys = keys_action_allkeys(i)))
+ fprintf(fd, "%s %s\n", keydef[i].label, keys);
}
+ mem_free(keys);
}
-int keys_check_missing_bindings(void)
+int keys_check_undefined(void)
{
int i;
- for (i = 0; i < NBKEYS; i++) {
- if (!LLIST_FIRST(&keys[i]))
+ for (i = 0; i < NBVKEYS; i++) {
+ if (!LLIST_GET_DATA(LLIST_FIRST(&keys[i])))
return 1;
}
return 0;
}
-void keys_fill_missing(void)
+int keys_check_missing(void)
{
int i;
- for (i = 0; i < NBKEYS; i++) {
- if (!LLIST_FIRST(&keys[i])) {
- char *p, tmpbuf[BUFSIZ];
-
- strncpy(tmpbuf, keydef[i].binding, BUFSIZ);
- tmpbuf[BUFSIZ - 1] = '\0';
- p = tmpbuf;
- for (;;) {
- char key_ch[BUFSIZ];
-
- while (*p == ' ')
- p++;
- if (sscanf(p, "%s", key_ch) == 1) {
- int ch, used;
-
- ch = keys_str2int(key_ch);
- used = keys_assign_binding(ch, i);
- if (used)
- WARN_MSG(_("When adding default key for \"%s\", "
- "\"%s\" was already assigned!"),
- keydef[i].label,
- key_ch);
- p += strlen(key_ch);
- } else {
- break;
- }
- }
+ for (i = 0; i < NBVKEYS; i++) {
+ if (!LLIST_FIRST(&keys[i]))
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * Insert default keybindings for missing actions.
+ * Return either the number of actions assigned to (on success) or, if default
+ * keys could not be assigned, the negative index into the keydef[] table of the
+ * failing action.
+ */
+int keys_fill_missing(void)
+{
+ int i, ch, assign, assigned;
+ char *p, key_ch[BUFSIZ];
+
+ for (i = assigned = 0; i < NBVKEYS; i++) {
+ if (LLIST_FIRST(&keys[i]))
+ continue;
+
+ p = (char *)keydef[i].binding;
+ for (assign = 0;;) {
+ while (*p == ' ')
+ p++;
+ if (sscanf(p, "%s", key_ch) == 1) {
+ ch = keys_str2int(key_ch);
+ if (keys_assign_binding(ch, i))
+ return -i;
+ else
+ assign = 1;
+ p += strlen(key_ch);
+ } else
+ break;
}
+ assigned += assign;
+ }
+
+ if (assigned) {
+ p = (assigned == 1) ? "": "s";
+ WARN_MSG(_("Default key(s) assigned to %d action%s."),
+ assigned, p);
}
+ return assigned;
}
diff --git a/src/listbox.c b/src/listbox.c
index 2b39aa8..d86f540 100644
--- a/src/listbox.c
+++ b/src/listbox.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/llist.c b/src/llist.c
index 04f16a1..d31f004 100644
--- a/src/llist.c
+++ b/src/llist.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/llist.h b/src/llist.h
index 1f7f419..0dd15bf 100644
--- a/src/llist.h
+++ b/src/llist.h
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/llist_ts.h b/src/llist_ts.h
index 1604d3e..a4b6184 100644
--- a/src/llist_ts.h
+++ b/src/llist_ts.h
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/mem.c b/src/mem.c
index 8b8a5d5..ce3cf80 100644
--- a/src/mem.c
+++ b/src/mem.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/note.c b/src/note.c
index 4f20d9d..655ad89 100644
--- a/src/note.c
+++ b/src/note.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/notify.c b/src/notify.c
index 3491e8e..6eda361 100644
--- a/src/notify.c
+++ b/src/notify.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/pcal.c b/src/pcal.c
index 78da0bb..435656a 100644
--- a/src/pcal.c
+++ b/src/pcal.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -102,8 +102,8 @@ static void pcal_export_header(FILE * stream)
{
fputs("# calcurse pcal export\n", stream);
fputs("\n# =======\n# options\n# =======\n", stream);
- fprintf(stream, "opt -A -K -l -m -F %s\n",
- ui_calendar_week_begins_on_monday()? "Monday" : "Sunday");
+ fprintf(stream, "opt -A -K -l -m -F %s\n", get_wday_default_string(
+ ui_calendar_get_wday_start()));
fputs("# Display week number (i.e. 1-52) on every Monday\n",
stream);
fprintf(stream, "all monday in all week %%w\n");
diff --git a/src/queue.c b/src/queue.c
index a00ebad..41cb69b 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/recur.c b/src/recur.c
index 72cb40f..12f76b8 100644
--- a/src/recur.c
+++ b/src/recur.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -1003,14 +1003,20 @@ static int find_occurrence(time_t start, long dur, struct rpt *rpt, llist_t *exc
if (rpt->until && t >= NEXTDAY(rpt->until))
return 0;
- /* Does it span the given day? */
- if (t + DUR(t) < day)
+ /* Does it span the given day?
+ *
+ * NOTE: An appointment ending at 00:00 is not considered to span the
+ * given day, unless the appointment is an appointment without
+ * specified end time, which is internally treated as appointment with
+ * duration 0.
+ */
+ if (t + DUR(t) >= day || (t == day && dur == 0)) {
+ if (occurrence)
+ *occurrence = t;
+ return 1;
+ } else {
return 0;
-
- if (occurrence)
- *occurrence = t;
-
- return 1;
+ }
}
#undef DUR
diff --git a/src/sha1.c b/src/sha1.c
index 3826c76..6ab63f8 100644
--- a/src/sha1.c
+++ b/src/sha1.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -43,6 +43,7 @@
#include <stdlib.h>
#include <string.h>
+#include "config.h"
#include "sha1.h"
#define rol(val, n) (((val) << (n)) | ((val) >> (32 - (n))))
diff --git a/src/sha1.h b/src/sha1.h
index bdba4e8..25d60b9 100644
--- a/src/sha1.h
+++ b/src/sha1.h
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -52,6 +52,6 @@ typedef struct {
void sha1_init(sha1_ctx_t *);
void sha1_update(sha1_ctx_t *, const uint8_t *, unsigned int);
-void sha1_final(sha1_ctx_t *, uint8_t *);
+void sha1_final(sha1_ctx_t *, uint8_t[SHA1_DIGESTLEN]);
void sha1_digest(const char *, char *);
void sha1_stream(FILE *, char *);
diff --git a/src/sigs.c b/src/sigs.c
index fab4498..9320652 100644
--- a/src/sigs.c
+++ b/src/sigs.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/strings.c b/src/strings.c
index b3dc1c4..45c9310 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/todo.c b/src/todo.c
index 932e02a..9bd8f8a 100644
--- a/src/todo.c
+++ b/src/todo.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/ui-calendar.c b/src/ui-calendar.c
index 4a8ef44..c1719d8 100644
--- a/src/ui-calendar.c
+++ b/src/ui-calendar.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -45,14 +45,14 @@
#include "calcurse.h"
static struct date today, slctd_day;
-static unsigned ui_calendar_view, week_begins_on_monday;
+static unsigned ui_calendar_view;
+static int wday_start; /* this is used in signed arithmetic */
static pthread_mutex_t date_thread_mutex = PTHREAD_MUTEX_INITIALIZER;
-static void draw_monthly_view(struct scrollwin *, struct date *, unsigned);
-static void draw_weekly_view(struct scrollwin *, struct date *, unsigned);
-static void (*draw_calendar[CAL_VIEWS]) (struct scrollwin *, struct date *,
- unsigned) = {
-draw_monthly_view, draw_weekly_view};
+static void draw_monthly_view(struct scrollwin *, struct date *);
+static void draw_weekly_view(struct scrollwin *, struct date *);
+static void (*draw_calendar[CAL_VIEWS]) (struct scrollwin *,
+ struct date *) = {draw_monthly_view, draw_weekly_view};
/* Six weeks cover a month. */
static int monthly_view_cache[WEEKINDAYS * 6];
@@ -148,30 +148,26 @@ struct date *ui_calendar_get_today(void)
/* Needed to display sunday or monday as the first day of week in calendar. */
void ui_calendar_set_first_day_of_week(enum wday first_day)
{
- switch (first_day) {
- case SUNDAY:
- week_begins_on_monday = 0;
- break;
- case MONDAY:
- week_begins_on_monday = 1;
- break;
- default:
+ if (first_day >= 0 && first_day <= 6)
+ wday_start = first_day;
+ else {
ERROR_MSG(_("ERROR setting first day of week"));
- week_begins_on_monday = 0;
- /* NOTREACHED */
+ wday_start = 0;
}
}
/* Swap first day of week in calendar. */
void ui_calendar_change_first_day_of_week(void)
{
- week_begins_on_monday = !week_begins_on_monday;
+ wday_start++;
+ if(wday_start >= WEEKINDAYS)
+ wday_start = 0;
}
/* Return 1 if week begins on monday, 0 otherwise. */
-unsigned ui_calendar_week_begins_on_monday(void)
+int ui_calendar_get_wday_start(void)
{
- return week_begins_on_monday;
+ return wday_start;
}
/* Fill in the given variable with the current date. */
@@ -219,18 +215,14 @@ void ui_calendar_monthly_view_cache_set_invalid(void)
monthly_view_cache_valid = 0;
}
-static int weeknum(const struct tm *t, int firstweekday)
+static int weeknum(const struct tm *t, int wday_start)
{
int wday, wnum;
wday = t->tm_wday;
- if (firstweekday == MONDAY) {
- if (wday == SUNDAY)
- wday = 6;
- else
- wday--;
- }
- wnum = ((t->tm_yday + WEEKINDAYS - wday) / WEEKINDAYS);
+ wnum = ((t->tm_yday + WEEKINDAYS + -modify_wday(wday, -wday_start))
+ / WEEKINDAYS);
+
if (wnum < 0)
wnum = 0;
@@ -296,7 +288,7 @@ static int ISO8601weeknum(const struct tm *t)
* Return the tm structure for the first day of the first week
* (containing a day) of the selected month.
*/
-static struct tm get_first_day(unsigned sunday_first)
+static struct tm get_first_day(int wday_start)
{
struct tm t;
struct date d;
@@ -308,26 +300,20 @@ static struct tm get_first_day(unsigned sunday_first)
t = date2tm(d, 0, 0);
mktime(&t);
/* get the first day of the week */
- date_change(&t, 0,
- -(sunday_first ?
- t.tm_wday :
- (t.tm_wday + WEEKINDAYS - 1) % WEEKINDAYS));
+ date_change(&t, 0, -modify_wday(t.tm_wday, -wday_start));
+
return t;
}
-static struct tm get_first_weekday(unsigned sunday_first)
+static struct tm get_first_weekday(int wday_start)
{
- int c_wday, days_to_remove;
+ int c_wday;
struct tm t;
c_wday = ui_calendar_get_wday(&slctd_day);
- if (sunday_first)
- days_to_remove = c_wday;
- else
- days_to_remove = c_wday == 0 ? WEEKINDAYS - 1 : c_wday - 1;
-
t = date2tm(slctd_day, 0, 0);
- date_change(&t, 0, -days_to_remove);
+
+ date_change(&t, 0, -modify_wday(c_wday, -wday_start));
return t;
}
@@ -346,8 +332,7 @@ static void draw_week_number(struct scrollwin *sw, struct tm t)
/* Draw the monthly view inside calendar panel. */
static void
-draw_monthly_view(struct scrollwin *sw, struct date *current_day,
- unsigned sunday_first)
+draw_monthly_view(struct scrollwin *sw, struct date *current_day)
{
struct date c_day;
int slctd, w_day, numdays, j, week = 0;
@@ -373,7 +358,7 @@ draw_monthly_view(struct scrollwin *sw, struct date *current_day,
* Step forward by week until past the last day of the month.
* The first day of the first week may belong to the previous month.
*/
- t = t_first = get_first_day(sunday_first);
+ t = t_first = get_first_day(wday_start);
t.tm_mday += WEEKINDAYS;
mktime(&t);
last_day += WEEKINDAYS;
@@ -423,7 +408,7 @@ draw_monthly_view(struct scrollwin *sw, struct date *current_day,
custom_apply_attr(sw->inner, ATTR_HIGHEST);
for (j = 0; j < WEEKINDAYS; j++) {
mvwaddstr(sw->inner, ofs_y, ofs_x + weekw + 4 * j,
- nl_langinfo(ABDAY_1 + (1 + j - sunday_first) % WEEKINDAYS));
+ nl_langinfo(ABDAY_1 + modify_wday(j, wday_start)));
}
custom_remove_attr(sw->inner, ATTR_HIGHEST);
WINS_CALENDAR_UNLOCK;
@@ -449,11 +434,9 @@ draw_monthly_view(struct scrollwin *sw, struct date *current_day,
if (j == first_day ||
(mo == 1 && j == WEEKINDAYS) ||
(mo == 12 && j >= 4 * WEEKINDAYS)) {
- if (sunday_first)
- date_change(&t, 0, 1);
+ date_change(&t, 0, WDAY(MONDAY));
week = ISO8601weeknum(&t);
- if (sunday_first)
- date_change(&t, 0, -1);
+ date_change(&t, 0, -WDAY(MONDAY));
} else
week++;
}
@@ -506,8 +489,7 @@ draw_monthly_view(struct scrollwin *sw, struct date *current_day,
/* Draw the weekly view inside calendar panel. */
static void
-draw_weekly_view(struct scrollwin *sw, struct date *current_day,
- unsigned sunday_first)
+draw_weekly_view(struct scrollwin *sw, struct date *current_day)
{
#define DAYSLICESNO 6
const int WCALWIDTH = 28;
@@ -520,14 +502,14 @@ draw_weekly_view(struct scrollwin *sw, struct date *current_day,
OFFX = (wins_sbar_width() - 2 - WCALWIDTH) / 2;
/* Print the week number, calculated from monday. */
- t = get_first_weekday(0);
+ t = get_first_weekday(MONDAY);
draw_week_number(sw, t);
/* Now draw calendar view. */
for (j = 0; j < WEEKINDAYS; j++) {
/* get next day */
if (j == 0)
- t = get_first_weekday(sunday_first);
+ t = get_first_weekday(wday_start);
else
date_change(&t, 0, 1);
@@ -538,7 +520,7 @@ draw_weekly_view(struct scrollwin *sw, struct date *current_day,
/* print the day names, with regards to the first day of the week */
custom_apply_attr(sw->inner, ATTR_HIGHEST);
mvwaddstr(sw->inner, OFFY, OFFX + 4 * j,
- nl_langinfo(ABDAY_1 + (1 + j - sunday_first) % WEEKINDAYS));
+ nl_langinfo(ABDAY_1 + modify_wday(j, wday_start)));
custom_remove_attr(sw->inner, ATTR_HIGHEST);
/* Check if the day to be printed has an item or not. */
@@ -578,9 +560,8 @@ draw_weekly_view(struct scrollwin *sw, struct date *current_day,
if (j != WEEKINDAYS - 1
&& i != DAYSLICESNO - 1) {
WINS_CALENDAR_LOCK;
- mvwhline(sw->inner, OFFY + 2 + i,
- OFFX + 3 + 4 * j, ACS_S9,
- 2);
+ mvwaddstr(sw->inner, OFFY + 2 + i,
+ OFFX + 3 + 4 * j, "__");
WINS_CALENDAR_UNLOCK;
}
if (slices[i]) {
@@ -611,9 +592,9 @@ draw_weekly_view(struct scrollwin *sw, struct date *current_day,
/* Draw marks to indicate midday on the sides of the calendar. */
WINS_CALENDAR_LOCK;
custom_apply_attr(sw->inner, ATTR_HIGHEST);
- mvwhline(sw->inner, OFFY + 1 + DAYSLICESNO / 2, OFFX, ACS_S9, 1);
- mvwhline(sw->inner, OFFY + 1 + DAYSLICESNO / 2,
- OFFX + WCALWIDTH - 1, ACS_S9, 1);
+ mvwaddch(sw->inner, OFFY + 1 + DAYSLICESNO / 2, OFFX, '<');
+ mvwaddch(sw->inner, OFFY + 1 + DAYSLICESNO / 2,
+ OFFX + WCALWIDTH - 1, '>');
custom_remove_attr(sw->inner, ATTR_HIGHEST);
WINS_CALENDAR_UNLOCK;
@@ -624,11 +605,9 @@ draw_weekly_view(struct scrollwin *sw, struct date *current_day,
void ui_calendar_update_panel(void)
{
struct date current_day;
- unsigned sunday_first;
ui_calendar_store_current_date(&current_day);
- sunday_first = !ui_calendar_week_begins_on_monday();
- draw_calendar[ui_calendar_view] (&sw_cal, &current_day, sunday_first);
+ draw_calendar[ui_calendar_view] (&sw_cal, &current_day);
wins_scrollwin_display(&sw_cal, NOHILT);
}
@@ -728,28 +707,14 @@ void ui_calendar_move(enum move move, int count)
ret = date_change(&t, count * YEARINMONTHS, 0);
break;
case WEEK_START:
- /* Normalize struct tm to get week day number. */
mktime(&t);
- if (ui_calendar_week_begins_on_monday())
- days_to_remove =
- ((t.tm_wday ==
- 0) ? WEEKINDAYS - 1 : t.tm_wday - 1);
- else
- days_to_remove =
- ((t.tm_wday == 0) ? 0 : t.tm_wday);
+ days_to_remove = WDAY(t.tm_wday);
days_to_remove += (count - 1) * WEEKINDAYS;
ret = date_change(&t, 0, -days_to_remove);
break;
case WEEK_END:
mktime(&t);
- if (ui_calendar_week_begins_on_monday())
- days_to_add =
- ((t.tm_wday ==
- 0) ? 0 : WEEKINDAYS - t.tm_wday);
- else
- days_to_add = ((t.tm_wday == 0) ?
- WEEKINDAYS - 1 : WEEKINDAYS - 1 -
- t.tm_wday);
+ days_to_add = modify_wday(-t.tm_wday, wday_start - 1);
days_to_add += (count - 1) * WEEKINDAYS;
ret = date_change(&t, 0, days_to_add);
break;
diff --git a/src/ui-day.c b/src/ui-day.c
index 0bd82bb..6a038fa 100644
--- a/src/ui-day.c
+++ b/src/ui-day.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/ui-todo.c b/src/ui-todo.c
index cad89fd..46933b3 100644
--- a/src/ui-todo.c
+++ b/src/ui-todo.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -207,14 +207,16 @@ void ui_todo_draw(int n, WINDOW *win, int y, int hilt, void *cb_data)
if (hilt)
custom_apply_attr(win, ATTR_HIGHEST);
- if (utf8_strwidth(todo->mesg) < width) {
- mesg = todo->mesg;
- } else {
+ mesg = todo->mesg;
+ if (mesg[0] == '\0')
+ mesg = EMPTY_EVENT_DESC_DEFAULT;
+
+ if (utf8_strwidth(mesg) >= width) {
width -= 3;
- for (j = 0; todo->mesg[j] && width > 0; j++) {
- if (!UTF8_ISCONT(todo->mesg[j]))
- width -= utf8_width(&todo->mesg[j]);
- buf[j] = todo->mesg[j];
+ for (j = 0; mesg[j] && width > 0; j++) {
+ if (!UTF8_ISCONT(mesg[j]))
+ width -= utf8_width(&mesg[j]);
+ buf[j] = mesg[j];
}
if (j) {
buf[j - 1] = '.';
@@ -325,6 +327,11 @@ void ui_todo_popup_item(void)
asprintf(&notepath, "%s%s", path_notes, item->note);
fp = fopen(notepath, "r");
+ if (fp == NULL) {
+ item_in_popup(NULL, NULL, item->mesg, _("TODO:"));
+ return;
+ }
+
note_read_contents(note, note_size, fp);
fclose(fp);
mem_free(notepath);
diff --git a/src/utf8.c b/src/utf8.c
index 1fd4c3b..997a4fa 100644
--- a/src/utf8.c
+++ b/src/utf8.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/utils.c b/src/utils.c
index 1a480df..2d30bfc 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -626,6 +626,42 @@ long min2sec(unsigned minutes)
return minutes * MININSEC;
}
+int modify_wday(int wday, int shift)
+{
+ return (WEEKINDAYS + wday + shift) % WEEKINDAYS;
+}
+
+/* returns char* representing a wday, used for internal functions */
+char *get_wday_default_string(int wday)
+{
+ switch(wday) {
+ case MONDAY:
+ return "Monday";
+ break;
+ case TUESDAY:
+ return "Tuesday";
+ break;
+ case WEDNESDAY:
+ return "Wednesday";
+ break;
+ case THURSDAY:
+ return "Thursday";
+ break;
+ case FRIDAY:
+ return "Friday";
+ break;
+ case SATURDAY:
+ return "Saturday";
+ break;
+ case SUNDAY:
+ return "Sunday";
+ break;
+ default:
+ return "Sunday";
+ break;
+ }
+}
+
/*
* Display a scroll bar when there are so many items that they
* can not be displayed inside the corresponding panel.
diff --git a/src/vars.c b/src/vars.c
index 2c308e7..97a129a 100644
--- a/src/vars.c
+++ b/src/vars.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -140,6 +140,7 @@ void vars_init(void)
conf.input_datefmt = 1;
conf.heading_pos = RIGHT;
strcpy(conf.day_heading, DAY_HEADING_DEFAULT);
+ strcpy(conf.timefmt, APPT_TIME_DEFAULT);
datefmt_str[0] = _("mm/dd/yyyy");
datefmt_str[1] = _("dd/mm/yyyy");
@@ -174,6 +175,8 @@ void vars_init(void)
ui_calendar_set_first_day_of_week(MONDAY);
+ wins_set_sbar_width(col * SBARMINWIDTH / 100);
+
/* Pad structure to scroll text inside the appointment panel */
apad.length = 1;
apad.first_onscreen = 0;
diff --git a/src/vector.c b/src/vector.c
index fd468ab..796ef8e 100644
--- a/src/vector.c
+++ b/src/vector.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/vector.h b/src/vector.h
index 86cb3b8..7648df2 100644
--- a/src/vector.h
+++ b/src/vector.h
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
diff --git a/src/wins.c b/src/wins.c
index 62689d9..46ac98e 100644
--- a/src/wins.c
+++ b/src/wins.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -229,7 +229,7 @@ void wins_sbar_winc(void)
void wins_sbar_wdec(void)
{
- if (sbarwidth_perc > 0)
+ if (col * sbarwidth_perc / 100 > SBARMINWIDTH)
sbarwidth_perc--;
}
@@ -254,6 +254,15 @@ void wins_slctd_next(void)
slctd_win++;
}
+/* Shift-TAB key was hit in the interface, need to select previous window. */
+void wins_slctd_prev(void)
+{
+ if (slctd_win == CAL)
+ slctd_win = TOD;
+ else
+ slctd_win--;
+}
+
static void wins_init_panels(void)
{
wins_scrollwin_init(&sw_cal, win[CAL].y, win[CAL].x,
@@ -651,6 +660,7 @@ void wins_update_bindings(void)
static int bindings_cal[] = {
KEY_GENERIC_HELP, KEY_GENERIC_QUIT, KEY_GENERIC_SAVE,
KEY_GENERIC_RELOAD, KEY_GENERIC_CHANGE_VIEW,
+ KEY_GENERIC_PREV_VIEW,
KEY_GENERIC_SCROLL_DOWN, KEY_GENERIC_SCROLL_UP, KEY_MOVE_UP,
KEY_MOVE_DOWN, KEY_MOVE_LEFT, KEY_MOVE_RIGHT, KEY_GENERIC_GOTO,
KEY_GENERIC_IMPORT, KEY_GENERIC_EXPORT, KEY_START_OF_WEEK,
@@ -666,6 +676,7 @@ void wins_update_bindings(void)
static int bindings_apoint[] = {
KEY_GENERIC_HELP, KEY_GENERIC_QUIT, KEY_GENERIC_SAVE,
KEY_GENERIC_RELOAD, KEY_GENERIC_CHANGE_VIEW,
+ KEY_GENERIC_PREV_VIEW,
KEY_GENERIC_IMPORT, KEY_GENERIC_EXPORT, KEY_ADD_ITEM,
KEY_DEL_ITEM, KEY_EDIT_ITEM, KEY_VIEW_ITEM, KEY_PIPE_ITEM,
KEY_GENERIC_REDRAW, KEY_REPEAT_ITEM, KEY_FLAG_ITEM,
@@ -682,6 +693,7 @@ void wins_update_bindings(void)
static int bindings_todo[] = {
KEY_GENERIC_HELP, KEY_GENERIC_QUIT, KEY_GENERIC_SAVE,
KEY_GENERIC_RELOAD, KEY_GENERIC_CHANGE_VIEW,
+ KEY_GENERIC_PREV_VIEW,
KEY_GENERIC_SCROLL_DOWN, KEY_GENERIC_SCROLL_UP,
KEY_GENERIC_IMPORT, KEY_GENERIC_EXPORT, KEY_ADD_ITEM,
KEY_DEL_ITEM, KEY_EDIT_ITEM, KEY_VIEW_ITEM, KEY_PIPE_ITEM,
diff --git a/test/ical-009.sh b/test/ical-009.sh
index dbd0a30..6c1a0d4 100755
--- a/test/ical-009.sh
+++ b/test/ical-009.sh
@@ -18,7 +18,7 @@ if [ "$1" = 'actual' ]; then
elif [ "$1" = 'expected' ]; then
cat <<EOD
Import process report: 0131 lines read
-2 apps / 0 events / 1 todo / 21 skipped
+3 apps / 0 events / 1 todo / 20 skipped
VEVENT [12]: invalid or malformed event start time.
VEVENT [17]: item start date not defined.
VEVENT [21]: rrule frequency not supported.
@@ -26,7 +26,6 @@ VEVENT [27]: malformed summary line.
VTODO [32]: item priority is invalid (must be between 0 and 9).
VEVENT [36]: malformed exceptions line.
VEVENT [43]: exception date, but no recurrence rule.
-VEVENT [49]: line break in summary.
VEVENT [54]: malformed description line.
VEVENT [60]: malformed description.
VTODO [72]: malformed summary.
diff --git a/test/run-test.c b/test/run-test.c
index d1db112..41d55ad 100644
--- a/test/run-test.c
+++ b/test/run-test.c
@@ -1,7 +1,7 @@
/*
* Calcurse - text-based organizer
*
- * Copyright (c) 2004-2020 calcurse Development Team <misc@calcurse.org>
+ * Copyright (c) 2004-2023 calcurse Development Team <misc@calcurse.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without