# Simple ASCII art editor in Ada (town)

**URL:** https://forum.ada-lang.io/t/simple-ascii-art-editor-in-ada-town/4829
**Category:** Releases
**Tags:** ada
**Created:** [October 17, 2026, 4:10pm UTC](https://forum.ada-lang.io/t/simple-ascii-art-editor-in-ada-town/4829 "2026-10-17T16:10:43Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![ZenitDS](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/zenitds/32/949_2.png) [@ZenitDS](https://forum.ada-lang.io/u/ZenitDS)
#### Post date: [October 17, 2026, 4:10pm UTC](https://forum.ada-lang.io/t/simple-ascii-art-editor-in-ada-town/4829/1 "2026-10-17T16:10:43Z")

</div>

Hi there,

I have just made a little ASCII art editor in Ada.  
It can be used to make small artworks using the standard ASCII character set.

Terminal handling is done through a small wrapper of terminal control functions. It was actually simpler than I thought to do this without curses. I am only using classic VT100 sequences.

> NOTE: Be aware that the cursors are moved with hjkl,HJKL and the arrows will not work.

> **[town](https://codeberg.org/ZenitDS/town)**
>
> ASCII art editor written in Ada

---

<div class="post-metadata">

### Author: ![Nordic\_Dogsledding](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/nordic_dogsledding/32/547_2.png) [@Nordic\_Dogsledding](https://forum.ada-lang.io/u/Nordic_Dogsledding)
#### Post date: [October 18, 2026, 11:18am UTC](https://forum.ada-lang.io/t/simple-ascii-art-editor-in-ada-town/4829/2 "2026-10-18T11:18:38Z")

</div>

Please excuse my harsh words, but this is terrible software. Not one line of comments, incomplete manual, incomplete Gnat project.

[2026-10-18 13:17:17] C:\Users\Admin\Desktop\town\town.gpr:1:06: imported project file “config/town\_config.gpr” not found  
[2026-10-18 13:17:17] C:\Users\Admin\Desktop\town\town.gpr:6:32: unknown package or project “Town\_Config”  
[2026-10-18 13:17:17] C:\Users\Admin\Desktop\town\town.gpr:12:40: unknown package or project “Town\_Config”  
[2026-10-18 13:17:19] Language server: Unable to load project file: C:\

---

<div class="post-metadata">

### Author: ![Irvise](https://forum.ada-lang.io/letter_avatar_proxy/v4/letter/i/7ba0ec/32.png) [@Irvise](https://forum.ada-lang.io/u/Irvise)
#### Post date: [October 18, 2026, 11:54am UTC](https://forum.ada-lang.io/t/simple-ascii-art-editor-in-ada-town/4829/3 "2026-10-18T11:54:56Z")

</div>

This is one of my issues with Alire. The project seems to be based on alire, which automatically creates the config directory with is needed by gprbuild, which is what you seem to be using directly. I would love for alire to generate gprbuild files that would be 100% self-sustaining, that way non-alire users would be able to use the code just as nicely…

What do you see if you use `alr build`?

Best regards,  
Fer

---

<div class="post-metadata">

### Author: ![mgrojo](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/mgrojo/32/15_2.png) [@mgrojo](https://forum.ada-lang.io/u/mgrojo)
#### Post date: [October 18, 2026, 1:19pm UTC](https://forum.ada-lang.io/t/simple-ascii-art-editor-in-ada-town/4829/4 "2026-10-18T13:19:27Z")

</div>

This is a point of friction we should avoid for anyone starting with Ada or with Alire. Every distributed open source software should include a `README` to explain how to build it and other significant matters. Maybe Alire should generate a simple `README.md` as part of `alr init` to include the initial information there.

Another option is to include the files generated in `config` by Alire in Git. I’ve sometimes done that for the sake of non-Alire users, but it’s a pain in the back for the developer, as any change in profile will make Git tell you about modified files.

---

<div class="post-metadata">

### Author: ![ZenitDS](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/zenitds/32/949_2.png) [@ZenitDS](https://forum.ada-lang.io/u/ZenitDS)
#### Post date: [October 18, 2026, 3:39pm UTC](https://forum.ada-lang.io/t/simple-ascii-art-editor-in-ada-town/4829/5 "2026-10-18T15:39:08Z")

</div>

Hi, no problem.

I have never tried putting out something for others to perhaps use so I am a noob in it. Just addressed some of your issues.

- Created README .
- Ditched alire for just a simple `gpr` file .
- Some cleanup, not much .
- Trivial: updated MANUAL to show how to run it .

For the missing comments, for the moment I will add none, since it is so small and the design is currently lacking consistency .

---

<div class="post-metadata">

### Author: ![ZenitDS](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/zenitds/32/949_2.png) [@ZenitDS](https://forum.ada-lang.io/u/ZenitDS)
#### Post date: [October 18, 2026, 3:40pm UTC](https://forum.ada-lang.io/t/simple-ascii-art-editor-in-ada-town/4829/6 "2026-10-18T15:40:35Z")

</div>

Hi,

Thanks for the info. Finally just figured I would just use a single gpr file, which is simpler and more straightforward to use and maintain for this tiny project.

Cheers  
– zen

---

<div class="post-metadata">

### Author: ![ZenitDS](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/zenitds/32/949_2.png) [@ZenitDS](https://forum.ada-lang.io/u/ZenitDS)
#### Post date: [October 18, 2026, 3:47pm UTC](https://forum.ada-lang.io/t/simple-ascii-art-editor-in-ada-town/4829/7 "2026-10-18T15:47:47Z")

</div>

Hi,

Just for the record, in my case I did not put a `README` intentionally, thinking it would not be necessary.

As @Nordic_Dogsledding pointed out, this was a bad idea.

I am inclined to believe that having a `README` file present would have made me fill it out just for the sake of it. 🤷

---

<div class="post-metadata">

### Author: ![Nordic\_Dogsledding](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/nordic_dogsledding/32/547_2.png) [@Nordic\_Dogsledding](https://forum.ada-lang.io/u/Nordic_Dogsledding)
#### Post date: [October 18, 2026, 5:35pm UTC](https://forum.ada-lang.io/t/simple-ascii-art-editor-in-ada-town/4829/8 "2026-10-18T17:35:54Z")

</div>

You do not really understand. It’s not just a ReadMe, this gives only an overview what this sw is all about.  
What I do mean:  
Please look into the Ada RM how there each single operation is described. This is what a well documented code is about. I admit, this detailed documentation is difficult to reach, it’s the far aim.  
But:

```ada
procedure Open_Session;
procedure Close_Session;

procedure Flush;
procedure Clear;

```

No word what they do. I can guess, but guessing is not software engineering. You may say  
“the code is the documentation”, again no. What happens if Open/Close\_Session is not called? An exception?  
A spec must be clearly understandable without looking at the body and without examining how it is used in the examples.  
From where do I read characters, where do I print characters to?

This is what I mean - undocumented software is flooding the net.

Enough of the harsh rant. Your software here is very small. Writing a sufficient amount of comments should not take more than just an hour.

So welcome to your Art Editor! By the way, what is an art editor?

Christoph

---

<div class="post-metadata">

### Author: ![ZenitDS](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/zenitds/32/949_2.png) [@ZenitDS](https://forum.ada-lang.io/u/ZenitDS)
#### Post date: [October 18, 2026, 8:38pm UTC](https://forum.ada-lang.io/t/simple-ascii-art-editor-in-ada-town/4829/9 "2026-10-18T20:38:06Z")

</div>

Thanks for your tips! 🙂 I have now documented the package specifications.

This editor is for making `ASCII art`. Here is an example of `ASCII art`:

````txt
   __. qt
 .' .`---. | ... - -->    
  '._._.-.' .^.                    
                 | | _.-.-.-.        
 -.- _.-_-'-./```\ .'. . . . | ,   
       '._ . . |-.-| `.___.---'        
          `----'|-|-| .-.--'
    -.-.-.- /_,^,_\ ... | . . 
     -.-.- |=:=:=:=| '-_.-__
      -.- |''.''|                  
   . . . |``|``| . . . .  
. . . . . /``/ \``\ . . . . . .
. __. . . . _/``/___ \``\_ . . . . . ____
 |88| _ .. \,.,.,.,.,.,/ .. _ .. / ____'=.-.' '---./ _.-'-._ \ .--' `---' - -
O_oOOo_o_O_/``/ _.'._ \``\o_oOo_ooOo_oOo
OoOooOoOoO/``|=/- - -\=|``\oooOooOOOooOo
oOOoOooOo'---'// :-: \\`---'oOooOoooOOoo
=============/- - - - -\================

````
