ref: 9e028273a255c6e254a1627ece5a5fcac76b04f5
parent: f0b417480ed5554d0cebb6bd82c7a5c4dea8b002
author: penny <penny@limitedideas.org>
date: Tue Nov 4 16:55:43 EST 2025
yet more ports
--- a/commands.go
+++ b/commands.go
@@ -1062,7 +1062,53 @@
return cmd
}
+func (hc *Hellclient) threadcmd() cmder {+ cmd := &basiccmd{}+ cmd.hc = hc
+ cmd.bname = "thread"
+ cmd.bflags = free
+ cmd.doer = func(data *cmddata) string {+ hc.pause(true)
+ hc.page = &Page{disablereverse: true}+ getter := &ThreadStatusGetter{target: data.status, client: hc.client}+ hc.page.loader = &StatusPages{hc: hc, getter: getter}+ return hc.page.String()
+ }
+ return cmd
+}
+func (hc *Hellclient) pinnedcmd() cmder {+ cmd := &basiccmd{}+ cmd.hc = hc
+ cmd.bname = "pinned"
+ cmd.bflags = account | acc_resolve
+ cmd.doer = func(data *cmddata) string {+ hc.pause(true)
+ hc.page = &Page{}+ hc.page.itembuffer = new([]PageItem)
+ getter := &PinnedStatusGetter{client: hc.client, ID: data.account.ID}+ hc.page.loader = &StatusPages{hc: hc, getter: getter}+ return hc.page.String()
+ }
+ return cmd
+}
+
+func (hc *Hellclient) accountcmd() cmder {+ cmd := &basiccmd{}+ cmd.hc = hc
+ cmd.bname = "account"
+ cmd.bflags = account | acc_resolve
+ cmd.doer = func(data *cmddata) string {+ hc.pause(true)
+ hc.page = &Page{}+ hc.page.itembuffer = new([]PageItem)
+ getter := &AccountStatusGetter{client: hc.client, ID: data.account.ID}+ hc.page.loader = &StatusPages{hc: hc, getter: getter}+ return hc.page.String()
+ }
+ return cmd
+}
+
// Commmands are lazy evaluated in this order
// Single/two letter matches need to match the most common commands
func (hc *Hellclient) newCmdArray() []cmder {@@ -1080,17 +1126,19 @@
&reloadcmd{hc}, &profilecmd{hc, hc.cmdload},hc.publiccmd(),
+ hc.pagecmd(),
hc.parentcmd(),
+ hc.pinnedcmd(),
&dmcmd{hc},hc.downloadcmd(),
&helpcmd{hc}, &detachcmd{hc},+ hc.accountcmd(),
&attachcmd{hc}, &statscmd{hc},hc.versioncmd(),
hc.prevcmd(),
hc.nextcmd(),
- hc.pagecmd(),
hc.bookmarkscmd(),
hc.readcmd(),
hc.noticecmd(),
@@ -1105,6 +1153,7 @@
hc.mediacmd("view", &hc.preferences.ImageViewer), hc.mediacmd("import", &hc.preferences.MediaImport),hc.editcmd(),
+ hc.threadcmd(),
}
return cmdarray
--- a/main.go
+++ b/main.go
@@ -6,7 +6,6 @@
"strings"
mastodon "codeberg.org/penny64/hellclient-go-mastodon"
- "github.com/k3a/html2text"
)
func main() {@@ -118,83 +117,6 @@
//Commands require status indexes
switch command {- case "edit":
- if content == "" || content == " " {- if (postItem == nil) || postItem.Account.ID != hc.currentuser.ID {- fmt.Printf("cannot edit other's statuses!\n")- return
- }
- fixedHTML, err := prepareForEdit(postItem)
- if err != nil {- fmt.Printf("Error loading post HTML: %s\n", err)- return
- }
- rl.SetDefault(fmt.Sprintf("/edit %v %v", index, html2text.HTML2TextWithOptions(fixedHTML, html2text.WithUnixLineBreaks())))- return
- }
- var MediaIDs []mastodon.ID
- for _, media := range postItem.MediaAttachments {- MediaIDs = append(MediaIDs, media.ID)
- }
- toot := &mastodon.Toot{- Status: content,
- MediaIDs: MediaIDs,
- Sensitive: postItem.Sensitive,
- SpoilerText: postItem.SpoilerText,
- Visibility: postItem.Visibility,
- Language: postItem.Language,
- }
- if postItem.InReplyToID != nil {- id := mastodon.ID(postItem.InReplyToID.(string))
- toot.InReplyToID = id
- }
- editfunc := func() {- _, err = client.UpdateStatus(context.Background(), toot, postItem.ID)
- if err != nil {- fmt.Println(err)
- return
- }
- }
- hc.dispatchAnon(editfunc).Wait()
- return
- case "thread":
- hc.pause(true)
- hc.page = &Page{disablereverse: true}- getter := &ThreadStatusGetter{target: postItem, client: hc.client}- hc.page.loader = &StatusPages{hc: hc, getter: getter}- fmt.Print(hc.page.String())
- return
- case "pinned":
- var account *mastodon.Account
- if foundindex || index == "" {- account = &postItem.Account
- } else {- account = hc.resolveAccount(index)
- if account == nil {- return
- }
- }
-
- hc.pause(true)
- hc.page = &Page{}- hc.page.itembuffer = new([]PageItem)
- getter := &PinnedStatusGetter{client: hc.client, ID: account.ID}- hc.page.loader = &StatusPages{hc: hc, getter: getter}- fmt.Print(hc.page.String())
- return
- case "account":
- account := accByNameOrRef()
- if account == nil {- fmt.Printf("Account lookup failed.\n")- return
- }
- hc.pause(true)
- hc.page = &Page{}- hc.page.itembuffer = new([]PageItem)
- getter := &AccountStatusGetter{client: hc.client, ID: account.ID}- hc.page.loader = &StatusPages{hc: hc, getter: getter}- fmt.Print(hc.page.String())
- return
case "unfollow":
account := accByNameOrRef()
if account == nil {--
⑨