parent
713b87609d
commit
8f727f1204
@ -0,0 +1,64 @@ |
|||||||
|
// Copyright (c) 2013 by Michael Dvorkin. All Rights Reserved.
|
||||||
|
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
|
package mop |
||||||
|
|
||||||
|
import ( |
||||||
|
"github.com/nsf/termbox-go" |
||||||
|
) |
||||||
|
|
||||||
|
// const (
|
||||||
|
// add_prompt = "Add tickers: "
|
||||||
|
// remove_prompt = "Remove tickers: "
|
||||||
|
// )
|
||||||
|
|
||||||
|
// const prompts = map[rune]string{'+': `Add tickers: `, '-': `Remove tickers: `}
|
||||||
|
|
||||||
|
type LineEditor struct { |
||||||
|
command rune |
||||||
|
prompt string |
||||||
|
cursor int |
||||||
|
input string |
||||||
|
} |
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
func (self *LineEditor) Prompt(command rune) { |
||||||
|
prompts := map[rune]string{'+': `Add tickers: `, '-': `Remove tickers: `} |
||||||
|
|
||||||
|
self.command = command |
||||||
|
switch self.command { |
||||||
|
case '+', '-': |
||||||
|
self.prompt = prompts[self.command] |
||||||
|
// if self.command == '+' {
|
||||||
|
// self.prompt = add_prompt
|
||||||
|
// } else {
|
||||||
|
// self.prompt = remove_prompt
|
||||||
|
// }
|
||||||
|
DrawLine(0, 3, "<white>"+self.prompt+"</white>") |
||||||
|
termbox.SetCursor(len(self.prompt), 3) |
||||||
|
termbox.Flush() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
func (self *LineEditor) Handle(ev termbox.Event) bool { |
||||||
|
switch ev.Key { |
||||||
|
case termbox.KeyEsc: |
||||||
|
ClearLine(0, 3) |
||||||
|
termbox.HideCursor() |
||||||
|
termbox.Flush() |
||||||
|
return true |
||||||
|
case termbox.KeyEnter: |
||||||
|
ClearLine(0, 3) |
||||||
|
termbox.HideCursor() |
||||||
|
termbox.Flush() |
||||||
|
return true |
||||||
|
default: |
||||||
|
if ev.Ch != 0 { |
||||||
|
self.input += string(ev.Ch) |
||||||
|
DrawLine(len(self.prompt), 3, self.input) |
||||||
|
termbox.SetCursor(len(self.prompt)+len(self.input), 3) |
||||||
|
termbox.Flush() |
||||||
|
} |
||||||
|
} |
||||||
|
return false |
||||||
|
} |
@ -1,56 +1,57 @@ |
|||||||
// Copyright (c) 2013 by Michael Dvorkin. All Rights Reserved.
|
// Copyright (c) 2013 by Michael Dvorkin. All Rights Reserved.
|
||||||
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
package mop |
package mop |
||||||
|
|
||||||
import ( |
import ( |
||||||
"strings" |
"encoding/json" |
||||||
"os/user" |
"io/ioutil" |
||||||
"io/ioutil" |
"os/user" |
||||||
"encoding/json" |
"strings" |
||||||
) |
) |
||||||
|
|
||||||
const rcfile = "/.moprc" |
const rcfile = "/.moprc" |
||||||
|
|
||||||
type Profile struct { |
type Profile struct { |
||||||
MarketRefreshRate int |
MarketRefreshRate int |
||||||
QuotesRefreshRate int |
QuotesRefreshRate int |
||||||
Tickers []string |
Tickers []string |
||||||
SortBy string |
SortBy string |
||||||
SortOrder string |
SortOrder string |
||||||
} |
} |
||||||
|
|
||||||
var profile Profile |
var profile Profile |
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
func LoadProfile() string { |
func LoadProfile() string { |
||||||
data, err := ioutil.ReadFile(defaultProfile()) |
data, err := ioutil.ReadFile(defaultProfile()) |
||||||
if err != nil { |
if err != nil { |
||||||
// Set default values.
|
// Set default values.
|
||||||
profile.MarketRefreshRate = 12 |
profile.MarketRefreshRate = 12 |
||||||
profile.QuotesRefreshRate = 5 |
profile.QuotesRefreshRate = 5 |
||||||
profile.Tickers = []string{ "AAPL", "C", "GOOG", "IBM", "KO", "ORCL", "V" } |
profile.Tickers = []string{"AAPL", "C", "GOOG", "IBM", "KO", "ORCL", "V"} |
||||||
profile.SortBy = "Ticker" |
profile.SortBy = "Ticker" |
||||||
profile.SortOrder = "Desc" |
profile.SortOrder = "Desc" |
||||||
profile.Save() |
profile.Save() |
||||||
} else { |
} else { |
||||||
json.Unmarshal(data, &profile) |
json.Unmarshal(data, &profile) |
||||||
} |
} |
||||||
return strings.Join(profile.Tickers, "+") |
return strings.Join(profile.Tickers, "+") |
||||||
} |
} |
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
func (profile *Profile) Save() error { |
func (profile *Profile) Save() error { |
||||||
if data, err := json.Marshal(profile); err != nil { |
if data, err := json.Marshal(profile); err != nil { |
||||||
return err |
return err |
||||||
} else { |
} else { |
||||||
return ioutil.WriteFile(defaultProfile(), data, 0644) |
return ioutil.WriteFile(defaultProfile(), data, 0644) |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
func defaultProfile() string { |
func defaultProfile() string { |
||||||
usr, err := user.Current() |
usr, err := user.Current() |
||||||
if err != nil { |
if err != nil { |
||||||
panic(err) |
panic(err) |
||||||
} |
} |
||||||
return usr.HomeDir + rcfile |
return usr.HomeDir + rcfile |
||||||
} |
} |
||||||
|
Loading…
Reference in new issue