commit 6a3cea54fe45e787a7823735d1d72bec979f94fe Author: anon Date: Sat Feb 10 18:25:51 2024 +0100 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..567609b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..db807fb --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,32 @@ +cmake_minimum_required (VERSION 3.11) + +# --- Fetch FTXUI -------------------------------------------------------------- +include(FetchContent) + +set(FETCHCONTENT_UPDATES_DISCONNECTED TRUE) +FetchContent_Declare(ftxui + GIT_REPOSITORY https://github.com/ArthurSonzogni/ftxui + # Important: Specify a GIT_TAG XXXXX here. +) + +FetchContent_GetProperties(ftxui) +if(NOT ftxui_POPULATED) + FetchContent_Populate(ftxui) + add_subdirectory(${ftxui_SOURCE_DIR} ${ftxui_BINARY_DIR} EXCLUDE_FROM_ALL) +endif() + +# ------------------------------------------------------------------------------ + +project(ftxui-starter + LANGUAGES CXX + VERSION 1.0.0 +) + +add_executable(ftxui-starter src/main.cpp) +target_include_directories(ftxui-starter PRIVATE src) + +target_link_libraries(ftxui-starter + PRIVATE ftxui::screen + PRIVATE ftxui::dom + PRIVATE ftxui::component # Not needed for this example. +) diff --git a/documentation/atuin.png b/documentation/atuin.png new file mode 100644 index 0000000..1b1749f Binary files /dev/null and b/documentation/atuin.png differ diff --git a/documentation/specification.md b/documentation/specification.md new file mode 100644 index 0000000..aadfd51 --- /dev/null +++ b/documentation/specification.md @@ -0,0 +1,164 @@ +# Used technologies ++ C style C++ with pottential future "back" porting ++ flex history parsers ++ SQLite ++ ncurses ++ readline + +# Rationale +### C/C++ ++ fuck pust +### NCurses ++ i know nothing better that is: +- portable +- reliable +- C compatible +- anyway better than ncurses +### SQLite ++ sharing history between shell types could be desirable, this is the simplest approach ++ having our own storage means that we could support meta informations globally +which are not standard for every application +### Flex ++ its *actually* reusable +### Readline ++ we are not trying to replace it in anyways; it only makes sense + +# CLI +histui \ ++ \ \:\ [format] ++ \ \ [format] ++ \ \ [options] ++ \ \ + +## Import +Read history entries from \ into +histuidb \. + +Unless all lines are pure entry values, +a format will have to be specified. + +If no files are specified, +precomposed formats shall be printed. +E.g. format for "Bash with timestamps". + +## Export +Dump the contents of histuidb \ +to stdout using [format] + +## Init +Used for printing reasonable default configuration +for using histui with the selected shell. + +If no shell is specified, +the available options shall be printed. + +# TUI + +$ histui tui [options] +--command : start in search mode +--normal : start in normal mode + ++---+---------------+ +| p | | +| o | listing | +| s | | ++---+---------------+ +| ruler | ++-------------------+ +| input | ++-------------------+ + +### Modes ++ the reason why we have modes is to make both +inspecting and selection entries, +and searching/filtering entries piss easy + +##### Normal mode +The user may move up and down freely on the list +with any prefered binding (Vimlike by default), +or repeat a motion by specifying a repeat count +before any motion. + +**\[repeat\]\** + +move around + + +**:** + +Jump to Nth entry. + +#### Result stack +Everytime the user issues a search, +or inspects an item +the result stack is pushed. + +The top search frame can/will be +overwritten. + +The user may pop or clear by hand. + +The result stack is NOT persistent between sessions. + +#### Command mode +Every character entered narrows the list of results. +The user may use altered {ctrl+n} or special {arrow} keys +to navigate the results, +but may be unable to issue repeats or jumps. + +#### Global input +Do note that these actions may have +different bindings in different modes. + +**** + +Select an entry to load the context for. +Without filtering this is effectless, +however if the output was filtered, +the search results are overwritten +by the commands that were executed +in the same shell as this one. + +**** + +Clear any filtering or inspection. + +**** + +Pop result frame. + +**