summaryrefslogtreecommitdiffstats
path: root/src/buffer.rs
Commit message (Collapse)AuthorAgeFilesLines
* Add autocompleteRory Dudley2024-09-131-16/+161
| | | | | | | This patch adds a fairly rudimentary form of autocomplete. For starters, it only works for filepaths, not for programs. Additionally, it currently only works for the present working directory. You cannot yet autocomplete even one more level deep.
* Slight refactor of getchar() and more handling for getline()Rory Dudley2024-09-011-30/+118
| | | | | | | | | | | | | | | | The getchar() function was changed so that it is able to detect some ANSI escape sequences. To better handle this, getchar() now returns a value from the Key enum, indicating whether or not an escape sequence was found. Currently, the only escape sequences the function deals with are arrow keys. Handling of the left and right arrow keys were added to the getline() function, in order to allow a user to go back and edit their command inplace. Up and down arrow keys are also handled, but they are just ignored for now (i.e. they do not move the cursor around anymore). The local 'pos' variable became an Arc<Mutex<usize>>, since it needs to be reset to 0 if ctrl-c is pressed (the handler for which is outside the scope of getline()).
* Keep track of position in getline()Rory Dudley2024-08-281-0/+10
| | | | | Keep track of the cursor position in getline(), this way it is not possible to backspace the prompt.
* Replace io::stdin().read_line() with custom functionRory Dudley2024-08-241-0/+59
Added the termios crate to facilitate the changing of certain terminal options. It is a wrapper around the termios C library, so 'man 3 termios' for more details. Added the custom getchar() function, with retrieves characters from STDIN as they are typed by the user (as opposed to waiting for a newline, like io::stdin().read_line()). This is necessary, since keys like <tab> and <up> have special functionality, which needs to be acted on before command submission. Added the custom getline() function, which uses getchar() to read characters as they are typed. The getline() function contains the logic for the various key presses. For most characters, we simply push the byte to a buffer, and print it out to the screen (since getline() assumes ECHO is off). Notes: For now, <tab> autocomplete is not finished, so hitting the tab key only replaces the tabs with spaces in the inbut buffer. Also, some edge cases are unhandled in getline(). For instance, using the arrow keys appears to move the cursor keys. The parser gets upset when you move the cursor then try to submit a command, so this needs to be fixed.