posting feels
parent
c825888147
commit
9eac46a2aa
|
@ -16,7 +16,7 @@ make
|
||||||
- [x] credits
|
- [x] credits
|
||||||
- [ ] feels browser
|
- [ ] feels browser
|
||||||
- [ ] configuration editor
|
- [ ] configuration editor
|
||||||
- [ ] feels publishing
|
- [x] feels publishing
|
||||||
- [ ] graffiti
|
- [ ] graffiti
|
||||||
- [ ] feedback
|
- [ ] feedback
|
||||||
- [ ] documentation with manpages
|
- [ ] documentation with manpages
|
||||||
|
|
|
@ -13,11 +13,7 @@ type Credits struct {
|
||||||
|
|
||||||
func NewCredits() *Credits {
|
func NewCredits() *Credits {
|
||||||
return &Credits{
|
return &Credits{
|
||||||
` ___ __
|
title,
|
||||||
/ _/__ ___ / /__
|
|
||||||
/ _/ -_) -_) (_-<
|
|
||||||
/_/ \__/\__/_/___/
|
|
||||||
neofeels 0.1.0`,
|
|
||||||
`ttbp written for tilde.town by ~endorphant in python
|
`ttbp written for tilde.town by ~endorphant in python
|
||||||
neofeels written by ~nbsp in go
|
neofeels written by ~nbsp in go
|
||||||
|
|
||||||
|
@ -25,7 +21,7 @@ tips for development of ttbp are accepted at https://liberapay.com/modgethanc/
|
||||||
tips for development of neofeels are accepted at https://liberapay.com/nbsp/
|
tips for development of neofeels are accepted at https://liberapay.com/nbsp/
|
||||||
|
|
||||||
kind words are also extremely appreciated :)`,
|
kind words are also extremely appreciated :)`,
|
||||||
"q exit",
|
"q return",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,6 +38,6 @@ func (credits *Credits) Event(state *ui.State, event vaxis.Event) (processed boo
|
||||||
win := state.Window()
|
win := state.Window()
|
||||||
win.New(win.Width/2-10, win.Height/2-8, 20, 5).Print(vaxis.Segment{Text: credits.title})
|
win.New(win.Width/2-10, win.Height/2-8, 20, 5).Print(vaxis.Segment{Text: credits.title})
|
||||||
win.New(win.Width/2-40, win.Height/2-2, 80, 7).Print(vaxis.Segment{Text: credits.credits})
|
win.New(win.Width/2-40, win.Height/2-2, 80, 7).Print(vaxis.Segment{Text: credits.credits})
|
||||||
win.New(win.Width/2-3, win.Height/2+6, 6, 1).Print(vaxis.Segment{Text: credits.help})
|
win.New(win.Width/2-4, win.Height/2+6, 8, 1).Print(vaxis.Segment{Text: credits.help})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
46
app/menu.go
46
app/menu.go
|
@ -3,6 +3,8 @@ package app
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"path"
|
||||||
|
"time"
|
||||||
|
|
||||||
"git.sr.ht/~rockorager/vaxis"
|
"git.sr.ht/~rockorager/vaxis"
|
||||||
"git.sr.ht/~rockorager/vaxis/widgets/list"
|
"git.sr.ht/~rockorager/vaxis/widgets/list"
|
||||||
|
@ -16,13 +18,15 @@ type MainMenu struct {
|
||||||
help string
|
help string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMainMenu() *MainMenu {
|
const title = ` ___ __
|
||||||
return &MainMenu{
|
|
||||||
` ___ __
|
|
||||||
/ _/__ ___ / /__
|
/ _/__ ___ / /__
|
||||||
/ _/ -_) -_) (_-<
|
/ _/ -_) -_) (_-<
|
||||||
/_/ \__/\__/_/___/
|
/_/ \__/\__/_/___/
|
||||||
neofeels 0.1.0`,
|
neofeels 0.1.0`
|
||||||
|
|
||||||
|
func NewMainMenu() *MainMenu {
|
||||||
|
return &MainMenu{
|
||||||
|
title,
|
||||||
list.New([]string{
|
list.New([]string{
|
||||||
" record some feels ",
|
" record some feels ",
|
||||||
" manage your feels ",
|
" manage your feels ",
|
||||||
|
@ -54,6 +58,8 @@ func (menu *MainMenu) Event(state *ui.State, event vaxis.Event) (processed bool)
|
||||||
menu.list.Home()
|
menu.list.Home()
|
||||||
case "Enter":
|
case "Enter":
|
||||||
switch menu.list.Index() {
|
switch menu.list.Index() {
|
||||||
|
case 0:
|
||||||
|
newFeels(state)
|
||||||
case 8:
|
case 8:
|
||||||
ui.ViewChange <- NewCredits()
|
ui.ViewChange <- NewCredits()
|
||||||
case 9:
|
case 9:
|
||||||
|
@ -106,3 +112,35 @@ func showManpage(state *ui.State) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func newFeels(state *ui.State) {
|
||||||
|
state.HideCursor()
|
||||||
|
vt := term.New()
|
||||||
|
vt.TERM = os.Getenv("TERM")
|
||||||
|
vt.Attach(state.PostEvent())
|
||||||
|
vt.Focus()
|
||||||
|
err := vt.Start(exec.Command(os.Getenv("EDITOR"), path.Join(os.Getenv("HOME"), ".ttbp/entries", time.Now().Format("20060102")+".txt")))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer vt.Close()
|
||||||
|
|
||||||
|
for ev := range state.Events() {
|
||||||
|
switch ev.(type) {
|
||||||
|
case term.EventClosed:
|
||||||
|
state.HideCursor()
|
||||||
|
state.Window().Clear()
|
||||||
|
ui.ViewChange <- NewPosted()
|
||||||
|
return
|
||||||
|
case vaxis.Redraw:
|
||||||
|
vt.Draw(state.Window())
|
||||||
|
state.Render()
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// for some reason vaxis doubles all events for Press/Release so this just ignores releases
|
||||||
|
if key, ok := ev.(vaxis.Key); ok && key.EventType == vaxis.EventPress {
|
||||||
|
vt.Update(ev)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
package app
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.sr.ht/~rockorager/vaxis"
|
||||||
|
"git.tilde.town/nbsp/neofeels/ui"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Posted struct {
|
||||||
|
title string
|
||||||
|
content string
|
||||||
|
help string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewPosted() *Posted {
|
||||||
|
var content string
|
||||||
|
info, err := os.Stat(path.Join(os.Getenv("HOME"), ".ttbp/entries", time.Now().Format("20060102")+".txt"))
|
||||||
|
if os.IsNotExist(err) || info.IsDir() || info.Size() == 0 {
|
||||||
|
content = `your post is empty and was not published.
|
||||||
|
see you next time!`
|
||||||
|
} else {
|
||||||
|
content = `your post has been successfully published.
|
||||||
|
thanks for sharing your feels!`
|
||||||
|
}
|
||||||
|
return &Posted{
|
||||||
|
title,
|
||||||
|
content,
|
||||||
|
"q return",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (posted *Posted) Event(state *ui.State, event vaxis.Event) (processed bool) {
|
||||||
|
if key, ok := event.(vaxis.Key); ok && key.EventType == vaxis.EventPress {
|
||||||
|
switch key.String() {
|
||||||
|
case "Ctrl+c", "Ctrl+d":
|
||||||
|
close(ui.Quit)
|
||||||
|
case "Enter", "q":
|
||||||
|
ui.ViewChange <- NewMainMenu()
|
||||||
|
}
|
||||||
|
processed = true
|
||||||
|
}
|
||||||
|
win := state.Window()
|
||||||
|
win.New(win.Width/2-10, win.Height/2-8, 20, 5).Print(vaxis.Segment{Text: posted.title})
|
||||||
|
win.New(win.Width/2-21, win.Height/2-2, 43, 2).Print(vaxis.Segment{Text: posted.content})
|
||||||
|
win.New(win.Width/2-4, win.Height/2+1, 8, 1).Print(vaxis.Segment{Text: posted.help})
|
||||||
|
return
|
||||||
|
}
|
Loading…
Reference in New Issue