1 //: Extend 'new' to handle a unicode string literal argument or 'text'. 2 3 //: A Mu text is an address to an array of characters. 4 :(before "End Mu Types Initialization") 5 put(Type_abbreviations, "text", new_type_tree("&:@:character")); 6 7 :(scenario new_string) 8 def main [ 9 10:text <- new [abc def] 10 20:char <- index *10:text, 5 11 ] 12 # number code for 'e' 13 +mem: storing 101 in location 20 14 15 :(scenario new_string_handles_unicode) 16 def main [ 17 10:text <- new [a«c] 18 20:num <- length *10:text 19 21:char <- index *10:text, 1 20 ] 21 +mem: storing 3 in location 20 22 # unicode forpackage msgview import ( "errors" "fmt" "strconv" "git.sr.ht/~sircmpwn/aerc/widgets" ) type NextPrevPart struct{} func init() { register(NextPrevPart{}) } func (_ NextPrevPart) Aliases() []string { return []string{"next-part", "prev-part"} } func (_ NextPrevPart) Complete(aerc *widgets.Aerc, args []string) []string { return nil } func (_ NextPrevPart) Execute(aerc *widgets.Aerc, args []string) error { if len(args) > 2 { return nextPrevPartUsage(args[0]) } var ( n int = 1 err error ) if len(args) > 1 { n, err = strconv.Atoi(args[1]) if err != nil { return nextPrevPartUsage(args[0]) } } mv, _ := aerc.SelectedTab().(*widgets.MessageViewer) for ; n > 0; n-- { if args[0] == "prev-part" { mv.PreviousPart() } else { mv.NextPart() } } return nil } func nextPrevPartUsage(cmd string) error { return errors.New(fmt.Sprintf("Usage: %s [n]", cmd)) }