idk some stuff

This commit is contained in:
Anish Lakhwara 2024-05-08 14:50:32 -07:00
parent a946a56dea
commit ca39db02b3
4 changed files with 3489 additions and 29 deletions

33
README Normal file
View file

@ -0,0 +1,33 @@
= poms =
A very opinionated companion for taskwarrior, with notes and the pomodoro technique.
Designed to help you overcome being overwhelmed
= workflow =
- You pick a list of tasks you think you can achieve in the time you have alotted.
- A good reference for this is [cblgh's 12pom days](https://cblgh.org/12%20pomodoro%20workday/)
- Each of the tasks you list get placed into a text file.
- This textfile is free to use as you see fit.
- I make plan textfiles, and I generally link my task-note into that, and write about the specific task in there.
- Once you feel like you've got an adequate plan for each of your tasks, you can exit your editor.
- You'll get to choose which task to work on next
- Now you're in Pomodoro mode. Do the task! Take more notes with a shortcut.
- Now it's break time!
- Rinse, repeat until you're done!
= Roadmap / Issues =
- Implement state machine to manage state (See design docs)
- Implement timer
- It should have big full screen countdown MM:SS
- Ideally the individual digits are ascii art made from the digit itself
- TaskList Active tasks should _always_ display, and then let the cursor indexing kick in
- Dynamic column spacing based on WindowResizeMsg
- When going from TaskList to nvim, don't overwrite! Ask!
- Show hints about actions / shortcuts on screen
- Refactor extra functions out of `main.go` and into `task.go`
- Make sure task loading happens through `tea.Cmd`
= Design Docs =
- [Excalidraw drawings](https://excalidraw.com/#json=Tucrdp__TOwmtOEvNnbVv,ep_J-9-vB3BRVjnd0Y2H0w)

3421
docs/poms.excalidraw Normal file

File diff suppressed because it is too large Load diff

34
main.go
View file

@ -19,9 +19,9 @@ var (
tasks = task.GetTasks()
columns = []table.Column{
{Title: "ID", Width: 4},
{Title: "Project", Width: 10},
{Title: "Tags", Width: 10},
{Title: "Description", Width: 20},
{Title: "Project", Width: 20},
{Title: "Tags", Width: 40},
{Title: "Description", Width: 95},
// {Title: "Urgency", Width: 10},
}
@ -31,7 +31,8 @@ var (
)
type model struct {
all table.Model
state string
taskList table.Model
}
func TasksToRows(tasks []task.Task) []table.Row {
@ -74,8 +75,8 @@ type editorFinishedMsg struct{ err error }
func (m model) rowsToFile() []string {
var rows []string
for index, row := range m.all.Rows() {
if index < m.all.ActiveIndex() {
for index, row := range m.taskList.Rows() {
if index < m.taskList.ActiveIndex() {
// get uuid
id := row[0]
uuid_byte, err := exec.Command("task", "_get", id + ".uuid").Output()
@ -123,10 +124,10 @@ func (m model) writeFile() string {
log.Fatal(err)
}
defer f.Close()
fmt.Println(f, "%title ")
fmt.Println(f, ":pom:priv:plan:")
fmt.Println(f, "%date " + path)
fmt.Println(f, "")
fmt.Fprintln(f, "%title ")
fmt.Fprintln(f, ":pom:priv:plan:")
fmt.Fprintln(f, "%date " + path)
fmt.Fprintln(f, "")
rows := m.rowsToFile()
for _, value := range rows {
@ -159,18 +160,23 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case "enter":
return m, m.openEditor()
}
case tea.WindowSizeMsg:
//top, right, bottom, left := baseStyle.GetMargin()
m.taskList.SetWidth(msg.Width - 5)
m.taskList.SetHeight(msg.Height - 5)
}
m.all, cmd = m.all.Update(msg)
m.taskList, cmd = m.taskList.Update(msg)
return m, cmd
}
func (m model) View() string {
return baseStyle.Render(m.all.View())
return baseStyle.Render(m.taskList.View())
}
func main() {
m := model{CreateTable()}
if _, err := tea.NewProgram(m, tea.WithAltScreen()).Run(); err != nil {
var m model
m.taskList = CreateTable()
if _, err := tea.NewProgram(m).Run(); err != nil {
fmt.Println("Error running program:", err)
os.Exit(1)
}

View file

@ -23,7 +23,7 @@ type Model struct {
viewport viewport.Model
start int
selected int
activeIndex int
end int
}
@ -140,7 +140,7 @@ type Option func(*Model)
func New(opts ...Option) Model {
m := Model{
cursor: 0,
selected: 0,
activeIndex: 0,
viewport: viewport.New(0, 20),
KeyMap: DefaultKeyMap(),
@ -335,17 +335,17 @@ func (m *Model) SwitchRow() {
// If cursor outside selection (adding selection)
// We check equals because if it's on the border, we just moved into selection
// and are still adding
if m.cursor >= m.selected {
if m.cursor >= m.activeIndex {
newSelection := make([]Row, len(removedRows) + 1)
newSelection = append(removedRows[:m.selected+1], removedRows[m.selected:]...)
newSelection[m.selected] = selectedRow
newSelection = append(removedRows[:m.activeIndex+1], removedRows[m.activeIndex:]...)
newSelection[m.activeIndex] = selectedRow
m.rows = newSelection
m.selected += 1
m.activeIndex += 1
} else {
m.selected -= 1
m.activeIndex -= 1
newSelection := make([]Row, len(removedRows) + 1)
newSelection = append(removedRows[:m.selected+1], removedRows[m.selected:]...)
newSelection[m.selected] = selectedRow
newSelection = append(removedRows[:m.activeIndex+1], removedRows[m.activeIndex:]...)
newSelection[m.activeIndex] = selectedRow
m.rows = newSelection
}
@ -365,7 +365,7 @@ func (m *Model) SetHeight(h int) {
}
func (m *Model) ActiveIndex() int {
return m.selected
return m.activeIndex
}
// Height returns the viewport height of the table.
@ -474,7 +474,7 @@ func (m *Model) renderRow(r int) string {
cellStyle = m.styleFunc(r, i, value)
if r == m.cursor {
cellStyle.Inherit(m.styles.Selected)
} else if r < m.selected {
} else if r < m.activeIndex {
cellStyle.Inherit(m.styles.Active)
}
} else {
@ -491,7 +491,7 @@ func (m *Model) renderRow(r int) string {
if r == m.cursor {
return m.styles.Selected.Render(row)
}
if r < m.selected {
if r < m.activeIndex {
return m.styles.Active.Render(row)
}