diff -rc alpine-2.24/pico/basic.c alpine-2.24.WrtAcc/pico/basic.c *** alpine-2.24/pico/basic.c 2020-10-10 00:24:28.180553991 -0600 --- alpine-2.24.WrtAcc/pico/basic.c 2020-10-10 00:26:57.220352202 -0600 *************** *** 342,347 **** --- 342,530 ---- 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.24/pico/composer.c alpine-2.24.WrtAcc/pico/composer.c *** alpine-2.24/pico/composer.c 2020-10-10 00:24:28.180553991 -0600 --- alpine-2.24.WrtAcc/pico/composer.c 2020-10-10 00:26:57.220352202 -0600 *************** *** 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.24/pico/display.c alpine-2.24.WrtAcc/pico/display.c *** alpine-2.24/pico/display.c 2020-10-10 00:24:28.180553991 -0600 --- alpine-2.24.WrtAcc/pico/display.c 2020-10-10 00:26:57.220352202 -0600 *************** *** 2196,2201 **** --- 2196,2206 ---- 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') *************** *** 2314,2320 **** #endif default : ! /* look for match in extra_v */ for(i = 0; i < 12; i++) if(c && c == extra_v[i]){ --- 2319,2325 ---- #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.24/pico/ebind.h alpine-2.24.WrtAcc/pico/ebind.h *** alpine-2.24/pico/ebind.h 2020-10-10 00:24:28.184554092 -0600 --- alpine-2.24.WrtAcc/pico/ebind.h 2020-10-10 00:26:57.228352405 -0600 *************** *** 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.24/pico/efunc.h alpine-2.24.WrtAcc/pico/efunc.h *** alpine-2.24/pico/efunc.h 2020-10-10 00:24:28.180553991 -0600 --- alpine-2.24.WrtAcc/pico/efunc.h 2020-10-10 00:26:57.240352712 -0600 *************** *** 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.24/pico/main.c alpine-2.24.WrtAcc/pico/main.c *** alpine-2.24/pico/main.c 2020-10-10 00:24:28.180553991 -0600 --- alpine-2.24.WrtAcc/pico/main.c 2020-10-10 00:26:57.280353731 -0600 *************** *** 458,463 **** --- 458,469 ---- emlwrite(_("You may possibly have new mail."), NULL); } + if (c == (CTRL|'\\')){ + c = GetAccent(); + if (!c) + c = NODATA; + } + if(km_popped) switch(c){ case NODATA: