History log of /src/lib/libedit/el.h |
Revision | | Date | Author | Comments |
1.48 |
| 03-Jan-2025 |
rillig | libedit: remove redundant break statements after EL_ABORT
|
1.47 |
| 17-May-2024 |
christos | When calling el_line make sure that we call the resizing function callback because el_line updates the legacy LineInfo structure and we need to notify that the cached copy of the the buffer has changed. Of course the resizing function can call el_line itself to update the buffer, so prevent recursion. Bug found by Peter Rufer at Arista.
|
1.46 |
| 15-Aug-2021 |
christos | Disable attempts to handle EINTR and non-blocking I/O by default. It is confusing to other programs and unexpected behavior. Reported by Ingo Schwarze. This behavior is now controlled with EL_SAFEREAD.
|
1.45 |
| 23-Jul-2019 |
christos | PR/54399: S�ren Tempel: Uninitialized memory access in libedit history. Initialize the buffer using calloc. While here change all malloc(a * sizeof(b)) to calloc(a, sizeof(b)). XXX: should fix realloc similarly.
|
1.44 |
| 18-Nov-2018 |
christos | Remove utf-8 requirement (Yuichiro NAITO)
|
1.43 |
| 05-Sep-2017 |
christos | branches: 1.43.2; 1.43.4; For readline emulation, don't reset the tty to "sane" (cooked) mode if we did not start this way. Also set and reset the tty on entry and exit from readline() since this is what readline does.
|
1.42 |
| 27-Jun-2017 |
christos | add literal escape sequence support, patterned after the tcsh ones.
|
1.41 |
| 24-May-2016 |
christos | branches: 1.41.8; From Ingo Schwarze:
Reduce obfuscation of errno handling. There is only one purpose non-local errno handling is needed for: Inside el_wgets(), several functions call down indirectly to el_wgetc(), many of them via the dispatch table. When el_wgetc() fails, it does properly report failure, but then various cleanup is done which may clobber errno. But when returning due to failure, el_wgets() wants to have errno set to the reason of the original read failure, not to the reason of some subsequent failure of some cleanup operation. So el_wgetc() needs to save errno, and if it's non-zero, el_wgets() needs to restore it on failure.
This core logic is currently obscured by the fact that el_errno is set and inspected at some additional places where it isn't needed. Besides, since el_wgetc() and and el_wgets() are both in read.c, el_errno does not need to be in struct editline, it can and should be local to read.c in struct el_read_t.
Let's look at what can be simplified.
1. keymacro_get() abuses el_errno instead of having a proper error return code. Adding that error return code is easy because node_trav() already detects the condition and an adequate code is already defined. Returning it, testing for it in read_getcmd(), and returning with error from there removes the need to inspect el_errno from el_wgets() after calling read_getcmd(). Note that resetting lastchar and cursor and clearing buffer[0] is irrelevant. The code returns from el_wgets() right afterwards. Outside el_wgets(), these variables are no longer relevant. When el_wgets() is called the next time, it will call ch_reset() anyway, resetting the two pointers. And as long as lastchar points to the beginning of the buffer, the contents of the buffer won't be used for anything.
2. read_getcmd() doesn't need to set el_errno again after el_wgetc() failure since el_wgetc() already did so. While here, remove the silly "if EOF or error" comments from the el_wgetc() return value tests. It's a public interface documented in a manual, so people working on the implementation can obviously be expected to know how it works. It's a case of
count++; /* Increment count. */
3. In the two code paths of el_wgets() that lead up to "goto noedit", there is no need to save the errno because nothing that might change it happens before returning.
For clarity, since el_wgets() is the function restoring the errno, also move initializing it to the same function.
Finally, note that restoring errno when the saved value is zero is wrong. No library code is ever allowed to clear a previously set value of errno. Only application programs are allowed to do that, and even they usually don't need to do so, except when using certain ill-designed interfaces like strtol(3).
I tested that the behaviour remains sane in the following cases, all during execution of el_wgets(3) and with a signal handler for USR1 installed without SA_RESTART.
* Enter some text and maybe move around a bit. Then send a USR1 signal. The signal gets processed, then read_char() resumes reading. Send another USR1 signal. Now el_wgets() sets errno=EINTR and returns -1.
* Press Ctrl-V to activate ed-quoted-insert. Then send a USR1 signal. The signal gets processed, then read_char() resumes reading. Send another USR1 signal. ed_quoted_insert() returns ed_end_of_file(), i.e. CC_EOF, and el_wgets() returns 0.
* Press a key starting a keyboard macro. Then send a USR1 signal. The signal gets processed, then read_char() resumes reading. Send another USR1 signal. Now el_wgets() sets errno=EINTR and returns -1.
* Press : to enter builtin command mode. Start typing a command. Then send a USR1 signal. The signal gets processed, then read_char() resumes reading. Send another USR1 signal. Now c_gets() returns -1, ed_command() beeps and returns CC_REFRESH, and el_wgets() resumes operation as it should.
I also tested with "el_set(el, EL_EDITMODE, 0)", and it returns the right value and sets errno correctly.
|
1.40 |
| 09-May-2016 |
christos | s/protected/libedit_private/g
|
1.39 |
| 02-May-2016 |
christos | eliminate static buffer with custom resizing code.
|
1.38 |
| 19-Apr-2016 |
christos | From Ingo Schwarze: - Put the data type el_rfunc_t into the public header <histedit.h>. - Make el_read in struct editline an opaque pointer rather than an embedded struct. - Do not include "read.h" everywhere, but only in the two files needing access to el_read, read.c and el.c. - To functions that don't need more, pass the struct el_read_t * rather than the full EditLine *. - Of course, that means that read_init() can now fail from memory exhaustion, but it's easy to clean up after that.
|
1.37 |
| 18-Apr-2016 |
christos | From Ingo Schwarze: * Replace fcns.c by a shorter and simpler func.h and include it only in the one file needing it, map.c. * Combine help.h and help.c into a simplified help.h and include it only in the one file needing it, map.c. * Check the very simple, static files editline.c, historyn.c, and tokenizern.c into CVS rather than needlessly generating them. * So we no longer autogenerate any C files. :-) * Shorten and simplify makelist by deleting the options -n, -e, -bc, and -m; the latter was unused and useless in the first place. * Move the declaration of el_func_t from fcns.h to the header actually needing it, map.h. Since that header is already included by el.h for unrelated reasons, that makes el_func_t just as globally available as before. * No longer include the simplified fcns.h into el.h, include it directly into the *.c files needing it.
|
1.36 |
| 11-Apr-2016 |
christos | Char -> wchar_t from Ingo Schwarze.
|
1.35 |
| 23-Mar-2016 |
christos | Start removing the WIDECHAR ifdefs; building without it has stopped working anyway. (Ingo Schwarze)
|
1.34 |
| 24-Feb-2016 |
christos | Make the read_char function always take a wchar_t * argument (Ingo Schwarze)
|
1.33 |
| 17-Feb-2016 |
christos | whitespace and header sorting changes (Ingo Schwarze). No functional changes.
|
1.32 |
| 16-Feb-2016 |
christos | More header cleanups from Ingo Schwarze.
|
1.31 |
| 16-Feb-2016 |
christos | get rid of bool_t (Ingo Schwarze)
|
1.30 |
| 16-Feb-2016 |
christos | more include file cleanup (Ingo Schwarze)
|
1.29 |
| 16-Feb-2016 |
christos | From Ingo Scharze: Let "el.h" include everything needed for struct editline, and don't include that stuff multiple times. That also improves consistency, also avoids circular inclusions, and also makes it easier to follow what is going on, even though not quite as nice. But it seems like the best we can do...
|
1.28 |
| 16-Feb-2016 |
christos | cleanup chartype.h includes (Ingo Schwarze)
|
1.27 |
| 16-Feb-2016 |
christos | cleanup inclusion of histedit.h (Ingo Schwarze)
|
1.26 |
| 12-Feb-2016 |
christos | GC IGNORE_EXTCHARS and simplify code (Ingo Schwarze)
|
1.25 |
| 29-Jul-2011 |
christos | pass -Wconversion
|
1.24 |
| 28-Jul-2011 |
christos | Rename key to keymacro to avoid conflicts with term.h. The renaming of term to terminal was again to avoid conflicts with term.h. term.h is a moving namespace violation.
|
1.23 |
| 28-Jul-2011 |
christos | term -> terminal XXX: need to rename key_ too.
|
1.22 |
| 27-Jan-2011 |
christos | don't turn on editing if stdout is not a tty.
|
1.21 |
| 31-Dec-2009 |
christos | branches: 1.21.2; - Document and enable wide character support. - Fix read function compatibility.
|
1.20 |
| 30-Dec-2009 |
christos | Fix wide build, test it, but don't turn it on yet.
|
1.19 |
| 30-Dec-2009 |
christos | Wide character support (UTF-8) from Johny Mattsson; currently disabled.
|
1.18 |
| 15-Feb-2009 |
christos | don't restart on EINTR, instead return NULL immediately. From Anon Ymous
|
1.17 |
| 15-Dec-2006 |
christos | branches: 1.17.20; add EL_GETFP, and EL_SETFP.
|
1.16 |
| 18-Oct-2003 |
christos | change allocation policy in el_push to allocate the string itself. fix issues with strdup.
|
1.15 |
| 26-Sep-2003 |
christos | Implement enough of readline's 4.0 async mode to make gdb happy. This is not complete yet, but it seems to work... This required to introduce an unbuffered mode to el_gets(), but that was a minor change.
|
1.14 |
| 07-Aug-2003 |
agc | Move UCB-licensed code from 4-clause to 3-clause licence.
Patches provided by Joel Baker in PR 22280, verified by myself.
|
1.13 |
| 15-Nov-2002 |
christos | PR/18995: David Laight: libedit fixes for posix conformant sh
The posix 'sh' specification defines vi-mode editing quite tightly. The netbsd libedit code (used by sh to do this) was missing several features, there were also minor errors in others.
Compare netbsd sh to the definition available from: http://www.opengroup.org/onlinepubs/007904975/utilities/sh.html In particular the following were not supported: U - undo all changes to line | - goto column Y - yank to end of line y - yank # - comment out current line @ - take input from shell alias [1] G - goto numbered line in history buffer v - edit history line with vi _ - append word from last input line . - redo last command Other minor changes have also been made.
[1] This needs the shell to define an appropriate routine to return the text of the alias. There is no requirement that such a function exist.
|
1.12 |
| 27-Oct-2002 |
christos | vi mode and memory fixes from david laight.
|
1.11 |
| 18-Mar-2002 |
christos | - constify; passes all gcc and lint strict checks. - add config.h [Jason Evans], to create a portable version of libedit that can be easily compiled on other OS's.
|
1.10 |
| 09-Oct-2001 |
christos | PR/14188: Anthony Mallet: Provide an opaque data pointer to client programs.
|
1.9 |
| 27-Sep-2001 |
christos | PR/14067: Anthony Mallet: Provide a programmatic way to set the read_char function via a new el_set() operation. Thanks, nicely done :-)
|
1.8 |
| 06-Jan-2001 |
jdolecek | el_line_t: make 'limit' const
|
1.7 |
| 11-Nov-2000 |
christos | - add support for home and end keys. - improve debugging support
|
1.6 |
| 04-Sep-2000 |
lukem | convert to new style guide, which includes: - ansi prototypes & features (such as stdargs) - 8 space indents
|
1.5 |
| 12-Nov-1999 |
lukem | - implement printing a right-side prompt. code derived from similar work I wrote for tcsh(1) three years ago. - implement EL_RPROMPT, which allows a setting/getting of a function which returns a string to be used as the right-side prompt. - improve HISTORY and AUTHORS sections in editline(3). - bump shlib minor version for EL_RPROMPT.
XXX: due to an implementation issue, the rprompt has a 1 space gap before the edge of the logical screen. editline's logical screen is 1 space less than the full screen width, so there's a 2 space gap between the rprompt and the right end of the physical screen. i'm not concerned about this.
|
1.4 |
| 29-Jul-1998 |
lukem | branches: 1.4.6; * add more checks for NULL pointers in passed arguments * implement el_get(EditLine *, int op, void *result), which does the inverse of el_set() * add EL_EDITMODE operation to el_set and el_get; if non zero editing is enabled (the default). * add "edit on | off" editrc command, which modifies EL_EDITMODE. users can now add '*:edit off' in ~/.editrc as an advisory to disable editing.
NOTE: at this time EL_EDITMODE is just an indication of the state of the 'edit' command. It's up to the application to check this after el_source() or el_parse() to determine if editing is still required.
|
1.3 |
| 20-Dec-1997 |
christos | Small optimization. Don't call isatty() on every invocation of el_gets, but remember if the tty setup failed... Also trim the input line of trailing \r's.
|
1.2 |
| 11-Jan-1997 |
lukem | RCSid police editline first appeared in 4.4BSD not NetBSD1.0
|
1.1 |
| 06-May-1994 |
cgd | branches: 1.1.1; Initial revision
|
1.1.1.1 |
| 06-May-1994 |
cgd | libedit!
|
1.4.6.1 |
| 27-Dec-1999 |
wrstuden | Pull up to last week's -current.
|
1.17.20.1 |
| 13-May-2009 |
jym | Sync with HEAD.
Third (and last) commit. See http://mail-index.netbsd.org/source-changes/2009/05/13/msg221222.html
|
1.21.2.1 |
| 08-Feb-2011 |
bouyer | Sync with HEAD
|
1.41.8.1 |
| 23-Jul-2017 |
snj | Pull up following revision(s) (requested by kre in ticket #102): lib/libedit/Makefile: 1.64-1.65 lib/libedit/editline.3: 1.94-1.96 lib/libedit/editrc.5: 1.33 lib/libedit/el.c: 1.93-1.94 lib/libedit/el.h: 1.42 lib/libedit/literal.c: 1.1-1.3 lib/libedit/literal.h: 1.1-1.2 lib/libedit/prompt.c: 1.27 lib/libedit/read.c: 1.103 lib/libedit/refresh.c: 1.52-1.54 lib/libedit/refresh.h: 1.11 lib/libedit/terminal.c: 1.33 Make the default editrc file be $EDITRC (from env) if set, falling back to $HOME/.editrc otherwise. Better support for this in sh coming. -- Include EDITRC in doc. -- mention the limitation of the literal sequence delimiter. -- - handle literal escape sequence printing. - factor out common code in allocation and freeing of the display. -- - add literal sequence handling. -- remove unused variable -- add literal escape sequence support, patterned after the tcsh ones. -- fix comment -- Fix an obvious, but almost invisible typo (avoid some core dumps). -- Allow wide characters (properly encoded as byte strings according to LC_CTYPE) to be (perhaps part of) the "invisible" characters in a prompt, or the required prompt character which follows the literal sequence (this character must be one with a printing column width >= 1). The literal indicator character (which is just a marker, and not printed anywhere) (the PSlit parameter in sh(1)) can also be a wide char (passed to libedit as a wchar_t, encoded as that by sh(1) or other applications that support this.) Note: this has currently only been tested with everything ascii (C locale). -- Remove workaround for ancient HTML generation code.
|
1.43.4.2 |
| 13-Apr-2020 |
martin | Mostly merge changes from HEAD upto 20200411
|
1.43.4.1 |
| 10-Jun-2019 |
christos | Sync with HEAD
|
1.43.2.1 |
| 26-Nov-2018 |
pgoyette | Sync with HEAD, resolve a couple of conflicts
|