1*d0ef721eSBaptiste Daroussin /* $NetBSD: chared.h,v 1.30 2016/05/22 19:44:26 christos Exp $ */ 2*d0ef721eSBaptiste Daroussin 3*d0ef721eSBaptiste Daroussin /*- 4*d0ef721eSBaptiste Daroussin * Copyright (c) 1992, 1993 5*d0ef721eSBaptiste Daroussin * The Regents of the University of California. All rights reserved. 6*d0ef721eSBaptiste Daroussin * 7*d0ef721eSBaptiste Daroussin * This code is derived from software contributed to Berkeley by 8*d0ef721eSBaptiste Daroussin * Christos Zoulas of Cornell University. 9*d0ef721eSBaptiste Daroussin * 10*d0ef721eSBaptiste Daroussin * Redistribution and use in source and binary forms, with or without 11*d0ef721eSBaptiste Daroussin * modification, are permitted provided that the following conditions 12*d0ef721eSBaptiste Daroussin * are met: 13*d0ef721eSBaptiste Daroussin * 1. Redistributions of source code must retain the above copyright 14*d0ef721eSBaptiste Daroussin * notice, this list of conditions and the following disclaimer. 15*d0ef721eSBaptiste Daroussin * 2. Redistributions in binary form must reproduce the above copyright 16*d0ef721eSBaptiste Daroussin * notice, this list of conditions and the following disclaimer in the 17*d0ef721eSBaptiste Daroussin * documentation and/or other materials provided with the distribution. 18*d0ef721eSBaptiste Daroussin * 3. Neither the name of the University nor the names of its contributors 19*d0ef721eSBaptiste Daroussin * may be used to endorse or promote products derived from this software 20*d0ef721eSBaptiste Daroussin * without specific prior written permission. 21*d0ef721eSBaptiste Daroussin * 22*d0ef721eSBaptiste Daroussin * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23*d0ef721eSBaptiste Daroussin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24*d0ef721eSBaptiste Daroussin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25*d0ef721eSBaptiste Daroussin * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26*d0ef721eSBaptiste Daroussin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27*d0ef721eSBaptiste Daroussin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28*d0ef721eSBaptiste Daroussin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29*d0ef721eSBaptiste Daroussin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30*d0ef721eSBaptiste Daroussin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31*d0ef721eSBaptiste Daroussin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32*d0ef721eSBaptiste Daroussin * SUCH DAMAGE. 33*d0ef721eSBaptiste Daroussin * 34*d0ef721eSBaptiste Daroussin * @(#)chared.h 8.1 (Berkeley) 6/4/93 35*d0ef721eSBaptiste Daroussin */ 36*d0ef721eSBaptiste Daroussin 37*d0ef721eSBaptiste Daroussin /* 38*d0ef721eSBaptiste Daroussin * el.chared.h: Character editor interface 39*d0ef721eSBaptiste Daroussin */ 40*d0ef721eSBaptiste Daroussin #ifndef _h_el_chared 41*d0ef721eSBaptiste Daroussin #define _h_el_chared 42*d0ef721eSBaptiste Daroussin 43*d0ef721eSBaptiste Daroussin /* 44*d0ef721eSBaptiste Daroussin * This is an issue of basic "vi" look-and-feel. Defining VI_MOVE works 45*d0ef721eSBaptiste Daroussin * like real vi: i.e. the transition from command<->insert modes moves 46*d0ef721eSBaptiste Daroussin * the cursor. 47*d0ef721eSBaptiste Daroussin * 48*d0ef721eSBaptiste Daroussin * On the other hand we really don't want to move the cursor, because 49*d0ef721eSBaptiste Daroussin * all the editing commands don't include the character under the cursor. 50*d0ef721eSBaptiste Daroussin * Probably the best fix is to make all the editing commands aware of 51*d0ef721eSBaptiste Daroussin * this fact. 52*d0ef721eSBaptiste Daroussin */ 53*d0ef721eSBaptiste Daroussin #define VI_MOVE 54*d0ef721eSBaptiste Daroussin 55*d0ef721eSBaptiste Daroussin /* 56*d0ef721eSBaptiste Daroussin * Undo information for vi - no undo in emacs (yet) 57*d0ef721eSBaptiste Daroussin */ 58*d0ef721eSBaptiste Daroussin typedef struct c_undo_t { 59*d0ef721eSBaptiste Daroussin ssize_t len; /* length of saved line */ 60*d0ef721eSBaptiste Daroussin int cursor; /* position of saved cursor */ 61*d0ef721eSBaptiste Daroussin wchar_t *buf; /* full saved text */ 62*d0ef721eSBaptiste Daroussin } c_undo_t; 63*d0ef721eSBaptiste Daroussin 64*d0ef721eSBaptiste Daroussin /* redo for vi */ 65*d0ef721eSBaptiste Daroussin typedef struct c_redo_t { 66*d0ef721eSBaptiste Daroussin wchar_t *buf; /* redo insert key sequence */ 67*d0ef721eSBaptiste Daroussin wchar_t *pos; 68*d0ef721eSBaptiste Daroussin wchar_t *lim; 69*d0ef721eSBaptiste Daroussin el_action_t cmd; /* command to redo */ 70*d0ef721eSBaptiste Daroussin wchar_t ch; /* char that invoked it */ 71*d0ef721eSBaptiste Daroussin int count; 72*d0ef721eSBaptiste Daroussin int action; /* from cv_action() */ 73*d0ef721eSBaptiste Daroussin } c_redo_t; 74*d0ef721eSBaptiste Daroussin 75*d0ef721eSBaptiste Daroussin /* 76*d0ef721eSBaptiste Daroussin * Current action information for vi 77*d0ef721eSBaptiste Daroussin */ 78*d0ef721eSBaptiste Daroussin typedef struct c_vcmd_t { 79*d0ef721eSBaptiste Daroussin int action; 80*d0ef721eSBaptiste Daroussin wchar_t *pos; 81*d0ef721eSBaptiste Daroussin } c_vcmd_t; 82*d0ef721eSBaptiste Daroussin 83*d0ef721eSBaptiste Daroussin /* 84*d0ef721eSBaptiste Daroussin * Kill buffer for emacs 85*d0ef721eSBaptiste Daroussin */ 86*d0ef721eSBaptiste Daroussin typedef struct c_kill_t { 87*d0ef721eSBaptiste Daroussin wchar_t *buf; 88*d0ef721eSBaptiste Daroussin wchar_t *last; 89*d0ef721eSBaptiste Daroussin wchar_t *mark; 90*d0ef721eSBaptiste Daroussin } c_kill_t; 91*d0ef721eSBaptiste Daroussin 92*d0ef721eSBaptiste Daroussin typedef void (*el_zfunc_t)(EditLine *, void *); 93*d0ef721eSBaptiste Daroussin typedef const char *(*el_afunc_t)(void *, const char *); 94*d0ef721eSBaptiste Daroussin 95*d0ef721eSBaptiste Daroussin /* 96*d0ef721eSBaptiste Daroussin * Note that we use both data structures because the user can bind 97*d0ef721eSBaptiste Daroussin * commands from both editors! 98*d0ef721eSBaptiste Daroussin */ 99*d0ef721eSBaptiste Daroussin typedef struct el_chared_t { 100*d0ef721eSBaptiste Daroussin c_undo_t c_undo; 101*d0ef721eSBaptiste Daroussin c_kill_t c_kill; 102*d0ef721eSBaptiste Daroussin c_redo_t c_redo; 103*d0ef721eSBaptiste Daroussin c_vcmd_t c_vcmd; 104*d0ef721eSBaptiste Daroussin el_zfunc_t c_resizefun; 105*d0ef721eSBaptiste Daroussin el_afunc_t c_aliasfun; 106*d0ef721eSBaptiste Daroussin void * c_resizearg; 107*d0ef721eSBaptiste Daroussin void * c_aliasarg; 108*d0ef721eSBaptiste Daroussin } el_chared_t; 109*d0ef721eSBaptiste Daroussin 110*d0ef721eSBaptiste Daroussin 111*d0ef721eSBaptiste Daroussin #define STRQQ "\"\"" 112*d0ef721eSBaptiste Daroussin 113*d0ef721eSBaptiste Daroussin #define isglob(a) (strchr("*[]?", (a)) != NULL) 114*d0ef721eSBaptiste Daroussin 115*d0ef721eSBaptiste Daroussin #define NOP 0x00 116*d0ef721eSBaptiste Daroussin #define DELETE 0x01 117*d0ef721eSBaptiste Daroussin #define INSERT 0x02 118*d0ef721eSBaptiste Daroussin #define YANK 0x04 119*d0ef721eSBaptiste Daroussin 120*d0ef721eSBaptiste Daroussin #define CHAR_FWD (+1) 121*d0ef721eSBaptiste Daroussin #define CHAR_BACK (-1) 122*d0ef721eSBaptiste Daroussin 123*d0ef721eSBaptiste Daroussin #define MODE_INSERT 0 124*d0ef721eSBaptiste Daroussin #define MODE_REPLACE 1 125*d0ef721eSBaptiste Daroussin #define MODE_REPLACE_1 2 126*d0ef721eSBaptiste Daroussin 127*d0ef721eSBaptiste Daroussin 128*d0ef721eSBaptiste Daroussin libedit_private int cv__isword(wint_t); 129*d0ef721eSBaptiste Daroussin libedit_private int cv__isWord(wint_t); 130*d0ef721eSBaptiste Daroussin libedit_private void cv_delfini(EditLine *); 131*d0ef721eSBaptiste Daroussin libedit_private wchar_t *cv__endword(wchar_t *, wchar_t *, int, int (*)(wint_t)); 132*d0ef721eSBaptiste Daroussin libedit_private int ce__isword(wint_t); 133*d0ef721eSBaptiste Daroussin libedit_private void cv_undo(EditLine *); 134*d0ef721eSBaptiste Daroussin libedit_private void cv_yank(EditLine *, const wchar_t *, int); 135*d0ef721eSBaptiste Daroussin libedit_private wchar_t *cv_next_word(EditLine*, wchar_t *, wchar_t *, int, 136*d0ef721eSBaptiste Daroussin int (*)(wint_t)); 137*d0ef721eSBaptiste Daroussin libedit_private wchar_t *cv_prev_word(wchar_t *, wchar_t *, int, int (*)(wint_t)); 138*d0ef721eSBaptiste Daroussin libedit_private wchar_t *c__next_word(wchar_t *, wchar_t *, int, int (*)(wint_t)); 139*d0ef721eSBaptiste Daroussin libedit_private wchar_t *c__prev_word(wchar_t *, wchar_t *, int, int (*)(wint_t)); 140*d0ef721eSBaptiste Daroussin libedit_private void c_insert(EditLine *, int); 141*d0ef721eSBaptiste Daroussin libedit_private void c_delbefore(EditLine *, int); 142*d0ef721eSBaptiste Daroussin libedit_private void c_delbefore1(EditLine *); 143*d0ef721eSBaptiste Daroussin libedit_private void c_delafter(EditLine *, int); 144*d0ef721eSBaptiste Daroussin libedit_private void c_delafter1(EditLine *); 145*d0ef721eSBaptiste Daroussin libedit_private int c_gets(EditLine *, wchar_t *, const wchar_t *); 146*d0ef721eSBaptiste Daroussin libedit_private int c_hpos(EditLine *); 147*d0ef721eSBaptiste Daroussin 148*d0ef721eSBaptiste Daroussin libedit_private int ch_init(EditLine *); 149*d0ef721eSBaptiste Daroussin libedit_private void ch_reset(EditLine *); 150*d0ef721eSBaptiste Daroussin libedit_private int ch_resizefun(EditLine *, el_zfunc_t, void *); 151*d0ef721eSBaptiste Daroussin libedit_private int ch_aliasfun(EditLine *, el_afunc_t, void *); 152*d0ef721eSBaptiste Daroussin libedit_private int ch_enlargebufs(EditLine *, size_t); 153*d0ef721eSBaptiste Daroussin libedit_private void ch_end(EditLine *); 154*d0ef721eSBaptiste Daroussin 155*d0ef721eSBaptiste Daroussin #endif /* _h_el_chared */ 156