func (mv *MaildirView) Draw(v *gocui.View) error { v.Clear() w, h := v.Size() if h <= 1 { return fmt.Errorf("The screen is too small") } if w <= 20 { return fmt.Errorf("The screen is too small") } xo, _ := v.Origin() v.SetOrigin(xo, mv.curTop) xc, _ := v.Cursor() v.SetCursor(xc, mv.cur-mv.curTop) msgs := mv.md.messages flagsLen := 5 indexLen := 6 sizeLen := 5 remW := w - indexLen - flagsLen - sizeLen + 2 /* two spaces */ + 2 /* two brackets around the size */ fromRatio := 25 subjRatio := 100 - fromRatio fromLen := (remW - 10) * fromRatio / 100.0 subjLen := (remW - 10) * subjRatio / 100.0 fmtString := fmt.Sprintf("%%-%dd%%-%ds%%-%ds [%%%ds] %%-%ds\n", indexLen, flagsLen, fromLen, sizeLen, subjLen) for i, m := range msgs { from := util.TruncateString(m.From, fromLen) subj := util.TruncateString(m.Subject, subjLen) flags := flagsToString(m.Flags) fmt.Fprintf(v, fmtString, i, flags, from, util.SiteToHuman(m.size), subj) } return nil }
func (amua *Amua) sendMailDraw(v *gocui.View) error { v.Clear() v.Frame = false v.Highlight = false v.Wrap = true v.SetOrigin(0, 0) tos := util.ConcatAddresses(amua.newMail.to) ccs := util.ConcatAddresses(amua.newMail.cc) bccs := util.ConcatAddresses(amua.newMail.bcc) fmt.Fprintf(v, "y: send, Ctrl+G: cancel, q: move to drafts, t: tos, c: ccs, b: bccs\n") fmt.Fprintf(v, "To: %s\n", tos) fmt.Fprintf(v, "Cc: %s\n", ccs) fmt.Fprintf(v, "Bcc: %s\n", bccs) fmt.Fprintf(v, "Subject: %s\n", amua.newMail.subject) fmt.Fprintf(v, "\n") return nil }
func (amua *Amua) RefreshMaildir(g *gocui.Gui, v *gocui.View) error { md, err := LoadMaildir(amua.knownMaildirs[amua.curMaildir].path, true) if err != nil { return err } amua.knownMaildirs[amua.curMaildir].maildir = md mdv := &MaildirView{md: md} amua.curMaildirView = mdv v.SetCursor(0, 0) v.SetOrigin(0, 0) err = amua.curMaildirView.Draw(v) if err != nil { fmt.Fprintf(v, err.Error()) } drawSlider(amua, g) return nil }
func (mv *MaildirView) scroll(v *gocui.View, incr int) { xo, yo := v.Origin() x, y := v.Cursor() _, h := v.Size() str := fmt.Sprintf("0: %d, ", incr) if mv.cur+incr > len(mv.md.messages)-1 { incr = len(mv.md.messages) - 1 - mv.cur str += fmt.Sprintf("1: %d, ", incr) } if mv.cur+incr < 0 { incr = 0 - mv.cur str += fmt.Sprintf("2: %d, ", incr) } mv.cur += incr y += incr if y >= h || y < 0 { mv.curTop += incr if mv.curTop < 0 { mv.curTop = 0 } yo = yo + incr if yo < 0 { yo = 0 } v.SetOrigin(xo, yo) } if y < 0 { y = 0 } v.SetCursor(x, y) if false { xo, yo = v.Origin() x, y = v.Cursor() setStatus(fmt.Sprintf("%s origin=(%d), cursor=(%d), mv=(%d, %d)", str, yo, y, mv.cur, mv.curTop)) } }