# \[ANN\] TextUserInterfaces.jl v0.0.1

**URL:** <https://discourse.julialang.org/t/ann-textuserinterfaces-jl-v0-0-1/29608>\
**Category:** Community\
**Created:** [October 7, 2019, 5:14pm UTC](https://discourse.julialang.org/t/ann-textuserinterfaces-jl-v0-0-1/29608 "2019-10-07T17:14:18Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ronis\_BR](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ronis_br/32/50999_2.png) [@Ronis\_BR](https://discourse.julialang.org/u/Ronis_BR)\
**Post date:** [October 7, 2019, 5:14pm UTC](https://discourse.julialang.org/t/ann-textuserinterfaces-jl-v0-0-1/29608/1 "2019-10-07T17:14:18Z")

</div>

Hi!

Well, it was a long journey until here 🙂 I finally finished something worthy of registering. The package [TextUserInterfaces.jl](https://github.com/ronisbr/TextUserInterfaces.jl) is being registered and should be available in a couple of days if everything goes right.

The idea is to have a package that wraps NCurses and provide a Julia-like API to create text user interfaces. From the previous examples that I showed, I changed a lot of things and went in a direction more like Qt. We will have windows, widgets, focus manger, etc. This, unfortunately, is still far away from being production-ready (Help is veeeery welcome!). Currently, we have as widgets labels, buttons and progress bars. Of course, custom widgets can be created.

What can be considered in a good shape is the low-level access to NCurses. In this case, if a function you need is not available, just let me know. For the majority of cases, adding a new function is very easy.

I provided a proof of concept (a Tic Tac Toe or, as we Brazilian call, Jogo da Velha) to show what kind of API I would like to have. If you want to play, `dev` the repository and execute the file `tictactoe.jl` inside the folder `example`. ( **NOTE** : It will only work in Unix-like environments since I have no idea how to use NCurses in Windows…)

![TUI-TicTacToe](https://global.discourse-cdn.com/julialang/original/3X/4/6/466ad7a016bfbb63a4d3d03e195172f4c058c619.gif)

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [October 7, 2019, 5:39pm UTC](https://discourse.julialang.org/t/ann-textuserinterfaces-jl-v0-0-1/29608/2 "2019-10-07T17:39:12Z")

</div>

Note that we now have ncurses in JuliaBinaryWrappers: [https://github.com/JuliaBinaryWrappers/Ncurses\_jll.jl](https://github.com/JuliaBinaryWrappers/Ncurses_jll.jl) Unfortunately we couldn’t build for Windows yet, but maybe it would be good to consider moving to these binaries once we can cover all platforms? (PS: honestly I have no clue whether ncurses is supposed to work on Windows at all)

---

<div class="post-metadata">

**Author:** ![Ronis\_BR](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ronis_br/32/50999_2.png) [@Ronis\_BR](https://discourse.julialang.org/u/Ronis_BR)\
**Post date:** [October 7, 2019, 6:10pm UTC](https://discourse.julialang.org/t/ann-textuserinterfaces-jl-v0-0-1/29608/3 "2019-10-07T18:10:15Z")

</div>

Thanks! This would be awesome since the user will not need to install anything beside the package. I will try to make it work together with my package.

W.r.t. Windows, I also have no idea…

---

<div class="post-metadata">

**Author:** ![Steven\_Sagaert](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/steven_sagaert/32/29578_2.png) [@Steven\_Sagaert](https://discourse.julialang.org/u/Steven_Sagaert)\
**Post date:** [October 8, 2019, 2:00pm UTC](https://discourse.julialang.org/t/ann-textuserinterfaces-jl-v0-0-1/29608/4 "2019-10-08T14:00:56Z")

</div>

I found this [https://pdcurses.org/](https://pdcurses.org/). It’s not ncurses but curses… Still you probably could switch between nccurses & pdcurses by abstracting it with a wrapper layer.  
Or use the WLS but that’s really just linux 🙂

---

<div class="post-metadata">

**Author:** ![Ronis\_BR](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ronis_br/32/50999_2.png) [@Ronis\_BR](https://discourse.julialang.org/u/Ronis_BR)\
**Post date:** [October 8, 2019, 8:51pm UTC](https://discourse.julialang.org/t/ann-textuserinterfaces-jl-v0-0-1/29608/5 "2019-10-08T20:51:26Z")

</div>

Good! It should be quite easy to add the abstracting layer and use. Maybe someone can help me here.

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [October 8, 2019, 11:09pm UTC](https://discourse.julialang.org/t/ann-textuserinterfaces-jl-v0-0-1/29608/6 "2019-10-08T23:09:24Z")

</div>

I made a PR that makes Ncurses compile for Windows: [https://github.com/JuliaPackaging/Yggdrasil/pull/126](https://github.com/JuliaPackaging/Yggdrasil/pull/126)

---

<div class="post-metadata">

**Author:** ![Ronis\_BR](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ronis_br/32/50999_2.png) [@Ronis\_BR](https://discourse.julialang.org/u/Ronis_BR)\
**Post date:** [October 8, 2019, 11:15pm UTC](https://discourse.julialang.org/t/ann-textuserinterfaces-jl-v0-0-1/29608/7 "2019-10-08T23:15:26Z")

</div>

> [@giordano](#):
>
> [Make Ncurses work for Windows, too by giordano · Pull Request #126 · JuliaPackaging/Yggdrasil · GitHub](https://github.com/JuliaPackaging/Yggdrasil/pull/126)

That’s awesome! Is the API the same?

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [October 8, 2019, 11:19pm UTC](https://discourse.julialang.org/t/ann-textuserinterfaces-jl-v0-0-1/29608/8 "2019-10-08T23:19:25Z")

</div>

I guess so 😃
