Zenity GUI for Elixir

/images/blog/old_uploads/zenity-usage-from-elixir-1-825x510.jpg
zenity usage from elixir 1 825x510

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/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

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.

Subscribe to my Newsletter

Receive emails about Linux, Programming, Automation, Life tips & Tricks and information about projects I'm working on