Mel*_*lle 3 gui browser alternatives
我在多个窗口(配置文件)中同时使用 Firefox 和 Google Chrome。
单击终端或其他 GUI 应用程序中的链接时,我想选择加载 URL 的浏览器/窗口,而不是运行默认浏览器(例如 Firefox)。有谁知道这样的程序是否存在?
根据我的(有限的)理解,我认为它应该替换默认浏览器并显示一个弹出窗口,其中包含已知浏览器和/或活动窗口,链接应该被委派到其中。
如果找到此答案,但它仅查找现有进程,如果找不到则启动默认进程。
小智 13
一个简单的解决方案zenity
#!/bin/sh\n\nBROWSER=$(zenity --list --radiolist --text \'\' --column=\'check\' --column=browser --title=\'select your browser\' TRUE "chromium" FALSE "firefox" FALSE "google-chrome-stable")\n$BROWSER $* &\n
Run Code Online (Sandbox Code Playgroud)\n\n配置操作系统(Manjaro 对我来说):
\n\n[Desktop Entry]\nVersion=1.1\nType=Application\nName=Select browser\nGenericName=Navigateur Web\nComment=Acc\xc3\xa9der \xc3\xa0 Internet\nIcon=google-chrome\nExec=/usr/bin/select-browser %U\nActions=new-window;new-private-window;NewShortcut;NewShortcut1;\nMimeType=text/html;text/xml;application/xhtml_xml;image/webp;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;\nCategories=Network;WebBrowser;\nStartupNotify=true\nStartupWMClass=select-browser\n
Run Code Online (Sandbox Code Playgroud)\n\nxdg-settings set default-web-browser select-browser.desktop
您可以使用浏览器环境变量:
export BROWSER=firefox
or
export BROWSER=/path/to/browser
Run Code Online (Sandbox Code Playgroud)
这样做会更改要在用户会话中使用的默认浏览器。
您可以编写一个脚本,询问您要打开哪个浏览器,然后将其设置为默认浏览器。然后,无论何时您单击链接,它都会询问您。
只需设置 $1 参数,以便将其发送到您选择的浏览器,以便打开该链接。
可能看起来像:
#!/bin/bash
website=$1
echo "What browser do you want to use? chrome firefox "
read browsera
$browsera $website
Run Code Online (Sandbox Code Playgroud)
你可以随心所欲地制作它。让它捕获无效的参数和各种东西。您甚至可以让它解析输入,并根据网站的内容打开预定的浏览器。
为了满足我自己的需要,我将以下脚本组合在一起。它用于xdotool
获取正在运行的浏览器列表(目前修复为 Firefox + Chrome)。它将结果显示在列表中并允许您选择相应的浏览器。它切换到桌面(我使用的是 i3wm),激活浏览器窗口并输入 URL。这绝对不是最漂亮的代码......但它有效:)
#!/usr/bin/env python3
import sys
import tkinter
import subprocess
URL = sys.argv[1] if len(sys.argv) > 1 else None
SEARCH_STRING = 'Mozilla Firefox|Google Chrome'
def get_options():
cmd = ['xdotool','search','--name',SEARCH_STRING]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
window_ids = result.stdout.decode('utf-8').rstrip().split("\n")
options = []
for id in window_ids:
cmd = ['xdotool','getwindowname', id]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
title = result.stdout.decode('utf-8').rstrip()
options.append((title, id))
return options
def kill_window(event = None):
root.destroy()
def select_prev_option(event):
val = curr_var.get()
idx = [i for i, option in enumerate(OPTIONS) if option[1] == val][0]
if idx > 0:
curr_var.set(OPTIONS[idx-1][1])
def select_next_option(event):
val = curr_var.get()
idx = [i for i, option in enumerate(OPTIONS) if option[1] == val][0]
if idx < len(OPTIONS)-1:
curr_var.set(OPTIONS[idx+1][1])
def execute_option(e = None):
window_id = curr_var.get()
cmd = ['xdotool', 'get_desktop']
result = subprocess.run(cmd, stdout=subprocess.PIPE)
current_desktop = int(result.stdout.decode('utf-8').rstrip())
cmd = ['xdotool', 'get_desktop_for_window', window_id]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
window_desktop = int(result.stdout.decode('utf-8').rstrip())
if current_desktop != window_desktop:
cmd = ['xdotool', 'set_desktop', str(window_desktop)]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
cmd = [ 'xdotool', 'windowactivate', '--sync', window_id ]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
if URL:
cmd = [
'xdotool', 'key','--clearmodifiers','--window', window_id, 'ctrl+t',
'sleep', '.1',
'type', '--clearmodifiers', URL
]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
cmd = ['xdotool','key','--clearmodifiers','--window', window_id, 'Return']
result = subprocess.run(cmd, stdout=subprocess.PIPE)
kill_window()
root = tkinter.Tk()
root.tk.call('tk', 'scaling', 4.0)
root.attributes('-type', 'dialog')
OPTIONS = get_options()
curr_var = tkinter.StringVar()
curr_var.set(OPTIONS[0][1])
max_len = max([len(t) for t, i in OPTIONS])
for text, mode in OPTIONS:
b = tkinter.Radiobutton(
root,
text=text,
variable=curr_var,
value=mode,
indicatoron=0,
font=("Arial", 12),
width=max_len,
anchor=tkinter.W,
command=execute_option
)
b.pack(anchor=tkinter.W)
root.bind("<j>", select_next_option)
root.bind("<Down>", select_next_option)
root.bind("<k>", select_prev_option)
root.bind("<Up>", select_prev_option)
root.bind("<Return>", execute_option)
root.bind("<Control-q>", kill_window)
root.bind("<Control-w>", kill_window)
root.protocol("WM_DELETE_WINDOW", kill_window)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
我创建了一个指向此脚本的桌面文件,并使用以下命令设置默认浏览器:
xdg-settings set default-web-browser browserpicker.desktop
xdg-mime default browserpicker.desktop x-scheme-handler/https
xdg-mime default browser.desktop x-scheme-handler/http
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2662 次 |
最近记录: |