„Rontsuk el” az Alt+F4-et, javítsuk meg a Firefox sessiont.

Ma felmerült az az igény, hogy Fluxbox alatt Alt+F4-gyel ne tudjam bezárni a Firefox ablakát – korábban többször előfordult, hogy véletlenül kiléptem a programból, és ez zavaró volt.
Eddig a ~/.fluxbox/keys fájlban így definiáltam az ablak Alt+F4-gyel való bezárását:

Mod1 F4 :Close

Ezt átírtam erre:

Mod1 F4 :ExecCommand savefirefox.sh

A

savefirefox.sh

pedig így néz ki:

#!/bin/bash 
if [ x"`xwininfo -id \`xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| cut -d ' ' -f 5\` | grep xwininfo | sed 's/.*".* - \(.*\)"$/\1/'`" != x"Mozilla Firefox" ]; 
then 
wmctrl -c :ACTIVE:; 
fi
  1. megszerezzük az aktív ablak ID-jét:
    xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| cut -d ' ' -f 5
  2. megszerezzük az ablak címének utolsó kötőjel utáni részét:
    xwininfo -id WINDOW_ID | grep xwininfo | sed 's/.*".* - \(.*\)"$/\1/'
  3. … és ha az nem Mozilla Firefox, akkor jól bezárjuk az ablakot…

A dolog apropója (avagy a Firefox session megjavítása)
Ma sikerült véletlenül bezárnom a Firefoxot, és elveszett mélyre el lett ásva a session. A dolog úgy reprodukálható, hogy megnyittatunk a Firefoxszal egy tool windowt (például a Web Console-ban rákattintunk egy requestre), aztán azt szórakozottan Alt+F4-gyel bezárjuk. Mivel nem rendes ablakról van szó, ezzel a művelettel – Fluxbox alatt legalábbis – a teljes böngészőből kiléptünk, ráadásul a session is oda.
A dolog kezelhető, a Firefox profil könyvtárában van egy (csomó) JSON formátumú sessionstore*.js fájl, ebből a legfrissebb elvileg tartalmazza az elveszett sessiont, gyakorlatilag nálam a böngésző a kezdőlapot hozza be, az előző munkafolyamatot a fájlban található _closedWindows property tartalmazza.

Miután visszamásoltuk a megfelelő sessiont a helyére, ellenőrizzük a fájlt:


json_xs -t null <sessionstore.js

(ugyanezzel a paranccsal meg is formázhatjuk, de nem fontos…)

Ezt követően a böngészőt elindítva ott vagyunk, ahol elrontottuk. A műveletet nagy mértékben támogatja a Vim, gondolom az Emacs is; egyszerűbb szövegszerkesztőkkel csak okosok vágjanak neki.

Hozzászólások

A History->"Restore Previous Session" nem jatszik?

Igen, az van beállítva, és általában működik is. Viszont a postban részletezett módszerrel többször vesztettem már el úgy a sessiont, hogy nem volt a „Recently Closed Windows”-ban sem (különös, hogy a megfelelő sessionstore.js fájlban ennek ellenére pont a _closedWindows tömbből került elő.)

Miközben a sessionstore.js-t bütyköltem, három dolog jutott eszembe:
- Jó lenne, ha a sessiönt úgy, ahogy van, el lehetne menteni. Jelenleg picit esetlegesnek tűnik, hogy mikor készít új fájlt. Tudom, könyvjelzőzhetem az összes fület, de az még elég messze van a session mentésétől.
- Egyes sessionstore fájljaim mérete meghaladják az 1 MB-t, ez elsősorban annak tudható be, hogy minden fülre külön megjegyzi az előzményeket, hogy működjön a böngésző vissza gombja. Jó lenne egy session-karbantartó tool, ami mondjuk az ötödiknél régebbieket törli belőle.
- Az volt a benyomásom, hogy a Firefox a túl nagy sessionfájlokat nem kezeli rendesen, pedig szerintem nem volt bennük szintaktikai hiba. A JSON-ellenőrzőt csak később vetettem be…

int getRandomNumber() { return 4; }  // ← aláírás
//szabályos kockadobással választva. garantáltan véletlenszerű.  xkcd