This detachLemon function.
is just a function that enable
the lemonbar running process to be detached,
using forkProcess().
The real function is runLemon.
You must be familiar with this createProcess.
Note: that we want to ignore idle event for a while.
And append the -p for a while,
to make the statusbar persistent.
Statusbar Initialization
Here we have the contentInit.
It is just an initialization of global variable.
We are going to have some loop later in different function,
to do the real works.
Now is time to try the panel, on your terminal.
Note: that we already reach this stage in our previous article.
These two functions, setTagValue
and setWindowtitle, have already been discussed.
View Source File:
Simple version. No idle event. Only statusbar initialization.
Consider this contentWalk call,
after contentInit call,
inside the runLemon.
Wrapping Idle Event into Code
contentWalk is the heart of this script.
We have to capture every event,
and process the event in event handler.
Walk step by step, Process event by event
After the event handler,
we will get the statusbar text, in the same way,
we did in content_init.
3: The Event Handler
For each idle event, there are multicolumn string.
The first string define the event origin.
The origin is either reload, or quit_panel,
tag_changed, or tag_flags,
or tag_added, or tag_removed,
or focus_changed, or window_title_changed.
More complete event, can be read in herbstclient manual.
All we need is to pay attention to this two function.
set_tag_value and set_windowtitle.
Actually that’s all we need to have a functional lemonbar.
This is the minimum version.
This is specific issue for lemonbar,
that we don’t have in dzen2.
Consider have a look at
output.hs.
Issue: Lemonbar put the output on terminal
instead of executing the command.
Consider going back to
pipehandler.hs.
We need to pipe the lemonbar output to shell.
It means Lemonbar read input and write output at the same time.
createProcess does good with bidirectional pipe.
How does it work ?
UseHandle take care of this.
View Source File:
Piping lemonbar output to shell, implementing lemonbar clickable area.
We can put custom event other than idle event in statusbar panel.
This event, such as date event, called based on time interval in second.
It is a little bit tricky, because we have to make,
a combined event that consist of,
idle event (asynchronous) and interval event (synchronous).
Merging two different paralel process into one.
This is an overview of what we want to achieve.
In real code later, we do not need the timestamp.
interval string is enough to trigger interval event.
View Testbed Source File:
Before merging combined event into main code,
consider this test in an isolated fashion.
Zombie are scary, and fork does have a tendecy to become a zombie.
Application that utilize several forks should be aware of this threat.
The reason why I use fork instead of thread is,
because the original herbstluftwm configuration coming from bash,
and this bash script is using fork.
However, you can use this short script to reduce zombie population.
It won’t kill all zombie, but works for most case.
You might still need htop,
and kill -9 manually.
9: Putting Them All Together
I also created compact for version,
for use with main HerbstluftWM configuration,
in ~/.config/herbstluftwm/ directory.
After reunification, they are not very long scripts after all.