linenoise.c


Log

Author Commit Date CI Message
antirez ae5f793e 2016-04-12T18:08:33 linenoiseFree() API introduced.
antirez 12a8680d 2016-04-12T17:59:33 Hints WIP
antirez d97e7665 2016-04-06T13:40:15 Copyright info updated.
antirez 94d9ddb2 2016-04-06T13:39:09 4096 bytes line limit removed when STDIN is not a tty.
antirez 80fd0569 2015-04-13T09:38:43 Version 1.0 Linenoise is used in multiple projects for enough time, let's tag this commit with a version number as requested into issue #88, so that we have an initial reference. Given the nature of the library, the version was also added in the linenoise C and header file as well so that it is easy to realize for people having a copy embedded somewhere if they are using the latest version.
antirez cf1bdf5f 2014-10-07T15:22:48 License file added. However the files linenose.c and linenose.h already had inline licenses.
antirez c1c5a026 2014-09-03T11:49:43 Move to end before return when in multi-line mode. This makes sure that if we are editing in multi-line mode a line that actually spawns across multiple lines, the next output performed by the application using linenoise will not overwrite the edited line.
antirez 01e723a0 2014-09-03T11:38:19 Replace ESC 999D with CR. OSX default Terminal app does not handle 999D well, the cursor will wrap back to the previous row in the last colum, instead of ignoring the sequence if the cursor is already at the left edge. In order to avoid reintroducing the nG sequence that is not compatible with base VT100 emulation and ANSI.SYS, we use CR that should be hopefully widely supported.
antirez c84d0a02 2014-09-03T10:11:31 Don't emit ESC [ n C with n=0. This fixes a bug introduced with ANSI.SYS compatibility. When we want to move at a specific column, we need to emit the sequence to move the cursor to the right (after we moved 999 positions to the left) only if we want to actually move right at least 1 position, since a count of zero will still move the cursor one position to the right.
antirez 471e7546 2014-09-03T09:51:29 Better specify the set of escapes used.
antirez 0a745fca 2014-09-03T09:30:32 Avoid CHA sequence for ANSI.SYS compatibility. Github user @welash proposed a change in issue #73 in order to improve the linenoise compatibility with older terminal emulators only able to deal with a subset of ANSI sequences, notably ANSI.SYS and VT100 terminals strictly able to handle the original set of VT100 escape sequences. In order to improve the compatibility, the CHA sequence was removed and translated to move 999 positions to the left, then move on the right for the desired number of positions. The CHA sequence was apparently added only with VT220, that's why it is not available everywhere. This commit features almost exactly the change proposed in issue #73 with a small fix for a bug in multi-line editing mode introduced by the patch.
antirez 828b9dac 2014-09-03T00:02:09 Remove trailing spaces from source code.
antirez c86280ed 2014-03-13T12:40:02 linenoiseHistoryAdd() reworked + duplicated lines prevented.
antirez 2a92a4d1 2014-03-13T12:27:53 Check read() return value in getCursorPosition().
antirez ca20f8c4 2014-03-13T12:25:14 Support for Home / End keys. Some terminal reports ESC [H and ESC [F, while some other reports ESC OH and ESC OF. We support both but there is at least another variant documented, hopefully no longer.
antirez 8447b2b0 2014-03-13T12:20:11 Fix right arrow handling. Bug introduced in recent refactoring.
antirez 9e1c2318 2014-03-13T12:04:36 If ioctl() fails get num of columns querying the terminal. This change makes linenoise both more robust if the ioctl() fails, and far more portable to non POSIX systems, since the ioclt() to query the terminal was probably one of the non trivial parts to replace. The code is inspired to Andreas Kupries commit 24186e99 on the win32 Linenoise port from Steve Bennett, but is a complete reimplementation.
antirez fb015dab 2014-03-13T11:08:37 linenoiseEdit() escapes processing refactor.
antirez 4115b616 2014-03-13T10:30:31 Compare human readable key codes with chars literals. Many sequences are actually human readable and fall into the printable ASCII subset, they are a lot more recognizable when written as chars compared to numbers. For example up arrow is sent back from the terimal as ESC [A, and so forth. This commit makes the code speak the same "language" that you find in any terminal escape sequences documentation.
antirez 3e521d47 2014-03-13T10:19:07 linenoisePrintKeyCodes(): show character if printable.
antirez f698ec47 2014-03-13T10:08:39 Rename Scan codes -> Key codes. What we print in debug mode using the option (now) called --keycodes are not the scan codes, but the key codes returned by the terminal (a more higher level representation of the keys pressed). This commit fixes the word used.
antirez cb0d0400 2014-03-12T23:49:54 Fix Del key processing + minor cleanup.
antirez bbcf9bf2 2014-03-12T23:38:40 Scan codes debugging functionality. ./linenoise_example --scancodes
antirez a05ab23d 2014-03-12T23:25:27 Use the two-reads fix for the additional escapes as well. See commit e153bd8 for more information. The gist is that slow terminals may return a short read of 1 byte.
antirez d5ec9cbb 2014-03-12T23:10:48 Arrow scancodes replaced with enums in linenoiseEdit().
Nick Gasson e153bd83 2014-01-06T11:04:02 Fix escape sequence processing when only one byte available The read call in the escape sequence processing does not handle the case where only the first byte is available. This can happen for example on a slow serial terminal. Comment by @antirez: I reworked the code for brevity, for historical reasons here is the proposed patch. I believe my fix should be functionally equivalent. Original fix: case 27: /* escape sequence */ /* Read the next two bytes representing the escape sequence. */ - if (read(fd,seq,2) == -1) break; + { + ssize_t b = read(fd, seq, 2); + + if (b < 0) break; + + if (b == 1) { + b = read(fd,&seq[1], 1); + if (b != 1) { + break; + } + } + } See PR #47.
Salvatore Sanfilippo 3cc30b1b 2014-03-12T16:23:24 Merge pull request #48 from nickg/emacs Add "emacs" to unsupported_term
Salvatore Sanfilippo 94cbdd65 2014-03-12T16:22:13 Merge pull request #49 from polch/master_fixes fix linenoiseEdit buflen decreasing.
Salvatore Sanfilippo ff91a64c 2014-03-12T16:19:51 Merge pull request #51 from MartinNowak/const use const char * when modification isn't necessary
antirez 01cd117f 2014-03-12T16:18:18 Don't assume STDIN_FD and STDOUT_FD are interchangeable.
Shengwen1997 49635f1c 2014-01-16T22:26:24 Add the key enumeration
antirez 8ea25f8d 2014-03-12T15:38:37 Debugging code cleanup.
antirez f3a4e062 2014-03-12T13:12:29 Merge branch 'master' of git://github.com/antirez/linenoise
antirez cbf172f7 2014-03-12T13:10:44 Handle malloc error in linenoiseAddCompletion(). We just don't add the entry on out of memory to avoid to break the API with previous versions of Linenoise.
antirez aed9d1af 2014-03-12T13:04:22 Refresh line with single write to avoid flickering. Escape sequences and actual content to write to the terminal is now accumulated into an heap allocated buffer that is flushed with a single write at the end. This avoids a flickering effect making linenoise more professional looking ;-)
Insop Song 5f5cc2ea 2014-02-21T01:21:13 fix incorrect type caused issue on 64bit powerpc Signed-off-by: Insop Song <insop.song@gainspeed.com>
Martin Nowak 9031c808 2014-01-28T00:53:26 use const char * when modification isn't necessary
Paul Chavent 3258af5a 2014-01-15T22:52:18 fix linenoiseEdit buflen decreasing.
Nick Gasson 4642c1ae 2014-01-06T11:19:36 Add "emacs" to unsupported_term The Emacs terminal emulator has its own line editing and does not behave correctly in raw mode. Without this programs using linenoise will hang when run inside an Emacs shell.
Salvatore Sanfilippo 27a3b4d5 2013-02-08T03:33:05 Merge pull request #31 from fperrad/buildroot fix getColumns() for Buildroot
antirez 64e109e2 2013-02-08T12:18:42 linenoiseHistorySetMaxLen() was broken and never tested. Fixed.
antirez 892ec0fe 2013-02-08T00:12:01 Completion fixed (broken during refactoring).
antirez 09ddc709 2013-02-07T17:30:49 Fix to multi-line mode when deleting cross-line with cursor at EOL.
antirez 16d398e6 2013-02-07T16:06:16 Experimental multi-line editing capabilities.
antirez 381bdee2 2013-02-06T12:49:06 Update year in copyright notice.
antirez 0f3b8134 2013-02-06T12:41:15 Escapes dispatching better documented.
antirez 21447864 2013-02-06T12:38:36 Ctrl-w refactored into linenoiseEditDeletePrevWord().
antirez 57b3f761 2013-02-06T12:32:42 Clarified with ctrl-t does in comments.
antirez 4d166e4f 2013-02-06T12:28:29 Backspace functionality refactored into linenoiseEditBackspace() function.
antirez 9e15fd42 2013-02-06T12:20:01 Delete and ctrl-d refactored into linenoiseEditDelete()
antirez 62a30cac 2013-02-06T12:08:19 Off-by-one overflow fixed. Was a silent bug before refactoring.
antirez 07fb96da 2013-02-05T23:01:32 Refactoring WIP #1: split in functions.
antirez 93340526 2013-02-05T19:51:03 Refactoring: code split into sections. Chars insertion as a function.
antirez b7a76cd8 2013-02-05T19:34:10 linenosePrompt() -> linenoiseEdit().
antirez 96fd7d41 2013-02-05T19:25:08 All functions commented.
antirez 5e5b0cf5 2013-02-05T18:49:19 Refactoring: editing state is now a structure.
Francois Perrad fac5a1cb 2012-10-03T09:33:04 fix getColumns() for Buildroot same behaviour in ncurses (drv_size() in tinfo/tinfo_driver.c)
Sergey Glushchenko 98ca0397 2011-06-30T22:03:46 Add ctrl-w: delete previous word
antirez 02d79351 2011-03-30T17:08:20 switched to two-clause simplified BSD license
antirez 6cdc7758 2011-02-22T17:38:49 Support for ctrl-d deleting the char at right of the cursor added
antirez 03e8e4da 2010-12-10T19:21:28 suppress a warning on Linux adding some truly stupid code
antirez 7f669091 2010-12-01T11:11:55 Ctrl-l support to clear the screen. New sequences added documented.
antirez f4508efb 2010-11-30T11:34:06 Pieter Noordhuis copyright notice added, since this was a major contribution. README updated.
Pieter Noordhuis 778de19a 2010-11-29T20:35:20 Show original buffer when completion is aborted
Pieter Noordhuis 493a5501 2010-11-29T18:52:55 Minimal framework for autocompletion
antirez 7534b883 2010-09-24T17:05:18 support for delete key, thanks to jgriffiths (on github)
antirez ce845468 2010-07-07T18:26:23 Support API to save/load history on file
antirez 28884b52 2010-07-07T18:05:11 Fixed another mem leak
antirez 42ba034e 2010-07-07T13:28:26 enabled debugging symbols in Make, used NULL instead of 0 introduced for a typo
antirez 6a0775fd 2010-07-07T13:19:29 Fixed one memleak, investigating the next one
antirez aca8b8d3 2010-04-30T09:19:04 Revert to fgets if stdin is not a tty
antirez 6770cf56 2010-03-24T22:13:51 eterm removed from the blacklist
antirez 1e32ee64 2010-03-24T09:59:34 support for blacklist terminals, reverting to fgets.
antirez 9a986552 2010-03-23T13:49:32 now the API to add an history entry has a const argument
antirez 9c21ea23 2010-03-22T19:54:24 ctrl-t implemented
antirez c56aa8d1 2010-03-22T19:49:56 supported more emacs bindings, don't wrap history forever but blocks on first and last item
antirez 2c54c88c 2010-03-22T17:24:28 API converted to be readline alike. Ctrl-d behavior fixed.
antirez 17a7d33e 2010-03-22T02:55:22 minor doc update
antirez 1ef01419 2010-03-22T02:30:34 Ctrl-h problem fixed
antirez acdf9c7d 2010-03-22T01:25:21 More internals documentation
antirez 353828e0 2010-03-22T01:09:25 references comments updated with more links to escape sequences documentation
antirez e5dee800 2010-03-21T22:27:09 Fix for an history bug
antirez 7f4de381 2010-03-21T11:10:54 Ctrl+a and Ctrl+e support
antirez 4b9fe358 2010-03-21T11:06:56 Support for Ctrl+u added
antirez 62be1667 2010-03-21T11:03:33 Ctrl+K support
antirez 6de19082 2010-03-21T00:01:52 first commit