From cb180c409509ac513666893beff2dae18dbe81b9 Mon Sep 17 00:00:00 2001 From: Paul Wilde Date: Tue, 3 May 2022 17:41:33 +0100 Subject: [PATCH] adding notes feature : WORK IN PROGRESS --- base.nim | 8 +++-- notes.nim | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 notes.nim diff --git a/base.nim b/base.nim index fe3aec2..1285e58 100644 --- a/base.nim +++ b/base.nim @@ -44,8 +44,8 @@ const secondary* = red const alert* = "#bd2c40" var loop* = true var stoploop* = false -var dmenu = false -var rofi = false +var dmenu* = false +var rofi* = false proc newInfo*(): Info = return Info( @@ -82,7 +82,9 @@ proc getArguments*(): seq[string] = proc runDMenu*(data: Info, opts: varargs[string], rofi: bool = false): string = discard execCmd("i3-msg mode \"default\"") - var cmd = "echo -e \"" & $data.full_text & "\n" + var cmd = "echo -e \"" + if $data.full_text != "": + cmd &= $data.full_text & "\n" for opt in opts: cmd = cmd & opt & "\n" cmd.removeSuffix("\n") diff --git a/notes.nim b/notes.nim new file mode 100644 index 0000000..1d0806c --- /dev/null +++ b/notes.nim @@ -0,0 +1,90 @@ +import base +import std/[os,strutils,sequtils] + +proc start_notes() + +const all_choices = @["exit"] +const note_choices = @["rm","back"] +const note_file = getHomeDir() & ".notes.dmenu" + +proc read_notes(): seq[string] = + try: + var notes: seq[string] = @[] + for line in note_file.lines: + notes.add(line) + return notes + except: + echo "read_notes, Can't open notes file :", getCurrentExceptionMsg() + return @[""] + +proc write_notes(notes: seq[string]) = + try: + let f = open(note_file, fmWrite) + for note in notes: + f.writeLine(note) + except: + echo "write_notes, Cannot write notes to file : ", getCurrentExceptionMsg() + +proc remove_note(note: string) = + let notes = read_notes() + var new_notes: seq[string] = @[] + for a_note in notes: + if note != a_note: + new_notes.add(a_note) + write_notes(new_notes) + +proc write_note(note: string) = + if note == "": + return + try: + let f = open(note_file, fmAppend) + defer: f.close() + f.writeLine(strip(note)) + except: + echo "write_note, Unable to write note :", getCurrentExceptionMsg() + +proc get_notes(): (Info, seq[string]) = + var info = newInfo() + info.title = "Notes :" + let notes = read_notes() + return (info,notes) + +proc display_option_menu(option: string) = + var select = newInfo() + select.title = "Note :" + let args = concat(@["option"],note_choices) + let chosen = outputJSON(select,args) + if chosen in note_choices: + case chosen: + of "rm": + remove_note(option) + start_notes() + of "back": + start_notes() + else: + write_note(option) + display_option_menu(chosen) + +proc start_notes() = + let (info,notes) = get_notes() + let args = concat(notes, all_choices) + let option = outputJSON(info, args) + if option in all_choices: + case option: + of "exit": + return + if option in notes: + display_option_menu(option) + else: + write_note(option) + start_notes() + +proc main() = + echo "Note file : ", note_file + if not dmenu and not rofi: + echo "Can only be run in dmenu or rofi mode. Exiting..." + return + start_notes() + +if isMainModule: + main()