This is an X server bug: using Coordinate Transformation Matrix
for a relative pointing device (such as a mouse) is broken (the matrix is wrongly applied to coordinates from the WarpPointer
request).
Looks like the only remaining way to configure pointer speed when using the libinput
driver is to set the mouse resolution in <code>hwdb</code> configs:
xinput list-props 'USB OPTICAL MOUSE'
and look for the Device Node
property (it would be something like /dev/input/event12
).mouse-dpi-tool /dev/input/event12
(use the device node which you found at the step 1), move the mouse as requested, then press Ctrl+C to exit. The program should print the appropriate hwdb entry for the device (two lines, the second line starts with a single space)./etc/udev/hwdb.d/71-mouse-local.hwdb
and place the new entry there.systemd-hwdb update
to update the hwdb cache.udevadm trigger /dev/input/event12
(use the device node which you found at the step 1) to apply the new resolution settings.You may want to adjust the resolution value in MOUSE_DPI
to your liking (increasing the resolution value will make the pointer move slower). In some cases you may need to fix the first line of the entry (e.g., for a PS/2 mouse mouse-dpi-tool
gave unknown bus type
, which did not match the real device).
I used guake, too, but switched to scratchpad, which is in my opinion a better solution, because it works without an extra application. In the following link are several solutions, which could help with your problem. http://awesome.naquadah.org/wiki/Drop-down_terminal
I started with Awesome a month or so ago and the first thing I did was read the first 7 or 8 chapters of this book on Lua programming that I found on the official Lua website. You definitely don't need to know all that info super well to be able to use Awesome but it helped with understanding the syntax and default rc.lua
. I then set out to understand the default config and break it out into separate files and directories because the default rc.lua
is a bit lengthy for me. While my config right now still looks very much like the default I have a much better understanding of what I need to do to customize further and am able to look at other people's code on github for ideas and tips. Of course, the official documentation is super helpful as well. Overall, I think it's a bigger up-front investment to use Awesome but so worth it allows for some really cool functionality you just cannot get with other WM's. Hope this helps and good luck!
Awesome reacts to "urgent" signals send by the applications.
But not all applications send those by default - This should help with irssi.
You can customize the colors in your theme.lue file by changing (or adding) the
theme.bg_urgent theme.fg_urgent
(for background and foreground color respectively) values.
Regarding the task list:
If you are using Awesome 3.5.1+: Simply add this line to your theme.lua file:
theme.tasklist_disable_icon = true
Also have a look at this: http://awesome.naquadah.org/wiki/Remove_icons
Not sure about the menubar though as I don't use it.
Maybe This could help.
It seems that an error occurs when lain tries to open the pipe, you could change the line:
local f = io.popen("amixer get " .. alsabar.channel)
for
local f, error = io.popen("amixer get " .. alsabar.channel .. "2>&1")
and then handle the error as you want... could be using naughty to print it to screen or to a file like /tmp/awesome.error.
Also you could attach a terminal to the awesome using this link to see the stderr of awesome that should contain a sign of what the hell is happening...
More than a solution this just a better way of debugging.
edit: grammar
You can create a menu like this:
mymainmenu = awful.menu({ items = menu_items, width = 150})
It might be possible to do this for each submenu, I haven't tested. Here are the options you can add: awful.menu.html#new
I don't have my config here, but don't forget to checkout the list of configs on the Wiki: http://awesome.naquadah.org/wiki/User_Configuration_Files
On my config, I've added 10 more tags that are activated with the F1-10 keys, and use Eminent to hide the tags without windows.
I don't use many widgets, but I do have a few custom actions for the text box:
I've also configured Awesome to call various mpc
and amixer
commands when I press my multimedia keys.
If anyone wants the code for any of this, just ask!
Is it set to being sticky/whatever it is called? I don't remember the shortcut for that or even if I have the default (assuming you do).
Edit: Check your keyboard config for a sticky shorcut (am currently on my phone so I cant check)
Also, when I used the hangouts app I usually madr it floating and sticky, but that was just my personal preference.
It is probably possible, but looks quite harmful. There are quite a few ways to enable spell autocorrection in different applications (like OO-writer or vim). But think about terminal or password dialog. You probably don't want spell correction to work automatically everywhere. If we are talking about app names the zsh (and fish) completion is capable of fixing small errors like switched letters. There is also fzf project which provides fuzzy search through files, commands history and even more.
I linked to the screenshots page above, but here's the intro page for the release:
https://gobolinux.org/gobolinux016.html
GoboLinux is a research/experimental distro, so we thought it wouldn't be a problem shipping with a git snapshot (soon-to-be 4.0), because I bumped into some bugs in 3.5.x when designing the Gobo theme and config that were fixed in git.
I've been using Gobo with Awesome-git for a few months now and it's very stable (the few issues I had during this period were duly reported in the Awesome issue tracker and fixed by the Awesome team).
Our distro is a Live-ISO so if you want to give it a spin without committing to an installation, just go ahead, download the image, and run it straight from the ISO. :)
https://web.archive.org/web/20160304133257/http://awesome.naquadah.org/wiki/KDE_and_awesome - This works for me, took me sometime to find it since it's not googable but a guy in IRC mentioned it a week ago and it has been working for me. Most places only mention the KDEWM env var but it crashed on start until I put Hide into .desktop files to prevent them from starting.
You could register the widget with Vicious, then use Vicious' timers to update it. You can find information and examples here: http://awesome.naquadah.org/wiki/Vicious
If you don't want to use Vicious, you can probably adapt code from an existing widget that depends on timers to update their display, like Lain's weather widget. https://github.com/copycat-killer/lain/blob/master/widgets/weather.lua
I struggled to make guake, yakuake, tilde, and several other drop-down terminals work in awesome and never figured out how to work around this problem. In the end, I used scratchdrop. Only downside compared to the others is that each monitor gets its own distinct terminal, rather than sharing a single dropdown amongst them.
The upside is that it's faster and more awesome-y.
From what you wrote I'm wondering if you created an rc.lua?
I order to use a custom theme (or in fact any custom settings at all) you need to copy the global rc.lua
cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua
and then edit your local version. To change the theme you can follow this section from the wiki.
Awesome will always look for a local config first and if it can't find one or if it causes an error on load it'll fall back to the global one. You should therefore never edit the global one.
That's what I, quite naturally did. The Wiki isn't so "beginner friendly". It assumes you know how "Awesome" handles tags and themes. It is very informative though and I'm sure that it would be helpful when I'll eventually get there. I tried to read the so called "My first Awesome" which seems to be outdated, and what I've learned from it does not apply to any of the existing configuration files I tried to download and reverse engineer, most likely due to the extensive use of libraries.
I could read the documentation, though I would rather having a more detailed guide with a practical approach, so that I would be able to experience the configuration and use the documentation as further reading when I want to implement a specific thing.
The same way that reading the English-French dictionary wouldn't be an efficient way to learn French, reading about the contents of the different modules without knowing the basics would require a massive effort before I would be able to configure the window manager the way I want.
As for now, I am not sure I have fully understood the concept of themes and the interaction between them and the configuration itself. Moreover, I'm not sure about the use of each one of the libraries with the annoying names. I ended up breaking my configuration and my system refuses to load.
By default there is no way you can map the space key twice. Awesome stores your rc.lua keybindings in a table, so they're a hash, not a function. It matches simultaneous keypresses to it's hash table, and when they match, it executes the function assigned.
There is a way however in Awesome to trap keypresses. I've never tried it, and I can't say if there would be a performance penalty doing it, but if you want to experiment, you can find info on it here, with examples:
http://awesome.naquadah.org/wiki/Modal_Keybindings http://awesome.naquadah.org/doc/api/modules/keygrabber.html
launching an app to a certain tag (desktop) is as simple as adding a rule for it. http://awesome.naquadah.org/wiki/Understanding_Rules
but this cannot be done using an xinit script. you need to put it at the bottom of your main rc.lua, something like:
awful.util.spawn_with_shell("icedove")
if you have an icedove rule in place (say, send it to tag 2) this will happen since awesome is already loaded. hope that helps!
This might be helpful:
>For window properties that are strings, the property values you supply to rule et al are compared to the window properties using the Lua string.match() function, which performs sub-string and pattern matching. Thus, a rule of the form { class = "x" } would match all windows where the character "x" appeared anywhere in the window's class property.
Did you try it without any wildcards?
Hmm. Everything looks right. I think you should try starting redshift at boot via your rc.lua. (similar to the way you would start a compositor, or something of that nature)
Should be doable by adding:
os.execute("command to start redshift")
This page will have have a lot of relevant information regarding the subject. I'm pretty sure that's the issue. Everything checks out, but I don't think you're starting it correctly.
Conky gets its information from /proc/net/tcp
and /proc/net/tcp6
: https://github.com/brndnmtthws/conky/blob/3e3dd163677f00041a43c64aef695e965a7bfa8b/src/libtcp-portmon.cc#L487-L488
The code ignores all lines with inode == 0
or state != 1
: https://github.com/brndnmtthws/conky/blob/3e3dd163677f00041a43c64aef695e965a7bfa8b/src/libtcp-portmon.cc#L353
If you just want the total number of TCP connections, that can be done with a relatively simple shell command: awk '{ if ($4 == "01" && $10 != "0" ) {print} }' /proc/net/tcp /proc/net/tcp6 | wc -l
. This can be turned into a widget with a textbox and a timer.
Parsing port numbers in awk is beyond me currently, but certainly doable. Of course, all of this can also be done in Lua and it's not all that complicated.
Yeah the first thing I did even before looking at the Awesome docs is read the first 8 or so chapters of this book on Lua. It's a bit old but also free and online. I still refer back to it while working on my own Awesome config and have read some other relevant sections.
I just went through my whole rc.lua only to discover I have no shortcuts that use Alt.
​
However, from the documentation for awful.key, we have this:
mod <strong><em>table</em></strong> A list of modifier keys. Valid modifiers are: Any, Mod1, Mod2, Mod3, Mod4, Mod5, Shift, Lock and Control.
​
So if this is possible, then it is one of the Mods. I know that Mod4 is the windows key, and would guess Alt is Mod3, but it is a small enough list I would just try them all until one works.
Not sure about Void install beyond what the GitHub repo says, but for the modules missing - it sounds like maybe you tried to git clone a repo for the dot files? If so, make sure to grab the submodules.
https://stackoverflow.com/questions/3796927/how-do-i-git-clone-a-repo-including-its-submodules
Sure can buddy, it's actually very achievable, check this out: https://www.debian.org/devel/debian-live/ and this one is sort of barebones but it might make a good template, you can see it already has AwesomeWM on it.
If I understand your issue properly, this is the solution
(Btw, if you use mpv a lot, I recommend spending some time browsing through the man page, it's FILLED with info on stuff you probably want to do but don't know how to)
i'm using awesome 4 on Linux Mint 18. You can use this ppa https://launchpad.net/~klaus-vormweg/+archive/ubuntu/awesome to install awesome 4. just do this stepps in your terminal:
sudo apt remove awesome
sudo add-apt-repository ppa:klaus-vormweg/awesome
sudo apt update
sudo apt install awesome awesome-extra
restart your login manager or reboot your machine. Now you can select awesome in your login manager ;)
Linux Mint 18 (not Mint LMDE) is based on Ubuntu 16.04, so you can find more help searching for "ubuntu 16.04" insthead of "Linux Mint". 99% of Ubuntu solutions you will find are working on Mint too.
if you unfamiliarly with ppa you can read this before: https://askubuntu.com/questions/4983/what-are-ppas-and-how-do-i-use-them
Hi r/awesome
I'm trying awesomewm on the Debian stable (buster).
I'm not able to update the menu as you can see from the picture.
I've tried to follow the instructions here, but without success.
Any suggestions?
Thanks.
The big problem of using unmanage is that Awesome gets any client except Rofi: if I spawn a terminal using it, the desktop won't return to its normal state unless I close that terminal; the same happens if I open Nautilus, Rhythmbox or any other program. Awesome will only focus on clients that are not Rofi, so closing it after running a command does not have any effect on the desktop; like it was 'unmanage [every client BUT rofi]'.
I don't know how to tell Awesome I want Rofi to be the client it focuses on. Using an 'if client.name == 'rofi'' (I know the name by using xprop) does not seem to fix anything. As far as I could test, this comparison always fails becasue client is never Rofi, but a terminal, Nautilus or whatever.
This situation is generated with this alternative version of the program, which I used folllowing a Stack Overflow answer:
--From PROmpt COMmand: procom = "rofi -show run"
awful.key({ modkey }, "r", function () awful.util.spawn(procom)
mywibox[mouse.screen].visible = false,
awesome.util.spawn(blur)
client.connect_signal("unmanage", function(c)
if c.name == "rofi" then
mywibox[mouse.screen].visible = true
awesome.util.spawn(unblur)
end
end
end),
This alternative makes my wibar disappear and my wallpaper to blur, but cannot make it reappear: it can't enter the 'if' statement for the reason I have mentioned before.
That's why I have been trying another method (using shell commands) I feel more comfortable with to try to solve the problem. By now, I have reported an issue to Rofi's GitHub page and I'm waiting to read what they can do about it.
Thank you for your response. It's been some time since I came across this problem and it's driving me crazy.
Probably the best place to start would be the Lua language site itself. There's a ton of documentation and tutorials, as well as books and e-books for purchase and for free. The free books tend to be for older versions of Lua, but they can still teach the basics and are a good way to learn the structure of the language.
Learning the basics goes a long way in understanding Awesome's API documentation and examples of customizing you may find on GitHub and elsewhere.
An added benefit to learning Lua, beyond just customizing Awesome, is it's a great scripting language. You can use it to create little CLI utilities to automate chores on the command line, or write little programs to do useful things.
>The one thing I like about i3 more than awesome is the manual tiling feature. It allows you to set up your workspace the way you want to.
Sure i won't argue that, i think it ends up being a personal preference at the end of the day,
>Also I remember there being a dynamic tiling feature in i3 as well, by fixing the tiling layout of a workspace (same as awesome). Is there not?
There is this:
https://i3wm.org/docs/layout-saving.html
But it's a bit more work, you have to make placeholders for the applications to fill in the layout and they must match the name of the placeholder that you want and if i remember right if you close the window then the placeholder is also gone so it ruins the layout.
Thank you very much for the in-depth analysis!
$ grep -r "c.content" ~/.config/awesome/ $ grep -r "c.content" /usr/share/awesome/
Nothing found.
$ grep -r "c.content" /usr/share/doc/awesome/ /usr/share/doc/awesome/doc/classes/client.html:<pre><code>gears.surface(c.content) /usr/share/doc/awesome/doc/classes/client.html:<pre><code>gears.surface(c.content):write_to_png(path)
I do not use https://www.archlinux.org/packages/community/any/vicious/.
$ grep -r "gears.surface" ~/.config/awesome/
Nothing found.
$ grep -r "gears.surface" /usr/share/awesome/
Many things found.
There may be an error in ~/.Xresources? XTerm has a lot of settings. I will look for...
solved thanks man!!hope this helps soneone else
​
#!/bin/sh
mail=`curl -su USERNAME:PASSWD https://mail.google.com/mail/feed/atom || echo "<fullcount>unknown number of</fullcount>"`
mail=`echo "$mail" | grep -oPm1 "(?<=<fullcount>)[^<]+" `
echo "$mail"
​
​
--Gmail Widget
function run_script()
local filedescriptor = io.popen("~/.local/bin/gmailcount.sh")
local value = filedescriptor:read()
filedescriptor:close()
return {value}
end
mailwidget = wibox.widget.textbox()
vicious.register(mailwidget, run_script, 'inb: $1', 20)
We included Awesome-git in the last release of GoboLinux (it's a research/experimental distro, so I thought it wouldn't be a problem to include a snapshot — I've been running that particular snapshot for a good while, it's pretty stable). Here's our screenshots, I designed a custom theme and config as well:
I found bug.n pretty nice actually. Open source and somewhat actively maintained. Also leverages AutoHotkey which has a lot of useful features itself.
I use a snippet from the now defunct awesome-wiki (http://awesome.naquadah.org/wiki/Autostart#PID_way) in rc.lua:
function run_once(prg,arg_string,pname,screen) if not prg then do return nil end end if not pname then pname = prg end if not arg_string then awful.util.spawn_with_shell("pgrep -f -u $USER -x '" .. pname .. "' || (" .. prg .. ")",screen) else awful.util.spawn_with_shell("pgrep -f -u $USER -x '" .. pname .. "' || (" .. prg .. " " .. arg_string .. ")",screen) end end
And can use it to start applications once:
run_once("nm-applet")
What version of awesome are you using? See my reply above.
Here you can find further information on how to set up your wallpaper with the gears.wallpaper
module. It supports tiling as well.
>How do you move it?
awful.key({ modkey, }, "o", awful.client.movetoscreen ), awful.key({ modkey, }, "F1", function(c) awful.client.movetoscreen(c,1) end), awful.key({ modkey, }, "F2", function(c) awful.client.movetoscreen(c,2) end), awful.key({ modkey, }, "F3", function(c) awful.client.movetoscreen(c,3) end),
OR
awful.button({ modkey }, 1, awful.mouse.client.move),
(Just because I wanted to be sure it was consistent over all methods I knew.
>Which version of awesome are you using?
Installed Packages Name : awesome Arch : x86_64 Version : 3.5.6 Release : 1.fc21 Size : 1.4 M Repo : installed From repo : updates Summary : Highly configurable, framework window manager for X. Fast, light and extensible URL : http://awesome.naquadah.org License : GPLv2+ and BSD Description : Awesome is a highly configurable, next generation framework window : manager for X. It is very fast, light and extensible. : : It is primary targeted at power users, developers and any people : dealing with every day computing tasks and want to have fine-grained : control on its graphical environment.
>Can you try Git master?
I could, but I try to stick with the Repos where possible. This would be a last resort grade option for me because I can't afford down time on this machine. I may set up a VM to test the Master Branch on it.
>Multi-monitor support has bugs, and some programs behave weird. It would be also good to report/answer this via the Github issue tracker.
If I fail to get anywhere with Git/Master (they haven't fixed it in a downstream version of mine) then I will.
Vain isn't hard to google. Literally searching for "awesome vain" provides it in the first link.
Anyway, I'm not sure if my hacks work with vain-again, but I do know that lain is the successor of vain for awesome 3.5.
Hopefully not too late, but in general, you can use the geometry method: http://awesome.naquadah.org/doc/api/modules/client.html#geometry
Somthing like:
gm = {x=x, y=y, height=height, width=width} c:geometry(gm)
where c is a client object.
More testing - and part of a solution...
Shamefully, I apparently didn't read the wiki closely enough:
"In the xprop output, the class is the second value of the WM_CLASS property ... the instance is the first value of the WM_CLASS property."
So I changed both rules to instance = "crx_"
, restarted, tested - I got a "It works!" callback on receipt of a new hangout, but the window still wasn't minimized. So, I'm now confident that awesome can identify the right clients to minimize. It's how to make them minimized I'm still fumbling...
EDIT:
More progress!
{ rule = { instance = "crx_", },
properties = { urgent = true, minimized = true, tag = tags[1][9] } },
places the client on the ninth tag, minimized - I don't get why adding the tag makes a difference, but it seems to...
New problem though - the urgent status doesn't seem to be working as I would expect; the first message that comes in gets urgent status for a fraction of a second but then loses it. If a second message comes in then it turns urgent and stays that way until it gets focus, but obviously I'd like the first incoming message to retain urgency too. I've tried rearranging the order of the rules, and even removing the minimize just in case that was interfering, but nothing I've done seems to alter the behaviour. I also tried a similar rule with vlc and that behaved the way I would have expected - on opening it is moved to the specified tag and turns (and remains) urgent.
Any ideas welcome and gratefully received!
I’m not too familiar with krunner TBH. Here’s a slant page comparing them: https://www.slant.co/versus/11688/16919/~krunner_vs_rofi
I like rofi because it has a great application launcher, window/app switcher built in, and you can have it run just about any command or script you can think of!
> dynamic layout (awesome) vs create your own (i3) : in awesome, you choose a layout and just create your windows, awesome place them in the layout for you. In i3 you have to "manually" change your tree view in order to get the layout you want. The i3 system is more flexible car in the end you can do ANYTHING you want (especially with tabs / stacks) BUT it requires a LOT of extra keytap to have the layout you want. And if you want to switch between two layouts (for example having all your tiles even vs having a main split screen and a lot of tiles on the left), awesome do that like a breeze.
That was not a point for me because of https://i3wm.org/docs/layout-saving.html. I know this is still stateful.
> configuration : ... But with awesome you have more flexibility and extensibility.
Till now this is also my major reason with respect to the inter process communication, because from that scratch, each workspace or tag become to act as a custom development environment for your specific use cases. But there are some doubts left that the "workarounds" which I have to use in i3 to reach the goal has the same effort then if I would configure awesome. But till now I'm in cheerful spirits.
> tags (awesome) vs workspaces (i3) : in i3, your windows belong to a workspace and you can view a single workspace at once. In awesome, your windows belong to one or multiple tag and you can view any tags combination you like. This is a bit tricky at first but it's definitely powerfull when you get the hang of it.
Like in point 1 .... I can't really see a standard use case when I'm working on a PC where this flexibility becomes a benefit.
As already mentioned, awful.spawn.once may solve your problem. If your are not constrained to just awesomewm specific ways of doing so you may consider systemd way of running stuff on specific user login. Since most of distributions at the moment are using systemd, if you don't know what start the system it's likely to be systemd. My suggestion is to use userspace systemd unit, like this one for redshift:
[Unit] Description=Redshift display colour temperature adjustment Documentation=http://jonls.dk/redshift/ After=display-manager.service
[Service] Environment=DISPLAY=:0 ExecStart=/usr/bin/redshift Restart=always
[Install]
After creating such file you can easily enable it for user by running $ systemctl --user enable redshift # as USER not root and it will start every time your login no matter what DE or WM are your using.
It's not really clear why to rely the work of deciding if it's the first WM start on WM itself, which has to decide according some indirect markers. Systemd on the other hand knows exactly if it's the start of user session or not.
Before I had the awesome version in the official repository, which was 3.5.3 (got just bumped to .4).
Now I switched to the aur package which build the current master from git.
i installed manjaro + awesome with manjaro architect and it installed lots of xfce settings mangers with it, been working really well. architect caused me to loose some brain cells but it went ok after all. i guess you can install those packages manually too and they should be working properly?
there used to be manjaro awesome edition but i think it's not maintained anymore. last time i tried it live usb didn't start correctly. you can still download it tho: https://manjaro.org/download/community/awesome/
I do not use this media player, however it has a plugin providing MPRISv2 support: https://deadbeef.sourceforge.io/plugins.html. And then just search for MPRIS widget, like https://github.com/streetturtle/awesome-wm-widgets/tree/master/mpris-widget
Google lead me to this: https://studio.zerobrane.com/doc-remote-debugging
However, you should still run awesome for debugging in Xephyr. If you do this in your "actual" awesome session and the debugger breaks awesome, well, your WM is now frozen and you cannot e.g. change window focus.
I don't know if it's doable with local variables. If your variable resides in some table then you have some options. By setting __index
and __newindex
metamethods you can track a variable access. I should also add that modules usually return a table. So this approach may be applied to a module global variable in a way. Take a look at this tutorial.
This is not the way to do.
Connecting rules from the client manage signal means you create a global rule every time a client is created. You should only define rule once! It's then called when a client is managed by awesome.
You use awful.rules.rules = NEW_TABLE
. It means you are replacing (overwriting!) all existing rules with rules defined in the NEW_TABLE. It's a big design issue. Basically, you erase all other rules defined previously by your config.
You chain connect_signal and disconnect_signal wrongly. Connect_signal means you add a callback function to the stack of functions to be called when the signal is triggered. Disconnect_signal means you are removing the function from this stack of callable. The function reference should be the same. With your current code, you use 2 different anon functions. The correct way to do should be :
local callback = function (c) ... end
client.connect_signal("manage", callback)
-- the callback function is called when a new client is created
client.disconnect_signal("manage", callback)
-- the callback function will no more be called at client creation
IIRC, version 4.3 does NOT allow to add new rules dynamically. The awful.rules.rules table should be immutable and sets only once in your configuration. I guess you can try table.insert
, tho (https://www.lua.org/manual/5.3/manual.html#pdf-table.insert). But it may not work...
(with awesome git version, there is a new API allowing to manage rule with more flexibility)
> I have scratchpad terminal which is centred and doesnt fill the screen and then have a complicated keybinding to add a terminal in tiling mode if i need it.
It sounds really interesting. Do you mean you have 2 keybindings to spawn a tiled terminal and a center floating terminal?
I think they haven't mentioned it because the function isn't something specific to awesomewm, but a part of Lua language itself. Though it should be there somewhere in docs as it is a common occurrence.
You can find more about garbage collection in Lua here.
They are all just opts for collectgarbage function. Collect is the default one though. It just mentioned step because it was there in the copypasta I had. Sorry for that.
You can learn more about all the options here.
This is a working example: flite -t "$(xclip -o)"
. If you manage to get a native awesome's version running, you can use <code>string.format</code> to build your command.
Isn't c.get_xproperty(c, "WM_NAME")
equivalent to c:get_xproperty("WM_NAME")
, i.e. colon :
for methods (function that acts on an object) and dot .
for functions? [Source]
As for the issue, I get the same error.
I never really tried to "learn" Lua. Lua is a very small, but very powerful language. Learning as you code is often good enough. Of course the first couple of hours need some Google queries, but after that you only need to query the manual when you want to push your understanding. The "PIL" official Lua book is quite good. Awesome documentation also has many examples, but not for the wallpapers (yet).
https://awesomewm.org/apidoc/documentation/03-declarative-layout.md.html
Your code hasn't formatted properly so struggling to read, but looks like it might just be a race condition (notice the "async" part of easy_async_with_shell
).
Regardless, I tend to prefer decoupling my logic slightly anyway using connect_signal
and emit_signal
. There's a couple of advantages of doing it this way:
e.g. consider the following (for connecting to ProtonVPN using a button)
-- Provides: -- vpn::status -- status (boolean) -- local awful = require("awful")
local update_interval = 10
local vpn_script = [[ sh -c " pvpn --status | grep OpenVPN | awk '{print $3}' "]]
-- Periodically get vpn info awful.widget.watch(vpn_script, update_interval, function(widget, stdout) local connected = (stdout:gsub("^%s*(.-)%s*$", "%1") == 'Running') and true or false awesome.emit_signal("vpn::status", connected) end)
In the above, I'm polling the VPN status, but the key part is emit_signal
. You could use this inside your easy_async_with_shell
callback to emit the value of stdout
To respond to these signals, use connect_signal
. e.g.
awesome.connect_signal("vpn::status", function(connected) -- ... handle connected status (omitted for brevity) end)
Hope that helps :)
Best place is google play store for android apps. If you have an android phone, install any one or more icon packs. Now install themex app which will let you extract icons from the icon pack as pngs. You can transfer them to PC and use.
The advantage of the app I linked above is it allows you to extract multiple icons at a time. I couldn't find many who could do that.