home *** CD-ROM | disk | FTP | other *** search
/ SGI Desktop Special Edition 1.1 / SGI Desktop Special Edition 1.1.iso / dist / mmail.idb / usr / lib / Zmail / zmail.menus.z / zmail.menus
Encoding:
Text File  |  1995-11-13  |  16.8 KB  |  758 lines

  1. # Copyright 1994 Z-Code Software, a division of Network Computing Devices, Inc.
  2. # All rights reserved.
  3.  
  4. function zmenu_fwd_add_comments () {
  5.     ask -i __comment "$__ask_add_comment"
  6.     if $status == 0
  7.         mail -C "$__comment" -resend
  8.     unset __comment
  9.     endif
  10. }
  11.  
  12. function zmenu_send_and_close () {
  13.     compcmd send
  14.     if $status == 0
  15.         dialog -close
  16.     endif
  17. }
  18.  
  19. function zmenu_insert_file () {
  20.     ask -f __file "$__ask_file_read"
  21.     if $status == 0
  22.     if $1 == replace
  23.         textedit set-item compose-body
  24.         textedit delete-all
  25.     endif
  26.     compcmd insert-file "$__file"
  27.         unset __file
  28.     endif
  29. }
  30.  
  31. function zmenu_insert_indented_file () {
  32.     ask -f __file "$__ask_file_read"
  33.     if $status == 0
  34.         set __pfx=''
  35.         if $?indent_str != 0
  36.             set __pfx="$indent_str"
  37.         endif
  38.         if "x$__pfx" == "x"
  39.             ask -i __pfx "$__ask_indent_with"
  40.         else
  41.             ask -i __pfx -d "$__pfx" "$__ask_indent_with"
  42.         endif
  43.     if $status == 0
  44.         if $1 == replace
  45.         textedit set-item compose-body
  46.         textedit delete-all
  47.         endif
  48.             textedit set-item compose-body
  49.         textedit get-cursor-position __indentstart
  50.             compcmd insert-file "$__file"
  51.             textedit get-cursor-position __indentend
  52.         textedit set-selection-position $__indentstart $__indentend
  53.         textedit indent "$__pfx"
  54.     endif
  55.         unset __file __pfx
  56.     endif
  57. }
  58.  
  59. function clear_output () {
  60.     textedit set-item output-text
  61.     textedit delete-all
  62. }
  63.  
  64. set __save_file=''
  65. function zmenu_save_to_file () {
  66.     if "x$__save_file" != "x"
  67.         ask -f __save_file -d "$__save_file" "$__ask_file_write"
  68.     else
  69.     ask -f __save_file "$__ask_file_write"
  70.     endif
  71.     if $status == 0
  72.         compcmd save-to-file "$__save_file"
  73.     if $status == 0
  74.         eval echo "$__info_saved_to"
  75.     endif
  76.     endif
  77. }
  78.  
  79. set __draft_file=''
  80. function zmenu_save_draft () {
  81.     if "x$__draft_file" != "x"
  82.         ask -f __draft_file -d "$__draft_file" "$__ask_draft_write"
  83.     else
  84.     ask -f __draft_file "$__ask_draft_write"
  85.     endif
  86.     if $status == 0
  87.         compcmd save-draft "$__draft_file"
  88.     if $status == 0
  89.         eval echo "$__info_saved_draft"
  90.     endif
  91.     endif
  92. }
  93.  
  94. function zmenu_next_ref_subj () {
  95.     msg_list . | set __msgno
  96.     set __subj="$[%S]"
  97.     if "x$__subj" == "x"
  98.         eval error $__err_no_subject
  99.     unset __msgno __subj
  100.     return
  101.     endif
  102.     search +2 -1 -r .-$ -s -n -e "$__subj"$
  103.     if "x$output" == "x"
  104.         eval error "$__err_no_next_about"
  105.     else
  106.     if "$output" == "$__msgno"
  107.         eval error "$__err_no_next_about"
  108.         unset __msgno __subj
  109.     else
  110.         msg_list - $output | display
  111.     endif
  112.     endif
  113.     # unset __msgno __subj
  114. }
  115.  
  116. function zmenu_prev_ref_subj () {
  117.     msg_list . | set __msgno
  118.     set __subj="$[%S]"
  119.     if "x$__subj" == "x"
  120.         eval error "$__err_no_subject"
  121.     unset __msgno __subj
  122.     return
  123.     endif
  124.     search -2 +1 -r ^-. -s -n -e "$__subj"$
  125.     if "x$output" == "x"
  126.         eval error "$__err_no_prev_about"
  127.     else
  128.     if $output == $__msgno
  129.         eval error "$__err_no_prev_about"
  130.     else
  131.         msg_list - $output | display
  132.     endif
  133.     endif
  134.     # unset __msgno __subj
  135. }
  136.  
  137. function zmenu_all_ref_subj () {
  138.     msg_list . | set __msgno
  139.     if "x$[%S]" == "x"
  140.         eval error "$__err_no_subject"
  141.     unset __msgno
  142.     return
  143.     endif
  144.     unset __msgno
  145.     search -s -n -e "$[%S]"$
  146. }
  147.  
  148. function zmenu_next_ref_auth () {
  149.     msg_list . | set __msgno
  150.     set __auth="$[%a]"
  151.     search +2 -1 -r .-$ -n -f "$__auth"
  152.     if $output == $__msgno
  153.         eval error "$__err_no_next_from"
  154.     else
  155.     msg_list - $output | display
  156.     endif
  157.     # unset __msgno __auth
  158. }
  159.  
  160. function zmenu_prev_ref_auth () {
  161.     msg_list . | set __msgno
  162.     set __auth="$[%a]"
  163.     search -2 +1 -r ^-. -n -f "$__auth"
  164.     if $output == $__msgno
  165.         eval error "$__err_no_prev_from"
  166.     else
  167.     msg_list - $output | display
  168.     endif
  169.     # unset __msgno __auth
  170. }
  171.  
  172. function zmenu_all_ref_auth () {
  173.     search -n -f "$[%a]"
  174. }
  175.  
  176. function zmenu_next_ref_msgid () {
  177.     msg_list . | set __msgno
  178.     set __mid="$[%i]"
  179.     if "x$__mid" == "x"
  180.         eval error "$__err_no_message_id"
  181.     unset __msgno __mid
  182.     return
  183.     endif
  184.     search +1 -r .-$ -h references,in-reply-to -n -e "$__mid"
  185.     if "x$output" == x
  186.         error "$__err_no_next_ref"
  187.     else
  188.     msg_list - $output | display
  189.     endif
  190.     # unset __msgno __mid
  191. }
  192.  
  193. function zmenu_prev_ref_msgid () {
  194.     if "x$[%?references?]" == x
  195.         error "$__err_no_prev_ref"
  196.     return
  197.     endif
  198.     set __msgidlist=
  199.     foreach i ($[%?references?]) 'set __msgidlist += $i"\|"'
  200.     set __msgidlist += NONEXISTENT
  201.     search -1 -r ^-. -h message-id "$__msgidlist"
  202.     if "x$output" == x
  203.         error "$__err_no_prev_ref"
  204.     else
  205.     msg_list - $output | display
  206.     endif
  207. }
  208.  
  209. function zmenu_all_ref_msgid () {
  210.     msg_list . | set __msgno
  211.     set __mid="$[%i]"
  212.     if "x$__mid" == "x"
  213.         eval error "$__err_no_message_id"
  214.     unset __msgno __mid
  215.     return
  216.     endif
  217.     unset __msgno __mid
  218.     search -n -h references,in-reply-to -e "$[%i]"
  219.     msg_list . $output
  220. }
  221.  
  222. function zmenu_all_ref_thread () {
  223.     set __mid="$[%i]" __ref="$[%?references?]"
  224.     if "x$__mid" != "x"
  225.     set __msgidlist="$__mid"'\|'
  226.     endif
  227.     if x"$__ref" != x
  228.     foreach i ($[%?references?]) 'set __msgidlist += $i"\|"'
  229.     endif
  230.     set __msgidlist += NONEXISTENT
  231.     if "$__msgidlist" == NONEXISTENT
  232.         eval error "$__err_no_message_id"
  233.     unset __ref __mid __msgidlist
  234.     return
  235.     endif
  236.     search -h message-id,references "$__msgidlist"
  237. }
  238.  
  239. function zmenu_all_ref_mark () {
  240.     msg_list `:m`
  241. }
  242.  
  243. function zmenu_all_ref_priority () {
  244.     if "x$[%?priority?]" == "x"
  245.     msg_list . | set __msgno
  246.     error "$__err_no_priority"
  247.     unset __msgno
  248.     return
  249.     endif
  250.     search -p "$[%?priority?]"
  251. }
  252.  
  253. function zmenu_next_ref_mark () {
  254.     msg_list .-$ {.} | :m
  255.     if "x$output" == x
  256.     error "$__err_no_next_mark"
  257.     else
  258.     search +1 -r $output | display
  259.     endif
  260. }
  261.  
  262. function zmenu_prev_ref_mark () {
  263.     msg_list ^-. {.} | :m
  264.     if "x$output" == x
  265.     error "$__err_no_prev_mark"
  266.     else
  267.     search -1 -r $output | display
  268.     endif
  269. }
  270.  
  271. function zmenu_next_ref_priority () {
  272.     if "x$[%?priority?]" == "x"
  273.     msg_list . | set __msgno
  274.     eval error "$__err_no_priority"
  275.     unset __msgno
  276.     return
  277.     endif
  278.     set __pri="$[%?priority?]"
  279.     search -r .-$ {.} -p $__pri +1
  280.     if "x$output" == x
  281.     eval error "$__err_no_next_priority"
  282.     else
  283.     display $output
  284.     endif
  285. }
  286.  
  287. function zmenu_prev_ref_priority () {
  288.     if "x$[%?priority?]" == "x"
  289.     msg_list . | set __msgno
  290.     eval error "$__err_no_priority"
  291.     unset __msgno
  292.     return
  293.     endif
  294.     set __pri="$[%?priority?]"
  295.     search -r ^-. {.} -p $__pri -1
  296.     if "x$output" == x
  297.     eval error "$__err_no_prev_priority"
  298.     else
  299.     display $output
  300.     endif
  301. }
  302.  
  303. function zmenu_all_ref_priority () {
  304.     if "x$[%?priority?]" == "x"
  305.     msg_list . | set __msgno
  306.     eval error "$__err_no_priority"
  307.     unset __msgno
  308.     return
  309.     endif
  310.     search -p $[%?priority?]
  311. }
  312.  
  313. function zmenu_msg_pri_other () {
  314.     ask -input __pri "$__ask_pri_other"
  315.     if $status == 0
  316.     mark -"$__pri"
  317.     endif
  318. }
  319.  
  320. function zmenu_comp_pri_other () {
  321.     ask -input __pri "$__ask_pri_other"
  322.     if $status == 0
  323.     set compose_state += pri_"$__pri"
  324.     endif
  325. }
  326.  
  327. function zmenu_comp_body_textedit () {
  328.     textedit set-item compose-body
  329.     textedit $*
  330. }
  331.  
  332. function zmenu_comp_body_textcopy () {
  333.     textedit set-item compose-body
  334.     textedit get-selection-position __start __end
  335.     if $__start == $__end
  336.     if ! $?compose_state:(edit_headers)
  337.         error -p "$__err_no_selection"
  338.     else
  339.         zmenu_comp_header_textcopy $*
  340.     endif
  341.     else
  342.     textedit $*
  343.     endif
  344. }
  345.  
  346. function zmenu_comp_body_paste () {
  347.     textedit set-item compose-body
  348.     textedit paste-replace
  349. }
  350.  
  351. function zmenu_comp_header_textcopy () {
  352.     textedit set-item compose-header
  353.     textedit get-selection-position __start __end
  354.     if $__start == $__end
  355.     error -p "$__err_no_selection"
  356.     else
  357.     textedit $*
  358.     endif
  359. }
  360.  
  361. function zmenu_msg_body_textedit () {
  362.     textedit set-item message-body
  363.     textedit $*
  364. }
  365.  
  366. function zmenu_msg_body_textcopy () {
  367.     textedit set-item message-body
  368.     textedit get-selection-position __start __end
  369.     if $__start == $__end
  370.     zmenu_msg_header_textcopy $*
  371.     else
  372.     textedit $*
  373.     endif
  374. }
  375.  
  376. function zmenu_msg_header_textcopy () {
  377.     textedit set-item message-header
  378.     textedit get-selection-position __start __end
  379.     if $__start == $__end
  380.     error -p "$__err_no_selection"
  381.     else
  382.     textedit $*
  383.     endif
  384. }
  385.  
  386. set __pipe_cmd=''
  387. function zmenu_comp_pipe () {
  388.     textedit set-item compose-body
  389.     textedit get-selection-position __start __end
  390.     if "x$__pipe_cmd" != "x"
  391.         ask -i __pipe_cmd -d "$__pipe_cmd" "$__ask_pipe_to_shell"
  392.     else
  393.         ask -i __pipe_cmd "$__ask_pipe_to_shell"
  394.     endif
  395.     if $status == 0
  396.         textedit set-item compose-body
  397.     #if $__start == $__end
  398.     #    textedit select-all
  399.     #else
  400.     textedit set-selection-position $__start $__end
  401.     #endif
  402.     textedit pipe "$__pipe_cmd"
  403.     endif
  404. }
  405.  
  406. function zmenu_comp_indent () {
  407.     set __pfx=''
  408.     textedit set-item compose-body
  409.     textedit get-selection-position __indentstart __indentend
  410.     if $?indent_str != 0
  411.         eval -h set __pfx="'$indent_str'"
  412.     endif
  413.     if "x$__pfx" == "x"
  414.         ask -i __pfx "$__ask_indent_with"
  415.     else
  416.         ask -i __pfx -d "$__pfx" "$__ask_indent_with"
  417.     endif
  418.     if $status == 0
  419.     textedit set-selection-position $__indentstart $__indentend
  420.     textedit indent "$__pfx"
  421.         unset __pfx
  422.     endif
  423. }
  424.  
  425. function zmenu_comp_done () {
  426.     if $?compose_state:(active) == 0
  427.     dialog -close
  428.     return
  429.     endif
  430.     ask -m -d "$__choice_cc_send" -i __action "$__ask_comp_cancel" "$__choice_cc_continue" "$__choice_cc_discard" "$__choice_cc_send"
  431.     if $status == 0
  432.     if "x$__action" == "x$__choice_cc_send"
  433.         compcmd send
  434.     endif
  435.     if "x$__action" == "x$__choice_cc_discard"
  436.         compcmd quit
  437.     endif
  438.     # Used "Done".  If not autodismiss, close window anyway.
  439.     if $?autodismiss
  440.         # Check for either set to nothing, or set to "compose"
  441.         # Have to do this so we don't close the wrong dialog!
  442.         if $?autodismiss:(compose)
  443.         return 0
  444.         endif
  445.         if X"$autodismiss" == X
  446.         return 0
  447.         endif
  448.     endif
  449.     if $?compose_state:(active) == 0
  450.         dialog -close
  451.     endif
  452.     endif
  453. }
  454.  
  455. function zmenu_set_tmpdir() {
  456.     unset __tmpdir
  457.     if $?tmpdir
  458.     if "x$tmpdir" != x
  459.         set __tmpdir = "$tmpdir"
  460.         return
  461.     endif
  462.     endif
  463.     set __tmpdir = /tmp
  464. }
  465.  
  466. function zmenu_comp_print () {
  467.     zmenu_set_tmpdir
  468.     ## To print both message and headers:
  469.     # if $compose_state:(edit_headers)
  470.     #    textedit set-item compose-header
  471.     #    textedit save-to-file $__tmpdir/zmsg$$    # Write headers
  472.     #    compcmd save-to-file $__tmpdir/zmsg$$    # Append body
  473.     # else
  474.     compcmd write-to-file $__tmpdir/zmsg$$        # Write body
  475.     # endif
  476.     ##
  477.     if $status != 0
  478.     return
  479.     endif
  480.     lpr $__tmpdir/zmsg$$
  481.     remove -f $__tmpdir/zmsg$$
  482. }
  483.  
  484. function zmenu_toolbar_include() {
  485.     if !$compose_state:(active)
  486.     error "$__err_no_compose"
  487.     return
  488.     endif
  489.     ask -m -i __userChoice "$__ask_include" "$__choice_message" "$__choice_file"
  490.     if $status != 0
  491.         return -1
  492.     endif 
  493.     if "$__userChoice" == "$__choice_file"
  494.         ask -f __userChoice2 "$__ask_file_include"
  495.         if $status != 0
  496.             return -1
  497.         endif
  498.         compcmd insert-file "$__userChoice2"
  499.     else
  500.         compcmd include-message
  501.     endif
  502. }
  503.  
  504. function zmenu_toolbar_send() {
  505.     if $?compose_state:(active)
  506.     compcmd send
  507.     else
  508.     error "$__err_no_compose"
  509.     endif
  510. }
  511.  
  512.  
  513. function zmenu_include_message_at_cursor() {
  514.     textedit set-item compose-body
  515.     textedit text-deselect
  516.     textedit text-open-line
  517.     textedit text-forward-char
  518.     textedit text-get-cursor-position __current_cursor
  519.     textedit text-end
  520.     textedit text-get-cursor-position __old_end_of_file
  521.     compcmd include-message
  522.     if $status != 0
  523.     textedit text-set-cursor-position $__current_cursor
  524.     textedit text-delete-backward-char
  525.     return
  526.     endif
  527.     textedit text-set-cursor-position $__old_end_of_file
  528.     textedit text-start-selecting
  529.     textedit text-end
  530.     textedit text-cut-selection
  531.     textedit text-deselect
  532.     textedit text-set-cursor-position $__current_cursor
  533.     textedit text-paste
  534. }
  535.  
  536. function zbutton_read () {
  537.     msg_list | set __msg_list
  538.     if "x$__msg_list" !~ "x*[-,]*"
  539.     type
  540.     else
  541.     error -p $__err_read_multiple
  542.     endif
  543. }
  544.  
  545. function zbutton_reuse () {
  546.     zmenu_set_tmpdir
  547.     textedit set-item compose-body
  548.     textedit save-to-file $__tmpdir/zmsg$$
  549.     if $status != 0
  550.         return
  551.     endif
  552.     textedit set-item subject-header-field
  553.     textedit get-text __subj
  554.     # if the above operation did not succeed, Edit Headers must be set
  555.     if $status == 0
  556.         if "x$__subj" == "x"
  557.             mail -edit_hdrs! -file $__tmpdir/zmsg$$
  558.         else
  559.             mail -edit_hdrs! -subject "$__subj" -file $__tmpdir/zmsg$$
  560.         endif
  561.     else
  562.         mail -edit_hdrs -draft $__tmpdir/zmsg$$
  563.     endif   
  564.     remove -f $__tmpdir/zmsg$$
  565. }
  566.  
  567. function zmenu_edit_signature () {
  568.     set __sigstrname = ~/.sigstring
  569.     set __sigfilename = ~/.signature
  570.     if $?autosign
  571.     if "X$autosign" =~ 'X\\*'
  572.         sh echo "$autosign" > $__sigstrname
  573.         set autosign = $__sigstrname
  574.     else
  575.         if "X$autosign" =~ 'X\[*\]'
  576.         sh echo "$autosign" > $__sigstrname
  577.         set autosign = $__sigstrname
  578.         endif
  579.     endif
  580.     endif
  581.     if ! $?autosign
  582.     set autosign = $__sigfilename
  583.     endif
  584.     if X"$autosign" == X
  585.     set __sigfile = $__sigfilename
  586.     else
  587.     set __sigfile = "$autosign"
  588.     endif
  589.     if ! -e $__sigfile
  590.     if $?realname
  591.         sh echo "$realname" > "$__sigfile"
  592.     else
  593.         sh echo > "$__sigfile"
  594.     endif
  595.     endif
  596.     page -e "$__sigfile"
  597.     unset __sigfile __sigstrname __sigfilename
  598. }
  599.  
  600. function zmenu_view_only_selected () {
  601.     msg_list | set __mlist
  602.     flags +H *{$__mlist}
  603.     unset __mlist
  604.     msg_list .
  605. }
  606.  
  607. function zmenu_unhide_all () {
  608.     flags -H *
  609.     unset hidden
  610.     msg_list .
  611. }
  612.  
  613. function zmenu_paste_indented () {
  614.     set __pfx=''
  615.     if $?indent_str != 0
  616.         set __pfx="$indent_str"
  617.     endif
  618.     if "x$__pfx" == "x"
  619.         ask -i __pfx "$__ask_indent_with"
  620.     else
  621.         ask -i __pfx -d "$__pfx" "$__ask_indent_with"
  622.     endif
  623.     if $status == 0
  624.         textedit set-item compose-body
  625.     textedit get-cursor-position __indentstart
  626.     textedit paste
  627.         textedit get-cursor-position __indentend
  628.     if x$__indentstart == x$__indentend
  629.         error -p "$__err_clipboard_empty"
  630.     else
  631.         textedit set-selection-position $__indentstart $__indentend
  632.         textedit indent "$__pfx"
  633.     endif
  634.     endif
  635.     unset __pfx
  636. }
  637.  
  638. function zmenu_paste_fill () {
  639.     textedit set-item compose-body
  640.     textedit get-cursor-position __indentstart
  641.     textedit paste
  642.     textedit get-cursor-position __indentend
  643.     if x$__indentstart == x$__indentend
  644.     error -p "$__err_clipboard_empty"
  645.     else
  646.     textedit set-selection-position $__indentstart $__indentend
  647.     textedit fill
  648.     endif
  649. }
  650.  
  651. function zmenu_remove_folder () {
  652.     ask -f __file -d +/ "$__ask_folder_remove"
  653.     if $status == 0
  654.     rmfolder "$__file"
  655.         unset __file
  656.     endif
  657. }
  658.  
  659. function zmenu_merge_folder () {
  660.     ask -f __file -d +/ "$__ask_folder_merge"
  661.     if $status == 0
  662.     merge "$__file"
  663.         unset __file
  664.     endif
  665. }
  666.  
  667. function zmenu_sort_by () {
  668.     sort $*
  669.     if $?main_state:(folder_has_messages)
  670.     redraw .
  671.     endif
  672. }
  673.  
  674. function zmenu_full_headers () {
  675.     if ! $?display_headers
  676.     set display_headers = unignored
  677.     endif
  678.     display
  679. }
  680.  
  681. function capture_name() {
  682.     zmenu_set_tmpdir
  683.     set "$1" = "$__tmpdir/mail-capture-$$-$__media_counter"
  684.     arith __media_counter = "$__media_counter" + 1
  685. }
  686.  
  687. function capture_create() {
  688.     sh "rm -f $1"
  689.     sh "capture -fixedMode -$2 -nofork -fixedFile $1"
  690. }
  691.  
  692. function capture_attach() {
  693.     if -e "$1"
  694.     compcmd attach-file "$1" "$2"
  695.     endif
  696. }
  697.  
  698. function capture_tiff() {
  699.     if -e "$1"
  700.     capture_name   __tiff_file
  701.     sh "imgcopy -ftiff $1 $__tiff_file"
  702.     sh "rm -f $1 &"
  703.     capture_attach "$__tiff_file" image/tiff
  704.     endif
  705. }
  706.  
  707. function capture_video() {
  708.     capture_name    __capture_file
  709.     capture_create "$__capture_file" "video -movieCompression MVC2"
  710.     capture_attach "$__capture_file" video/x-sgi-movie
  711. }
  712.  
  713.  
  714. function capture_still() {
  715.     capture_name     __capture_file
  716.     capture_create "$__capture_file" still
  717.     capture_tiff   "$__capture_file"
  718. }
  719.  
  720. function capture_audio() {
  721.     sh apanel -nodisplay -source mic &
  722.     capture_name     __capture_file
  723.     capture_create "$__capture_file" audio
  724.  
  725.     if -e "$__capture_file"
  726.     capture_name __mulaw_file
  727.     set __mulaw_file=$__mulaw_file.au
  728.     sh "sfconvert $__capture_file $__mulaw_file -quiet -outputraw channels 1 rate 8000 mulaw > /dev/null"
  729.     sh "rm -f $__capture_file &"
  730.     capture_attach "$__mulaw_file" audio/basic
  731.     endif
  732. }
  733.  
  734. function capture_screen() {
  735.     capture_name     __capture_file
  736.     capture_create "$__capture_file" snapshot
  737.     capture_tiff   "$__capture_file"
  738. }
  739.  
  740. function exit_hook() {
  741.     zmenu_set_tmpdir
  742.     sh "rm -f $tmpdir/mail-capture-$$-* &"
  743. }
  744.  
  745. set __media_counter=0
  746.  
  747.  
  748. button -name Read zbutton_read
  749. button -name Delete delete
  750. button -name Undelete undelete
  751. button -name Save dialog Save
  752. button -name Print 'lpr'
  753. button -n -name Compose mail
  754. button -name Reply replysender
  755. button -name Forward 'mail -f'
  756. button -n -name Update update
  757.  
  758.