summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAkshay <nerdy@peppe.rs>2020-07-20 19:29:50 +0530
committerAkshay <nerdy@peppe.rs>2020-07-20 19:29:50 +0530
commit81451d8d5112fc74004e7ba70d9d682b15bc402e (patch)
tree3d7afa4e4109bbf9a64ac765be5c9d4d4c3e51d0
parenta0b6e884e39c858855db28377f094c9466002274 (diff)
add set-name commandfeature/edit
-rw-r--r--Cargo.lock42
-rw-r--r--src/app/impl_self.rs11
-rw-r--r--src/command.rs9
-rw-r--r--src/habit/bit.rs4
-rw-r--r--src/habit/traits.rs6
5 files changed, 27 insertions, 45 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 63d34ea..a25282d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -92,12 +92,6 @@ dependencies = [
]
[[package]]
-name = "cc"
-version = "1.0.58"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9a06fb2e53271d7c279ec1efea6ab691c35a2ae67ec0d91d7acec0caf13b518"
-
-[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -201,10 +195,7 @@ dependencies = [
"lazy_static",
"libc",
"log",
- "maplit",
- "ncurses",
"signal-hook",
- "term_size",
"termion",
"unicode-segmentation",
"unicode-width",
@@ -540,12 +531,6 @@ dependencies = [
]
[[package]]
-name = "maplit"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
-
-[[package]]
name = "maybe-uninit"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -595,17 +580,6 @@ dependencies = [
]
[[package]]
-name = "ncurses"
-version = "5.99.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "15699bee2f37e9f8828c7b35b2bc70d13846db453f2d507713b758fabe536b82"
-dependencies = [
- "cc",
- "libc",
- "pkg-config",
-]
-
-[[package]]
name = "net2"
version = "0.2.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -713,12 +687,6 @@ dependencies = [
]
[[package]]
-name = "pkg-config"
-version = "0.3.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33"
-
-[[package]]
name = "proc-macro-hack"
version = "0.5.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -882,16 +850,6 @@ dependencies = [
]
[[package]]
-name = "term_size"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9"
-dependencies = [
- "libc",
- "winapi 0.3.9",
-]
-
-[[package]]
name = "termion"
version = "1.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/src/app/impl_self.rs b/src/app/impl_self.rs
index 744f906..e2cf00d 100644
--- a/src/app/impl_self.rs
+++ b/src/app/impl_self.rs
@@ -233,7 +233,16 @@ impl App {
Command::Quit => self.save_state(),
Command::MonthNext => self.sift_forward(),
Command::MonthPrev => self.sift_backward(),
- Command::Blank => {}
+ Command::SetName(n) => {
+ if self.habits.is_empty() {
+ self.message
+ .set_message("Can't call command `set` on empty habit list!");
+ self.message.set_kind(MessageKind::Error);
+ return;
+ }
+ self.habits[self.focus].set_name(n);
+ }
+ _ | Command::Blank => {}
},
Err(e) => {
self.message.set_message(e.to_string());
diff --git a/src/command.rs b/src/command.rs
index f856b00..8fe991c 100644
--- a/src/command.rs
+++ b/src/command.rs
@@ -59,6 +59,8 @@ pub enum Command {
Delete(String),
TrackUp(String),
TrackDown(String),
+ SetGoal(u32),
+ SetName(String),
Quit,
Blank,
}
@@ -136,6 +138,13 @@ impl Command {
}
"mprev" | "month-prev" => return Ok(Command::MonthPrev),
"mnext" | "month-next" => return Ok(Command::MonthNext),
+ "set-name" | "setn" => {
+ if args.is_empty() {
+ return Err(CommandLineError::NotEnoughArgs(first, 1));
+ }
+ let name = &args[0];
+ return Ok(Command::SetName(name.clone()));
+ }
"q" | "quit" => return Ok(Command::Quit),
"" => return Ok(Command::Blank),
s => return Err(CommandLineError::InvalidCommand(s.into())),
diff --git a/src/habit/bit.rs b/src/habit/bit.rs
index 3386182..3f5035a 100644
--- a/src/habit/bit.rs
+++ b/src/habit/bit.rs
@@ -69,8 +69,8 @@ impl Habit for Bit {
fn set_name(&mut self, n: impl AsRef<str>) {
self.name = n.as_ref().to_owned();
}
- fn set_goal(&mut self, g: Self::HabitType) {
- self.goal = g;
+ fn set_goal(&mut self, _: Self::HabitType) {
+ self.goal = true.into();
}
fn get_by_date(&self, date: NaiveDate) -> Option<&Self::HabitType> {
self.stats.get(&date)
diff --git a/src/habit/traits.rs b/src/habit/traits.rs
index 74fd00b..1234005 100644
--- a/src/habit/traits.rs
+++ b/src/habit/traits.rs
@@ -40,6 +40,7 @@ pub trait HabitWrapper: erased_serde::Serialize {
fn required_size(&mut self, _: Vec2) -> Vec2;
fn take_focus(&mut self, _: Direction) -> bool;
fn name(&self) -> String;
+ fn set_name(&mut self, name: String);
fn set_view_month_offset(&mut self, offset: u32);
fn view_month_offset(&self) -> u32;
@@ -50,6 +51,8 @@ pub trait HabitWrapper: erased_serde::Serialize {
fn is_auto(&self) -> bool;
}
+// typetag dosen't support generics yet, we have to resort to dollar store generics,
+// aka macros
macro_rules! auto_habit_impl {
($struct_name:ident) => {
#[typetag::serde]
@@ -81,6 +84,9 @@ macro_rules! auto_habit_impl {
fn name(&self) -> String {
Habit::name(self)
}
+ fn set_name(&mut self, n: String) {
+ Habit::set_name(self, &n)
+ }
fn set_view_month_offset(&mut self, offset: u32) {
Habit::set_view_month_offset(self, offset)
}