Module: gears.watcher
Fetch information at a specific interval.
Info:
- Copyright: 2020 Emmanuel Lepage-Vallee
-
Originally authored by: Emmanuel Lepage-Vallee <elv1313@gmail.com>
(Full contributors list available on our github project)
Constructors
| gears.watcher {[args]} | Create a new gears.watcher object. | |
Object properties
| file | string | A file path. | |
| files | table | A list or map of files. | |
| filter | function | A filter to post-process the file or command. | |
| command | table or string | A command. | |
| shell | boolean or string | Use a shell when calling the command. | |
| labels_as_properties | boolean | In files mode, when paths have labels, apply them as properties. | |
| interval | number | The interval between the content refresh. | |
| value | N/A | The current value of the watcher. | |
| strip_newline | boolean | Strip the extra trailing newline. | |
| started | boolean | The timer is started. | Inherited from gears.timer |
Object methods
| :abort () | Abort the current transactions. | |
| :append_file (path[, The]) | Add a file to the files list. | |
| :remove_file (path) | Remove a file to the files list. | |
| :start () | Start the timer. | Inherited from gears.timer |
| :stop () | Stop the timer. | Inherited from gears.timer |
| :again () | Restart the timer. | Inherited from gears.timer |
| :emit_signal (name, ...) | Emit a signal. | Inherited from gears.object |
| :connect_signal (name, func) | Connect to a signal. | Inherited from gears.object |
| :weak_connect_signal (name, func) | Connect to a signal weakly. | Inherited from gears.object |
Signals
| file::acquired | Emitted when a file is read. | |
| file::failed | When reading a file failed. | |
| files::acquired | Emitted when all files are read. | |
Constructors
- gears.watcher {[args]}
-
Create a new gears.watcher object.
Parameters:
- args
- file string A file path.
- files table A list or map of files.
- filter function A filter to post-process the file or command.
- command table or string A command (without a shell).
- shell boolean Use a shell when calling the command. (default false)
- initial_value The value to use before the first "real" value is acquired.
- interval number The interval between the content refresh.
- labels_as_properties boolean Set the file labels as properties.
- started boolean The timer is started.
- args
Object properties
- file string · 1 signal
-
A file path.
See also:
Usage:
local mybatterydischarging = gears.watcher { file = "/sys/class/power_supply/BAT0/status", interval = 5, }
Click to display more Emit signals:
property::gears.watcher.fileWhen the gears.watcher.file value changes.selfgears.watcher The object which changed (useful when connecting many object to the same callback).new_valuefile The new value affected to the property.
- files table · 1 signal
-
A list or map of files.
It is often necessary to query multiple files. When reading from
proc, some data is split across multiple files, such as the battery charge.This property accepts 2 format. One uses is a plain table of paths while the other is a label->path map. Depending on what is being read, both make sense.
Simple path list:
local mybatterycharging = gears.watcher { files = { "/sys/class/power_supply/AC/online", "/sys/class/power_supply/BAT0/status" }, filter = function(content) return content['/sys/class/power_supply/AC/online' ] == "1" or content['/sys/class/power_supply/BAT0/status'] == "Full" end, interval = 5, }With labels:
local mybatterycharging = gears.watcher { files = { plugged = "/sys/class/power_supply/AC/online", charged = "/sys/class/power_supply/BAT0/status" }, filter = function(content) return content.plugged == "1" or content.charged == "Full" end, interval = 5, }See also:
Click to display more Emit signals:
property::gears.watcher.filesWhen the gears.watcher.files value changes.selfgears.watcher The object which changed (useful when connecting many object to the same callback).new_valuefiles The new value affected to the property.
- filter function · 1 signal
-
A filter to post-process the file or command.
It can be used, for example, to convert the string to a number or turn the various file content into the final value. The filter argument depend on various gears.watcher properties (as documented below).
The callback parameters for a single file: (1) The file content (string)
The callback parameters for a multiple files (paths): (1) Tables with the paths as keys and string content as value.
The callback parameters for a multiple files (labels): (1) Tables with the keys as keys and string content as value.
**The callback when labels_as_properties is true:** (1) The label name (2) The content
The callback parameters for a command: (1) Stdout as first parameter (2) Stderr as second parameter (3) Exitreason (4) Exitcode
Click to display more Emit signals:
property::gears.watcher.filterWhen the gears.watcher.filter value changes.selfgears.watcher The object which changed (useful when connecting many object to the same callback).new_valuefilter The new value affected to the property.
- command table or string · 1 signal
-
A command.
If you plan to use pipes or any shell features, do not forget to also set shell to
true.Usage example output:
one two threeUsage example:
local w = gears.watcher { interval = 0.05, command = "echo one two three", } -- [wait some time] -- It will be "one two three" print(w.value)
Click to display more Emit signals:
property::gears.watcher.commandWhen the gears.watcher.command value changes.selfgears.watcher The object which changed (useful when connecting many object to the same callback).new_valuecommand The new value affected to the property.
- shell boolean or string · 1 signal
-
Use a shell when calling the command.
This means you can use
|,&&,$?in your command.Usage example output:
threeUsage example:
local w = gears.watcher { interval = 0.05, command = "echo one two three | cut -f3 -d ' '", shell = true, } -- [wait some time] -- It will be "one two three" print(w.value)
Click to display more Emit signals:
property::gears.watcher.shellWhen the gears.watcher.shell value changes.selfgears.watcher The object which changed (useful when connecting many object to the same callback).new_valueshell The new value affected to the property.
- labels_as_properties boolean
-
In files mode, when paths have labels, apply them as properties.
local battery = gears.watcher { labels_as_properties = true, interval = 5, files = { capacity = "/sys/class/power_supply/BAT0/energy_full", current = "/sys/class/power_supply/BAT0/energy_now" }, filter = function(label, content) return tonumber(content) end, } -- Use the above in a widget. local w = wibox.widget { text = gears.reactive(function() return (battery.current / battery.capacity) .. "%" end), widget = wibox.widget.textbox }See also:
- interval number · 1 signal
-
The interval between the content refresh.
(in seconds)
See also:
Click to display more Emit signals:
property::gears.watcher.intervalWhen the gears.watcher.interval value changes.selfgears.watcher The object which changed (useful when connecting many object to the same callback).new_valueinterval The new value affected to the property.
- value N/A · 1 signal
-
The current value of the watcher.
If there is no filter, this will be a string. If a filter is used, then it is whatever it returns.
Click to display more Emit signals:
property::gears.watcher.valueWhen the gears.watcher.value value changes.selfgears.watcher The object which changed (useful when connecting many object to the same callback).
- strip_newline boolean · 1 signal
-
Strip the extra trailing newline.
All posix compliant text file and commands end with a newline. Most of the time, this is inconvinient, so gears.watcher removes them by default. Set this to
falseif this isn't the desired behavior.
Click to display more Emit signals:
property::gears.watcher.strip_newlineWhen the gears.watcher.strip_newline value changes.selfgears.watcher The object which changed (useful when connecting many object to the same callback).new_valuestrip_newline The new value affected to the property.
- started boolean · Inherited from gears.timer · 1 signal
-
The timer is started.
Click to display more Emit signals:
property::gears.watcher.startedWhen the gears.watcher.started value changes.selfgears.watcher The object which changed (useful when connecting many object to the same callback).
Object methods
- :abort ()
-
Abort the current transactions.
If files are currently being read or commands executed, abort it. This does prevent new transaction from being started. Use
:stop()for that.See also:
- :append_file (path[, The])
-
Add a file to the files list.
Parameters:
- :remove_file (path)
-
Remove a file to the files list.
Parameters:
- path string The path or the key.
- :start () · Inherited from gears.timer · 1 signal
-
Start the timer.
See also:
Click to display more Emit signals:
- :stop () · Inherited from gears.timer · 1 signal
-
Stop the timer.
See also:
Click to display more Emit signals:
- :again () · Inherited from gears.timer · 2 signals
-
Restart the timer.
This is equivalent to stopping the timer if it is running and then starting
it.
Click to display more Emit signals:
- :emit_signal (name, ...) · Inherited from gears.object
-
Emit a signal.
Parameters:
- name string The name of the signal.
- ... Extra arguments for the callback functions. Each connected function receives the object as first argument and then any extra arguments that are given to emit_signal().
- :connect_signal (name, func) · Inherited from gears.object
-
Connect to a signal.
Parameters:
- name string The name of the signal.
- func function The callback to call when the signal is emitted.
- :weak_connect_signal (name, func) · Inherited from gears.object
-
Connect to a signal weakly.
This allows the callback function to be garbage collected and automatically disconnects the signal when that happens.
Warning: Only use this function if you really, really, really know what you are doing.
Parameters:
- name string The name of the signal.
- func function The callback to call when the signal is emitted.
Signals
- file::acquired
-
Emitted when a file is read.
Arguments:
See also:
- file::failed
-
When reading a file failed.
Arguments:
- path string The path.
- files::acquired
-
Emitted when all files are read.
Arguments:
- contents table Path as keys and content as values.
- failed table The list of files which could not be read.