added shell completions for push and bookmarks
This commit is contained in:
+21
-4
@@ -5,18 +5,35 @@ __call_navigate() {
|
|||||||
eval "$(navigate ${arg_pid} $@)"
|
eval "$(navigate ${arg_pid} $@)"
|
||||||
}
|
}
|
||||||
|
|
||||||
push() {
|
function push {
|
||||||
__call_navigate "push $@"
|
__call_navigate "push $@"
|
||||||
}
|
}
|
||||||
|
|
||||||
pop() {
|
function pop {
|
||||||
__call_navigate "pop $@"
|
__call_navigate "pop $@"
|
||||||
}
|
}
|
||||||
|
|
||||||
stack() {
|
function stack {
|
||||||
__call_navigate "stack $@"
|
__call_navigate "stack $@"
|
||||||
}
|
}
|
||||||
|
|
||||||
book() {
|
function book {
|
||||||
__call_navigate "bookmark $@"
|
__call_navigate "bookmark $@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# completion for `push`
|
||||||
|
function _push {
|
||||||
|
CURRENT_WORD=${COMP_WORDS[COMP_CWORD]}
|
||||||
|
DIRS="$(find . -maxdepth 1 -type d | grep -vx "." | grep -vx ".." | sed s^"./"^^)"
|
||||||
|
COMPREPLY=($(compgen -W "${DIRS}" -- $CURRENT_WORD))
|
||||||
|
}
|
||||||
|
|
||||||
|
# completion for `book`
|
||||||
|
function _book {
|
||||||
|
CURRENT_WORD=${COMP_WORDS[COMP_CWORD]}
|
||||||
|
BOOKMARKS="$(__call_navigate bookmark names)"
|
||||||
|
COMPREPLY=($(compgen -W "${BOOKMARKS}" -- $CURRENT_WORD))
|
||||||
|
}
|
||||||
|
|
||||||
|
complete -F _push push
|
||||||
|
complete -F _book book
|
||||||
|
|||||||
@@ -103,6 +103,9 @@ pub enum BookmarkAction {
|
|||||||
|
|
||||||
/// remove a bookmark by name `book remove <name>`
|
/// remove a bookmark by name `book remove <name>`
|
||||||
remove(BookmarkSubArgs),
|
remove(BookmarkSubArgs),
|
||||||
|
|
||||||
|
/// get bookmarknames for shell completions
|
||||||
|
names(EmptyArgs),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Args)]
|
#[derive(Debug, Clone, Args)]
|
||||||
|
|||||||
@@ -128,6 +128,12 @@ impl Bookmarks {
|
|||||||
Ok(buffer)
|
Ok(buffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// get bookmarknames as space separated values in one string (for shell completions)
|
||||||
|
pub fn get_bookmarknames(&self) -> String {
|
||||||
|
let mut names: Vec<String> = self.bookmarks.keys().cloned().collect();
|
||||||
|
names.join(" ")
|
||||||
|
}
|
||||||
|
|
||||||
/// writes the bookmarks file
|
/// writes the bookmarks file
|
||||||
fn write_bookmark_file(&self) -> Result<()> {
|
fn write_bookmark_file(&self) -> Result<()> {
|
||||||
let mut file_content = String::new();
|
let mut file_content = String::new();
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ fn handle_bookmark(args: &BookmarkArgs, config: &Config, bookmarks: &mut Bookmar
|
|||||||
BookmarkAction::list(_) => list_bookmarks(config, bookmarks, output)?,
|
BookmarkAction::list(_) => list_bookmarks(config, bookmarks, output)?,
|
||||||
BookmarkAction::add(args) => add_bookmarks(args, config, bookmarks, output)?,
|
BookmarkAction::add(args) => add_bookmarks(args, config, bookmarks, output)?,
|
||||||
BookmarkAction::remove(args) => remove_bookmarks(args, config, bookmarks, output)?,
|
BookmarkAction::remove(args) => remove_bookmarks(args, config, bookmarks, output)?,
|
||||||
|
BookmarkAction::names(_) => println!("echo '{}'", bookmarks.get_bookmarknames()),
|
||||||
};
|
};
|
||||||
} else if args.name.is_some() { // handle `change to bookmark`
|
} else if args.name.is_some() { // handle `change to bookmark`
|
||||||
let path = bookmarks.get_path_by_name(args.name.as_ref().unwrap())?;
|
let path = bookmarks.get_path_by_name(args.name.as_ref().unwrap())?;
|
||||||
|
|||||||
Reference in New Issue
Block a user