diff --git a/Cargo.lock b/Cargo.lock index 1de6f2e..04910ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -766,7 +766,7 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "sllama" -version = "0.1.11" +version = "0.1.12" dependencies = [ "clap", "rustyline", diff --git a/Cargo.toml b/Cargo.toml index fd21aa9..fe01c82 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sllama" -version = "0.1.11" +version = "0.1.12" edition = "2024" [dependencies] diff --git a/changelog.md b/changelog.md index b701a70..e44e92e 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## 0.1.12 - 2025-06-14 + +_Add support for rustyline completion type (circular and list)_ + ## 0.1.11 - 2025-06-14 _Switch to Ollama API instead of run commands_ diff --git a/readme.md b/readme.md index 0551d8a..f0bc9c7 100644 --- a/readme.md +++ b/readme.md @@ -124,8 +124,11 @@ You can tell where you have previously responded by --- AI Response --- (added a """ [rustyline] -# Switch rustyline input mode between `Emacs` and `Vi`. +# Switch rustyline input mode between `emacs` and `vi`. mode = "emacs" + +# Switch completion type between `circular` and `list`. +completion_mode = "circular" ``` ### Configuring Ollama diff --git a/src/config.rs b/src/config.rs index 7d82e4e..d1318c6 100644 --- a/src/config.rs +++ b/src/config.rs @@ -35,10 +35,26 @@ impl Default for EditMode { } } +#[derive(Debug, Clone, Copy, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum CompletionType { + Circular, + List, +} + +impl Default for CompletionType { + fn default() -> Self { + CompletionType::Circular + } +} + #[derive(Debug, Deserialize, Default)] pub struct RustylineConfig { #[serde(default)] pub edit_mode: EditMode, + + #[serde(default)] + pub completion_type: CompletionType, } #[derive(Deserialize)] @@ -91,13 +107,22 @@ impl Config { } pub fn create_rustyline_config(&self) -> rustyline::Config { - let config = rustyline::Config::builder(); + let mut config_builder = rustyline::Config::builder(); // Apply edit mode setting - match self.rustyline.edit_mode { - EditMode::Emacs => config.edit_mode(rustyline::EditMode::Emacs).build(), - EditMode::Vi => config.edit_mode(rustyline::EditMode::Vi).build(), - } + config_builder = match self.rustyline.edit_mode { + EditMode::Emacs => config_builder.edit_mode(rustyline::EditMode::Emacs), + EditMode::Vi => config_builder.edit_mode(rustyline::EditMode::Vi), + }; + + config_builder = match self.rustyline.completion_type { + CompletionType::Circular => { + config_builder.completion_type(rustyline::CompletionType::Circular) + } + CompletionType::List => config_builder.completion_type(rustyline::CompletionType::List), + }; + + config_builder.build() } pub fn create_editor(&self) -> rustyline::Result> { @@ -164,5 +189,9 @@ mod tests { // Check rustyline default values matches!(config.rustyline.edit_mode, EditMode::Emacs); + matches!( + config.rustyline.completion_type, + crate::config::CompletionType::Circular + ); } }