// = Zenity GUI for Elixir :id: abb2f7c9-48cb-456d-8a6e-daea4262e47d :author: Andrei Clinciu :website: https://andreiclinciu.net/ :publish_at: 2017-12-21 19:13:00Z :heading_image: /images/blog//old_uploads/zenity-usage-from-elixir-1-825x510.jpg :description: \N :type: article :tags: :keywords: :toc: left :imagesdir: ../assets/
image::{heading_image}[] So I’ve recently switched to using Elixir as my main development platform. + One drawback of Elixir/Erlang is that it doesn’t have any GUI(General User interface).
Yes, it’s easy - even required - to use cowboy + plug or Phoenix to make a browser based (HTML, CSS and JavaScript) interface that works great across all devices. + But what when you want to interact with the user directly without the extra overhead?
Well, you can make bindings to GTK+, TK or QT! Search for a library that uses those and use it.
== But why not something simple?
You can use Zenity for simple interactions. It works on Linux, there is a port for Windows and one for MacOsX.
UPDATE: Zenity is cool for fast prototyping, the sad part is that it’s development has stopped.
I recommend newcomers to try yad out (https://sourceforge.net/projects/yad-dialog/[https://sourceforge.net/projects/yad-dialog/ [.badge .badge-notification .clicks]#29#]), it’s a Zenity fork. You can usually find it in the package manager.
== Sample Zenity module
…. defmodule Zenity do@zenity “/usr/bin/zenity” def entry(text,entry_text \\ “”) do exec @zenity, ["–entry", “–text”,text, “–entry-text”,entry_text] end def exec(exe, args) when is_list(args) do port = Port.open({:spawn_executable, exe}, [{:args, args} , :stream, :binary, :exit_status, :hide, :use_stdio, :stderr_to_stdout]) handle_output(port) end def handle_output(port, data \\"") do receive do {^port, {:data, data}} -> handle_output(port,data) {^port, {:exit_status, status}} -> {data, status} end endend ….
=== Usage Example
image:/images/blog/old_uploads/zenity-usage-elixir.png[image]
== Official documentation:
I have compiled a few links with official documentation and examples. + https://help.gnome.org/users/zenity/3.22/ + More examples: + http://linux.byexamples.com/archives/259/a-complete-zenity-dialog-examples-1/ + https://www.linux.org/threads/zenity-gui-for-shell-scripts.9802/ + https://linuxaria.com/howto/introduction-zenity-bash-gu
== Conclusion
Zenity is worthy of usage within Elixir in the creation of user oriented scripts. And it works great in prototyping new apps. + It can do many things. For more advanced experiments and real software, consider using Phoenix in the browser.