Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/plugins/asciiart.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,11 @@ impl Default for AsciiArtPlugin {

impl Plugin for AsciiArtPlugin {
fn search(&self, query: &str) -> Vec<Action> {
if let Some(text) = query.strip_prefix("ascii ") {
let text = text.trim();
const PREFIX: &str = "ascii ";
if query.len() >= PREFIX.len()
&& query[..PREFIX.len()].eq_ignore_ascii_case(PREFIX)
{
let text = query[PREFIX.len()..].trim();
if !text.is_empty() {
if let Some(fig) = self.font.convert(text) {
let art = fig.to_string();
Expand Down
24 changes: 18 additions & 6 deletions src/plugins/bookmarks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,11 @@ impl Plugin for BookmarksPlugin {
}];
}

if let Some(url) = trimmed.strip_prefix("bm add ") {
let url = url.trim();
const ADD_PREFIX: &str = "bm add ";
if trimmed.len() >= ADD_PREFIX.len()
&& trimmed[..ADD_PREFIX.len()].eq_ignore_ascii_case(ADD_PREFIX)
{
let url = trimmed[ADD_PREFIX.len()..].trim();
if !url.is_empty() {
let norm = normalize_url(url);
return vec![Action {
Expand All @@ -190,7 +193,11 @@ impl Plugin for BookmarksPlugin {
}];
}
}
if let Some(rest) = trimmed.strip_prefix("bm rm") {
const RM_PREFIX: &str = "bm rm";
if trimmed.len() >= RM_PREFIX.len()
&& trimmed[..RM_PREFIX.len()].eq_ignore_ascii_case(RM_PREFIX)
{
let rest = &trimmed[RM_PREFIX.len()..];
let filter = rest.trim();
let bookmarks = self.data.lock().unwrap().clone();
return bookmarks
Expand All @@ -210,7 +217,11 @@ impl Plugin for BookmarksPlugin {
})
.collect();
}
if let Some(rest) = trimmed.strip_prefix("bm list") {
const LIST_PREFIX: &str = "bm list";
if trimmed.len() >= LIST_PREFIX.len()
&& trimmed[..LIST_PREFIX.len()].eq_ignore_ascii_case(LIST_PREFIX)
{
let rest = &trimmed[LIST_PREFIX.len()..];
let filter = rest.trim();
let bookmarks = self.data.lock().unwrap().clone();
return bookmarks
Expand All @@ -233,10 +244,11 @@ impl Plugin for BookmarksPlugin {
})
.collect();
}
if !trimmed.starts_with("bm") {
const PREFIX: &str = "bm";
if trimmed.len() < PREFIX.len() || !trimmed[..PREFIX.len()].eq_ignore_ascii_case(PREFIX) {
return Vec::new();
}
let filter = trimmed.strip_prefix("bm").unwrap_or("").trim();
let filter = trimmed[PREFIX.len()..].trim();
let bookmarks = self.data.lock().unwrap().clone();
bookmarks
.into_iter()
Expand Down
11 changes: 6 additions & 5 deletions src/plugins/clipboard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,12 +122,13 @@ impl Default for ClipboardPlugin {

impl Plugin for ClipboardPlugin {
fn search(&self, query: &str) -> Vec<Action> {
if !query.starts_with("cb") {
const PREFIX: &str = "cb";
if query.len() < PREFIX.len() || !query[..PREFIX.len()].eq_ignore_ascii_case(PREFIX) {
return Vec::new();
}

let trimmed = query.trim();
if trimmed == "cb" {
if trimmed.eq_ignore_ascii_case("cb") {
return vec![Action {
label: "cb: edit clipboard".into(),
desc: "Clipboard".into(),
Expand All @@ -136,7 +137,7 @@ impl Plugin for ClipboardPlugin {
}];
}

if trimmed == "cb clear" {
if trimmed.eq_ignore_ascii_case("cb clear") {
return vec![Action {
label: "Clear clipboard history".into(),
desc: "Clipboard".into(),
Expand All @@ -145,7 +146,7 @@ impl Plugin for ClipboardPlugin {
}];
}

if trimmed == "cb list" {
if trimmed.eq_ignore_ascii_case("cb list") {
let history = self.update_history();
return history
.iter()
Expand All @@ -159,7 +160,7 @@ impl Plugin for ClipboardPlugin {
.collect();
}

let filter = query.strip_prefix("cb").unwrap_or("").trim();
let filter = trimmed[PREFIX.len()..].trim();
let history = self.update_history();
history
.iter()
Expand Down
7 changes: 5 additions & 2 deletions src/plugins/dropcalc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,11 @@ fn parse_prob(input: &str) -> Option<f64> {
impl Plugin for DropCalcPlugin {
fn search(&self, query: &str) -> Vec<Action> {
let trimmed = query.trim();
let rest = if let Some(r) = trimmed.strip_prefix("drop ") {
r.trim()
const PREFIX: &str = "drop ";
let rest = if trimmed.len() >= PREFIX.len()
&& trimmed[..PREFIX.len()].eq_ignore_ascii_case(PREFIX)
{
trimmed[PREFIX.len()..].trim()
} else {
return Vec::new();
};
Expand Down
19 changes: 13 additions & 6 deletions src/plugins/folders.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,11 @@ impl Default for FoldersPlugin {

impl Plugin for FoldersPlugin {
fn search(&self, query: &str) -> Vec<Action> {
if let Some(path) = query.strip_prefix("f add ") {
let path = path.trim();
const ADD_PREFIX: &str = "f add ";
if query.len() >= ADD_PREFIX.len()
&& query[..ADD_PREFIX.len()].eq_ignore_ascii_case(ADD_PREFIX)
{
let path = query[ADD_PREFIX.len()..].trim();
if !path.is_empty() {
return vec![Action {
label: format!("Add folder {path}"),
Expand All @@ -185,8 +188,11 @@ impl Plugin for FoldersPlugin {
}
}

if let Some(pattern) = query.strip_prefix("f rm ") {
let filter = pattern.trim();
const RM_PREFIX: &str = "f rm ";
if query.len() >= RM_PREFIX.len()
&& query[..RM_PREFIX.len()].eq_ignore_ascii_case(RM_PREFIX)
{
let filter = query[RM_PREFIX.len()..].trim();
let folders = self.data.lock().unwrap().clone();
return folders
.into_iter()
Expand All @@ -207,10 +213,11 @@ impl Plugin for FoldersPlugin {
.collect();
}

if !query.starts_with("f") {
const PREFIX: &str = "f";
if query.len() < PREFIX.len() || !query[..PREFIX.len()].eq_ignore_ascii_case(PREFIX) {
return Vec::new();
}
let filter = query.strip_prefix("f").unwrap_or("").trim();
let filter = query[PREFIX.len()..].trim();
let folders = self.data.lock().unwrap().clone();
folders
.into_iter()
Expand Down
7 changes: 6 additions & 1 deletion src/plugins/help.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@ pub struct HelpPlugin;
impl Plugin for HelpPlugin {
fn search(&self, query: &str) -> Vec<Action> {
let q = query.trim();
if q == "help" || q.starts_with("help ") {
const PREFIX: &str = "help";
const PREFIX_SPACE: &str = "help ";
if q.eq_ignore_ascii_case(PREFIX)
|| (q.len() >= PREFIX_SPACE.len()
&& q[..PREFIX_SPACE.len()].eq_ignore_ascii_case(PREFIX_SPACE))
{
return vec![Action {
label: "Show command list".into(),
desc: "Display available command prefixes".into(),
Expand Down
7 changes: 4 additions & 3 deletions src/plugins/history.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,19 @@ pub struct HistoryPlugin;

impl Plugin for HistoryPlugin {
fn search(&self, query: &str) -> Vec<Action> {
if !query.starts_with("hi") {
const PREFIX: &str = "hi";
if query.len() < PREFIX.len() || !query[..PREFIX.len()].eq_ignore_ascii_case(PREFIX) {
return Vec::new();
}
if query.trim() == "hi clear" {
if query.trim().eq_ignore_ascii_case("hi clear") {
return vec![Action {
label: "Clear history".into(),
desc: "History".into(),
action: "history:clear".into(),
args: None,
}];
}
let filter = query.strip_prefix("hi").unwrap_or("").trim();
let filter = query[PREFIX.len()..].trim();
get_history()
.into_iter()
.enumerate()
Expand Down
23 changes: 16 additions & 7 deletions src/plugins/notes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,11 @@ impl Default for NotesPlugin {

impl Plugin for NotesPlugin {
fn search(&self, query: &str) -> Vec<Action> {
if let Some(text) = query.strip_prefix("note add ") {
let text = text.trim();
const ADD_PREFIX: &str = "note add ";
if query.len() >= ADD_PREFIX.len()
&& query[..ADD_PREFIX.len()].eq_ignore_ascii_case(ADD_PREFIX)
{
let text = query[ADD_PREFIX.len()..].trim();
if !text.is_empty() {
return vec![Action {
label: format!("Add note {text}"),
Expand All @@ -130,8 +133,11 @@ impl Plugin for NotesPlugin {
}
}

if let Some(pattern) = query.strip_prefix("note rm ") {
let filter = pattern.trim();
const RM_PREFIX: &str = "note rm ";
if query.len() >= RM_PREFIX.len()
&& query[..RM_PREFIX.len()].eq_ignore_ascii_case(RM_PREFIX)
{
let filter = query[RM_PREFIX.len()..].trim();
let notes = self.data.lock().unwrap().clone();
return notes
.into_iter()
Expand All @@ -146,8 +152,11 @@ impl Plugin for NotesPlugin {
.collect();
}

if let Some(rest) = query.strip_prefix("note list") {
let filter = rest.trim();
const LIST_PREFIX: &str = "note list";
if query.len() >= LIST_PREFIX.len()
&& query[..LIST_PREFIX.len()].eq_ignore_ascii_case(LIST_PREFIX)
{
let filter = query[LIST_PREFIX.len()..].trim();
let notes = self.data.lock().unwrap().clone();
return notes
.into_iter()
Expand All @@ -162,7 +171,7 @@ impl Plugin for NotesPlugin {
.collect();
}

if query.trim() == "note" {
if query.trim().eq_ignore_ascii_case("note") {
return vec![Action {
label: "note: edit notes".into(),
desc: "Note".into(),
Expand Down
5 changes: 3 additions & 2 deletions src/plugins/processes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@ pub struct ProcessesPlugin;

impl Plugin for ProcessesPlugin {
fn search(&self, query: &str) -> Vec<Action> {
if !query.starts_with("ps") {
const PREFIX: &str = "ps";
if query.len() < PREFIX.len() || !query[..PREFIX.len()].eq_ignore_ascii_case(PREFIX) {
return Vec::new();
}
let filter = query.strip_prefix("ps").unwrap_or("").trim().to_lowercase();
let filter = query[PREFIX.len()..].trim().to_lowercase();
let system = System::new_all();
system
.processes()
Expand Down
4 changes: 3 additions & 1 deletion src/plugins/recycle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ pub struct RecyclePlugin;
impl Plugin for RecyclePlugin {
#[cfg(target_os = "windows")]
fn search(&self, query: &str) -> Vec<Action> {
if query.trim_start().starts_with("rec") {
const PREFIX: &str = "rec";
let trimmed = query.trim_start();
if trimmed.len() >= PREFIX.len() && trimmed[..PREFIX.len()].eq_ignore_ascii_case(PREFIX) {
return vec![Action {
label: "Clean Recycle Bin".into(),
desc: "Recycle Bin".into(),
Expand Down
7 changes: 5 additions & 2 deletions src/plugins/reddit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@ pub struct RedditPlugin;

impl Plugin for RedditPlugin {
fn search(&self, query: &str) -> Vec<Action> {
if let Some(q) = query.strip_prefix("red ") {
let q = q.trim();
const PREFIX: &str = "red ";
if query.len() >= PREFIX.len()
&& query[..PREFIX.len()].eq_ignore_ascii_case(PREFIX)
{
let q = query[PREFIX.len()..].trim();
if !q.is_empty() {
return vec![Action {
label: format!("Search Reddit for {q}"),
Expand Down
14 changes: 10 additions & 4 deletions src/plugins/runescape.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@ pub struct RunescapeSearchPlugin;

impl Plugin for RunescapeSearchPlugin {
fn search(&self, query: &str) -> Vec<Action> {
if let Some(q) = query.strip_prefix("rs ") {
let q = q.trim();
const RS_PREFIX: &str = "rs ";
if query.len() >= RS_PREFIX.len()
&& query[..RS_PREFIX.len()].eq_ignore_ascii_case(RS_PREFIX)
{
let q = query[RS_PREFIX.len()..].trim();
if !q.is_empty() {
return vec![Action {
label: format!("Search RuneScape Wiki for {q}"),
Expand All @@ -16,8 +19,11 @@ impl Plugin for RunescapeSearchPlugin {
}];
}
}
if let Some(q) = query.strip_prefix("osrs ") {
let q = q.trim();
const OSRS_PREFIX: &str = "osrs ";
if query.len() >= OSRS_PREFIX.len()
&& query[..OSRS_PREFIX.len()].eq_ignore_ascii_case(OSRS_PREFIX)
{
let q = query[OSRS_PREFIX.len()..].trim();
if !q.is_empty() {
return vec![Action {
label: format!("Search Old School RuneScape Wiki for {q}"),
Expand Down
24 changes: 20 additions & 4 deletions src/plugins/shell.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,11 @@ impl Plugin for ShellPlugin {
}];
}

if let Some(rest) = trimmed.strip_prefix("sh add ") {
const ADD_PREFIX: &str = "sh add ";
if trimmed.len() >= ADD_PREFIX.len()
&& trimmed[..ADD_PREFIX.len()].eq_ignore_ascii_case(ADD_PREFIX)
{
let rest = &trimmed[ADD_PREFIX.len()..];
let mut parts = rest.trim().splitn(2, ' ');
let name = parts.next().unwrap_or("").trim();
let args = parts.next().unwrap_or("").trim();
Expand All @@ -80,7 +84,11 @@ impl Plugin for ShellPlugin {
}
}

if let Some(rest) = trimmed.strip_prefix("sh rm") {
const RM_PREFIX: &str = "sh rm";
if trimmed.len() >= RM_PREFIX.len()
&& trimmed[..RM_PREFIX.len()].eq_ignore_ascii_case(RM_PREFIX)
{
let rest = &trimmed[RM_PREFIX.len()..];
let filter = rest.trim();
if let Ok(list) = load_shell_cmds(SHELL_CMDS_FILE) {
let matcher = SkimMatcherV2::default();
Expand All @@ -101,7 +109,11 @@ impl Plugin for ShellPlugin {
}
}

if let Some(rest) = trimmed.strip_prefix("sh list") {
const LIST_PREFIX: &str = "sh list";
if trimmed.len() >= LIST_PREFIX.len()
&& trimmed[..LIST_PREFIX.len()].eq_ignore_ascii_case(LIST_PREFIX)
{
let rest = &trimmed[LIST_PREFIX.len()..];
let filter = rest.trim();
if let Ok(list) = load_shell_cmds(SHELL_CMDS_FILE) {
let matcher = SkimMatcherV2::default();
Expand All @@ -121,7 +133,11 @@ impl Plugin for ShellPlugin {
}
}

if let Some(cmd) = trimmed.strip_prefix("sh ") {
const CMD_PREFIX: &str = "sh ";
if trimmed.len() >= CMD_PREFIX.len()
&& trimmed[..CMD_PREFIX.len()].eq_ignore_ascii_case(CMD_PREFIX)
{
let cmd = &trimmed[CMD_PREFIX.len()..];
let arg = cmd.trim();
if arg.is_empty() {
return Vec::new();
Expand Down
5 changes: 3 additions & 2 deletions src/plugins/system.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ pub struct SystemPlugin;

impl Plugin for SystemPlugin {
fn search(&self, query: &str) -> Vec<Action> {
if !query.starts_with("sys") {
const PREFIX: &str = "sys";
if query.len() < PREFIX.len() || !query[..PREFIX.len()].eq_ignore_ascii_case(PREFIX) {
return Vec::new();
}
let filter = query.strip_prefix("sys").unwrap_or("").trim();
let filter = query[PREFIX.len()..].trim();
const OPTIONS: [&str; 4] = ["shutdown", "reboot", "lock", "logoff"];
OPTIONS
.iter()
Expand Down
Loading