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