2011-05-11 19 views
8

Recientemente encontré una forma de administrar la pestaña de Firefox en emacs. Esto suena un poco loco. Utilizo pestañas de estilo de árbol (complemento de Firefox), Moz Repl, emacs, org-mode para hacerlo.Administrar pestañas de Firefox en emacs con org-mode

Para 10-15 pestañas, mi plan funciona bien. Pero más de 20 pestañas, Mi firefox se cuelga al azar. Tal vez el desbordamiento de la pila de JavaScript o algo más? No sé lo que está mal con mi código. Publiqué el código más importado aquí. Somesone me ayuda a encontrar algunos errores?

Es un código básico de Chrome Firefox a continuación, puede ejecutarlo en Firefox sin emacs y MozPepl.

Uso las API de estilo de árbol api para obtener pestañas y configurar cada pestaña a nivel de nivel. La salida se usará en emacs con org-mode. fichas de estilo de árbol api: http://piro.sakura.ne.jp/xul/_treestyletab.html.en#api

El código se puede ejecutar de muchas maneras. Recomiendo el "complemento de espacio de trabajo". Copie mi código, elija el contexto de cromo para ejecutarlo. 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. 

Respuesta

2

no estoy seguro de lo que está causando el problema en concreto, ya que no podía reproducirlo, pero veo un montón de problemas con este código. No puedo recordar cómo funciona MozRepl, pero este código mejorado debería darte una buena salida de pestañas amistosa. Espero que esto te ayude a ti o a quien tropiece con este hilo.

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); 
} 

Espero que esto ayude de alguna manera.

+0

gracias por su código – textpattern

+0

Santa mierda, esta es una idea increíble. Yo también uso Tree Style Tabs y emacs org-mode, sería una locura para combinar los dos. – Ibrahim

Cuestiones relacionadas