/* edit.c */
extern int edit __ARGS((int cmdchar, int startln, long count));
extern void edit_putchar __ARGS((int c, int highlight));
extern void edit_unputchar __ARGS((void));
extern void display_dollar __ARGS((colnr_T col));
extern void change_indent __ARGS((int type, int amount, int round, int replaced));
extern void truncate_spaces __ARGS((char_u *line));
extern void backspace_until_column __ARGS((int col));
extern int vim_is_ctrl_x_key __ARGS((int c));
extern int ins_compl_add_infercase __ARGS((char_u *str, int len, int icase, char_u *fname, int dir, int flags));
extern void set_completion __ARGS((int startcol, list_T *list));
extern void ins_compl_show_pum __ARGS((void));
extern char_u *find_word_start __ARGS((char_u *ptr));
extern char_u *find_word_end __ARGS((char_u *ptr));
extern int ins_compl_active __ARGS((void));
extern int ins_compl_add_tv __ARGS((typval_T *tv, int dir));
extern void ins_compl_check_keys __ARGS((int frequency));
extern int get_literal __ARGS((void));
extern void insertchar __ARGS((int c, int flags, int second_indent));
extern void auto_format __ARGS((int trailblank, int prev_line));
extern int comp_textwidth __ARGS((int ff));
extern int stop_arrow __ARGS((void));
extern void set_last_insert __ARGS((int c));
extern void free_last_insert __ARGS((void));
extern char_u *add_char2buf __ARGS((int c, char_u *s));
extern void beginline __ARGS((int flags));
extern int oneright __ARGS((void));
extern int oneleft __ARGS((void));
extern int cursor_up __ARGS((long n, int upd_topline));
extern int cursor_down __ARGS((long n, int upd_topline));
extern int stuff_inserted __ARGS((int c, long count, int no_esc));
extern char_u *get_last_insert __ARGS((void));
extern char_u *get_last_insert_save __ARGS((void));
extern void replace_push __ARGS((int c));
extern void fixthisline __ARGS((int (*get_the_indent)(void)));
extern void fix_indent __ARGS((void));
extern int in_cinkeys __ARGS((int keytyped, int when, int line_is_empty));
extern int hkmap __ARGS((int c));
extern void ins_scroll __ARGS((void));
extern void ins_horscroll __ARGS((void));
/* vim: set ft=c : */
