How to customize each Firefox window icon individually?

8

1

I'm a tab hoarder and I admit it. But at least I've sorted them into contextual windows now, and I'd love to have different icons for each window in the Windows task bar (not the tab bar, which is governed by the favicons). How can this be achieved?

As an example imagine I have one Window with various StackExchange tabs, for which I would like to have the StackExchange logo as icon, another window with GitHub repos that should have the GitHub logo, and a third window with tabs specific to a project for which I have a custom icon (or just e.g. a coloured letter atop the Firefox logo).

I'd also accept a solution that manages to simply use each window's first tab's favicon, though independence on that would be preferred.

Tobias Kienzler

Posted 2019-01-11T09:35:49.010

Reputation: 3 262

Do you mean you have pinned items to the taskbar, and have you tried right-click > Properties > Change icon? – harrymc – 2019-01-15T08:16:48.343

@harrymc With that I can only change the icon of all Firefox windows to the same icon. What I would like to achieve is during an open session that each opened windows should have a different icon. I think this cannot be achieved on a system level (since the respective windows' titles change depending on the active tabs), so the question is whether it is possible from within Firefox somehow, probably via an addon. – Tobias Kienzler – 2019-01-15T09:00:17.047

How do you handle your contextual windows? Do you run separate profiles or do you just have a single one? – Seth – 2019-01-15T09:11:22.730

@Seth Just a single one. Using separate profiles sounds like an interesting approach, though now I'm just starting to use Firefox' containers, which seems less of a hassle to me – Tobias Kienzler – 2019-01-15T10:11:32.100

Answers

3

This can be done using the free AutoHotkey.

Create a .ahk text file and enter these contents:

#Persistent
SetTitleMatchMode, 2    ; A window's title to contain the text anywhere

F9::
ChangeWindowIcon("title text", "\path\to\iconfile.ico")

ChangeWindowIcon(WinSpec, IconFile) {
    hIcon := DllCall("LoadImage", uint, 0, str, IconFile, uint, 1, uint, 0, uint, 0, uint, uint 0x10)
    if (!hIcon) {
        MsgBox, "Icon file missing or invalid in `nChangeWindowIcon(" IconFile ", " WinSpec ")`n`n"
        Throw "Icon file missing or invalid in `nChangeWindowIcon(" IconFile ", " WinSpec ")`n`n"
    }
    hWnd := WinExist(WinSpec)
    if (!hWnd) {
        MsgBox, Window Not Found
        return "Window Not Found"
    }
    SendMessage, WM_SETICON:=0x80, ICON_SMALL:=0, hIcon,, ahk_id %hWnd% ; Set the window's small icon
    SendMessage, WM_SETICON:=0x80, ICON_BIG:=1, hIcon,, ahk_id %hWnd%   ; Set the window's big icon
    SendMessage, WM_SETICON:=0x80, ICON_SMALL2:=2, hIcon,, ahk_id %hWnd%    ; Set the window's small icon
}

The script is set to be activated upon hitting F9, but you may set your own key. Add as many calls to the function ChangeWindowIcon as required, each with the parameters of:

  • Unique text that can be found in the title
  • The full address of an icon file

When the script is running, you may right-click its green H icon in the traybar and choose Exit to terminate. If it works, you may also add it to your Startup group to run when you login.

Note that AutoHotkey can also launch your favorite tabs and arrange their layout on the screen. There isn't really much that AutoHotkey cannot do.

harrymc

Posted 2019-01-11T09:35:49.010

Reputation: 306 093

Good old AHK Hm, that will work I guess, though this won't persist over sessions. But starting from this, maybe AHK can also grab and use the favicon of the first (or currently active) tab of each Window before I end up reimplementing session management in AHK But the bounty will probably be yours – Tobias Kienzler – 2019-01-18T15:45:58.730

1Grabbing the favicon of a tab will need some work, since the tabs in Firefox are not real graphical objects. Firefox just paints them on the canvas. Probably a complete solution will require a Greasemonkey script to capture the active tab's icon, maybe through the clipboard, and an AHK script to loop over the clipboard and do the work. You are looking at a good amount of work. If the tabs are grouped in Firefox sessions, it would be simpler to stay with a fixed icon per group. – harrymc – 2019-01-18T16:25:54.003

Okay, that sounds like quite some effort. I guess then I might as well dive into Firefox' source code if the addon API doesn't expose the window icon anyway... Which I wanted to learn about anyway – Tobias Kienzler – 2019-01-19T10:03:46.913

Well, you deserve the bounty, no question :) But accept it I cannot yet, too much manual work left for the lazy likes of me... – Tobias Kienzler – 2019-01-21T11:04:28.223

You could probably set the script to check the command line for specific profile names, and use one of the methods in https://superuser.com/q/440189/59597 to run multiple instances dedicated to certain sites. Difficulty is that they'd probably still be grouped as one icon, I think. I'll have to give it a try.

– SilverbackNet – 2019-10-01T03:49:12.530