Of I understand the
local naughty = require("naughty")
naughty.notify_ = naughty.notify
naughty.notify = function (args,...)
for i = 1, screen.count() do
args.screen = i
naughty.notify_(args,...)
end
end
code correctly, would you even need to modify naughty.lua?
Regards
Dave
_____
From: Alexis BRENON [mailto:[email protected]]
Sent: Friday, 5 June 2015 11:07 PM
To: Abraham Baker
Cc: Elv1313 .; awesome
Subject: Re: Naughty Notifications on multiple monitors
Instead of hidding the error just replace line 600 from:
local id = naughty.notify(args).id
to
naughty.notify(args)
You don't need the id any more if you don't use it. This way, no more error.
Le ven. 5 juin 2015 à 14:57, Abraham Baker <[email protected]> a
écrit :
Hi,
My goal is to get every notification to show up on all monitors. This isn't
critical; it just makes switching between standing/sitting easier.
I don't use often-updating notifications, so I (for now) don't care about
the notification id's. So, I'm thinking Elv1313's solution + hiding the
naughty.lua:600 error would be enough.
The relevant part of my rc.lua:
-- Standard awesome library
local gears = require("gears")
local awful = require("awful")
awful.rules = require("awful.rules")
require("awful.autofocus")
-- Widget and layout library
local wibox = require("wibox")
-- Theme handling library
local beautiful = require("beautiful")
-- Notification library
local naughty = require("naughty")
naughty.notify_ = naughty.notify
naughty.notify = function (args,...)
for i = 1, screen.count() do
args.screen = i
naughty.notify_(args,...)
end
end
local menubar = require("menubar")
local revelation=require("revelation")
-- {{{ Error handling
-- Check if awesome encountered an error during startup and fell back to
-- another config (This code will only ever execute for the fallback config)
if awesome.startup_errors then
naughty.notify({ preset = naughty.config.presets.critical,
title = "Oops, there were errors during startup!",
text = awesome.startup_errors })
end
-- Handle runtime errors after startup
do
local in_error = false
awesome.connect_signal("debug::error", function (err)
-- Make sure we don't go into an endless error loop
if in_error then return end
in_error = true
naughty.notify({ preset = naughty.config.presets.critical,
title = "Oops, an error happened!",
text = err })
in_error = false
end)
end
-- }}}
The relevant part of naughty.lua (the only part changed from default):
local id = naughty.notify(args).id
return "u", id
--local notifs = naughty.notify(args)
--local id = {}
--for notif in ipairs(notifs) do
-- id:insert(notif.id)
--end
Thanks,
Abe
On Fri, Jun 5, 2015 at 2:22 AM, Alexis BRENON <[email protected]>
wrote:
Hi Abraham,
I'm sorry, I don't understand what and when did commented out ?
Can you please post your config file on pastebin (http://pastebin.com/) or
something like that (github?).
To fix the error about 'insert' method, you can replace the line :
notifications:insert(i, naughty.notify_(args,...))
by
table.insert(notifications, i, naughty.notify)
Maybe you will have also to cheat a little bit if i doesn't start to 1...
Maybe I can explain you a little deeper what are the goals, this way you
will be able to debug yourself.
So, you want to have your notifications displayed on many screens (the exact
number is not important).
To do so, you have to redefine the classic naughty.notify function, to call
the initial naughty.notify function with the screen arg which loop over all
your screen. This is what is done by the code sent by Elv1313.
Nevertheless, the initial notify function returns a table representing the
notification, containing for example an ID (the id field). If you don't need
it, so fine, stick to the Elv1313 solution and remove any
naughty.notify(...).id code in your config.
But this ID can be useful if you need to replace a notification instead of
adding a new one (this can be the case if you use notification to display
volume changement, backlight modification, battery alert, whatever).
To handle this, your new notify function must return the created
notifications, or at least their ID.
This is what my code intend to do. For each call to the initial notify
function, I put the resulting table in a 'result' table, indexed by the
index of the screen on which the notification is displayed. Up to ypu after
to use it the right way.
The last chunk of code I sent you, handle the case where you want to use the
replaces_id argument of notify. As, in your case, you will have not only
one, but many notifications to replace (one on each screen), you will pass
the replaces_id argument as a table. This is not handled by the initial
notify function, so for the actual call you use the value at the index
representing your screen, as we do for the 'screen' arg.
I hope the reasonning is clear.
Alexis
Le ven. 5 juin 2015 à 05:13, Abraham Baker <[email protected]> a
écrit :
Hi,
When I commented out 600 and 601 of naughty.lua before changing rc.lua, I
got:
naughty.lua:604: bad arg #1 to 'ipairs' (table expected, got nil)
on both screens.
Then, when I added the updated naughy.notify function to rc.lua, I got:
rc.lua:22 attempt to call a nil value (method 'insert')
on only one screen
Ironically, the previous solution would work perfectly if it wasn't for the
error messages (which are critical and have to be clicked away)!
Is there a way to selectively silence the error messages related to
naughty.lua without silencing all errors?
Thanks,
Abe
On Thu, Jun 4, 2015 at 2:08 AM, Alexis BRENON <[email protected]>
wrote:
Hum, well, you will have to update a little bit your config!
First, the default naughty.notify function returns a table representing the
notification, but your new notify function doesn't, so update it :
naughty.notify_ = naughty.notify
naughty.notify = function (args,...)
notifications = {}
for i = 1, screen.count() do
args.screen = i
notifications:insert(i, naughty.notify_(args,...))
end
return notifications
end
Then line 600 you update to something like :
local notifs = naughty.notify(args)
local id = {}
for notif in ipairs(notifs) do
id:insert(notif.id)
end
Nevertheless, I think that you use the id value to replace the notification,
do you ? In this case, you will have to update again your custom
notification to handle the case if args.id is a table (instead of a number)
:
naughty.notify = function (args,...)
notifications = {}
naughty_args = args
for i = 1, screen.count() do
if args.replaces_id and type(args.replaces_id) == "table" then
naughty_args.replaces_id = args.replaces_id[i]
end
naughty_args.screen = i
notifications:insert(i, naughty.notify_(args,...))
end
return notifications
end
Or something like that.
Cheers,
Alexis
Le mer. 3 juin 2015 à 22:30, Abraham Baker <[email protected]> a
écrit :
That actually works, but also generates an error (in the form of a critical
notification on both screens) at the same time:
/usr/share/awesome/lib/naughty.lua:600: attempt to index a nil value
For context, line 600 is:
local id = naughty.notify(args).id
Looks like this is close to working right! Thanks!
On Wed, Jun 3, 2015 at 2:24 PM, Elv1313 . <[email protected]> wrote:
This should help:
local naughty = require('naughty')
naughty.notify_ = naughty.notify
naughty.notify = function (args,...)
for i = 1, screen.count() do
args.screen = i
naughty.notify_(args,...)
end
end
On 3 June 2015 at 10:42, Abraham Baker <[email protected]> wrote:
> I tried adding that code right after the local naughty =
require("naughty")
> that was already there, but it didn't work and actually stopped any
> notifications from showing on any monitor.
>
> I doubt it was the cause, but some other functions in my rc.lua also use
> local i as a counter; these shouldn't interfere with each other as long
as
> they are inside their own functions, right?
>
> Thanks,
> Abe
>
> On Wed, Jun 3, 2015 at 8:20 AM, Alexis BRENON <[email protected]>
> wrote:
>>
>> Hi Abraham,
>>
>> you have to call the anughty.notift() function twice, once for each
>> screen.
>> Maybe you can define a function which do it for you :
>>
>> local naughty = require('naughty')
>> naughty.notify = function (args)
>> local i = 1
>> while i <= screen.count() do
>> args.screen = i
>> naughty.notify(args)
>> end
>> end
>>
>> Or something like that
>>
>> Regards,
>> Alexis
>>
>> Le mer. 3 juin 2015 à 15:13, Abraham Baker <[email protected]> a
>> écrit :
>>>
>>> Hi,
>>>
>>> I have a standing/sitting monitor arrangement on my desk that makes it
>>> hard to see notifications on the upper monitor while sitting and vice
versa.
>>> I've been trying to change the default naughty config so notifications
>>> appear on both monitors at once, but so far I'm only able to just change
>>> which monitor it shows up on (not both).
>>>
>>> Is there an easy way to have notifications shown on all monitors?
>>>
>>> Thanks,
>>> Abe Baker
>
>