Source code for leo.plugins.scripts_menu
#@+leo-ver=5-thin
#@+node:EKR.20040517080555.36: * @file scripts_menu.py
"""Creates a Scripts menu for LeoPy.leo."""
# The new Execute Script command seems much safer and more convenient.
#@@language python
#@@tabwidth -4
import leo.core.leoGlobals as g
import glob
import os
__version__ = "1.5"
#@+others
#@+node:ekr.20111104210837.9694: ** init
[docs]def init():
'''Return True if the plugin has loaded successfully.'''
# Ok for unit testing: creates menu.
g.registerHandler("create-optional-menus",createScriptsMenu)
g.plugin_signon(__name__)
return True
#@+node:EKR.20040517080555.37: ** createScriptsMenu
[docs]def createScriptsMenu (tag,keywords):
c = keywords.get("c")
path = os.path.join(g.app.loadDir,"..","scripts")
if os.path.exists(path):
# Create lists of scripts and subdirectories.
entries = glob.glob(os.path.join(path,"*"))
top_scripts = glob.glob(os.path.join(path,"*.py"))
dirs = [f for f in entries if os.path.isdir(f)]
#@+<< Return if no scripts exist anywhere >>
#@+node:EKR.20040517080555.38: *3* << Return if no scripts exist anywhere >>
if not top_scripts:
found = False
for dir in dirs:
scripts = glob.glob(os.path.join(dir,"*.py"))
if scripts:
found = True ; break
if not found:
return
#@-<< Return if no scripts exist anywhere >>
scriptsMenu = c.frame.menu.createNewMenu("&Scripts")
table = []
#@+<< Create top-level entries for every script in top_scripts >>
#@+node:EKR.20040517080555.39: *3* << Create top-level entries for every script in top_scripts >>
table = []
top_scripts.sort()
for script in top_scripts:
name = g.shortFileName(script)
def doScript(event=None,name=name):
g.executeScript(name)
table.append((name,None,doScript),)
c.frame.menu.createMenuEntries(scriptsMenu, table,dynamicMenu=True)
#@-<< Create top-level entries for every script in top_scripts >>
for dir in dirs:
files = glob.glob(os.path.join(dir,"*.py"))
if files:
#@+<< Create a submenu for dir containing each file in files >>
#@+node:EKR.20040517080555.40: *3* << Create a submenu for dir containing each file in files >>
# Create the submenu.
name = os.path.join("scripts",g.shortFileName(dir))
menu = c.frame.menu.createNewMenu(name,"&Scripts")
# Populate the submenu.
table = []
for file in files:
name = g.shortFileName(file)
# EKR: use doScript1 to keep pylint happy.
def doScript1(event=None,name=name):
g.executeScript(name)
table.append((name,None,doScript1),)
c.frame.menu.createMenuEntries(menu, table,dynamicMenu=True)
#@-<< Create a submenu for dir containing each file in files >>
#@-others
#@-leo