[英]Manage firefox tabs in emacs with org-mode
我最近找到了一種在emacs中管理firefox選項卡的方法。 這聽起來有點瘋狂。 我使用樹樣式選項卡(firefox插件),Moz Repl,emacs,org-mode來做到這一點。
對於10-15個標簽,我的計划效果很好。 但是超過20個標簽頁時,“我的Firefox”隨機掛起。 可能是JavaScript堆棧溢出或其他問題? 我不知道我的代碼有什么問題。 我在這里發布了大多數導入代碼。 有人幫我找到一些錯誤嗎?
這是下面的基本firefox chrome代碼,您可以在無emacs和MozPepl的firefox中運行它。
我使用樹樣式標簽api獲取標簽並將每個標簽設置為特定級別。 輸出將在具有組織模式的emacs中使用。 樹樣式標簽api: http : //piro.sakura.ne.jp/xul/_treestyletab.html.en#api
該代碼可以通過多種方式運行。 我建議使用“工作區插件”。 復制我的代碼,選擇chrome上下文運行它。 https://addons.mozilla.org/zh-CN/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.
我不確定是什么引起了該問題,因為我無法重現該問題,但是我發現此代碼有很多問題。 我不記得MozRepl是如何工作的,但是經過改進的代碼應該為您提供了一個不錯的組織模式友好的選項卡輸出。 希望對您有所幫助,或者對偶然遇到此問題的人有所幫助。
var bullet = "*"; // Org-mode bullet
// 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";
}
// NOTE: we factor these string-generation functions out,
// to make things a bit more clear
function makeParentNodeOutput(tab, level) {
return (Array(level+1).join(bullet) +
" [+] " +
getTitle(tab) +
"\n" +
getUrl(tab));
}
function makeLeafNodeOutput(tab, level) {
return (Array(level+1).join(bullet) +
" " +
getTitle(tab) +
"\n" +
getUrl(tab));
}
// NOTE: we only need to handle parsing a collection of tabs
// in once place, and we have a function for it here.
function parseTabCollection(tabs, level) {
var currentTab;
var outputString = "";
for(var i = 0; i < tabs.length; i++){
currentTab = tabs[i];
// For a parent node, we output the node and its children
if(TreeStyleTabService.hasChildTabs(currentTab)){
outputString += makeParentNodeOutput(currentTab, level);
outputString += parseTabCollection(
TreeStyleTabService.getChildTabs(currentTab),
level + 1
);
} else {
outputString += makeLeafNodeOutput(currentTab, level);
}
}
return outputString;
}
if ('TreeStyleTabService' in window){
//NOTE: Start with the rootTabs only. The old version started with
// *all* tabs, which isn't what we want
var orgModeOutput = parseTabCollection(TreeStyleTabService.rootTabs, 1);
alert(orgModeOutput);
}
我希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.