如何避免開啟二審?

如何避免開啟二審?

我設定lirc為使用遙控器控制我的電腦。在我編輯的不同模式之間切換.lircrc如下:

begin vlc
    include ~/.lirc/vlc
end vlc
begin gnome
    include ~/.lirc/gnome
end gnome
begin firefox
    include ~/.lirc/firefox
end firefox
begin me-tv
    include ~/.lirc/me-tv
end me-tv

begin
    prog = irexec
    button = KEY_YELLOW
    config = if [ -n $(pgrep -f vlc) ]; then (vlc &); fi
    mode = vlc
end
begin
    prog = irexec
    button = KEY_GREEN
    mode = gnome
end
begin
    prog = irexec
    button = KEY_RED
    config = if [ -n $(pgrep -x firefox) ]; then (firefox &); fi
    mode = firefox
end
begin
    prog = irexec
    button = KEY_BLUE
    config = if [ -n $(pgrep -x me-tv) ]; then (me-tv &); fi
    mode = me-tv
end

一切正常 - 除了切換到 Firefox:當 Firefox 運行時,我按下紅色按鈕,它會切換模式(正如它應該的那樣) 打開 Firefox 的第二個視窗/實例(因為它不應該)

此問題僅在 Firefox 中出現。

EditPreferencesTabsOpen new windows in a new tab instead已啟用:

選項卡首選項

會發生什麼當火狐瀏覽器運作時firefox從終端開始?

  • firefox- 第二個視窗打開
  • firefox about:startpage- Firefox 中會開啟一個預先設定起始頁的新選項卡
  • (!) firefox about:blank- Firefox 中會開啟一個新選項卡,其中包含我的個人起始頁 (快速撥號
  • firefox chrome://speeddial/content/speeddial.xul (這是快速撥號起始頁的網址)- 什麼都沒發生

會發生什麼當 Firefox 未運作時firefox從終端開始?

  • firefoxPreferences- Firefox 依照( Show my windows and tabs from last time)中的設定打開
  • firefox about:startpage- Firefox 開啟時會顯示一個帶有預先設定起始頁的附加新選項卡
  • (!) firefox about:blank- Firefox 開啟時會顯示額外的新空白選項卡
  • firefox chrome://speeddial/content/speeddial.xul- Firefox 無法開啟:
    *** Preventing external load of chrome: URI into browser window.
    Use -chrome <uri> instead

因此,當我修改腳本()中的命令config = ...並添加地址時,about:blank它部分解決了問題。由於問題仍然存在不將 Firefox 置於前台當它已經運行時。這只會發生有時

誰能幫我編輯這個腳本來修復這個不當行為?來源我修改過的腳本。

答案1

其中的一些 shell 程式碼來源沒有做它聲稱要做的事;主要是這樣的類型:

if [ -n $(pgrep -f vlc) ]; then (vlc &); fi

vlc &在兩種情況下運行。如果沒有與「vlc」相符的進程,並且恰好有一個與「vlc」相符的進程。如果有多個進程匹配“vlc”,vlc &則不會運行。所以這些 if 區塊是相當無用的。只是跑步vlc &可能會更正確。

不幸的是,糟糕的 shell 建議在網路上很常見。

根據您的問題描述,您希望的結果是,如果程式尚未運行,則運行該程式;如果正在運行,則將該視窗置於最前面,並給予其焦點。為此,wmctrl可以使用。

wmctrl -a 'Mozilla Firefox'將找到一個標題中包含“Mozilla Firefox”的窗口,然後“啟動”它。也就是說,移至其所在的工作區,將其置於最前面並給予其焦點。其次,如果沒有視窗匹配,wmctrl 將不執行任何操作並以非零(假)退出狀態退出,在這種情況下,我們可以假設程式沒有運行,並啟動它。

wmctrl -a 'Mozilla Firefox' || firefox &

但它仍然不完美。除 Firefox 視窗之外的其他視窗可能會在其標題中包含該字串,因此我們應該找到一種更可靠的方法來識別這種情況下的正確視窗。

使用 -x,wmctrl 將在視窗的 VM_CLASS 上進行操作,該視窗通常每個程式都有一個唯一的值。所有 Firefox 視窗都將具有 VM_CLASS“Navigator.Firefox” wmctrl -lx,在 Firefox 運行時運行可以看到

$ wmctrl -lx
...
0x03ba3d43  3 gnome-terminal.Gnome-terminal  pilot Terminal
0x04c000bc  0 Navigator.Firefox     pilot Group #1 - Speed Dial - Mozilla Firefox

這樣我們就可以選擇恰好有「Navigator.Firefox」作為 VM_CLASS 的視窗

wmctrl -Fxa Navigator.Firefox || firefox &

希望同樣的情況也適用於其他程序。

相關內容