From 20709b7a7e1bdaae59d704596898e727e1155d77 Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Wed, 17 Jul 2013 01:11:00 +0200
Subject: Drop legacy online help system

Remove the old online help system and change the generic help key to do
the same thing as ":help".

This also removes some context-sensitive help. We should think about
re-adding support for this later.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
---
 src/Makefile.am |   1 -
 src/calcurse.c  |   3 +-
 src/calcurse.h  |   4 -
 src/custom.c    |  39 ---
 src/help.c      | 804 --------------------------------------------------------
 5 files changed, 1 insertion(+), 850 deletions(-)
 delete mode 100644 src/help.c

(limited to 'src')

diff --git a/src/Makefile.am b/src/Makefile.am
index 3559a25..85a8780 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -19,7 +19,6 @@ calcurse_SOURCES = \
 	day.c \
 	event.c \
 	getstring.c \
-	help.c \
 	ical.c \
 	io.c \
 	keys.c \
diff --git a/src/calcurse.c b/src/calcurse.c
index 859bc1e..c3a7ce8 100644
--- a/src/calcurse.c
+++ b/src/calcurse.c
@@ -278,8 +278,7 @@ static inline void key_view_note(void)
 
 static inline void key_generic_help(void)
 {
-	wins_status_bar();
-	help_screen();
+	wins_launch_external(DOCDIR "/intro.txt", conf.pager);
 	wins_update(FLAG_ALL);
 }
 
diff --git a/src/calcurse.h b/src/calcurse.h
index e0fe84f..c595cdb 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -719,10 +719,6 @@ struct event *event_scan(FILE *, struct tm, int, char *);
 void event_delete(struct event *);
 void event_paste_item(struct event *, long);
 
-/* help.c */
-void help_wins_init(struct scrollwin *, int, int, int, int);
-void help_screen(void);
-
 /* getstring.c */
 enum getstr getstring(WINDOW *, char *, int, int, int);
 int updatestring(WINDOW *, char **, int, int);
diff --git a/src/custom.c b/src/custom.c
index da632bf..7bcbffc 100644
--- a/src/custom.c
+++ b/src/custom.c
@@ -208,18 +208,9 @@ static void display_layout_config(struct window *lwin, int mark,
 /* Choose the layout */
 void custom_layout_config(void)
 {
-	struct scrollwin hwin;
 	struct window conf_win;
 	int ch, mark, cursor, need_reset;
 	const char *label = _("layout configuration");
-	const char *help_text =
-	    _("With this configuration menu, one can choose where panels will be\n"
-	     "displayed inside calcurse screen. \n"
-	     "It is possible to choose between eight different configurations.\n"
-	     "\nIn the configuration representations, letters correspond to:\n\n"
-	     "       'c' -> calendar panel\n\n"
-	     "       'a' -> appointment panel\n\n"
-	     "       't' -> todo panel\n\n");
 
 	conf_win.p = NULL;
 	custom_confwin_init(&conf_win, label);
@@ -231,18 +222,6 @@ void custom_layout_config(void)
 		keys_getch(win[KEY].p, NULL, NULL)) != KEY_GENERIC_QUIT) {
 		need_reset = 0;
 		switch (ch) {
-		case KEY_GENERIC_HELP:
-			help_wins_init(&hwin, 0, 0,
-				       (notify_bar())? row - 3 : row - 2,
-				       col);
-			mvwprintw(hwin.pad.p, 1, 0, help_text,
-				  SBARMINWIDTH);
-			hwin.total_lines = 7;
-			wins_scrollwin_display(&hwin);
-			wgetch(hwin.win.p);
-			wins_scrollwin_delete(&hwin);
-			need_reset = 1;
-			break;
 		case KEY_GENERIC_SELECT:
 			mark = cursor;
 			break;
@@ -290,7 +269,6 @@ void custom_layout_config(void)
 /* Sidebar configuration screen. */
 void custom_sidebar_config(void)
 {
-	struct scrollwin hwin;
 	struct binding quit = { _("Exit"), KEY_GENERIC_QUIT };
 	struct binding inc = { _("Width +"), KEY_MOVE_UP };
 	struct binding dec = { _("Width -"), KEY_MOVE_DOWN };
@@ -298,13 +276,6 @@ void custom_sidebar_config(void)
 	struct binding *bindings[] = {
 		&inc, &dec, &help, &quit
 	};
-	const char *help_text =
-	    _("This configuration screen is used to change the width of the side bar.\n"
-	     "The side bar is the part of the screen which contains two panels:\n"
-	     "the calendar and, depending on the chosen layout, either the todo list\n"
-	     "or the appointment list.\n\n"
-	     "The side bar width can be up to 50%% of the total screen width, but\n"
-	     "can't be smaller than %d characters wide.\n\n");
 	int ch, bindings_size;
 
 	bindings_size = ARRAY_SIZE(bindings);
@@ -322,16 +293,6 @@ void custom_sidebar_config(void)
 		case KEY_MOVE_DOWN:
 			wins_sbar_wdec();
 			break;
-		case KEY_GENERIC_HELP:
-			help_wins_init(&hwin, 0, 0,
-				       (notify_bar())? row - 3 : row - 2,
-				       col);
-			mvwaddstr(hwin.pad.p, 1, 0, help_text);
-			hwin.total_lines = 6;
-			wins_scrollwin_display(&hwin);
-			wgetch(hwin.win.p);
-			wins_scrollwin_delete(&hwin);
-			break;
 		case KEY_RESIZE:
 			break;
 		default:
diff --git a/src/help.c b/src/help.c
deleted file mode 100644
index b1c50b3..0000000
--- a/src/help.c
+++ /dev/null
@@ -1,804 +0,0 @@
-/*
- * Calcurse - text-based organizer
- *
- * Copyright (c) 2004-2013 calcurse Development Team <misc@calcurse.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the
- *        following disclaimer.
- *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the
- *        following disclaimer in the documentation and/or other
- *        materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Send your feedback or comments to : misc@calcurse.org
- * Calcurse home page : http://calcurse.org
- *
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <sys/types.h>
-
-#include "calcurse.h"
-
-#define HELPTEXTSIZ 4096
-
-typedef struct {
-	char *title;
-	char text[HELPTEXTSIZ];
-} help_page_t;
-
-typedef enum {
-	HELP_MAIN,
-	HELP_SAVE,
-	HELP_IMPORT,
-	HELP_EXPORT,
-	HELP_DISPLACEMENT,
-	HELP_VIEW,
-	HELP_PIPE,
-	HELP_TAB,
-	HELP_GOTO,
-	HELP_DELETE,
-	HELP_ADD,
-	HELP_COPY_PASTE,
-	HELP_EDIT,
-	HELP_ENOTE,
-	HELP_VNOTE,
-	HELP_PRIORITY,
-	HELP_REPEAT,
-	HELP_FLAG,
-	HELP_CONFIG,
-	HELP_GENERAL,
-	HELP_OTHER,
-	HELP_CREDITS,
-	HELPSCREENS,
-	NOPAGE
-} help_pages_e;
-
-/* Returns the number of lines in an help text. */
-static int get_help_lines(char *text)
-{
-	int i, newline;
-
-	newline = 0;
-	for (i = 0; text[i]; i++) {
-		if (text[i] == '\n')
-			newline++;
-	}
-	return newline + 1;
-}
-
-/*
- * Write the desired help text inside the help pad, and return the number
- * of lines that were written.
- */
-static int
-help_write_pad(struct window *win, char *title, char *text,
-	       enum key action)
-{
-	int colnum, rownum;
-	const char *bindings_title = _("key bindings: %s");
-	char *bindings;
-
-	colnum = 0;
-	rownum = 0;
-	erase_window_part(win->p, rownum, colnum, BUFSIZ, win->w);
-	custom_apply_attr(win->p, ATTR_HIGHEST);
-	mvwaddstr(win->p, rownum, colnum, title);
-	if ((int)action != KEY_RESIZE && action < NBKEYS) {
-		switch (action) {
-		case KEY_END_OF_WEEK:
-		case KEY_START_OF_WEEK:
-		case KEY_MOVE_UP:
-		case KEY_MOVE_DOWN:
-		case KEY_MOVE_RIGHT:
-		case KEY_MOVE_LEFT:
-		case KEY_GENERIC_HELP:
-		case KEY_GENERIC_REDRAW:
-		case KEY_GENERIC_ADD_APPT:
-		case KEY_GENERIC_ADD_TODO:
-		case KEY_GENERIC_PREV_DAY:
-		case KEY_GENERIC_NEXT_DAY:
-		case KEY_GENERIC_PREV_WEEK:
-		case KEY_GENERIC_NEXT_WEEK:
-		case KEY_GENERIC_PREV_MONTH:
-		case KEY_GENERIC_NEXT_MONTH:
-		case KEY_GENERIC_PREV_YEAR:
-		case KEY_GENERIC_NEXT_YEAR:
-		case KEY_GENERIC_GOTO_TODAY:
-		case KEY_GENERIC_CREDITS:
-		case KEY_GENERIC_COPY:
-		case KEY_GENERIC_PASTE:
-			break;
-		default:
-			bindings = keys_action_allkeys(action);
-
-			if (bindings) {
-				colnum =
-				    win->w - strlen(bindings_title) -
-				    strlen(bindings);
-				mvwprintw(win->p, rownum, colnum,
-					  bindings_title, bindings);
-			}
-		}
-	}
-	colnum = 0;
-	rownum += get_help_lines(title);
-	custom_remove_attr(win->p, ATTR_HIGHEST);
-	mvwaddstr(win->p, rownum, colnum, text);
-	rownum += get_help_lines(text);
-	return rownum;
-}
-
-/*
- * Create and init help screen and its pad, which is used to make the scrolling
- * faster.
- */
-void help_wins_init(struct scrollwin *hwin, int x, int y, int h, int w)
-{
-	const int PADOFFSET = 4;
-	const int TITLELINES = 3;
-
-	hwin->win.x = x;
-	hwin->win.y = y;
-	hwin->win.h = h;
-	hwin->win.w = w;
-
-	hwin->pad.x = PADOFFSET;
-	hwin->pad.y = TITLELINES;
-	hwin->pad.h = BUFSIZ;
-	hwin->pad.w = hwin->win.w - 2 * PADOFFSET + 1;
-
-	hwin->label = _("Calcurse help");
-	wins_scrollwin_init(hwin);
-	wins_show(hwin->win.p, hwin->label);
-}
-
-/*
- * Delete the existing windows and recreate them with their new
- * size and placement.
- */
-static void help_wins_reinit(struct scrollwin *hwin)
-{
-	wins_scrollwin_delete(hwin);
-	wins_get_config();
-	help_wins_init(hwin, 0, 0, (notify_bar())? row - 3 : row - 2, col);
-}
-
-/* Reset the screen, needed when resizing terminal for example. */
-static void help_wins_reset(struct scrollwin *hwin)
-{
-	endwin();
-	wins_refresh();
-	curs_set(0);
-	delwin(win[STA].p);
-	help_wins_reinit(hwin);
-	win[STA].p =
-	    newwin(win[STA].h, win[STA].w, win[STA].y, win[STA].x);
-	keypad(win[STA].p, TRUE);
-	if (notify_bar())
-		notify_reinit_bar();
-	wins_status_bar();
-	if (notify_bar())
-		notify_update_bar();
-}
-
-/* Association between a key pressed and its corresponding help page. */
-static int wanted_page(int ch)
-{
-	int page;
-
-	switch (ch) {
-
-	case KEY_GENERIC_HELP:
-		page = HELP_MAIN;
-		break;
-
-	case KEY_FLAG_ITEM:
-		page = HELP_FLAG;
-		break;
-
-	case KEY_GENERIC_REDRAW:
-	case KEY_GENERIC_ADD_APPT:
-	case KEY_GENERIC_ADD_TODO:
-	case KEY_GENERIC_PREV_DAY:
-	case KEY_GENERIC_NEXT_DAY:
-	case KEY_GENERIC_PREV_WEEK:
-	case KEY_GENERIC_NEXT_WEEK:
-	case KEY_GENERIC_PREV_MONTH:
-	case KEY_GENERIC_NEXT_MONTH:
-	case KEY_GENERIC_PREV_YEAR:
-	case KEY_GENERIC_NEXT_YEAR:
-	case KEY_GENERIC_GOTO_TODAY:
-		page = HELP_GENERAL;
-		break;
-
-	case KEY_GENERIC_SAVE:
-		page = HELP_SAVE;
-		break;
-
-	case KEY_GENERIC_IMPORT:
-		page = HELP_IMPORT;
-		break;
-
-	case KEY_GENERIC_EXPORT:
-		page = HELP_EXPORT;
-		break;
-
-	case KEY_END_OF_WEEK:
-	case KEY_START_OF_WEEK:
-	case KEY_MOVE_UP:
-	case KEY_MOVE_DOWN:
-	case KEY_MOVE_RIGHT:
-	case KEY_MOVE_LEFT:
-		page = HELP_DISPLACEMENT;
-		break;
-
-	case KEY_ADD_ITEM:
-		page = HELP_ADD;
-		break;
-
-	case KEY_GENERIC_GOTO:
-		page = HELP_GOTO;
-		break;
-
-	case KEY_DEL_ITEM:
-		page = HELP_DELETE;
-		break;
-
-	case KEY_GENERIC_COPY:
-	case KEY_GENERIC_PASTE:
-		page = HELP_COPY_PASTE;
-		break;
-
-	case KEY_EDIT_ITEM:
-		page = HELP_EDIT;
-		break;
-
-	case KEY_EDIT_NOTE:
-		page = HELP_ENOTE;
-		break;
-
-	case KEY_VIEW_NOTE:
-		page = HELP_VNOTE;
-		break;
-
-	case KEY_GENERIC_CONFIG_MENU:
-		page = HELP_CONFIG;
-		break;
-
-	case KEY_GENERIC_OTHER_CMD:
-		page = HELP_OTHER;
-		break;
-
-	case KEY_REPEAT_ITEM:
-		page = HELP_REPEAT;
-		break;
-
-	case KEY_VIEW_ITEM:
-		page = HELP_VIEW;
-		break;
-
-	case KEY_PIPE_ITEM:
-		page = HELP_PIPE;
-		break;
-
-	case KEY_RAISE_PRIORITY:
-	case KEY_LOWER_PRIORITY:
-		page = HELP_PRIORITY;
-		break;
-
-	case KEY_GENERIC_CHANGE_VIEW:
-		page = HELP_TAB;
-		break;
-
-	case KEY_GENERIC_CREDITS:
-		page = HELP_CREDITS;
-		break;
-
-	default:
-		page = NOPAGE;
-		break;
-	}
-
-	return page;
-}
-
-/* Draws the help screen */
-void help_screen(void)
-{
-	enum {
-		MOVE_UP,
-		MOVE_DOWN,
-		MOVE_LEFT,
-		MOVE_RIGHT,
-		DIRECTIONS
-	};
-	struct scrollwin hwin;
-	int need_resize;
-	enum key ch = KEY_GENERIC_HELP;
-	int page, oldpage;
-	help_page_t hscr[HELPSCREENS];
-	char keystr[DIRECTIONS][BUFSIZ];
-
-	hscr[HELP_MAIN].title =
-	    _("       Welcome to Calcurse. This is the main help screen.\n");
-	snprintf(hscr[HELP_MAIN].text, HELPTEXTSIZ,
-		 _("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."),
-		 keys_action_firstkey(KEY_GENERIC_SCROLL_UP),
-		 keys_action_firstkey(KEY_GENERIC_SCROLL_DOWN),
-		 keys_action_firstkey(KEY_GENERIC_QUIT),
-		 keys_action_firstkey(KEY_GENERIC_CREDITS));
-
-	hscr[HELP_SAVE].title = _("Save\n");
-	snprintf(hscr[HELP_SAVE].text, HELPTEXTSIZ,
-		 _("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"
-		   "\nIn the config menu, you can choose to save the Calcurse data\n"
-		   "automatically before quitting."));
-
-	hscr[HELP_IMPORT].title = _("Import\n");
-	snprintf(hscr[HELP_IMPORT].text, HELPTEXTSIZ,
-		 _("Import data from an icalendar file.\n"
-		   "You will be asked to enter the file name from which to load ical\n"
-		   "items. At the end of the import process, and if the general option\n"
-		   "'system_dialogs' is set to 'yes', a report indicating how many items\n"
-		   "were imported is shown.\n"
-		   "This report contains the total number of lines read, the number of\n"
-		   "appointments, events and todo items which were successfully imported,\n"
-		   "together with the number of items for which problems occured and that\n"
-		   "were skipped, if any.\n\n"
-		   "If one or more items could not be imported, one has the possibility to\n"
-		   "read the import process report in order to identify which problems\n"
-		   "occured.\n"
-		   "In this report is shown one item per line, with the line in the input\n"
-		   "stream at which this item begins, together with the description of why\n"
-		   "the item could not be imported.\n"));
-
-	hscr[HELP_EXPORT].title = _("Export\n");
-	snprintf(hscr[HELP_EXPORT].text, HELPTEXTSIZ,
-		 _("Export calcurse data (appointments, events and todos).\n"
-		  "This leads to the export submenu, from which you can choose between\n"
-		  "two different export formats: 'ical' and 'pcal'. Choosing one of\n"
-		  "those formats lets you export calcurse data to icalendar or pcal\n"
-		  "format.\n\n"
-		  "You first need to specify the file to which the data will be exported.\n"
-		  "By default, this file is:\n\n" "     ~/calcurse.ics\n\n"
-		  "for an ical export, and:\n\n" "     ~/calcurse.txt\n\n"
-		  "for a pcal export.\n\n"
-		  "Calcurse data are exported in the following order:\n"
-		  "     events, appointments, todos.\n"));
-
-	strncpy(keystr[MOVE_UP], keys_action_allkeys(KEY_MOVE_UP), BUFSIZ);
-	strncpy(keystr[MOVE_DOWN], keys_action_allkeys(KEY_MOVE_DOWN),
-		BUFSIZ);
-	strncpy(keystr[MOVE_LEFT], keys_action_allkeys(KEY_MOVE_LEFT),
-		BUFSIZ);
-	strncpy(keystr[MOVE_RIGHT], keys_action_allkeys(KEY_MOVE_RIGHT),
-		BUFSIZ);
-	hscr[HELP_DISPLACEMENT].title = _("Displacement keys\n");
-	snprintf(hscr[HELP_DISPLACEMENT].text, HELPTEXTSIZ,
-		 _("Move around inside calcurse screens.\n"
-		   "The following scheme summarizes how to get around:\n\n"
-		   "                               move up\n"
-		   "                        move to previous week\n"
-		   "\n"
-		   "                                 %s\n"
-		   "       move left                  ^  \n"
-		   " move to previous day             |\n"
-		   "                      %s\n"
-		   "                            <--   +  -->\n"
-		   "                                           %s\n"
-		   "                                  |            move right\n"
-		   "                                  v         move to next day\n"
-		   "                                 %s\n"
-		   "\n"
-		   "                          move to next week\n"
-		   "                              move down\n"
-		   "\nMoreover, while inside the calendar panel, the '%s' key moves\n"
-		   "to the first day of the week, and the '%s' key selects the last day of\n"
-		   "the week.\n"),
-		 keystr[MOVE_UP], keystr[MOVE_LEFT],
-		 keystr[MOVE_RIGHT], keystr[MOVE_DOWN],
-		 keys_action_firstkey(KEY_START_OF_WEEK),
-		 keys_action_firstkey(KEY_END_OF_WEEK));
-
-	hscr[HELP_VIEW].title = _("View\n");
-	snprintf(hscr[HELP_VIEW].text, HELPTEXTSIZ,
-		 _("View the item you select in either the Todo or Appointment panel.\n"
-		  "\nThis is usefull when an event description is longer than the "
-		  "available\nspace 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"
-		  "\nPress any key to close the popup window and go back to the main\n"
-		  "Calcurse screen."),
-		 keys_action_firstkey(KEY_VIEW_ITEM));
-
-	hscr[HELP_PIPE].title = _("Pipe\n");
-	snprintf(hscr[HELP_PIPE].text, HELPTEXTSIZ,
-		 _("Pipe the selected item to an external program.\n"
-		   "\nPress the '%s' key to pipe the currently selected appointment or\n"
-		   "todo entry to an external program.\n"
-		   "\nYou will be driven back to calcurse as soon as the program exits.\n"),
-		 keys_action_firstkey(KEY_PIPE_ITEM));
-
-	hscr[HELP_TAB].title = _("Tab\n");
-	snprintf(hscr[HELP_TAB].text, HELPTEXTSIZ,
-		 _("Switch between panels.\n"
-		   "The panel currently in use has its border colorized.\n"
-		   "\nSome 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"
-		   "\nto press the '%s' key to get the TODO panel selected. Then you can\n"
-		   "press '%s' to add your item.\n"
-		   "\nNotice 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."),
-		 keys_action_firstkey(KEY_GENERIC_CHANGE_VIEW),
-		 keys_action_firstkey(KEY_ADD_ITEM),
-		 keys_action_firstkey(KEY_GENERIC_CHANGE_VIEW));
-
-	hscr[HELP_GOTO].title = _("Goto\n");
-	snprintf(hscr[HELP_GOTO].text, HELPTEXTSIZ,
-		 _("Jump to a specific day in the calendar.\n"
-		   "\nUsing 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"
-		   "\nNotice that pressing '%s', whatever panel is\n"
-		   "selected, will select current day in the calendar."),
-		 keys_action_firstkey(KEY_GENERIC_GOTO_TODAY));
-
-	hscr[HELP_DELETE].title = _("Delete\n");
-	snprintf(hscr[HELP_DELETE].text, HELPTEXTSIZ,
-		 _("Delete an element in the TODO or Appointment list.\n"
-		   "\nDepending 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"
-		   "\nIf 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"
-		   "\nIf the general option 'confirm_delete' is set to 'YES', then you will"
-		   "\nbe 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."));
-
-	hscr[HELP_ADD].title = _("Add\n");
-	snprintf(hscr[HELP_ADD].text, HELPTEXTSIZ,
-		 _("Add an item in either the TODO or Appointment list, depending on which\n"
-		  "panel is selected when you press '%s'.\n"
-		  "\nTo enter a new item in the TODO list, you will need first to enter the"
-		  "\ndescription of this new item. Then you will be asked to specify the "
-		  "todo\npriority. This priority is represented by a number going from 9 "
-		  "for the\nlowest priority, to 1 for the highest one. It is still "
-		  "possible to\nchange the item priority afterwards, by using the '%s' and "
-		  "'%s' keys\ninside the todo panel.\n"
-		  "\nIf 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\njust 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"
-		  "\nThe day at which occurs the event or appointment is the day currently"
-		  "\nselected in the calendar, so you need to move to the desired day "
-		  "before\npressing '%s'.\n" "\nNotes:\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."),
-		 keys_action_firstkey(KEY_ADD_ITEM),
-		 keys_action_firstkey(KEY_RAISE_PRIORITY),
-		 keys_action_firstkey(KEY_LOWER_PRIORITY),
-		 keys_action_firstkey(KEY_ADD_ITEM),
-		 keys_action_firstkey(KEY_ADD_ITEM));
-
-	hscr[HELP_COPY_PASTE].title = _("Copy and Paste\n");
-	snprintf(hscr[HELP_COPY_PASTE].text, HELPTEXTSIZ,
-		 _("Copy and paste the currently selected item. This is useful to quickly\n"
-		  "copy an item from one date to another. To do so, one must first\n"
-		  "highlight the item that needs to be copied, then press '%s' to copy.\n"
-		  "Once the new date is chosen in the calendar, the appointment panel must\n"
-		  "be selected and the '%s' key must be pressed to paste the item. The item\n"
-		  "will appear in the appointment panel, assigned to the newly selected\n"
-		  "date.\n\n"),
-		 keys_action_firstkey(KEY_GENERIC_COPY),
-		 keys_action_firstkey(KEY_GENERIC_PASTE));
-
-	hscr[HELP_EDIT].title = _("Edit Item\n");
-	snprintf(hscr[HELP_EDIT].text, HELPTEXTSIZ,
-		 _("Edit the item which is currently selected.\n"
-		   "Depending on the item type (appointment, event, or todo), and if it is\n"
-		   "repeated or not, you will be asked to choose one of the item properties"
-		   "\nto modify. An item property is one of the following: the start time, "
-		   "the\nend time, the description, or the item repetition.\n"
-		   "Once you have chosen the property you want to modify, you will be shown"
-		   "\nits actual value, and you will be able to change it as you like.\n"
-		   "\nNotes:\n"
-		   "     o if you choose to edit the item repetition properties, you will\n"
-		   "       be asked to re-enter all of the repetition characteristics\n"
-		   "       (repetition type, frequence, and ending date). Moreover, the\n"
-		   "       previous data concerning the deleted occurences will be lost.\n"
-		   "     o do not forget to save the calendar data to retrieve the\n"
-		   "       modified properties next time you launch Calcurse."));
-
-	hscr[HELP_ENOTE].title = _("EditNote\n");
-	snprintf(hscr[HELP_ENOTE].text, HELPTEXTSIZ,
-		 _("Attach a note to any type of item, or edit an already existing note.\n"
-		  "This feature is useful if you do not have enough space to store all\n"
-		  "of your item description, or if you would like to add sub-tasks to an\n"
-		  "already existing todo item for example.\n"
-		  "Before pressing the '%s' key, you first need to highlight the item you\n"
-		  "want the note to be attached to. Then you will be driven to an\n"
-		  "external editor to edit your note. This editor is chosen the following\n"
-		  "way:\n"
-		  "     o if the 'VISUAL' environment variable is set, then this will be\n"
-		  "       the default editor to be called.\n"
-		  "     o if 'VISUAL' is not set, then the 'EDITOR' environment variable\n"
-		  "       will be used as the default editor.\n"
-		  "     o if none of the above environment variables is set, then\n"
-		  "       '/usr/bin/vi' will be used.\n"
-		  "\nOnce the item note is edited and saved, quit your favorite editor.\n"
-		  "You will then go back to Calcurse, and the '>' sign will appear in front"
-		  "\nof the highlighted item, meaning there is a note attached to it."),
-		 keys_action_firstkey(KEY_EDIT_NOTE));
-
-	hscr[HELP_VNOTE].title = _("ViewNote\n");
-	snprintf(hscr[HELP_VNOTE].text, HELPTEXTSIZ,
-		 _("View a note which was previously attached to an item (an item which\n"
-		  "owns a note has a '>' sign in front of it).\n"
-		  "This command only permits to view the note, not to edit it (to do so,\n"
-		  "use the 'EditNote' command, by pressing the '%s' key).\n"
-		  "Once you highlighted an item with a note attached to it, and the '%s' key"
-		  "\nwas pressed, you will be driven to an external pager to view that "
-		  "note.\n"
-		  "The default pager is chosen the following way:\n"
-		  "     o if the 'PAGER' environment variable is set, then this will be\n"
-		  "       the default viewer to be called.\n"
-		  "     o if the above environment variable is not set, then\n"
-		  "       '/usr/bin/less' will be used.\n"
-		  "As for editing a note, quit the pager and you will be driven back to\n"
-		  "Calcurse."), keys_action_firstkey(KEY_EDIT_NOTE),
-		 keys_action_firstkey(KEY_VIEW_NOTE));
-
-	hscr[HELP_PRIORITY].title = _("Priority\n");
-	snprintf(hscr[HELP_PRIORITY].text, HELPTEXTSIZ,
-		 _("Change the priority of the currently selected item in the TODO list.\n"
-		  "Priorities are represented by the number appearing in front of the\n"
-		  "todo description. This number goes from 9 for the lowest priority to\n"
-		  "1 for the highest priority.\n"
-		  "Todo having higher priorities are placed first (at the top) inside the\n"
-		  "todo panel.\n\n"
-		  "If you want to raise the priority of a todo item, you need to press "
-		  "'%s'.\n"
-		  "In doing so, the number in front of this item will decrease, "
-		  "meaning its\npriority increases. The item position inside the todo "
-		  "panel may change,\ndepending on the priority of the items above it.\n\n"
-		  "At the opposite, to lower a todo priority, press '%s'. The todo position"
-		  "\nmay also change depending on the priority of the items below."),
-		 keys_action_firstkey(KEY_RAISE_PRIORITY),
-		 keys_action_firstkey(KEY_LOWER_PRIORITY));
-
-	hscr[HELP_REPEAT].title = _("Repeat\n");
-	snprintf(hscr[HELP_REPEAT].text, HELPTEXTSIZ,
-		 _("Repeat an event or an appointment.\n"
-		   "You must first select the item to be repeated by moving inside the\n"
-		   "appointment panel. Then pressing '%s' will lead you to a set of three\n"
-		   "questions, with which you will be able to specify the repetition\n"
-		   "characteristics:\n\n"
-		   "  o        type: you can choose between a daily, weekly, monthly or\n"
-		   "                 yearly repetition by pressing 'D', 'W', 'M' or 'Y'\n"
-		   "                 respectively.\n\n"
-		   "  o   frequence: this indicates how often the item shall be repeated.\n"
-		   "                 For example, if you want to remember an anniversary,\n"
-		   "                 choose a 'yearly' repetition with a frequence of '1',\n"
-		   "                 which means it must be repeated every year. Another\n"
-		   "                 example: if you go to the restaurant every two days,\n"
-		   "                 choose a 'daily' repetition with a frequence of '2'.\n\n"
-		   "  o ending date: this specifies when to stop repeating the selected\n"
-		   "                 event or appointment. To indicate an endless \n"
-		   "                 repetition, enter '0' and the item will be repeated\n"
-		   "                 forever.\n" "\nNotes:\n"
-		   "       o repeated items are marked with an '*' inside the appointment\n"
-		   "         panel, to be easily recognizable from non-repeated ones.\n"
-		   "       o the 'Repeat' and 'Delete' command can be mixed to create\n"
-		   "         complicated configurations, as it is possible to delete only\n"
-		   "         one occurence of a repeated item."),
-		 keys_action_firstkey(KEY_REPEAT_ITEM));
-
-	hscr[HELP_FLAG].title = _("Flag Item\n");
-	snprintf(hscr[HELP_FLAG].text, HELPTEXTSIZ,
-		 _("Toggle an appointment's 'important' flag or a todo's 'completed' flag.\n"
-		  "If a todo is flagged as completed, its priority number will be replaced\n"
-		  "by an 'X' sign. Completed tasks will no longer appear in exported data\n"
-		  "or when using the '-t' command line flag (unless specifying '0' as the\n"
-		  "priority number, in which case only completed tasks will be shown).\n\n"
-		  "If an appointment is flagged as important, an exclamation mark appears\n"
-		  "in front of it, and you will be warned if time gets closed to the\n"
-		  "appointment start time.\n"
-		  "To customize the way one gets notified, the configuration submenu lets\n"
-		  "you choose the command launched to warn user of an upcoming appointment,"
-		  "\nand how long before it he gets notified."));
-
-	hscr[HELP_CONFIG].title = _("Config\n");
-	snprintf(hscr[HELP_CONFIG].text, HELPTEXTSIZ,
-		 _("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"
-		   "\nThe color submenu lets you choose the color theme.\n"
-		   "The layout submenu lets you choose the Calcurse screen layout, in other"
-		   "\nwords where to place the three different panels on the screen.\n"
-		   "The general options submenu brings a screen with the different options"
-		   "\nwhich 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"
-		   "\nDo not forget to save the calendar data to retrieve your configuration"
-		   "\nnext time you launch Calcurse."));
-
-	hscr[HELP_GENERAL].title = _("Generic keybindings\n");
-	snprintf(hscr[HELP_GENERAL].text, HELPTEXTSIZ,
-		 _("Some of the keybindings apply whatever panel is selected. They are\n"
-		  "called generic keybinding.\n"
-		  "Here is the list of all the generic key bindings, together with their\n"
-		  "corresponding action:\n\n"
-		  " '%s' : Redraw function -> redraws calcurse panels, this is useful if\n"
-		  "                           you resize your terminal screen or when\n"
-		  "                           garbage appears inside the display\n"
-		  " '%s' : Add Appointment -> add an appointment or an event\n"
-		  " '%s' : Add TODO        -> add a todo\n"
-		  " '%s' : -1 Day          -> move to previous day\n"
-		  " '%s' : +1 Day          -> move to next day\n"
-		  " '%s' : -1 Week         -> move to previous week\n"
-		  " '%s' : +1 Week         -> move to next week\n"
-		  " '%s' : -1 Month        -> move to previous month\n"
-		  " '%s' : +1 Month        -> move to next month\n"
-		  " '%s' : -1 Year         -> move to previous year\n"
-		  " '%s' : +1 Year         -> move to next year\n"
-		  " '%s' : Goto today      -> move to current day\n"
-		  "\nThe '%s' and '%s' keys are used to scroll text upward or downward\n"
-		  "when inside specific screens such the help screens for example.\n"
-		  "They are also used when the calendar screen is selected to switch\n"
-		  "between the available views (monthly and weekly calendar views)."),
-		 keys_action_firstkey(KEY_GENERIC_REDRAW),
-		 keys_action_firstkey(KEY_GENERIC_ADD_APPT),
-		 keys_action_firstkey(KEY_GENERIC_ADD_TODO),
-		 keys_action_firstkey(KEY_GENERIC_PREV_DAY),
-		 keys_action_firstkey(KEY_GENERIC_NEXT_DAY),
-		 keys_action_firstkey(KEY_GENERIC_PREV_WEEK),
-		 keys_action_firstkey(KEY_GENERIC_NEXT_WEEK),
-		 keys_action_firstkey(KEY_GENERIC_PREV_MONTH),
-		 keys_action_firstkey(KEY_GENERIC_NEXT_MONTH),
-		 keys_action_firstkey(KEY_GENERIC_PREV_YEAR),
-		 keys_action_firstkey(KEY_GENERIC_NEXT_YEAR),
-		 keys_action_firstkey(KEY_GENERIC_GOTO_TODAY),
-		 keys_action_firstkey(KEY_GENERIC_SCROLL_UP),
-		 keys_action_firstkey(KEY_GENERIC_SCROLL_DOWN));
-
-	hscr[HELP_OTHER].title = _("OtherCmd\n");
-	snprintf(hscr[HELP_OTHER].text, HELPTEXTSIZ,
-		 _("Switch between status bar help pages.\n"
-		   "Because the terminal screen is too narrow to display all of the\n"
-		   "available commands, you need to press '%s' to see the next set of\n"
-		   "commands together with their keybindings.\n"
-		   "Once the last status bar page is reached, pressing '%s' another time\n"
-		   "leads you back to the first page."),
-		 keys_action_firstkey(KEY_GENERIC_OTHER_CMD),
-		 keys_action_firstkey(KEY_GENERIC_OTHER_CMD));
-
-	hscr[HELP_CREDITS].title = _("Calcurse - text-based organizer");
-	snprintf(hscr[HELP_CREDITS].text, HELPTEXTSIZ,
-		 _("\nCopyright (c) 2004-2013 calcurse Development Team\n"
-		   "All rights reserved.\n"
-		   "\n"
-		   "Redistribution and use in source and binary forms, with or without\n"
-		   "modification, are permitted provided that the following conditions\n"
-		   "are met:\n"
-		   "\n"
-		   "\t- Redistributions of source code must retain the above\n"
-		   "\t  copyright notice, this list of conditions and the\n"
-		   "\t  following disclaimer.\n"
-		   "\n"
-		   "\t- Redistributions in binary form must reproduce the above\n"
-		   "\t  copyright notice, this list of conditions and the\n"
-		   "\t  following disclaimer in the documentation and/or other\n"
-		   "\t  materials provided with the distribution.\n"
-		   "\n\n"
-		   "Send your feedback or comments to : misc@calcurse.org\n"
-		   "Calcurse home page : http://calcurse.org"));
-
-	help_wins_init(&hwin, 0, 0, (notify_bar())? row - 3 : row - 2,
-		       col);
-	oldpage = HELP_MAIN;
-	need_resize = 0;
-
-	/* Display the help screen related to user input. */
-	while (ch != KEY_GENERIC_QUIT) {
-		erase_window_part(hwin.win.p, 1, hwin.pad.y, col - 2,
-				  hwin.win.h - 2);
-
-		switch (ch) {
-		case KEY_GENERIC_SCROLL_DOWN:
-			wins_scrollwin_down(&hwin, 1);
-			break;
-
-		case KEY_GENERIC_SCROLL_UP:
-			wins_scrollwin_up(&hwin, 1);
-			break;
-
-		default:
-			page = wanted_page(ch);
-			if (page != NOPAGE) {
-				hwin.first_visible_line = 0;
-				hwin.total_lines =
-				    help_write_pad(&hwin.pad,
-						   hscr[page].title,
-						   hscr[page].text, ch);
-				oldpage = page;
-			}
-		}
-
-		if (resize) {
-			resize = 0;
-			wins_get_config();
-			help_wins_reset(&hwin);
-			hwin.first_visible_line = 0;
-			hwin.total_lines =
-			    help_write_pad(&hwin.pad, hscr[oldpage].title,
-					   hscr[oldpage].text, ch);
-			need_resize = 1;
-		}
-
-		wins_scrollwin_display(&hwin);
-		ch = keys_getch(win[KEY].p, NULL, NULL);
-	}
-	wins_scrollwin_delete(&hwin);
-	if (need_resize)
-		wins_reset();
-}
-- 
cgit v1.2.3-70-g09d2