diff --git src/LYStrings.c src/LYStrings.c index 67c0b2b..c34cf30 100644 --- src/LYStrings.c +++ src/LYStrings.c @@ -270,6 +270,40 @@ int fancy_mouse(WINDOW * win, int row, return cmd; } +// ------------------------ >8 ------------------------ + +#include +#include +#include +#define typecalloc(cast) (cast *)calloc((size_t)1, sizeof(cast)) + +static char *readEditedFile(char *ed_temp) +{ + struct stat stat_info; + size_t size; + if ((stat(ed_temp, &stat_info) < 0) || + !S_ISREG(stat_info.st_mode) || + ((size = (size_t) stat_info.st_size) == 0)) { + return NULL; + } + char *ebuf = malloc(size + 1); + assert(ebuf != NULL); + FILE *fp = NULL; + if ((fp = fopen(ed_temp, "r")) != 0) { + size = fread(ebuf, (size_t) 1, size, fp); + LYCloseInput(fp); + ebuf[size] = '\0'; + } else { + free(ebuf); + return NULL; + } + return ebuf; +} + +#include + +// ------------------------ >8 ------------------------ + /* * Manage the collection of edit-histories */ @@ -3380,8 +3414,24 @@ int LYDoEdit(FieldEditor * edit, int ch, EditAt++; break; - case LYE_ERASE: /* erase the line */ - Buffer[0] = '\0'; + case LYE_ERASE: { + char *tmpPath = malloc(LY_MAXPATH); + FILE *fp = LYOpenTemp(tmpPath, "", "w"); + assert(fp != 0); + fputs(Buffer, fp); + LYCloseTempFP(fp); + edit_temporary_file(tmpPath, "", NULL); + char *ebuf = readEditedFile(tmpPath); + free(tmpPath); + if (ebuf != NULL) { + FREE(Buffer); + Buffer = ebuf; + edit->efBufInUse = strlen(ebuf); + edit->efBufAlloc = edit->efBufInUse; + edit->efBufLimit = 0; + } + } + #ifdef ENHANCED_LINEEDIT EditMark = -1; /* Do not show the mark */ #endif