bookmarks and stack can now hold paths with links
This commit is contained in:
+6
-3
@@ -8,8 +8,8 @@ use std::path::PathBuf;
|
|||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use dirs::config_dir;
|
use dirs::config_dir;
|
||||||
|
|
||||||
use super::config::*;
|
use super::{config::*, util::to_rooted};
|
||||||
use config_parser::{apply_format, make_padding_string, RESET_ARG, RESET_SEQ};
|
use config_parser::{apply_format, make_padding_string, RESET_SEQ};
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct Bookmarks {
|
pub struct Bookmarks {
|
||||||
@@ -44,10 +44,11 @@ impl Bookmarks {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let key: String = String::from(tokens[0]);
|
let key: String = String::from(tokens[0]);
|
||||||
let path = match PathBuf::from_str(tokens[1]) {
|
let mut path: PathBuf = match PathBuf::from_str(tokens[1]) {
|
||||||
Ok(value) => value,
|
Ok(value) => value,
|
||||||
Err(err) => return Err(Error::other(err.to_string())),
|
Err(err) => return Err(Error::other(err.to_string())),
|
||||||
};
|
};
|
||||||
|
to_rooted(&mut path)?;
|
||||||
if !path.is_dir() {
|
if !path.is_dir() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -69,6 +70,8 @@ impl Bookmarks {
|
|||||||
|
|
||||||
/// adds a key/value pair to bookmarks and writes the bookmarks file
|
/// adds a key/value pair to bookmarks and writes the bookmarks file
|
||||||
pub fn add_bookmark(&mut self, name: &String, path: &PathBuf) -> Result<()> {
|
pub fn add_bookmark(&mut self, name: &String, path: &PathBuf) -> Result<()> {
|
||||||
|
let mut path = path.to_path_buf();
|
||||||
|
to_rooted(&mut path)?;
|
||||||
if !path.is_dir() {
|
if !path.is_dir() {
|
||||||
return Err(Error::other(
|
return Err(Error::other(
|
||||||
"-- provided path argument does not point to a valid directory",
|
"-- provided path argument does not point to a valid directory",
|
||||||
|
|||||||
+18
-14
@@ -27,9 +27,11 @@ pub struct GeneralSettings {
|
|||||||
|
|
||||||
#[derive(Debug, Clone, Default, ConfigParser)]
|
#[derive(Debug, Clone, Default, ConfigParser)]
|
||||||
pub struct FormatSettings {
|
pub struct FormatSettings {
|
||||||
pub stack_separator: String,
|
|
||||||
pub bookmarks_separator: String,
|
|
||||||
pub align_separators: bool,
|
pub align_separators: bool,
|
||||||
|
pub stack_separator: String,
|
||||||
|
pub stack_home_as_tilde: bool,
|
||||||
|
pub bookmarks_separator: String,
|
||||||
|
pub book_home_as_tilde: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Default, ConfigParser)]
|
#[derive(Debug, Clone, Default, ConfigParser)]
|
||||||
@@ -68,21 +70,23 @@ impl Config {
|
|||||||
show_books_on_bookmark: false,
|
show_books_on_bookmark: false,
|
||||||
},
|
},
|
||||||
format: FormatSettings {
|
format: FormatSettings {
|
||||||
bookmarks_separator: String::new(),
|
|
||||||
stack_separator: String::new(),
|
|
||||||
align_separators: false,
|
align_separators: false,
|
||||||
|
stack_separator: " - ".to_owned(),
|
||||||
|
stack_home_as_tilde: true,
|
||||||
|
bookmarks_separator: " - ".to_owned(),
|
||||||
|
book_home_as_tilde: true,
|
||||||
},
|
},
|
||||||
styles: StyleSettings {
|
styles: StyleSettings {
|
||||||
warning_style: String::new(),
|
warning_style: "default".to_owned(),
|
||||||
error_style: String::new(),
|
error_style: "default".to_owned(),
|
||||||
stack_number_style: String::new(),
|
stack_number_style: "default".to_owned(),
|
||||||
stack_separator_style: String::new(),
|
stack_separator_style: "default".to_owned(),
|
||||||
stack_path_style: String::new(),
|
stack_path_style: "default".to_owned(),
|
||||||
stack_punct_style: String::new(),
|
stack_punct_style: "default".to_owned(),
|
||||||
bookmarks_name_style: String::new(),
|
bookmarks_name_style: "default".to_owned(),
|
||||||
bookmarks_seperator_style: String::new(),
|
bookmarks_seperator_style: "default".to_owned(),
|
||||||
bookmarks_path_style: String::new(),
|
bookmarks_path_style: "default".to_owned(),
|
||||||
bookmarks_punct_style: String::new(),
|
bookmarks_punct_style: "default".to_owned(),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
// get configuration directory
|
// get configuration directory
|
||||||
|
|||||||
+2
-6
@@ -153,14 +153,10 @@ fn list_bookmarks(config: &Config, bookmarks: &mut Bookmarks, output: &mut Outpu
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn add_bookmarks(args: &BookmarkSubArgs, config: &Config, bookmarks: &mut Bookmarks, output: &mut Output) -> Result<()> {
|
fn add_bookmarks(args: &BookmarkSubArgs, config: &Config, bookmarks: &mut Bookmarks, output: &mut Output) -> Result<()> {
|
||||||
let mut path = match args.path.clone() {
|
let path = match args.path.clone() {
|
||||||
Some(value) => value,
|
Some(value) => value,
|
||||||
None => return Err(Error::other("-- missing path argument")),
|
None => return Err(Error::other("-- missing path argument")),
|
||||||
};
|
};
|
||||||
path = match path.canonicalize() {
|
|
||||||
Ok(value) => value,
|
|
||||||
Err(error) => return Err(Error::other(error.to_string())),
|
|
||||||
};
|
|
||||||
bookmarks.add_bookmark(&args.name, &path)?;
|
bookmarks.add_bookmark(&args.name, &path)?;
|
||||||
|
|
||||||
if config.general.show_books_on_bookmark {
|
if config.general.show_books_on_bookmark {
|
||||||
@@ -188,7 +184,7 @@ fn push_path(path: &Path, stack: &mut Stack, config: &Config, output: &mut Outpu
|
|||||||
if !path.is_dir() {
|
if !path.is_dir() {
|
||||||
return Err(Error::other("-- invalid path argument"));
|
return Err(Error::other("-- invalid path argument"));
|
||||||
}
|
}
|
||||||
let current_path = current_dir()?;
|
let current_path: PathBuf = current_dir()?;
|
||||||
stack.push_entry(¤t_path)?;
|
stack.push_entry(¤t_path)?;
|
||||||
if config.general.show_stack_on_push {
|
if config.general.show_stack_on_push {
|
||||||
output.push_info(&stack.to_formatted_string(&config)?);
|
output.push_info(&stack.to_formatted_string(&config)?);
|
||||||
|
|||||||
+10
-7
@@ -5,11 +5,11 @@ use std::fs::File;
|
|||||||
use std::io::{Error, Result};
|
use std::io::{Error, Result};
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use config_parser::{RESET_SEQ, STYLES};
|
use config_parser::RESET_SEQ;
|
||||||
use sysinfo::{Pid, System};
|
use sysinfo::{Pid, System};
|
||||||
|
|
||||||
use crate::make_padding_string;
|
use crate::make_padding_string;
|
||||||
use super::{apply_format, config::*};
|
use super::{apply_format, config::*, util::to_rooted};
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct Stack {
|
pub struct Stack {
|
||||||
@@ -19,6 +19,8 @@ pub struct Stack {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Stack {
|
impl Stack {
|
||||||
|
const STACK_FILE_DIRECTORY: &str = "/tmp/navigate/";
|
||||||
|
|
||||||
pub fn new(process_id: u32) -> Result<Self> {
|
pub fn new(process_id: u32) -> Result<Self> {
|
||||||
let mut stack: Stack = Stack {
|
let mut stack: Stack = Stack {
|
||||||
pid: process_id,
|
pid: process_id,
|
||||||
@@ -67,10 +69,11 @@ impl Stack {
|
|||||||
/// push entry to stack
|
/// push entry to stack
|
||||||
/// returns updated stack
|
/// returns updated stack
|
||||||
pub fn push_entry(&mut self, path: &Path) -> Result<&Vec<PathBuf>> {
|
pub fn push_entry(&mut self, path: &Path) -> Result<&Vec<PathBuf>> {
|
||||||
let abs_path = path.canonicalize()?;
|
let mut path: PathBuf = path.to_path_buf();
|
||||||
//let abs_path = super::util::to_lexical_absolute(path.to_path_buf())?; TODO: fix paths and
|
to_rooted(&mut path)?;
|
||||||
//stuff
|
|
||||||
self.stack.push(abs_path);
|
// append path to stack and write stack file to save changes
|
||||||
|
self.stack.push(path);
|
||||||
self.write_stack_file()?;
|
self.write_stack_file()?;
|
||||||
Ok(&self.stack)
|
Ok(&self.stack)
|
||||||
}
|
}
|
||||||
@@ -110,7 +113,7 @@ impl Stack {
|
|||||||
|
|
||||||
/// clean up dead stack files, parse and build stack
|
/// clean up dead stack files, parse and build stack
|
||||||
fn build_stack(&mut self) -> Result<()> {
|
fn build_stack(&mut self) -> Result<()> {
|
||||||
let stack_dir: PathBuf = match PathBuf::from_str("/tmp/navigation/") {
|
let stack_dir: PathBuf = match PathBuf::from_str(Self::STACK_FILE_DIRECTORY) {
|
||||||
Ok(value) => value,
|
Ok(value) => value,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
return Err(Error::other(
|
return Err(Error::other(
|
||||||
|
|||||||
+5
-2
@@ -3,7 +3,8 @@ use std::{
|
|||||||
path::{Component, PathBuf},
|
path::{Component, PathBuf},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn to_lexical_absolute(path: PathBuf) -> Result<PathBuf> {
|
/// returns absolute path but keeps links
|
||||||
|
pub fn to_rooted(path: &mut PathBuf) -> Result<()> {
|
||||||
let mut absolute = if path.is_absolute() {
|
let mut absolute = if path.is_absolute() {
|
||||||
std::path::PathBuf::new()
|
std::path::PathBuf::new()
|
||||||
} else {
|
} else {
|
||||||
@@ -15,5 +16,7 @@ pub fn to_lexical_absolute(path: PathBuf) -> Result<PathBuf> {
|
|||||||
component @ _ => absolute.push(component.as_os_str()),
|
component @ _ => absolute.push(component.as_os_str()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(absolute)
|
*path = absolute;
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
- [x] drop stack
|
- [x] drop stack
|
||||||
- [x] config file
|
- [x] config file
|
||||||
- [x] implement procedural macro for config
|
- [x] implement procedural macro for config
|
||||||
- [x] to parse config
|
- [x] .. to parse config
|
||||||
- [ ] to write default config
|
- [ ] .. to write default config
|
||||||
- [ ] dedup stack option
|
- [ ] dedup stack option
|
||||||
- [x] parse config file
|
- [x] parse config file
|
||||||
- [ ] apply config -- partially more done than before :)
|
- [ ] apply config -- partially more done than before :)
|
||||||
|
|||||||
Reference in New Issue
Block a user