init
This commit is contained in:
commit
93e5c3c67e
10
.editorconfig
Normal file
10
.editorconfig
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[*]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
end_of_line = lf
|
||||||
|
charset = utf-8
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.v]
|
||||||
|
indent_style = tab
|
7
.gitattributes
vendored
Normal file
7
.gitattributes
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
* text=auto eol=lf
|
||||||
|
*.bat eol=crlf
|
||||||
|
|
||||||
|
**/*.v linguist-language=V
|
||||||
|
**/*.vv linguist-language=V
|
||||||
|
**/*.vsh linguist-language=V
|
||||||
|
**/v.mod linguist-language=V
|
27
.gitignore
vendored
Normal file
27
.gitignore
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Binaries for programs and plugins
|
||||||
|
main
|
||||||
|
t_asker
|
||||||
|
*.exe
|
||||||
|
*.exe~
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
*.dll
|
||||||
|
|
||||||
|
# Ignore binary output folders
|
||||||
|
bin/
|
||||||
|
|
||||||
|
# Ignore common editor/system specific metadata
|
||||||
|
.DS_Store
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
*.iml
|
||||||
|
|
||||||
|
# ENV
|
||||||
|
.env
|
||||||
|
|
||||||
|
# vweb and database
|
||||||
|
*.db
|
||||||
|
*.js
|
||||||
|
|
||||||
|
# Data
|
||||||
|
t_asker.json
|
91
src/chalk.v
Normal file
91
src/chalk.v
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
module chalk
|
||||||
|
|
||||||
|
import strconv
|
||||||
|
|
||||||
|
const (
|
||||||
|
prefix = '\e['
|
||||||
|
suffix = 'm'
|
||||||
|
foreground_colors = {
|
||||||
|
'black': 30
|
||||||
|
'red': 31
|
||||||
|
'green': 32
|
||||||
|
'yellow': 33
|
||||||
|
'blue': 34
|
||||||
|
'magenta': 35
|
||||||
|
'cyan': 36
|
||||||
|
'default': 39
|
||||||
|
'light_gray': 37
|
||||||
|
'dark_gray': 90
|
||||||
|
'light_red': 91
|
||||||
|
'light_green': 92
|
||||||
|
'light_yellow': 93
|
||||||
|
'light_blue': 94
|
||||||
|
'light_magenta': 95
|
||||||
|
'light_cyan': 96
|
||||||
|
'white': 97
|
||||||
|
}
|
||||||
|
background_colors = {
|
||||||
|
'black': 40
|
||||||
|
'red': 41
|
||||||
|
'green': 42
|
||||||
|
'yellow': 44
|
||||||
|
'blue': 44
|
||||||
|
'magenta': 45
|
||||||
|
'cyan': 46
|
||||||
|
'default': 49
|
||||||
|
'light_gray': 47
|
||||||
|
'dark_gray': 100
|
||||||
|
'light_red': 101
|
||||||
|
'light_green': 102
|
||||||
|
'light_yellow': 103
|
||||||
|
'light_blue': 104
|
||||||
|
'light_magenta': 105
|
||||||
|
'light_cyan': 106
|
||||||
|
'white': 107
|
||||||
|
}
|
||||||
|
style = {
|
||||||
|
'bold': 1
|
||||||
|
'dim': 2
|
||||||
|
'underline': 4
|
||||||
|
'blink': 5
|
||||||
|
'reverse': 7
|
||||||
|
'hidden': 8
|
||||||
|
}
|
||||||
|
fg_rgb = 38
|
||||||
|
bg_rgb = 48
|
||||||
|
reset = '${prefix}0${suffix}'
|
||||||
|
)
|
||||||
|
|
||||||
|
pub fn fg(text string, color string) string {
|
||||||
|
return '${chalk.prefix}${chalk.foreground_colors[color]}${chalk.suffix}${text}${chalk.reset}'
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn fg_rgb(text string, r int, g int, b int) string {
|
||||||
|
return '${chalk.prefix}${chalk.fg_rgb};2;${r};${g};${b}${chalk.suffix}${text}${chalk.reset}'
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn fg_hex(text string, hex string) string {
|
||||||
|
r := strconv.common_parse_int(hex[1..3], 16, 16, true, false) or { 0 }
|
||||||
|
g := strconv.common_parse_int(hex[3..5], 16, 16, true, false) or { 0 }
|
||||||
|
b := strconv.common_parse_int(hex[5..7], 16, 16, true, false) or { 0 }
|
||||||
|
return fg_rgb(text, int(r), int(g), int(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn bg(text string, color string) string {
|
||||||
|
return '${chalk.prefix}${chalk.background_colors[color]}${chalk.suffix}${text}${chalk.reset}'
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn bg_rgb(text string, r int, g int, b int) string {
|
||||||
|
return '${chalk.prefix}${chalk.bg_rgb};2;${r};${g};${b}${chalk.suffix}${text}${chalk.reset}'
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn bg_hex(text string, hex string) string {
|
||||||
|
r := strconv.common_parse_int(hex[1..3], 16, 16, true, false) or { 0 }
|
||||||
|
g := strconv.common_parse_int(hex[3..5], 16, 16, true, false) or { 0 }
|
||||||
|
b := strconv.common_parse_int(hex[5..7], 16, 16, true, false) or { 0 }
|
||||||
|
return bg_rgb(text, int(r), int(g), int(b))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn style(text string, color string) string {
|
||||||
|
return '${chalk.prefix}${chalk.style[color]}${chalk.suffix}${text}${chalk.reset}'
|
||||||
|
}
|
69
src/main.v
Normal file
69
src/main.v
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
import os
|
||||||
|
import term
|
||||||
|
import readline { read_line }
|
||||||
|
import json
|
||||||
|
import chalk
|
||||||
|
|
||||||
|
const (
|
||||||
|
tasker_init = '{"info":{"date_created":0,"date_last_open":3},"tasks":[{"name":"running","last_run":0,"count":0},{"name":"working","last_run":0,"count":0}]}'
|
||||||
|
tasker_path_home = os.resource_abs_path(os.join_path('~', '.t_asker.json'))
|
||||||
|
tasker_path_folder = os.resource_abs_path(os.join_path('.', 't_asker.json'))
|
||||||
|
)
|
||||||
|
|
||||||
|
struct TaskerInfo {
|
||||||
|
date_created int
|
||||||
|
date_last_open int
|
||||||
|
}
|
||||||
|
|
||||||
|
struct TaskerTasks {
|
||||||
|
name string
|
||||||
|
last_run int
|
||||||
|
count int
|
||||||
|
}
|
||||||
|
|
||||||
|
struct TaskerData {
|
||||||
|
info TaskerInfo
|
||||||
|
tasks []TaskerTasks
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
term.clear()
|
||||||
|
|
||||||
|
mut data := TaskerData{}
|
||||||
|
mut data_file := os.File{}
|
||||||
|
|
||||||
|
if !os.exists(tasker_path_folder) {
|
||||||
|
println('t_asker file ' + chalk.fg(chalk.style('not found', 'bold'), 'red') + '!')
|
||||||
|
println('make new file ' +
|
||||||
|
chalk.fg(chalk.style(os.norm_path(tasker_path_folder), 'bold'), 'yellow') + '.')
|
||||||
|
|
||||||
|
data = json.decode(TaskerData, tasker_init)!
|
||||||
|
|
||||||
|
data_file = os.open_file(tasker_path_folder, 'w')!
|
||||||
|
data_file.write_string(json.encode(data))!
|
||||||
|
} else {
|
||||||
|
data_string := os.read_file(tasker_path_folder)!
|
||||||
|
data = json.decode(TaskerData, data_string)!
|
||||||
|
}
|
||||||
|
|
||||||
|
for true {
|
||||||
|
term.clear()
|
||||||
|
println(chalk.fg(chalk.style('TASKS:', 'bold'), 'green'))
|
||||||
|
for task_index in 0 .. data.tasks.len {
|
||||||
|
println('[${task_index:2}] ${data.tasks[task_index].name}')
|
||||||
|
}
|
||||||
|
println('\nTotal tasks: ' + chalk.fg('${data.count()}', 'yellow') + '.')
|
||||||
|
|
||||||
|
println(chalk.fg(chalk.style('RUNNING', 'blink'), 'red'))
|
||||||
|
|
||||||
|
input := read_line('Select task: ')!
|
||||||
|
println('Your name is: ${data.tasks[input.int()].name}')
|
||||||
|
}
|
||||||
|
|
||||||
|
// info := TaskerInfo{0, 3}
|
||||||
|
// tasks := TaskerTasks{'ololo', 0, 3}
|
||||||
|
// x := TaskerData{info, tasks}
|
||||||
|
// println(json.encode(x))
|
||||||
|
}
|
15
src/tasks.v
Normal file
15
src/tasks.v
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
fn (data &TaskerData) count() int {
|
||||||
|
return data.tasks.len
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (data &TaskerData) list_tasks() []TaskerTasks {
|
||||||
|
mut tasks := []TaskerTasks{}
|
||||||
|
|
||||||
|
for index in 0 .. data.tasks.len {
|
||||||
|
tasks.insert(0, (data.tasks[index]))
|
||||||
|
}
|
||||||
|
|
||||||
|
return tasks
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user