Error Message Generator 2.0

This is a modern remake of my “Error Message Generator” that was originally written using Perl/Tk around 2006. This one is written in Go in 2023 using the Fyne UI and aims to match and surpass the features of the original Perl version.

Screenshot

The original inspiration for this back in 2006 was an online web tool called “Atom Smasher’s Error Message Generator” which generated images of error messages. My Perl ErrorGen program included all of the Atom Smasher icons. Atom Smasher’s page seems offline recently, so interest has skyrocketed for my Perl ErrorGen program, so I decided to dust it off, redo it in Go and make it better than ever before.

Features

This program has two operating modes:

The current features include:

The roadmap of future features include:

Command Line Interface

You can call this program from batch files or shell scripts to prompt the user with a graphical dialog box and read the button they chose from this program’s standard output.

For example, from a bash script:

#!/bin/bash
answer=`./errorgen --alert --title "Disk Failure" \
    --text "Failure to read from drive Z:/" \
    --icon defrag --button Abort --button Retry --button Fail \
    --default 1 --cancel Fail`
echo "You have chosen: $answer"
Screenshot from the above command

The full documentation is included below. Running errorgen --help from a text terminal will have the program print its documentation to you, but this won’t work on the Windows version since a program must decide if it’s a graphical or a command line app and can’t be both.

Built-in Icons

These are all the icons that currently come with ErrorGen:

Image Name
aim_guy aim_guy
aol_icon aol_icon
attention attention
bomb bomb
bomb_dynamite bomb_dynamite
bomb_grenade bomb_grenade
bubble_i bubble_i
bubble_q bubble_q
bulb bulb
butterfly butterfly
cake cake
circularsaw circularsaw
control_panel control_panel
cow cow
defrag defrag
disk_blu disk_blu
disk_blu_lbl disk_blu_lbl
disk_org disk_org
disk_red disk_red
disk_red_lbl disk_red_lbl
disk_skull disk_skull
disk_yel disk_yel
dos dos
e_orbit e_orbit
error error
error2 error2
error3 error3
error4 error4
file_cabinet file_cabinet
find find
fortunecookie fortunecookie
garbage_empty garbage_empty
garbage_full garbage_full
gun gun
hammer hammer
heart heart
help help
hub hub
hwinfo hwinfo
ic_a ic_a
keys keys
keys2 keys2
keys3 keys3
labtec labtec
mac mac
mail mail
mail_deleted mail_deleted
mailbox mailbox
mouth mouth
mycomputer mycomputer
mycomputer2 mycomputer2
mycomputer3 mycomputer3
newspaper newspaper
peripheral peripheral
plant_leaf plant_leaf
radiation radiation
ram ram
recycle recycle
recycle2 recycle2
scanner scanner
screw screw
screw2 screw2
setup setup
sknife sknife
skull skull
skull2 skull2
skull3 skull3
tux tux
tux_config tux_config
ups ups
zipdisk zipdisk
zipdisks zipdisks

Command Line Usage

The result of errorgen --help:

NAME:
   errorgen - make fun and custom error messages.

USAGE:
   errorgen [global options] command [command options] [arguments...]

AUTHOR:
   Noah Petherbridge, https://www.kirsle.net

COMMANDS:
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --version, -v  Show program version and build information and exit. (default: false)
   --error, -e    Make the dialog box be of type 'error' by default.

      An info box has these default attributes unless overridden by
      other options:

      Title: Error
      Text: An error has occurred.
      Icon: error
      Buttons: Ok (default: false)
   --alert, -a  Make the dialog box be of type 'alert' by default.

      An alert box has these default attributes unless overridden by
    other options:

      Title: Warning
      Text: Are you sure you want to proceed?
      Icon: attention
      Buttons: Ok (default: false)
   --info, -i  Make the dialog box be of type 'info' by default.

      An info box has these default attributes unless overridden by
    other options:

      Title: Information
      Text: All updates are complete.
      Icon: info
      Buttons: Ok (default: false)
   --question, -q  Make the dialog box be of type 'question' by default.

      A question box has these default attributes unless overridden by
    other options:

      Title: Question
      Text: Are you sure you want to proceed?
      Icon: question
      Buttons: Ok, Cancel (default: false)
   --title value, -n value  Set the title for the dialog box.

      If no title is set, a default is used based on the type of dialog
      box requested (which is --info by default; see also --error,
      --info, --question)
   --text value, -t value  The text displayed inside the dialog box.

      Use \n where you want line breaks.

      Important: the text does NOT have automatic word wrapping applied.
      Insert your own line breaks or else the dialog can be VERY wide for
      longer messages!
   --button value, -b value  Add a button to the dialog.

      Use this option as many times as you want to add multiple buttons.
      The one the user chooses will be printed to standard output. If no
      buttons, default is an Ok button.  (accepts multiple inputs)
   --default value, -m value             Set the default button by its label.

      The matching --button will be made the default/primary button.
   --cancel value, -c value  Set the 'cancel button'.

      This value should match one of your --buttons and will be the
      value 'selected' if the user closes the window or hits the
      Escape key.
   --disabled value, -d value, -g value  Mark buttons (by index) disabled

      Specify a --button number (from 0 to n) that should be disabled,
      or greyed out. The user can not click on this button.  (accepts multiple inputs)
   --icon value, -o value                                    Set the icon to be displayed in the dialog box.

      Use either a built-in icon by name (e.g. "aim_guy") or name your
      own custom PNG image from disk.

      Built-in icon names include the following:

          aim_guy
          aol_icon
          attention
          bomb
          bomb_dynamite
          bomb_grenade
          bubble_i
          bubble_q
          bulb
          butterfly
          cake
          circularsaw
          control_panel
          cow
          defrag
          disk_blu
          disk_blu_lbl
          disk_org
          disk_red
          disk_red_lbl
          disk_skull
          disk_yel
          dos
          e_orbit
          error
          error2
          error3
          error4
          file_cabinet
          find
          fortunecookie
          garbage_empty
          garbage_full
          gun
          hammer
          heart
          help
          hub
          hwinfo
          ic_a
          keys
          keys2
          keys3
          labtec
          mac
          mail
          mail_deleted
          mailbox
          mouth
          mycomputer
          mycomputer2
          mycomputer3
          newspaper
          peripheral
          plant_leaf
          radiation
          ram
          recycle
          recycle2
          scanner
          screw
          screw2
          setup
          sknife
          skull
          skull2
          skull3
          tux
          tux_config
          ups
          zipdisk
          zipdisks
   --help, -h  show help (default: false)

Building

Requirements:

Fedora: sudo dnf install golang gcc libXcursor-devel libXrandr-devel mesa-libGL-devel libXi-devel libXinerama-devel libXxf86vm-devel

Ubuntu/Debian: sudo apt-get install golang gcc libgl1-mesa-dev xorg-dev

There is a GNU Makefile to make build commands easier to remember.

Cross compiling: install Docker and fyne-cross and run make release to produce the build. To install fyne-cross:

go install github.com/fyne-io/fyne-cross

In case of permission errors (Docker often needs run as root) you can try sudo running fyne-cross directly, e.g. to produce Windows amd64 and i386 builds a command like:

# which fyne-cross to use your locally installed Go binary for the current user,
# so that root doesn't need to also install fyne-cross and have a $PATH set up.
sudo $(which fyne-cross) windows -arch=\*

License & Author

Icons from the Atom Smasher Error Message Generator.

Developed by Noah Petherbridge, https://www.kirsle.net/

See my web page about this at https://www.kirsle.net/errorgen

Error Message Generator
Copyright (C) 2023  Noah Petherbridge

This program 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, either version 3 of the License, or (at your
option) any later version.

This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.