startfile.py :  » Development » Leo » Leo-4.7.1-final » leo » plugins » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Development » Leo 
Leo » Leo 4.7.1 final » leo » plugins » startfile.py
#@+leo-ver=4-thin
#@+node:ekr.20040828103325:@thin startfile.py
#@<< docstring >>
#@+node:ekr.20050912182050:<< docstring >>
"""Launches (starts) a file given by a headline when double-clicking the icon.
Ignores headlines starting with an '@'.

Uses the @folder path if the headline is under an @folder headline.
Otherwise the path is relative to the Leo file.
"""
#@nonl
#@-node:ekr.20050912182050:<< docstring >>
#@nl

#@@language python
#@@tabwidth -4

# This does not work on Linux, because os.startfile does not exist.

# By Josef Dalcolmo: contributed under the same license as Leo.py itself.

__version__ = "1.4"

import leo.core.leoPlugins as leoPlugins
import leo.core.leoGlobals as g
import os

#@<< change log >>
#@+node:ekr.20040828103325.1:<< change log >>
#@+at 
#@nonl
# Change log
# 
# - JD: 2003-03-11 separated out from rst plugin
# - JD: 2004-04-18 change the defaultdir to the folder of the file which is 
# being started.
# - EKR: 2004-08-28:
#     - Test for presence of os.startfile.
#     - Other minor changes.
# - EKR: 2005-01-11:
#     - Don't rely on os.startfile to throw an exception if the file does not 
# exist.
#@-at
#@nonl
#@-node:ekr.20040828103325.1:<< change log >>
#@nl
#@<< notes >>
#@+node:ekr.20040828103325.2:<< notes >>
#@+at
# 
# Models @folder behavior after an idea and sample code by:
# korakot ( Korakot Chaovavanich ) @folder for files annotation 2002-11-27 
# 02:39
# 
# open file (double-click = startfile) behavior added
# nodes with @url, @folder, @rst are treated special
# 
# This does not check for proper filename syntax.
# path is the current dir, or the place @folder points to
# this should probably be changed to @path or so.
#@-at
#@nonl
#@-node:ekr.20040828103325.2:<< notes >>
#@nl

#@+others
#@+node:ekr.20100128073941.5379:init
def init():

    ok = hasattr(os,"startfile")
        # Ok for unit testing, but may be icondclick1 conflicts.

    if ok:
        # Register the handlers...
        leoPlugins.registerHandler("icondclick1",onIconDoubleClick)
        g.plugin_signon(__name__)

    return ok
#@-node:ekr.20100128073941.5379:init
#@+node:ekr.20040828103325.3:onIconDoubleClick
def onIconDoubleClick(tag,keywords):

    v = keywords.get("p") or keywords.get("v") # Use p for 4.2 code base, v for 4.1 code base.
    c = keywords.get("c")
    # g.trace(c)

    if c and v:
        h = v.h.strip()
        if h and h[0]!='@':
            #@            << find path and start file >>
            #@+node:ekr.20040828103325.4:<< find path and start file >>
            # Set the base directory by searching for @folder directives in ancestors.
            thisdir = os.path.abspath(os.curdir) # remember the current dir
            basedir = thisdir[:] # use current dir as default.
            parv = v.parent() # start with parent
            while parv: # stop when no more parent found
                p = parv.h.strip()
                if g.match_word(p,0,'@folder'):
                    basedir = p[8:] # take rest of headline as pathname
                    break # we found the closest @folder
                else:
                    parv = parv.parent() # try the parent of the parent

            fname = os.path.join(basedir,h) # join path and filename
            startdir, filename = os.path.split(fname)
            try:
                os.chdir(startdir)
                dirfound = 1
            except:
                g.es(startdir+' - folder not found')
                dirfound = 0

            if dirfound:
                fullpath = g.os_path_join(startdir,filename)
                fullpath = g.os_path_abspath(fullpath)
                if g.os_path_exists(filename):
                    try:
                        # Warning: os.startfile usually does not throw exceptions.
                        os.startfile(filename) # Try to open the file; it may not work for all file types.
                    except Exception:
                        g.es(filename+' - file not found in '+startdir)
                        g.es_exception()
                else:
                    g.es('%s not found in %s' % (filename,startdir),color='blue')
            os.chdir(thisdir) # restore the original current dir.
            #@nonl
            #@-node:ekr.20040828103325.4:<< find path and start file >>
            #@nl
#@nonl
#@-node:ekr.20040828103325.3:onIconDoubleClick
#@-others
#@-node:ekr.20040828103325:@thin startfile.py
#@-leo
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.