blob: e3f36841f109598deebe64aea53c36dcf106cdd4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
<%!
section = "docs"
%>
<%inherit file="_templates/i3.mako" />
<div id="content" class="usergen">
<h1>User-contributed article: enhanced and extensible i3bar with py3status</h1>
<p>
In the i3 documentation, the recommended tool for <a
href="http://i3wm.org/docs/userguide.html#_displaying_a_status_line">displaying
a status line is to use i3status</a> combined with i3bar.
</p>
<p>
While i3status is very efficient at what it does, it is by design limited to
a few modules and does not allow you to inject your own scripts output on your
i3bar. This is said pretty clearly on the i3status man page:
</p>
<pre><tt>In i3status, we don’t want to implement process management again.
Therefore, there is no module to run arbitrary scripts or commands.
Instead, you should use your shell.</tt></pre>
<h2>Introducing py3status</h2>
<p>
The goal of py3status is to fill this gap by allowing users to simply extend
their i3bar while preserving their current i3status configuration. The main idea
is to rely on i3status' strenghts without adding any configuration on the user's
side. py3status is thus a wrapper script for i3status and its configuration as
explained <a href="https://github.com/ultrabug/py3status/wiki">on the wiki</a>.
</p>
<h2>Usage</h2>
<p>
Using py3status is easy, no need to multi-pipe your scripts after i3status.
Instead just replace <i>i3status</i> in your current <b>status_command</b> by
<i>py3status</i>.
For example, if your current status_command in your i3 config file resides in
~/.i3/i3status.conf, you would change your i3 config to this:
</p>
<pre><tt>status_command py3status -c ~/.i3/i3status.conf</tt></pre>
<h2>Handle i3bar click events from your i3status.conf</h2>
<p>
Py3status (since v2) is also wrapping and extending your i3status.conf and
allows you directly handle all the i3bar click events on any of your configured
modules whether they are i3status modules or py3status modules.
</p>
<p>
To do so, all you have to do is add a new configuration parameter named
<b>on_click [button number]</b> to your module config and py3status will then
execute the given i3 command (using i3-msg). This means you can run simple
tasks like executing a program or execute any other i3 specific command.
</p>
<p>Some examples below from i3status.conf:</p>
<pre><tt>
# reload the i3 config when I left click on the i3status time module
# and restart i3 when I middle click on it
time {
on_click 1 = "reload"
on_click 2 = "restart"
}
# run wicd-gtk GUI when I left click on the i3status ethernet module
# and kill it when I right click on it
ethernet eth0 {
# if you use %speed, i3status requires root privileges
format_up = "E: %ip"
format_down = ""
on_click 1 = "exec wicd-gtk"
on_click 3 = "exec killall wicd-gtk"
}
# run thunar when I left click on the / disk info module
disk / {
format = "/ %free"
on_click 1 = "exec thunar /"
}
# open an URL on opera when I left click on the py3status weather_yahoo module
weather_yahoo paris {
cache_timeout = 1800
city_code = "FRXX0076"
forecast_days = 2
on_click 1 = "exec opera http://www.meteo.fr"
request_timeout = 10
}
</tt></pre>
<h2>Use py3status modules in your i3bar</h2>
<p>
Py3status (since v2) also comes with some configurable modules you can load and
configure directly from your i3status.conf just like any other i3status module.
<a
href="https://github.com/ultrabug/py3status/tree/master/py3status/modules">You
can see the list of the modules and their configuration parameters here.</a>
</p>
<p>
To load a py3status module you just have to list it like any other i3status
module using the <b>order +=</b> parameter. For example you could insert and
load the imap module like this:
</p>
<pre><tt>
order += "disk /home"
order += "disk /"
order += "imap"
order += "time"
</tt></pre>
<p>And then you could configure it like this:</p>
<pre><tt>
# configure the py3status imap module
# and run thunderbird when I left click on it
imap {
cache_timeout = 60
imap_server = 'imap.myprovider.com'
mailbox = 'INBOX'
name = 'Mail'
password = 'coconut'
port = '993'
user = 'mylogin'
on_click 1 = "exec thunderbird"
}
</tt></pre>
<h2>Write your own modules and display your own stuff</h2>
<p>
Py3status features a simple and straightfoward module system which you can use
to get your own output displayed on your i3bar. You can read more and view some
examples <a
href="https://github.com/ultrabug/py3status/wiki/Write-your-own-modules"> on the
wiki</a>.
</p>
<h2>Documentation</h2>
<p>
You can read the full and up to date documentation on the <a
href="https://github.com/ultrabug/py3status">py3status home page</a>.
</p>
|