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 <brenon.ale...@gmail.com>
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 <z1693...@students.niu.edu> 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 <brenon.ale...@gmail.com>
>> 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 <z1693...@students.niu.edu>
>>> 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 . <elv1...@gmail.com> 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 <z1693...@students.niu.edu>
>>>>> 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 <
>>>>> brenon.ale...@gmail.com>
>>>>> > 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 <
>>>>> z1693...@students.niu.edu> 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
>>>>> >
>>>>> >
>>>>>
>>>>
>>>>
>>

Reply via email to