"Fossies" - the Fresh Open Source Software Archive

Member "tin-2.6.2/include/keymap.h" (9 Dec 2022, 14442 Bytes) of package /linux/misc/tin-2.6.2.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "keymap.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 2.6.1_vs_2.6.2.

    1 /*
    2  *  Project   : tin - a Usenet reader
    3  *  Module    : keymap.h
    4  *  Author    : J. Faultless, D. Nimmich
    5  *  Created   : 1999
    6  *  Updated   : 2022-10-27
    7  *  Notes     :
    8  *
    9  * Copyright (c) 1999-2023 Jason Faultless <jason@altarstone.com>
   10  * All rights reserved.
   11  *
   12  * Redistribution and use in source and binary forms, with or without
   13  * modification, are permitted provided that the following conditions
   14  * are met:
   15  *
   16  * 1. Redistributions of source code must retain the above copyright notice,
   17  *    this list of conditions and the following disclaimer.
   18  *
   19  * 2. Redistributions in binary form must reproduce the above copyright
   20  *    notice, this list of conditions and the following disclaimer in the
   21  *    documentation and/or other materials provided with the distribution.
   22  *
   23  * 3. Neither the name of the copyright holder nor the names of its
   24  *    contributors may be used to endorse or promote products derived from
   25  *    this software without specific prior written permission.
   26  *
   27  * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   28  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   29  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   30  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
   31  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   37  * POSSIBILITY OF SUCH DAMAGE.
   38  */
   39 
   40 
   41 #ifndef KEYMAP_H
   42 #   define KEYMAP_H 1
   43 
   44 /* Revised 9 October 1996 by Branden Robinson in ASCII order
   45  *
   46  *        Oct   Dec   Hex   Char           Oct   Dec   Hex   Char
   47  *        ------------------------------------------------------------
   48  *        000   0     00    NUL '\0'       100   64    40    @
   49  *        001   1     01    SOH      ^A    101   65    41    A
   50  *        002   2     02    STX      ^B    102   66    42    B
   51  *        003   3     03    ETX      ^C    103   67    43    C
   52  *        004   4     04    EOT      ^D    104   68    44    D
   53  *        005   5     05    ENQ      ^E    105   69    45    E
   54  *        006   6     06    ACK      ^F    106   70    46    F
   55  *        007   7     07    BEL '\a' ^G    107   71    47    G
   56  *        010   8     08    BS  '\b' ^H    110   72    48    H
   57  *        011   9     09    HT  '\t' ^I    111   73    49    I
   58  *        012   10    0A    LF  '\n' ^J    112   74    4A    J
   59  *        013   11    0B    VT  '\v' ^K    113   75    4B    K
   60  *        014   12    0C    FF  '\f' ^L    114   76    4C    L
   61  *        015   13    0D    CR  '\r' ^M    115   77    4D    M
   62  *        016   14    0E    SO       ^N    116   78    4E    N
   63  *        017   15    0F    SI       ^O    117   79    4F    O
   64  *        020   16    10    DLE      ^P    120   80    50    P
   65  *        021   17    11    DC1      ^Q    121   81    51    Q
   66  *        022   18    12    DC2      ^R    122   82    52    R
   67  *        023   19    13    DC3      ^S    123   83    53    S
   68  *        024   20    14    DC4      ^T    124   84    54    T
   69  *        025   21    15    NAK      ^U    125   85    55    U
   70  *        026   22    16    SYN      ^V    126   86    56    V
   71  *        027   23    17    ETB      ^W    127   87    57    W
   72  *        030   24    18    CAN      ^X    130   88    58    X
   73  *        031   25    19    EM       ^Y    131   89    59    Y
   74  *        032   26    1A    SUB      ^Z    132   90    5A    Z
   75  *        033   27    1B    ESC            133   91    5B    [
   76  *        034   28    1C    FS             134   92    5C    \   '\\'
   77  *        035   29    1D    GS             135   93    5D    ]
   78  *        036   30    1E    RS             136   94    5E    ^
   79  *        037   31    1F    US             137   95    5F    _
   80  *        040   32    20    SPACE          140   96    60    `
   81  *        041   33    21    !              141   97    61    a
   82  *        042   34    22    "              142   98    62    b
   83  *        043   35    23    #              143   99    63    c
   84  *        044   36    24    $              144   100   64    d
   85  *        045   37    25    %              145   101   65    e
   86  *        046   38    26    &              146   102   66    f
   87  *        047   39    27    '              147   103   67    g
   88  *        050   40    28    (              150   104   68    h
   89  *        051   41    29    )              151   105   69    i
   90  *        052   42    2A    *              152   106   6A    j
   91  *        053   43    2B    +              153   107   6B    k
   92  *        054   44    2C    ,              154   108   6C    l
   93  *        055   45    2D    -              155   109   6D    m
   94  *        056   46    2E    .              156   110   6E    n
   95  *        057   47    2F    /              157   111   6F    o
   96  *        060   48    30    0              160   112   70    p
   97  *        061   49    31    1              161   113   71    q
   98  *        062   50    32    2              162   114   72    r
   99  *        063   51    33    3              163   115   73    s
  100  *        064   52    34    4              164   116   74    t
  101  *        065   53    35    5              165   117   75    u
  102  *        066   54    36    6              166   118   76    v
  103  *        067   55    37    7              167   119   77    w
  104  *        070   56    38    8              170   120   78    x
  105  *        071   57    39    9              171   121   79    y
  106  *        072   58    3A    :              172   122   7A    z
  107  *        073   59    3B    ;              173   123   7B    {
  108  *        074   60    3C    <              174   124   7C    |
  109  *        075   61    3D    =              175   125   7D    }
  110  *        076   62    3E    >              176   126   7E    ~
  111  *        077   63    3F    ?              177   127   7F    DEL
  112  *
  113  * Above chart reprinted from Linux manual page.
  114  *
  115  * When adding key functionality, be aware of key functions in the "big five"
  116  * levels of tin operation: top (group selection), group, thread, article
  117  * (pager), and help.  If possible, when adding a key to any of these levels,
  118  * check the others to make sure that the key doesn't do something
  119  * non-analogous elsewhere.  For instance, having "^R" map to "redraw screen"
  120  * at article level and "reset .newsrc" (a drastic and unreversible action)
  121  * at top level is a bad idea.
  122  *
  123  * [make emacs happy: "]
  124  */
  125 
  126 /*
  127  * Maximum chars (including null byte) needed to print a key name
  128  * A multibyte character can use up to MB_CUR_MAX chars. But as MB_CUR_MAX
  129  * can't be used here, use MB_LEN_MAX instead.
  130  * Some values for MB_LEN_MAX:
  131  * - glibc 2.3.5: 16
  132  * - gcc 4.0: 1
  133  * - icc 8.0/9.0: 8
  134  * Use the largest + 1 to be on the safe side.
  135  */
  136 #define MAXKEYLEN 17
  137 
  138 /* TODO: permanently move here from tin.h */
  139 #define ctrl(c) ((c) & 0x1F)
  140 #define ESC     27
  141 
  142 /* TODO: get rid of these remaining #define */
  143 #define iKeyAbort ESC
  144 #define iKeyQuitTin 'Q'
  145 #define iKeyQuit 'q'
  146 
  147 /* complete list of functions which can be associated with keys */
  148 enum defined_functions {
  149     NOT_ASSIGNED = 0,
  150     DIGIT_0,
  151     DIGIT_1,
  152     DIGIT_2,
  153     DIGIT_3,
  154     DIGIT_4,
  155     DIGIT_5,
  156     DIGIT_6,
  157     DIGIT_7,
  158     DIGIT_8,
  159     DIGIT_9,
  160     ATTACHMENT_PIPE,
  161     ATTACHMENT_SAVE,
  162     ATTACHMENT_SELECT,
  163     ATTACHMENT_TAG,
  164     ATTACHMENT_TAG_PATTERN,
  165     ATTACHMENT_TOGGLE_TAGGED,
  166     ATTACHMENT_UNTAG,
  167     SPECIAL_CATCHUP_LEFT,
  168     SPECIAL_MOUSE_TOGGLE,
  169     CATCHUP,
  170     CATCHUP_NEXT_UNREAD,
  171     CONFIG_RESET_ATTRIB,
  172     CONFIG_SCOPE_MENU,
  173     CONFIG_SELECT,
  174     CONFIG_NO_SAVE,
  175     CONFIG_TOGGLE_ATTRIB,
  176     FEED_ARTICLE,
  177     FEED_THREAD,
  178     FEED_HOT,
  179     FEED_PATTERN,
  180     FEED_RANGE,
  181     FEED_TAGGED,
  182     FEED_KEY_REPOST,
  183     FEED_SUPERSEDE,
  184     FILTER_EDIT,
  185     FILTER_SAVE,
  186     GLOBAL_ABORT,
  187     GLOBAL_BUGREPORT,
  188     GLOBAL_CONNECTION_INFO,
  189     GLOBAL_DISPLAY_POST_HISTORY,
  190     GLOBAL_EDIT_FILTER,
  191     GLOBAL_FIRST_PAGE,
  192     GLOBAL_HELP,
  193     GLOBAL_LAST_PAGE,
  194     GLOBAL_LAST_VIEWED,
  195     GLOBAL_LINE_DOWN,
  196     GLOBAL_LINE_UP,
  197     GLOBAL_LOOKUP_MESSAGEID,
  198     GLOBAL_MENU_FILTER_KILL,
  199     GLOBAL_MENU_FILTER_SELECT,
  200     GLOBAL_OPTION_MENU,
  201     GLOBAL_PAGE_DOWN,
  202     GLOBAL_PAGE_UP,
  203     GLOBAL_PIPE,
  204     GLOBAL_POST,
  205     GLOBAL_POSTPONED,
  206 #ifndef DISABLE_PRINTING
  207     GLOBAL_PRINT,
  208 #endif /* !DISABLE_PRINTING */
  209     GLOBAL_QUICK_FILTER_KILL,
  210     GLOBAL_QUICK_FILTER_SELECT,
  211     GLOBAL_QUIT,
  212     GLOBAL_QUIT_TIN,
  213     GLOBAL_REDRAW_SCREEN,
  214     GLOBAL_SCROLL_DOWN,
  215     GLOBAL_SCROLL_UP,
  216     GLOBAL_SEARCH_BODY,
  217     GLOBAL_SEARCH_REPEAT,
  218     GLOBAL_SEARCH_AUTHOR_BACKWARD,
  219     GLOBAL_SEARCH_AUTHOR_FORWARD,
  220     GLOBAL_SEARCH_SUBJECT_BACKWARD,
  221     GLOBAL_SEARCH_SUBJECT_FORWARD,
  222     GLOBAL_SET_RANGE,
  223 #ifndef NO_SHELL_ESCAPE
  224     GLOBAL_SHELL_ESCAPE,
  225 #endif /* !NO_SHELL_ESCAPE */
  226 #ifdef HAVE_COLOR
  227     GLOBAL_TOGGLE_COLOR,
  228 #endif /* HAVE_COLOR */
  229     GLOBAL_TOGGLE_HELP_DISPLAY,
  230     GLOBAL_TOGGLE_INFO_LAST_LINE,
  231     GLOBAL_TOGGLE_INVERSE_VIDEO,
  232     GLOBAL_VERSION,
  233     GROUP_AUTOSAVE,
  234     GROUP_CANCEL,
  235     GROUP_DO_AUTOSELECT,
  236     GROUP_GOTO,
  237     GROUP_LIST_THREAD,
  238     GROUP_MAIL,
  239     GROUP_MARK_THREAD_READ,
  240     GROUP_MARK_UNSELECTED_ARTICLES_READ,
  241     GROUP_NEXT_GROUP,
  242     GROUP_NEXT_UNREAD_ARTICLE,
  243     GROUP_NEXT_UNREAD_ARTICLE_OR_GROUP,
  244     GROUP_PREVIOUS_GROUP,
  245     GROUP_PREVIOUS_UNREAD_ARTICLE,
  246     GROUP_READ_BASENOTE,
  247     GROUP_REPOST,
  248     GROUP_REVERSE_SELECTIONS,
  249     GROUP_SAVE,
  250     GROUP_SELECT_PATTERN,
  251     GROUP_SELECT_THREAD,
  252     GROUP_SELECT_THREAD_IF_UNREAD_SELECTED,
  253     GROUP_TAG,
  254     GROUP_TAG_PARTS,
  255     GROUP_TOGGLE_GET_ARTICLES_LIMIT,
  256     GROUP_TOGGLE_READ_UNREAD,
  257     GROUP_TOGGLE_SUBJECT_DISPLAY,
  258     GROUP_TOGGLE_SELECT_THREAD,
  259     GROUP_TOGGLE_THREADING,
  260     GROUP_UNDO_SELECTIONS,
  261     GROUP_UNTAG,
  262     MARK_ARTICLE_UNREAD,
  263     MARK_THREAD_UNREAD,
  264     MARK_FEED_READ,
  265     MARK_FEED_UNREAD,
  266     PAGE_AUTOSAVE,
  267     PAGE_BOTTOM_THREAD,
  268     PAGE_CANCEL,
  269     PAGE_EDIT_ARTICLE,
  270     PAGE_FOLLOWUP,
  271     PAGE_FOLLOWUP_QUOTE,
  272     PAGE_FOLLOWUP_QUOTE_HEADERS,
  273     PAGE_GOTO_PARENT,
  274     PAGE_GROUP_SELECT,
  275     PAGE_LIST_THREAD,
  276     PAGE_MAIL,
  277     PAGE_MARK_THREAD_READ,
  278     PAGE_NEXT_ARTICLE,
  279     PAGE_NEXT_THREAD,
  280     PAGE_NEXT_UNREAD,
  281     PAGE_NEXT_UNREAD_ARTICLE,
  282 #ifdef HAVE_PGP_GPG
  283     PAGE_PGP_CHECK_ARTICLE,
  284 #endif /* HAVE_PGP_GPG */
  285     PAGE_PREVIOUS_ARTICLE,
  286     PAGE_PREVIOUS_UNREAD_ARTICLE,
  287     PAGE_REVEAL,
  288     PAGE_REPLY,
  289     PAGE_REPLY_QUOTE,
  290     PAGE_REPLY_QUOTE_HEADERS,
  291     PAGE_REPOST,
  292     PAGE_SAVE,
  293     PAGE_SKIP_INCLUDED_TEXT,
  294     PAGE_TAG,
  295     PAGE_TOGGLE_HEADERS,
  296     PAGE_TOGGLE_HIGHLIGHTING,
  297     PAGE_TOGGLE_RAW,
  298     PAGE_TOGGLE_ROT13,
  299     PAGE_TOGGLE_TABS,
  300     PAGE_TOGGLE_TEX2ISO,
  301     PAGE_TOGGLE_UUE,
  302     PAGE_TOP_THREAD,
  303     PAGE_VIEW_ATTACHMENTS,
  304     PAGE_VIEW_URL,
  305 #ifdef HAVE_PGP_GPG
  306     PGP_KEY_ENCRYPT,
  307     PGP_KEY_ENCRYPT_SIGN,
  308     PGP_INCLUDE_KEY,
  309     PGP_KEY_SIGN,
  310 #endif /* HAVE_PGP_GPG */
  311     POST_ABORT,
  312     POST_CANCEL,
  313     POST_CONTINUE,
  314     POST_EDIT,
  315     POST_IGNORE_FUPTO,
  316 #ifdef HAVE_ISPELL
  317     POST_ISPELL,
  318 #endif /* HAVE_ISPELL */
  319     POST_MAIL,
  320 #ifdef HAVE_PGP_GPG
  321     POST_PGP,
  322 #endif /* HAVE_PGP_GPG */
  323     POST_POSTPONE,
  324     POST_SEND,
  325     POST_SUPERSEDE,
  326     POSTED_SELECT,
  327     POSTPONE_ALL,
  328     POSTPONE_OVERRIDE,
  329     POSTPROCESS_NO,
  330     POSTPROCESS_SHAR,
  331     POSTPROCESS_YES,
  332     PROMPT_NO,
  333     PROMPT_YES,
  334     SAVE_APPEND_FILE,
  335     SAVE_OVERWRITE_FILE,
  336     SCOPE_ADD,
  337     SCOPE_DELETE,
  338     SCOPE_EDIT_ATTRIBUTES_FILE,
  339     SCOPE_MOVE,
  340     SCOPE_RENAME,
  341     SCOPE_SELECT,
  342     SELECT_ENTER_GROUP,
  343     SELECT_ENTER_NEXT_UNREAD_GROUP,
  344     SELECT_GOTO,
  345     SELECT_MARK_GROUP_UNREAD,
  346     SELECT_MOVE_GROUP,
  347     SELECT_NEXT_UNREAD_GROUP,
  348     SELECT_RESET_NEWSRC,
  349     SELECT_SORT_ACTIVE,
  350     SELECT_SUBSCRIBE,
  351     SELECT_SUBSCRIBE_PATTERN,
  352     SELECT_SYNC_WITH_ACTIVE,
  353     SELECT_TOGGLE_DESCRIPTIONS,
  354     SELECT_TOGGLE_READ_DISPLAY,
  355     SELECT_UNSUBSCRIBE,
  356     SELECT_UNSUBSCRIBE_PATTERN,
  357     SELECT_QUIT_NO_WRITE,
  358     SELECT_YANK_ACTIVE,
  359     THREAD_AUTOSAVE,
  360     THREAD_CANCEL,
  361     THREAD_MAIL,
  362     THREAD_MARK_ARTICLE_READ,
  363     THREAD_READ_NEXT_ARTICLE_OR_THREAD,
  364     THREAD_READ_ARTICLE,
  365     THREAD_REVERSE_SELECTIONS,
  366     THREAD_SAVE,
  367     THREAD_SELECT_ARTICLE,
  368     THREAD_TAG,
  369     THREAD_TAG_PARTS,
  370     THREAD_TOGGLE_ARTICLE_SELECTION,
  371     THREAD_TOGGLE_SUBJECT_DISPLAY,
  372     THREAD_UNDO_SELECTIONS,
  373     THREAD_UNTAG,
  374     URL_SELECT
  375 };
  376 typedef enum defined_functions t_function;
  377 
  378 
  379 struct keynode {
  380 #if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE)
  381     wchar_t key;
  382 #else
  383     char key;
  384 #endif /* MULTIBYTE_ABLE && !NO_LOCALE */
  385     t_function function;
  386 };
  387 
  388 
  389 struct keylist {
  390     struct keynode *list;
  391     size_t used;
  392     size_t max;
  393 };
  394 
  395 
  396 extern struct keylist attachment_keys;
  397 extern struct keylist feed_post_process_keys;
  398 extern struct keylist feed_supersede_article_keys;
  399 extern struct keylist feed_type_keys;
  400 extern struct keylist filter_keys;
  401 extern struct keylist group_keys;
  402 extern struct keylist info_keys;
  403 extern struct keylist option_menu_keys;
  404 extern struct keylist post_hist_keys;
  405 extern struct keylist page_keys;
  406 #ifdef HAVE_PGP_GPG
  407     extern struct keylist pgp_mail_keys;
  408     extern struct keylist pgp_news_keys;
  409 #endif /* HAVE_PGP_GPG */
  410 extern struct keylist post_cancel_keys;
  411 extern struct keylist post_continue_keys;
  412 extern struct keylist post_delete_keys;
  413 extern struct keylist post_edit_keys;
  414 extern struct keylist post_edit_ext_keys;
  415 extern struct keylist post_ignore_fupto_keys;
  416 extern struct keylist post_mail_fup_keys;
  417 extern struct keylist post_post_keys;
  418 extern struct keylist post_postpone_keys;
  419 extern struct keylist post_send_keys;
  420 extern struct keylist prompt_keys;
  421 extern struct keylist save_append_overwrite_keys;
  422 extern struct keylist scope_keys;
  423 extern struct keylist select_keys;
  424 extern struct keylist thread_keys;
  425 extern struct keylist url_keys;
  426 
  427 
  428 extern t_function global_mouse_action(t_function (*left_action) (void), t_function (*right_action) (void));
  429 extern t_function handle_keypad(
  430     t_function (*left_action) (void),
  431     t_function (*right_action) (void),
  432     t_function (*mouse_action) (
  433         t_function (*left_action) (void),
  434         t_function (*right_action) (void)),
  435     const struct keylist keys);
  436 extern t_function prompt_slk_response(t_function default_func, const struct keylist keys, const char *fmt, ...);
  437 #if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE)
  438     extern char *printascii(char *buf, wint_t ch);
  439     extern wchar_t func_to_key(t_function func, const struct keylist keys);
  440     extern t_function key_to_func(const wchar_t key, const struct keylist keys);
  441 #define PrintFuncKey(buf, func, keys) printascii(buf, (wint_t) func_to_key(func, keys))
  442 #else
  443     extern char *printascii(char *buf, int ch);
  444     extern char func_to_key (t_function func, const struct keylist keys);
  445     extern t_function key_to_func (const char key, const struct keylist keys);
  446 #define PrintFuncKey(buf, func, keys) printascii(buf, (int) func_to_key(func, keys))
  447 #endif /* MULTIBYTE_ABLE && !NO_LOCALE */
  448 #endif /* !KEYMAP_H */