Недавно я нашел способ управления вкладкой firefox в emacs. Это звучит немного безумно. Для этого я использую вкладки в стиле дерева (аддон Firefox), Moz Repl, emacs, org-mode.
Для 10-15 вкладок мой план работает нормально. Но 20+ вкладок, Мой Firefox зависает случайно. Возможно переполнение стека JavaScript или что-то еще? Я не знаю, что не так с моим кодом. Я выкладываю самый импортный код здесь. Кто-нибудь, помогите мне найти ошибки?
Ниже приведен базовый код Firefox Chrome, вы можете запустить его в Firefox без emacs и MozPepl.
Я использую вкладки в стиле дерева API, чтобы получить вкладки и установить для каждой вкладки определенный уровень. Вывод будет использоваться в emacs с org-mode.
вкладки в стиле дерева api: http://piro.sakura.ne.jp/xul/_treestyletab.html.en#api
Код может работать разными способами. Я рекомендую "аддон рабочей области". Скопируйте Мой код, выберите контекст Chrome, чтобы запустить его.
https://addons.mozilla.org/en-US/firefox/addon/workspace/
// two helper function to get title and url of tab
function getTitle(tab)
{
var brower = gBrowser.getBrowserForTab(tab)
var url = brower.currentURI.spec
var title = brower.contentTitle
return title
}
function getUrl(tab)
{
var brower = gBrowser.getBrowserForTab(tab)
var url = brower.currentURI.spec
var title = brower.contentTitle
return ":PROPERTIES:\n:URL:"+url+"\n:END:\n"
}
var L = gBrowser.tabContainer.childNodes.length //firefox tabs length
var str = "" //global string for output
//parse tabs. If tab has child, parse it. It tab has no child, just output.
for(i = 0; i < L; i++){
level = "*"
tab = gBrowser.tabContainer.childNodes[i]
if ('TreeStyleTabService' in window){
if(TreeStyleTabService.hasChildTabs(tab))
{
str = [str, level, " [+] ", getTitle(tab), "\n", getUrl(tab)].join("") //output title and url. level used in org-mode
treeparse(TreeStyleTabService.getChildTabs(tab), "**") //if a tab has child tabs. parse it and level up
}
str = [str, level, " ", getTitle(tab), "\n", getUrl(tab)].join("")
}
function treeparse(tablist,level) //parse a list of tabs. If tab has not a child, output. If it has childs, parse again
{
for(i=0 ; i < tablist.length;i++) {
tab = tablist[i]
if ('TreeStyleTabService' in window){
if(TreeStyleTabService.hasChildTabs(tab))
{
str = [str, level, " [+] ", getTitle(tab), "\n", getUrl(tab)].join("")
newlevel = level + "*"
treeparse(TreeStyleTabService.getChildTabs(tab),newlevel)
}
} }
str = [str, level, " ", getTitle(tab), "\n", getUrl(tab)].join("")
}
}
alert(str) //alert to view result. You can also write the result into a file.