Fuzion Logo
fuzion-lang.dev — The Fuzion Language Portal
JavaScript seems to be disabled. Functionality is limited.

terminal.fz


# This file is part of the Fuzion language implementation.
#
# The Fuzion language implementation is free software: you can redistribute it
# and/or modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation, version 3 of the License.
#
# The Fuzion language implementation is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License along with The
# Fuzion language implementation.  If not, see <https://www.gnu.org/licenses/>.


# -----------------------------------------------------------------------
#
#  Tokiwa Software GmbH, Germany
#
#  Source code of Fuzion terminal module feature terminal
#
#  Author: Fridtjof Siebert (siebert@tokiwa.software)
#
# -----------------------------------------------------------------------

# terminal -- unit type feature providing ANSI terminal control codes
#
# Terminal provides constants to modify the text output style and color.
#
# Thanks to Bruno Penteado who collected these codes at
#
#   https://gist.github.com/bcap/5682077#file-terminal-control-sh
#
# but this also includes input from
#
#   https://en.wikipedia.org/wiki/ANSI_escape_code
#
# and
#
#   man console_codes
#
public terminal is

  # control sequence introducer
  #
  public csi String => (String.from [u8 0o033]) + "[";

  # raw codes not surrounded by 'csi' and "m"
  #
  public raw is
    public reset                                String => "0"
    public bold                                 String => "1"
    public dime                                 String => "2"
    public italic                               String => "3"
    public underline                            String => "4"
    public slow_blink                           String => "5"
    public rapid_blink                          String => "6"
    public reverse                              String => "7"
    public crossed_out                          String => "8"
    public font_0                               String => "10"
    public font_1                               String => "11"
    public font_2                               String => "12"
    public font_3                               String => "13"
    public font_4                               String => "14"
    public font_5                               String => "15"
    public font_6                               String => "16"
    public font_7                               String => "17"
    public font_8                               String => "18"
    public font_9                               String => "19"
    public fraktur                              String => "20"
    public double_underline                     String => "21"
    public normal_intensity                     String => "22"
    public neither_italic_nor_blackletter       String => "23"
    public not_underlined                       String => "24"
    public not_blinking                         String => "25"
    public proportional_spacing                 String => "26"
    public not_reversed                         String => "27"
    public reveal                               String => "28"
    public not_crossed_out                      String => "29"
    public black                                String => "30"
    public red                                  String => "31"
    public green                                String => "32"
    public yellow                               String => "33"
    public blue                                 String => "34"
    public purple                               String => "35"
    public cyan                                 String => "36"
    public white                                String => "37"
    public set_foreground_color                 String => "38"  # next arguments are 5;n or 2;r;g;b
    public regular_color                        String => "39"
    public background_black                     String => "40"
    public background_red                       String => "41"
    public background_green                     String => "42"
    public background_yellow                    String => "43"
    public background_blue                      String => "44"
    public background_purple                    String => "45"
    public background_cyan                      String => "46"
    public background_white                     String => "47"
    public set_background_set_color             String => "48"  # next arguments are 5;n or 2;r;g;b
    public background_regular_color             String => "49"
    public disable_proportional_spacing         String => "50"
    public framed                               String => "51"
    public encircled                            String => "52"
    public overlined                            String => "53"
    public neither_framed_nor_encircled         String => "54"
    public not_overlined                        String => "55"
    # 57
    # 56
    public set_underline_color                  String => "58"  # next arguments are 5;n or 2;r;g;b
    public default_underline_color              String => "59"
    public ideogram_underline                   String => "60"
    public ideogram_double_underline            String => "61"
    public ideogram_overline                    String => "62"
    public ideogram_double_overline             String => "63"
    public ideogram_stress_marking              String => "64"
    public no_ideogram_attributes               String => "65"
    # 66..72
    public superscript                          String => "73"
    public subscript                            String => "74"
    public neither_superscript_nor_subscript    String => "75"
    # 76..89
    public bright_black                         String => "90"
    public bright_red                           String => "91"
    public bright_green                         String => "92"
    public bright_yellow                        String => "93"
    public bright_blue                          String => "94"
    public bright_purple                        String => "95"
    public bright_cyan                          String => "96"
    public bright_white                         String => "97"
    # 98
    # 99
    public background_bright_black              String => "100"
    public background_bright_red                String => "101"
    public background_bright_green              String => "102"
    public background_bright_yellow             String => "103"
    public background_bright_blue               String => "104"
    public background_bright_purple             String => "105"
    public background_bright_cyan               String => "106"
    public background_bright_white              String => "107"

    public clear_line                           String => "2K"
    public erase_end_of_line                    String => "K"
    public clear_screen                         String => "2J"
    public put_cursor(line, column i32)         String => "{line};{column}H" # or "{line};{column}f"
    public cursor_up(n i32)                     String => "{n}A"
    public cursor_down(n i32)                   String => "{n}B"
    public cursor_forward(n i32)                String => "{n}C"
    public cursor_backward(n i32)               String => "{n}D"
    public save_cursor_pos                      String => "s"
    public restore_cursor_pos                   String => "u"


  public reset                                  String => csi + raw.reset + "m"
  public bold                                   String => csi + raw.bold + "m"
  public dime                                   String => csi + raw.dime + "m"
  public italic                                 String => csi + raw.italic + "m"
  public underline                              String => csi + raw.underline + "m"
  public slow_blink                             String => csi + raw.slow_blink + "m"
  public rapid_blink                            String => csi + raw.rapid_blink + "m"
  public reverse                                String => csi + raw.reverse + "m"
  public crossed_out                            String => csi + raw.crossed_out + "m"
  public font_0                                 String => csi + raw.font_0 + "m"
  public font_1                                 String => csi + raw.font_1 + "m"
  public font_2                                 String => csi + raw.font_2 + "m"
  public font_3                                 String => csi + raw.font_3 + "m"
  public font_4                                 String => csi + raw.font_4 + "m"
  public font_5                                 String => csi + raw.font_5 + "m"
  public font_6                                 String => csi + raw.font_6 + "m"
  public font_7                                 String => csi + raw.font_7 + "m"
  public font_8                                 String => csi + raw.font_8 + "m"
  public font_9                                 String => csi + raw.font_9 + "m"
  public fraktur                                String => csi + raw.fraktur + "m"
  public double_underline                       String => csi + raw.double_underline + "m"
  public normal_intensity                       String => csi + raw.normal_intensity + "m"
  public neither_italic_nor_blackletter         String => csi + raw.neither_italic_nor_blackletter + "m"
  public not_underlined                         String => csi + raw.not_underlined + "m"
  public not_blinking                           String => csi + raw.not_blinking + "m"
  public proportional_spacing                   String => csi + raw.proportional_spacing + "m"
  public not_reversed                           String => csi + raw.not_reversed + "m"
  public reveal                                 String => csi + raw.reveal + "m"
  public not_crossed_out                        String => csi + raw.not_crossed_out + "m"
  public black                                  String => csi + raw.black + "m"
  public red                                    String => csi + raw.red + "m"
  public green                                  String => csi + raw.green + "m"
  public yellow                                 String => csi + raw.yellow + "m"
  public blue                                   String => csi + raw.blue + "m"
  public purple                                 String => csi + raw.purple + "m"
  public cyan                                   String => csi + raw.cyan + "m"
  public white                                  String => csi + raw.white + "m"
  public set_foreground_color                   String => csi + raw.set_foreground_color + "m"
  public regular_color                          String => csi + raw.regular_color + "m"
  public background_black                       String => csi + raw.background_black + "m"
  public background_red                         String => csi + raw.background_red + "m"
  public background_green                       String => csi + raw.background_green + "m"
  public background_yellow                      String => csi + raw.background_yellow + "m"
  public background_blue                        String => csi + raw.background_blue + "m"
  public background_purple                      String => csi + raw.background_purple + "m"
  public background_cyan                        String => csi + raw.background_cyan + "m"
  public background_white                       String => csi + raw.background_white + "m"
  public set_background_set_color               String => csi + raw.set_background_set_color + "m"
  public background_regular_color               String => csi + raw.background_regular_color + "m"
  public disable_proportional_spacing           String => csi + raw.disable_proportional_spacing + "m"
  public framed                                 String => csi + raw.framed + "m"
  public encircled                              String => csi + raw.encircled + "m"
  public overlined                              String => csi + raw.overlined + "m"
  public neither_framed_nor_encircled           String => csi + raw.neither_framed_nor_encircled + "m"
  public not_overlined                          String => csi + raw.not_overlined + "m"
  # 57
  # 56
  public set_underline_color                    String => csi + raw.set_underline_color + "m"
  public default_underline_color                String => csi + raw.default_underline_color + "m"
  public ideogram_underline                     String => csi + raw.ideogram_underline + "m"
  public ideogram_double_underline              String => csi + raw.ideogram_double_underline + "m"
  public ideogram_overline                      String => csi + raw.ideogram_overline + "m"
  public ideogram_double_overline               String => csi + raw.ideogram_double_overline + "m"
  public ideogram_stress_marking                String => csi + raw.ideogram_stress_marking + "m"
  public no_ideogram_attributes                 String => csi + raw.no_ideogram_attributes + "m"
  # 66..72
  public superscript                            String => csi + raw.superscript + "m"
  public subscript                              String => csi + raw.subscript + "m"
  public neither_superscript_nor_subscript      String => csi + raw.neither_superscript_nor_subscript + "m"
  # 76..89
  public bright_black                           String => csi + raw.bright_black + "m"
  public bright_red                             String => csi + raw.bright_red + "m"
  public bright_green                           String => csi + raw.bright_green + "m"
  public bright_yellow                          String => csi + raw.bright_yellow + "m"
  public bright_blue                            String => csi + raw.bright_blue + "m"
  public bright_purple                          String => csi + raw.bright_purple + "m"
  public bright_cyan                            String => csi + raw.bright_cyan + "m"
  public bright_white                           String => csi + raw.bright_white + "m"
  # 98
  # 99
  public background_bright_black                String => csi + raw.background_bright_black + "m"
  public background_bright_red                  String => csi + raw.background_bright_red + "m"
  public background_bright_green                String => csi + raw.background_bright_green + "m"
  public background_bright_yellow               String => csi + raw.background_bright_yellow + "m"
  public background_bright_blue                 String => csi + raw.background_bright_blue + "m"
  public background_bright_purple               String => csi + raw.background_bright_purple + "m"
  public background_bright_cyan                 String => csi + raw.background_bright_cyan + "m"
  public background_bright_white                String => csi + raw.background_bright_white + "m"

  public reset_color                            String => regular_color + background_regular_color

  public clear_line                             String => csi + raw.clear_line
  public erase_end_of_line                      String => csi + raw.erase_end_of_line
  public clear_screen                           String => csi + raw.clear_screen
  public put_cursor(line, column i32)           String => csi + raw.put_cursor line column
  public cursor_up(n i32)                       String => csi + raw.cursor_up n
  public cursor_down(n i32)                     String => csi + raw.cursor_down n
  public cursor_forward(n i32)                  String => csi + raw.cursor_forward n
  public cursor_backward(n i32)                 String => csi + raw.cursor_backward n
  public save_cursor_pos                        String => csi + raw.save_cursor_pos
  public restore_cursor_pos                     String => csi + raw.restore_cursor_pos

public String.bold                              String => terminal.bold + String.this + terminal.reset
public String.dime                              String => terminal.dime + String.this + terminal.reset
public String.italic                            String => terminal.italic + String.this + terminal.reset
public String.underline                         String => terminal.underline + String.this + terminal.reset
public String.slow_blink                        String => terminal.slow_blink + String.this + terminal.reset
public String.rapid_blink                       String => terminal.rapid_blink + String.this + terminal.reset
public String.reverse                           String => terminal.reverse + String.this + terminal.reset
public String.crossed_out                       String => terminal.crossed_out + String.this + terminal.reset
public String.font_0                            String => terminal.font_0 + String.this + terminal.reset
public String.font_1                            String => terminal.font_1 + String.this + terminal.reset
public String.font_2                            String => terminal.font_2 + String.this + terminal.reset
public String.font_3                            String => terminal.font_3 + String.this + terminal.reset
public String.font_4                            String => terminal.font_4 + String.this + terminal.reset
public String.font_5                            String => terminal.font_5 + String.this + terminal.reset
public String.font_6                            String => terminal.font_6 + String.this + terminal.reset
public String.font_7                            String => terminal.font_7 + String.this + terminal.reset
public String.font_8                            String => terminal.font_8 + String.this + terminal.reset
public String.font_9                            String => terminal.font_9 + String.this + terminal.reset
public String.fraktur                           String => terminal.fraktur + String.this + terminal.reset
public String.double_underline                  String => terminal.double_underline + String.this + terminal.reset
public String.normal_intensity                  String => terminal.normal_intensity + String.this + terminal.reset
public String.neither_italic_nor_blackletter    String => terminal.neither_italic_nor_blackletter + String.this + terminal.reset
public String.not_underlined                    String => terminal.not_underlined + String.this + terminal.reset
public String.not_blinking                      String => terminal.not_blinking + String.this + terminal.reset
public String.proportional_spacing              String => terminal.proportional_spacing + String.this + terminal.reset
public String.not_reversed                      String => terminal.not_reversed + String.this + terminal.reset
public String.reveal                            String => terminal.reveal + String.this + terminal.reset
public String.not_crossed_out                   String => terminal.not_crossed_out + String.this + terminal.reset
public String.black                             String => terminal.black + String.this + terminal.reset
public String.red                               String => terminal.red + String.this + terminal.reset
public String.green                             String => terminal.green + String.this + terminal.reset
public String.yellow                            String => terminal.yellow + String.this + terminal.reset
public String.blue                              String => terminal.blue + String.this + terminal.reset
public String.purple                            String => terminal.purple + String.this + terminal.reset
public String.cyan                              String => terminal.cyan + String.this + terminal.reset
public String.white                             String => terminal.white + String.this + terminal.reset
public String.set_foreground_color              String => terminal.set_foreground_color + String.this + terminal.reset
public String.regular_color                     String => terminal.regular_color + String.this + terminal.reset
public String.background_black                  String => terminal.background_black + String.this + terminal.reset
public String.background_red                    String => terminal.background_red + String.this + terminal.reset
public String.background_green                  String => terminal.background_green + String.this + terminal.reset
public String.background_yellow                 String => terminal.background_yellow + String.this + terminal.reset
public String.background_blue                   String => terminal.background_blue + String.this + terminal.reset
public String.background_purple                 String => terminal.background_purple + String.this + terminal.reset
public String.background_cyan                   String => terminal.background_cyan + String.this + terminal.reset
public String.background_white                  String => terminal.background_white + String.this + terminal.reset
public String.set_background_set_color          String => terminal.set_background_set_color + String.this + terminal.reset
public String.background_regular_color          String => terminal.background_regular_color + String.this + terminal.reset
public String.disable_proportional_spacing      String => terminal.disable_proportional_spacing + String.this + terminal.reset
public String.framed                            String => terminal.framed + String.this + terminal.reset
public String.encircled                         String => terminal.encircled + String.this + terminal.reset
public String.overlined                         String => terminal.overlined + String.this + terminal.reset
public String.neither_framed_nor_encircled      String => terminal.neither_framed_nor_encircled + String.this + terminal.reset
public String.not_overlined                     String => terminal.not_overlined + String.this + terminal.reset
# 57
# 56
public String.set_underline_color               String => terminal.set_underline_color + String.this + terminal.reset
public String.default_underline_color           String => terminal.default_underline_color + String.this + terminal.reset
public String.ideogram_underline                String => terminal.ideogram_underline + String.this + terminal.reset
public String.ideogram_double_underline         String => terminal.ideogram_double_underline + String.this + terminal.reset
public String.ideogram_overline                 String => terminal.ideogram_overline + String.this + terminal.reset
public String.ideogram_double_overline          String => terminal.ideogram_double_overline + String.this + terminal.reset
public String.ideogram_stress_marking           String => terminal.ideogram_stress_marking + String.this + terminal.reset
public String.no_ideogram_attributes            String => terminal.no_ideogram_attributes + String.this + terminal.reset
# 66..72
public String.superscript                       String => terminal.superscript + String.this + terminal.reset
public String.subscript                         String => terminal.subscript + String.this + terminal.reset
public String.neither_superscript_nor_subscript String => terminal.neither_superscript_nor_subscript + String.this + terminal.reset
  # 76..89
public String.bright_black                      String => terminal.bright_black + String.this + terminal.reset
public String.bright_red                        String => terminal.bright_red + String.this + terminal.reset
public String.bright_green                      String => terminal.bright_green + String.this + terminal.reset
public String.bright_yellow                     String => terminal.bright_yellow + String.this + terminal.reset
public String.bright_blue                       String => terminal.bright_blue + String.this + terminal.reset
public String.bright_purple                     String => terminal.bright_purple + String.this + terminal.reset
public String.bright_cyan                       String => terminal.bright_cyan + String.this + terminal.reset
public String.bright_white                      String => terminal.bright_white + String.this + terminal.reset
  # 98
  # 99
public String.background_bright_black           String => terminal.background_bright_black + String.this + terminal.reset
public String.background_bright_red             String => terminal.background_bright_red + String.this + terminal.reset
public String.background_bright_green           String => terminal.background_bright_green + String.this + terminal.reset
public String.background_bright_yellow          String => terminal.background_bright_yellow + String.this + terminal.reset
public String.background_bright_blue            String => terminal.background_bright_blue + String.this + terminal.reset
public String.background_bright_purple          String => terminal.background_bright_purple + String.this + terminal.reset
public String.background_bright_cyan            String => terminal.background_bright_cyan + String.this + terminal.reset
public String.background_bright_white           String => terminal.background_bright_white + String.this + terminal.reset

# end of file

last changed: 2026-06-12