diff -rc alpine-2.10/pico/basic.c alpine-2.10.WrtAcc/pico/basic.c *** alpine-2.10/pico/basic.c 2013-01-11 11:25:28.000000000 -0700 --- alpine-2.10.WrtAcc/pico/basic.c 2013-01-11 20:43:11.000000000 -0700 *************** *** 344,349 **** --- 344,532 ---- return(TRUE); } + unsigned char GetAccent() + { + UCS c,d; + c = GetKey(); + if ((c == '?') || (c == '!')) { + d = c; + c = '\\'; + } + else + if ((c == 's') || (c == 'S')){ + c = d = 's'; + } + else + if ((c == 'l') || (c == 'L')){ + c = d = 'l'; + } + else + d = GetKey(); + return accent(c,d); + } + + int pineaccent(f,n) + int f,n; + { unsigned char e; + + if (e = GetAccent()) + execute(e, 0, 1); + return 1; + } + + unsigned char accent(f,n) + UCS f,n; + { UCS c,d; + + c = f; + d = n; + switch(c){ + case '~' : + switch(d){ + case 'a' : return '\343'; + case 'n' : return '\361'; + case 'o' : return '\365'; + case 'A' : return '\303'; + case 'N' : return '\321'; + case 'O' : return '\325'; + } + break; + case '\047' : + switch(d){ + case 'a' : return '\341'; + case 'e' : return '\351'; + case 'i' : return '\355'; + case 'o' : return '\363'; + case 'u' : return '\372'; + case 'y' : return '\375'; + case 'A' : return '\301'; + case 'E' : return '\311'; + case 'I' : return '\315'; + case 'O' : return '\323'; + case 'U' : return '\332'; + case 'Y' : return '\335'; + } + break; + case '"' : + switch(d){ + case 'a' : return '\344'; + case 'e' : return '\353'; + case 'i' : return '\357'; + case 'o' : return '\366'; + case 'u' : return '\374'; + case 'y' : return '\377'; + case 'A' : return '\304'; + case 'E' : return '\313'; + case 'I' : return '\317'; + case 'O' : return '\326'; + case 'U' : return '\334'; + } + break; + case '^' : + switch(d){ + case 'a' : return '\342'; + case 'e' : return '\352'; + case 'i' : return '\356'; + case 'o' : return '\364'; + case 'u' : return '\373'; + case 'A' : return '\302'; + case 'E' : return '\312'; + case 'I' : return '\316'; + case 'O' : return '\324'; + case 'U' : return '\333'; + case '0' : return '\260'; + case '1' : return '\271'; + case '2' : return '\262'; + case '3' : return '\263'; + } + break; + case '`' : + switch(d){ + case 'a' : return '\340'; + case 'e' : return '\350'; + case 'i' : return '\354'; + case 'o' : return '\362'; + case 'u' : return '\371'; + case 'A' : return '\300'; + case 'E' : return '\310'; + case 'I' : return '\314'; + case 'O' : return '\322'; + case 'U' : return '\331'; + } + break; + case 'o' : + switch(d){ + case 'a' : return '\345'; + case 'A' : return '\305'; + case '/' : return '\370'; + case 'r' : return '\256'; + case 'R' : return '\256'; + case 'c' : return '\251'; + case 'C' : return '\251'; + } + break; + case '-' : + switch(d){ + case 'o' : return '\272'; + case 'O' : return '\272'; + case '0' : return '\272'; + case 'a' : return '\252'; + case 'A' : return '\252'; + case 'l' : return '\243'; + case 'L' : return '\243'; + } + break; + case 'O' : + switch(d){ + case '/' : return '\330'; + case 'r' : return '\256'; + case 'R' : return '\256'; + case 'c' : return '\251'; + case 'C' : return '\251'; + } + case '/' : + switch(d){ + case 'o' : return '\370'; + case 'O' : return '\330'; + } + break; + case 'a' : + switch(d){ + case 'e' : return '\346'; + case 'E' : return '\346'; + } + break; + case 'A' : + switch(d){ + case 'E' : return '\306'; + case 'e' : return '\306'; + } + break; + case ',' : + switch(d){ + case 'c' : return '\347'; + case 'C' : return '\307'; + } + break; + case '\\' : + switch(d){ + case '?' : return '\277'; + case '!' : return '\241'; + } + break; + case 's' : + switch(d){ + case 's' : return '\337'; + } + break; + case 'l' : + switch(d){ + case 'l' : return '\243'; + } + break; + } + return '\0'; + } /* * go forword to the end of the current paragraph diff -rc alpine-2.10/pico/composer.c alpine-2.10.WrtAcc/pico/composer.c *** alpine-2.10/pico/composer.c 2013-01-11 19:45:41.000000000 -0700 --- alpine-2.10.WrtAcc/pico/composer.c 2013-01-11 20:43:11.000000000 -0700 *************** *** 2015,2021 **** tbufp = &strng[ods.p_len]; if(VALID_KEY(ch)){ /* char input */ ! /* * if we are allowing editing, insert the new char * end up leaving tbufp pointing to newly * inserted character in string, and offset to the --- 2015,2021 ---- tbufp = &strng[ods.p_len]; if(VALID_KEY(ch)){ /* char input */ ! insert_char:/* * if we are allowing editing, insert the new char * end up leaving tbufp pointing to newly * inserted character in string, and offset to the *************** *** 2095,2100 **** --- 2095,2107 ---- } else { /* interpret ch as a command */ switch (ch = normalize_cmd(ch, ckm, 2)) { + case (CTRL|'\\') : + if (ch = GetAccent()) + goto insert_char; + else + clearcursor(); + break; + case (CTRL|KEY_LEFT): /* word skip left */ if(ods.p_ind > 0) /* Scoot one char left if possible */ ods.p_ind--; diff -rc alpine-2.10/pico/display.c alpine-2.10.WrtAcc/pico/display.c *** alpine-2.10/pico/display.c 2013-01-11 11:25:29.000000000 -0700 --- alpine-2.10.WrtAcc/pico/display.c 2013-01-11 20:43:11.000000000 -0700 *************** *** 1751,1756 **** --- 1751,1761 ---- b = &buf[ucs4_strlen(buf)]; continue; + case (CTRL|'\\'): + if (c = GetAccent()) + goto text; + continue; + case (CTRL|'F') : /* CTRL-F forward a char*/ case KEY_RIGHT : if(*b == '\0') *************** *** 1869,1875 **** #endif default : ! /* look for match in extra_v */ for(i = 0; i < 12; i++) if(c && c == extra_v[i]){ --- 1874,1880 ---- #endif default : ! text: /* look for match in extra_v */ for(i = 0; i < 12; i++) if(c && c == extra_v[i]){ diff -rc alpine-2.10/pico/ebind.h alpine-2.10.WrtAcc/pico/ebind.h *** alpine-2.10/pico/ebind.h 2013-01-11 11:25:29.000000000 -0700 --- alpine-2.10.WrtAcc/pico/ebind.h 2013-01-11 20:43:11.000000000 -0700 *************** *** 61,67 **** #ifdef MOUSE {KEY_MOUSE, mousepress}, #ifndef _WINDOWS ! {CTRL|'\\', toggle_xterm_mouse}, #endif #endif {CTRL|'A', gotobol}, --- 61,67 ---- #ifdef MOUSE {KEY_MOUSE, mousepress}, #ifndef _WINDOWS ! {CTRL|'|', toggle_xterm_mouse}, #endif #endif {CTRL|'A', gotobol}, *************** *** 100,106 **** {CTRL|KEY_HOME, gotobob}, {CTRL|KEY_END, gotoeob}, {0x7F, backdel}, ! {0, NULL} }; --- 100,108 ---- {CTRL|KEY_HOME, gotobob}, {CTRL|KEY_END, gotoeob}, {0x7F, backdel}, ! {CTRL|'\\', pineaccent}, ! {0, ! NULL} }; *************** *** 123,129 **** #ifdef MOUSE {KEY_MOUSE, mousepress}, #ifndef _WINDOWS ! {CTRL|'\\', toggle_xterm_mouse}, #endif #endif {CTRL|'A', gotobol}, --- 125,131 ---- #ifdef MOUSE {KEY_MOUSE, mousepress}, #ifndef _WINDOWS ! {CTRL|'|', toggle_xterm_mouse}, #endif #endif {CTRL|'A', gotobol}, diff -rc alpine-2.10/pico/efunc.h alpine-2.10.WrtAcc/pico/efunc.h *** alpine-2.10/pico/efunc.h 2013-01-11 11:25:29.000000000 -0700 --- alpine-2.10.WrtAcc/pico/efunc.h 2013-01-11 20:43:11.000000000 -0700 *************** *** 54,59 **** --- 54,62 ---- extern int backline(int, int); extern int gotobop(int, int); extern int gotoeop(int, int); + extern int pineaccent(int, int); + extern unsigned char accent(UCS, UCS); + extern unsigned char GetAccent(void); extern int forwpage(int, int); extern int backpage(int, int); extern int scrollupline(int, int); diff -rc alpine-2.10/pico/main.c alpine-2.10.WrtAcc/pico/main.c *** alpine-2.10/pico/main.c 2013-01-11 11:25:29.000000000 -0700 --- alpine-2.10.WrtAcc/pico/main.c 2013-01-11 20:43:11.000000000 -0700 *************** *** 416,421 **** --- 416,427 ---- emlwrite(_("You may possibly have new mail."), NULL); } + if (c == (CTRL|'\\')){ + c = GetAccent(); + if (!c) + c = NODATA; + } + if(km_popped) switch(c){ case NODATA: diff -rc alpine-2.10/pico/search.c alpine-2.10.WrtAcc/pico/search.c *** alpine-2.10/pico/search.c 2013-01-11 11:25:29.000000000 -0700 --- alpine-2.10.WrtAcc/pico/search.c 2013-01-11 20:43:11.000000000 -0700 *************** *** 274,280 **** } if(status + curwp->w_doto >= llength(curwp->w_dotp) || ! !eq(defpat[status],lgetc(curwp->w_dotp, curwp->w_doto + status).c)) break; /* do nothing! */ status++; } --- 274,280 ---- } if(status + curwp->w_doto >= llength(curwp->w_dotp) || ! !eq((unsigned char)defpat[status],lgetc(curwp->w_dotp, curwp->w_doto + status).c)) break; /* do nothing! */ status++; } *************** *** 927,933 **** c = lgetc(curline, curoff++).c; /* get the char */ /* test it against first char in pattern */ ! if (eq(c, patrn[0]) != FALSE) { /* if we find it..*/ /* setup match pointers */ matchline = curline; matchoff = curoff; --- 927,933 ---- c = lgetc(curline, curoff++).c; /* get the char */ /* test it against first char in pattern */ ! if (eq(c, (unsigned char)patrn[0]) != FALSE) { /* if we find it..*/ /* setup match pointers */ matchline = curline; matchoff = curoff; *************** *** 948,954 **** return(FALSE); /* and test it against the pattern */ ! if (eq(*patptr, c) == FALSE) goto fail; } --- 948,954 ---- return(FALSE); /* and test it against the pattern */ ! if (eq((unsigned char) *patptr, c) == FALSE) goto fail; }