forked from nushell/nu_scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
todo.nu
78 lines (71 loc) · 2.17 KB
/
todo.nu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# (See TODO.md for more details)
# This first command looks for the file with the todo list and
# prints it to the screen.
def --env printer [] {
let contents = (
# if you haven't setup this environment var,
# replace `$env.TODO` with the path to your
# `todo.txt`
open $env.TODO
| split row "\n"
| take (($in | length) - 1)
| each {|$it, n| $"($n + 1) (ansi red)->(ansi reset) ($it)"}
| str join "\n"
)
# change the message to print what you want
if $contents == "" {
echo $"\n(ansi lgb)Everything's been done!!! Yay!!!(ansi reset)\n"
} else {
echo $"\n(ansi lgb)You promised to do these(ansi reset)\n($contents)"
}
}
printer # don't forget to call it here, so that it gets run automatically
# This command is used to update you todo-list, and should ideally be
# sourced in your `config.nu`
def todo [
--edit(-e) # edit todo manually
--add(-a): string # add item
--remove(-r): int # remove an item using its number
--clear(-c) # clear the list
] {
def get_todo [] {
# if you haven't setup this environment var,
# replace `$env.TODO` with the path to your
# `todo.txt`
open $env.TODO
| split row "\n"
| take (($in | length) - 1)
}
def todo_add [todo: string] {
get_todo
| reverse
| $in ++ [$todo]
| reverse
| save $env.TODO -f
}
def todo_rm [num: int] {
get_todo
| reverse
# change ($num - 1) to $num to have zero-based indexing
| filter {|it, n| $n != ($num - 1) }
| reverse
| save $env.TODO -f
}
if $edit {
clear
vim $env.TODO # replace `vim` with your favorite editor
} else if ($add != null) {
clear
todo_add $add | todo
} else if ($remove != null) {
clear
todo_rm $remove | todo
} else if $clear {
clear
# change the message to print what you want
"" | save $env.TODO -f | echo $"(ansi lgb)todo cleared!!!"
} else {
clear
printer
}
}