2011-05-11 18 views
8

के साथ emacs में फ़ायरफ़ॉक्स टैब प्रबंधित करें मुझे हाल ही में Emacs में फ़ायरफ़ॉक्स टैब प्रबंधित करने का कोई तरीका मिल गया है। यह थोड़ा पागल लगता है। मैं इसे करने के लिए पेड़ शैली टैब (फ़ायरफ़ॉक्स एडन), मोज़े रेप्ल, emacs, org-mode का उपयोग करता हूं।ऑर्ग-मोड

10-15 टैब के लिए, मेरी योजना ठीक काम करती है। लेकिन 20+ टैब, मेरा फ़ायरफ़ॉक्स यादृच्छिक रूप से लटका हुआ है। शायद जावास्क्रिप्ट ढेर ओवरफ्लो या कुछ और? मुझे नहीं पता कि मेरे कोड में क्या गलत है। मैं यहां सबसे अधिक आयात कोड पोस्ट करता हूं। Somesone मुझे कुछ कीड़े खोजने में मदद करते हैं?

यह नीचे एक बुनियादी फ़ायरफ़ॉक्स क्रोम कोड है, आप इसे emacs और MozPepl के बिना फ़ायरफ़ॉक्स में चला सकते हैं।

मैं टैब प्राप्त करने के लिए पेड़ शैली टैब एपीआई का उपयोग करता हूं और प्रत्येक टैब को एक केटेन स्तर सेट करता हूं। आउटपुट का उपयोग ऑर्ग-मोड के साथ emacs में किया जाएगा। पेड़ शैली टैब api: http://piro.sakura.ne.jp/xul/_treestyletab.html.en#api

कोड कई तरीकों से चल सकता है। मैं "वर्कस्पेस एडन" की अनुशंसा करता हूं। मेरा कोड कॉपी करें, इसे चलाने के लिए क्रोम संदर्भ चुनें। 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. 

उत्तर

2

मैं क्या विशेष रूप से, समस्या खड़ी कर रहा है के रूप में मैं इसे पुन: पेश नहीं कर सका यकीन नहीं है, लेकिन मैं इस कोड के साथ मुद्दों का भार को देखते हैं। मुझे याद नहीं है कि 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); 
} 

मुझे उम्मीद है कि यह किसी भी तरह से मदद करता है।

+0

आपके कोड – textpattern

+0

पवित्र बकवास के लिए धन्यवाद, यह एक अद्भुत विचार है। मैं भी ट्री स्टाइल टैब और एमएक्स ऑर्ग-मोड का उपयोग करता हूं, दोनों को गठबंधन करने के लिए बहुत पागल हो जाएगा। – Ibrahim