add configurable pager
This commit is contained in:
		
							parent
							
								
									7e4456450c
								
							
						
					
					
						commit
						50cb60cdc4
					
				| @ -19,6 +19,7 @@ type Config struct { | ||||
| } | ||||
| 
 | ||||
| var configList = []string{ | ||||
| 	"pager", | ||||
| 	"publish to html", | ||||
| 	"publish to gopher", | ||||
| 	"default to nopub", | ||||
| @ -36,6 +37,10 @@ func NewConfig() *Config { | ||||
| 		"↑↓/kj move  ↵ enter  q return", | ||||
| 		cfg, | ||||
| 		[]string{ | ||||
| 			`which pager do you want to use to display feels? | ||||
| 
 | ||||
| here you can add additional pre-processing to your pager. leaving this option | ||||
| unset defaults to $PAGER, and if that isn't set, neofeels falls back to less.`, | ||||
| 			`do you want to publish your feels online? | ||||
| 
 | ||||
| if yes, your feels will be published to a directory of your choice in your | ||||
| @ -85,14 +90,16 @@ func (config *Config) Event(state *ui.State, event vaxis.Event) (processed bool) | ||||
| 		case "Enter", "l", "Right", "Space": | ||||
| 			switch config.list.Index() { | ||||
| 			case 0: | ||||
| 				config.config.Publishing = !config.config.Publishing | ||||
| 				config.config.Pager = config.changePager(state) | ||||
| 			case 1: | ||||
| 				config.config.Gopher = !config.config.Gopher | ||||
| 				config.config.Publishing = !config.config.Publishing | ||||
| 			case 2: | ||||
| 				config.config.Nopub = !config.config.Nopub | ||||
| 				config.config.Gopher = !config.config.Gopher | ||||
| 			case 3: | ||||
| 				config.config.HTML = !config.config.HTML | ||||
| 				config.config.Nopub = !config.config.Nopub | ||||
| 			case 4: | ||||
| 				config.config.HTML = !config.config.HTML | ||||
| 			case 5: | ||||
| 				config.config.PublishDir = config.changePublishDir(state) | ||||
| 			} | ||||
| 			config.config.Write() | ||||
| @ -117,18 +124,19 @@ func (config *Config) Draw(state *ui.State) { | ||||
| 		Column: win.Width/2 - 21, | ||||
| 		Row:    win.Height/2 - 2, | ||||
| 		Width:  28, | ||||
| 		Height: 5, | ||||
| 		Height: 6, | ||||
| 	}) | ||||
| 	win.New(win.Width/2-40, win.Height/2+4, 80, 10).Print(vaxis.Segment{Text: config.descriptions[config.list.Index()]}) | ||||
| 	win.New(win.Width/2-15, win.Height/2+14, 30, 1).Print(vaxis.Segment{Text: config.help}) | ||||
| 	win.New(win.Width/2-40, win.Height/2+5, 80, 10).Print(vaxis.Segment{Text: config.descriptions[config.list.Index()]}) | ||||
| 	win.New(win.Width/2-15, win.Height/2+15, 30, 1).Print(vaxis.Segment{Text: config.help}) | ||||
| 
 | ||||
| 	// drawing the current selected options | ||||
| 	win.New(win.Width/2+7, win.Height/2-2, 14, 1).Print(vaxis.Segment{Text: fmt.Sprintf("  %-12v", config.config.Publishing)}) | ||||
| 	win.New(win.Width/2+7, win.Height/2-1, 14, 1).Print(vaxis.Segment{Text: fmt.Sprintf("  %-12v", config.config.Gopher)}) | ||||
| 	win.New(win.Width/2+7, win.Height/2, 14, 1).Print(vaxis.Segment{Text: fmt.Sprintf("  %-12v", config.config.Nopub)}) | ||||
| 	win.New(win.Width/2+7, win.Height/2+1, 14, 1).Print(vaxis.Segment{Text: fmt.Sprintf("  %-12v", config.config.HTML)}) | ||||
| 	win.New(win.Width/2+7, win.Height/2-2, 40, 1).Print(vaxis.Segment{Text: fmt.Sprintf("  %-12v", config.config.Pager)}) | ||||
| 	win.New(win.Width/2+7, win.Height/2-1, 14, 1).Print(vaxis.Segment{Text: fmt.Sprintf("  %-12v", config.config.Publishing)}) | ||||
| 	win.New(win.Width/2+7, win.Height/2, 14, 1).Print(vaxis.Segment{Text: fmt.Sprintf("  %-12v", config.config.Gopher)}) | ||||
| 	win.New(win.Width/2+7, win.Height/2+1, 14, 1).Print(vaxis.Segment{Text: fmt.Sprintf("  %-12v", config.config.Nopub)}) | ||||
| 	win.New(win.Width/2+7, win.Height/2+2, 14, 1).Print(vaxis.Segment{Text: fmt.Sprintf("  %-12v", config.config.HTML)}) | ||||
| 	if config.config.Publishing { | ||||
| 		win.New(win.Width/2+7, win.Height/2+2, 14, 1).Print(vaxis.Segment{Text: fmt.Sprintf("  %-12v", config.config.PublishDir)}) | ||||
| 		win.New(win.Width/2+7, win.Height/2+3, 14, 1).Print(vaxis.Segment{Text: fmt.Sprintf("  %-12v", config.config.PublishDir)}) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| @ -169,3 +177,41 @@ func (config *Config) changePublishDir(state *ui.State) string { | ||||
| 
 | ||||
| 	return "" | ||||
| } | ||||
| 
 | ||||
| func (config *Config) changePager(state *ui.State) string { | ||||
| 	ti := textinput.New() | ||||
| 	ti.SetContent(config.config.Pager) | ||||
| 	config.Draw(state) | ||||
| 	win := state.Window() | ||||
| 	ti.Draw(vaxis.Window{ | ||||
| 		Vx:     win.Vx, | ||||
| 		Parent: &win, | ||||
| 		Column: win.Width/2 + 9, | ||||
| 		Row:    win.Height/2 - 2, | ||||
| 		Width:  40, | ||||
| 		Height: 1, | ||||
| 	}) | ||||
| 	for ev := range win.Vx.Events() { | ||||
| 		switch ev := ev.(type) { | ||||
| 		case vaxis.Key: | ||||
| 			switch ev.String() { | ||||
| 			case "Ctrl+c", "Esc", "Enter": | ||||
| 				state.HideCursor() | ||||
| 				return ti.String() | ||||
| 			} | ||||
| 		} | ||||
| 		ti.Update(ev) | ||||
| 		config.Draw(state) | ||||
| 		ti.Draw(vaxis.Window{ | ||||
| 			Vx:     win.Vx, | ||||
| 			Parent: nil, | ||||
| 			Column: win.Width/2 + 9, | ||||
| 			Row:    win.Height/2 - 2, | ||||
| 			Width:  40, | ||||
| 			Height: 1, | ||||
| 		}) | ||||
| 		state.Render() | ||||
| 	} | ||||
| 
 | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| @ -57,7 +57,7 @@ func (graffiti *Graffiti) Event(state *ui.State, event vaxis.Event) (processed b | ||||
| 	} | ||||
| 	win := state.Window() | ||||
| 	win.New(win.Width/2-10, win.Height/2-8, 20, 5).Print(vaxis.Segment{Text: graffiti.title}) | ||||
| 	win.New(win.Width/2-40, win.Height/2-2, 80, 9).Print(vaxis.Segment{Text: graffiti.content}) | ||||
| 	win.New(win.Width/2-40, win.Height/2-2, 81, 9).Print(vaxis.Segment{Text: graffiti.content}) | ||||
| 	win.New(win.Width/2-9, win.Height/2+8, 18, 1).Print(vaxis.Segment{Text: graffiti.help}) | ||||
| 	return | ||||
| } | ||||
|  | ||||
							
								
								
									
										13
									
								
								app/user.go
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								app/user.go
									
									
									
									
									
								
							| @ -9,6 +9,7 @@ import ( | ||||
| 
 | ||||
| 	"git.sr.ht/~rockorager/vaxis" | ||||
| 	"git.sr.ht/~rockorager/vaxis/widgets/term" | ||||
| 	"git.tilde.town/nbsp/neofeels/config" | ||||
| 	"git.tilde.town/nbsp/neofeels/ttbp" | ||||
| 	"git.tilde.town/nbsp/neofeels/ui" | ||||
| ) | ||||
| @ -95,7 +96,15 @@ func showPost(state *ui.State, post ttbp.Post) { | ||||
| 	vt.Attach(state.PostEvent()) | ||||
| 	vt.Focus() | ||||
| 
 | ||||
| 	pager := os.ExpandEnv(os.Getenv("PAGER")) | ||||
| 	cfg, err := config.Read() | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	pager := os.ExpandEnv(cfg.Pager) | ||||
| 	if cfg.Pager == "" { | ||||
| 
 | ||||
| 		pager = os.ExpandEnv(os.Getenv("PAGER")) | ||||
| 	} | ||||
| 	if pager == "" { | ||||
| 		pager = "less" | ||||
| 	} | ||||
| @ -106,7 +115,7 @@ func showPost(state *ui.State, post ttbp.Post) { | ||||
| 	} | ||||
| 
 | ||||
| 	cmd := fmt.Sprintf("%s %s | %s", prepro, path.Join("/home", post.Author, ".ttbp/entries", post.Date.Format("20060102")+".txt"), pager) | ||||
| 	err := vt.Start(exec.Command("sh", "-c", cmd)) | ||||
| 	err = vt.Start(exec.Command("sh", "-c", cmd)) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
|  | ||||
| @ -14,6 +14,7 @@ type Config struct { | ||||
| 	Publishing bool   `json:"publishing"` | ||||
| 	Rainbows   bool   `json:"rainbows"` // we don't care about this | ||||
| 	HTML       bool   `json:"html"` | ||||
| 	Pager      string `json:"pager"` | ||||
| } | ||||
| 
 | ||||
| var Default = &Config{ | ||||
| @ -24,6 +25,7 @@ var Default = &Config{ | ||||
| 	Publishing: false, | ||||
| 	Rainbows:   false, | ||||
| 	HTML:       false, | ||||
| 	Pager:      "less", | ||||
| } | ||||
| 
 | ||||
| func Read() (config *Config, err error) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user