Merge lp:~gatesphere/leo-editor/sphinx-docs into lp:leo-editor

Proposed by Jake Peck
Status: Merged
Merged at revision: 5763
Proposed branch: lp:~gatesphere/leo-editor/sphinx-docs
Merge into: lp:leo-editor
Diff against target: 184287 lines (+183259/-0)
166 files modified
sphinx-docs/Makefile (+181/-0)
sphinx-docs/_build/html/.buildinfo (+4/-0)
sphinx-docs/_build/html/_modules/index.html (+206/-0)
sphinx-docs/_build/html/_modules/leo/__init__.html (+104/-0)
sphinx-docs/_build/html/_modules/leo/core/leoApp.html (+3371/-0)
sphinx-docs/_build/html/_modules/leo/core/leoAtFile.html (+5787/-0)
sphinx-docs/_build/html/_modules/leo/core/leoBridge.html (+482/-0)
sphinx-docs/_build/html/_modules/leo/core/leoBridgeTest.html (+175/-0)
sphinx-docs/_build/html/_modules/leo/core/leoCache.html (+897/-0)
sphinx-docs/_build/html/_modules/leo/core/leoChapters.html (+1175/-0)
sphinx-docs/_build/html/_modules/leo/core/leoColor.html (+881/-0)
sphinx-docs/_build/html/_modules/leo/core/leoCommands.html (+8636/-0)
sphinx-docs/_build/html/_modules/leo/core/leoCompare.html (+594/-0)
sphinx-docs/_build/html/_modules/leo/core/leoConfig.html (+2310/-0)
sphinx-docs/_build/html/_modules/leo/core/leoDebugger.html (+132/-0)
sphinx-docs/_build/html/_modules/leo/core/leoDynamicTest.html (+208/-0)
sphinx-docs/_build/html/_modules/leo/core/leoFileCommands.html (+2512/-0)
sphinx-docs/_build/html/_modules/leo/core/leoFind.html (+1870/-0)
sphinx-docs/_build/html/_modules/leo/core/leoFrame.html (+2836/-0)
sphinx-docs/_build/html/_modules/leo/core/leoGlobals.html (+6576/-0)
sphinx-docs/_build/html/_modules/leo/core/leoGui.html (+663/-0)
sphinx-docs/_build/html/_modules/leo/core/leoIPython.html (+1408/-0)
sphinx-docs/_build/html/_modules/leo/core/leoInspect.html (+4349/-0)
sphinx-docs/_build/html/_modules/leo/core/leoKeys.html (+4831/-0)
sphinx-docs/_build/html/_modules/leo/core/leoMenu.html (+1678/-0)
sphinx-docs/_build/html/_modules/leo/core/leoNodes.html (+2697/-0)
sphinx-docs/_build/html/_modules/leo/core/leoPlugins.html (+829/-0)
sphinx-docs/_build/html/_modules/leo/core/leoPymacs.html (+251/-0)
sphinx-docs/_build/html/_modules/leo/core/leoRst.html (+2433/-0)
sphinx-docs/_build/html/_modules/leo/core/leoShadow.html (+1238/-0)
sphinx-docs/_build/html/_modules/leo/core/leoTangle.html (+3553/-0)
sphinx-docs/_build/html/_modules/leo/core/leoTest.html (+1906/-0)
sphinx-docs/_build/html/_modules/leo/core/leoUndo.html (+2377/-0)
sphinx-docs/_build/html/_modules/leo/core/runLeo.html (+179/-0)
sphinx-docs/_build/html/_modules/leo/extensions/asciidoc.html (+3760/-0)
sphinx-docs/_build/html/_modules/leo/extensions/colors.html (+860/-0)
sphinx-docs/_build/html/_modules/leo/extensions/patch_11_01.html (+810/-0)
sphinx-docs/_build/html/_modules/leo/external/codewise.html (+1053/-0)
sphinx-docs/_build/html/_modules/leo/external/edb.html (+1911/-0)
sphinx-docs/_build/html/_modules/leo/external/leosax.html (+294/-0)
sphinx-docs/_build/html/_modules/leo/external/stringlist.html (+255/-0)
sphinx-docs/_build/html/_modules/leo/plugins/FileActions.html (+314/-0)
sphinx-docs/_build/html/_modules/leo/plugins/add_directives.html (+148/-0)
sphinx-docs/_build/html/_modules/leo/plugins/at_folder.html (+163/-0)
sphinx-docs/_build/html/_modules/leo/plugins/at_produce.html (+251/-0)
sphinx-docs/_build/html/_modules/leo/plugins/at_view.html (+368/-0)
sphinx-docs/_build/html/_modules/leo/plugins/bibtex.html (+377/-0)
sphinx-docs/_build/html/_modules/leo/plugins/chapter_hoist.html (+204/-0)
sphinx-docs/_build/html/_modules/leo/plugins/codewisecompleter.html (+533/-0)
sphinx-docs/_build/html/_modules/leo/plugins/colorize_headlines.html (+142/-0)
sphinx-docs/_build/html/_modules/leo/plugins/cursesGui.html (+655/-0)
sphinx-docs/_build/html/_modules/leo/plugins/datenodes.html (+391/-0)
sphinx-docs/_build/html/_modules/leo/plugins/debugger_pudb.html (+136/-0)
sphinx-docs/_build/html/_modules/leo/plugins/dtest.html (+245/-0)
sphinx-docs/_build/html/_modules/leo/plugins/dump_globals.html (+128/-0)
sphinx-docs/_build/html/_modules/leo/plugins/empty_leo_file.html (+144/-0)
sphinx-docs/_build/html/_modules/leo/plugins/enable_gc.html (+123/-0)
sphinx-docs/_build/html/_modules/leo/plugins/expfolder.html (+214/-0)
sphinx-docs/_build/html/_modules/leo/plugins/geotag.html (+198/-0)
sphinx-docs/_build/html/_modules/leo/plugins/gitarchive.html (+205/-0)
sphinx-docs/_build/html/_modules/leo/plugins/import_cisco_config.html (+309/-0)
sphinx-docs/_build/html/_modules/leo/plugins/initinclass.html (+162/-0)
sphinx-docs/_build/html/_modules/leo/plugins/ipython.html (+399/-0)
sphinx-docs/_build/html/_modules/leo/plugins/jinjarender.html (+205/-0)
sphinx-docs/_build/html/_modules/leo/plugins/leoOPML.html (+1127/-0)
sphinx-docs/_build/html/_modules/leo/plugins/leo_interface.html (+405/-0)
sphinx-docs/_build/html/_modules/leo/plugins/leo_to_html.html (+876/-0)
sphinx-docs/_build/html/_modules/leo/plugins/leo_to_rtf.html (+270/-0)
sphinx-docs/_build/html/_modules/leo/plugins/leocursor.html (+345/-0)
sphinx-docs/_build/html/_modules/leo/plugins/leofeeds.html (+233/-0)
sphinx-docs/_build/html/_modules/leo/plugins/leomail.html (+188/-0)
sphinx-docs/_build/html/_modules/leo/plugins/lineNumbers.html (+168/-0)
sphinx-docs/_build/html/_modules/leo/plugins/macros.html (+303/-0)
sphinx-docs/_build/html/_modules/leo/plugins/maximizeNewWindows.html (+146/-0)
sphinx-docs/_build/html/_modules/leo/plugins/mime.html (+306/-0)
sphinx-docs/_build/html/_modules/leo/plugins/mnplugins.html (+230/-0)
sphinx-docs/_build/html/_modules/leo/plugins/mod_autosave.html (+231/-0)
sphinx-docs/_build/html/_modules/leo/plugins/mod_framesize.html (+125/-0)
sphinx-docs/_build/html/_modules/leo/plugins/mod_http.html (+1307/-0)
sphinx-docs/_build/html/_modules/leo/plugins/mod_leo2ascd.html (+526/-0)
sphinx-docs/_build/html/_modules/leo/plugins/mod_read_dir_outline.html (+267/-0)
sphinx-docs/_build/html/_modules/leo/plugins/mod_scripting.html (+937/-0)
sphinx-docs/_build/html/_modules/leo/plugins/mod_speedups.html (+203/-0)
sphinx-docs/_build/html/_modules/leo/plugins/mod_tempfname.html (+227/-0)
sphinx-docs/_build/html/_modules/leo/plugins/mod_timestamp.html (+125/-0)
sphinx-docs/_build/html/_modules/leo/plugins/multifile.html (+310/-0)
sphinx-docs/_build/html/_modules/leo/plugins/niceNosent.html (+195/-0)
sphinx-docs/_build/html/_modules/leo/plugins/nodeActions.html (+544/-0)
sphinx-docs/_build/html/_modules/leo/plugins/open_shell.html (+240/-0)
sphinx-docs/_build/html/_modules/leo/plugins/outline_export.html (+143/-0)
sphinx-docs/_build/html/_modules/leo/plugins/paste_as_headlines.html (+199/-0)
sphinx-docs/_build/html/_modules/leo/plugins/pluginsTest.html (+211/-0)
sphinx-docs/_build/html/_modules/leo/plugins/plugins_menu.html (+528/-0)
sphinx-docs/_build/html/_modules/leo/plugins/pygeotag/pygeotag.html (+320/-0)
sphinx-docs/_build/html/_modules/leo/plugins/qtframecommands.html (+189/-0)
sphinx-docs/_build/html/_modules/leo/plugins/quit_leo.html (+121/-0)
sphinx-docs/_build/html/_modules/leo/plugins/read_only_nodes.html (+525/-0)
sphinx-docs/_build/html/_modules/leo/plugins/redirect_to_log.html (+114/-0)
sphinx-docs/_build/html/_modules/leo/plugins/rst3.html (+2018/-0)
sphinx-docs/_build/html/_modules/leo/plugins/run_nodes.html (+492/-0)
sphinx-docs/_build/html/_modules/leo/plugins/screenshots.html (+2448/-0)
sphinx-docs/_build/html/_modules/leo/plugins/script_io_to_body.html (+191/-0)
sphinx-docs/_build/html/_modules/leo/plugins/scripts_menu.html (+175/-0)
sphinx-docs/_build/html/_modules/leo/plugins/setHomeDirectory.html (+103/-0)
sphinx-docs/_build/html/_modules/leo/plugins/slideshow.html (+333/-0)
sphinx-docs/_build/html/_modules/leo/plugins/startfile.html (+206/-0)
sphinx-docs/_build/html/_modules/leo/plugins/testRegisterCommand.html (+122/-0)
sphinx-docs/_build/html/_modules/leo/plugins/textnode.html (+199/-0)
sphinx-docs/_build/html/_modules/leo/plugins/tkGui.html (+9117/-0)
sphinx-docs/_build/html/_modules/leo/plugins/tomboy_import.html (+237/-0)
sphinx-docs/_build/html/_modules/leo/plugins/trace_gc_plugin.html (+142/-0)
sphinx-docs/_build/html/_modules/leo/plugins/trace_keys.html (+122/-0)
sphinx-docs/_build/html/_modules/leo/plugins/trace_tags.html (+169/-0)
sphinx-docs/_build/html/_modules/leo/plugins/valuespace.html (+850/-0)
sphinx-docs/_build/html/_modules/leo/plugins/vim.html (+388/-0)
sphinx-docs/_build/html/_modules/leo/plugins/word_count.html (+168/-0)
sphinx-docs/_build/html/_modules/leo/plugins/word_export.html (+247/-0)
sphinx-docs/_build/html/_modules/leo/plugins/xemacs.html (+243/-0)
sphinx-docs/_build/html/_modules/leo/plugins/xsltWithNodes.html (+764/-0)
sphinx-docs/_build/html/_modules/leo/plugins/zenity_file_dialogs.html (+224/-0)
sphinx-docs/_build/html/_sources/index.txt (+27/-0)
sphinx-docs/_build/html/_sources/leo.core.txt (+303/-0)
sphinx-docs/_build/html/_sources/leo.extensions.txt (+55/-0)
sphinx-docs/_build/html/_sources/leo.external.concurrent.futures.txt (+47/-0)
sphinx-docs/_build/html/_sources/leo.external.concurrent.txt (+22/-0)
sphinx-docs/_build/html/_sources/leo.external.txt (+86/-0)
sphinx-docs/_build/html/_sources/leo.modes.txt (+1111/-0)
sphinx-docs/_build/html/_sources/leo.plugins.pygeotag.txt (+15/-0)
sphinx-docs/_build/html/_sources/leo.plugins.txt (+1006/-0)
sphinx-docs/_build/html/_sources/leo.txt (+25/-0)
sphinx-docs/_build/html/_static/basic.css (+540/-0)
sphinx-docs/_build/html/_static/default.css (+256/-0)
sphinx-docs/_build/html/_static/doctools.js (+235/-0)
sphinx-docs/_build/html/_static/jquery.js (+4/-0)
sphinx-docs/_build/html/_static/pygments.css (+62/-0)
sphinx-docs/_build/html/_static/searchtools.js (+622/-0)
sphinx-docs/_build/html/_static/sidebar.js (+159/-0)
sphinx-docs/_build/html/_static/underscore.js (+31/-0)
sphinx-docs/_build/html/_static/websupport.js (+808/-0)
sphinx-docs/_build/html/genindex.html (+24126/-0)
sphinx-docs/_build/html/index.html (+324/-0)
sphinx-docs/_build/html/leo.core.html (+21087/-0)
sphinx-docs/_build/html/leo.extensions.html (+1730/-0)
sphinx-docs/_build/html/leo.external.concurrent.futures.html (+150/-0)
sphinx-docs/_build/html/leo.external.concurrent.html (+150/-0)
sphinx-docs/_build/html/leo.external.html (+1826/-0)
sphinx-docs/_build/html/leo.html (+387/-0)
sphinx-docs/_build/html/leo.modes.html (+672/-0)
sphinx-docs/_build/html/leo.plugins.html (+10167/-0)
sphinx-docs/_build/html/leo.plugins.pygeotag.html (+208/-0)
sphinx-docs/_build/html/py-modindex.html (+739/-0)
sphinx-docs/_build/html/search.html (+105/-0)
sphinx-docs/_build/html/searchindex.js (+1/-0)
sphinx-docs/conf.py (+316/-0)
sphinx-docs/index.rst (+27/-0)
sphinx-docs/leo.core.rst (+303/-0)
sphinx-docs/leo.extensions.rst (+55/-0)
sphinx-docs/leo.external.concurrent.futures.rst (+47/-0)
sphinx-docs/leo.external.concurrent.rst (+22/-0)
sphinx-docs/leo.external.rst (+86/-0)
sphinx-docs/leo.plugins.pygeotag.rst (+15/-0)
sphinx-docs/leo.plugins.rst (+1006/-0)
sphinx-docs/leo.rst (+25/-0)
sphinx-docs/make.bat (+246/-0)
sphinx-docs/make.log (+562/-0)
sphinx-docs/sphinxDocs.leo (+35/-0)
To merge this branch: bzr merge lp:~gatesphere/leo-editor/sphinx-docs
Reviewer Review Type Date Requested Status
Jake Peck Pending
Review via email: mp+162366@code.launchpad.net

Description of the change

Adds support for ReadTheDocs autogenerated Sphinx-based API documentation. Does not touch the codebase, but rather puts all sphinx-related stuff in the root dir `sphinx-docs`.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added directory 'sphinx-docs'
=== added file 'sphinx-docs/Makefile'
--- sphinx-docs/Makefile 1970-01-01 00:00:00 +0000
+++ sphinx-docs/Makefile 2013-05-03 14:47:26 +0000
@@ -0,0 +1,181 @@
1#@+leo-ver=5-thin
2#@+node:peckj.20130503092808.1691: * @file Makefile
3#@@language makefile
4# Makefile for Sphinx documentation
5#
6
7# You can set these variables from the command line.
8SPHINXOPTS =
9SPHINXBUILD = sphinx-build
10PAPER =
11BUILDDIR = _build
12
13# User-friendly check for sphinx-build
14ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
15$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
16endif
17
18# Internal variables.
19PAPEROPT_a4 = -D latex_paper_size=a4
20PAPEROPT_letter = -D latex_paper_size=letter
21ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
22# the i18n builder cannot share the environment and doctrees with the others
23I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
24
25.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
26
27help:
28 @echo "Please use \`make <target>' where <target> is one of"
29 @echo " html to make standalone HTML files"
30 @echo " dirhtml to make HTML files named index.html in directories"
31 @echo " singlehtml to make a single large HTML file"
32 @echo " pickle to make pickle files"
33 @echo " json to make JSON files"
34 @echo " htmlhelp to make HTML files and a HTML help project"
35 @echo " qthelp to make HTML files and a qthelp project"
36 @echo " devhelp to make HTML files and a Devhelp project"
37 @echo " epub to make an epub"
38 @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
39 @echo " latexpdf to make LaTeX files and run them through pdflatex"
40 @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
41 @echo " text to make text files"
42 @echo " man to make manual pages"
43 @echo " texinfo to make Texinfo files"
44 @echo " info to make Texinfo files and run them through makeinfo"
45 @echo " gettext to make PO message catalogs"
46 @echo " changes to make an overview of all changed/added/deprecated items"
47 @echo " xml to make Docutils-native XML files"
48 @echo " pseudoxml to make pseudoxml-XML files for display purposes"
49 @echo " linkcheck to check all external links for integrity"
50 @echo " doctest to run all doctests embedded in the documentation (if enabled)"
51
52clean:
53 rm -rf $(BUILDDIR)/*
54
55html:
56 $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
57 @echo
58 @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
59
60dirhtml:
61 $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
62 @echo
63 @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
64
65singlehtml:
66 $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
67 @echo
68 @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
69
70pickle:
71 $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
72 @echo
73 @echo "Build finished; now you can process the pickle files."
74
75json:
76 $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
77 @echo
78 @echo "Build finished; now you can process the JSON files."
79
80htmlhelp:
81 $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
82 @echo
83 @echo "Build finished; now you can run HTML Help Workshop with the" \
84 ".hhp project file in $(BUILDDIR)/htmlhelp."
85
86qthelp:
87 $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
88 @echo
89 @echo "Build finished; now you can run "qcollectiongenerator" with the" \
90 ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
91 @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Leo.qhcp"
92 @echo "To view the help file:"
93 @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Leo.qhc"
94
95devhelp:
96 $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
97 @echo
98 @echo "Build finished."
99 @echo "To view the help file:"
100 @echo "# mkdir -p $$HOME/.local/share/devhelp/Leo"
101 @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Leo"
102 @echo "# devhelp"
103
104epub:
105 $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
106 @echo
107 @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
108
109latex:
110 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
111 @echo
112 @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
113 @echo "Run \`make' in that directory to run these through (pdf)latex" \
114 "(use \`make latexpdf' here to do that automatically)."
115
116latexpdf:
117 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
118 @echo "Running LaTeX files through pdflatex..."
119 $(MAKE) -C $(BUILDDIR)/latex all-pdf
120 @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
121
122latexpdfja:
123 $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
124 @echo "Running LaTeX files through platex and dvipdfmx..."
125 $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
126 @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
127
128text:
129 $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
130 @echo
131 @echo "Build finished. The text files are in $(BUILDDIR)/text."
132
133man:
134 $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
135 @echo
136 @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
137
138texinfo:
139 $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
140 @echo
141 @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
142 @echo "Run \`make' in that directory to run these through makeinfo" \
143 "(use \`make info' here to do that automatically)."
144
145info:
146 $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
147 @echo "Running Texinfo files through makeinfo..."
148 make -C $(BUILDDIR)/texinfo info
149 @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
150
151gettext:
152 $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
153 @echo
154 @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
155
156changes:
157 $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
158 @echo
159 @echo "The overview file is in $(BUILDDIR)/changes."
160
161linkcheck:
162 $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
163 @echo
164 @echo "Link check complete; look for any errors in the above output " \
165 "or in $(BUILDDIR)/linkcheck/output.txt."
166
167doctest:
168 $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
169 @echo "Testing of doctests in the sources finished, look at the " \
170 "results in $(BUILDDIR)/doctest/output.txt."
171
172xml:
173 $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
174 @echo
175 @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
176
177pseudoxml:
178 $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
179 @echo
180 @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
181#@-leo
0182
=== added directory 'sphinx-docs/_build'
=== added directory 'sphinx-docs/_build/doctrees'
=== added file 'sphinx-docs/_build/doctrees/environment.pickle'
1Binary files sphinx-docs/_build/doctrees/environment.pickle 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/environment.pickle 2013-05-03 14:47:26 +0000 differ183Binary files sphinx-docs/_build/doctrees/environment.pickle 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/environment.pickle 2013-05-03 14:47:26 +0000 differ
=== added file 'sphinx-docs/_build/doctrees/index.doctree'
2Binary files sphinx-docs/_build/doctrees/index.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/index.doctree 2013-05-03 14:47:26 +0000 differ184Binary files sphinx-docs/_build/doctrees/index.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/index.doctree 2013-05-03 14:47:26 +0000 differ
=== added file 'sphinx-docs/_build/doctrees/leo.core.doctree'
3Binary files sphinx-docs/_build/doctrees/leo.core.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.core.doctree 2013-05-03 14:47:26 +0000 differ185Binary files sphinx-docs/_build/doctrees/leo.core.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.core.doctree 2013-05-03 14:47:26 +0000 differ
=== added file 'sphinx-docs/_build/doctrees/leo.doctree'
4Binary files sphinx-docs/_build/doctrees/leo.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.doctree 2013-05-03 14:47:26 +0000 differ186Binary files sphinx-docs/_build/doctrees/leo.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.doctree 2013-05-03 14:47:26 +0000 differ
=== added file 'sphinx-docs/_build/doctrees/leo.extensions.doctree'
5Binary files sphinx-docs/_build/doctrees/leo.extensions.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.extensions.doctree 2013-05-03 14:47:26 +0000 differ187Binary files sphinx-docs/_build/doctrees/leo.extensions.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.extensions.doctree 2013-05-03 14:47:26 +0000 differ
=== added file 'sphinx-docs/_build/doctrees/leo.external.concurrent.doctree'
6Binary files sphinx-docs/_build/doctrees/leo.external.concurrent.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.external.concurrent.doctree 2013-05-03 14:47:26 +0000 differ188Binary files sphinx-docs/_build/doctrees/leo.external.concurrent.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.external.concurrent.doctree 2013-05-03 14:47:26 +0000 differ
=== added file 'sphinx-docs/_build/doctrees/leo.external.concurrent.futures.doctree'
7Binary files sphinx-docs/_build/doctrees/leo.external.concurrent.futures.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.external.concurrent.futures.doctree 2013-05-03 14:47:26 +0000 differ189Binary files sphinx-docs/_build/doctrees/leo.external.concurrent.futures.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.external.concurrent.futures.doctree 2013-05-03 14:47:26 +0000 differ
=== added file 'sphinx-docs/_build/doctrees/leo.external.doctree'
8Binary files sphinx-docs/_build/doctrees/leo.external.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.external.doctree 2013-05-03 14:47:26 +0000 differ190Binary files sphinx-docs/_build/doctrees/leo.external.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.external.doctree 2013-05-03 14:47:26 +0000 differ
=== added file 'sphinx-docs/_build/doctrees/leo.modes.doctree'
9Binary files sphinx-docs/_build/doctrees/leo.modes.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.modes.doctree 2013-05-03 14:47:26 +0000 differ191Binary files sphinx-docs/_build/doctrees/leo.modes.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.modes.doctree 2013-05-03 14:47:26 +0000 differ
=== added file 'sphinx-docs/_build/doctrees/leo.plugins.doctree'
10Binary files sphinx-docs/_build/doctrees/leo.plugins.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.plugins.doctree 2013-05-03 14:47:26 +0000 differ192Binary files sphinx-docs/_build/doctrees/leo.plugins.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.plugins.doctree 2013-05-03 14:47:26 +0000 differ
=== added file 'sphinx-docs/_build/doctrees/leo.plugins.pygeotag.doctree'
11Binary files sphinx-docs/_build/doctrees/leo.plugins.pygeotag.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.plugins.pygeotag.doctree 2013-05-03 14:47:26 +0000 differ193Binary files sphinx-docs/_build/doctrees/leo.plugins.pygeotag.doctree 1970-01-01 00:00:00 +0000 and sphinx-docs/_build/doctrees/leo.plugins.pygeotag.doctree 2013-05-03 14:47:26 +0000 differ
=== added directory 'sphinx-docs/_build/html'
=== added file 'sphinx-docs/_build/html/.buildinfo'
--- sphinx-docs/_build/html/.buildinfo 1970-01-01 00:00:00 +0000
+++ sphinx-docs/_build/html/.buildinfo 2013-05-03 14:47:26 +0000
@@ -0,0 +1,4 @@
1# Sphinx build info version 1
2# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
3config: 1659204ed049af35611a59d0e4ea13de
4tags: a205e9ed8462ae86fdd2f73488852ba9
05
=== added directory 'sphinx-docs/_build/html/_modules'
=== added file 'sphinx-docs/_build/html/_modules/index.html'
--- sphinx-docs/_build/html/_modules/index.html 1970-01-01 00:00:00 +0000
+++ sphinx-docs/_build/html/_modules/index.html 2013-05-03 14:47:26 +0000
@@ -0,0 +1,206 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6 <head>
7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
9 <title>Overview: module code &mdash; Leo API 4.11dev documentation</title>
10
11 <link rel="stylesheet" href="../_static/default.css" type="text/css" />
12 <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
13
14 <script type="text/javascript">
15 var DOCUMENTATION_OPTIONS = {
16 URL_ROOT: '../',
17 VERSION: '4.11dev',
18 COLLAPSE_INDEX: false,
19 FILE_SUFFIX: '.html',
20 HAS_SOURCE: true
21 };
22 </script>
23 <script type="text/javascript" src="../_static/jquery.js"></script>
24 <script type="text/javascript" src="../_static/underscore.js"></script>
25 <script type="text/javascript" src="../_static/doctools.js"></script>
26 <link rel="top" title="Leo API 4.11dev documentation" href="../index.html" />
27 </head>
28 <body>
29 <div class="related">
30 <h3>Navigation</h3>
31 <ul>
32 <li class="right" style="margin-right: 10px">
33 <a href="../genindex.html" title="General Index"
34 accesskey="I">index</a></li>
35 <li class="right" >
36 <a href="../py-modindex.html" title="Python Module Index"
37 >modules</a> |</li>
38 <li><a href="../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
39 </ul>
40 </div>
41
42 <div class="document">
43 <div class="documentwrapper">
44 <div class="bodywrapper">
45 <div class="body">
46
47 <h1>All modules for which code is available</h1>
48<ul><li><a href="leo/__init__.html">leo.__init__</a></li>
49<li><a href="leo/core/leoApp.html">leo.core.leoApp</a></li>
50<li><a href="leo/core/leoAtFile.html">leo.core.leoAtFile</a></li>
51<li><a href="leo/core/leoBridge.html">leo.core.leoBridge</a></li>
52<li><a href="leo/core/leoBridgeTest.html">leo.core.leoBridgeTest</a></li>
53<li><a href="leo/core/leoCache.html">leo.core.leoCache</a></li>
54<li><a href="leo/core/leoChapters.html">leo.core.leoChapters</a></li>
55<li><a href="leo/core/leoColor.html">leo.core.leoColor</a></li>
56<li><a href="leo/core/leoCommands.html">leo.core.leoCommands</a></li>
57<li><a href="leo/core/leoCompare.html">leo.core.leoCompare</a></li>
58<li><a href="leo/core/leoConfig.html">leo.core.leoConfig</a></li>
59<li><a href="leo/core/leoDebugger.html">leo.core.leoDebugger</a></li>
60<li><a href="leo/core/leoDynamicTest.html">leo.core.leoDynamicTest</a></li>
61<li><a href="leo/core/leoFileCommands.html">leo.core.leoFileCommands</a></li>
62<li><a href="leo/core/leoFind.html">leo.core.leoFind</a></li>
63<li><a href="leo/core/leoFrame.html">leo.core.leoFrame</a></li>
64<li><a href="leo/core/leoGlobals.html">leo.core.leoGlobals</a></li>
65<li><a href="leo/core/leoGui.html">leo.core.leoGui</a></li>
66<li><a href="leo/core/leoIPython.html">leo.core.leoIPython</a></li>
67<li><a href="leo/core/leoInspect.html">leo.core.leoInspect</a></li>
68<li><a href="leo/core/leoKeys.html">leo.core.leoKeys</a></li>
69<li><a href="leo/core/leoMenu.html">leo.core.leoMenu</a></li>
70<li><a href="leo/core/leoNodes.html">leo.core.leoNodes</a></li>
71<li><a href="leo/core/leoPlugins.html">leo.core.leoPlugins</a></li>
72<li><a href="leo/core/leoPymacs.html">leo.core.leoPymacs</a></li>
73<li><a href="leo/core/leoRst.html">leo.core.leoRst</a></li>
74<li><a href="leo/core/leoShadow.html">leo.core.leoShadow</a></li>
75<li><a href="leo/core/leoTangle.html">leo.core.leoTangle</a></li>
76<li><a href="leo/core/leoTest.html">leo.core.leoTest</a></li>
77<li><a href="leo/core/leoUndo.html">leo.core.leoUndo</a></li>
78<li><a href="leo/core/runLeo.html">leo.core.runLeo</a></li>
79<li><a href="leo/extensions/asciidoc.html">leo.extensions.asciidoc</a></li>
80<li><a href="leo/extensions/colors.html">leo.extensions.colors</a></li>
81<li><a href="leo/extensions/patch_11_01.html">leo.extensions.patch_11_01</a></li>
82<li><a href="leo/external/codewise.html">leo.external.codewise</a></li>
83<li><a href="leo/external/edb.html">leo.external.edb</a></li>
84<li><a href="leo/external/leosax.html">leo.external.leosax</a></li>
85<li><a href="leo/external/stringlist.html">leo.external.stringlist</a></li>
86<li><a href="leo/plugins/FileActions.html">leo.plugins.FileActions</a></li>
87<li><a href="leo/plugins/add_directives.html">leo.plugins.add_directives</a></li>
88<li><a href="leo/plugins/at_folder.html">leo.plugins.at_folder</a></li>
89<li><a href="leo/plugins/at_produce.html">leo.plugins.at_produce</a></li>
90<li><a href="leo/plugins/at_view.html">leo.plugins.at_view</a></li>
91<li><a href="leo/plugins/bibtex.html">leo.plugins.bibtex</a></li>
92<li><a href="leo/plugins/chapter_hoist.html">leo.plugins.chapter_hoist</a></li>
93<li><a href="leo/plugins/codewisecompleter.html">leo.plugins.codewisecompleter</a></li>
94<li><a href="leo/plugins/colorize_headlines.html">leo.plugins.colorize_headlines</a></li>
95<li><a href="leo/plugins/cursesGui.html">leo.plugins.cursesGui</a></li>
96<li><a href="leo/plugins/datenodes.html">leo.plugins.datenodes</a></li>
97<li><a href="leo/plugins/debugger_pudb.html">leo.plugins.debugger_pudb</a></li>
98<li><a href="leo/plugins/dtest.html">leo.plugins.dtest</a></li>
99<li><a href="leo/plugins/dump_globals.html">leo.plugins.dump_globals</a></li>
100<li><a href="leo/plugins/empty_leo_file.html">leo.plugins.empty_leo_file</a></li>
101<li><a href="leo/plugins/enable_gc.html">leo.plugins.enable_gc</a></li>
102<li><a href="leo/plugins/expfolder.html">leo.plugins.expfolder</a></li>
103<li><a href="leo/plugins/geotag.html">leo.plugins.geotag</a></li>
104<li><a href="leo/plugins/gitarchive.html">leo.plugins.gitarchive</a></li>
105<li><a href="leo/plugins/import_cisco_config.html">leo.plugins.import_cisco_config</a></li>
106<li><a href="leo/plugins/initinclass.html">leo.plugins.initinclass</a></li>
107<li><a href="leo/plugins/ipython.html">leo.plugins.ipython</a></li>
108<li><a href="leo/plugins/jinjarender.html">leo.plugins.jinjarender</a></li>
109<li><a href="leo/plugins/leoOPML.html">leo.plugins.leoOPML</a></li>
110<li><a href="leo/plugins/leo_interface.html">leo.plugins.leo_interface</a></li>
111<li><a href="leo/plugins/leo_to_html.html">leo.plugins.leo_to_html</a></li>
112<li><a href="leo/plugins/leo_to_rtf.html">leo.plugins.leo_to_rtf</a></li>
113<li><a href="leo/plugins/leocursor.html">leo.plugins.leocursor</a></li>
114<li><a href="leo/plugins/leofeeds.html">leo.plugins.leofeeds</a></li>
115<li><a href="leo/plugins/leomail.html">leo.plugins.leomail</a></li>
116<li><a href="leo/plugins/lineNumbers.html">leo.plugins.lineNumbers</a></li>
117<li><a href="leo/plugins/macros.html">leo.plugins.macros</a></li>
118<li><a href="leo/plugins/maximizeNewWindows.html">leo.plugins.maximizeNewWindows</a></li>
119<li><a href="leo/plugins/mime.html">leo.plugins.mime</a></li>
120<li><a href="leo/plugins/mnplugins.html">leo.plugins.mnplugins</a></li>
121<li><a href="leo/plugins/mod_autosave.html">leo.plugins.mod_autosave</a></li>
122<li><a href="leo/plugins/mod_framesize.html">leo.plugins.mod_framesize</a></li>
123<li><a href="leo/plugins/mod_http.html">leo.plugins.mod_http</a></li>
124<li><a href="leo/plugins/mod_leo2ascd.html">leo.plugins.mod_leo2ascd</a></li>
125<li><a href="leo/plugins/mod_read_dir_outline.html">leo.plugins.mod_read_dir_outline</a></li>
126<li><a href="leo/plugins/mod_scripting.html">leo.plugins.mod_scripting</a></li>
127<li><a href="leo/plugins/mod_speedups.html">leo.plugins.mod_speedups</a></li>
128<li><a href="leo/plugins/mod_tempfname.html">leo.plugins.mod_tempfname</a></li>
129<li><a href="leo/plugins/mod_timestamp.html">leo.plugins.mod_timestamp</a></li>
130<li><a href="leo/plugins/multifile.html">leo.plugins.multifile</a></li>
131<li><a href="leo/plugins/niceNosent.html">leo.plugins.niceNosent</a></li>
132<li><a href="leo/plugins/nodeActions.html">leo.plugins.nodeActions</a></li>
133<li><a href="leo/plugins/open_shell.html">leo.plugins.open_shell</a></li>
134<li><a href="leo/plugins/outline_export.html">leo.plugins.outline_export</a></li>
135<li><a href="leo/plugins/paste_as_headlines.html">leo.plugins.paste_as_headlines</a></li>
136<li><a href="leo/plugins/pluginsTest.html">leo.plugins.pluginsTest</a></li>
137<li><a href="leo/plugins/plugins_menu.html">leo.plugins.plugins_menu</a></li>
138<li><a href="leo/plugins/pygeotag/pygeotag.html">leo.plugins.pygeotag.pygeotag</a></li>
139<li><a href="leo/plugins/qtframecommands.html">leo.plugins.qtframecommands</a></li>
140<li><a href="leo/plugins/quit_leo.html">leo.plugins.quit_leo</a></li>
141<li><a href="leo/plugins/read_only_nodes.html">leo.plugins.read_only_nodes</a></li>
142<li><a href="leo/plugins/redirect_to_log.html">leo.plugins.redirect_to_log</a></li>
143<li><a href="leo/plugins/rst3.html">leo.plugins.rst3</a></li>
144<li><a href="leo/plugins/run_nodes.html">leo.plugins.run_nodes</a></li>
145<li><a href="leo/plugins/screenshots.html">leo.plugins.screenshots</a></li>
146<li><a href="leo/plugins/script_io_to_body.html">leo.plugins.script_io_to_body</a></li>
147<li><a href="leo/plugins/scripts_menu.html">leo.plugins.scripts_menu</a></li>
148<li><a href="leo/plugins/setHomeDirectory.html">leo.plugins.setHomeDirectory</a></li>
149<li><a href="leo/plugins/slideshow.html">leo.plugins.slideshow</a></li>
150<li><a href="leo/plugins/startfile.html">leo.plugins.startfile</a></li>
151<li><a href="leo/plugins/testRegisterCommand.html">leo.plugins.testRegisterCommand</a></li>
152<li><a href="leo/plugins/textnode.html">leo.plugins.textnode</a></li>
153<li><a href="leo/plugins/tkGui.html">leo.plugins.tkGui</a></li>
154<li><a href="leo/plugins/tomboy_import.html">leo.plugins.tomboy_import</a></li>
155<li><a href="leo/plugins/trace_gc_plugin.html">leo.plugins.trace_gc_plugin</a></li>
156<li><a href="leo/plugins/trace_keys.html">leo.plugins.trace_keys</a></li>
157<li><a href="leo/plugins/trace_tags.html">leo.plugins.trace_tags</a></li>
158<li><a href="leo/plugins/valuespace.html">leo.plugins.valuespace</a></li>
159<li><a href="leo/plugins/vim.html">leo.plugins.vim</a></li>
160<li><a href="leo/plugins/word_count.html">leo.plugins.word_count</a></li>
161<li><a href="leo/plugins/word_export.html">leo.plugins.word_export</a></li>
162<li><a href="leo/plugins/xemacs.html">leo.plugins.xemacs</a></li>
163<li><a href="leo/plugins/xsltWithNodes.html">leo.plugins.xsltWithNodes</a></li>
164<li><a href="leo/plugins/zenity_file_dialogs.html">leo.plugins.zenity_file_dialogs</a></li>
165</ul>
166
167 </div>
168 </div>
169 </div>
170 <div class="sphinxsidebar">
171 <div class="sphinxsidebarwrapper">
172<div id="searchbox" style="display: none">
173 <h3>Quick search</h3>
174 <form class="search" action="../search.html" method="get">
175 <input type="text" name="q" />
176 <input type="submit" value="Go" />
177 <input type="hidden" name="check_keywords" value="yes" />
178 <input type="hidden" name="area" value="default" />
179 </form>
180 <p class="searchtip" style="font-size: 90%">
181 Enter search terms or a module, class or function name.
182 </p>
183</div>
184<script type="text/javascript">$('#searchbox').show(0);</script>
185 </div>
186 </div>
187 <div class="clearer"></div>
188 </div>
189 <div class="related">
190 <h3>Navigation</h3>
191 <ul>
192 <li class="right" style="margin-right: 10px">
193 <a href="../genindex.html" title="General Index"
194 >index</a></li>
195 <li class="right" >
196 <a href="../py-modindex.html" title="Python Module Index"
197 >modules</a> |</li>
198 <li><a href="../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
199 </ul>
200 </div>
201 <div class="footer">
202 &copy; Copyright 2013, Ed K. Ream.
203 Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
204 </div>
205 </body>
206</html>
0\ No newline at end of file207\ No newline at end of file
1208
=== added directory 'sphinx-docs/_build/html/_modules/leo'
=== added file 'sphinx-docs/_build/html/_modules/leo/__init__.html'
--- sphinx-docs/_build/html/_modules/leo/__init__.html 1970-01-01 00:00:00 +0000
+++ sphinx-docs/_build/html/_modules/leo/__init__.html 2013-05-03 14:47:26 +0000
@@ -0,0 +1,104 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6 <head>
7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
9 <title>leo.__init__ &mdash; Leo API 4.11dev documentation</title>
10
11 <link rel="stylesheet" href="../../_static/default.css" type="text/css" />
12 <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
13
14 <script type="text/javascript">
15 var DOCUMENTATION_OPTIONS = {
16 URL_ROOT: '../../',
17 VERSION: '4.11dev',
18 COLLAPSE_INDEX: false,
19 FILE_SUFFIX: '.html',
20 HAS_SOURCE: true
21 };
22 </script>
23 <script type="text/javascript" src="../../_static/jquery.js"></script>
24 <script type="text/javascript" src="../../_static/underscore.js"></script>
25 <script type="text/javascript" src="../../_static/doctools.js"></script>
26 <link rel="top" title="Leo API 4.11dev documentation" href="../../index.html" />
27 <link rel="up" title="Module code" href="../index.html" />
28 </head>
29 <body>
30 <div class="related">
31 <h3>Navigation</h3>
32 <ul>
33 <li class="right" style="margin-right: 10px">
34 <a href="../../genindex.html" title="General Index"
35 accesskey="I">index</a></li>
36 <li class="right" >
37 <a href="../../py-modindex.html" title="Python Module Index"
38 >modules</a> |</li>
39 <li><a href="../../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
40 <li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
41 </ul>
42 </div>
43
44 <div class="document">
45 <div class="documentwrapper">
46 <div class="bodywrapper">
47 <div class="body">
48
49 <h1>Source code for leo.__init__</h1><pre>
50# This file makes the leo directory a package.
51
52# The function allows the following code to work::
53#
54# import leo
55# leo.run()
56
57<div class="viewcode-block" id="run"><a class="viewcode-back" href="../../leo.html#leo.__init__.run">[docs]</a>def run(*args,**keys):
58 import pdb ; pdb = pdb.set_trace
59 import leo.core.runLeo as runLeo
60 runLeo.run(*args,**keys)
61</div>
62</pre>
63
64 </div>
65 </div>
66 </div>
67 <div class="sphinxsidebar">
68 <div class="sphinxsidebarwrapper">
69<div id="searchbox" style="display: none">
70 <h3>Quick search</h3>
71 <form class="search" action="../../search.html" method="get">
72 <input type="text" name="q" />
73 <input type="submit" value="Go" />
74 <input type="hidden" name="check_keywords" value="yes" />
75 <input type="hidden" name="area" value="default" />
76 </form>
77 <p class="searchtip" style="font-size: 90%">
78 Enter search terms or a module, class or function name.
79 </p>
80</div>
81<script type="text/javascript">$('#searchbox').show(0);</script>
82 </div>
83 </div>
84 <div class="clearer"></div>
85 </div>
86 <div class="related">
87 <h3>Navigation</h3>
88 <ul>
89 <li class="right" style="margin-right: 10px">
90 <a href="../../genindex.html" title="General Index"
91 >index</a></li>
92 <li class="right" >
93 <a href="../../py-modindex.html" title="Python Module Index"
94 >modules</a> |</li>
95 <li><a href="../../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
96 <li><a href="../index.html" >Module code</a> &raquo;</li>
97 </ul>
98 </div>
99 <div class="footer">
100 &copy; Copyright 2013, Ed K. Ream.
101 Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
102 </div>
103 </body>
104</html>
0\ No newline at end of file105\ No newline at end of file
1106
=== added directory 'sphinx-docs/_build/html/_modules/leo/core'
=== added file 'sphinx-docs/_build/html/_modules/leo/core/leoApp.html'
--- sphinx-docs/_build/html/_modules/leo/core/leoApp.html 1970-01-01 00:00:00 +0000
+++ sphinx-docs/_build/html/_modules/leo/core/leoApp.html 2013-05-03 14:47:26 +0000
@@ -0,0 +1,3371 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6 <head>
7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
9 <title>leo.core.leoApp &mdash; Leo API 4.11dev documentation</title>
10
11 <link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
12 <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
13
14 <script type="text/javascript">
15 var DOCUMENTATION_OPTIONS = {
16 URL_ROOT: '../../../',
17 VERSION: '4.11dev',
18 COLLAPSE_INDEX: false,
19 FILE_SUFFIX: '.html',
20 HAS_SOURCE: true
21 };
22 </script>
23 <script type="text/javascript" src="../../../_static/jquery.js"></script>
24 <script type="text/javascript" src="../../../_static/underscore.js"></script>
25 <script type="text/javascript" src="../../../_static/doctools.js"></script>
26 <link rel="top" title="Leo API 4.11dev documentation" href="../../../index.html" />
27 <link rel="up" title="Module code" href="../../index.html" />
28 </head>
29 <body>
30 <div class="related">
31 <h3>Navigation</h3>
32 <ul>
33 <li class="right" style="margin-right: 10px">
34 <a href="../../../genindex.html" title="General Index"
35 accesskey="I">index</a></li>
36 <li class="right" >
37 <a href="../../../py-modindex.html" title="Python Module Index"
38 >modules</a> |</li>
39 <li><a href="../../../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
40 <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li>
41 </ul>
42 </div>
43
44 <div class="document">
45 <div class="documentwrapper">
46 <div class="bodywrapper">
47 <div class="body">
48
49 <h1>Source code for leo.core.leoApp</h1><div class="highlight"><pre>
50<span class="c"># -*- coding: utf-8 -*-</span>
51<span class="c">#@+leo-ver=5-thin</span>
52<span class="c">#@+node:ekr.20031218072017.2608: * @file leoApp.py</span>
53<span class="c">#@@first</span>
54
55<span class="c">#@@language python</span>
56<span class="c">#@@tabwidth -4</span>
57<span class="c">#@@pagewidth 60</span>
58
59<span class="c">#@+&lt;&lt; imports &gt;&gt;</span>
60<span class="c">#@+node:ekr.20120219194520.10463: ** &lt;&lt; imports &gt;&gt; (leoApp)</span>
61<span class="kn">import</span> <span class="nn">leo.core.leoGlobals</span> <span class="kn">as</span> <span class="nn">g</span>
62
63<span class="kn">import</span> <span class="nn">os</span>
64<span class="kn">import</span> <span class="nn">optparse</span>
65<span class="kn">import</span> <span class="nn">string</span>
66<span class="kn">import</span> <span class="nn">sys</span>
67<span class="kn">import</span> <span class="nn">traceback</span>
68<span class="kn">import</span> <span class="nn">zipfile</span>
69
70<span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">:</span>
71 <span class="kn">import</span> <span class="nn">io</span>
72 <span class="n">StringIO</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">StringIO</span>
73<span class="k">else</span><span class="p">:</span>
74 <span class="kn">import</span> <span class="nn">cStringIO</span>
75 <span class="n">StringIO</span> <span class="o">=</span> <span class="n">cStringIO</span><span class="o">.</span><span class="n">StringIO</span>
76<span class="c">#@-&lt;&lt; imports &gt;&gt;</span>
77
78<span class="c">#@+others</span>
79<span class="c">#@+node:ekr.20120209051836.10241: ** class LeoApp</span>
80<div class="viewcode-block" id="LeoApp"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp">[docs]</a><span class="k">class</span> <span class="nc">LeoApp</span><span class="p">:</span>
81
82 <span class="sd">&quot;&quot;&quot;A class representing the Leo application itself.</span>
83
84<span class="sd"> Ivars of this class are Leo&#39;s global variables.&quot;&quot;&quot;</span>
85
86 <span class="c">#@+others</span>
87 <span class="c">#@+node:ekr.20031218072017.1416: *3* app.__init__</span>
88 <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
89
90 <span class="n">trace</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">trace_startup</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
91 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;leoApp.__init__&#39;</span><span class="p">)</span>
92
93 <span class="c"># These ivars are Leo&#39;s global vars.</span>
94 <span class="c"># leoGlobals.py contains global switches to be set by hand.</span>
95
96 <span class="c"># Command-line arguments...</span>
97 <span class="bp">self</span><span class="o">.</span><span class="n">batchMode</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: run in batch mode.</span>
98 <span class="bp">self</span><span class="o">.</span><span class="n">enablePlugins</span> <span class="o">=</span> <span class="bp">True</span> <span class="c"># True: run start1 hook to load plugins. --no-plugins</span>
99 <span class="bp">self</span><span class="o">.</span><span class="n">gui</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The gui class.</span>
100 <span class="bp">self</span><span class="o">.</span><span class="n">guiArgName</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The gui name given in --gui option.</span>
101 <span class="bp">self</span><span class="o">.</span><span class="n">qt_use_tabs</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: allow tabbed main window.</span>
102 <span class="bp">self</span><span class="o">.</span><span class="n">restore_session</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: restore session on startup.</span>
103 <span class="bp">self</span><span class="o">.</span><span class="n">save_session</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: save session on close.</span>
104 <span class="bp">self</span><span class="o">.</span><span class="n">silentMode</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: no signon.</span>
105 <span class="bp">self</span><span class="o">.</span><span class="n">start_fullscreen</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># For qtGui plugin.</span>
106 <span class="bp">self</span><span class="o">.</span><span class="n">start_maximized</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># For qtGui plugin.</span>
107 <span class="bp">self</span><span class="o">.</span><span class="n">start_minimized</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># For qtGui plugin.</span>
108 <span class="bp">self</span><span class="o">.</span><span class="n">translateToUpperCase</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># Never set to True.</span>
109 <span class="bp">self</span><span class="o">.</span><span class="n">useIpython</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: add support for IPython.</span>
110 <span class="bp">self</span><span class="o">.</span><span class="n">use_psyco</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: use psyco optimization.</span>
111 <span class="bp">self</span><span class="o">.</span><span class="n">use_splash_screen</span> <span class="o">=</span> <span class="bp">True</span> <span class="c"># True: put up a splash screen.</span>
112
113 <span class="c"># Debugging &amp; statistics...</span>
114 <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">=</span> <span class="mi">0</span> <span class="c"># General purpose debugging count.</span>
115 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># Enable debugging. (Can be slow.)</span>
116 <span class="bp">self</span><span class="o">.</span><span class="n">debugSwitch</span> <span class="o">=</span> <span class="mi">0</span> <span class="c"># 0: Brief; 1: Full.</span>
117 <span class="bp">self</span><span class="o">.</span><span class="n">disable_redraw</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: disable all redraws.</span>
118 <span class="bp">self</span><span class="o">.</span><span class="n">disableSave</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># May be set by plugins.</span>
119 <span class="bp">self</span><span class="o">.</span><span class="n">positions</span> <span class="o">=</span> <span class="mi">0</span> <span class="c"># The number of positions generated.</span>
120 <span class="bp">self</span><span class="o">.</span><span class="n">scanErrors</span> <span class="o">=</span> <span class="mi">0</span> <span class="c"># The number of errors seen by g.scanError.</span>
121 <span class="bp">self</span><span class="o">.</span><span class="n">statsDict</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># dict used by g.stat, g.clear_stats, g.print_stats.</span>
122
123 <span class="c"># Error messages...</span>
124 <span class="bp">self</span><span class="o">.</span><span class="n">atPathInBodyWarning</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># Set by get_directives_dict.</span>
125 <span class="bp">self</span><span class="o">.</span><span class="n">menuWarningsGiven</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: supress warnings in menu code.</span>
126 <span class="bp">self</span><span class="o">.</span><span class="n">unicodeErrorGiven</span> <span class="o">=</span> <span class="bp">True</span> <span class="c"># True: suppres unicode tracebacks.</span>
127
128 <span class="c"># Global directories...</span>
129 <span class="bp">self</span><span class="o">.</span><span class="n">extensionsDir</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The leo/extensions directory</span>
130 <span class="bp">self</span><span class="o">.</span><span class="n">globalConfigDir</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># leo/config directory</span>
131 <span class="bp">self</span><span class="o">.</span><span class="n">globalOpenDir</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The directory last used to open a file.</span>
132 <span class="bp">self</span><span class="o">.</span><span class="n">homeDir</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The user&#39;s home directory.</span>
133 <span class="bp">self</span><span class="o">.</span><span class="n">homeLeoDir</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The user&#39;s home/.leo directory.</span>
134 <span class="bp">self</span><span class="o">.</span><span class="n">loadDir</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The leo/core directory.</span>
135 <span class="bp">self</span><span class="o">.</span><span class="n">machineDir</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The machine-specific directory.</span>
136
137 <span class="c"># Global data...</span>
138 <span class="bp">self</span><span class="o">.</span><span class="n">globalKillBuffer</span> <span class="o">=</span> <span class="p">[]</span> <span class="c"># The global kill buffer.</span>
139 <span class="bp">self</span><span class="o">.</span><span class="n">globalRegisters</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># The global register list.</span>
140 <span class="bp">self</span><span class="o">.</span><span class="n">leoID</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The id part of gnx&#39;s.</span>
141 <span class="bp">self</span><span class="o">.</span><span class="n">lossage</span> <span class="o">=</span> <span class="p">[]</span> <span class="c"># List of last 100 keystrokes.</span>
142 <span class="bp">self</span><span class="o">.</span><span class="n">numberOfUntitledWindows</span><span class="o">=</span><span class="mi">0</span> <span class="c"># Number of opened untitled windows.</span>
143 <span class="bp">self</span><span class="o">.</span><span class="n">windowList</span> <span class="o">=</span> <span class="p">[]</span> <span class="c"># Global list of all frames.</span>
144 <span class="bp">self</span><span class="o">.</span><span class="n">realMenuNameDict</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># Translations of menu names.</span>
145
146 <span class="c"># Global controller/manager objects...</span>
147 <span class="bp">self</span><span class="o">.</span><span class="n">config</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The singleton leoConfig instance.</span>
148 <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The singleton leoCacher instance.</span>
149 <span class="bp">self</span><span class="o">.</span><span class="n">loadManager</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The singleton LoadManager instance.</span>
150 <span class="c"># self.logManager = None # The singleton LogManager instance.</span>
151 <span class="c"># self.openWithManager = None # The singleton OpenWithManager instance.</span>
152 <span class="bp">self</span><span class="o">.</span><span class="n">nodeIndices</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The singleton nodeIndices instance.</span>
153 <span class="bp">self</span><span class="o">.</span><span class="n">pluginsController</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The singleton PluginsManager instance.</span>
154 <span class="bp">self</span><span class="o">.</span><span class="n">sessionManager</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The singleton SessionManager instance.</span>
155
156 <span class="c"># Global status vars...</span>
157
158 <span class="k">if</span> <span class="mi">1</span><span class="p">:</span> <span class="c">#### To be moved to the Commands class...</span>
159 <span class="bp">self</span><span class="o">.</span><span class="n">commandName</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The name of the command being executed.</span>
160 <span class="bp">self</span><span class="o">.</span><span class="n">commandInterruptFlag</span><span class="o">=</span><span class="bp">False</span> <span class="c"># True: command within a command.</span>
161
162 <span class="bp">self</span><span class="o">.</span><span class="n">dragging</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: dragging.</span>
163 <span class="bp">self</span><span class="o">.</span><span class="n">inBridge</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: running from leoBridge module.</span>
164 <span class="bp">self</span><span class="o">.</span><span class="n">inScript</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: executing a script.</span>
165 <span class="bp">self</span><span class="o">.</span><span class="n">initing</span> <span class="o">=</span> <span class="bp">True</span> <span class="c"># True: we are initiing the app.</span>
166 <span class="bp">self</span><span class="o">.</span><span class="n">killed</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: we are about to destroy the root window.</span>
167 <span class="bp">self</span><span class="o">.</span><span class="n">preReadFlag</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: we are pre-reading a settings file.</span>
168 <span class="bp">self</span><span class="o">.</span><span class="n">quitting</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: quitting. Locks out some events.</span>
169 <span class="bp">self</span><span class="o">.</span><span class="n">reverting</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: executing the revert command.</span>
170
171 <span class="c">#### To be moved to the LogManager.</span>
172
173 <span class="c"># The global log...</span>
174 <span class="bp">self</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The LeoFrame containing the present log.</span>
175 <span class="bp">self</span><span class="o">.</span><span class="n">logInited</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># False: all log message go to logWaiting list.</span>
176 <span class="bp">self</span><span class="o">.</span><span class="n">logIsLocked</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: no changes to log are allowed.</span>
177 <span class="bp">self</span><span class="o">.</span><span class="n">logWaiting</span> <span class="o">=</span> <span class="p">[]</span> <span class="c"># List of messages waiting to go to a log.</span>
178 <span class="bp">self</span><span class="o">.</span><span class="n">printWaiting</span> <span class="o">=</span> <span class="p">[]</span> <span class="c"># Queue of messages to be sent to the printer.</span>
179 <span class="bp">self</span><span class="o">.</span><span class="n">signon</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
180 <span class="bp">self</span><span class="o">.</span><span class="n">signon2</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
181 <span class="bp">self</span><span class="o">.</span><span class="n">signon_printed</span> <span class="o">=</span> <span class="bp">False</span>
182
183 <span class="c"># Global types.</span>
184 <span class="kn">import</span> <span class="nn">leo.core.leoFrame</span> <span class="kn">as</span> <span class="nn">leoFrame</span>
185 <span class="kn">import</span> <span class="nn">leo.core.leoGui</span> <span class="kn">as</span> <span class="nn">leoGui</span>
186 <span class="bp">self</span><span class="o">.</span><span class="n">nullGui</span> <span class="o">=</span> <span class="n">leoGui</span><span class="o">.</span><span class="n">nullGui</span><span class="p">()</span>
187 <span class="bp">self</span><span class="o">.</span><span class="n">nullLog</span> <span class="o">=</span> <span class="n">leoFrame</span><span class="o">.</span><span class="n">nullLog</span><span class="p">()</span>
188
189 <span class="c">#### To be moved to OpenWithManager.</span>
190
191 <span class="c"># Open with data...</span>
192 <span class="bp">self</span><span class="o">.</span><span class="n">hasOpenWithMenu</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: open with plugin has been loaded.</span>
193 <span class="bp">self</span><span class="o">.</span><span class="n">openWithFiles</span> <span class="o">=</span> <span class="p">[]</span> <span class="c"># List of data used by Open With command.</span>
194 <span class="bp">self</span><span class="o">.</span><span class="n">openWithFileNum</span> <span class="o">=</span> <span class="mi">0</span> <span class="c"># Number of Open-With temp file names.</span>
195 <span class="bp">self</span><span class="o">.</span><span class="n">openWithTable</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># Passed to createOpenWithMenuFromTable.</span>
196
197 <span class="c">#### To be moved to to the pluginsController.</span>
198
199 <span class="c"># Plugins and event handlers...</span>
200 <span class="bp">self</span><span class="o">.</span><span class="n">afterHandler</span> <span class="o">=</span> <span class="bp">None</span>
201 <span class="bp">self</span><span class="o">.</span><span class="n">hookError</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: suppress further calls to hooks.</span>
202 <span class="bp">self</span><span class="o">.</span><span class="n">hookFunction</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># Application wide hook function.</span>
203 <span class="bp">self</span><span class="o">.</span><span class="n">idle_imported</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: we have done an import idle</span>
204 <span class="bp">self</span><span class="o">.</span><span class="n">idleTimeDelay</span> <span class="o">=</span> <span class="mi">100</span> <span class="c"># Delay in msec between calls to &quot;idle time&quot; hook.</span>
205 <span class="bp">self</span><span class="o">.</span><span class="n">idleTimeHook</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: the global idleTimeHookHandler will reshedule itself.</span>
206
207 <span class="c"># Support for scripting...</span>
208 <span class="bp">self</span><span class="o">.</span><span class="n">searchDict</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># For communication between find/change scripts.</span>
209 <span class="bp">self</span><span class="o">.</span><span class="n">scriptDict</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># For use by scripts. Cleared before running each script.</span>
210 <span class="bp">self</span><span class="o">.</span><span class="n">permanentScriptDict</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># For use by scrips. Never cleared automatically.</span>
211
212 <span class="c"># Unit testing...</span>
213 <span class="bp">self</span><span class="o">.</span><span class="n">isExternalUnitTest</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: we are running a unit test externally.</span>
214 <span class="bp">self</span><span class="o">.</span><span class="n">runningAllUnitTests</span> <span class="o">=</span> <span class="bp">False</span><span class="c"># True: we are running all unit tests (Only for local tests).</span>
215 <span class="bp">self</span><span class="o">.</span><span class="n">unitTestDict</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># For communication between unit tests and code.</span>
216 <span class="bp">self</span><span class="o">.</span><span class="n">unitTestGui</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># A way to override the gui in external unit tests.</span>
217 <span class="bp">self</span><span class="o">.</span><span class="n">unitTesting</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True if unit testing.</span>
218 <span class="bp">self</span><span class="o">.</span><span class="n">unitTestMenusDict</span> <span class="o">=</span> <span class="p">{}</span>
219 <span class="c"># Created in leoMenu.createMenuEntries for a unit test.</span>
220 <span class="c"># keys are command names. values are sets of strokes.</span>
221
222 <span class="c"># Define all global data. </span>
223 <span class="bp">self</span><span class="o">.</span><span class="n">define_global_constants</span><span class="p">()</span>
224 <span class="bp">self</span><span class="o">.</span><span class="n">define_language_delims_dict</span><span class="p">()</span>
225 <span class="bp">self</span><span class="o">.</span><span class="n">define_language_extension_dict</span><span class="p">()</span>
226 <span class="bp">self</span><span class="o">.</span><span class="n">define_extension_dict</span><span class="p">()</span>
227 <span class="bp">self</span><span class="o">.</span><span class="n">global_commands_dict</span> <span class="o">=</span> <span class="p">{}</span>
228
229 <span class="bp">self</span><span class="o">.</span><span class="n">ipk</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># python kernel instance</span>
230 <span class="c">#@+node:ekr.20031218072017.1417: *4* app.define_global_constants</span>
231<div class="viewcode-block" id="LeoApp.define_global_constants"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.define_global_constants">[docs]</a> <span class="k">def</span> <span class="nf">define_global_constants</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
232
233 <span class="c"># self.prolog_string = &quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot;?&gt;&quot;</span>
234
235 <span class="bp">self</span><span class="o">.</span><span class="n">prolog_prefix_string</span> <span class="o">=</span> <span class="s">&quot;&lt;?xml version=</span><span class="se">\&quot;</span><span class="s">1.0</span><span class="se">\&quot;</span><span class="s"> encoding=&quot;</span>
236 <span class="bp">self</span><span class="o">.</span><span class="n">prolog_postfix_string</span> <span class="o">=</span> <span class="s">&quot;?&gt;&quot;</span>
237 <span class="bp">self</span><span class="o">.</span><span class="n">prolog_namespace_string</span> <span class="o">=</span> \
238 <span class="s">&#39;xmlns:leo=&quot;http://edreamleo.org/namespaces/leo-python-editor/1.1&quot;&#39;</span>
239 <span class="c">#@+node:ekr.20120522160137.9909: *4* app.define_language_delims_dict</span></div>
240<div class="viewcode-block" id="LeoApp.define_language_delims_dict"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.define_language_delims_dict">[docs]</a> <span class="k">def</span> <span class="nf">define_language_delims_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
241
242 <span class="bp">self</span><span class="o">.</span><span class="n">language_delims_dict</span> <span class="o">=</span> <span class="p">{</span>
243 <span class="c"># Internally, lower case is used for all language names.</span>
244 <span class="c"># Keys are languages, values are 1,2 or 3-tuples of delims.</span>
245 <span class="s">&quot;actionscript&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span> <span class="c">#jason 2003-07-03</span>
246 <span class="s">&quot;ada&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
247 <span class="s">&quot;ada95&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
248 <span class="s">&quot;ahk&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
249 <span class="s">&quot;antlr&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
250 <span class="s">&quot;apacheconf&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
251 <span class="s">&quot;apdl&quot;</span> <span class="p">:</span> <span class="s">&quot;!&quot;</span><span class="p">,</span>
252 <span class="s">&quot;applescript&quot;</span> <span class="p">:</span> <span class="s">&quot;-- (* *)&quot;</span><span class="p">,</span>
253 <span class="s">&quot;asp&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
254 <span class="s">&quot;aspect_j&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
255 <span class="s">&quot;assembly_macro32&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
256 <span class="s">&quot;assembly_mcs51&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
257 <span class="s">&quot;assembly_parrot&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
258 <span class="s">&quot;assembly_r2000&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
259 <span class="s">&quot;assembly_x86&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
260 <span class="s">&quot;autohotkey&quot;</span> <span class="p">:</span> <span class="s">&quot;; /* */&quot;</span><span class="p">,</span> <span class="c">#TL - AutoHotkey language</span>
261 <span class="s">&quot;awk&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
262 <span class="s">&quot;b&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
263 <span class="s">&quot;batch&quot;</span> <span class="p">:</span> <span class="s">&quot;REM_&quot;</span><span class="p">,</span> <span class="c"># Use the REM hack.</span>
264 <span class="s">&quot;bbj&quot;</span> <span class="p">:</span> <span class="s">&quot;/* */&quot;</span><span class="p">,</span>
265 <span class="s">&quot;bcel&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
266 <span class="s">&quot;bibtex&quot;</span> <span class="p">:</span> <span class="s">&quot;%&quot;</span><span class="p">,</span>
267 <span class="s">&quot;c&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span> <span class="c"># C, C++ or objective C.</span>
268 <span class="s">&quot;chill&quot;</span> <span class="p">:</span> <span class="s">&quot;/* */&quot;</span><span class="p">,</span>
269 <span class="s">&quot;cobol&quot;</span> <span class="p">:</span> <span class="s">&quot;*&quot;</span><span class="p">,</span>
270 <span class="s">&quot;coldfusion&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
271 <span class="s">&quot;config&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span> <span class="c"># Leo 4.5.1</span>
272 <span class="s">&quot;cplusplus&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
273 <span class="s">&quot;cpp&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span><span class="c"># C++.</span>
274 <span class="s">&quot;csharp&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span> <span class="c"># C#</span>
275 <span class="s">&quot;css&quot;</span> <span class="p">:</span> <span class="s">&quot;/* */&quot;</span><span class="p">,</span> <span class="c"># 4/1/04</span>
276 <span class="s">&quot;cweb&quot;</span> <span class="p">:</span> <span class="s">&quot;@q@ @&gt;&quot;</span><span class="p">,</span> <span class="c"># Use the &quot;cweb hack&quot;</span>
277 <span class="s">&quot;cython&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
278 <span class="s">&quot;d&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
279 <span class="s">&quot;doxygen&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
280 <span class="s">&quot;eiffel&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
281 <span class="s">&quot;elisp&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
282 <span class="s">&quot;erlang&quot;</span> <span class="p">:</span> <span class="s">&quot;%&quot;</span><span class="p">,</span>
283 <span class="s">&quot;factor&quot;</span> <span class="p">:</span> <span class="s">&quot;! ( )&quot;</span><span class="p">,</span>
284 <span class="s">&quot;forth&quot;</span> <span class="p">:</span> <span class="s">&quot;</span><span class="se">\\</span><span class="s">_ _(_ _)&quot;</span><span class="p">,</span> <span class="c"># Use the &quot;REM hack&quot;</span>
285 <span class="s">&quot;fortran&quot;</span> <span class="p">:</span> <span class="s">&quot;C&quot;</span><span class="p">,</span>
286 <span class="s">&quot;fortran90&quot;</span> <span class="p">:</span> <span class="s">&quot;!&quot;</span><span class="p">,</span>
287 <span class="s">&quot;foxpro&quot;</span> <span class="p">:</span> <span class="s">&quot;&amp;&amp;&quot;</span><span class="p">,</span>
288 <span class="s">&quot;gettext&quot;</span> <span class="p">:</span> <span class="s">&quot;# &quot;</span><span class="p">,</span>
289 <span class="s">&quot;groovy&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
290 <span class="s">&quot;haskell&quot;</span> <span class="p">:</span> <span class="s">&quot;--_ {-_ _-}&quot;</span><span class="p">,</span>
291 <span class="s">&quot;haxe&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
292 <span class="s">&quot;html&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
293 <span class="s">&quot;i4gl&quot;</span> <span class="p">:</span> <span class="s">&quot;-- { }&quot;</span><span class="p">,</span>
294 <span class="s">&quot;icon&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
295 <span class="s">&quot;idl&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
296 <span class="s">&quot;inform&quot;</span> <span class="p">:</span> <span class="s">&quot;!&quot;</span><span class="p">,</span>
297 <span class="s">&quot;ini&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
298 <span class="s">&quot;inno_setup&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
299 <span class="s">&quot;interlis&quot;</span> <span class="p">:</span> <span class="s">&quot;/* */&quot;</span><span class="p">,</span>
300 <span class="s">&quot;io&quot;</span> <span class="p">:</span> <span class="s">&quot;// */&quot;</span><span class="p">,</span>
301 <span class="s">&quot;java&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
302 <span class="s">&quot;javascript&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span> <span class="c"># EKR: 2011/11/12: For javascript import test.</span>
303 <span class="s">&quot;javaserverpage&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;</span><span class="si">%-- --%</span><span class="s">&gt;&quot;</span><span class="p">,</span> <span class="c"># EKR: 2011/11/25 (See also, jsp)</span>
304 <span class="s">&quot;jhtml&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
305 <span class="s">&quot;jmk&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
306 <span class="s">&quot;jsp&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;</span><span class="si">%-- --%</span><span class="s">&gt;&quot;</span><span class="p">,</span>
307 <span class="s">&quot;kshell&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span> <span class="c"># Leo 4.5.1.</span>
308 <span class="s">&quot;latex&quot;</span> <span class="p">:</span> <span class="s">&quot;%&quot;</span><span class="p">,</span>
309 <span class="s">&quot;lilypond&quot;</span> <span class="p">:</span> <span class="s">&quot;</span><span class="si">% %</span><span class="s">{ %}&quot;</span><span class="p">,</span>
310 <span class="s">&quot;lisp&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span> <span class="c"># EKR: 2010/09/29</span>
311 <span class="s">&quot;lotos&quot;</span> <span class="p">:</span> <span class="s">&quot;(* *)&quot;</span><span class="p">,</span>
312 <span class="s">&quot;lua&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span> <span class="c"># ddm 13/02/06</span>
313 <span class="s">&quot;mail&quot;</span> <span class="p">:</span> <span class="s">&quot;&gt;&quot;</span><span class="p">,</span>
314 <span class="s">&quot;makefile&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
315 <span class="s">&quot;maple&quot;</span> <span class="p">:</span> <span class="s">&quot;//&quot;</span><span class="p">,</span>
316 <span class="s">&quot;matlab&quot;</span> <span class="p">:</span> <span class="s">&quot;%&quot;</span><span class="p">,</span> <span class="c"># EKR: 2011/10/21</span>
317 <span class="s">&quot;md&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span> <span class="c"># PeckJ: 2013/02/08</span>
318 <span class="s">&quot;ml&quot;</span> <span class="p">:</span> <span class="s">&quot;(* *)&quot;</span><span class="p">,</span>
319 <span class="s">&quot;modula3&quot;</span> <span class="p">:</span> <span class="s">&quot;(* *)&quot;</span><span class="p">,</span>
320 <span class="s">&quot;moin&quot;</span> <span class="p">:</span> <span class="s">&quot;##&quot;</span><span class="p">,</span>
321 <span class="s">&quot;mqsc&quot;</span> <span class="p">:</span> <span class="s">&quot;*&quot;</span><span class="p">,</span>
322 <span class="s">&quot;netrexx&quot;</span> <span class="p">:</span> <span class="s">&quot;-- /* */&quot;</span><span class="p">,</span>
323 <span class="s">&quot;noweb&quot;</span> <span class="p">:</span> <span class="s">&quot;%&quot;</span><span class="p">,</span> <span class="c"># EKR: 2009-01-30. Use Latex for doc chunks.</span>
324 <span class="s">&quot;nqc&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
325 <span class="s">&quot;nsi&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span> <span class="c"># EKR: 2010/10/27</span>
326 <span class="s">&quot;nsis2&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
327 <span class="s">&quot;objective_c&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
328 <span class="s">&quot;objectrexx&quot;</span> <span class="p">:</span> <span class="s">&quot;-- /* */&quot;</span><span class="p">,</span>
329 <span class="s">&quot;occam&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
330 <span class="s">&quot;omnimark&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
331 <span class="s">&quot;pascal&quot;</span> <span class="p">:</span> <span class="s">&quot;// { }&quot;</span><span class="p">,</span>
332 <span class="s">&quot;perl&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
333 <span class="s">&quot;perlpod&quot;</span> <span class="p">:</span> <span class="s">&quot;# __=pod__ __=cut__&quot;</span><span class="p">,</span> <span class="c"># 9/25/02: The perlpod hack.</span>
334 <span class="s">&quot;php&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span> <span class="c"># 6/23/07: was &quot;//&quot;,</span>
335 <span class="s">&quot;pike&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
336 <span class="s">&quot;pl1&quot;</span> <span class="p">:</span> <span class="s">&quot;/* */&quot;</span><span class="p">,</span>
337 <span class="s">&quot;plain&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span> <span class="c"># We must pick something.</span>
338 <span class="s">&quot;plsql&quot;</span> <span class="p">:</span> <span class="s">&quot;-- /* */&quot;</span><span class="p">,</span> <span class="c"># SQL scripts qt02537 2005-05-27</span>
339 <span class="s">&quot;pop11&quot;</span> <span class="p">:</span> <span class="s">&quot;;;; /* */&quot;</span><span class="p">,</span>
340 <span class="s">&quot;postscript&quot;</span> <span class="p">:</span> <span class="s">&quot;%&quot;</span><span class="p">,</span>
341 <span class="s">&quot;povray&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
342 <span class="s">&quot;powerdynamo&quot;</span> <span class="p">:</span> <span class="s">&quot;// &lt;!-- --&gt;&quot;</span><span class="p">,</span>
343 <span class="s">&quot;prolog&quot;</span> <span class="p">:</span> <span class="s">&quot;% /* */&quot;</span><span class="p">,</span>
344 <span class="s">&quot;psp&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
345 <span class="s">&quot;ptl&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
346 <span class="s">&quot;pvwave&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
347 <span class="s">&quot;pyrex&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
348 <span class="s">&quot;python&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
349 <span class="s">&quot;r&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
350 <span class="s">&quot;rapidq&quot;</span> <span class="p">:</span> <span class="s">&quot;&#39;&quot;</span><span class="p">,</span> <span class="c"># fil 2004-march-11</span>
351 <span class="s">&quot;rebol&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span> <span class="c"># jason 2003-07-03</span>
352 <span class="s">&quot;redcode&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
353 <span class="s">&quot;rest&quot;</span> <span class="p">:</span> <span class="s">&quot;.._&quot;</span><span class="p">,</span>
354 <span class="s">&quot;rhtml&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;</span><span class="si">%# %</span><span class="s">&gt;&quot;</span><span class="p">,</span>
355 <span class="s">&quot;rib&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
356 <span class="s">&quot;rpmspec&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
357 <span class="s">&quot;rst&quot;</span> <span class="p">:</span> <span class="s">&quot;.._&quot;</span><span class="p">,</span>
358 <span class="s">&quot;ruby&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span> <span class="c"># thyrsus 2008-11-05</span>
359 <span class="s">&quot;rview&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
360 <span class="s">&quot;sas&quot;</span> <span class="p">:</span> <span class="s">&quot;* /* */&quot;</span><span class="p">,</span>
361 <span class="s">&quot;scala&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
362 <span class="s">&quot;scheme&quot;</span> <span class="p">:</span> <span class="s">&quot;; #| |#&quot;</span><span class="p">,</span>
363 <span class="s">&quot;sdl_pr&quot;</span> <span class="p">:</span> <span class="s">&quot;/* */&quot;</span><span class="p">,</span>
364 <span class="s">&quot;sgml&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
365 <span class="s">&quot;shell&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span> <span class="c"># shell scripts</span>
366 <span class="s">&quot;shellscript&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
367 <span class="s">&quot;shtml&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
368 <span class="s">&quot;smalltalk&quot;</span> <span class="p">:</span> <span class="s">&#39;&quot; &quot;&#39;</span><span class="p">,</span> <span class="c"># Comments are enclosed in double quotes(!!)</span>
369 <span class="s">&quot;smi_mib&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
370 <span class="s">&quot;splus&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
371 <span class="s">&quot;sqr&quot;</span> <span class="p">:</span> <span class="s">&quot;!&quot;</span><span class="p">,</span>
372 <span class="s">&quot;squidconf&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
373 <span class="s">&quot;ssharp&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
374 <span class="s">&quot;swig&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
375 <span class="s">&quot;tcl&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
376 <span class="s">&quot;tcltk&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
377 <span class="s">&quot;tex&quot;</span> <span class="p">:</span> <span class="s">&quot;%&quot;</span><span class="p">,</span> <span class="c"># Bug fix: 2008-1-30: Fixed Mark Edginton&#39;s bug.</span>
378 <span class="s">&quot;text&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span> <span class="c"># We must pick something.</span>
379 <span class="s">&quot;texinfo&quot;</span> <span class="p">:</span> <span class="s">&quot;@c&quot;</span><span class="p">,</span>
380 <span class="s">&quot;tpl&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
381 <span class="s">&quot;tsql&quot;</span> <span class="p">:</span> <span class="s">&quot;-- /* */&quot;</span><span class="p">,</span>
382 <span class="s">&quot;typescript&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span> <span class="c"># For typescript import test.</span>
383 <span class="s">&quot;unknown&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span> <span class="c"># Set when @comment is seen.</span>
384 <span class="s">&quot;unknown_language&quot;</span> <span class="p">:</span> <span class="s">&#39;#--unknown-language--&#39;</span><span class="p">,</span> <span class="c"># For unknown extensions in @shadow files.</span>
385 <span class="s">&quot;uscript&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
386 <span class="s">&quot;vbscript&quot;</span> <span class="p">:</span> <span class="s">&quot;&#39;&quot;</span><span class="p">,</span>
387 <span class="s">&quot;velocity&quot;</span> <span class="p">:</span> <span class="s">&quot;## #* *#&quot;</span><span class="p">,</span>
388 <span class="s">&quot;verilog&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
389 <span class="s">&quot;vhdl&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
390 <span class="s">&quot;vim&quot;</span> <span class="p">:</span> <span class="s">&quot;</span><span class="se">\&quot;</span><span class="s">&quot;</span><span class="p">,</span>
391 <span class="s">&quot;vimoutline&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span> <span class="c">#TL 8/25/08 Vim&#39;s outline plugin</span>
392 <span class="s">&quot;xml&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
393 <span class="s">&quot;xsl&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
394 <span class="s">&quot;xslt&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
395 <span class="s">&quot;zpt&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
396
397 <span class="c"># These aren&#39;t real languages, or have no delims...</span>
398 <span class="c"># &quot;cvs_commit&quot; : &quot;&quot;,</span>
399 <span class="c"># &quot;dsssl&quot; : &quot;; &lt;!-- --&gt;&quot;,</span>
400 <span class="c"># &quot;embperl&quot; : &quot;&lt;!-- --&gt;&quot;, # Internal colorizing state.</span>
401 <span class="c"># &quot;freemarker&quot; : &quot;&quot;,</span>
402 <span class="c"># &quot;hex&quot; : &quot;&quot;,</span>
403 <span class="c"># &quot;jcl&quot; : &quot;&quot;,</span>
404 <span class="c"># &quot;patch&quot; : &quot;&quot;,</span>
405 <span class="c"># &quot;phpsection&quot; : &quot;&lt;!-- --&gt;&quot;, # Internal colorizing state.</span>
406 <span class="c"># &quot;props&quot; : &quot;#&quot;, # Unknown language.</span>
407 <span class="c"># &quot;pseudoplain&quot; : &quot;&quot;,</span>
408 <span class="c"># &quot;relax_ng_compact&quot; : &quot;#&quot;, # An xml schema.</span>
409 <span class="c"># &quot;rtf&quot; : &quot;&quot;,</span>
410 <span class="c"># &quot;svn_commit&quot; : &quot;&quot;,</span>
411 <span class="p">}</span>
412 <span class="c">#@+node:ekr.20120522160137.9910: *4* app.define_language_extension_dict</span></div>
413<div class="viewcode-block" id="LeoApp.define_language_extension_dict"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.define_language_extension_dict">[docs]</a> <span class="k">def</span> <span class="nf">define_language_extension_dict</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
414
415 <span class="c"># Used only by c.getOpenWithExt.</span>
416
417 <span class="c"># Keys are languages, values are extensions.</span>
418 <span class="bp">self</span><span class="o">.</span><span class="n">language_extension_dict</span> <span class="o">=</span> <span class="p">{</span>
419 <span class="s">&quot;actionscript&quot;</span> <span class="p">:</span> <span class="s">&quot;as&quot;</span><span class="p">,</span> <span class="c">#jason 2003-07-03</span>
420 <span class="s">&quot;ada&quot;</span> <span class="p">:</span> <span class="s">&quot;ada&quot;</span><span class="p">,</span>
421 <span class="s">&quot;ada95&quot;</span> <span class="p">:</span> <span class="s">&quot;ada&quot;</span><span class="p">,</span>
422 <span class="s">&quot;ahk&quot;</span> <span class="p">:</span> <span class="s">&quot;ahk&quot;</span><span class="p">,</span>
423 <span class="s">&quot;antlr&quot;</span> <span class="p">:</span> <span class="s">&quot;g&quot;</span><span class="p">,</span>
424 <span class="s">&quot;apacheconf&quot;</span> <span class="p">:</span> <span class="s">&quot;conf&quot;</span><span class="p">,</span>
425 <span class="s">&quot;apdl&quot;</span> <span class="p">:</span> <span class="s">&quot;apdl&quot;</span><span class="p">,</span>
426 <span class="s">&quot;applescript&quot;</span> <span class="p">:</span> <span class="s">&quot;scpt&quot;</span><span class="p">,</span>
427 <span class="s">&quot;asp&quot;</span> <span class="p">:</span> <span class="s">&quot;asp&quot;</span><span class="p">,</span>
428 <span class="s">&quot;aspect_j&quot;</span> <span class="p">:</span> <span class="s">&quot;aj&quot;</span><span class="p">,</span>
429 <span class="s">&quot;autohotkey&quot;</span> <span class="p">:</span> <span class="s">&quot;ahk&quot;</span><span class="p">,</span> <span class="c">#TL - AutoHotkey language</span>
430 <span class="s">&quot;awk&quot;</span> <span class="p">:</span> <span class="s">&quot;awk&quot;</span><span class="p">,</span>
431 <span class="s">&quot;b&quot;</span> <span class="p">:</span> <span class="s">&quot;b&quot;</span><span class="p">,</span>
432 <span class="s">&quot;batch&quot;</span> <span class="p">:</span> <span class="s">&quot;bat&quot;</span><span class="p">,</span> <span class="c"># Leo 4.5.1.</span>
433 <span class="s">&quot;bbj&quot;</span> <span class="p">:</span> <span class="s">&quot;bbj&quot;</span><span class="p">,</span>
434 <span class="s">&quot;bcel&quot;</span> <span class="p">:</span> <span class="s">&quot;bcel&quot;</span><span class="p">,</span>
435 <span class="s">&quot;bibtex&quot;</span> <span class="p">:</span> <span class="s">&quot;bib&quot;</span><span class="p">,</span>
436 <span class="s">&quot;c&quot;</span> <span class="p">:</span> <span class="s">&quot;c&quot;</span><span class="p">,</span>
437 <span class="s">&quot;chill&quot;</span> <span class="p">:</span> <span class="s">&quot;ch&quot;</span><span class="p">,</span> <span class="c"># Only one extension is valid: .c186, .c286</span>
438 <span class="s">&quot;cobol&quot;</span> <span class="p">:</span> <span class="s">&quot;cbl&quot;</span><span class="p">,</span> <span class="c"># Only one extension is valid: .cob</span>
439 <span class="s">&quot;coldfusion&quot;</span> <span class="p">:</span> <span class="s">&quot;cfm&quot;</span><span class="p">,</span>
440 <span class="s">&quot;config&quot;</span> <span class="p">:</span> <span class="s">&quot;cfg&quot;</span><span class="p">,</span>
441 <span class="s">&quot;cplusplus&quot;</span> <span class="p">:</span> <span class="s">&quot;c++&quot;</span><span class="p">,</span>
442 <span class="s">&quot;cpp&quot;</span> <span class="p">:</span> <span class="s">&quot;cpp&quot;</span><span class="p">,</span>
443 <span class="s">&quot;css&quot;</span> <span class="p">:</span> <span class="s">&quot;css&quot;</span><span class="p">,</span> <span class="c"># 4/1/04</span>
444 <span class="s">&quot;cweb&quot;</span> <span class="p">:</span> <span class="s">&quot;w&quot;</span><span class="p">,</span>
445 <span class="s">&quot;cython&quot;</span> <span class="p">:</span> <span class="s">&quot;pyx&quot;</span><span class="p">,</span> <span class="c"># Only one extension is valid at present: .pyi, .pyd.</span>
446 <span class="s">&quot;d&quot;</span> <span class="p">:</span> <span class="s">&quot;d&quot;</span><span class="p">,</span>
447 <span class="s">&quot;eiffel&quot;</span> <span class="p">:</span> <span class="s">&quot;e&quot;</span><span class="p">,</span>
448 <span class="s">&quot;elisp&quot;</span> <span class="p">:</span> <span class="s">&quot;el&quot;</span><span class="p">,</span>
449 <span class="s">&quot;erlang&quot;</span> <span class="p">:</span> <span class="s">&quot;erl&quot;</span><span class="p">,</span>
450 <span class="s">&quot;factor&quot;</span> <span class="p">:</span> <span class="s">&quot;factor&quot;</span><span class="p">,</span>
451 <span class="s">&quot;forth&quot;</span> <span class="p">:</span> <span class="s">&quot;forth&quot;</span><span class="p">,</span>
452 <span class="s">&quot;fortran&quot;</span> <span class="p">:</span> <span class="s">&quot;f&quot;</span><span class="p">,</span>
453 <span class="s">&quot;fortran90&quot;</span> <span class="p">:</span> <span class="s">&quot;f90&quot;</span><span class="p">,</span>
454 <span class="s">&quot;foxpro&quot;</span> <span class="p">:</span> <span class="s">&quot;prg&quot;</span><span class="p">,</span>
455 <span class="s">&quot;gettext&quot;</span> <span class="p">:</span> <span class="s">&quot;po&quot;</span><span class="p">,</span>
456 <span class="s">&quot;groovy&quot;</span> <span class="p">:</span> <span class="s">&quot;groovy&quot;</span><span class="p">,</span>
457 <span class="s">&quot;haskell&quot;</span> <span class="p">:</span> <span class="s">&quot;hs&quot;</span><span class="p">,</span>
458 <span class="s">&quot;haxe&quot;</span> <span class="p">:</span> <span class="s">&quot;hx&quot;</span><span class="p">,</span>
459 <span class="s">&quot;html&quot;</span> <span class="p">:</span> <span class="s">&quot;html&quot;</span><span class="p">,</span>
460 <span class="s">&quot;i4gl&quot;</span> <span class="p">:</span> <span class="s">&quot;i4gl&quot;</span><span class="p">,</span>
461 <span class="s">&quot;icon&quot;</span> <span class="p">:</span> <span class="s">&quot;icn&quot;</span><span class="p">,</span>
462 <span class="s">&quot;idl&quot;</span> <span class="p">:</span> <span class="s">&quot;idl&quot;</span><span class="p">,</span>
463 <span class="s">&quot;inform&quot;</span> <span class="p">:</span> <span class="s">&quot;inf&quot;</span><span class="p">,</span>
464 <span class="s">&quot;ini&quot;</span> <span class="p">:</span> <span class="s">&quot;ini&quot;</span><span class="p">,</span>
465 <span class="s">&quot;inno_setup&quot;</span> <span class="p">:</span> <span class="s">&quot;iss&quot;</span><span class="p">,</span>
466 <span class="s">&quot;io&quot;</span> <span class="p">:</span> <span class="s">&quot;io&quot;</span><span class="p">,</span>
467 <span class="s">&quot;java&quot;</span> <span class="p">:</span> <span class="s">&quot;java&quot;</span><span class="p">,</span>
468 <span class="s">&quot;javascript&quot;</span> <span class="p">:</span> <span class="s">&quot;js&quot;</span><span class="p">,</span> <span class="c"># EKR: 2011/11/12: For javascript import test.</span>
469 <span class="s">&quot;javaserverpage&quot;</span><span class="p">:</span> <span class="s">&quot;jsp&quot;</span><span class="p">,</span> <span class="c"># EKR: 2011/11/25</span>
470 <span class="s">&quot;jhtml&quot;</span> <span class="p">:</span> <span class="s">&quot;jhtml&quot;</span><span class="p">,</span>
471 <span class="s">&quot;jmk&quot;</span> <span class="p">:</span> <span class="s">&quot;jmk&quot;</span><span class="p">,</span>
472 <span class="s">&quot;jsp&quot;</span> <span class="p">:</span> <span class="s">&quot;jsp&quot;</span><span class="p">,</span>
473 <span class="s">&quot;kshell&quot;</span> <span class="p">:</span> <span class="s">&quot;ksh&quot;</span><span class="p">,</span> <span class="c"># Leo 4.5.1.</span>
474 <span class="s">&quot;latex&quot;</span> <span class="p">:</span> <span class="s">&quot;tex&quot;</span><span class="p">,</span> <span class="c"># 1/8/04</span>
475 <span class="s">&quot;lilypond&quot;</span> <span class="p">:</span> <span class="s">&quot;ly&quot;</span><span class="p">,</span>
476 <span class="s">&quot;lua&quot;</span> <span class="p">:</span> <span class="s">&quot;lua&quot;</span><span class="p">,</span> <span class="c"># ddm 13/02/06</span>
477 <span class="s">&quot;mail&quot;</span> <span class="p">:</span> <span class="s">&quot;eml&quot;</span><span class="p">,</span>
478 <span class="s">&quot;makefile&quot;</span> <span class="p">:</span> <span class="s">&quot;mak&quot;</span><span class="p">,</span>
479 <span class="s">&quot;maple&quot;</span> <span class="p">:</span> <span class="s">&quot;mpl&quot;</span><span class="p">,</span>
480 <span class="s">&quot;matlab&quot;</span> <span class="p">:</span> <span class="s">&quot;m&quot;</span><span class="p">,</span>
481 <span class="s">&quot;md&quot;</span> <span class="p">:</span> <span class="s">&quot;md&quot;</span><span class="p">,</span> <span class="c"># PeckJ: 2013/02/07</span>
482 <span class="s">&quot;ml&quot;</span> <span class="p">:</span> <span class="s">&quot;ml&quot;</span><span class="p">,</span>
483 <span class="s">&quot;modula3&quot;</span> <span class="p">:</span> <span class="s">&quot;mod&quot;</span><span class="p">,</span>
484 <span class="s">&quot;moin&quot;</span> <span class="p">:</span> <span class="s">&quot;wiki&quot;</span><span class="p">,</span>
485 <span class="s">&quot;mqsc&quot;</span> <span class="p">:</span> <span class="s">&quot;mqsc&quot;</span><span class="p">,</span>
486 <span class="s">&quot;noweb&quot;</span> <span class="p">:</span> <span class="s">&quot;nw&quot;</span><span class="p">,</span>
487 <span class="s">&quot;nqc&quot;</span> <span class="p">:</span> <span class="s">&quot;nqc&quot;</span><span class="p">,</span>
488 <span class="s">&quot;nsi&quot;</span> <span class="p">:</span> <span class="s">&quot;nsi&quot;</span><span class="p">,</span> <span class="c"># EKR: 2010/10/27</span>
489 <span class="s">&quot;nsis2&quot;</span> <span class="p">:</span> <span class="s">&quot;nsi&quot;</span><span class="p">,</span>
490 <span class="s">&quot;objective_c&quot;</span> <span class="p">:</span> <span class="s">&quot;mm&quot;</span><span class="p">,</span> <span class="c"># Only one extension is valid: .m</span>
491 <span class="s">&quot;objectrexx&quot;</span> <span class="p">:</span> <span class="s">&quot;rex&quot;</span><span class="p">,</span>
492 <span class="s">&quot;occam&quot;</span> <span class="p">:</span> <span class="s">&quot;occ&quot;</span><span class="p">,</span>
493 <span class="s">&quot;omnimark&quot;</span> <span class="p">:</span> <span class="s">&quot;xom&quot;</span><span class="p">,</span>
494 <span class="s">&quot;pascal&quot;</span> <span class="p">:</span> <span class="s">&quot;p&quot;</span><span class="p">,</span>
495 <span class="s">&quot;perl&quot;</span> <span class="p">:</span> <span class="s">&quot;pl&quot;</span><span class="p">,</span>
496 <span class="s">&quot;perlpod&quot;</span> <span class="p">:</span> <span class="s">&quot;pod&quot;</span><span class="p">,</span>
497 <span class="s">&quot;php&quot;</span> <span class="p">:</span> <span class="s">&quot;php&quot;</span><span class="p">,</span>
498 <span class="s">&quot;pike&quot;</span> <span class="p">:</span> <span class="s">&quot;pike&quot;</span><span class="p">,</span>
499 <span class="s">&quot;pl1&quot;</span> <span class="p">:</span> <span class="s">&quot;pl1&quot;</span><span class="p">,</span>
500 <span class="s">&quot;plain&quot;</span> <span class="p">:</span> <span class="s">&quot;txt&quot;</span><span class="p">,</span>
501 <span class="s">&quot;plsql&quot;</span> <span class="p">:</span> <span class="s">&quot;sql&quot;</span><span class="p">,</span> <span class="c"># qt02537 2005-05-27</span>
502 <span class="c"># &quot;pop11&quot; : &quot;p&quot;, # Conflicts with pascall.</span>
503 <span class="s">&quot;postscript&quot;</span> <span class="p">:</span> <span class="s">&quot;ps&quot;</span><span class="p">,</span>
504 <span class="s">&quot;povray&quot;</span> <span class="p">:</span> <span class="s">&quot;pov&quot;</span><span class="p">,</span>
505 <span class="s">&quot;prolog&quot;</span> <span class="p">:</span> <span class="s">&quot;pro&quot;</span><span class="p">,</span>
506 <span class="s">&quot;psp&quot;</span> <span class="p">:</span> <span class="s">&quot;psp&quot;</span><span class="p">,</span>
507 <span class="s">&quot;ptl&quot;</span> <span class="p">:</span> <span class="s">&quot;ptl&quot;</span><span class="p">,</span>
508 <span class="s">&quot;pyrex&quot;</span> <span class="p">:</span> <span class="s">&quot;pyx&quot;</span><span class="p">,</span>
509 <span class="s">&quot;python&quot;</span> <span class="p">:</span> <span class="s">&quot;py&quot;</span><span class="p">,</span>
510 <span class="s">&quot;r&quot;</span> <span class="p">:</span> <span class="s">&quot;r&quot;</span><span class="p">,</span>
511 <span class="s">&quot;rapidq&quot;</span> <span class="p">:</span> <span class="s">&quot;bas&quot;</span><span class="p">,</span> <span class="c"># fil 2004-march-11</span>
512 <span class="s">&quot;rebol&quot;</span> <span class="p">:</span> <span class="s">&quot;r&quot;</span><span class="p">,</span> <span class="c"># jason 2003-07-03</span>
513 <span class="s">&quot;rhtml&quot;</span> <span class="p">:</span> <span class="s">&quot;rhtml&quot;</span><span class="p">,</span>
514 <span class="s">&quot;rib&quot;</span> <span class="p">:</span> <span class="s">&quot;rib&quot;</span><span class="p">,</span>
515 <span class="s">&quot;rst&quot;</span> <span class="p">:</span> <span class="s">&quot;rest&quot;</span><span class="p">,</span>
516 <span class="s">&quot;ruby&quot;</span> <span class="p">:</span> <span class="s">&quot;rb&quot;</span><span class="p">,</span> <span class="c"># thyrsus 2008-11-05</span>
517 <span class="s">&quot;sas&quot;</span> <span class="p">:</span> <span class="s">&quot;sas&quot;</span><span class="p">,</span>
518 <span class="s">&quot;scala&quot;</span> <span class="p">:</span> <span class="s">&quot;scala&quot;</span><span class="p">,</span>
519 <span class="s">&quot;scheme&quot;</span> <span class="p">:</span> <span class="s">&quot;scm&quot;</span><span class="p">,</span>
520 <span class="s">&quot;sgml&quot;</span> <span class="p">:</span> <span class="s">&quot;sgml&quot;</span><span class="p">,</span>
521 <span class="s">&quot;shell&quot;</span> <span class="p">:</span> <span class="s">&quot;sh&quot;</span><span class="p">,</span> <span class="c"># DS 4/1/04</span>
522 <span class="s">&quot;shellscript&quot;</span> <span class="p">:</span> <span class="s">&quot;sh&quot;</span><span class="p">,</span>
523 <span class="s">&quot;shtml&quot;</span> <span class="p">:</span> <span class="s">&quot;ssi&quot;</span><span class="p">,</span> <span class="c"># Only one extension is valid: .shtml</span>
524 <span class="s">&quot;smalltalk&quot;</span> <span class="p">:</span> <span class="s">&quot;sm&quot;</span><span class="p">,</span>
525 <span class="s">&quot;splus&quot;</span> <span class="p">:</span> <span class="s">&quot;splus&quot;</span><span class="p">,</span>
526 <span class="s">&quot;sqr&quot;</span> <span class="p">:</span> <span class="s">&quot;sqr&quot;</span><span class="p">,</span>
527 <span class="s">&quot;ssharp&quot;</span> <span class="p">:</span> <span class="s">&quot;ss&quot;</span><span class="p">,</span>
528 <span class="s">&quot;swig&quot;</span> <span class="p">:</span> <span class="s">&quot;i&quot;</span><span class="p">,</span>
529 <span class="s">&quot;tcl&quot;</span> <span class="p">:</span> <span class="s">&quot;tcl&quot;</span><span class="p">,</span>
530 <span class="s">&quot;tcltk&quot;</span> <span class="p">:</span> <span class="s">&quot;tcl&quot;</span><span class="p">,</span>
531 <span class="s">&quot;tex&quot;</span> <span class="p">:</span> <span class="s">&quot;tex&quot;</span><span class="p">,</span>
532 <span class="s">&quot;texinfo&quot;</span> <span class="p">:</span> <span class="s">&quot;info&quot;</span><span class="p">,</span>
533 <span class="s">&quot;text&quot;</span> <span class="p">:</span> <span class="s">&quot;txt&quot;</span><span class="p">,</span>
534 <span class="s">&quot;tpl&quot;</span> <span class="p">:</span> <span class="s">&quot;tpl&quot;</span><span class="p">,</span>
535 <span class="s">&quot;tsql&quot;</span> <span class="p">:</span> <span class="s">&quot;sql&quot;</span><span class="p">,</span> <span class="c"># A guess.</span>
536 <span class="s">&quot;typescript&quot;</span> <span class="p">:</span> <span class="s">&quot;ts&quot;</span><span class="p">,</span>
537 <span class="s">&quot;unknown&quot;</span> <span class="p">:</span> <span class="s">&quot;txt&quot;</span><span class="p">,</span> <span class="c"># Set when @comment is seen.</span>
538 <span class="s">&quot;uscript&quot;</span> <span class="p">:</span> <span class="s">&quot;uc&quot;</span><span class="p">,</span>
539 <span class="s">&quot;vbscript&quot;</span> <span class="p">:</span> <span class="s">&quot;vbs&quot;</span><span class="p">,</span>
540 <span class="s">&quot;velocity&quot;</span> <span class="p">:</span> <span class="s">&quot;vtl&quot;</span><span class="p">,</span>
541 <span class="s">&quot;verilog&quot;</span> <span class="p">:</span> <span class="s">&quot;v&quot;</span><span class="p">,</span>
542 <span class="s">&quot;vhdl&quot;</span> <span class="p">:</span> <span class="s">&quot;vhd&quot;</span><span class="p">,</span> <span class="c"># Only one extension is valid: .vhdl</span>
543 <span class="s">&quot;vim&quot;</span> <span class="p">:</span> <span class="s">&quot;vim&quot;</span><span class="p">,</span>
544 <span class="s">&quot;vimoutline&quot;</span> <span class="p">:</span> <span class="s">&quot;otl&quot;</span><span class="p">,</span> <span class="c">#TL 8/25/08 Vim&#39;s outline plugin</span>
545 <span class="s">&quot;xml&quot;</span> <span class="p">:</span> <span class="s">&quot;xml&quot;</span><span class="p">,</span>
546 <span class="s">&quot;xsl&quot;</span> <span class="p">:</span> <span class="s">&quot;xsl&quot;</span><span class="p">,</span>
547 <span class="s">&quot;xslt&quot;</span> <span class="p">:</span> <span class="s">&quot;xsl&quot;</span><span class="p">,</span>
548 <span class="s">&quot;zpt&quot;</span> <span class="p">:</span> <span class="s">&quot;zpt&quot;</span><span class="p">,</span>
549 <span class="p">}</span>
550
551 <span class="c"># These aren&#39;t real languages, or have no delims...</span>
552 <span class="c"># cvs_commit, dsssl, embperl, freemarker, hex, jcl,</span>
553 <span class="c"># patch, phpsection, progress, props, pseudoplain,</span>
554 <span class="c"># relax_ng_compact, rtf, svn_commit.</span>
555
556 <span class="c"># These have extensions which conflict with other languages.</span>
557 <span class="c"># assembly_macro32: .asm or .a</span>
558 <span class="c"># assembly_mcs51: .asm or .a</span>
559 <span class="c"># assembly_parrot: .asm or .a</span>
560 <span class="c"># assembly_r2000: .asm or .a</span>
561 <span class="c"># assembly_x86: .asm or .a</span>
562 <span class="c"># squidconf: .conf</span>
563 <span class="c"># rpmspec: .rpm</span>
564 <span class="c">#@+node:ekr.20120522160137.9911: *4* app.define_extension_dict</span></div>
565<div class="viewcode-block" id="LeoApp.define_extension_dict"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.define_extension_dict">[docs]</a> <span class="k">def</span> <span class="nf">define_extension_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
566
567 <span class="c"># Keys are extensions, values are languages</span>
568 <span class="bp">self</span><span class="o">.</span><span class="n">extension_dict</span> <span class="o">=</span> <span class="p">{</span>
569 <span class="c"># &quot;ada&quot;: &quot;ada&quot;,</span>
570 <span class="s">&quot;ada&quot;</span><span class="p">:</span> <span class="s">&quot;ada95&quot;</span><span class="p">,</span> <span class="c"># modes/ada95.py exists.</span>
571 <span class="s">&quot;ahk&quot;</span><span class="p">:</span> <span class="s">&quot;autohotkey&quot;</span><span class="p">,</span>
572 <span class="s">&quot;aj&quot;</span><span class="p">:</span> <span class="s">&quot;aspect_j&quot;</span><span class="p">,</span>
573 <span class="s">&quot;apdl&quot;</span><span class="p">:</span> <span class="s">&quot;apdl&quot;</span><span class="p">,</span>
574 <span class="s">&quot;as&quot;</span><span class="p">:</span> <span class="s">&quot;actionscript&quot;</span><span class="p">,</span> <span class="c">#jason 2003-07-03</span>
575 <span class="s">&quot;asp&quot;</span><span class="p">:</span> <span class="s">&quot;asp&quot;</span><span class="p">,</span>
576 <span class="s">&quot;awk&quot;</span><span class="p">:</span> <span class="s">&quot;awk&quot;</span><span class="p">,</span>
577 <span class="s">&quot;b&quot;</span><span class="p">:</span> <span class="s">&quot;b&quot;</span><span class="p">,</span>
578 <span class="s">&quot;bas&quot;</span><span class="p">:</span> <span class="s">&quot;rapidq&quot;</span><span class="p">,</span> <span class="c"># fil 2004-march-11</span>
579 <span class="s">&quot;bat&quot;</span><span class="p">:</span> <span class="s">&quot;batch&quot;</span><span class="p">,</span>
580 <span class="s">&quot;bbj&quot;</span><span class="p">:</span> <span class="s">&quot;bbj&quot;</span><span class="p">,</span>
581 <span class="s">&quot;bcel&quot;</span><span class="p">:</span> <span class="s">&quot;bcel&quot;</span><span class="p">,</span>
582 <span class="s">&quot;bib&quot;</span><span class="p">:</span> <span class="s">&quot;bibtex&quot;</span><span class="p">,</span>
583 <span class="s">&quot;c&quot;</span><span class="p">:</span> <span class="s">&quot;c&quot;</span><span class="p">,</span>
584 <span class="s">&quot;c++&quot;</span><span class="p">:</span> <span class="s">&quot;cplusplus&quot;</span><span class="p">,</span>
585 <span class="s">&quot;cbl&quot;</span><span class="p">:</span> <span class="s">&quot;cobol&quot;</span><span class="p">,</span> <span class="c"># Only one extension is valid: .cob</span>
586 <span class="s">&quot;cfg&quot;</span><span class="p">:</span> <span class="s">&quot;config&quot;</span><span class="p">,</span>
587 <span class="s">&quot;cfm&quot;</span><span class="p">:</span> <span class="s">&quot;coldfusion&quot;</span><span class="p">,</span>
588 <span class="s">&quot;ch&quot;</span><span class="p">:</span> <span class="s">&quot;chill&quot;</span><span class="p">,</span> <span class="c"># Other extensions, .c186,.c286</span>
589 <span class="s">&quot;conf&quot;</span><span class="p">:</span> <span class="s">&quot;apacheconf&quot;</span><span class="p">,</span>
590 <span class="s">&quot;cpp&quot;</span><span class="p">:</span> <span class="s">&quot;cpp&quot;</span><span class="p">,</span>
591 <span class="s">&quot;css&quot;</span><span class="p">:</span> <span class="s">&quot;css&quot;</span><span class="p">,</span>
592 <span class="s">&quot;d&quot;</span><span class="p">:</span> <span class="s">&quot;d&quot;</span><span class="p">,</span>
593 <span class="s">&quot;e&quot;</span><span class="p">:</span> <span class="s">&quot;eiffel&quot;</span><span class="p">,</span>
594 <span class="s">&quot;el&quot;</span><span class="p">:</span> <span class="s">&quot;elisp&quot;</span><span class="p">,</span>
595 <span class="s">&quot;eml&quot;</span><span class="p">:</span> <span class="s">&quot;mail&quot;</span><span class="p">,</span>
596 <span class="s">&quot;erl&quot;</span><span class="p">:</span> <span class="s">&quot;erlang&quot;</span><span class="p">,</span>
597 <span class="s">&quot;f&quot;</span><span class="p">:</span> <span class="s">&quot;fortran&quot;</span><span class="p">,</span>
598 <span class="s">&quot;f90&quot;</span><span class="p">:</span> <span class="s">&quot;fortran90&quot;</span><span class="p">,</span>
599 <span class="s">&quot;factor&quot;</span><span class="p">:</span> <span class="s">&quot;factor&quot;</span><span class="p">,</span>
600 <span class="s">&quot;forth&quot;</span><span class="p">:</span> <span class="s">&quot;forth&quot;</span><span class="p">,</span>
601 <span class="s">&quot;g&quot;</span><span class="p">:</span> <span class="s">&quot;antlr&quot;</span><span class="p">,</span>
602 <span class="s">&quot;groovy&quot;</span><span class="p">:</span> <span class="s">&quot;groovy&quot;</span><span class="p">,</span>
603 <span class="s">&quot;h&quot;</span><span class="p">:</span> <span class="s">&quot;c&quot;</span><span class="p">,</span> <span class="c"># 2012/05/23.</span>
604 <span class="s">&quot;hs&quot;</span><span class="p">:</span> <span class="s">&quot;haskell&quot;</span><span class="p">,</span>
605 <span class="s">&quot;html&quot;</span><span class="p">:</span> <span class="s">&quot;html&quot;</span><span class="p">,</span>
606 <span class="s">&quot;hx&quot;</span><span class="p">:</span> <span class="s">&quot;haxe&quot;</span><span class="p">,</span>
607 <span class="s">&quot;i&quot;</span><span class="p">:</span> <span class="s">&quot;swig&quot;</span><span class="p">,</span>
608 <span class="s">&quot;i4gl&quot;</span><span class="p">:</span> <span class="s">&quot;i4gl&quot;</span><span class="p">,</span>
609 <span class="s">&quot;icn&quot;</span><span class="p">:</span> <span class="s">&quot;icon&quot;</span><span class="p">,</span>
610 <span class="s">&quot;idl&quot;</span><span class="p">:</span> <span class="s">&quot;idl&quot;</span><span class="p">,</span>
611 <span class="s">&quot;inf&quot;</span><span class="p">:</span> <span class="s">&quot;inform&quot;</span><span class="p">,</span>
612 <span class="s">&quot;info&quot;</span><span class="p">:</span> <span class="s">&quot;texinfo&quot;</span><span class="p">,</span>
613 <span class="s">&quot;ini&quot;</span><span class="p">:</span> <span class="s">&quot;ini&quot;</span><span class="p">,</span>
614 <span class="s">&quot;io&quot;</span><span class="p">:</span> <span class="s">&quot;io&quot;</span><span class="p">,</span>
615 <span class="s">&quot;iss&quot;</span><span class="p">:</span> <span class="s">&quot;inno_setup&quot;</span><span class="p">,</span>
616 <span class="s">&quot;java&quot;</span><span class="p">:</span> <span class="s">&quot;java&quot;</span><span class="p">,</span>
617 <span class="s">&quot;jhtml&quot;</span><span class="p">:</span> <span class="s">&quot;jhtml&quot;</span><span class="p">,</span>
618 <span class="s">&quot;jmk&quot;</span><span class="p">:</span> <span class="s">&quot;jmk&quot;</span><span class="p">,</span>
619 <span class="s">&quot;js&quot;</span><span class="p">:</span> <span class="s">&quot;javascript&quot;</span><span class="p">,</span> <span class="c"># For javascript import test.</span>
620 <span class="s">&quot;jsp&quot;</span><span class="p">:</span> <span class="s">&quot;javaserverpage&quot;</span><span class="p">,</span>
621 <span class="c"># &quot;jsp&quot;: &quot;jsp&quot;,</span>
622 <span class="s">&quot;ksh&quot;</span><span class="p">:</span> <span class="s">&quot;kshell&quot;</span><span class="p">,</span> <span class="c"># Leo 4.5.1.</span>
623 <span class="s">&quot;lua&quot;</span><span class="p">:</span> <span class="s">&quot;lua&quot;</span><span class="p">,</span> <span class="c"># ddm 13/02/06</span>
624 <span class="s">&quot;ly&quot;</span><span class="p">:</span> <span class="s">&quot;lilypond&quot;</span><span class="p">,</span>
625 <span class="s">&quot;m&quot;</span><span class="p">:</span> <span class="s">&quot;matlab&quot;</span><span class="p">,</span> <span class="c"># EKR: 2011/10/21</span>
626 <span class="s">&quot;mak&quot;</span><span class="p">:</span> <span class="s">&quot;makefile&quot;</span><span class="p">,</span>
627 <span class="s">&quot;md&quot;</span><span class="p">:</span> <span class="s">&quot;md&quot;</span><span class="p">,</span> <span class="c"># PeckJ 2013/02/07</span>
628 <span class="s">&quot;ml&quot;</span><span class="p">:</span> <span class="s">&quot;ml&quot;</span><span class="p">,</span>
629 <span class="s">&quot;mm&quot;</span><span class="p">:</span> <span class="s">&quot;objective_c&quot;</span><span class="p">,</span> <span class="c"># Only one extension is valid: .m</span>
630 <span class="s">&quot;mod&quot;</span><span class="p">:</span> <span class="s">&quot;modula3&quot;</span><span class="p">,</span>
631 <span class="s">&quot;mpl&quot;</span><span class="p">:</span> <span class="s">&quot;maple&quot;</span><span class="p">,</span>
632 <span class="s">&quot;mqsc&quot;</span><span class="p">:</span> <span class="s">&quot;mqsc&quot;</span><span class="p">,</span>
633 <span class="s">&quot;nqc&quot;</span><span class="p">:</span> <span class="s">&quot;nqc&quot;</span><span class="p">,</span>
634 <span class="s">&quot;nsi&quot;</span><span class="p">:</span> <span class="s">&quot;nsi&quot;</span><span class="p">,</span> <span class="c"># EKR: 2010/10/27</span>
635 <span class="c"># &quot;nsi&quot;: &quot;nsis2&quot;,</span>
636 <span class="s">&quot;nw&quot;</span><span class="p">:</span> <span class="s">&quot;noweb&quot;</span><span class="p">,</span>
637 <span class="s">&quot;occ&quot;</span><span class="p">:</span> <span class="s">&quot;occam&quot;</span><span class="p">,</span>
638 <span class="s">&quot;otl&quot;</span><span class="p">:</span> <span class="s">&quot;vimoutline&quot;</span><span class="p">,</span> <span class="c">#TL 8/25/08 Vim&#39;s outline plugin</span>
639 <span class="s">&quot;p&quot;</span><span class="p">:</span> <span class="s">&quot;pascal&quot;</span><span class="p">,</span>
640 <span class="c"># &quot;p&quot;: &quot;pop11&quot;, # Conflicts with pascal.</span>
641 <span class="s">&quot;php&quot;</span><span class="p">:</span> <span class="s">&quot;php&quot;</span><span class="p">,</span>
642 <span class="s">&quot;pike&quot;</span><span class="p">:</span> <span class="s">&quot;pike&quot;</span><span class="p">,</span>
643 <span class="s">&quot;pl&quot;</span><span class="p">:</span> <span class="s">&quot;perl&quot;</span><span class="p">,</span>
644 <span class="s">&quot;pl1&quot;</span><span class="p">:</span> <span class="s">&quot;pl1&quot;</span><span class="p">,</span>
645 <span class="s">&quot;po&quot;</span><span class="p">:</span> <span class="s">&quot;gettext&quot;</span><span class="p">,</span>
646 <span class="s">&quot;pod&quot;</span><span class="p">:</span> <span class="s">&quot;perlpod&quot;</span><span class="p">,</span>
647 <span class="s">&quot;pov&quot;</span><span class="p">:</span> <span class="s">&quot;povray&quot;</span><span class="p">,</span>
648 <span class="s">&quot;prg&quot;</span><span class="p">:</span> <span class="s">&quot;foxpro&quot;</span><span class="p">,</span>
649 <span class="s">&quot;pro&quot;</span><span class="p">:</span> <span class="s">&quot;prolog&quot;</span><span class="p">,</span>
650 <span class="s">&quot;ps&quot;</span><span class="p">:</span> <span class="s">&quot;postscript&quot;</span><span class="p">,</span>
651 <span class="s">&quot;psp&quot;</span><span class="p">:</span> <span class="s">&quot;psp&quot;</span><span class="p">,</span>
652 <span class="s">&quot;ptl&quot;</span><span class="p">:</span> <span class="s">&quot;ptl&quot;</span><span class="p">,</span>
653 <span class="s">&quot;py&quot;</span><span class="p">:</span> <span class="s">&quot;python&quot;</span><span class="p">,</span>
654 <span class="s">&quot;pyx&quot;</span><span class="p">:</span> <span class="s">&quot;cython&quot;</span><span class="p">,</span> <span class="c"># Other extensions, .pyd,.pyi</span>
655 <span class="c"># &quot;pyx&quot;: &quot;pyrex&quot;,</span>
656 <span class="c"># &quot;r&quot;: &quot;r&quot;, # modes/r.py does not exist.</span>
657 <span class="s">&quot;r&quot;</span><span class="p">:</span> <span class="s">&quot;rebol&quot;</span><span class="p">,</span> <span class="c"># jason 2003-07-03</span>
658 <span class="s">&quot;rb&quot;</span><span class="p">:</span> <span class="s">&quot;ruby&quot;</span><span class="p">,</span> <span class="c"># thyrsus 2008-11-05</span>
659 <span class="s">&quot;rest&quot;</span><span class="p">:</span> <span class="s">&quot;rst&quot;</span><span class="p">,</span>
660 <span class="s">&quot;rex&quot;</span><span class="p">:</span> <span class="s">&quot;objectrexx&quot;</span><span class="p">,</span>
661 <span class="s">&quot;rhtml&quot;</span><span class="p">:</span> <span class="s">&quot;rhtml&quot;</span><span class="p">,</span>
662 <span class="s">&quot;rib&quot;</span><span class="p">:</span> <span class="s">&quot;rib&quot;</span><span class="p">,</span>
663 <span class="s">&quot;sas&quot;</span><span class="p">:</span> <span class="s">&quot;sas&quot;</span><span class="p">,</span>
664 <span class="s">&quot;scala&quot;</span><span class="p">:</span> <span class="s">&quot;scala&quot;</span><span class="p">,</span>
665 <span class="s">&quot;scm&quot;</span><span class="p">:</span> <span class="s">&quot;scheme&quot;</span><span class="p">,</span>
666 <span class="s">&quot;scpt&quot;</span><span class="p">:</span> <span class="s">&quot;applescript&quot;</span><span class="p">,</span>
667 <span class="s">&quot;sgml&quot;</span><span class="p">:</span> <span class="s">&quot;sgml&quot;</span><span class="p">,</span>
668 <span class="s">&quot;sh&quot;</span><span class="p">:</span> <span class="s">&quot;shell&quot;</span><span class="p">,</span> <span class="c"># DS 4/1/04. modes/shell.py exists.</span>
669 <span class="c"># &quot;sh&quot;: &quot;shellscript&quot;,</span>
670 <span class="s">&quot;shtml&quot;</span><span class="p">:</span> <span class="s">&quot;shtml&quot;</span><span class="p">,</span>
671 <span class="s">&quot;sm&quot;</span><span class="p">:</span> <span class="s">&quot;smalltalk&quot;</span><span class="p">,</span>
672 <span class="s">&quot;splus&quot;</span><span class="p">:</span> <span class="s">&quot;splus&quot;</span><span class="p">,</span>
673 <span class="s">&quot;sql&quot;</span><span class="p">:</span> <span class="s">&quot;plsql&quot;</span><span class="p">,</span> <span class="c"># qt02537 2005-05-27</span>
674 <span class="s">&quot;sqr&quot;</span><span class="p">:</span> <span class="s">&quot;sqr&quot;</span><span class="p">,</span>
675 <span class="s">&quot;ss&quot;</span><span class="p">:</span> <span class="s">&quot;ssharp&quot;</span><span class="p">,</span>
676 <span class="s">&quot;ssi&quot;</span><span class="p">:</span> <span class="s">&quot;shtml&quot;</span><span class="p">,</span>
677 <span class="s">&quot;tcl&quot;</span><span class="p">:</span> <span class="s">&quot;tcl&quot;</span><span class="p">,</span> <span class="c"># modes/tcl.py exists.</span>
678 <span class="c"># &quot;tcl&quot;: &quot;tcltk&quot;,</span>
679 <span class="s">&quot;tex&quot;</span><span class="p">:</span> <span class="s">&quot;latex&quot;</span><span class="p">,</span>
680 <span class="c"># &quot;tex&quot;: &quot;tex&quot;,</span>
681 <span class="s">&quot;tpl&quot;</span><span class="p">:</span> <span class="s">&quot;tpl&quot;</span><span class="p">,</span>
682 <span class="s">&quot;ts&quot;</span><span class="p">:</span> <span class="s">&quot;typescript&quot;</span><span class="p">,</span>
683 <span class="s">&quot;txt&quot;</span><span class="p">:</span> <span class="s">&quot;plain&quot;</span><span class="p">,</span>
684 <span class="c"># &quot;txt&quot;: &quot;text&quot;,</span>
685 <span class="c"># &quot;txt&quot;: &quot;unknown&quot;, # Set when @comment is seen.</span>
686 <span class="s">&quot;uc&quot;</span><span class="p">:</span> <span class="s">&quot;uscript&quot;</span><span class="p">,</span>
687 <span class="s">&quot;v&quot;</span><span class="p">:</span> <span class="s">&quot;verilog&quot;</span><span class="p">,</span>
688 <span class="s">&quot;vbs&quot;</span><span class="p">:</span> <span class="s">&quot;vbscript&quot;</span><span class="p">,</span>
689 <span class="s">&quot;vhd&quot;</span><span class="p">:</span> <span class="s">&quot;vhdl&quot;</span><span class="p">,</span>
690 <span class="s">&quot;vhdl&quot;</span><span class="p">:</span> <span class="s">&quot;vhdl&quot;</span><span class="p">,</span>
691 <span class="s">&quot;vim&quot;</span><span class="p">:</span> <span class="s">&quot;vim&quot;</span><span class="p">,</span>
692 <span class="s">&quot;vtl&quot;</span><span class="p">:</span> <span class="s">&quot;velocity&quot;</span><span class="p">,</span>
693 <span class="s">&quot;w&quot;</span><span class="p">:</span> <span class="s">&quot;cweb&quot;</span><span class="p">,</span>
694 <span class="s">&quot;wiki&quot;</span><span class="p">:</span> <span class="s">&quot;moin&quot;</span><span class="p">,</span>
695 <span class="s">&quot;xml&quot;</span><span class="p">:</span> <span class="s">&quot;xml&quot;</span><span class="p">,</span>
696 <span class="s">&quot;xom&quot;</span><span class="p">:</span> <span class="s">&quot;omnimark&quot;</span><span class="p">,</span>
697 <span class="s">&quot;xsl&quot;</span><span class="p">:</span> <span class="s">&quot;xsl&quot;</span><span class="p">,</span>
698 <span class="s">&quot;zpt&quot;</span><span class="p">:</span> <span class="s">&quot;zpt&quot;</span><span class="p">,</span>
699 <span class="p">}</span>
700
701 <span class="c"># These aren&#39;t real languages, or have no delims...</span>
702 <span class="c"># cvs_commit, dsssl, embperl, freemarker, hex, jcl,</span>
703 <span class="c"># patch, phpsection, progress, props, pseudoplain,</span>
704 <span class="c"># relax_ng_compact, rtf, svn_commit.</span>
705
706 <span class="c"># These have extensions which conflict with other languages.</span>
707 <span class="c"># assembly_macro32: .asm or .a</span>
708 <span class="c"># assembly_mcs51: .asm or .a</span>
709 <span class="c"># assembly_parrot: .asm or .a</span>
710 <span class="c"># assembly_r2000: .asm or .a</span>
711 <span class="c"># assembly_x86: .asm or .a</span>
712 <span class="c"># squidconf: .conf</span>
713 <span class="c"># rpmspec: .rpm</span>
714
715 <span class="c"># Extra language extensions, used to associate extensions with mode files.</span>
716 <span class="c"># Used by importCommands.languageForExtension.</span>
717 <span class="c"># Keys are extensions, values are corresponding mode file (without .py)</span>
718 <span class="c"># A value of &#39;none&#39; is a signal to unit tests that no extension file exists.</span>
719 <span class="bp">self</span><span class="o">.</span><span class="n">extra_extension_dict</span> <span class="o">=</span> <span class="p">{</span>
720 <span class="s">&#39;pod&#39;</span> <span class="p">:</span> <span class="s">&#39;perl&#39;</span><span class="p">,</span>
721 <span class="s">&#39;unknown_language&#39;</span><span class="p">:</span> <span class="s">&#39;none&#39;</span><span class="p">,</span>
722 <span class="s">&#39;w&#39;</span> <span class="p">:</span> <span class="s">&#39;none&#39;</span><span class="p">,</span> <span class="c"># cweb</span>
723 <span class="p">}</span>
724
725 <span class="c">#@+node:ekr.20031218072017.2609: *3* app.closeLeoWindow</span></div>
726<div class="viewcode-block" id="LeoApp.closeLeoWindow"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.closeLeoWindow">[docs]</a> <span class="k">def</span> <span class="nf">closeLeoWindow</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">frame</span><span class="p">,</span><span class="n">new_c</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
727
728 <span class="sd">&quot;&quot;&quot;Attempt to close a Leo window.</span>
729
730<span class="sd"> Return False if the user veto&#39;s the close.&quot;&quot;&quot;</span>
731
732 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
733 <span class="n">c</span> <span class="o">=</span> <span class="n">frame</span><span class="o">.</span><span class="n">c</span>
734
735 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="n">frame</span><span class="o">.</span><span class="n">c</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">callers</span><span class="p">())</span>
736
737 <span class="n">c</span><span class="o">.</span><span class="n">endEditing</span><span class="p">()</span> <span class="c"># Commit any open edits.</span>
738
739 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">promptingForClose</span><span class="p">:</span>
740 <span class="c"># There is already a dialog open asking what to do.</span>
741 <span class="k">return</span> <span class="bp">False</span>
742
743 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">recentFilesManager</span><span class="o">.</span><span class="n">writeRecentFilesFile</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
744 <span class="c"># Make sure .leoRecentFiles.txt is written.</span>
745
746 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">changed</span><span class="p">:</span>
747 <span class="n">c</span><span class="o">.</span><span class="n">promptingForClose</span> <span class="o">=</span> <span class="bp">True</span>
748 <span class="n">veto</span> <span class="o">=</span> <span class="n">frame</span><span class="o">.</span><span class="n">promptForSave</span><span class="p">()</span>
749 <span class="n">c</span><span class="o">.</span><span class="n">promptingForClose</span> <span class="o">=</span> <span class="bp">False</span>
750 <span class="k">if</span> <span class="n">veto</span><span class="p">:</span> <span class="k">return</span> <span class="bp">False</span>
751
752 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">setLog</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span> <span class="c"># no log until we reactive a window.</span>
753
754 <span class="n">g</span><span class="o">.</span><span class="n">doHook</span><span class="p">(</span><span class="s">&quot;close-frame&quot;</span><span class="p">,</span><span class="n">c</span><span class="o">=</span><span class="n">c</span><span class="p">)</span>
755 <span class="c"># This may remove frame from the window list.</span>
756
757 <span class="k">if</span> <span class="n">frame</span> <span class="ow">in</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">:</span>
758 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">destroyWindow</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span>
759
760 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">:</span>
761 <span class="n">c2</span> <span class="o">=</span> <span class="n">new_c</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">c</span>
762 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">selectLeoWindow</span><span class="p">(</span><span class="n">c2</span><span class="p">)</span>
763
764 <span class="k">elif</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
765 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">finishQuit</span><span class="p">()</span>
766
767 <span class="k">return</span> <span class="bp">True</span> <span class="c"># The window has been closed.</span>
768 <span class="c">#@+node:ville.20090602181814.6219: *3* app.commanders</span></div>
769<div class="viewcode-block" id="LeoApp.commanders"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.commanders">[docs]</a> <span class="k">def</span> <span class="nf">commanders</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
770 <span class="sd">&quot;&quot;&quot; Return list of currently active controllers &quot;&quot;&quot;</span>
771
772 <span class="k">return</span> <span class="p">[</span><span class="n">f</span><span class="o">.</span><span class="n">c</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">]</span>
773 <span class="c">#@+node:ekr.20090717112235.6007: *3* app.computeSignon</span></div>
774<div class="viewcode-block" id="LeoApp.computeSignon"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.computeSignon">[docs]</a> <span class="k">def</span> <span class="nf">computeSignon</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
775
776 <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span>
777
778 <span class="kn">import</span> <span class="nn">leo.core.leoVersion</span> <span class="kn">as</span> <span class="nn">leoVersion</span>
779 <span class="n">build</span><span class="p">,</span><span class="n">date</span> <span class="o">=</span> <span class="n">leoVersion</span><span class="o">.</span><span class="n">build</span><span class="p">,</span><span class="n">leoVersion</span><span class="o">.</span><span class="n">date</span>
780 <span class="n">guiVersion</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">gui</span> <span class="ow">and</span> <span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="o">.</span><span class="n">getFullVersion</span><span class="p">()</span> <span class="ow">or</span> <span class="s">&#39;no gui!&#39;</span>
781 <span class="n">leoVer</span> <span class="o">=</span> <span class="n">leoVersion</span><span class="o">.</span><span class="n">version</span>
782 <span class="n">n1</span><span class="p">,</span><span class="n">n2</span><span class="p">,</span><span class="n">n3</span><span class="p">,</span><span class="n">junk</span><span class="p">,</span><span class="n">junk</span><span class="o">=</span><span class="n">sys</span><span class="o">.</span><span class="n">version_info</span>
783
784 <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">platform</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;win&#39;</span><span class="p">):</span>
785 <span class="n">sysVersion</span> <span class="o">=</span> <span class="s">&#39;Windows &#39;</span>
786 <span class="k">try</span><span class="p">:</span>
787 <span class="n">v</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">sys</span><span class="o">.</span><span class="n">getwindowsversion</span><span class="p">()</span>
788 <span class="n">sysVersion</span> <span class="o">+=</span> <span class="s">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">z</span><span class="p">)</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">v</span><span class="p">])</span>
789 <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
790 <span class="k">pass</span>
791
792 <span class="k">else</span><span class="p">:</span> <span class="n">sysVersion</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">platform</span>
793
794 <span class="n">app</span><span class="o">.</span><span class="n">signon</span> <span class="o">=</span> <span class="s">&#39;Leo </span><span class="si">%s</span><span class="s">, build </span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span>
795 <span class="n">leoVer</span><span class="p">,</span><span class="n">build</span><span class="p">,</span><span class="n">date</span><span class="p">)</span>
796 <span class="n">app</span><span class="o">.</span><span class="n">signon2</span> <span class="o">=</span> <span class="s">&#39;Python </span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="s">, </span><span class="si">%s</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span>
797 <span class="n">n1</span><span class="p">,</span><span class="n">n2</span><span class="p">,</span><span class="n">n3</span><span class="p">,</span><span class="n">guiVersion</span><span class="p">,</span><span class="n">sysVersion</span><span class="p">)</span>
798 <span class="c">#@+node:ekr.20100831090251.5838: *3* app.createXGui</span>
799 <span class="c">#@+node:ekr.20100831090251.5840: *4* app.createCursesGui</span></div>
800<div class="viewcode-block" id="LeoApp.createCursesGui"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.createCursesGui">[docs]</a> <span class="k">def</span> <span class="nf">createCursesGui</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fileName</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
801
802 <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span>
803
804 <span class="n">app</span><span class="o">.</span><span class="n">pluginsController</span><span class="o">.</span><span class="n">loadOnePlugin</span><span class="p">(</span><span class="s">&#39;leo.plugins.cursesGui&#39;</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="n">verbose</span><span class="p">)</span>
805 <span class="c">#@+node:ekr.20090619065122.8593: *4* app.createDefaultGui</span></div>
806<div class="viewcode-block" id="LeoApp.createDefaultGui"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.createDefaultGui">[docs]</a> <span class="k">def</span> <span class="nf">createDefaultGui</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fileName</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
807
808 <span class="sd">&quot;&quot;&quot;A convenience routines for plugins to create the default gui class.&quot;&quot;&quot;</span>
809
810 <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span> <span class="p">;</span> <span class="n">argName</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">guiArgName</span>
811
812 <span class="c"># This method can be called twice if we had to get .leoID.txt.</span>
813 <span class="k">if</span> <span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="p">:</span> <span class="k">return</span>
814
815 <span class="k">if</span> <span class="n">argName</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;qt&#39;</span><span class="p">,</span><span class="s">&#39;qttabs&#39;</span><span class="p">):</span> <span class="c"># 2011/06/15.</span>
816 <span class="n">app</span><span class="o">.</span><span class="n">createQtGui</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="n">verbose</span><span class="p">)</span>
817 <span class="k">elif</span> <span class="n">argName</span> <span class="o">==</span> <span class="s">&#39;null&#39;</span><span class="p">:</span>
818 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">nullGui</span>
819 <span class="k">elif</span> <span class="n">argName</span> <span class="o">==</span> <span class="s">&#39;curses&#39;</span><span class="p">:</span>
820 <span class="n">app</span><span class="o">.</span><span class="n">createCursesGui</span><span class="p">()</span>
821
822 <span class="k">if</span> <span class="ow">not</span> <span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="p">:</span>
823 <span class="k">print</span><span class="p">(</span><span class="s">&#39;Leo requires Qt to be installed.&#39;</span><span class="p">)</span>
824 <span class="c">#@+node:ekr.20031218072017.1938: *4* app.createNullGuiWithScript</span></div>
825<div class="viewcode-block" id="LeoApp.createNullGuiWithScript"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.createNullGuiWithScript">[docs]</a> <span class="k">def</span> <span class="nf">createNullGuiWithScript</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">script</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
826
827 <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span>
828
829 <span class="n">app</span><span class="o">.</span><span class="n">batchMode</span> <span class="o">=</span> <span class="bp">True</span>
830 <span class="n">app</span><span class="o">.</span><span class="n">gui</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">nullGui</span>
831 <span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="o">.</span><span class="n">setScript</span><span class="p">(</span><span class="n">script</span><span class="p">)</span>
832 <span class="c">#@+node:ekr.20090202191501.1: *4* app.createQtGui</span></div>
833<div class="viewcode-block" id="LeoApp.createQtGui"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.createQtGui">[docs]</a> <span class="k">def</span> <span class="nf">createQtGui</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fileName</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
834
835 <span class="c"># Do NOT omit fileName param: it is used in plugin code.</span>
836
837 <span class="sd">&quot;&quot;&quot;A convenience routines for plugins to create the Qt gui class.&quot;&quot;&quot;</span>
838
839 <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span>
840 <span class="k">try</span><span class="p">:</span>
841 <span class="c"># Take care to try the same imports as in qtGui.py.</span>
842 <span class="kn">import</span> <span class="nn">PyQt4.QtCore</span>
843 <span class="kn">import</span> <span class="nn">PyQt4.QtGui</span>
844 <span class="kn">import</span> <span class="nn">leo.plugins.qtGui</span> <span class="kn">as</span> <span class="nn">qtGui</span>
845 <span class="k">if</span> <span class="mi">0</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="n">PyQt4</span><span class="p">)</span> <span class="c"># To remove a pyflakes warning.</span>
846 <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
847 <span class="n">qtGui</span> <span class="o">=</span> <span class="bp">None</span>
848
849 <span class="k">if</span> <span class="n">qtGui</span><span class="p">:</span>
850 <span class="n">qtGui</span><span class="o">.</span><span class="n">init</span><span class="p">()</span>
851 <span class="k">if</span> <span class="n">app</span><span class="o">.</span><span class="n">gui</span> <span class="ow">and</span> <span class="n">fileName</span> <span class="ow">and</span> <span class="n">verbose</span><span class="p">:</span>
852 <span class="k">print</span><span class="p">(</span><span class="s">&#39;qtGui created in </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">fileName</span><span class="p">)</span>
853 <span class="c">#@+node:ekr.20090126063121.3: *4* app.createWxGui</span></div>
854<div class="viewcode-block" id="LeoApp.createWxGui"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.createWxGui">[docs]</a> <span class="k">def</span> <span class="nf">createWxGui</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fileName</span><span class="o">=</span><span class="s">&#39;&#39;</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
855
856 <span class="c"># Do NOT omit fileName param: it is used in plugin code.</span>
857
858 <span class="sd">&quot;&quot;&quot;A convenience routines for plugins to create the wx gui class.&quot;&quot;&quot;</span>
859
860 <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span>
861
862 <span class="n">app</span><span class="o">.</span><span class="n">pluginsController</span><span class="o">.</span><span class="n">loadOnePlugin</span> <span class="p">(</span><span class="s">&#39;leo.plugins.wxGui&#39;</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="n">verbose</span><span class="p">)</span>
863
864 <span class="k">if</span> <span class="n">fileName</span> <span class="ow">and</span> <span class="n">verbose</span><span class="p">:</span>
865
866 <span class="k">print</span><span class="p">(</span><span class="s">&#39;wxGui created in </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">fileName</span><span class="p">)</span>
867 <span class="c">#@+node:ekr.20031218072017.2612: *3* app.destroyAllOpenWithFiles</span></div>
868<div class="viewcode-block" id="LeoApp.destroyAllOpenWithFiles"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.destroyAllOpenWithFiles">[docs]</a> <span class="k">def</span> <span class="nf">destroyAllOpenWithFiles</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
869
870 <span class="sd">&quot;&quot;&quot;Try to remove temp files created with the Open With command.</span>
871
872<span class="sd"> This may fail if the files are still open.</span>
873
874<span class="sd"> Called by g.app.finishQuit&quot;&quot;&quot;</span>
875
876 <span class="c"># We can&#39;t use g.es here because the log stream no longer exists.</span>
877
878 <span class="k">for</span> <span class="n">theDict</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">openWithFiles</span><span class="p">[:]:</span>
879 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">destroyOpenWithFileWithDict</span><span class="p">(</span><span class="n">theDict</span><span class="p">)</span>
880
881 <span class="c"># Delete the list so the gc can recycle Leo windows!</span>
882 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">openWithFiles</span> <span class="o">=</span> <span class="p">[]</span>
883 <span class="c">#@+node:ekr.20031218072017.2613: *3* app.destroyOpenWithFilesForFrame</span></div>
884<div class="viewcode-block" id="LeoApp.destroyOpenWithFilesForFrame"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.destroyOpenWithFilesForFrame">[docs]</a> <span class="k">def</span> <span class="nf">destroyOpenWithFilesForFrame</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">frame</span><span class="p">):</span>
885
886 <span class="sd">&quot;&quot;&quot;Close all &quot;Open With&quot; files associated with frame</span>
887
888<span class="sd"> Called by app.destroyWindow.</span>
889<span class="sd"> &quot;&quot;&quot;</span>
890
891 <span class="c"># Make a copy of the list: it may change in the loop.</span>
892 <span class="n">openWithFiles</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">openWithFiles</span>
893
894 <span class="k">for</span> <span class="n">theDict</span> <span class="ow">in</span> <span class="n">openWithFiles</span><span class="p">[:]:</span> <span class="c"># 6/30/03</span>
895 <span class="n">c</span> <span class="o">=</span> <span class="n">theDict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;c&quot;</span><span class="p">)</span>
896 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">frame</span> <span class="o">==</span> <span class="n">frame</span><span class="p">:</span>
897 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">destroyOpenWithFileWithDict</span><span class="p">(</span><span class="n">theDict</span><span class="p">)</span>
898 <span class="c">#@+node:ekr.20031218072017.2614: *3* app.destroyOpenWithFileWithDict</span></div>
899<div class="viewcode-block" id="LeoApp.destroyOpenWithFileWithDict"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.destroyOpenWithFileWithDict">[docs]</a> <span class="k">def</span> <span class="nf">destroyOpenWithFileWithDict</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">theDict</span><span class="p">):</span>
900
901 <span class="sd">&#39;&#39;&#39;</span>
902<span class="sd"> A helper for app.destroyAllOpenWithFiles and</span>
903<span class="sd"> app.destroyOpenWithFilesForFrame.</span>
904<span class="sd"> &#39;&#39;&#39;</span>
905
906 <span class="n">path</span> <span class="o">=</span> <span class="n">theDict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;path&quot;</span><span class="p">)</span>
907 <span class="k">if</span> <span class="n">path</span> <span class="ow">and</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
908 <span class="k">try</span><span class="p">:</span>
909 <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
910 <span class="n">g</span><span class="o">.</span><span class="n">pr</span><span class="p">(</span><span class="s">&quot;deleting temp file: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">g</span><span class="o">.</span><span class="n">shortFileName</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
911 <span class="k">except</span><span class="p">:</span>
912 <span class="n">g</span><span class="o">.</span><span class="n">pr</span><span class="p">(</span><span class="s">&quot;can not delete temp file: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">path</span><span class="p">)</span>
913
914 <span class="c"># Remove theDict from the list so the gc can recycle the Leo window!</span>
915 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">openWithFiles</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">theDict</span><span class="p">)</span>
916 <span class="c">#@+node:ekr.20031218072017.2615: *3* app.destroyWindow</span></div>
917<div class="viewcode-block" id="LeoApp.destroyWindow"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.destroyWindow">[docs]</a> <span class="k">def</span> <span class="nf">destroyWindow</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">frame</span><span class="p">):</span>
918
919 <span class="c"># g.trace(frame in g.app.windowList,frame)</span>
920 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">destroyOpenWithFilesForFrame</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span>
921
922 <span class="k">if</span> <span class="n">frame</span> <span class="ow">in</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">:</span>
923 <span class="c"># g.trace(g.app.windowList)</span>
924 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span>
925 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">forgetOpenFile</span><span class="p">(</span><span class="n">frame</span><span class="o">.</span><span class="n">c</span><span class="o">.</span><span class="n">fileName</span><span class="p">())</span>
926
927 <span class="c"># force the window to go away now.</span>
928 <span class="c"># Important: this also destroys all the objects of the commander.</span>
929 <span class="n">frame</span><span class="o">.</span><span class="n">destroySelf</span><span class="p">()</span>
930 <span class="c">#@+node:ekr.20031218072017.1732: *3* app.finishQuit</span></div>
931<div class="viewcode-block" id="LeoApp.finishQuit"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.finishQuit">[docs]</a> <span class="k">def</span> <span class="nf">finishQuit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
932
933 <span class="c"># forceShutdown may already have fired the &quot;end1&quot; hook.</span>
934 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">killed</span><span class="p">:</span>
935 <span class="n">g</span><span class="o">.</span><span class="n">doHook</span><span class="p">(</span><span class="s">&quot;end1&quot;</span><span class="p">)</span>
936
937 <span class="bp">self</span><span class="o">.</span><span class="n">destroyAllOpenWithFiles</span><span class="p">()</span>
938
939 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="p">:</span>
940 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="o">.</span><span class="n">destroySelf</span><span class="p">()</span>
941
942 <span class="c"># Don&#39;t use g.trace!</span>
943 <span class="c"># print(&#39;app.finishQuit: setting g.app.killed&#39;,g.callers())</span>
944
945 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">killed</span> <span class="o">=</span> <span class="bp">True</span>
946 <span class="c"># Disable all further hooks and events.</span>
947 <span class="c"># Alas, &quot;idle&quot; events can still be called</span>
948 <span class="c"># even after the following code.</span>
949
950 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">afterHandler</span><span class="p">:</span>
951 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">afterHandler</span> <span class="o">=</span> <span class="bp">None</span>
952 <span class="c">#@+node:ekr.20031218072017.2616: *3* app.forceShutdown</span></div>
953<div class="viewcode-block" id="LeoApp.forceShutdown"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.forceShutdown">[docs]</a> <span class="k">def</span> <span class="nf">forceShutdown</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
954
955 <span class="sd">&quot;&quot;&quot;Forces an immediate shutdown of Leo at any time.</span>
956
957<span class="sd"> In particular, may be called from plugins during startup.&quot;&quot;&quot;</span>
958
959 <span class="c"># Wait until everything is quiet before really quitting.</span>
960 <span class="n">g</span><span class="o">.</span><span class="n">doHook</span><span class="p">(</span><span class="s">&quot;end1&quot;</span><span class="p">)</span>
961
962 <span class="bp">self</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># Disable writeWaitingLog</span>
963 <span class="bp">self</span><span class="o">.</span><span class="n">killed</span> <span class="o">=</span> <span class="bp">True</span> <span class="c"># Disable all further hooks.</span>
964
965 <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">windowList</span><span class="p">[:]:</span>
966 <span class="bp">self</span><span class="o">.</span><span class="n">destroyWindow</span><span class="p">(</span><span class="n">w</span><span class="p">)</span>
967
968 <span class="bp">self</span><span class="o">.</span><span class="n">finishQuit</span><span class="p">()</span>
969 <span class="c">#@+node:ekr.20031218072017.2188: *3* app.newCommander &amp; helper</span></div>
970<div class="viewcode-block" id="LeoApp.newCommander"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.newCommander">[docs]</a> <span class="k">def</span> <span class="nf">newCommander</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fileName</span><span class="p">,</span><span class="n">relativeFileName</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span><span class="n">gui</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span><span class="n">previousSettings</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
971
972 <span class="sd">&quot;&quot;&quot;Create a commander and its view frame for the Leo main window.&quot;&quot;&quot;</span>
973
974 <span class="n">trace</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">trace_startup</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
975 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;g.app.newCommander: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="nb">repr</span><span class="p">(</span><span class="n">fileName</span><span class="p">))</span>
976
977 <span class="c"># Create the commander and its subcommanders.</span>
978 <span class="c"># This takes about 3/4 sec when called by the leoBridge module.</span>
979 <span class="kn">import</span> <span class="nn">leo.core.leoCommands</span> <span class="kn">as</span> <span class="nn">leoCommands</span>
980
981 <span class="k">return</span> <span class="n">leoCommands</span><span class="o">.</span><span class="n">Commands</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="n">relativeFileName</span><span class="p">,</span><span class="n">gui</span><span class="p">,</span><span class="n">previousSettings</span><span class="p">)</span>
982 <span class="c">#@+node:ekr.20031218072017.2617: *3* app.onQuit</span></div>
983<div class="viewcode-block" id="LeoApp.onQuit"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.onQuit">[docs]</a> <span class="k">def</span> <span class="nf">onQuit</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
984
985 <span class="sd">&#39;&#39;&#39;Exit Leo, prompting to save unsaved outlines first.&#39;&#39;&#39;</span>
986
987 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">quitting</span> <span class="o">=</span> <span class="bp">True</span>
988
989 <span class="c"># Don&#39;t use g.trace here.</span>
990 <span class="c"># print(&#39;onQuit&#39;,g.app.save_session,g.app.sessionManager)</span>
991
992 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">save_session</span> <span class="ow">and</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">sessionManager</span><span class="p">:</span>
993 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">sessionManager</span><span class="o">.</span><span class="n">save_snapshot</span><span class="p">()</span>
994
995 <span class="k">while</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">:</span>
996 <span class="n">w</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
997 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">closeLeoWindow</span><span class="p">(</span><span class="n">w</span><span class="p">):</span>
998 <span class="k">break</span>
999
1000 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">:</span>
1001 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">quitting</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># If we get here the quit has been disabled.</span>
1002 <span class="c">#@+node:ekr.20120304065838.15588: *3* app.selectLeoWindow</span></div>
1003<div class="viewcode-block" id="LeoApp.selectLeoWindow"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.selectLeoWindow">[docs]</a> <span class="k">def</span> <span class="nf">selectLeoWindow</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">):</span>
1004
1005 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
1006 <span class="k">assert</span> <span class="n">c</span>
1007 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
1008
1009 <span class="n">frame</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">frame</span>
1010 <span class="n">frame</span><span class="o">.</span><span class="n">deiconify</span><span class="p">()</span>
1011 <span class="n">frame</span><span class="o">.</span><span class="n">lift</span><span class="p">()</span>
1012 <span class="n">c</span><span class="o">.</span><span class="n">setLog</span><span class="p">()</span>
1013
1014 <span class="n">master</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">frame</span><span class="o">.</span><span class="n">top</span><span class="p">,</span><span class="s">&#39;leo_master&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">frame</span><span class="o">.</span><span class="n">top</span><span class="o">.</span><span class="n">leo_master</span>
1015
1016 <span class="k">if</span> <span class="n">master</span><span class="p">:</span> <span class="c"># 2011/11/21: selecting the new tab ensures focus is set.</span>
1017 <span class="c"># frame.top.leo_master is a TabbedTopLevel.</span>
1018 <span class="n">master</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
1019
1020 <span class="n">c</span><span class="o">.</span><span class="n">bodyWantsFocus</span><span class="p">()</span>
1021 <span class="n">c</span><span class="o">.</span><span class="n">outerUpdate</span><span class="p">()</span>
1022 <span class="c">#@+node:ville.20090620122043.6275: *3* app.setGlobalDb</span></div>
1023<div class="viewcode-block" id="LeoApp.setGlobalDb"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.setGlobalDb">[docs]</a> <span class="k">def</span> <span class="nf">setGlobalDb</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1024 <span class="sd">&quot;&quot;&quot; Create global pickleshare db</span>
1025
1026<span class="sd"> Usable by::</span>
1027
1028<span class="sd"> g.app.db[&#39;hello&#39;] = [1,2,5]</span>
1029
1030<span class="sd"> &quot;&quot;&quot;</span>
1031
1032 <span class="c"># Fixes bug 670108.</span>
1033 <span class="kn">import</span> <span class="nn">leo.core.leoCache</span> <span class="kn">as</span> <span class="nn">leoCache</span>
1034 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">leoCache</span><span class="o">.</span><span class="n">cacher</span><span class="p">()</span><span class="o">.</span><span class="n">initGlobalDB</span><span class="p">()</span>
1035 <span class="c">#@+node:ekr.20031218072017.1978: *3* app.setLeoID</span></div>
1036<div class="viewcode-block" id="LeoApp.setLeoID"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.setLeoID">[docs]</a> <span class="k">def</span> <span class="nf">setLeoID</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
1037
1038 <span class="n">tag</span> <span class="o">=</span> <span class="s">&quot;.leoID.txt&quot;</span>
1039 <span class="n">homeLeoDir</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeLeoDir</span>
1040 <span class="n">globalConfigDir</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">globalConfigDir</span>
1041 <span class="n">loadDir</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">loadDir</span>
1042
1043 <span class="n">verbose</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unitTesting</span>
1044 <span class="c">#@+&lt;&lt; return if we can set leoID from sys.leoID &gt;&gt;</span>
1045 <span class="c">#@+node:ekr.20031218072017.1979: *4* &lt;&lt; return if we can set leoID from sys.leoID&gt;&gt;</span>
1046 <span class="c"># This would be set by in Python&#39;s sitecustomize.py file.</span>
1047
1048 <span class="c"># Use hasattr &amp; getattr to suppress pylint warning.</span>
1049 <span class="c"># Use a &quot;non-constant&quot; attribute to suppress another warning!</span>
1050
1051 <span class="n">nonConstantAttr</span> <span class="o">=</span> <span class="s">&quot;leoID&quot;</span>
1052
1053 <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sys</span><span class="p">,</span><span class="n">nonConstantAttr</span><span class="p">):</span>
1054 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">sys</span><span class="p">,</span><span class="n">nonConstantAttr</span><span class="p">)</span>
1055 <span class="k">if</span> <span class="n">verbose</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">silentMode</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
1056 <span class="n">g</span><span class="o">.</span><span class="n">red</span><span class="p">(</span><span class="s">&quot;leoID=&quot;</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span><span class="p">,</span><span class="n">spaces</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
1057 <span class="c"># Careful: periods in the id field of a gnx will corrupt the .leo file!</span>
1058 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">,</span><span class="s">&#39;-&#39;</span><span class="p">)</span>
1059 <span class="k">return</span>
1060 <span class="k">else</span><span class="p">:</span>
1061 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span> <span class="o">=</span> <span class="bp">None</span>
1062 <span class="c">#@-&lt;&lt; return if we can set leoID from sys.leoID &gt;&gt;</span>
1063 <span class="c">#@+&lt;&lt; return if we can set leoID from &quot;leoID.txt&quot; &gt;&gt;</span>
1064 <span class="c">#@+node:ekr.20031218072017.1980: *4* &lt;&lt; return if we can set leoID from &quot;leoID.txt&quot; &gt;&gt;</span>
1065 <span class="k">for</span> <span class="n">theDir</span> <span class="ow">in</span> <span class="p">(</span><span class="n">homeLeoDir</span><span class="p">,</span><span class="n">globalConfigDir</span><span class="p">,</span><span class="n">loadDir</span><span class="p">):</span>
1066 <span class="c"># N.B. We would use the _working_ directory if theDir is None!</span>
1067 <span class="k">if</span> <span class="n">theDir</span><span class="p">:</span>
1068 <span class="k">try</span><span class="p">:</span>
1069 <span class="n">fn</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_join</span><span class="p">(</span><span class="n">theDir</span><span class="p">,</span><span class="n">tag</span><span class="p">)</span>
1070 <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fn</span><span class="p">,</span><span class="s">&#39;r&#39;</span><span class="p">)</span>
1071 <span class="n">s</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
1072 <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
1073 <span class="k">if</span> <span class="n">s</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
1074 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
1075 <span class="c"># Careful: periods in the id field of a gnx</span>
1076 <span class="c"># will corrupt the .leo file!</span>
1077 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">,</span><span class="s">&#39;-&#39;</span><span class="p">)</span>
1078 <span class="k">if</span> <span class="n">verbose</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">silentMode</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
1079 <span class="n">g</span><span class="o">.</span><span class="n">red</span><span class="p">(</span><span class="s">&#39;leoID=&#39;</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span><span class="p">,</span><span class="s">&#39; (in &#39;</span><span class="p">,</span><span class="n">theDir</span><span class="p">,</span><span class="s">&#39;)&#39;</span><span class="p">,</span><span class="n">spaces</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
1080 <span class="k">return</span>
1081 <span class="k">elif</span> <span class="n">verbose</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
1082 <span class="n">g</span><span class="o">.</span><span class="n">red</span><span class="p">(</span><span class="s">&#39;empty &#39;</span><span class="p">,</span><span class="n">tag</span><span class="p">,</span><span class="s">&#39; (in &#39;</span><span class="p">,</span><span class="n">theDir</span><span class="p">,</span><span class="s">&#39;)&#39;</span><span class="p">,</span><span class="n">spaces</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
1083 <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
1084 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span> <span class="o">=</span> <span class="bp">None</span>
1085 <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
1086 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span> <span class="o">=</span> <span class="bp">None</span>
1087 <span class="n">g</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&#39;unexpected exception in app.setLeoID&#39;</span><span class="p">)</span>
1088 <span class="n">g</span><span class="o">.</span><span class="n">es_exception</span><span class="p">()</span>
1089 <span class="c">#@-&lt;&lt; return if we can set leoID from &quot;leoID.txt&quot; &gt;&gt;</span>
1090 <span class="c">#@+&lt;&lt; return if we can set leoID from os.getenv(&#39;USER&#39;) &gt;&gt;</span>
1091 <span class="c">#@+node:ekr.20060211140947.1: *4* &lt;&lt; return if we can set leoID from os.getenv(&#39;USER&#39;) &gt;&gt;</span>
1092 <span class="k">try</span><span class="p">:</span>
1093 <span class="n">theId</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">&#39;USER&#39;</span><span class="p">)</span>
1094 <span class="k">if</span> <span class="n">theId</span><span class="p">:</span>
1095 <span class="k">if</span> <span class="n">verbose</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
1096 <span class="n">g</span><span class="o">.</span><span class="n">blue</span><span class="p">(</span><span class="s">&quot;setting leoID from os.getenv(&#39;USER&#39;):&quot;</span><span class="p">,</span>
1097 <span class="nb">repr</span><span class="p">(</span><span class="n">theId</span><span class="p">))</span>
1098 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span> <span class="o">=</span> <span class="n">theId</span>
1099 <span class="c"># Careful: periods in the id field of a gnx</span>
1100 <span class="c"># will corrupt the .leo file!</span>
1101 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">,</span><span class="s">&#39;-&#39;</span><span class="p">)</span>
1102 <span class="k">return</span>
1103
1104 <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
1105 <span class="k">pass</span>
1106 <span class="c">#@-&lt;&lt; return if we can set leoID from os.getenv(&#39;USER&#39;) &gt;&gt;</span>
1107 <span class="c">#@+&lt;&lt; put up a dialog requiring a valid id &gt;&gt;</span>
1108 <span class="c">#@+node:ekr.20031218072017.1981: *4* &lt;&lt; put up a dialog requiring a valid id &gt;&gt;</span>
1109 <span class="c"># 2011/06/13: Don&#39;t put up a splash screen.</span>
1110 <span class="c"># It would obscure the coming dialog.</span>
1111 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">use_splash_screen</span> <span class="o">=</span> <span class="bp">False</span>
1112
1113 <span class="c"># New in 4.1: get an id for gnx&#39;s. Plugins may set g.app.leoID.</span>
1114 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
1115 <span class="c"># Create the Qt gui if it exists.</span>
1116 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">createDefaultGui</span><span class="p">(</span><span class="n">fileName</span><span class="o">=</span><span class="s">&#39;g.app.setLeoId&#39;</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
1117
1118 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="c"># Neither gui could be created: this should never happen.</span>
1119 <span class="k">print</span><span class="p">(</span><span class="s">&quot;Please enter LeoID (e.g. your username, &#39;johndoe&#39;...)&quot;</span><span class="p">)</span>
1120 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">:</span> <span class="c"># 2010/02/04.</span>
1121 <span class="n">leoid</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">&#39;LeoID: &#39;</span><span class="p">)</span>
1122 <span class="k">else</span><span class="p">:</span>
1123 <span class="n">leoid</span> <span class="o">=</span> <span class="nb">raw_input</span><span class="p">(</span><span class="s">&#39;LeoID: &#39;</span><span class="p">)</span>
1124 <span class="k">else</span><span class="p">:</span>
1125 <span class="n">leoid</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="o">.</span><span class="n">runAskLeoIDDialog</span><span class="p">()</span>
1126
1127 <span class="c"># Bug fix: 2/6/05: put result in g.app.leoID.</span>
1128 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span> <span class="o">=</span> <span class="n">leoid</span>
1129
1130 <span class="c"># Careful: periods in the id field of a gnx will corrupt the .leo file!</span>
1131 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">,</span><span class="s">&#39;-&#39;</span><span class="p">)</span>
1132
1133 <span class="c"># g.trace(g.app.leoID)</span>
1134 <span class="n">g</span><span class="o">.</span><span class="n">blue</span><span class="p">(</span><span class="s">&#39;leoID=&#39;</span><span class="p">,</span><span class="nb">repr</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span><span class="p">),</span><span class="n">spaces</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
1135 <span class="c">#@-&lt;&lt; put up a dialog requiring a valid id &gt;&gt;</span>
1136 <span class="c">#@+&lt;&lt; attempt to create leoID.txt &gt;&gt;</span>
1137 <span class="c">#@+node:ekr.20031218072017.1982: *4* &lt;&lt; attempt to create leoID.txt &gt;&gt; (changed)</span>
1138 <span class="k">for</span> <span class="n">theDir</span> <span class="ow">in</span> <span class="p">(</span><span class="n">homeLeoDir</span><span class="p">,</span><span class="n">globalConfigDir</span><span class="p">,</span><span class="n">loadDir</span><span class="p">):</span>
1139 <span class="c"># N.B. We would use the _working_ directory if theDir is None!</span>
1140 <span class="k">if</span> <span class="n">theDir</span><span class="p">:</span>
1141 <span class="k">try</span><span class="p">:</span>
1142 <span class="n">fn</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_join</span><span class="p">(</span><span class="n">theDir</span><span class="p">,</span><span class="n">tag</span><span class="p">)</span>
1143 <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fn</span><span class="p">,</span><span class="s">&#39;w&#39;</span><span class="p">)</span>
1144 <span class="n">s</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span>
1145 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">:</span> <span class="c"># 2010/08/27</span>
1146 <span class="n">s</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">toEncodedString</span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="n">encoding</span><span class="o">=</span><span class="s">&#39;utf-8&#39;</span><span class="p">,</span><span class="n">reportErrors</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
1147 <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
1148 <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
1149 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
1150 <span class="n">g</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">,</span><span class="n">tag</span><span class="p">,</span><span class="s">&#39;created in&#39;</span><span class="p">,</span><span class="n">theDir</span><span class="p">)</span>
1151 <span class="k">return</span>
1152 <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
1153 <span class="k">pass</span>
1154
1155 <span class="n">g</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&#39;can not create&#39;</span><span class="p">,</span><span class="n">tag</span><span class="p">,</span><span class="s">&#39;in&#39;</span><span class="p">,</span><span class="n">theDir</span><span class="p">)</span>
1156 <span class="c">#@-&lt;&lt; attempt to create leoID.txt &gt;&gt;</span>
1157 <span class="c">#@+node:ekr.20031218072017.1847: *3* app.setLog, lockLog, unlocklog</span></div>
1158<div class="viewcode-block" id="LeoApp.setLog"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.setLog">[docs]</a> <span class="k">def</span> <span class="nf">setLog</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">log</span><span class="p">):</span>
1159
1160 <span class="sd">&quot;&quot;&quot;set the frame to which log messages will go&quot;&quot;&quot;</span>
1161
1162 <span class="c"># print(&quot;app.setLog:&quot;,log)</span>
1163 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">logIsLocked</span><span class="p">:</span>
1164 <span class="bp">self</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="n">log</span>
1165</div>
1166<div class="viewcode-block" id="LeoApp.lockLog"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.lockLog">[docs]</a> <span class="k">def</span> <span class="nf">lockLog</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1167 <span class="sd">&quot;&quot;&quot;Disable changes to the log&quot;&quot;&quot;</span>
1168 <span class="bp">self</span><span class="o">.</span><span class="n">logIsLocked</span> <span class="o">=</span> <span class="bp">True</span>
1169</div>
1170<div class="viewcode-block" id="LeoApp.unlockLog"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.unlockLog">[docs]</a> <span class="k">def</span> <span class="nf">unlockLog</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1171 <span class="sd">&quot;&quot;&quot;Enable changes to the log&quot;&quot;&quot;</span>
1172 <span class="bp">self</span><span class="o">.</span><span class="n">logIsLocked</span> <span class="o">=</span> <span class="bp">False</span>
1173 <span class="c">#@+node:ekr.20031218072017.2619: *3* app.writeWaitingLog</span></div>
1174<div class="viewcode-block" id="LeoApp.writeWaitingLog"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.writeWaitingLog">[docs]</a> <span class="k">def</span> <span class="nf">writeWaitingLog</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">):</span>
1175
1176 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span>
1177 <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span>
1178
1179 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
1180 <span class="c"># Do not call g.es, g.es_print, g.pr or g.trace here!</span>
1181 <span class="k">print</span><span class="p">(</span><span class="s">&#39;** writeWaitingLog&#39;</span><span class="p">,</span><span class="s">&#39;silent&#39;</span><span class="p">,</span><span class="n">app</span><span class="o">.</span><span class="n">silentMode</span><span class="p">,</span><span class="n">c</span><span class="o">.</span><span class="n">shortFileName</span><span class="p">())</span>
1182 <span class="c"># print(&#39;writeWaitingLog&#39;,g.callers())</span>
1183 <span class="c"># import sys ; print(&#39;writeWaitingLog: argv&#39;,sys.argv)</span>
1184
1185 <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">exists</span><span class="p">:</span>
1186 <span class="k">return</span>
1187
1188 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
1189 <span class="n">app</span><span class="o">.</span><span class="n">printWaiting</span> <span class="o">=</span> <span class="p">[]</span>
1190 <span class="n">app</span><span class="o">.</span><span class="n">logWaiting</span> <span class="o">=</span> <span class="p">[]</span>
1191 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">setLog</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span> <span class="c"># Prepare to requeue for other commanders.</span>
1192 <span class="k">return</span>
1193
1194 <span class="n">table</span> <span class="o">=</span> <span class="p">[</span>
1195 <span class="p">(</span><span class="s">&#39;Leo Log Window&#39;</span><span class="p">,</span><span class="s">&#39;red&#39;</span><span class="p">),</span>
1196 <span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">signon</span><span class="p">,</span><span class="bp">None</span><span class="p">),</span>
1197 <span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">signon2</span><span class="p">,</span><span class="bp">None</span><span class="p">),</span>
1198 <span class="p">]</span>
1199 <span class="n">table</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
1200
1201 <span class="n">c</span><span class="o">.</span><span class="n">setLog</span><span class="p">()</span> <span class="c"># 2010/10/20</span>
1202 <span class="n">app</span><span class="o">.</span><span class="n">logInited</span> <span class="o">=</span> <span class="bp">True</span> <span class="c"># Prevent recursive call.</span>
1203
1204 <span class="k">if</span> <span class="ow">not</span> <span class="n">app</span><span class="o">.</span><span class="n">signon_printed</span><span class="p">:</span>
1205 <span class="n">app</span><span class="o">.</span><span class="n">signon_printed</span> <span class="o">=</span> <span class="bp">True</span>
1206 <span class="k">if</span> <span class="ow">not</span> <span class="n">app</span><span class="o">.</span><span class="n">silentMode</span><span class="p">:</span> <span class="c"># 2011/11/02:</span>
1207 <span class="k">print</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
1208 <span class="k">print</span><span class="p">(</span><span class="s">&#39;** isPython3: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">)</span>
1209 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">enableDB</span><span class="p">:</span>
1210 <span class="k">print</span><span class="p">(</span><span class="s">&#39;** caching disabled&#39;</span><span class="p">)</span>
1211 <span class="k">print</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">signon</span><span class="p">)</span>
1212 <span class="k">print</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">signon2</span><span class="p">)</span>
1213 <span class="k">if</span> <span class="ow">not</span> <span class="n">app</span><span class="o">.</span><span class="n">silentMode</span><span class="p">:</span> <span class="c"># 2011/11/02:</span>
1214 <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">app</span><span class="o">.</span><span class="n">printWaiting</span><span class="p">:</span>
1215 <span class="k">print</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
1216 <span class="n">app</span><span class="o">.</span><span class="n">printWaiting</span> <span class="o">=</span> <span class="p">[]</span>
1217
1218 <span class="k">if</span> <span class="ow">not</span> <span class="n">app</span><span class="o">.</span><span class="n">silentMode</span><span class="p">:</span> <span class="c"># 2011/11/02:</span>
1219 <span class="k">for</span> <span class="n">s</span><span class="p">,</span><span class="n">color</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span>
1220 <span class="n">app</span><span class="o">.</span><span class="n">logWaiting</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,(</span><span class="n">s</span><span class="o">+</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">,</span><span class="n">color</span><span class="p">),)</span>
1221 <span class="k">for</span> <span class="n">s</span><span class="p">,</span><span class="n">color</span> <span class="ow">in</span> <span class="n">app</span><span class="o">.</span><span class="n">logWaiting</span><span class="p">:</span>
1222 <span class="n">g</span><span class="o">.</span><span class="n">es</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">,</span><span class="n">s</span><span class="p">,</span><span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">,</span><span class="n">newline</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
1223 <span class="c"># The caller must write the newlines.</span>
1224 <span class="n">app</span><span class="o">.</span><span class="n">logWaiting</span> <span class="o">=</span> <span class="p">[]</span>
1225
1226 <span class="c"># Essential when opening multiple files...</span>
1227 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">setLog</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
1228 <span class="c">#@+node:ekr.20120427064024.10068: *3* app.Detecting already-open files</span>
1229 <span class="c">#@+node:ekr.20120427064024.10064: *4* app.checkForOpenFile</span></div>
1230<div class="viewcode-block" id="LeoApp.checkForOpenFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.checkForOpenFile">[docs]</a> <span class="k">def</span> <span class="nf">checkForOpenFile</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
1231
1232 <span class="n">d</span><span class="p">,</span><span class="n">tag</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">db</span><span class="p">,</span><span class="s">&#39;open-leo-files&#39;</span>
1233
1234 <span class="k">if</span> <span class="n">d</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unitTesting</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">batchMode</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">reverting</span><span class="p">:</span>
1235 <span class="k">return</span> <span class="bp">True</span>
1236 <span class="k">else</span><span class="p">:</span>
1237 <span class="n">aList</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
1238 <span class="k">if</span> <span class="n">fn</span> <span class="ow">in</span> <span class="n">aList</span><span class="p">:</span>
1239 <span class="n">result</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="o">.</span><span class="n">runAskYesNoDialog</span><span class="p">(</span><span class="n">c</span><span class="p">,</span>
1240 <span class="n">title</span><span class="o">=</span><span class="s">&#39;Open Leo File Again?&#39;</span><span class="p">,</span>
1241 <span class="n">message</span><span class="o">=</span><span class="s">&#39;</span><span class="si">%s</span><span class="s"> is already open. Open it again?&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fn</span><span class="p">),</span>
1242 <span class="p">)</span>
1243 <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="s">&#39;yes&#39;</span><span class="p">:</span>
1244 <span class="n">clear</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="o">.</span><span class="n">runAskYesNoDialog</span><span class="p">(</span><span class="n">c</span><span class="p">,</span>
1245 <span class="n">title</span><span class="o">=</span><span class="s">&#39;Reset open count?&#39;</span><span class="p">,</span>
1246 <span class="n">message</span><span class="o">=</span><span class="s">&#39;Reset open count for </span><span class="si">%s</span><span class="s">?&#39;</span> \
1247 <span class="s">&quot;</span><span class="se">\n</span><span class="s">Say yes if you know this outline&quot;</span> \
1248 <span class="s">&quot;</span><span class="se">\n</span><span class="s">is not really open elsewhere&quot;</span><span class="o">%</span> <span class="p">(</span><span class="n">fn</span><span class="p">),</span>
1249 <span class="p">)</span>
1250 <span class="k">if</span> <span class="n">clear</span> <span class="o">==</span> <span class="s">&#39;yes&#39;</span><span class="p">:</span>
1251 <span class="n">d</span><span class="p">[</span><span class="n">tag</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">d</span><span class="p">[</span><span class="n">tag</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="n">fn</span><span class="p">]</span>
1252 <span class="c"># IMPORTANT - rest of load process will add another</span>
1253 <span class="c"># entry for this Leo instance, don&#39;t do it here</span>
1254 <span class="k">return</span> <span class="n">result</span> <span class="o">==</span> <span class="s">&#39;yes&#39;</span>
1255 <span class="k">else</span><span class="p">:</span>
1256 <span class="k">return</span> <span class="bp">True</span>
1257 <span class="c">#@+node:ekr.20120427064024.10066: *4* app.forgetOpenFile</span></div>
1258<div class="viewcode-block" id="LeoApp.forgetOpenFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.forgetOpenFile">[docs]</a> <span class="k">def</span> <span class="nf">forgetOpenFile</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
1259
1260 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
1261 <span class="n">d</span><span class="p">,</span><span class="n">tag</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">db</span><span class="p">,</span><span class="s">&#39;open-leo-files&#39;</span>
1262
1263 <span class="k">if</span> <span class="n">d</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unitTesting</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">batchMode</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">reverting</span><span class="p">:</span>
1264 <span class="k">pass</span>
1265 <span class="k">else</span><span class="p">:</span>
1266 <span class="n">aList</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
1267 <span class="k">if</span> <span class="n">fn</span> <span class="ow">in</span> <span class="n">aList</span><span class="p">:</span>
1268 <span class="n">aList</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
1269 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
1270 <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;removed: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fn</span><span class="p">),</span><span class="n">g</span><span class="o">.</span><span class="n">callers</span><span class="p">())</span>
1271 <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">aList</span><span class="p">:</span>
1272 <span class="k">print</span><span class="p">(</span><span class="s">&#39; </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">z</span><span class="p">))</span>
1273 <span class="n">d</span><span class="p">[</span><span class="n">tag</span><span class="p">]</span> <span class="o">=</span> <span class="n">aList</span>
1274 <span class="k">else</span><span class="p">:</span>
1275 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;did not remove: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fn</span><span class="p">))</span>
1276 <span class="c">#@+node:ekr.20120427064024.10065: *4* app.rememberOpenFile</span></div>
1277<div class="viewcode-block" id="LeoApp.rememberOpenFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LeoApp.rememberOpenFile">[docs]</a> <span class="k">def</span> <span class="nf">rememberOpenFile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
1278
1279 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
1280 <span class="n">d</span><span class="p">,</span><span class="n">tag</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">db</span><span class="p">,</span><span class="s">&#39;open-leo-files&#39;</span>
1281
1282 <span class="k">if</span> <span class="n">d</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unitTesting</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">batchMode</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">reverting</span><span class="p">:</span>
1283 <span class="k">pass</span>
1284 <span class="k">elif</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">preReadFlag</span><span class="p">:</span>
1285 <span class="k">pass</span>
1286 <span class="k">else</span><span class="p">:</span>
1287 <span class="n">aList</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
1288 <span class="c"># It&#39;s proper to add duplicates to this list.</span>
1289 <span class="n">aList</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
1290 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
1291 <span class="c"># Trace doesn&#39;t work well while initing.</span>
1292 <span class="k">print</span><span class="p">(</span><span class="s">&#39;rememberOpenFile:added: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fn</span><span class="p">))</span>
1293 <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">aList</span><span class="p">:</span>
1294 <span class="k">print</span><span class="p">(</span><span class="s">&#39; </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">z</span><span class="p">))</span>
1295 <span class="n">d</span><span class="p">[</span><span class="n">tag</span><span class="p">]</span> <span class="o">=</span> <span class="n">aList</span>
1296 <span class="c">#@-others</span>
1297<span class="c">#@+node:ekr.20120209051836.10242: ** class LoadManager</span></div></div>
1298<div class="viewcode-block" id="LoadManager"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager">[docs]</a><span class="k">class</span> <span class="nc">LoadManager</span><span class="p">:</span>
1299
1300 <span class="sd">&#39;&#39;&#39;A class to manage loading .leo files, including configuration files.&#39;&#39;&#39;</span>
1301
1302 <span class="c">#@+others</span>
1303 <span class="c">#@+node:ekr.20120214060149.15851: *3* LM.ctor</span>
1304 <span class="k">def</span> <span class="nf">__init__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1305
1306 <span class="n">trace</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">trace_startup</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
1307 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;LoadManager.__init__&#39;</span><span class="p">)</span>
1308
1309 <span class="c"># Global settings &amp; shortcuts dicts.</span>
1310 <span class="c"># The are the defaults for computing settings and shortcuts for all loaded files.</span>
1311 <span class="bp">self</span><span class="o">.</span><span class="n">globalSettingsDict</span> <span class="o">=</span> <span class="bp">None</span>
1312 <span class="c"># A g.TypedDict containing the merger of default settings,</span>
1313 <span class="c"># settings in leoSettings.leo and settings in myLeoSettings.leo</span>
1314 <span class="bp">self</span><span class="o">.</span><span class="n">globalShortcutsDict</span> <span class="o">=</span> <span class="bp">None</span>
1315 <span class="c"># A g.TypedDictOfLists containg the merger of shortcuts in</span>
1316 <span class="c"># leoSettings.leo and settings in myLeoSettings.leo.</span>
1317
1318 <span class="c"># LoadManager ivars corresponding to user options....</span>
1319 <span class="bp">self</span><span class="o">.</span><span class="n">files</span> <span class="o">=</span> <span class="p">[]</span>
1320 <span class="c"># List of files to be loaded.</span>
1321 <span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
1322 <span class="c"># Dictionary of user options. Keys are option names.</span>
1323
1324 <span class="k">if</span> <span class="mi">0</span><span class="p">:</span> <span class="c"># use lm.options.get instead.</span>
1325 <span class="bp">self</span><span class="o">.</span><span class="n">script</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The fileName of a script, or None.</span>
1326 <span class="bp">self</span><span class="o">.</span><span class="n">script_name</span> <span class="o">=</span> <span class="bp">None</span>
1327 <span class="bp">self</span><span class="o">.</span><span class="n">script_path</span> <span class="o">=</span> <span class="bp">None</span>
1328 <span class="bp">self</span><span class="o">.</span><span class="n">script_path_w</span> <span class="o">=</span> <span class="bp">None</span>
1329 <span class="bp">self</span><span class="o">.</span><span class="n">screenshot_fn</span> <span class="o">=</span> <span class="bp">None</span>
1330 <span class="bp">self</span><span class="o">.</span><span class="n">selectHeadline</span> <span class="o">=</span> <span class="bp">None</span>
1331 <span class="bp">self</span><span class="o">.</span><span class="n">versionFlag</span> <span class="o">=</span> <span class="bp">False</span>
1332 <span class="bp">self</span><span class="o">.</span><span class="n">windowFlag</span> <span class="o">=</span> <span class="bp">False</span>
1333 <span class="bp">self</span><span class="o">.</span><span class="n">windowSize</span> <span class="o">=</span> <span class="bp">None</span>
1334
1335 <span class="c"># Ivars of *other* classes corresponding to command-line arguments...</span>
1336 <span class="c"># g.app.batchMode Set in createNullGuiWithScript</span>
1337 <span class="c"># g.app.gui = None The gui class.</span>
1338 <span class="c"># g.app.guiArgName The gui name given in --gui option.</span>
1339 <span class="c"># g.app.qt_use_tabs </span>
1340 <span class="c"># g.app.silentMode </span>
1341 <span class="c"># g.app.start_fullscreen </span>
1342 <span class="c"># g.app.start_maximized .</span>
1343 <span class="c"># g.app.start_minimized</span>
1344 <span class="c"># g.app.useIpython</span>
1345 <span class="c"># g.app.use_splash_screen</span>
1346 <span class="c"># g.enableDB --no-cache</span>
1347 <span class="c">#@+node:ekr.20120211121736.10812: *3* LM.Directory &amp; file utils</span>
1348 <span class="c">#@+node:ekr.20120219154958.10481: *4* LM.completeFileName</span>
1349<div class="viewcode-block" id="LoadManager.completeFileName"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.completeFileName">[docs]</a> <span class="k">def</span> <span class="nf">completeFileName</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fileName</span><span class="p">):</span>
1350
1351 <span class="n">fileName</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">toUnicode</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span>
1352 <span class="n">fileName</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span>
1353
1354 <span class="c"># 2011/10/12: don&#39;t add .leo to *any* file.</span>
1355 <span class="k">return</span> <span class="n">fileName</span>
1356 <span class="c">#@+node:ekr.20120209051836.10372: *4* LM.computeLeoSettingsPath</span></div>
1357<div class="viewcode-block" id="LoadManager.computeLeoSettingsPath"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeLeoSettingsPath">[docs]</a> <span class="k">def</span> <span class="nf">computeLeoSettingsPath</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1358
1359 <span class="sd">&#39;&#39;&#39;Return the full path to leoSettings.leo.&#39;&#39;&#39;</span>
1360
1361 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span>
1362 <span class="c"># lm = self</span>
1363 <span class="n">join</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize_join</span>
1364 <span class="n">settings_fn</span> <span class="o">=</span> <span class="s">&#39;leoSettings.leo&#39;</span>
1365 <span class="n">table</span> <span class="o">=</span> <span class="p">(</span>
1366 <span class="c"># First, leoSettings.leo in the home directories.</span>
1367 <span class="n">join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeDir</span><span class="p">,</span> <span class="n">settings_fn</span><span class="p">),</span>
1368 <span class="n">join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeLeoDir</span><span class="p">,</span> <span class="n">settings_fn</span><span class="p">),</span>
1369 <span class="c"># Last, leoSettings.leo in leo/config directory.</span>
1370 <span class="n">join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">globalConfigDir</span><span class="p">,</span> <span class="n">settings_fn</span><span class="p">)</span>
1371 <span class="p">)</span>
1372 <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span>
1373 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;computeLeoSettingsPath&#39;</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">path</span><span class="p">),</span><span class="nb">repr</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
1374 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
1375 <span class="k">break</span>
1376 <span class="k">else</span><span class="p">:</span>
1377 <span class="n">path</span> <span class="o">=</span> <span class="bp">None</span>
1378 <span class="k">return</span> <span class="n">path</span>
1379 <span class="c">#@+node:ekr.20120209051836.10373: *4* LM.computeMyLeoSettingsPath</span></div>
1380<div class="viewcode-block" id="LoadManager.computeMyLeoSettingsPath"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeMyLeoSettingsPath">[docs]</a> <span class="k">def</span> <span class="nf">computeMyLeoSettingsPath</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1381
1382 <span class="sd">&#39;&#39;&#39;Return the full path to myLeoSettings.leo.</span>
1383
1384<span class="sd"> The &quot;footnote&quot;: Get the local directory from lm.files[0]&#39;&#39;&#39;</span>
1385
1386 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span>
1387 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
1388 <span class="n">join</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize_join</span>
1389 <span class="n">settings_fn</span> <span class="o">=</span> <span class="s">&#39;myLeoSettings.leo&#39;</span>
1390
1391 <span class="c"># This seems pointless: we need a machine *directory*.</span>
1392 <span class="c"># For now, however, we&#39;ll keep the existing code as is.</span>
1393 <span class="n">machine_fn</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">computeMachineName</span><span class="p">()</span> <span class="o">+</span> <span class="n">settings_fn</span>
1394
1395 <span class="c"># First, compute the directory of the first loaded file.</span>
1396 <span class="c"># All entries in lm.files are full, absolute paths.</span>
1397 <span class="n">localDir</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_dirname</span><span class="p">(</span><span class="n">lm</span><span class="o">.</span><span class="n">files</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="k">if</span> <span class="n">lm</span><span class="o">.</span><span class="n">files</span> <span class="k">else</span> <span class="bp">None</span>
1398
1399 <span class="n">table</span> <span class="o">=</span> <span class="p">(</span>
1400 <span class="c"># First, myLeoSettings.leo in the local directory</span>
1401 <span class="n">join</span><span class="p">(</span><span class="n">localDir</span><span class="p">,</span> <span class="n">settings_fn</span><span class="p">),</span>
1402
1403 <span class="c"># Next, myLeoSettings.leo in the home directories.</span>
1404 <span class="n">join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeDir</span><span class="p">,</span> <span class="n">settings_fn</span><span class="p">),</span>
1405 <span class="n">join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeLeoDir</span><span class="p">,</span> <span class="n">settings_fn</span><span class="p">),</span>
1406
1407 <span class="c"># Next, &lt;machine-name&gt;myLeoSettings.leo in the home directories.</span>
1408 <span class="n">join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeDir</span><span class="p">,</span> <span class="n">machine_fn</span><span class="p">),</span>
1409 <span class="n">join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeLeoDir</span><span class="p">,</span> <span class="n">machine_fn</span><span class="p">),</span>
1410
1411 <span class="c"># Last, leoSettings.leo in leo/config directory.</span>
1412 <span class="n">join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">globalConfigDir</span><span class="p">,</span> <span class="n">settings_fn</span><span class="p">),</span>
1413 <span class="p">)</span>
1414
1415 <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span>
1416 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;computeMyLeoSettingsPath&#39;</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">path</span><span class="p">),</span><span class="nb">repr</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
1417 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
1418 <span class="k">break</span>
1419 <span class="k">else</span><span class="p">:</span>
1420 <span class="n">path</span> <span class="o">=</span> <span class="bp">None</span>
1421
1422 <span class="k">return</span> <span class="n">path</span>
1423 <span class="c">#@+node:ekr.20120209051836.10252: *4* LM.computeStandardDirectories &amp; helpers</span></div>
1424<div class="viewcode-block" id="LoadManager.computeStandardDirectories"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeStandardDirectories">[docs]</a> <span class="k">def</span> <span class="nf">computeStandardDirectories</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1425
1426 <span class="sd">&#39;&#39;&#39;Compute the locations of standard directories and</span>
1427<span class="sd"> set the corresponding ivars.&#39;&#39;&#39;</span>
1428
1429 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
1430
1431 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">loadDir</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">computeLoadDir</span><span class="p">()</span>
1432 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoDir</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">computeLeoDir</span><span class="p">()</span>
1433 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeDir</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">computeHomeDir</span><span class="p">()</span>
1434 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeLeoDir</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">computeHomeLeoDir</span><span class="p">()</span>
1435 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">globalConfigDir</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">computeGlobalConfigDir</span><span class="p">()</span>
1436
1437 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">extensionsDir</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize_join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">loadDir</span><span class="p">,</span><span class="s">&#39;..&#39;</span><span class="p">,</span><span class="s">&#39;extensions&#39;</span><span class="p">)</span>
1438 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">testDir</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize_join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">loadDir</span><span class="p">,</span><span class="s">&#39;..&#39;</span><span class="p">,</span><span class="s">&#39;test&#39;</span><span class="p">)</span>
1439 <span class="c">#@+node:ekr.20120209051836.10253: *5* lm.computeGlobalConfigDir</span></div>
1440<div class="viewcode-block" id="LoadManager.computeGlobalConfigDir"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeGlobalConfigDir">[docs]</a> <span class="k">def</span> <span class="nf">computeGlobalConfigDir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1441
1442 <span class="c"># lm = self</span>
1443
1444 <span class="c"># To avoid pylint complaints that sys.leo_config_directory does not exist.</span>
1445 <span class="n">leo_config_dir</span> <span class="o">=</span> <span class="p">(</span>
1446 <span class="nb">hasattr</span><span class="p">(</span><span class="n">sys</span><span class="p">,</span><span class="s">&#39;leo_config_directory&#39;</span><span class="p">)</span> <span class="ow">and</span>
1447 <span class="nb">getattr</span><span class="p">(</span><span class="n">sys</span><span class="p">,</span><span class="s">&#39;leo_config_directory&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">None</span><span class="p">)</span>
1448 <span class="k">if</span> <span class="n">leo_config_dir</span><span class="p">:</span>
1449 <span class="n">theDir</span> <span class="o">=</span> <span class="n">leo_config_dir</span>
1450 <span class="k">else</span><span class="p">:</span>
1451 <span class="n">theDir</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">loadDir</span><span class="p">,</span><span class="s">&quot;..&quot;</span><span class="p">,</span><span class="s">&quot;config&quot;</span><span class="p">)</span>
1452 <span class="k">if</span> <span class="n">theDir</span><span class="p">:</span>
1453 <span class="n">theDir</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize</span><span class="p">(</span><span class="n">theDir</span><span class="p">)</span>
1454 <span class="k">if</span> <span class="p">(</span>
1455 <span class="ow">not</span> <span class="n">theDir</span> <span class="ow">or</span>
1456 <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">theDir</span><span class="p">)</span> <span class="ow">or</span>
1457 <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_isdir</span><span class="p">(</span><span class="n">theDir</span><span class="p">)</span>
1458 <span class="p">):</span>
1459 <span class="n">theDir</span> <span class="o">=</span> <span class="bp">None</span>
1460 <span class="k">return</span> <span class="n">theDir</span>
1461 <span class="c">#@+node:ekr.20120209051836.10254: *5* lm.computeHomeDir</span></div>
1462<div class="viewcode-block" id="LoadManager.computeHomeDir"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeHomeDir">[docs]</a> <span class="k">def</span> <span class="nf">computeHomeDir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1463
1464 <span class="sd">&quot;&quot;&quot;Returns the user&#39;s home directory.&quot;&quot;&quot;</span>
1465
1466 <span class="n">home</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&quot;~&quot;</span><span class="p">)</span>
1467 <span class="c"># Windows searches the HOME, HOMEPATH and HOMEDRIVE</span>
1468 <span class="c"># environment vars, then gives up.</span>
1469
1470 <span class="k">if</span> <span class="n">home</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">home</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">home</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;%&#39;</span> <span class="ow">and</span> <span class="n">home</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;%&#39;</span><span class="p">:</span>
1471 <span class="c"># Get the indirect reference to the true home.</span>
1472 <span class="n">home</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="n">home</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span><span class="n">default</span><span class="o">=</span><span class="bp">None</span><span class="p">)</span>
1473
1474 <span class="k">if</span> <span class="n">home</span><span class="p">:</span>
1475 <span class="c"># Important: This returns the _working_ directory if home is None!</span>
1476 <span class="c"># This was the source of the 4.3 .leoID.txt problems.</span>
1477 <span class="n">home</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize</span><span class="p">(</span><span class="n">home</span><span class="p">)</span>
1478 <span class="k">if</span> <span class="p">(</span>
1479 <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">home</span><span class="p">)</span> <span class="ow">or</span>
1480 <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_isdir</span><span class="p">(</span><span class="n">home</span><span class="p">)</span>
1481 <span class="p">):</span>
1482 <span class="n">home</span> <span class="o">=</span> <span class="bp">None</span>
1483
1484 <span class="c"># g.trace(home)</span>
1485 <span class="k">return</span> <span class="n">home</span>
1486 <span class="c">#@+node:ekr.20120209051836.10260: *5* lm.computeHomeLeoDir</span></div>
1487<div class="viewcode-block" id="LoadManager.computeHomeLeoDir"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeHomeLeoDir">[docs]</a> <span class="k">def</span> <span class="nf">computeHomeLeoDir</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1488
1489 <span class="c"># lm = self</span>
1490 <span class="n">homeLeoDir</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize_join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeDir</span><span class="p">,</span><span class="s">&#39;.leo&#39;</span><span class="p">)</span>
1491 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">homeLeoDir</span><span class="p">):</span>
1492 <span class="n">g</span><span class="o">.</span><span class="n">makeAllNonExistentDirectories</span><span class="p">(</span><span class="n">homeLeoDir</span><span class="p">,</span><span class="n">force</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
1493 <span class="k">return</span> <span class="n">homeLeoDir</span>
1494 <span class="c">#@+node:ekr.20120209051836.10255: *5* lm.computeLeoDir</span></div>
1495<div class="viewcode-block" id="LoadManager.computeLeoDir"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeLeoDir">[docs]</a> <span class="k">def</span> <span class="nf">computeLeoDir</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1496
1497 <span class="c"># lm = self</span>
1498 <span class="n">loadDir</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">loadDir</span>
1499 <span class="k">return</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_dirname</span><span class="p">(</span><span class="n">loadDir</span><span class="p">)</span>
1500 <span class="c"># We don&#39;t want the result in sys.path</span>
1501 <span class="c">#@+node:ekr.20120209051836.10256: *5* lm.computeLoadDir</span></div>
1502<div class="viewcode-block" id="LoadManager.computeLoadDir"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeLoadDir">[docs]</a> <span class="k">def</span> <span class="nf">computeLoadDir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1503
1504 <span class="sd">&quot;&quot;&quot;Returns the directory containing leo.py.&quot;&quot;&quot;</span>
1505
1506 <span class="kn">import</span> <span class="nn">sys</span>
1507
1508 <span class="k">try</span><span class="p">:</span>
1509 <span class="c"># Fix a hangnail: on Windows the drive letter returned by</span>
1510 <span class="c"># __file__ is randomly upper or lower case!</span>
1511 <span class="c"># The made for an ugly recent files list.</span>
1512 <span class="n">path</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">__file__</span> <span class="c"># was leo.__file__</span>
1513 <span class="c"># g.trace(repr(path))</span>
1514 <span class="k">if</span> <span class="n">path</span><span class="p">:</span>
1515 <span class="c"># Possible fix for bug 735938:</span>
1516 <span class="c"># Do the following only if path exists.</span>
1517 <span class="c">#@+&lt;&lt; resolve symlinks &gt;&gt;</span>
1518 <span class="c">#@+node:ekr.20120209051836.10257: *6* &lt;&lt; resolve symlinks &gt;&gt;</span>
1519 <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&#39;pyc&#39;</span><span class="p">):</span>
1520 <span class="n">srcfile</span> <span class="o">=</span> <span class="n">path</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
1521 <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">islink</span><span class="p">(</span><span class="n">srcfile</span><span class="p">):</span>
1522 <span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">srcfile</span><span class="p">)</span>
1523 <span class="c">#@-&lt;&lt; resolve symlinks &gt;&gt;</span>
1524 <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">platform</span><span class="o">==</span><span class="s">&#39;win32&#39;</span><span class="p">:</span>
1525 <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">path</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">==</span><span class="s">&#39;:&#39;</span><span class="p">:</span>
1526 <span class="c"># Convert the drive name to upper case.</span>
1527 <span class="n">path</span> <span class="o">=</span> <span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">+</span> <span class="n">path</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
1528
1529
1530 <span class="n">path</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
1531 <span class="n">loadDir</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_dirname</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
1532 <span class="k">else</span><span class="p">:</span> <span class="n">loadDir</span> <span class="o">=</span> <span class="bp">None</span>
1533
1534 <span class="k">if</span> <span class="p">(</span>
1535 <span class="ow">not</span> <span class="n">loadDir</span> <span class="ow">or</span>
1536 <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">loadDir</span><span class="p">)</span> <span class="ow">or</span>
1537 <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_isdir</span><span class="p">(</span><span class="n">loadDir</span><span class="p">)</span>
1538 <span class="p">):</span>
1539 <span class="n">loadDir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span>
1540 <span class="c"># From Marc-Antoine Parent.</span>
1541 <span class="k">if</span> <span class="n">loadDir</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&quot;Contents/Resources&quot;</span><span class="p">):</span>
1542 <span class="n">loadDir</span> <span class="o">+=</span> <span class="s">&quot;/leo/plugins&quot;</span>
1543 <span class="k">else</span><span class="p">:</span>
1544 <span class="n">g</span><span class="o">.</span><span class="n">pr</span><span class="p">(</span><span class="s">&quot;Exception getting load directory&quot;</span><span class="p">)</span>
1545 <span class="n">loadDir</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize</span><span class="p">(</span><span class="n">loadDir</span><span class="p">)</span>
1546 <span class="c"># g.trace(loadDir)</span>
1547 <span class="k">return</span> <span class="n">loadDir</span>
1548 <span class="k">except</span><span class="p">:</span>
1549 <span class="k">print</span><span class="p">(</span><span class="s">&quot;Exception getting load directory&quot;</span><span class="p">)</span>
1550 <span class="k">raise</span>
1551 <span class="c">#@+node:ekr.20120213164030.10697: *5* lm.computeMachineName</span></div>
1552<div class="viewcode-block" id="LoadManager.computeMachineName"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeMachineName">[docs]</a> <span class="k">def</span> <span class="nf">computeMachineName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1553
1554 <span class="sd">&#39;&#39;&#39;Return the name of the current machine, i.e, HOSTNAME.&#39;&#39;&#39;</span>
1555
1556 <span class="c"># This is prepended to leoSettings.leo or myLeoSettings.leo</span>
1557 <span class="c"># to give the machine-specific setting name.</span>
1558 <span class="c"># How can this be worth doing??</span>
1559
1560 <span class="k">try</span><span class="p">:</span>
1561 <span class="kn">import</span> <span class="nn">os</span>
1562 <span class="n">name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">&#39;HOSTNAME&#39;</span><span class="p">)</span>
1563 <span class="k">if</span> <span class="ow">not</span> <span class="n">name</span><span class="p">:</span>
1564 <span class="n">name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">&#39;COMPUTERNAME&#39;</span><span class="p">)</span>
1565 <span class="k">if</span> <span class="ow">not</span> <span class="n">name</span><span class="p">:</span>
1566 <span class="kn">import</span> <span class="nn">socket</span>
1567 <span class="n">name</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">gethostname</span><span class="p">()</span>
1568 <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
1569 <span class="n">name</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
1570
1571 <span class="c"># g.trace(name)</span>
1572
1573 <span class="k">return</span> <span class="n">name</span>
1574 <span class="c">#@+node:ekr.20120211121736.10772: *4* LM.computeWorkbookFileName</span></div>
1575<div class="viewcode-block" id="LoadManager.computeWorkbookFileName"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeWorkbookFileName">[docs]</a> <span class="k">def</span> <span class="nf">computeWorkbookFileName</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1576
1577 <span class="c"># lm = self</span>
1578
1579 <span class="c"># Get the name of the workbook.</span>
1580 <span class="n">fn</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span><span class="n">setting</span><span class="o">=</span><span class="s">&#39;default_leo_file&#39;</span><span class="p">)</span>
1581 <span class="n">fn</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
1582 <span class="k">if</span> <span class="ow">not</span> <span class="n">fn</span><span class="p">:</span> <span class="k">return</span>
1583 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
1584 <span class="k">return</span> <span class="n">fn</span>
1585 <span class="k">elif</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_isabs</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
1586 <span class="c"># Create the file.</span>
1587 <span class="n">g</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&#39;Using default leo file name:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fn</span><span class="p">))</span>
1588 <span class="k">return</span> <span class="n">fn</span>
1589 <span class="k">else</span><span class="p">:</span>
1590 <span class="c"># It&#39;s too risky to open a default file if it is relative.</span>
1591 <span class="k">return</span> <span class="bp">None</span>
1592 <span class="c">#@+node:ekr.20120219154958.10485: *4* LM.reportDirectories</span></div>
1593<div class="viewcode-block" id="LoadManager.reportDirectories"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.reportDirectories">[docs]</a> <span class="k">def</span> <span class="nf">reportDirectories</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">verbose</span><span class="p">):</span>
1594
1595 <span class="k">if</span> <span class="ow">not</span> <span class="n">verbose</span><span class="p">:</span> <span class="k">return</span>
1596
1597 <span class="k">if</span> <span class="mi">1</span><span class="p">:</span> <span class="c"># old</span>
1598
1599 <span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
1600 <span class="k">for</span> <span class="n">kind</span><span class="p">,</span><span class="n">theDir</span> <span class="ow">in</span> <span class="p">(</span>
1601 <span class="p">(</span><span class="s">&quot;load&quot;</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">loadDir</span><span class="p">),</span>
1602 <span class="p">(</span><span class="s">&quot;global config&quot;</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">globalConfigDir</span><span class="p">),</span>
1603 <span class="p">(</span><span class="s">&quot;home&quot;</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeDir</span><span class="p">),</span>
1604 <span class="p">):</span>
1605 <span class="n">g</span><span class="o">.</span><span class="n">blue</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%s</span><span class="s"> dir:&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">kind</span><span class="p">),</span><span class="n">theDir</span><span class="p">)</span>
1606
1607 <span class="k">else</span><span class="p">:</span>
1608 <span class="n">aList</span> <span class="o">=</span> <span class="p">(</span>
1609 <span class="s">&#39;homeDir&#39;</span><span class="p">,</span><span class="s">&#39;homeLeoDir&#39;</span><span class="p">,</span>
1610 <span class="s">&#39;leoDir&#39;</span><span class="p">,</span><span class="s">&#39;loadDir&#39;</span><span class="p">,</span>
1611 <span class="s">&#39;extensionsDir&#39;</span><span class="p">,</span><span class="s">&#39;globalConfigDir&#39;</span><span class="p">)</span>
1612
1613 <span class="k">for</span> <span class="n">ivar</span> <span class="ow">in</span> <span class="n">aList</span><span class="p">:</span>
1614 <span class="n">val</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="p">,</span><span class="n">ivar</span><span class="p">)</span>
1615 <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%20s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">ivar</span><span class="p">),</span><span class="n">val</span><span class="p">)</span>
1616
1617 <span class="c">#@+node:ekr.20120215062153.10740: *3* LM.Settings</span>
1618 <span class="c">#@+node:ekr.20120130101219.10182: *4* lm.computeBindingLetter</span></div>
1619<div class="viewcode-block" id="LoadManager.computeBindingLetter"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeBindingLetter">[docs]</a> <span class="k">def</span> <span class="nf">computeBindingLetter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">kind</span><span class="p">):</span>
1620
1621 <span class="c"># lm = self</span>
1622 <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
1623 <span class="k">return</span> <span class="s">&#39;D&#39;</span>
1624 <span class="n">table</span> <span class="o">=</span> <span class="p">(</span>
1625 <span class="p">(</span><span class="s">&#39;M&#39;</span><span class="p">,</span><span class="s">&#39;myLeoSettings.leo&#39;</span><span class="p">),</span>
1626 <span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">,</span><span class="s">&#39;leoSettings.leo&#39;</span><span class="p">),</span>
1627 <span class="p">(</span><span class="s">&#39;F&#39;</span><span class="p">,</span><span class="s">&#39;.leo&#39;</span><span class="p">),</span>
1628 <span class="p">)</span>
1629 <span class="k">for</span> <span class="n">letter</span><span class="p">,</span><span class="n">kind2</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span>
1630 <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">kind2</span><span class="o">.</span><span class="n">lower</span><span class="p">()):</span>
1631 <span class="k">return</span> <span class="n">letter</span>
1632 <span class="k">else</span><span class="p">:</span>
1633 <span class="k">return</span> <span class="s">&#39;D&#39;</span> <span class="k">if</span> <span class="n">kind</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;mode&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> <span class="k">else</span> <span class="s">&#39;@&#39;</span>
1634 <span class="c">#@+node:ekr.20120223062418.10421: *4* lm.computeLocalSettings (where the crash happened)</span></div>
1635<div class="viewcode-block" id="LoadManager.computeLocalSettings"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeLocalSettings">[docs]</a> <span class="k">def</span> <span class="nf">computeLocalSettings</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">settings_d</span><span class="p">,</span><span class="n">shortcuts_d</span><span class="p">,</span><span class="n">localFlag</span><span class="p">):</span>
1636
1637 <span class="sd">&#39;&#39;&#39;Merge the settings dicts from c&#39;s outline into *new copies of*</span>
1638<span class="sd"> settings_d and shortcuts_d.&#39;&#39;&#39;</span>
1639
1640 <span class="n">trace</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">trace_startup</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
1641 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;lm.computeLocalSettings: </span><span class="si">%s</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span>
1642 <span class="n">c</span><span class="o">.</span><span class="n">shortFileName</span><span class="p">(),</span><span class="n">settings_d</span><span class="p">,</span><span class="n">shortcuts_d</span><span class="p">))</span>
1643
1644 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
1645
1646 <span class="n">shortcuts_d2</span><span class="p">,</span><span class="n">settings_d2</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">createSettingsDicts</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">localFlag</span><span class="p">)</span>
1647
1648 <span class="k">assert</span> <span class="n">shortcuts_d</span>
1649 <span class="k">assert</span> <span class="n">settings_d</span>
1650
1651 <span class="k">if</span> <span class="n">settings_d2</span><span class="p">:</span>
1652 <span class="n">settings_d</span> <span class="o">=</span> <span class="n">settings_d</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
1653 <span class="n">settings_d</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">settings_d2</span><span class="p">)</span>
1654
1655 <span class="k">if</span> <span class="n">shortcuts_d2</span><span class="p">:</span>
1656 <span class="n">shortcuts_d</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">mergeShortcutsDicts</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">shortcuts_d</span><span class="p">,</span><span class="n">shortcuts_d2</span><span class="p">)</span>
1657
1658 <span class="k">return</span> <span class="n">settings_d</span><span class="p">,</span><span class="n">shortcuts_d</span>
1659 <span class="c">#@+node:ekr.20121126202114.3: *4* lm.createDefaultSettingsDicts (New)</span></div>
1660<div class="viewcode-block" id="LoadManager.createDefaultSettingsDicts"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.createDefaultSettingsDicts">[docs]</a> <span class="k">def</span> <span class="nf">createDefaultSettingsDicts</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1661
1662 <span class="sd">&#39;&#39;&#39;Create lm.globalSettingsDict &amp; lm.globalShortcutsDict.&#39;&#39;&#39;</span>
1663
1664 <span class="n">settings_d</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">defaultsDict</span>
1665 <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">settings_d</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">TypedDict</span><span class="p">),</span><span class="n">settings_d</span>
1666 <span class="n">settings_d</span><span class="o">.</span><span class="n">setName</span><span class="p">(</span><span class="s">&#39;lm.globalSettingsDict&#39;</span><span class="p">)</span>
1667
1668 <span class="n">shortcuts_d</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">TypedDictOfLists</span><span class="p">(</span>
1669 <span class="n">name</span><span class="o">=</span><span class="s">&#39;lm.globalShortcutsDict&#39;</span><span class="p">,</span>
1670 <span class="n">keyType</span><span class="o">=</span><span class="nb">type</span><span class="p">(</span><span class="s">&#39;s&#39;</span><span class="p">),</span> <span class="n">valType</span><span class="o">=</span><span class="n">g</span><span class="o">.</span><span class="n">ShortcutInfo</span><span class="p">)</span>
1671
1672 <span class="k">return</span> <span class="n">settings_d</span><span class="p">,</span><span class="n">shortcuts_d</span>
1673 <span class="c">#@+node:ekr.20120214165710.10726: *4* lm.createSettingsDicts</span></div>
1674<div class="viewcode-block" id="LoadManager.createSettingsDicts"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.createSettingsDicts">[docs]</a> <span class="k">def</span> <span class="nf">createSettingsDicts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">localFlag</span><span class="p">):</span>
1675
1676 <span class="kn">import</span> <span class="nn">leo.core.leoConfig</span> <span class="kn">as</span> <span class="nn">leoConfig</span>
1677
1678 <span class="n">parser</span> <span class="o">=</span> <span class="n">leoConfig</span><span class="o">.</span><span class="n">SettingsTreeParser</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">localFlag</span><span class="p">)</span>
1679 <span class="c"># returns the *raw* shortcutsDict, not a *merged* shortcuts dict.</span>
1680
1681 <span class="n">shortcutsDict</span><span class="p">,</span><span class="n">settingsDict</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">traverse</span><span class="p">()</span>
1682
1683 <span class="k">return</span> <span class="n">shortcutsDict</span><span class="p">,</span><span class="n">settingsDict</span>
1684 <span class="c">#@+node:ekr.20120223062418.10414: *4* LM.getPreviousSettings</span></div>
1685<div class="viewcode-block" id="LoadManager.getPreviousSettings"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.getPreviousSettings">[docs]</a> <span class="k">def</span> <span class="nf">getPreviousSettings</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
1686
1687 <span class="sd">&#39;&#39;&#39;Return the settings in effect for fn. Typically,</span>
1688<span class="sd"> this involves pre-reading fn.&#39;&#39;&#39;</span>
1689
1690 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
1691 <span class="n">settingsName</span> <span class="o">=</span> <span class="s">&#39;settings dict for </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">g</span><span class="o">.</span><span class="n">shortFileName</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
1692 <span class="n">shortcutsName</span> <span class="o">=</span> <span class="s">&#39;shortcuts dict for </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">g</span><span class="o">.</span><span class="n">shortFileName</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
1693
1694 <span class="c"># A special case: settings in leoSettings.leo do *not* override</span>
1695 <span class="c"># the global settings, that is, settings in myLeoSettings.leo.</span>
1696 <span class="n">isLeoSettings</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">shortFileName</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">==</span><span class="s">&#39;leosettings.leo&#39;</span>
1697
1698 <span class="k">if</span> <span class="n">fn</span> <span class="ow">and</span> <span class="n">lm</span><span class="o">.</span><span class="n">isLeoFile</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">isLeoSettings</span> <span class="ow">and</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
1699 <span class="c"># Open the file usinging a null gui.</span>
1700 <span class="k">try</span><span class="p">:</span>
1701 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">preReadFlag</span> <span class="o">=</span> <span class="bp">True</span>
1702 <span class="n">c</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">openSettingsFile</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
1703 <span class="k">finally</span><span class="p">:</span>
1704 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">preReadFlag</span> <span class="o">=</span> <span class="bp">False</span>
1705
1706 <span class="c"># Merge the settings from c into *copies* of the global dicts.</span>
1707 <span class="n">d1</span><span class="p">,</span><span class="n">d2</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">computeLocalSettings</span><span class="p">(</span><span class="n">c</span><span class="p">,</span>
1708 <span class="n">lm</span><span class="o">.</span><span class="n">globalSettingsDict</span><span class="p">,</span><span class="n">lm</span><span class="o">.</span><span class="n">globalShortcutsDict</span><span class="p">,</span><span class="n">localFlag</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
1709 <span class="c"># d1 and d2 are copies.</span>
1710 <span class="n">d1</span><span class="o">.</span><span class="n">setName</span><span class="p">(</span><span class="n">settingsName</span><span class="p">)</span>
1711 <span class="n">d2</span><span class="o">.</span><span class="n">setName</span><span class="p">(</span><span class="n">shortcutsName</span><span class="p">)</span>
1712 <span class="k">else</span><span class="p">:</span>
1713 <span class="c"># Get the settings from the globals settings dicts.</span>
1714 <span class="n">d1</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">globalSettingsDict</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">settingsName</span><span class="p">)</span>
1715 <span class="n">d2</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">globalShortcutsDict</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">shortcutsName</span><span class="p">)</span>
1716
1717 <span class="k">return</span> <span class="n">PreviousSettings</span><span class="p">(</span><span class="n">d1</span><span class="p">,</span><span class="n">d2</span><span class="p">)</span>
1718 <span class="c">#@+node:ekr.20120214132927.10723: *4* lm.mergeShortcutsDicts &amp; helpers</span></div>
1719<div class="viewcode-block" id="LoadManager.mergeShortcutsDicts"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.mergeShortcutsDicts">[docs]</a> <span class="k">def</span> <span class="nf">mergeShortcutsDicts</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">old_d</span><span class="p">,</span><span class="n">new_d</span><span class="p">):</span>
1720
1721 <span class="sd">&#39;&#39;&#39;Create a new dict by overriding all shortcuts in old_d by shortcuts in new_d.</span>
1722
1723<span class="sd"> Both old_d and new_d remain unchanged.&#39;&#39;&#39;</span>
1724
1725 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
1726 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
1727
1728 <span class="k">if</span> <span class="ow">not</span> <span class="n">old_d</span><span class="p">:</span> <span class="k">return</span> <span class="n">new_d</span>
1729 <span class="k">if</span> <span class="ow">not</span> <span class="n">new_d</span><span class="p">:</span> <span class="k">return</span> <span class="n">old_d</span>
1730
1731 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
1732 <span class="n">new_n</span><span class="p">,</span><span class="n">old_n</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">new_d</span><span class="o">.</span><span class="n">keys</span><span class="p">())),</span><span class="nb">len</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">old_d</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
1733 <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;new </span><span class="si">%4s</span><span class="s"> </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">new_n</span><span class="p">,</span><span class="nb">id</span><span class="p">(</span><span class="n">new_d</span><span class="p">),</span><span class="n">new_d</span><span class="o">.</span><span class="n">name</span><span class="p">()))</span>
1734 <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;old </span><span class="si">%4s</span><span class="s"> </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">old_n</span><span class="p">,</span><span class="nb">id</span><span class="p">(</span><span class="n">old_d</span><span class="p">),</span><span class="n">old_d</span><span class="o">.</span><span class="n">name</span><span class="p">()))</span>
1735
1736 <span class="n">inverted_old_d</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">invert</span><span class="p">(</span><span class="n">old_d</span><span class="p">)</span>
1737 <span class="n">inverted_new_d</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">invert</span><span class="p">(</span><span class="n">new_d</span><span class="p">)</span>
1738
1739 <span class="c"># Fix bug 951921: check for duplicate shortcuts only in the new file.</span>
1740 <span class="n">lm</span><span class="o">.</span><span class="n">checkForDuplicateShortcuts</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">inverted_new_d</span><span class="p">)</span>
1741
1742 <span class="n">inverted_old_d</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">inverted_new_d</span><span class="p">)</span> <span class="c"># Updates inverted_old_d in place.</span>
1743 <span class="n">result</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">uninvert</span><span class="p">(</span><span class="n">inverted_old_d</span><span class="p">)</span>
1744
1745 <span class="k">return</span> <span class="n">result</span>
1746 <span class="c">#@+node:ekr.20120311070142.9904: *5* lm.checkForDuplicateShortcuts</span></div>
1747<div class="viewcode-block" id="LoadManager.checkForDuplicateShortcuts"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.checkForDuplicateShortcuts">[docs]</a> <span class="k">def</span> <span class="nf">checkForDuplicateShortcuts</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">d</span><span class="p">):</span>
1748
1749 <span class="sd">&#39;&#39;&#39;Check for duplicates in an &quot;inverted&quot; dictionary d</span>
1750<span class="sd"> whose keys are strokes and whose values are lists of ShortcutInfo nodes.</span>
1751
1752<span class="sd"> Duplicates happen only if panes conflict.</span>
1753<span class="sd"> &#39;&#39;&#39;</span>
1754
1755 <span class="c"># lm = self</span>
1756
1757 <span class="c"># Fix bug 951921: check for duplicate shortcuts only in the new file.</span>
1758 <span class="k">for</span> <span class="n">ks</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">keys</span><span class="p">())):</span>
1759 <span class="n">conflict</span><span class="p">,</span><span class="n">panes</span> <span class="o">=</span> <span class="bp">False</span><span class="p">,[</span><span class="s">&#39;all&#39;</span><span class="p">]</span>
1760 <span class="n">aList</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ks</span><span class="p">)</span>
1761 <span class="n">aList2</span> <span class="o">=</span> <span class="p">[</span><span class="n">si</span> <span class="k">for</span> <span class="n">si</span> <span class="ow">in</span> <span class="n">aList</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">si</span><span class="o">.</span><span class="n">pane</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;mode&#39;</span><span class="p">)]</span>
1762 <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aList</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
1763 <span class="k">for</span> <span class="n">si</span> <span class="ow">in</span> <span class="n">aList2</span><span class="p">:</span>
1764 <span class="k">if</span> <span class="n">si</span><span class="o">.</span><span class="n">pane</span> <span class="ow">in</span> <span class="n">panes</span><span class="p">:</span>
1765 <span class="n">conflict</span> <span class="o">=</span> <span class="bp">True</span> <span class="p">;</span> <span class="k">break</span>
1766 <span class="k">else</span><span class="p">:</span>
1767 <span class="n">panes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">si</span><span class="o">.</span><span class="n">pane</span><span class="p">)</span>
1768 <span class="k">if</span> <span class="n">conflict</span><span class="p">:</span>
1769 <span class="n">g</span><span class="o">.</span><span class="n">es_print</span><span class="p">(</span><span class="s">&#39;conflicting key bindings in </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">shortFileName</span><span class="p">()))</span>
1770 <span class="k">for</span> <span class="n">si</span> <span class="ow">in</span> <span class="n">aList2</span><span class="p">:</span>
1771 <span class="n">g</span><span class="o">.</span><span class="n">es_print</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%6s</span><span class="s"> </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">si</span><span class="o">.</span><span class="n">pane</span><span class="p">,</span><span class="n">si</span><span class="o">.</span><span class="n">stroke</span><span class="o">.</span><span class="n">s</span><span class="p">,</span><span class="n">si</span><span class="o">.</span><span class="n">commandName</span><span class="p">))</span>
1772 <span class="c">#@+node:ekr.20120214132927.10724: *5* lm.invert</span></div>
1773<div class="viewcode-block" id="LoadManager.invert"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.invert">[docs]</a> <span class="k">def</span> <span class="nf">invert</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">d</span><span class="p">):</span>
1774
1775 <span class="sd">&#39;&#39;&#39;Invert a shortcut dict whose keys are command names,</span>
1776<span class="sd"> returning a dict whose keys are strokes.&#39;&#39;&#39;</span>
1777
1778 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span> <span class="p">;</span> <span class="n">verbose</span> <span class="o">=</span> <span class="bp">True</span>
1779 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;*&#39;</span><span class="o">*</span><span class="mi">40</span><span class="p">,</span><span class="n">d</span><span class="o">.</span><span class="n">name</span><span class="p">())</span>
1780
1781 <span class="n">result</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">TypedDictOfLists</span><span class="p">(</span>
1782 <span class="n">name</span><span class="o">=</span><span class="s">&#39;inverted </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">d</span><span class="o">.</span><span class="n">name</span><span class="p">(),</span>
1783 <span class="n">keyType</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">KeyStroke</span><span class="p">,</span>
1784 <span class="n">valType</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">ShortcutInfo</span><span class="p">)</span>
1785
1786 <span class="k">for</span> <span class="n">commandName</span> <span class="ow">in</span> <span class="n">d</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
1787 <span class="k">for</span> <span class="n">si</span> <span class="ow">in</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">commandName</span><span class="p">,[]):</span>
1788 <span class="c"># This assert can fail if there is an exception in the ShortcutInfo ctor.</span>
1789 <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">si</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">ShortcutInfo</span><span class="p">),</span><span class="n">si</span>
1790
1791 <span class="n">stroke</span> <span class="o">=</span> <span class="n">si</span><span class="o">.</span><span class="n">stroke</span> <span class="c"># This is canonicalized.</span>
1792 <span class="n">si</span><span class="o">.</span><span class="n">commandName</span> <span class="o">=</span> <span class="n">commandName</span> <span class="c"># Add info.</span>
1793 <span class="k">assert</span> <span class="n">stroke</span>
1794 <span class="k">if</span> <span class="n">trace</span> <span class="ow">and</span> <span class="n">verbose</span><span class="p">:</span>
1795 <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%40s</span><span class="s"> </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">commandName</span><span class="p">,</span><span class="n">stroke</span><span class="p">))</span>
1796 <span class="n">result</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">stroke</span><span class="p">,</span><span class="n">si</span><span class="p">)</span>
1797
1798 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;returns </span><span class="si">%4s</span><span class="s"> </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span>
1799 <span class="nb">len</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">keys</span><span class="p">())),</span><span class="nb">id</span><span class="p">(</span><span class="n">d</span><span class="p">),</span><span class="n">result</span><span class="o">.</span><span class="n">name</span><span class="p">()))</span>
1800 <span class="k">return</span> <span class="n">result</span>
1801 <span class="c">#@+node:ekr.20120214132927.10725: *5* lm.uninvert</span></div>
1802<div class="viewcode-block" id="LoadManager.uninvert"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.uninvert">[docs]</a> <span class="k">def</span> <span class="nf">uninvert</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">d</span><span class="p">):</span>
1803
1804 <span class="sd">&#39;&#39;&#39;Uninvert an inverted shortcut dict whose keys are strokes,</span>
1805<span class="sd"> returning a dict whose keys are command names.&#39;&#39;&#39;</span>
1806
1807 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span> <span class="p">;</span> <span class="n">verbose</span> <span class="o">=</span> <span class="bp">True</span>
1808 <span class="k">if</span> <span class="n">trace</span> <span class="ow">and</span> <span class="n">verbose</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;*&#39;</span><span class="o">*</span><span class="mi">40</span><span class="p">)</span>
1809
1810 <span class="k">assert</span> <span class="n">d</span><span class="o">.</span><span class="n">keyType</span> <span class="o">==</span> <span class="n">g</span><span class="o">.</span><span class="n">KeyStroke</span><span class="p">,</span><span class="n">d</span><span class="o">.</span><span class="n">keyType</span>
1811 <span class="n">result</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">TypedDictOfLists</span><span class="p">(</span>
1812 <span class="n">name</span><span class="o">=</span><span class="s">&#39;uninverted </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">d</span><span class="o">.</span><span class="n">name</span><span class="p">(),</span>
1813 <span class="n">keyType</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="s">&#39;commandName&#39;</span><span class="p">),</span>
1814 <span class="n">valType</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">ShortcutInfo</span><span class="p">)</span>
1815
1816 <span class="k">for</span> <span class="n">stroke</span> <span class="ow">in</span> <span class="n">d</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
1817 <span class="k">for</span> <span class="n">si</span> <span class="ow">in</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">stroke</span><span class="p">,[]):</span>
1818 <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">si</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">ShortcutInfo</span><span class="p">),</span><span class="n">si</span>
1819 <span class="n">commandName</span> <span class="o">=</span> <span class="n">si</span><span class="o">.</span><span class="n">commandName</span>
1820 <span class="k">if</span> <span class="n">trace</span> <span class="ow">and</span> <span class="n">verbose</span><span class="p">:</span>
1821 <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;uninvert </span><span class="si">%20s</span><span class="s"> </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">stroke</span><span class="p">,</span><span class="n">commandName</span><span class="p">))</span>
1822 <span class="k">assert</span> <span class="n">commandName</span>
1823 <span class="n">result</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">commandName</span><span class="p">,</span><span class="n">si</span><span class="p">)</span>
1824
1825 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;returns </span><span class="si">%4s</span><span class="s"> </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span>
1826 <span class="nb">len</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">keys</span><span class="p">())),</span><span class="nb">id</span><span class="p">(</span><span class="n">d</span><span class="p">),</span><span class="n">result</span><span class="o">.</span><span class="n">name</span><span class="p">()))</span>
1827 <span class="k">return</span> <span class="n">result</span>
1828 <span class="c">#@+node:ekr.20120222103014.10312: *4* lm.openSettingsFile</span></div>
1829<div class="viewcode-block" id="LoadManager.openSettingsFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.openSettingsFile">[docs]</a> <span class="k">def</span> <span class="nf">openSettingsFile</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
1830
1831 <span class="sd">&#39;&#39;&#39;Open a settings file with a null gui. Return the commander.</span>
1832
1833<span class="sd"> The caller must init the c.config object.&#39;&#39;&#39;</span>
1834
1835 <span class="n">trace</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">trace_startup</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
1836 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;lm.openSettingsFile: g.app.gui: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span>
1837 <span class="n">g</span><span class="o">.</span><span class="n">shortFileName</span><span class="p">(</span><span class="n">fn</span><span class="p">)))</span>
1838
1839 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
1840 <span class="k">if</span> <span class="ow">not</span> <span class="n">fn</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span>
1841
1842 <span class="n">giveMessage</span> <span class="o">=</span> <span class="p">(</span>
1843 <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unitTesting</span> <span class="ow">and</span>
1844 <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">silentMode</span> <span class="ow">and</span>
1845 <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">batchMode</span><span class="p">)</span>
1846 <span class="c"># and not g.app.inBridge</span>
1847 <span class="k">def</span> <span class="nf">message</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
1848 <span class="c"># This occurs early in startup, so use the following.</span>
1849 <span class="k">if</span> <span class="ow">not</span> <span class="n">giveMessage</span><span class="p">:</span> <span class="k">return</span>
1850 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">:</span>
1851 <span class="n">s</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">toEncodedString</span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="s">&#39;ascii&#39;</span><span class="p">)</span>
1852 <span class="n">g</span><span class="o">.</span><span class="n">blue</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
1853
1854 <span class="n">theFile</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">openLeoOrZipFile</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
1855
1856 <span class="k">if</span> <span class="n">theFile</span><span class="p">:</span>
1857 <span class="n">message</span><span class="p">(</span><span class="s">&#39;reading settings in </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fn</span><span class="p">))</span>
1858
1859 <span class="c"># Changing g.app.gui here is a major hack. It is necessary.</span>
1860 <span class="n">oldGui</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span>
1861 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">nullGui</span>
1862 <span class="n">c</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">newCommander</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
1863 <span class="n">frame</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">frame</span>
1864 <span class="n">frame</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">enable</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
1865 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">lockLog</span><span class="p">()</span>
1866 <span class="n">ok</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">fileCommands</span><span class="o">.</span><span class="n">openLeoFile</span><span class="p">(</span><span class="n">theFile</span><span class="p">,</span><span class="n">fn</span><span class="p">,</span>
1867 <span class="n">readAtFileNodesFlag</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span><span class="n">silent</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
1868 <span class="c"># closes theFile.</span>
1869 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unlockLog</span><span class="p">()</span>
1870 <span class="n">c</span><span class="o">.</span><span class="n">openDirectory</span> <span class="o">=</span> <span class="n">frame</span><span class="o">.</span><span class="n">openDirectory</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_dirname</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
1871 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span> <span class="o">=</span> <span class="n">oldGui</span>
1872 <span class="k">return</span> <span class="n">ok</span> <span class="ow">and</span> <span class="n">c</span> <span class="ow">or</span> <span class="bp">None</span>
1873 <span class="c">#@+node:ekr.20120213081706.10382: *4* lm.readGlobalSettingsFiles (changed)</span></div>
1874<div class="viewcode-block" id="LoadManager.readGlobalSettingsFiles"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.readGlobalSettingsFiles">[docs]</a> <span class="k">def</span> <span class="nf">readGlobalSettingsFiles</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1875
1876 <span class="sd">&#39;&#39;&#39;Read leoSettings.leo and myLeoSettings.leo using a null gui.&#39;&#39;&#39;</span>
1877
1878 <span class="n">trace</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">trace_startup</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
1879 <span class="n">verbose</span> <span class="o">=</span> <span class="bp">False</span>
1880 <span class="n">tag</span> <span class="o">=</span> <span class="s">&#39;lm.readGlobalSettingsFiles&#39;</span>
1881 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
1882
1883 <span class="k">if</span> <span class="n">trace</span> <span class="ow">and</span> <span class="n">g</span><span class="o">.</span><span class="n">trace_startup</span><span class="p">:</span>
1884 <span class="k">print</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&lt;&lt;&lt;&lt;&lt; </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">tag</span><span class="p">)</span>
1885
1886 <span class="c"># Open the standard settings files with a nullGui.</span>
1887 <span class="c"># Important: their commanders do not exist outside this method!</span>
1888 <span class="n">commanders</span> <span class="o">=</span> <span class="p">[</span>
1889 <span class="n">lm</span><span class="o">.</span><span class="n">openSettingsFile</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="p">(</span>
1890 <span class="n">lm</span><span class="o">.</span><span class="n">computeLeoSettingsPath</span><span class="p">(),</span>
1891 <span class="n">lm</span><span class="o">.</span><span class="n">computeMyLeoSettingsPath</span><span class="p">())]</span>
1892
1893 <span class="n">settings_d</span><span class="p">,</span><span class="n">shortcuts_d</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">createDefaultSettingsDicts</span><span class="p">()</span>
1894
1895 <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">commanders</span><span class="p">:</span>
1896 <span class="k">if</span> <span class="n">c</span><span class="p">:</span>
1897 <span class="n">settings_d</span><span class="p">,</span><span class="n">shortcuts_d</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">computeLocalSettings</span><span class="p">(</span>
1898 <span class="n">c</span><span class="p">,</span><span class="n">settings_d</span><span class="p">,</span><span class="n">shortcuts_d</span><span class="p">,</span><span class="n">localFlag</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
1899
1900 <span class="c"># Adjust the name.</span>
1901 <span class="n">shortcuts_d</span><span class="o">.</span><span class="n">setName</span><span class="p">(</span><span class="s">&#39;lm.globalShortcutsDict&#39;</span><span class="p">)</span>
1902
1903 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
1904 <span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
1905 <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">commanders</span><span class="p">:</span>
1906 <span class="k">print</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
1907 <span class="n">lm</span><span class="o">.</span><span class="n">traceSettingsDict</span><span class="p">(</span><span class="n">settings_d</span><span class="p">,</span><span class="n">verbose</span><span class="p">)</span>
1908 <span class="n">lm</span><span class="o">.</span><span class="n">traceShortcutsDict</span><span class="p">(</span><span class="n">shortcuts_d</span><span class="p">,</span><span class="n">verbose</span><span class="p">)</span>
1909 <span class="k">print</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&gt;&gt;&gt;&gt;&gt;</span><span class="si">%s</span><span class="s">...&#39;</span> <span class="o">%</span> <span class="n">tag</span><span class="p">)</span>
1910
1911 <span class="n">lm</span><span class="o">.</span><span class="n">globalSettingsDict</span> <span class="o">=</span> <span class="n">settings_d</span>
1912 <span class="n">lm</span><span class="o">.</span><span class="n">globalShortcutsDict</span> <span class="o">=</span> <span class="n">shortcuts_d</span>
1913 <span class="c">#@+node:ekr.20120214165710.10838: *4* lm.traceSettingsDict</span></div>
1914<div class="viewcode-block" id="LoadManager.traceSettingsDict"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.traceSettingsDict">[docs]</a> <span class="k">def</span> <span class="nf">traceSettingsDict</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
1915
1916 <span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
1917 <span class="k">print</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
1918 <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">keys</span><span class="p">())):</span>
1919 <span class="n">gs</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
1920 <span class="k">print</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%35s</span><span class="s"> </span><span class="si">%17s</span><span class="s"> </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">shortFileName</span><span class="p">(</span><span class="n">gs</span><span class="o">.</span><span class="n">path</span><span class="p">),</span><span class="n">gs</span><span class="o">.</span><span class="n">val</span><span class="p">))</span>
1921 <span class="k">if</span> <span class="n">d</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
1922 <span class="k">else</span><span class="p">:</span>
1923 <span class="k">print</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
1924 <span class="c">#@+node:ekr.20120214165710.10822: *4* lm.traceShortcutsDict</span></div>
1925<div class="viewcode-block" id="LoadManager.traceShortcutsDict"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.traceShortcutsDict">[docs]</a> <span class="k">def</span> <span class="nf">traceShortcutsDict</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
1926
1927 <span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
1928 <span class="k">print</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
1929 <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">d</span><span class="o">.</span><span class="n">keys</span><span class="p">())):</span>
1930 <span class="n">val</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
1931 <span class="c"># print(&#39;%20s %s&#39; % (key,val.dump()))</span>
1932 <span class="k">print</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%35s</span><span class="s"> </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">key</span><span class="p">,[</span><span class="n">z</span><span class="o">.</span><span class="n">stroke</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">val</span><span class="p">]))</span>
1933 <span class="k">if</span> <span class="n">d</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
1934 <span class="k">else</span><span class="p">:</span>
1935 <span class="k">print</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
1936 <span class="c">#@+node:ekr.20120219154958.10452: *3* LM.load</span></div>
1937<div class="viewcode-block" id="LoadManager.load"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.load">[docs]</a> <span class="k">def</span> <span class="nf">load</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fileName</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span><span class="n">pymacs</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
1938
1939 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
1940
1941 <span class="c"># Phase 1: before loading plugins.</span>
1942 <span class="c"># Scan options, set directories and read settings.</span>
1943 <span class="k">if</span> <span class="ow">not</span> <span class="n">lm</span><span class="o">.</span><span class="n">isValidPython</span><span class="p">():</span> <span class="k">return</span>
1944
1945 <span class="n">lm</span><span class="o">.</span><span class="n">doPrePluginsInit</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="n">pymacs</span><span class="p">)</span>
1946 <span class="c"># sets lm.options and lm.files</span>
1947
1948 <span class="k">if</span> <span class="n">lm</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">):</span>
1949 <span class="k">print</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">signon</span><span class="p">)</span>
1950 <span class="k">return</span>
1951 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="p">:</span>
1952 <span class="k">return</span>
1953
1954 <span class="c"># Phase 2: load plugins: the gui has already been set.</span>
1955 <span class="n">g</span><span class="o">.</span><span class="n">doHook</span><span class="p">(</span><span class="s">&quot;start1&quot;</span><span class="p">)</span>
1956 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">killed</span><span class="p">:</span> <span class="k">return</span>
1957
1958 <span class="c"># Phase 3: after loading plugins. Create one or more frames.</span>
1959 <span class="n">ok</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">doPostPluginsInit</span><span class="p">()</span>
1960
1961 <span class="k">if</span> <span class="n">ok</span><span class="p">:</span>
1962 <span class="n">g</span><span class="o">.</span><span class="n">es</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span> <span class="c"># Clears horizontal scrolling in the log pane.</span>
1963 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="o">.</span><span class="n">runMainLoop</span><span class="p">()</span>
1964 <span class="c"># For scripts, the gui is a nullGui.</span>
1965 <span class="c"># and the gui.setScript has already been called.</span>
1966 <span class="c">#@+node:ekr.20120219154958.10477: *4* LM.doPrePluginsInit &amp; helpers</span></div>
1967<div class="viewcode-block" id="LoadManager.doPrePluginsInit"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.doPrePluginsInit">[docs]</a> <span class="k">def</span> <span class="nf">doPrePluginsInit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fileName</span><span class="p">,</span><span class="n">pymacs</span><span class="p">):</span>
1968
1969 <span class="sd">&#39;&#39;&#39; Scan options, set directories and read settings.&#39;&#39;&#39;</span>
1970
1971 <span class="c"># trace = False</span>
1972 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
1973 <span class="n">lm</span><span class="o">.</span><span class="n">computeStandardDirectories</span><span class="p">()</span>
1974 <span class="n">lm</span><span class="o">.</span><span class="n">adjustSysPath</span><span class="p">()</span>
1975
1976 <span class="c"># Scan the options as early as possible.</span>
1977 <span class="n">lm</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="n">options</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">scanOptions</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="n">pymacs</span><span class="p">)</span>
1978 <span class="c"># also sets lm.files.</span>
1979
1980 <span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;version&#39;</span><span class="p">):</span>
1981 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">computeSignon</span><span class="p">()</span>
1982 <span class="k">return</span>
1983
1984 <span class="n">script</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;script&#39;</span><span class="p">)</span>
1985 <span class="n">verbose</span> <span class="o">=</span> <span class="n">script</span> <span class="ow">is</span> <span class="bp">None</span>
1986
1987 <span class="c"># Init the app.</span>
1988 <span class="n">lm</span><span class="o">.</span><span class="n">initApp</span><span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
1989 <span class="n">lm</span><span class="o">.</span><span class="n">reportDirectories</span><span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
1990
1991 <span class="c"># Read settings *after* setting g.app.config and *before* opening plugins.</span>
1992 <span class="c"># This means if-gui has effect only in per-file settings.</span>
1993 <span class="n">lm</span><span class="o">.</span><span class="n">readGlobalSettingsFiles</span><span class="p">()</span>
1994 <span class="c"># reads only standard settings files, using a null gui.</span>
1995 <span class="c"># uses lm.files[0] to compute the local directory</span>
1996 <span class="c"># that might contain myLeoSettings.leo.</span>
1997
1998 <span class="c"># Read the recent files file.</span>
1999 <span class="n">localConfigFile</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">files</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">lm</span><span class="o">.</span><span class="n">files</span> <span class="k">else</span> <span class="bp">None</span>
2000 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">recentFilesManager</span><span class="o">.</span><span class="n">readRecentFiles</span><span class="p">(</span><span class="n">localConfigFile</span><span class="p">)</span>
2001
2002 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">setGlobalDb</span><span class="p">()</span>
2003
2004 <span class="c"># Create the gui after reading options and settings.</span>
2005 <span class="n">lm</span><span class="o">.</span><span class="n">createGui</span><span class="p">(</span><span class="n">pymacs</span><span class="p">)</span>
2006
2007 <span class="c"># We can&#39;t print the signon until we know the gui.</span>
2008 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">computeSignon</span><span class="p">()</span> <span class="c"># Set app.signon/signon2 for commanders.</span>
2009 <span class="c">#@+node:ekr.20120219154958.10478: *5* LM.createGui</span></div>
2010<div class="viewcode-block" id="LoadManager.createGui"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.createGui">[docs]</a> <span class="k">def</span> <span class="nf">createGui</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">pymacs</span><span class="p">):</span>
2011
2012 <span class="n">trace</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">trace_startup</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
2013 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">==================== LM.createGui&#39;</span><span class="p">)</span>
2014
2015 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2016
2017 <span class="n">gui_option</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;gui&#39;</span><span class="p">)</span>
2018 <span class="n">windowFlag</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;windowFlag&#39;</span><span class="p">)</span>
2019 <span class="n">script</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;script&#39;</span><span class="p">)</span>
2020
2021 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="p">:</span>
2022 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span> <span class="o">==</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">nullGui</span><span class="p">:</span>
2023 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># Enable g.app.createDefaultGui </span>
2024 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">createDefaultGui</span><span class="p">(</span><span class="n">__file__</span><span class="p">)</span>
2025 <span class="k">else</span><span class="p">:</span>
2026 <span class="c"># This can happen when launching Leo from IPython.</span>
2027 <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;g.app.gui&#39;</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="p">)</span>
2028 <span class="k">elif</span> <span class="n">gui_option</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
2029 <span class="k">if</span> <span class="n">script</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">windowFlag</span><span class="p">:</span>
2030 <span class="c"># Always use null gui for scripts.</span>
2031 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">createNullGuiWithScript</span><span class="p">(</span><span class="n">script</span><span class="p">)</span>
2032 <span class="k">else</span><span class="p">:</span>
2033 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">createDefaultGui</span><span class="p">(</span><span class="n">__file__</span><span class="p">)</span>
2034 <span class="k">else</span><span class="p">:</span>
2035 <span class="n">lm</span><span class="o">.</span><span class="n">createSpecialGui</span><span class="p">(</span><span class="n">gui_option</span><span class="p">,</span><span class="n">pymacs</span><span class="p">,</span><span class="n">script</span><span class="p">,</span><span class="n">windowFlag</span><span class="p">)</span>
2036 <span class="c">#@+node:ekr.20120219154958.10479: *5* LM.createSpecialGui</span></div>
2037<div class="viewcode-block" id="LoadManager.createSpecialGui"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.createSpecialGui">[docs]</a> <span class="k">def</span> <span class="nf">createSpecialGui</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">gui</span><span class="p">,</span><span class="n">pymacs</span><span class="p">,</span><span class="n">script</span><span class="p">,</span><span class="n">windowFlag</span><span class="p">):</span>
2038
2039 <span class="c"># lm = self</span>
2040
2041 <span class="k">if</span> <span class="n">pymacs</span><span class="p">:</span>
2042 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">createNullGuiWithScript</span><span class="p">(</span><span class="n">script</span><span class="o">=</span><span class="bp">None</span><span class="p">)</span>
2043 <span class="k">elif</span> <span class="n">script</span><span class="p">:</span>
2044 <span class="k">if</span> <span class="n">windowFlag</span><span class="p">:</span>
2045 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">createDefaultGui</span><span class="p">()</span>
2046 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="o">.</span><span class="n">setScript</span><span class="p">(</span><span class="n">script</span><span class="o">=</span><span class="n">script</span><span class="p">)</span>
2047 <span class="n">sys</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
2048 <span class="k">else</span><span class="p">:</span>
2049 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">createNullGuiWithScript</span><span class="p">(</span><span class="n">script</span><span class="o">=</span><span class="n">script</span><span class="p">)</span>
2050 <span class="k">else</span><span class="p">:</span>
2051 <span class="c"># assert g.app.guiArgName</span>
2052 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">createDefaultGui</span><span class="p">()</span>
2053 <span class="c">#@+node:ekr.20120219154958.10480: *5* LM.adjustSysPath</span></div>
2054<div class="viewcode-block" id="LoadManager.adjustSysPath"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.adjustSysPath">[docs]</a> <span class="k">def</span> <span class="nf">adjustSysPath</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2055
2056 <span class="sd">&#39;&#39;&#39;Adjust sys.path to enable imports as usual with Leo.</span>
2057
2058<span class="sd"> This method is no longer needed:</span>
2059
2060<span class="sd"> 1. g.importModule will import from the</span>
2061<span class="sd"> &#39;external&#39; or &#39;extensions&#39; folders as needed</span>
2062<span class="sd"> without altering sys.path.</span>
2063
2064<span class="sd"> 2. Plugins now do fully qualified imports.</span>
2065<span class="sd"> &#39;&#39;&#39;</span>
2066
2067 <span class="k">pass</span>
2068 <span class="c">#@+node:ekr.20120219154958.10482: *5* LM.getDefaultFile</span></div>
2069<div class="viewcode-block" id="LoadManager.getDefaultFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.getDefaultFile">[docs]</a> <span class="k">def</span> <span class="nf">getDefaultFile</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2070
2071 <span class="c"># Get the name of the workbook.</span>
2072 <span class="n">fn</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span><span class="s">&#39;default_leo_file&#39;</span><span class="p">)</span>
2073 <span class="n">fn</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
2074 <span class="k">if</span> <span class="ow">not</span> <span class="n">fn</span><span class="p">:</span> <span class="k">return</span>
2075
2076 <span class="c"># g.trace(g.os_path_exists(fn),fn)</span>
2077
2078 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
2079 <span class="k">return</span> <span class="n">fn</span>
2080 <span class="k">elif</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_isabs</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
2081 <span class="c"># Create the file.</span>
2082 <span class="n">g</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&#39;Using default leo file name:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fn</span><span class="p">))</span>
2083 <span class="k">return</span> <span class="n">fn</span>
2084 <span class="k">else</span><span class="p">:</span>
2085 <span class="c"># It&#39;s too risky to open a default file if it is relative.</span>
2086 <span class="k">return</span> <span class="bp">None</span>
2087 <span class="c">#@+node:ekr.20120219154958.10484: *5* LM.initApp</span></div>
2088<div class="viewcode-block" id="LoadManager.initApp"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.initApp">[docs]</a> <span class="k">def</span> <span class="nf">initApp</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">verbose</span><span class="p">):</span>
2089
2090 <span class="n">trace</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">trace_startup</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
2091 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;LM.initApp&#39;</span><span class="p">)</span>
2092
2093 <span class="k">assert</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">loadManager</span>
2094
2095 <span class="kn">import</span> <span class="nn">leo.core.leoConfig</span> <span class="kn">as</span> <span class="nn">leoConfig</span>
2096 <span class="kn">import</span> <span class="nn">leo.core.leoNodes</span> <span class="kn">as</span> <span class="nn">leoNodes</span>
2097 <span class="kn">import</span> <span class="nn">leo.core.leoPlugins</span> <span class="kn">as</span> <span class="nn">leoPlugins</span>
2098 <span class="kn">import</span> <span class="nn">leo.core.leoSessions</span> <span class="kn">as</span> <span class="nn">leoSessions</span>
2099
2100 <span class="c"># Import leoIPython only if requested. The import is quite slow.</span>
2101 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">useIpython</span><span class="p">:</span>
2102 <span class="kn">import</span> <span class="nn">leo.core.leoIPython</span> <span class="kn">as</span> <span class="nn">leoIPython</span>
2103 <span class="c"># Use the GlobalIPythonManager created during the import process.</span>
2104 <span class="c"># This ensures that only one copy is ever created.</span>
2105 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">ipm</span> <span class="o">=</span> <span class="n">leoIPython</span><span class="o">.</span><span class="n">g_ipm</span>
2106
2107 <span class="c"># Make sure we call the new leoPlugins.init top-level function.</span>
2108 <span class="c"># This prevents a crash when run is called repeatedly from</span>
2109 <span class="c"># IPython&#39;s lleo extension.</span>
2110 <span class="n">leoPlugins</span><span class="o">.</span><span class="n">init</span><span class="p">()</span>
2111
2112 <span class="c"># Force the user to set g.app.leoID.</span>
2113 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">setLeoID</span><span class="p">(</span><span class="n">verbose</span><span class="o">=</span><span class="n">verbose</span><span class="p">)</span>
2114
2115 <span class="c"># Create early classes *after* doing plugins.init()</span>
2116 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">recentFilesManager</span> <span class="o">=</span> <span class="n">RecentFilesManager</span><span class="p">()</span>
2117 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">config</span> <span class="o">=</span> <span class="n">leoConfig</span><span class="o">.</span><span class="n">GlobalConfigManager</span><span class="p">()</span>
2118 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">nodeIndices</span> <span class="o">=</span> <span class="n">leoNodes</span><span class="o">.</span><span class="n">nodeIndices</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">leoID</span><span class="p">)</span>
2119 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">sessionManager</span> <span class="o">=</span> <span class="n">leoSessions</span><span class="o">.</span><span class="n">SessionManager</span><span class="p">()</span>
2120
2121 <span class="c"># Complete the plugins class last.</span>
2122 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">pluginsController</span><span class="o">.</span><span class="n">finishCreate</span><span class="p">()</span>
2123 <span class="c">#@+node:ekr.20120219154958.10486: *5* LM.scanOptions &amp; helper</span></div>
2124<div class="viewcode-block" id="LoadManager.scanOptions"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.scanOptions">[docs]</a> <span class="k">def</span> <span class="nf">scanOptions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fileName</span><span class="p">,</span><span class="n">pymacs</span><span class="p">):</span>
2125
2126 <span class="sd">&#39;&#39;&#39;Handle all options, remove them from sys.argv and set lm.options.&#39;&#39;&#39;</span>
2127
2128 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span>
2129 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2130
2131 <span class="c"># print(&#39;scanOptions&#39;,sys.argv)</span>
2132
2133 <span class="c"># Note: this automatically implements the --help option.</span>
2134 <span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">()</span>
2135 <span class="n">add</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span>
2136
2137 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--fullscreen&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span>
2138 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;start fullscreen (Qt only)&#39;</span><span class="p">)</span>
2139 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--ipython&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span><span class="n">dest</span><span class="o">=</span><span class="s">&quot;use_ipython&quot;</span><span class="p">,</span>
2140 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;enable ipython support&#39;</span><span class="p">)</span>
2141 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--gui&#39;</span><span class="p">,</span>
2142 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;gui to use (qt/qttabs)&#39;</span><span class="p">)</span>
2143 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--maximized&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span>
2144 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;start maximized (Qt only)&#39;</span><span class="p">)</span>
2145 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--minimized&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span>
2146 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;start minimized&#39;</span><span class="p">)</span>
2147 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--no-cache&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&#39;no_cache&#39;</span><span class="p">,</span>
2148 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;disable reading of cached files&#39;</span><span class="p">)</span>
2149 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--no-plugins&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&#39;no_plugins&#39;</span><span class="p">,</span>
2150 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;disable all plugins&#39;</span><span class="p">)</span>
2151 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--no-splash&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&#39;no_splash_screen&#39;</span><span class="p">,</span>
2152 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;disable the splash screen&#39;</span><span class="p">)</span>
2153 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--screen-shot&#39;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&#39;screenshot_fn&#39;</span><span class="p">,</span>
2154 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;take a screen shot and then exit&#39;</span><span class="p">)</span>
2155 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--script&#39;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&quot;script&quot;</span><span class="p">,</span>
2156 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;execute a script and then exit&#39;</span><span class="p">)</span>
2157 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--script-window&#39;</span><span class="p">,</span><span class="n">dest</span><span class="o">=</span><span class="s">&quot;script_window&quot;</span><span class="p">,</span>
2158 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;open a window for scripts&#39;</span><span class="p">)</span>
2159 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--select&#39;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&#39;select&#39;</span><span class="p">,</span>
2160 <span class="n">help</span><span class="o">=</span><span class="s">&#39;headline or gnx of node to select&#39;</span><span class="p">)</span>
2161 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--session-restore&#39;</span><span class="p">,</span><span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span><span class="n">dest</span><span class="o">=</span><span class="s">&#39;session_restore&#39;</span><span class="p">,</span>
2162 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;restore previously saved session tabs at startup&#39;</span><span class="p">)</span>
2163 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--session-save&#39;</span><span class="p">,</span><span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span><span class="n">dest</span><span class="o">=</span><span class="s">&#39;session_save&#39;</span><span class="p">,</span>
2164 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;save session tabs on exit&#39;</span><span class="p">)</span>
2165 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--silent&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&quot;silent&quot;</span><span class="p">,</span>
2166 <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;disable all log messages&#39;</span><span class="p">)</span>
2167 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--version&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">&quot;store_true&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&quot;version&quot;</span><span class="p">,</span>
2168 <span class="n">help</span><span class="o">=</span><span class="s">&#39;print version number and exit&#39;</span><span class="p">)</span>
2169 <span class="n">add</span><span class="p">(</span><span class="s">&#39;--window-size&#39;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&#39;window_size&#39;</span><span class="p">,</span>
2170 <span class="n">help</span><span class="o">=</span><span class="s">&#39;initial window size in height x width format&#39;</span><span class="p">)</span>
2171
2172 <span class="c"># Parse the options, and remove them from sys.argv.</span>
2173 <span class="n">options</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
2174 <span class="n">sys</span><span class="o">.</span><span class="n">argv</span> <span class="o">=</span> <span class="p">[</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="p">;</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
2175 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
2176 <span class="c"># print(&#39;scanOptions:&#39;,sys.argv)</span>
2177 <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;options&#39;</span><span class="p">,</span><span class="n">options</span><span class="p">)</span>
2178
2179 <span class="c"># Handle the args...</span>
2180
2181 <span class="c"># --gui</span>
2182 <span class="n">gui</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">gui</span>
2183
2184 <span class="k">if</span> <span class="n">gui</span><span class="p">:</span>
2185 <span class="n">gui</span> <span class="o">=</span> <span class="n">gui</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
2186 <span class="k">if</span> <span class="n">gui</span> <span class="o">==</span> <span class="s">&#39;qttabs&#39;</span><span class="p">:</span>
2187 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">qt_use_tabs</span> <span class="o">=</span> <span class="bp">True</span>
2188 <span class="k">elif</span> <span class="n">gui</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;curses&#39;</span><span class="p">,</span><span class="s">&#39;qt&#39;</span><span class="p">,</span><span class="s">&#39;null&#39;</span><span class="p">):</span>
2189 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">qt_use_tabs</span> <span class="o">=</span> <span class="bp">False</span>
2190 <span class="k">else</span><span class="p">:</span>
2191 <span class="k">print</span><span class="p">(</span><span class="s">&#39;scanOptions: unknown gui: </span><span class="si">%s</span><span class="s">. Using qt gui&#39;</span> <span class="o">%</span> <span class="n">gui</span><span class="p">)</span>
2192 <span class="n">gui</span> <span class="o">=</span> <span class="s">&#39;qt&#39;</span>
2193 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">qt_use_tabs</span> <span class="o">=</span> <span class="bp">False</span>
2194 <span class="k">elif</span> <span class="n">sys</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s">&#39;darwin&#39;</span><span class="p">:</span>
2195 <span class="n">gui</span> <span class="o">=</span> <span class="s">&#39;qt&#39;</span>
2196 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">qt_use_tabs</span> <span class="o">=</span> <span class="bp">False</span>
2197 <span class="k">else</span><span class="p">:</span>
2198 <span class="n">gui</span> <span class="o">=</span> <span class="s">&#39;qttabs&#39;</span>
2199 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">qt_use_tabs</span> <span class="o">=</span> <span class="bp">True</span>
2200
2201 <span class="k">assert</span> <span class="n">gui</span>
2202 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">guiArgName</span> <span class="o">=</span> <span class="n">gui</span>
2203
2204 <span class="c"># --ipython</span>
2205 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">useIpython</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">use_ipython</span>
2206 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;g.app.useIpython&#39;</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">useIpython</span><span class="p">)</span>
2207
2208 <span class="c"># --fullscreen</span>
2209 <span class="c"># --minimized</span>
2210 <span class="c"># --maximized</span>
2211 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">start_fullscreen</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">fullscreen</span>
2212 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">start_maximized</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">maximized</span>
2213 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">start_minimized</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">minimized</span>
2214
2215 <span class="c"># --no-cache</span>
2216 <span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">no_cache</span><span class="p">:</span>
2217 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;scanOptions: disabling caching&#39;</span><span class="p">)</span>
2218 <span class="n">g</span><span class="o">.</span><span class="n">enableDB</span> <span class="o">=</span> <span class="bp">False</span>
2219
2220 <span class="c"># --no-plugins</span>
2221 <span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">no_plugins</span><span class="p">:</span>
2222 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;scanOptions: disabling plugins&#39;</span><span class="p">)</span>
2223 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">enablePlugins</span> <span class="o">=</span> <span class="bp">False</span>
2224
2225 <span class="c"># --no-splash</span>
2226 <span class="c"># g.trace(&#39;--no-splash&#39;,options.no_splash_screen)</span>
2227 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">use_splash_screen</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">options</span><span class="o">.</span><span class="n">no_splash_screen</span>
2228
2229 <span class="c"># --screen-shot=fn</span>
2230 <span class="n">screenshot_fn</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">screenshot_fn</span>
2231 <span class="k">if</span> <span class="n">screenshot_fn</span><span class="p">:</span>
2232 <span class="n">screenshot_fn</span> <span class="o">=</span> <span class="n">screenshot_fn</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s">&#39;&quot;&#39;</span><span class="p">)</span>
2233 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;scanOptions: screenshot_fn&#39;</span><span class="p">,</span><span class="n">screenshot_fn</span><span class="p">)</span>
2234
2235 <span class="c"># --script</span>
2236 <span class="n">script_path</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">script</span>
2237 <span class="n">script_path_w</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">script_window</span>
2238 <span class="k">if</span> <span class="n">script_path</span> <span class="ow">and</span> <span class="n">script_path_w</span><span class="p">:</span>
2239 <span class="n">parser</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;--script and script-window are mutually exclusive&quot;</span><span class="p">)</span>
2240
2241 <span class="n">script_name</span> <span class="o">=</span> <span class="n">script_path</span> <span class="ow">or</span> <span class="n">script_path_w</span>
2242 <span class="k">if</span> <span class="n">script_name</span><span class="p">:</span>
2243 <span class="n">script_name</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize_join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">loadDir</span><span class="p">,</span><span class="n">script_name</span><span class="p">)</span>
2244 <span class="n">script</span><span class="p">,</span><span class="n">e</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">readFileIntoString</span><span class="p">(</span><span class="n">script_name</span><span class="p">,</span><span class="n">kind</span><span class="o">=</span><span class="s">&#39;script:&#39;</span><span class="p">)</span>
2245 <span class="c"># print(&#39;script_name&#39;,repr(script_name))</span>
2246 <span class="k">else</span><span class="p">:</span>
2247 <span class="n">script</span> <span class="o">=</span> <span class="bp">None</span>
2248 <span class="c"># if trace: print(&#39;scanOptions: no script&#39;)</span>
2249
2250 <span class="c"># --select</span>
2251 <span class="n">select</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">select</span>
2252 <span class="k">if</span> <span class="n">select</span><span class="p">:</span>
2253 <span class="n">select</span> <span class="o">=</span> <span class="n">select</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s">&#39;&quot;&#39;</span><span class="p">)</span>
2254 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;scanOptions: select&#39;</span><span class="p">,</span><span class="nb">repr</span><span class="p">(</span><span class="n">select</span><span class="p">))</span>
2255
2256 <span class="c"># --session-restore &amp; --session-save</span>
2257 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">restore_session</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">options</span><span class="o">.</span><span class="n">session_restore</span><span class="p">)</span>
2258 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">save_session</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">options</span><span class="o">.</span><span class="n">session_save</span><span class="p">)</span>
2259
2260 <span class="c"># --silent</span>
2261 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">silentMode</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">silent</span>
2262 <span class="c"># print(&#39;scanOptions: silentMode&#39;,g.app.silentMode)</span>
2263
2264 <span class="c"># --version: print the version and exit.</span>
2265 <span class="n">versionFlag</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">version</span>
2266
2267
2268 <span class="c"># --window-size</span>
2269 <span class="n">windowSize</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">window_size</span>
2270 <span class="k">if</span> <span class="n">windowSize</span><span class="p">:</span>
2271 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;windowSize&#39;</span><span class="p">,</span><span class="nb">repr</span><span class="p">(</span><span class="n">windowSize</span><span class="p">))</span>
2272 <span class="k">try</span><span class="p">:</span>
2273 <span class="n">h</span><span class="p">,</span><span class="n">w</span> <span class="o">=</span> <span class="n">windowSize</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;x&#39;</span><span class="p">)</span>
2274 <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
2275 <span class="n">windowSize</span> <span class="o">=</span> <span class="bp">None</span>
2276 <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;bad --window-size:&#39;</span><span class="p">,</span><span class="n">windowSize</span><span class="p">)</span>
2277
2278 <span class="c"># Compute lm.files</span>
2279 <span class="n">lm</span><span class="o">.</span><span class="n">files</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">computeFilesList</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span>
2280
2281 <span class="c"># Post-process the options.</span>
2282 <span class="k">if</span> <span class="n">pymacs</span><span class="p">:</span>
2283 <span class="n">script</span> <span class="o">=</span> <span class="bp">None</span>
2284 <span class="n">windowFlag</span> <span class="o">=</span> <span class="bp">None</span>
2285
2286 <span class="c"># Compute the return values.</span>
2287 <span class="n">windowFlag</span> <span class="o">=</span> <span class="n">script</span> <span class="ow">and</span> <span class="n">script_path_w</span>
2288 <span class="n">d</span> <span class="o">=</span> <span class="p">{</span>
2289 <span class="s">&#39;gui&#39;</span><span class="p">:</span><span class="n">gui</span><span class="p">,</span>
2290 <span class="s">&#39;screenshot_fn&#39;</span><span class="p">:</span><span class="n">screenshot_fn</span><span class="p">,</span>
2291 <span class="s">&#39;script&#39;</span><span class="p">:</span><span class="n">script</span><span class="p">,</span>
2292 <span class="s">&#39;select&#39;</span><span class="p">:</span><span class="n">select</span><span class="p">,</span>
2293 <span class="s">&#39;version&#39;</span><span class="p">:</span><span class="n">versionFlag</span><span class="p">,</span>
2294 <span class="s">&#39;windowFlag&#39;</span><span class="p">:</span><span class="n">windowFlag</span><span class="p">,</span>
2295 <span class="s">&#39;windowSize&#39;</span><span class="p">:</span><span class="n">windowSize</span><span class="p">,</span>
2296 <span class="p">}</span>
2297
2298 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
2299
2300 <span class="k">return</span> <span class="n">d</span>
2301 <span class="c">#@+node:ekr.20120219154958.10483: *6* LM.computeFilesList</span></div>
2302<div class="viewcode-block" id="LoadManager.computeFilesList"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.computeFilesList">[docs]</a> <span class="k">def</span> <span class="nf">computeFilesList</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fileName</span><span class="p">):</span>
2303
2304 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2305 <span class="n">files</span> <span class="o">=</span> <span class="p">[]</span>
2306 <span class="k">if</span> <span class="n">fileName</span><span class="p">:</span>
2307 <span class="n">files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span>
2308
2309 <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
2310 <span class="k">if</span> <span class="n">arg</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;-&#39;</span><span class="p">):</span>
2311 <span class="n">files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
2312
2313 <span class="k">return</span> <span class="p">[</span><span class="n">lm</span><span class="o">.</span><span class="n">completeFileName</span><span class="p">(</span><span class="n">z</span><span class="p">)</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">files</span><span class="p">]</span>
2314 <span class="c">#@+node:ekr.20120219154958.10487: *4* LM.doPostPluginsInit &amp; helpers</span></div>
2315<div class="viewcode-block" id="LoadManager.doPostPluginsInit"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.doPostPluginsInit">[docs]</a> <span class="k">def</span> <span class="nf">doPostPluginsInit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2316
2317 <span class="sd">&#39;&#39;&#39;Create a Leo window for each file in the lm.files list.&#39;&#39;&#39;</span>
2318
2319 <span class="c"># Clear g.app.initing _before_ creating commanders.</span>
2320 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2321 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">initing</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># &quot;idle&quot; hooks may now call g.app.forceShutdown.</span>
2322
2323 <span class="c"># Create the main frame. Show it and all queued messages.</span>
2324
2325 <span class="c"># g.trace(lm.files)</span>
2326 <span class="k">if</span> <span class="n">lm</span><span class="o">.</span><span class="n">files</span><span class="p">:</span>
2327 <span class="n">c1</span> <span class="o">=</span> <span class="bp">None</span>
2328 <span class="k">for</span> <span class="n">fn</span> <span class="ow">in</span> <span class="n">lm</span><span class="o">.</span><span class="n">files</span><span class="p">:</span>
2329 <span class="n">c</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">loadLocalFile</span><span class="p">(</span><span class="n">fn</span><span class="p">,</span><span class="n">gui</span><span class="o">=</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="p">,</span><span class="n">old_c</span><span class="o">=</span><span class="bp">None</span><span class="p">)</span>
2330 <span class="c"># Will give a &quot;not found&quot; message.</span>
2331 <span class="c"># This can fail if the file is open in another instance of Leo.</span>
2332 <span class="c"># assert c</span>
2333 <span class="k">if</span> <span class="ow">not</span> <span class="n">c1</span><span class="p">:</span> <span class="n">c1</span> <span class="o">=</span> <span class="n">c</span>
2334 <span class="k">else</span><span class="p">:</span>
2335 <span class="n">c</span> <span class="o">=</span> <span class="n">c1</span> <span class="o">=</span> <span class="bp">None</span>
2336
2337 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">restore_session</span><span class="p">:</span>
2338 <span class="n">m</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">sessionManager</span>
2339 <span class="k">if</span> <span class="n">m</span><span class="p">:</span>
2340 <span class="n">aList</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">load_snapshot</span><span class="p">()</span>
2341 <span class="k">if</span> <span class="n">aList</span><span class="p">:</span>
2342 <span class="n">m</span><span class="o">.</span><span class="n">load_session</span><span class="p">(</span><span class="n">c1</span><span class="p">,</span><span class="n">aList</span><span class="p">)</span>
2343 <span class="n">c</span> <span class="o">=</span> <span class="n">c1</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">c</span>
2344
2345 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">:</span>
2346 <span class="c"># Create an empty frame.</span>
2347 <span class="n">fn</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">computeWorkbookFileName</span><span class="p">()</span>
2348 <span class="n">c</span> <span class="o">=</span> <span class="n">c1</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">loadLocalFile</span><span class="p">(</span><span class="n">fn</span><span class="p">,</span><span class="n">gui</span><span class="o">=</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="p">,</span><span class="n">old_c</span><span class="o">=</span><span class="bp">None</span><span class="p">)</span>
2349
2350 <span class="c"># Put the focus in the first-opened file.</span>
2351 <span class="n">fileName</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">files</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">lm</span><span class="o">.</span><span class="n">files</span> <span class="k">else</span> <span class="bp">None</span>
2352 <span class="n">c</span> <span class="o">=</span> <span class="n">c1</span>
2353
2354 <span class="c"># For qttabs gui, select the first-loaded tab.</span>
2355 <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="p">,</span><span class="s">&#39;frameFactory&#39;</span><span class="p">):</span>
2356 <span class="n">factory</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="o">.</span><span class="n">frameFactory</span>
2357 <span class="k">if</span> <span class="n">factory</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">factory</span><span class="p">,</span><span class="s">&#39;setTabForCommander&#39;</span><span class="p">):</span>
2358 <span class="n">factory</span><span class="o">.</span><span class="n">setTabForCommander</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
2359
2360 <span class="c"># Fix bug 844953: tell Unity which menu to use.</span>
2361 <span class="n">c</span><span class="o">.</span><span class="n">enableMenuBar</span><span class="p">()</span>
2362
2363 <span class="c"># Do the final inits.</span>
2364 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">logInited</span> <span class="o">=</span> <span class="bp">True</span>
2365 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">initComplete</span> <span class="o">=</span> <span class="bp">True</span>
2366 <span class="n">c</span><span class="o">.</span><span class="n">setLog</span><span class="p">()</span>
2367 <span class="c"># print(&#39;doPostPluginsInit: ***** set log&#39;)</span>
2368
2369 <span class="n">g</span><span class="o">.</span><span class="n">doHook</span><span class="p">(</span><span class="s">&quot;start2&quot;</span><span class="p">,</span><span class="n">c</span><span class="o">=</span><span class="n">c</span><span class="p">,</span><span class="n">p</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">p</span><span class="p">,</span><span class="n">v</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">p</span><span class="p">,</span><span class="n">fileName</span><span class="o">=</span><span class="n">fileName</span><span class="p">)</span>
2370 <span class="n">g</span><span class="o">.</span><span class="n">enableIdleTimeHook</span><span class="p">(</span><span class="n">idleTimeDelay</span><span class="o">=</span><span class="mi">500</span><span class="p">)</span>
2371 <span class="n">lm</span><span class="o">.</span><span class="n">initFocusAndDraw</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">fileName</span><span class="p">)</span>
2372
2373 <span class="n">screenshot_fn</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;screenshot_fn&#39;</span><span class="p">)</span>
2374 <span class="k">if</span> <span class="n">screenshot_fn</span><span class="p">:</span>
2375 <span class="n">lm</span><span class="o">.</span><span class="n">make_screen_shot</span><span class="p">(</span><span class="n">screenshot_fn</span><span class="p">)</span>
2376 <span class="k">return</span> <span class="bp">False</span> <span class="c"># Force an immediate exit.</span>
2377
2378 <span class="k">return</span> <span class="bp">True</span>
2379 <span class="c">#@+node:ekr.20120219154958.10488: *5* LM.initFocusAndDraw</span></div>
2380<div class="viewcode-block" id="LoadManager.initFocusAndDraw"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.initFocusAndDraw">[docs]</a> <span class="k">def</span> <span class="nf">initFocusAndDraw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">fileName</span><span class="p">):</span>
2381
2382 <span class="n">w</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="o">.</span><span class="n">get_focus</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
2383
2384 <span class="k">if</span> <span class="ow">not</span> <span class="n">fileName</span><span class="p">:</span>
2385 <span class="n">c</span><span class="o">.</span><span class="n">redraw</span><span class="p">()</span>
2386
2387 <span class="c"># Respect c&#39;s focus wishes if posssible.</span>
2388 <span class="k">if</span> <span class="n">w</span> <span class="o">!=</span> <span class="n">c</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">body</span><span class="o">.</span><span class="n">bodyCtrl</span> <span class="ow">and</span> <span class="n">w</span> <span class="o">!=</span> <span class="n">c</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">tree</span><span class="o">.</span><span class="n">canvas</span><span class="p">:</span>
2389 <span class="n">c</span><span class="o">.</span><span class="n">bodyWantsFocus</span><span class="p">()</span>
2390 <span class="n">c</span><span class="o">.</span><span class="n">k</span><span class="o">.</span><span class="n">showStateAndMode</span><span class="p">(</span><span class="n">w</span><span class="p">)</span>
2391
2392 <span class="n">c</span><span class="o">.</span><span class="n">outerUpdate</span><span class="p">()</span>
2393 <span class="c">#@+node:ekr.20120219154958.10489: *5* LM.make_screen_shot</span></div>
2394<div class="viewcode-block" id="LoadManager.make_screen_shot"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.make_screen_shot">[docs]</a> <span class="k">def</span> <span class="nf">make_screen_shot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
2395
2396 <span class="sd">&#39;&#39;&#39;Create a screenshot of the present Leo outline and save it to path.&#39;&#39;&#39;</span>
2397
2398 <span class="c"># g.trace(&#39;runLeo.py&#39;,fn)</span>
2399
2400 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">gui</span><span class="o">.</span><span class="n">guiName</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;qt&#39;</span><span class="p">:</span>
2401 <span class="n">m</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">loadOnePlugin</span><span class="p">(</span><span class="s">&#39;screenshots&#39;</span><span class="p">)</span>
2402 <span class="n">m</span><span class="o">.</span><span class="n">make_screen_shot</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
2403 <span class="c">#@+node:ekr.20120219154958.10491: *4* LM.isValidPython &amp; emergency (Tk) dialog class</span></div>
2404<div class="viewcode-block" id="LoadManager.isValidPython"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.isValidPython">[docs]</a> <span class="k">def</span> <span class="nf">isValidPython</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2405
2406 <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s">&#39;cli&#39;</span><span class="p">:</span>
2407 <span class="k">return</span> <span class="bp">True</span>
2408
2409 <span class="n">minimum_python_version</span> <span class="o">=</span> <span class="s">&#39;2.6&#39;</span>
2410
2411 <span class="n">message</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span><span class="se">\</span>
2412<span class="s"> Leo requires Python </span><span class="si">%s</span><span class="s"> or higher.</span>
2413<span class="s"> You may download Python from</span>
2414<span class="s"> http://python.org/download/</span>
2415<span class="s"> &quot;&quot;&quot;</span> <span class="o">%</span> <span class="n">minimum_python_version</span>
2416
2417 <span class="k">try</span><span class="p">:</span>
2418 <span class="n">version</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">)])</span>
2419 <span class="n">ok</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">CheckVersion</span><span class="p">(</span><span class="n">version</span><span class="p">,</span><span class="n">minimum_python_version</span><span class="p">)</span>
2420 <span class="k">if</span> <span class="ow">not</span> <span class="n">ok</span><span class="p">:</span>
2421 <span class="k">print</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
2422 <span class="k">try</span><span class="p">:</span>
2423 <span class="c"># g.app.gui does not exist yet.</span>
2424 <span class="kn">import</span> <span class="nn">Tkinter</span> <span class="kn">as</span> <span class="nn">Tk</span>
2425 <span class="c">#@+&lt;&lt; define emergency dialog class &gt;&gt;</span>
2426 <span class="c">#@+node:ekr.20120219154958.10492: *5* &lt;&lt; define emergency dialog class &gt;&gt;</span>
2427 <span class="k">class</span> <span class="nc">emergencyDialog</span><span class="p">:</span>
2428
2429 <span class="sd">&quot;&quot;&quot;A class that creates an Tkinter dialog with a single OK button.&quot;&quot;&quot;</span>
2430
2431 <span class="c">#@+others</span>
2432 <span class="c">#@+node:ekr.20120219154958.10493: *6* __init__ (emergencyDialog)</span>
2433 <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">title</span><span class="p">,</span><span class="n">message</span><span class="p">):</span>
2434
2435 <span class="sd">&quot;&quot;&quot;Constructor for the leoTkinterDialog class.&quot;&quot;&quot;</span>
2436
2437 <span class="bp">self</span><span class="o">.</span><span class="n">answer</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># Value returned from run()</span>
2438 <span class="bp">self</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="n">title</span>
2439 <span class="bp">self</span><span class="o">.</span><span class="n">message</span><span class="o">=</span><span class="n">message</span>
2440
2441 <span class="bp">self</span><span class="o">.</span><span class="n">buttonsFrame</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># Frame to hold typical dialog buttons.</span>
2442 <span class="bp">self</span><span class="o">.</span><span class="n">defaultButtonCommand</span> <span class="o">=</span> <span class="bp">None</span>
2443 <span class="c"># Command to call when user closes the window</span>
2444 <span class="c"># by clicking the close box.</span>
2445 <span class="bp">self</span><span class="o">.</span><span class="n">frame</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The outermost frame.</span>
2446 <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># Created in createTopFrame.</span>
2447 <span class="bp">self</span><span class="o">.</span><span class="n">top</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The toplevel Tk widget.</span>
2448
2449 <span class="bp">self</span><span class="o">.</span><span class="n">createTopFrame</span><span class="p">()</span>
2450 <span class="n">buttons</span> <span class="o">=</span> <span class="p">{</span><span class="s">&quot;text&quot;</span><span class="p">:</span><span class="s">&quot;OK&quot;</span><span class="p">,</span><span class="s">&quot;command&quot;</span><span class="p">:</span><span class="bp">self</span><span class="o">.</span><span class="n">okButton</span><span class="p">,</span><span class="s">&quot;default&quot;</span><span class="p">:</span><span class="bp">True</span><span class="p">},</span>
2451 <span class="c"># Singleton tuple.</span>
2452 <span class="bp">self</span><span class="o">.</span><span class="n">createButtons</span><span class="p">(</span><span class="n">buttons</span><span class="p">)</span>
2453 <span class="bp">self</span><span class="o">.</span><span class="n">top</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="s">&quot;&lt;Key&gt;&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">onKey</span><span class="p">)</span>
2454 <span class="c">#@+node:ekr.20120219154958.10494: *6* createButtons</span>
2455 <span class="k">def</span> <span class="nf">createButtons</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">buttons</span><span class="p">):</span>
2456
2457 <span class="sd">&quot;&quot;&quot;Create a row of buttons.</span>
2458
2459<span class="sd"> buttons is a list of dictionaries containing</span>
2460<span class="sd"> the properties of each button.&quot;&quot;&quot;</span>
2461
2462 <span class="k">assert</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frame</span><span class="p">)</span>
2463 <span class="bp">self</span><span class="o">.</span><span class="n">buttonsFrame</span> <span class="o">=</span> <span class="n">f</span> <span class="o">=</span> <span class="n">Tk</span><span class="o">.</span><span class="n">Frame</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">top</span><span class="p">)</span>
2464 <span class="n">f</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">side</span><span class="o">=</span><span class="s">&quot;top&quot;</span><span class="p">,</span><span class="n">padx</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
2465
2466 <span class="c"># Buttons is a list of dictionaries, with an empty dictionary</span>
2467 <span class="c"># at the end if there is only one entry.</span>
2468 <span class="n">buttonList</span> <span class="o">=</span> <span class="p">[]</span>
2469 <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">buttons</span><span class="p">:</span>
2470 <span class="n">text</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;text&quot;</span><span class="p">,</span><span class="s">&quot;&lt;missing button name&gt;&quot;</span><span class="p">)</span>
2471 <span class="n">isDefault</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;default&quot;</span><span class="p">,</span><span class="bp">False</span><span class="p">)</span>
2472 <span class="n">underline</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;underline&quot;</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
2473 <span class="n">command</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&quot;command&quot;</span><span class="p">,</span><span class="bp">None</span><span class="p">)</span>
2474 <span class="n">bd</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">choose</span><span class="p">(</span><span class="n">isDefault</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
2475
2476 <span class="n">b</span> <span class="o">=</span> <span class="n">Tk</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="n">f</span><span class="p">,</span><span class="n">width</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span><span class="n">text</span><span class="o">=</span><span class="n">text</span><span class="p">,</span><span class="n">bd</span><span class="o">=</span><span class="n">bd</span><span class="p">,</span>
2477 <span class="n">underline</span><span class="o">=</span><span class="n">underline</span><span class="p">,</span><span class="n">command</span><span class="o">=</span><span class="n">command</span><span class="p">)</span>
2478 <span class="n">b</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">side</span><span class="o">=</span><span class="s">&quot;left&quot;</span><span class="p">,</span><span class="n">padx</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span><span class="n">pady</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
2479 <span class="n">buttonList</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
2480
2481 <span class="k">if</span> <span class="n">isDefault</span> <span class="ow">and</span> <span class="n">command</span><span class="p">:</span>
2482 <span class="bp">self</span><span class="o">.</span><span class="n">defaultButtonCommand</span> <span class="o">=</span> <span class="n">command</span>
2483
2484 <span class="k">return</span> <span class="n">buttonList</span>
2485 <span class="c">#@+node:ekr.20120219154958.10495: *6* createTopFrame</span>
2486 <span class="k">def</span> <span class="nf">createTopFrame</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2487
2488 <span class="sd">&quot;&quot;&quot;Create the Tk.Toplevel widget for a leoTkinterDialog.&quot;&quot;&quot;</span>
2489
2490 <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">=</span> <span class="n">Tk</span><span class="o">.</span><span class="n">Tk</span><span class="p">()</span>
2491 <span class="bp">self</span><span class="o">.</span><span class="n">top</span> <span class="o">=</span> <span class="n">Tk</span><span class="o">.</span><span class="n">Toplevel</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span><span class="p">)</span>
2492 <span class="bp">self</span><span class="o">.</span><span class="n">top</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
2493 <span class="bp">self</span><span class="o">.</span><span class="n">root</span><span class="o">.</span><span class="n">withdraw</span><span class="p">()</span>
2494
2495 <span class="bp">self</span><span class="o">.</span><span class="n">frame</span> <span class="o">=</span> <span class="n">Tk</span><span class="o">.</span><span class="n">Frame</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">top</span><span class="p">)</span>
2496 <span class="bp">self</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">side</span><span class="o">=</span><span class="s">&quot;top&quot;</span><span class="p">,</span><span class="n">expand</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="n">fill</span><span class="o">=</span><span class="s">&quot;both&quot;</span><span class="p">)</span>
2497
2498 <span class="n">label</span> <span class="o">=</span> <span class="n">Tk</span><span class="o">.</span><span class="n">Label</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">frame</span><span class="p">,</span><span class="n">text</span><span class="o">=</span><span class="n">message</span><span class="p">,</span><span class="n">bg</span><span class="o">=</span><span class="s">&#39;white&#39;</span><span class="p">)</span>
2499 <span class="n">label</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">pady</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
2500 <span class="c">#@+node:ekr.20120219154958.10496: *6* okButton</span>
2501 <span class="k">def</span> <span class="nf">okButton</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2502
2503 <span class="sd">&quot;&quot;&quot;Do default click action in ok button.&quot;&quot;&quot;</span>
2504
2505 <span class="bp">self</span><span class="o">.</span><span class="n">top</span><span class="o">.</span><span class="n">destroy</span><span class="p">()</span>
2506 <span class="bp">self</span><span class="o">.</span><span class="n">top</span> <span class="o">=</span> <span class="bp">None</span>
2507
2508 <span class="c">#@+node:ekr.20120219154958.10497: *6* onKey</span>
2509 <span class="k">def</span> <span class="nf">onKey</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">event</span><span class="p">):</span>
2510
2511 <span class="sd">&quot;&quot;&quot;Handle Key events in askOk dialogs.&quot;&quot;&quot;</span>
2512
2513 <span class="bp">self</span><span class="o">.</span><span class="n">okButton</span><span class="p">()</span>
2514
2515 <span class="k">return</span> <span class="c"># (for Tk) &quot;break&quot;</span>
2516 <span class="c">#@+node:ekr.20120219154958.10498: *6* run</span>
2517 <span class="k">def</span> <span class="nf">run</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2518
2519 <span class="sd">&quot;&quot;&quot;Run the modal emergency dialog.&quot;&quot;&quot;</span>
2520
2521 <span class="bp">self</span><span class="o">.</span><span class="n">top</span><span class="o">.</span><span class="n">geometry</span><span class="p">(</span><span class="s">&quot;</span><span class="si">%d</span><span class="s">x</span><span class="si">%d%+d%+d</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="mi">300</span><span class="p">,</span><span class="mi">200</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">))</span>
2522 <span class="bp">self</span><span class="o">.</span><span class="n">top</span><span class="o">.</span><span class="n">lift</span><span class="p">()</span>
2523
2524 <span class="bp">self</span><span class="o">.</span><span class="n">top</span><span class="o">.</span><span class="n">grab_set</span><span class="p">()</span> <span class="c"># Make the dialog a modal dialog.</span>
2525 <span class="bp">self</span><span class="o">.</span><span class="n">root</span><span class="o">.</span><span class="n">wait_window</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">top</span><span class="p">)</span>
2526 <span class="c">#@-others</span>
2527 <span class="c">#@-&lt;&lt; define emergency dialog class &gt;&gt;</span>
2528 <span class="n">d</span> <span class="o">=</span> <span class="n">emergencyDialog</span><span class="p">(</span>
2529 <span class="n">title</span><span class="o">=</span><span class="s">&#39;Python Version Error&#39;</span><span class="p">,</span>
2530 <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">)</span>
2531 <span class="n">d</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
2532 <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
2533 <span class="k">pass</span>
2534 <span class="k">return</span> <span class="n">ok</span>
2535 <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
2536 <span class="k">print</span><span class="p">(</span><span class="s">&quot;isValidPython: unexpected exception: g.CheckVersion&quot;</span><span class="p">)</span>
2537 <span class="n">traceback</span><span class="o">.</span><span class="n">print_exc</span><span class="p">()</span>
2538 <span class="k">return</span> <span class="mi">0</span>
2539 <span class="c">#@+node:ekr.20120223062418.10393: *4* LM.loadLocalFile &amp; helper</span></div>
2540<div class="viewcode-block" id="LoadManager.loadLocalFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.loadLocalFile">[docs]</a> <span class="k">def</span> <span class="nf">loadLocalFile</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">,</span><span class="n">gui</span><span class="p">,</span><span class="n">old_c</span><span class="p">):</span>
2541
2542 <span class="sd">&#39;&#39;&#39;Completely read a file, creating the corresonding outline.</span>
2543
2544<span class="sd"> 1. If fn is an existing .leo file (possibly zipped), read it twice:</span>
2545<span class="sd"> the first time with a nullGui to discover settings,</span>
2546<span class="sd"> the second time with the requested gui to create the outline.</span>
2547
2548<span class="sd"> 2. If fn is an external file:</span>
2549<span class="sd"> get settings from the leoSettings.leo and myLeoSetting.leo, then</span>
2550<span class="sd"> create a &quot;wrapper&quot; outline continain an @file node for the external file.</span>
2551
2552<span class="sd"> 3. If fn is empty:</span>
2553<span class="sd"> get settings from the leoSettings.leo and myLeoSetting.leo or default settings,</span>
2554<span class="sd"> or open an empty outline.</span>
2555<span class="sd"> &#39;&#39;&#39;</span>
2556
2557 <span class="n">trace</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">trace_startup</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
2558 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;lm.loadLocalFile: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fn</span><span class="p">))</span>
2559
2560 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2561
2562 <span class="c"># Step 0: Return if the file is already open.</span>
2563 <span class="n">fn</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
2564 <span class="k">if</span> <span class="n">fn</span><span class="p">:</span>
2565 <span class="n">c</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">findOpenFile</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
2566 <span class="k">if</span> <span class="n">c</span><span class="p">:</span>
2567 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;Already open: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fn</span><span class="p">))</span>
2568 <span class="k">return</span> <span class="n">c</span>
2569
2570 <span class="c"># Step 1: get the previous settings.</span>
2571 <span class="c"># For .leo files (and zipped .leo files) this pre-reads the file in a null gui.</span>
2572 <span class="c"># Otherwise, get settings from leoSettings.leo, myLeoSettings.leo, or default settings.</span>
2573 <span class="n">previousSettings</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">getPreviousSettings</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
2574
2575 <span class="c"># Step 2: open the outline in the requested gui.</span>
2576 <span class="c"># For .leo files (and zipped .leo file) this opens the file a second time.</span>
2577 <span class="n">c</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">openFileByName</span><span class="p">(</span><span class="n">fn</span><span class="p">,</span><span class="n">gui</span><span class="p">,</span><span class="n">old_c</span><span class="p">,</span><span class="n">previousSettings</span><span class="p">)</span>
2578 <span class="k">return</span> <span class="n">c</span>
2579 <span class="c">#@+node:ekr.20120223062418.10394: *5* LM.openFileByName &amp; helpers</span></div>
2580<div class="viewcode-block" id="LoadManager.openFileByName"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.openFileByName">[docs]</a> <span class="k">def</span> <span class="nf">openFileByName</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">,</span><span class="n">gui</span><span class="p">,</span><span class="n">old_c</span><span class="p">,</span><span class="n">previousSettings</span><span class="p">):</span>
2581
2582 <span class="sd">&#39;&#39;&#39;Read the local file whose full path is fn using the given gui.</span>
2583<span class="sd"> fn may be a Leo file (including .leo or zipped file) or an external file.</span>
2584
2585<span class="sd"> This is not a pre-read: the previousSettings always exist and</span>
2586<span class="sd"> the commander created here persists until the user closes the outline.</span>
2587
2588<span class="sd"> Reads the entire outline if fn exists and is a .leo file or zipped file.</span>
2589<span class="sd"> Creates an empty outline if fn is a non-existent Leo file.</span>
2590<span class="sd"> Creates an wrapper outline if fn is an external file, existing or not.</span>
2591<span class="sd"> &#39;&#39;&#39;</span>
2592
2593 <span class="n">trace</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">trace_startup</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
2594 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;lm.openFileByName: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">shortFileName</span><span class="p">(</span><span class="n">fn</span><span class="p">)))</span>
2595 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2596
2597 <span class="c"># Disable the log.</span>
2598 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">setLog</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
2599 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">lockLog</span><span class="p">()</span>
2600
2601 <span class="c"># Create the a commander for the .leo file.</span>
2602 <span class="c"># Important. The settings don&#39;t matter for pre-reads!</span>
2603 <span class="c"># For second read, the settings for the file are *exactly* previousSettings.</span>
2604 <span class="n">c</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">newCommander</span><span class="p">(</span><span class="n">fileName</span><span class="o">=</span><span class="n">fn</span><span class="p">,</span><span class="n">gui</span><span class="o">=</span><span class="n">gui</span><span class="p">,</span>
2605 <span class="n">previousSettings</span><span class="o">=</span><span class="n">previousSettings</span><span class="p">)</span>
2606 <span class="k">assert</span> <span class="n">c</span>
2607
2608 <span class="c"># Open the file, if possible.</span>
2609 <span class="n">g</span><span class="o">.</span><span class="n">doHook</span><span class="p">(</span><span class="s">&#39;open0&#39;</span><span class="p">)</span>
2610 <span class="n">theFile</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">openLeoOrZipFile</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
2611
2612 <span class="c"># Enable the log.</span>
2613 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unlockLog</span><span class="p">()</span>
2614 <span class="n">c</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">log</span><span class="o">.</span><span class="n">enable</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
2615
2616 <span class="c"># Phase 2: Create the outline.</span>
2617 <span class="n">g</span><span class="o">.</span><span class="n">doHook</span><span class="p">(</span><span class="s">&quot;open1&quot;</span><span class="p">,</span><span class="n">old_c</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span><span class="n">c</span><span class="o">=</span><span class="n">c</span><span class="p">,</span><span class="n">new_c</span><span class="o">=</span><span class="n">c</span><span class="p">,</span><span class="n">fileName</span><span class="o">=</span><span class="n">fn</span><span class="p">)</span>
2618 <span class="k">if</span> <span class="n">theFile</span><span class="p">:</span>
2619 <span class="n">readAtFileNodesFlag</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">previousSettings</span><span class="p">)</span>
2620 <span class="c">### The log is not set properly here. ###</span>
2621 <span class="n">ok</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">readOpenedLeoFile</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">gui</span><span class="p">,</span><span class="n">fn</span><span class="p">,</span><span class="n">readAtFileNodesFlag</span><span class="p">,</span><span class="n">theFile</span><span class="p">)</span>
2622 <span class="c"># Call c.fileCommands.openLeoFile to read the .leo file.</span>
2623 <span class="k">if</span> <span class="ow">not</span> <span class="n">ok</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span>
2624 <span class="k">else</span><span class="p">:</span>
2625 <span class="c"># Create a wrapper .leo file if:</span>
2626 <span class="c"># a) fn is a .leo file that does not exist or</span>
2627 <span class="c"># b) fn is an external file, existing or not.</span>
2628 <span class="n">lm</span><span class="o">.</span><span class="n">initWrapperLeoFile</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">fn</span><span class="p">)</span>
2629 <span class="n">g</span><span class="o">.</span><span class="n">doHook</span><span class="p">(</span><span class="s">&quot;open2&quot;</span><span class="p">,</span><span class="n">old_c</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span><span class="n">c</span><span class="o">=</span><span class="n">c</span><span class="p">,</span><span class="n">new_c</span><span class="o">=</span><span class="n">c</span><span class="p">,</span><span class="n">fileName</span><span class="o">=</span><span class="n">fn</span><span class="p">)</span>
2630
2631 <span class="c"># Phase 3: Complete the initialization.</span>
2632 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">writeWaitingLog</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
2633 <span class="n">c</span><span class="o">.</span><span class="n">setLog</span><span class="p">()</span>
2634 <span class="n">lm</span><span class="o">.</span><span class="n">createMenu</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">fn</span><span class="p">)</span>
2635 <span class="n">lm</span><span class="o">.</span><span class="n">finishOpen</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
2636 <span class="k">return</span> <span class="n">c</span>
2637 <span class="c">#@+node:ekr.20120223062418.10405: *6* LM.createMenu</span></div>
2638<div class="viewcode-block" id="LoadManager.createMenu"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.createMenu">[docs]</a> <span class="k">def</span> <span class="nf">createMenu</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">fn</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
2639
2640 <span class="c"># lm = self</span>
2641
2642 <span class="c"># Create the menu as late as possible so it can use user commands.</span>
2643 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">doHook</span><span class="p">(</span><span class="s">&quot;menu1&quot;</span><span class="p">,</span><span class="n">c</span><span class="o">=</span><span class="n">c</span><span class="p">,</span><span class="n">p</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">p</span><span class="p">,</span><span class="n">v</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">p</span><span class="p">):</span>
2644 <span class="n">c</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">menu</span><span class="o">.</span><span class="n">createMenuBar</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">frame</span><span class="p">)</span>
2645 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">recentFilesManager</span><span class="o">.</span><span class="n">updateRecentFiles</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
2646 <span class="n">g</span><span class="o">.</span><span class="n">doHook</span><span class="p">(</span><span class="s">&quot;menu2&quot;</span><span class="p">,</span><span class="n">c</span><span class="o">=</span><span class="n">c</span><span class="p">,</span><span class="n">p</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">p</span><span class="p">,</span><span class="n">v</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">p</span><span class="p">)</span>
2647 <span class="n">g</span><span class="o">.</span><span class="n">doHook</span><span class="p">(</span><span class="s">&quot;after-create-leo-frame&quot;</span><span class="p">,</span><span class="n">c</span><span class="o">=</span><span class="n">c</span><span class="p">)</span>
2648 <span class="n">g</span><span class="o">.</span><span class="n">doHook</span><span class="p">(</span><span class="s">&quot;after-create-leo-frame2&quot;</span><span class="p">,</span><span class="n">c</span><span class="o">=</span><span class="n">c</span><span class="p">)</span>
2649
2650 <span class="c"># Fix bug 844953: tell Unity which menu to use.</span>
2651 <span class="n">c</span><span class="o">.</span><span class="n">enableMenuBar</span><span class="p">()</span>
2652 <span class="c">#@+node:ekr.20120223062418.10406: *6* LM.findOpenFile</span></div>
2653<div class="viewcode-block" id="LoadManager.findOpenFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.findOpenFile">[docs]</a> <span class="k">def</span> <span class="nf">findOpenFile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
2654
2655 <span class="c"># lm = self</span>
2656
2657 <span class="k">def</span> <span class="nf">munge</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
2658 <span class="k">return</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_normpath</span><span class="p">(</span><span class="n">name</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
2659
2660 <span class="k">for</span> <span class="n">frame</span> <span class="ow">in</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">:</span>
2661 <span class="n">c</span> <span class="o">=</span> <span class="n">frame</span><span class="o">.</span><span class="n">c</span>
2662 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_realpath</span><span class="p">(</span><span class="n">munge</span><span class="p">(</span><span class="n">fn</span><span class="p">))</span> <span class="o">==</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_realpath</span><span class="p">(</span><span class="n">munge</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">mFileName</span><span class="p">)):</span>
2663 <span class="n">frame</span><span class="o">.</span><span class="n">bringToFront</span><span class="p">()</span>
2664 <span class="n">c</span><span class="o">.</span><span class="n">setLog</span><span class="p">()</span>
2665 <span class="c"># 2011/11/21: selecting the new tab ensures focus is set.</span>
2666 <span class="n">master</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">frame</span><span class="o">.</span><span class="n">top</span><span class="p">,</span><span class="s">&#39;leo_master&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">frame</span><span class="o">.</span><span class="n">top</span><span class="o">.</span><span class="n">leo_master</span>
2667 <span class="k">if</span> <span class="n">master</span><span class="p">:</span> <span class="c"># frame.top.leo_master is a TabbedTopLevel.</span>
2668 <span class="n">master</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">frame</span><span class="o">.</span><span class="n">c</span><span class="p">)</span>
2669 <span class="n">c</span><span class="o">.</span><span class="n">outerUpdate</span><span class="p">()</span>
2670 <span class="k">return</span> <span class="n">c</span>
2671
2672 <span class="k">return</span> <span class="bp">None</span>
2673 <span class="c">#@+node:ekr.20120223062418.10407: *6* LM.finishOpen</span></div>
2674<div class="viewcode-block" id="LoadManager.finishOpen"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.finishOpen">[docs]</a> <span class="k">def</span> <span class="nf">finishOpen</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">):</span>
2675
2676 <span class="c"># lm = self</span>
2677 <span class="n">k</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">k</span>
2678 <span class="k">assert</span> <span class="n">k</span>
2679
2680 <span class="c"># New in Leo 4.6: provide an official way for very late initialization.</span>
2681 <span class="n">c</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">tree</span><span class="o">.</span><span class="n">initAfterLoad</span><span class="p">()</span>
2682 <span class="n">c</span><span class="o">.</span><span class="n">initAfterLoad</span><span class="p">()</span>
2683 <span class="n">c</span><span class="o">.</span><span class="n">redraw</span><span class="p">()</span>
2684
2685 <span class="c"># chapterController.finishCreate must be called after the first real redraw</span>
2686 <span class="c"># because it requires a valid value for c.rootPosition().</span>
2687 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">chapterController</span><span class="p">:</span> <span class="n">c</span><span class="o">.</span><span class="n">chapterController</span><span class="o">.</span><span class="n">finishCreate</span><span class="p">()</span>
2688 <span class="k">if</span> <span class="n">k</span><span class="p">:</span> <span class="n">k</span><span class="o">.</span><span class="n">setDefaultInputState</span><span class="p">()</span>
2689 <span class="n">c</span><span class="o">.</span><span class="n">initialFocusHelper</span><span class="p">()</span>
2690 <span class="k">if</span> <span class="n">k</span><span class="p">:</span> <span class="n">k</span><span class="o">.</span><span class="n">showStateAndMode</span><span class="p">()</span>
2691 <span class="n">c</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">initCompleteHint</span><span class="p">()</span>
2692
2693 <span class="c">#@+node:ekr.20120223062418.10408: *6* LM.initWrapperLeoFile</span></div>
2694<div class="viewcode-block" id="LoadManager.initWrapperLeoFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.initWrapperLeoFile">[docs]</a> <span class="k">def</span> <span class="nf">initWrapperLeoFile</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
2695
2696 <span class="sd">&#39;&#39;&#39;Create an empty file if the external fn is empty.</span>
2697
2698<span class="sd"> Otherwise, create an @edit or @file node for the external file.</span>
2699<span class="sd"> &#39;&#39;&#39;</span>
2700
2701 <span class="c"># lm = self</span>
2702
2703 <span class="c"># Use the config params to set the size and location of the window.</span>
2704 <span class="n">frame</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">frame</span>
2705 <span class="n">frame</span><span class="o">.</span><span class="n">setInitialWindowGeometry</span><span class="p">()</span>
2706 <span class="n">frame</span><span class="o">.</span><span class="n">deiconify</span><span class="p">()</span>
2707 <span class="n">frame</span><span class="o">.</span><span class="n">lift</span><span class="p">()</span>
2708 <span class="n">frame</span><span class="o">.</span><span class="n">resizePanesToRatio</span><span class="p">(</span><span class="n">frame</span><span class="o">.</span><span class="n">ratio</span><span class="p">,</span><span class="n">frame</span><span class="o">.</span><span class="n">secondary_ratio</span><span class="p">)</span>
2709 <span class="c"># Resize the _new_ frame.</span>
2710
2711 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
2712 <span class="n">p</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">rootPosition</span><span class="p">()</span>
2713 <span class="c"># Create an empty @edit node unless fn is an .leo file.</span>
2714 <span class="n">p</span><span class="o">.</span><span class="n">h</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">shortFileName</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span> <span class="k">if</span> <span class="n">fn</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&#39;.leo&#39;</span><span class="p">)</span> <span class="k">else</span> <span class="s">&#39;@edit </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">fn</span>
2715 <span class="n">c</span><span class="o">.</span><span class="n">selectPosition</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
2716 <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">looksLikeDerivedFile</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
2717 <span class="c"># 2011/10/10: Create an @file node.</span>
2718 <span class="n">p</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">importCommands</span><span class="o">.</span><span class="n">importDerivedFiles</span><span class="p">(</span><span class="n">parent</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">rootPosition</span><span class="p">(),</span>
2719 <span class="n">paths</span><span class="o">=</span><span class="p">[</span><span class="n">fn</span><span class="p">],</span><span class="n">command</span><span class="o">=</span><span class="bp">None</span><span class="p">)</span> <span class="c"># Not undoable.</span>
2720 <span class="k">if</span> <span class="ow">not</span> <span class="n">p</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span>
2721 <span class="k">else</span><span class="p">:</span>
2722 <span class="c"># Create an @edit node.</span>
2723 <span class="n">s</span><span class="p">,</span><span class="n">e</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">readFileIntoString</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
2724 <span class="k">if</span> <span class="n">s</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span>
2725 <span class="n">p</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">rootPosition</span><span class="p">()</span>
2726 <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
2727 <span class="k">if</span> <span class="n">p</span><span class="p">:</span>
2728 <span class="n">p</span><span class="o">.</span><span class="n">setHeadString</span><span class="p">(</span><span class="s">&#39;@edit </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">fn</span><span class="p">)</span>
2729 <span class="n">p</span><span class="o">.</span><span class="n">setBodyString</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
2730 <span class="n">c</span><span class="o">.</span><span class="n">selectPosition</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
2731
2732 <span class="c"># chapterController.finishCreate must be called after the first real redraw</span>
2733 <span class="c"># because it requires a valid value for c.rootPosition().</span>
2734 <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getBool</span><span class="p">(</span><span class="s">&#39;use_chapters&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">chapterController</span><span class="p">:</span>
2735 <span class="n">c</span><span class="o">.</span><span class="n">chapterController</span><span class="o">.</span><span class="n">finishCreate</span><span class="p">()</span>
2736
2737 <span class="n">frame</span><span class="o">.</span><span class="n">c</span><span class="o">.</span><span class="n">setChanged</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
2738 <span class="c"># Mark the outline clean.</span>
2739 <span class="c"># This makes it easy to open non-Leo files for quick study.</span>
2740 <span class="k">return</span> <span class="n">c</span>
2741 <span class="c">#@+node:ekr.20120223062418.10419: *6* LM.isLeoFile &amp; LM.isZippedFile</span></div>
2742<div class="viewcode-block" id="LoadManager.isLeoFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.isLeoFile">[docs]</a> <span class="k">def</span> <span class="nf">isLeoFile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
2743
2744 <span class="k">return</span> <span class="n">fn</span> <span class="ow">and</span> <span class="p">(</span><span class="n">zipfile</span><span class="o">.</span><span class="n">is_zipfile</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span> <span class="ow">or</span> <span class="n">fn</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&#39;.leo&#39;</span><span class="p">))</span>
2745</div>
2746<div class="viewcode-block" id="LoadManager.isZippedFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.isZippedFile">[docs]</a> <span class="k">def</span> <span class="nf">isZippedFile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
2747
2748 <span class="k">return</span> <span class="n">fn</span> <span class="ow">and</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">is_zipfile</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
2749 <span class="c">#@+node:ekr.20120224161905.10030: *6* LM.openLeoOrZipFile</span></div>
2750<div class="viewcode-block" id="LoadManager.openLeoOrZipFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.openLeoOrZipFile">[docs]</a> <span class="k">def</span> <span class="nf">openLeoOrZipFile</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
2751
2752 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2753
2754 <span class="n">zipped</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">isZippedFile</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
2755
2756 <span class="k">if</span> <span class="n">lm</span><span class="o">.</span><span class="n">isLeoFile</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span> <span class="ow">and</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">fn</span><span class="p">):</span>
2757 <span class="k">if</span> <span class="n">zipped</span><span class="p">:</span>
2758 <span class="n">theFile</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">openZipFile</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
2759 <span class="k">else</span><span class="p">:</span>
2760 <span class="n">theFile</span> <span class="o">=</span> <span class="n">lm</span><span class="o">.</span><span class="n">openLeoFile</span><span class="p">(</span><span class="n">fn</span><span class="p">)</span>
2761 <span class="k">else</span><span class="p">:</span>
2762 <span class="n">theFile</span> <span class="o">=</span> <span class="bp">None</span>
2763
2764 <span class="k">return</span> <span class="n">theFile</span>
2765 <span class="c">#@+node:ekr.20120223062418.10416: *6* LM.openLeoFile</span></div>
2766<div class="viewcode-block" id="LoadManager.openLeoFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.openLeoFile">[docs]</a> <span class="k">def</span> <span class="nf">openLeoFile</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
2767
2768 <span class="c"># lm = self</span>
2769 <span class="k">try</span><span class="p">:</span>
2770 <span class="n">theFile</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fn</span><span class="p">,</span><span class="s">&#39;rb&#39;</span><span class="p">)</span>
2771 <span class="k">return</span> <span class="n">theFile</span>
2772 <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
2773 <span class="c"># Do not use string + here: it will fail for non-ascii strings!</span>
2774 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
2775 <span class="n">g</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;can not open:&quot;</span><span class="p">,</span><span class="n">fn</span><span class="p">)</span>
2776 <span class="k">return</span> <span class="bp">None</span>
2777 <span class="c">#@+node:ekr.20120223062418.10410: *6* LM.openZipFile</span></div>
2778<div class="viewcode-block" id="LoadManager.openZipFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.openZipFile">[docs]</a> <span class="k">def</span> <span class="nf">openZipFile</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fn</span><span class="p">):</span>
2779
2780 <span class="c"># lm = self</span>
2781 <span class="k">try</span><span class="p">:</span>
2782 <span class="n">theFile</span> <span class="o">=</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZipFile</span><span class="p">(</span><span class="n">fn</span><span class="p">,</span><span class="s">&#39;r&#39;</span><span class="p">)</span>
2783 <span class="k">if</span> <span class="ow">not</span> <span class="n">theFile</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span>
2784
2785 <span class="c"># Read the file into an StringIO file.</span>
2786 <span class="n">aList</span> <span class="o">=</span> <span class="n">theFile</span><span class="o">.</span><span class="n">namelist</span><span class="p">()</span>
2787 <span class="n">name</span> <span class="o">=</span> <span class="n">aList</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">aList</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">aList</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
2788 <span class="k">if</span> <span class="ow">not</span> <span class="n">name</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span>
2789 <span class="n">s</span> <span class="o">=</span> <span class="n">theFile</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
2790 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">:</span> <span class="n">s</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">ue</span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="s">&#39;utf-8&#39;</span><span class="p">)</span>
2791 <span class="k">return</span> <span class="n">StringIO</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
2792
2793 <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
2794 <span class="c"># Do not use string + here: it will fail for non-ascii strings!</span>
2795 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
2796 <span class="n">g</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&quot;can not open:&quot;</span><span class="p">,</span><span class="n">fn</span><span class="p">)</span>
2797 <span class="k">return</span> <span class="bp">None</span>
2798 <span class="c">#@+node:ekr.20120223062418.10412: *6* LM.readOpenedLeoFile</span></div>
2799<div class="viewcode-block" id="LoadManager.readOpenedLeoFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LoadManager.readOpenedLeoFile">[docs]</a> <span class="k">def</span> <span class="nf">readOpenedLeoFile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">gui</span><span class="p">,</span><span class="n">fn</span><span class="p">,</span><span class="n">readAtFileNodesFlag</span><span class="p">,</span><span class="n">theFile</span><span class="p">):</span>
2800
2801 <span class="c"># New in Leo 4.10: The open1 event does not allow an override of the init logic.</span>
2802 <span class="k">assert</span> <span class="n">theFile</span>
2803 <span class="c"># lm = self</span>
2804 <span class="n">ok</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">fileCommands</span><span class="o">.</span><span class="n">openLeoFile</span><span class="p">(</span><span class="n">theFile</span><span class="p">,</span><span class="n">fn</span><span class="p">,</span>
2805 <span class="n">readAtFileNodesFlag</span><span class="o">=</span><span class="n">readAtFileNodesFlag</span><span class="p">)</span>
2806 <span class="c"># closes file.</span>
2807 <span class="k">if</span> <span class="n">ok</span><span class="p">:</span>
2808 <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">openDirectory</span><span class="p">:</span>
2809 <span class="n">theDir</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">os_path_finalize</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">os_path_dirname</span><span class="p">(</span><span class="n">fn</span><span class="p">))</span>
2810 <span class="n">c</span><span class="o">.</span><span class="n">openDirectory</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">openDirectory</span> <span class="o">=</span> <span class="n">theDir</span>
2811 <span class="k">else</span><span class="p">:</span>
2812 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">closeLeoWindow</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">frame</span><span class="p">)</span>
2813 <span class="k">return</span> <span class="n">ok</span>
2814 <span class="c">#@-others</span>
2815
2816<span class="c">#@+node:ekr.20120211121736.10831: ** class LogManager</span></div></div>
2817<div class="viewcode-block" id="LogManager"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LogManager">[docs]</a><span class="k">class</span> <span class="nc">LogManager</span><span class="p">:</span>
2818
2819 <span class="sd">&#39;&#39;&#39;A class to handle the global log, and especially</span>
2820<span class="sd"> switching the log from commander to commander.&#39;&#39;&#39;</span>
2821
2822 <span class="k">def</span> <span class="nf">__init__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2823
2824 <span class="n">trace</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span> <span class="ow">or</span> <span class="n">g</span><span class="o">.</span><span class="n">trace_startup</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
2825 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s">&#39;LogManager.__init__&#39;</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">callers</span><span class="p">())</span>
2826
2827 <span class="bp">self</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="bp">None</span> <span class="c"># The LeoFrame containing the present log.</span>
2828 <span class="bp">self</span><span class="o">.</span><span class="n">logInited</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># False: all log message go to logWaiting list.</span>
2829 <span class="bp">self</span><span class="o">.</span><span class="n">logIsLocked</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: no changes to log are allowed.</span>
2830 <span class="bp">self</span><span class="o">.</span><span class="n">logWaiting</span> <span class="o">=</span> <span class="p">[]</span> <span class="c"># List of messages waiting to go to a log.</span>
2831 <span class="bp">self</span><span class="o">.</span><span class="n">printWaiting</span> <span class="o">=</span> <span class="p">[]</span> <span class="c"># Queue of messages to be sent to the printer.</span>
2832 <span class="bp">self</span><span class="o">.</span><span class="n">signon_printed</span> <span class="o">=</span> <span class="bp">False</span> <span class="c"># True: the global signon has been printed.</span>
2833
2834 <span class="c">#@+others</span>
2835 <span class="c">#@+node:ekr.20120211121736.10834: *3* LogM.setLog, lockLog, unlocklog</span>
2836<div class="viewcode-block" id="LogManager.setLog"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LogManager.setLog">[docs]</a> <span class="k">def</span> <span class="nf">setLog</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">log</span><span class="p">):</span>
2837
2838 <span class="sd">&quot;&quot;&quot;set the frame to which log messages will go&quot;&quot;&quot;</span>
2839
2840 <span class="c"># print(&quot;app.setLog:&quot;,log,g.callers())</span>
2841 <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">logIsLocked</span><span class="p">:</span>
2842 <span class="bp">self</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="n">log</span>
2843</div>
2844<div class="viewcode-block" id="LogManager.lockLog"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LogManager.lockLog">[docs]</a> <span class="k">def</span> <span class="nf">lockLog</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2845 <span class="sd">&quot;&quot;&quot;Disable changes to the log&quot;&quot;&quot;</span>
2846 <span class="bp">self</span><span class="o">.</span><span class="n">logIsLocked</span> <span class="o">=</span> <span class="bp">True</span>
2847</div>
2848<div class="viewcode-block" id="LogManager.unlockLog"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LogManager.unlockLog">[docs]</a> <span class="k">def</span> <span class="nf">unlockLog</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2849 <span class="sd">&quot;&quot;&quot;Enable changes to the log&quot;&quot;&quot;</span>
2850 <span class="bp">self</span><span class="o">.</span><span class="n">logIsLocked</span> <span class="o">=</span> <span class="bp">False</span>
2851 <span class="c">#@+node:ekr.20120211121736.10836: *3* LogM.writeWaitingLog</span></div>
2852<div class="viewcode-block" id="LogManager.writeWaitingLog"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.LogManager.writeWaitingLog">[docs]</a> <span class="k">def</span> <span class="nf">writeWaitingLog</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">):</span>
2853
2854 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span>
2855 <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2856
2857 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
2858 <span class="c"># Do not call g.es, g.es_print, g.pr or g.trace here!</span>
2859 <span class="k">print</span><span class="p">(</span><span class="s">&#39;** writeWaitingLog&#39;</span><span class="p">,</span><span class="s">&#39;silent&#39;</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">silentMode</span><span class="p">,</span><span class="n">c</span><span class="o">.</span><span class="n">shortFileName</span><span class="p">())</span>
2860 <span class="c"># print(&#39;writeWaitingLog&#39;,g.callers())</span>
2861 <span class="c"># import sys ; print(&#39;writeWaitingLog: argv&#39;,sys.argv)</span>
2862
2863 <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">exists</span><span class="p">:</span>
2864 <span class="k">return</span>
2865
2866 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
2867 <span class="n">lm</span><span class="o">.</span><span class="n">printWaiting</span> <span class="o">=</span> <span class="p">[]</span>
2868 <span class="n">lm</span><span class="o">.</span><span class="n">logWaiting</span> <span class="o">=</span> <span class="p">[]</span>
2869 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">setLog</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span> <span class="c"># Prepare to requeue for other commanders.</span>
2870 <span class="k">return</span>
2871
2872 <span class="n">table</span> <span class="o">=</span> <span class="p">[</span>
2873 <span class="p">(</span><span class="s">&#39;Leo Log Window&#39;</span><span class="p">,</span><span class="s">&#39;red&#39;</span><span class="p">),</span>
2874 <span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">signon</span><span class="p">,</span><span class="s">&#39;black&#39;</span><span class="p">),</span>
2875 <span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">signon2</span><span class="p">,</span><span class="s">&#39;black&#39;</span><span class="p">),</span>
2876 <span class="p">]</span>
2877 <span class="n">table</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
2878
2879 <span class="n">c</span><span class="o">.</span><span class="n">setLog</span><span class="p">()</span> <span class="c"># 2010/10/20</span>
2880 <span class="n">lm</span><span class="o">.</span><span class="n">logInited</span> <span class="o">=</span> <span class="bp">True</span> <span class="c"># Prevent recursive call.</span>
2881
2882 <span class="k">if</span> <span class="ow">not</span> <span class="n">lm</span><span class="o">.</span><span class="n">signon_printed</span><span class="p">:</span>
2883 <span class="n">lm</span><span class="o">.</span><span class="n">signon_printed</span> <span class="o">=</span> <span class="bp">True</span>
2884 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">silentMode</span><span class="p">:</span> <span class="c"># 2011/11/02:</span>
2885 <span class="k">print</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
2886 <span class="k">print</span><span class="p">(</span><span class="s">&#39;** isPython3: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">)</span>
2887 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">enableDB</span><span class="p">:</span>
2888 <span class="k">print</span><span class="p">(</span><span class="s">&#39;** caching disabled&#39;</span><span class="p">)</span>
2889 <span class="k">print</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">signon</span><span class="p">)</span>
2890 <span class="k">print</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">signon2</span><span class="p">)</span>
2891 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">silentMode</span><span class="p">:</span> <span class="c"># 2011/11/02:</span>
2892 <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">lm</span><span class="o">.</span><span class="n">printWaiting</span><span class="p">:</span>
2893 <span class="k">print</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
2894 <span class="n">lm</span><span class="o">.</span><span class="n">printWaiting</span> <span class="o">=</span> <span class="p">[]</span>
2895
2896 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">silentMode</span><span class="p">:</span> <span class="c"># 2011/11/02:</span>
2897 <span class="k">for</span> <span class="n">s</span><span class="p">,</span><span class="n">color</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span>
2898 <span class="n">lm</span><span class="o">.</span><span class="n">logWaiting</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,(</span><span class="n">s</span><span class="o">+</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">,</span><span class="n">color</span><span class="p">),)</span>
2899 <span class="k">for</span> <span class="n">s</span><span class="p">,</span><span class="n">color</span> <span class="ow">in</span> <span class="n">lm</span><span class="o">.</span><span class="n">logWaiting</span><span class="p">:</span>
2900 <span class="n">g</span><span class="o">.</span><span class="n">es</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">,</span><span class="n">s</span><span class="p">,</span><span class="n">color</span><span class="o">=</span><span class="n">color</span><span class="p">,</span><span class="n">newline</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
2901 <span class="c"># The caller must write the newlines.</span>
2902 <span class="n">lm</span><span class="o">.</span><span class="n">logWaiting</span> <span class="o">=</span> <span class="p">[]</span>
2903
2904 <span class="c"># Essential when opening multiple files...</span>
2905 <span class="n">lm</span><span class="o">.</span><span class="n">setLog</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span>
2906 <span class="c">#@-others</span>
2907<span class="c">#@+node:ekr.20120223062418.10420: ** class PreviousSettings</span></div></div>
2908<div class="viewcode-block" id="PreviousSettings"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.PreviousSettings">[docs]</a><span class="k">class</span> <span class="nc">PreviousSettings</span><span class="p">:</span>
2909
2910 <span class="sd">&#39;&#39;&#39;A class holding the settings and shortcuts dictionaries</span>
2911<span class="sd"> that are computed in the first pass when loading local</span>
2912<span class="sd"> files and passed to the second pass.&#39;&#39;&#39;</span>
2913
2914 <span class="k">def</span> <span class="nf">__init__</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">settingsDict</span><span class="p">,</span><span class="n">shortcutsDict</span><span class="p">):</span>
2915
2916 <span class="k">assert</span> <span class="n">g</span><span class="o">.</span><span class="n">isTypedDict</span><span class="p">(</span><span class="n">settingsDict</span><span class="p">)</span>
2917 <span class="k">assert</span> <span class="n">g</span><span class="o">.</span><span class="n">isTypedDictOfLists</span><span class="p">(</span><span class="n">shortcutsDict</span><span class="p">)</span>
2918
2919 <span class="bp">self</span><span class="o">.</span><span class="n">settingsDict</span> <span class="o">=</span> <span class="n">settingsDict</span>
2920 <span class="bp">self</span><span class="o">.</span><span class="n">shortcutsDict</span> <span class="o">=</span> <span class="n">shortcutsDict</span>
2921
2922 <span class="k">def</span> <span class="nf">__repr__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2923
2924 <span class="k">return</span> <span class="s">&#39;&lt;PreviousSettings</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="s">&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span>
2925 <span class="bp">self</span><span class="o">.</span><span class="n">settingsDict</span><span class="p">,</span><span class="bp">self</span><span class="o">.</span><span class="n">shortcutsDict</span><span class="p">)</span>
2926
2927 <span class="n">__str__</span> <span class="o">=</span> <span class="n">__repr__</span>
2928<span class="c">#@+node:ekr.20120225072226.10283: ** class RecentFilesManager</span></div>
2929<div class="viewcode-block" id="RecentFilesManager"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager">[docs]</a><span class="k">class</span> <span class="nc">RecentFilesManager</span><span class="p">:</span>
2930
2931 <span class="sd">&#39;&#39;&#39;A class to manipulate leoRecentFiles.txt.&#39;&#39;&#39;</span>
2932
2933 <span class="k">def</span> <span class="nf">__init__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
2934
2935 <span class="bp">self</span><span class="o">.</span><span class="n">groupedMenus</span> <span class="o">=</span> <span class="p">[]</span>
2936 <span class="c"># Set in rf.createRecentFilesMenuItems.</span>
2937 <span class="bp">self</span><span class="o">.</span><span class="n">recentFiles</span> <span class="o">=</span> <span class="p">[]</span>
2938 <span class="c"># List of g.Bunches describing .leoRecentFiles.txt files.</span>
2939 <span class="bp">self</span><span class="o">.</span><span class="n">recentFileMessageWritten</span> <span class="o">=</span> <span class="bp">False</span>
2940 <span class="c"># To suppress all but the first message.</span>
2941 <span class="bp">self</span><span class="o">.</span><span class="n">write_recent_files_as_needed</span> <span class="o">=</span> <span class="bp">False</span>
2942 <span class="c"># Will be set later.</span>
2943
2944 <span class="c">#@+others</span>
2945 <span class="c">#@+node:ekr.20041201080436: *3* rf.appendToRecentFiles</span>
2946<div class="viewcode-block" id="RecentFilesManager.appendToRecentFiles"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.appendToRecentFiles">[docs]</a> <span class="k">def</span> <span class="nf">appendToRecentFiles</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">files</span><span class="p">):</span>
2947
2948 <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
2949
2950 <span class="n">files</span> <span class="o">=</span> <span class="p">[</span><span class="n">theFile</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">theFile</span> <span class="ow">in</span> <span class="n">files</span><span class="p">]</span>
2951
2952 <span class="k">def</span> <span class="nf">munge</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
2953 <span class="k">return</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_normpath</span><span class="p">(</span><span class="n">name</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
2954
2955 <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span>
2956 <span class="c"># Remove all variants of name.</span>
2957 <span class="k">for</span> <span class="n">name2</span> <span class="ow">in</span> <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span><span class="p">[:]:</span>
2958 <span class="k">if</span> <span class="n">munge</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o">==</span> <span class="n">munge</span><span class="p">(</span><span class="n">name2</span><span class="p">):</span>
2959 <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">name2</span><span class="p">)</span>
2960
2961 <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
2962 <span class="c">#@+node:ekr.20120225072226.10289: *3* rf.cleanRecentFiles</span></div>
2963<div class="viewcode-block" id="RecentFilesManager.cleanRecentFiles"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.cleanRecentFiles">[docs]</a> <span class="k">def</span> <span class="nf">cleanRecentFiles</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">):</span>
2964
2965 <span class="sd">&#39;&#39;&#39;Removed items from the recent files list that are no longer valid.&#39;&#39;&#39;</span>
2966
2967 <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
2968
2969 <span class="n">dat</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getData</span><span class="p">(</span><span class="s">&#39;path-demangle&#39;</span><span class="p">)</span>
2970 <span class="k">if</span> <span class="ow">not</span> <span class="n">dat</span><span class="p">:</span>
2971 <span class="n">g</span><span class="o">.</span><span class="n">es</span><span class="p">(</span><span class="s">&#39;No @data path-demangle setting&#39;</span><span class="p">)</span>
2972 <span class="k">return</span>
2973
2974 <span class="n">changes</span> <span class="o">=</span> <span class="p">[]</span>
2975 <span class="n">replace</span> <span class="o">=</span> <span class="bp">None</span>
2976 <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">dat</span><span class="p">:</span>
2977 <span class="n">text</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
2978 <span class="k">if</span> <span class="n">text</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;REPLACE: &#39;</span><span class="p">):</span>
2979 <span class="n">replace</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
2980 <span class="k">if</span> <span class="n">text</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&#39;WITH:&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">replace</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
2981 <span class="n">with_</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="mi">5</span><span class="p">:]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
2982 <span class="n">changes</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">replace</span><span class="p">,</span> <span class="n">with_</span><span class="p">))</span>
2983 <span class="n">g</span><span class="o">.</span><span class="n">es</span><span class="p">(</span><span class="s">&#39;</span><span class="si">%s</span><span class="s"> -&gt; </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">changes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
2984
2985 <span class="n">orig</span> <span class="o">=</span> <span class="p">[</span><span class="n">z</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span> <span class="k">if</span> <span class="n">z</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">&quot;/&quot;</span><span class="p">)]</span>
2986
2987 <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span> <span class="o">=</span> <span class="p">[]</span>
2988
2989 <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">orig</span><span class="p">:</span>
2990 <span class="n">t</span> <span class="o">=</span> <span class="n">i</span>
2991 <span class="k">for</span> <span class="n">change</span> <span class="ow">in</span> <span class="n">changes</span><span class="p">:</span>
2992 <span class="n">t</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="o">*</span><span class="n">change</span><span class="p">)</span>
2993 <span class="n">rf</span><span class="o">.</span><span class="n">updateRecentFiles</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
2994
2995 <span class="n">rf</span><span class="o">.</span><span class="n">writeRecentFilesFile</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">force</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
2996 <span class="c"># Force the write message.</span>
2997 <span class="c">#@+node:ekr.20120225072226.10297: *3* rf.clearRecentFiles</span></div>
2998<div class="viewcode-block" id="RecentFilesManager.clearRecentFiles"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.clearRecentFiles">[docs]</a> <span class="k">def</span> <span class="nf">clearRecentFiles</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">):</span>
2999
3000 <span class="sd">&quot;&quot;&quot;Clear the recent files list, then add the present file.&quot;&quot;&quot;</span>
3001
3002 <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span> <span class="p">;</span> <span class="n">u</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">undoer</span> <span class="p">;</span> <span class="n">menu</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">menu</span>
3003
3004 <span class="n">bunch</span> <span class="o">=</span> <span class="n">u</span><span class="o">.</span><span class="n">beforeClearRecentFiles</span><span class="p">()</span>
3005
3006 <span class="n">recentFilesMenu</span> <span class="o">=</span> <span class="n">menu</span><span class="o">.</span><span class="n">getMenu</span><span class="p">(</span><span class="s">&quot;Recent Files...&quot;</span><span class="p">)</span>
3007 <span class="n">menu</span><span class="o">.</span><span class="n">deleteRecentFilesMenuItems</span><span class="p">(</span><span class="n">recentFilesMenu</span><span class="p">)</span>
3008
3009 <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span><span class="o">.</span><span class="n">fileName</span><span class="p">()]</span>
3010 <span class="k">for</span> <span class="n">frame</span> <span class="ow">in</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">:</span>
3011 <span class="n">rf</span><span class="o">.</span><span class="n">createRecentFilesMenuItems</span><span class="p">(</span><span class="n">frame</span><span class="o">.</span><span class="n">c</span><span class="p">)</span>
3012
3013 <span class="n">u</span><span class="o">.</span><span class="n">afterClearRecentFiles</span><span class="p">(</span><span class="n">bunch</span><span class="p">)</span>
3014
3015 <span class="c"># Write the file immediately.</span>
3016 <span class="n">rf</span><span class="o">.</span><span class="n">writeRecentFilesFile</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">force</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
3017 <span class="c"># Force the write message.</span>
3018 <span class="c">#@+node:ekr.20120225072226.10301: *3* rf.createRecentFilesMenuItems</span></div>
3019<div class="viewcode-block" id="RecentFilesManager.createRecentFilesMenuItems"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.createRecentFilesMenuItems">[docs]</a> <span class="k">def</span> <span class="nf">createRecentFilesMenuItems</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">):</span>
3020
3021 <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3022 <span class="n">menu</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">menu</span>
3023
3024 <span class="n">recentFilesMenu</span> <span class="o">=</span> <span class="n">menu</span><span class="o">.</span><span class="n">getMenu</span><span class="p">(</span><span class="s">&quot;Recent Files...&quot;</span><span class="p">)</span>
3025
3026 <span class="k">if</span> <span class="ow">not</span> <span class="n">recentFilesMenu</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
3027 <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;Recent Files Menu does not exist&#39;</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">callers</span><span class="p">())</span>
3028 <span class="k">return</span>
3029
3030 <span class="c"># Delete all previous entries.</span>
3031 <span class="n">menu</span><span class="o">.</span><span class="n">deleteRecentFilesMenuItems</span><span class="p">(</span><span class="n">recentFilesMenu</span><span class="p">)</span>
3032
3033 <span class="c"># Create the permanent (static) menu entries.</span>
3034 <span class="n">table</span> <span class="o">=</span> <span class="n">rf</span><span class="o">.</span><span class="n">getRecentFilesTable</span><span class="p">()</span>
3035 <span class="n">menu</span><span class="o">.</span><span class="n">createMenuEntries</span><span class="p">(</span><span class="n">recentFilesMenu</span><span class="p">,</span><span class="n">table</span><span class="p">)</span>
3036
3037 <span class="c"># Create all the other entries (a maximum of 36).</span>
3038 <span class="n">accel_ch</span> <span class="o">=</span> <span class="n">string</span><span class="o">.</span><span class="n">digits</span> <span class="o">+</span> <span class="n">string</span><span class="o">.</span><span class="n">ascii_uppercase</span> <span class="c"># Not a unicode problem.</span>
3039 <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
3040 <span class="n">n</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">accel_ch</span><span class="p">)</span>
3041
3042 <span class="c"># see if we&#39;re grouping when files occur in more than one place</span>
3043 <span class="n">rf_group</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getBool</span><span class="p">(</span><span class="s">&quot;recent_files_group&quot;</span><span class="p">)</span>
3044 <span class="n">rf_always</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getBool</span><span class="p">(</span><span class="s">&quot;recent_files_group_always&quot;</span><span class="p">)</span>
3045 <span class="n">groupedEntries</span> <span class="o">=</span> <span class="n">rf_group</span> <span class="ow">or</span> <span class="n">rf_always</span>
3046
3047 <span class="k">if</span> <span class="n">groupedEntries</span><span class="p">:</span> <span class="c"># if so, make dict of groups</span>
3048 <span class="n">dirCount</span> <span class="o">=</span> <span class="p">{}</span>
3049 <span class="k">for</span> <span class="n">fileName</span> <span class="ow">in</span> <span class="n">rf</span><span class="o">.</span><span class="n">getRecentFiles</span><span class="p">()[:</span><span class="n">n</span><span class="p">]:</span>
3050 <span class="n">dirName</span><span class="p">,</span> <span class="n">baseName</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_split</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span>
3051 <span class="k">if</span> <span class="n">baseName</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">dirCount</span><span class="p">:</span>
3052 <span class="n">dirCount</span><span class="p">[</span><span class="n">baseName</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;dirs&#39;</span><span class="p">:[],</span> <span class="s">&#39;entry&#39;</span><span class="p">:</span> <span class="bp">None</span><span class="p">}</span>
3053 <span class="n">dirCount</span><span class="p">[</span><span class="n">baseName</span><span class="p">][</span><span class="s">&#39;dirs&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">dirName</span><span class="p">)</span>
3054
3055 <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">rf</span><span class="o">.</span><span class="n">getRecentFiles</span><span class="p">()[:</span><span class="n">n</span><span class="p">]:</span>
3056 <span class="k">if</span> <span class="n">name</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;&quot;</span><span class="p">:</span>
3057 <span class="k">continue</span> <span class="c"># happens with empty list/new file</span>
3058
3059 <span class="k">def</span> <span class="nf">recentFilesCallback</span> <span class="p">(</span><span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span><span class="n">c</span><span class="o">=</span><span class="n">c</span><span class="p">,</span><span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">):</span>
3060 <span class="n">c</span><span class="o">.</span><span class="n">openRecentFile</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
3061
3062 <span class="k">if</span> <span class="n">groupedEntries</span><span class="p">:</span>
3063 <span class="n">dirName</span><span class="p">,</span> <span class="n">baseName</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_split</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
3064
3065 <span class="n">entry</span> <span class="o">=</span> <span class="n">dirCount</span><span class="p">[</span><span class="n">baseName</span><span class="p">]</span>
3066
3067 <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">entry</span><span class="p">[</span><span class="s">&#39;dirs&#39;</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">rf_always</span><span class="p">:</span> <span class="c"># sub menus</span>
3068 <span class="k">if</span> <span class="n">entry</span><span class="p">[</span><span class="s">&#39;entry&#39;</span><span class="p">]</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
3069 <span class="n">entry</span><span class="p">[</span><span class="s">&#39;entry&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">menu</span><span class="o">.</span><span class="n">createNewMenu</span><span class="p">(</span><span class="n">baseName</span><span class="p">,</span> <span class="s">&quot;Recent Files...&quot;</span><span class="p">)</span>
3070 <span class="c"># acts as a flag for the need to create the menu</span>
3071 <span class="n">c</span><span class="o">.</span><span class="n">add_command</span><span class="p">(</span><span class="n">menu</span><span class="o">.</span><span class="n">getMenu</span><span class="p">(</span><span class="n">baseName</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="n">dirName</span><span class="p">,</span>
3072 <span class="n">command</span><span class="o">=</span><span class="n">recentFilesCallback</span><span class="p">,</span> <span class="n">underline</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
3073 <span class="k">else</span><span class="p">:</span> <span class="c"># single occurence, no submenu</span>
3074 <span class="n">c</span><span class="o">.</span><span class="n">add_command</span><span class="p">(</span><span class="n">recentFilesMenu</span><span class="p">,</span><span class="n">label</span><span class="o">=</span><span class="n">baseName</span><span class="p">,</span>
3075 <span class="n">command</span><span class="o">=</span><span class="n">recentFilesCallback</span><span class="p">,</span><span class="n">underline</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
3076
3077 <span class="k">else</span><span class="p">:</span> <span class="c"># original behavior</span>
3078 <span class="n">label</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">accel_ch</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="n">g</span><span class="o">.</span><span class="n">computeWindowTitle</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
3079 <span class="n">c</span><span class="o">.</span><span class="n">add_command</span><span class="p">(</span><span class="n">recentFilesMenu</span><span class="p">,</span><span class="n">label</span><span class="o">=</span><span class="n">label</span><span class="p">,</span>
3080 <span class="n">command</span><span class="o">=</span><span class="n">recentFilesCallback</span><span class="p">,</span><span class="n">underline</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
3081 <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
3082
3083 <span class="k">if</span> <span class="n">groupedEntries</span><span class="p">:</span> <span class="c"># store so we can delete them later</span>
3084 <span class="n">rf</span><span class="o">.</span><span class="n">groupedMenus</span> <span class="o">=</span> <span class="p">[</span><span class="n">z</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">dirCount</span>
3085 <span class="k">if</span> <span class="n">dirCount</span><span class="p">[</span><span class="n">z</span><span class="p">][</span><span class="s">&#39;entry&#39;</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">]</span>
3086 <span class="c">#@+node:ekr.20120225072226.10286: *3* rf.getRecentFiles</span></div>
3087<div class="viewcode-block" id="RecentFilesManager.getRecentFiles"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.getRecentFiles">[docs]</a> <span class="k">def</span> <span class="nf">getRecentFiles</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3088
3089 <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">recentFiles</span>
3090 <span class="c">#@+node:ekr.20120225072226.10304: *3* rf.getRecentFilesTable</span></div>
3091<div class="viewcode-block" id="RecentFilesManager.getRecentFilesTable"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.getRecentFilesTable">[docs]</a> <span class="k">def</span> <span class="nf">getRecentFilesTable</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3092
3093 <span class="k">return</span> <span class="p">(</span>
3094 <span class="s">&quot;*clear-recent-files&quot;</span><span class="p">,</span>
3095 <span class="s">&quot;*clean-recent-files&quot;</span><span class="p">,</span>
3096 <span class="s">&quot;*sort-recent-files&quot;</span><span class="p">,</span>
3097 <span class="c"># (&quot;-&quot;,None,None),</span>
3098 <span class="p">)</span>
3099 <span class="c">#@+node:ekr.20070224115832: *3* rf.readRecentFiles &amp; helpers</span></div>
3100<div class="viewcode-block" id="RecentFilesManager.readRecentFiles"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.readRecentFiles">[docs]</a> <span class="k">def</span> <span class="nf">readRecentFiles</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">localConfigFile</span><span class="p">):</span>
3101
3102 <span class="sd">&#39;&#39;&#39;Read all .leoRecentFiles.txt files.&#39;&#39;&#39;</span>
3103
3104 <span class="c"># The order of files in this list affects the order of the recent files list.</span>
3105 <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3106 <span class="n">seen</span> <span class="o">=</span> <span class="p">[]</span>
3107 <span class="n">localConfigPath</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_dirname</span><span class="p">(</span><span class="n">localConfigFile</span><span class="p">)</span>
3108
3109 <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="p">(</span>
3110 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeLeoDir</span><span class="p">,</span>
3111 <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">globalConfigDir</span><span class="p">,</span>
3112 <span class="n">localConfigPath</span><span class="p">,</span>
3113 <span class="p">):</span>
3114 <span class="k">if</span> <span class="n">path</span><span class="p">:</span>
3115 <span class="n">path</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_realpath</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize</span><span class="p">(</span><span class="n">path</span><span class="p">))</span>
3116 <span class="k">if</span> <span class="n">path</span> <span class="ow">and</span> <span class="n">path</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">seen</span><span class="p">:</span>
3117 <span class="n">ok</span> <span class="o">=</span> <span class="n">rf</span><span class="o">.</span><span class="n">readRecentFilesFile</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
3118 <span class="k">if</span> <span class="n">ok</span><span class="p">:</span> <span class="n">seen</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
3119
3120 <span class="k">if</span> <span class="ow">not</span> <span class="n">seen</span> <span class="ow">and</span> <span class="n">rf</span><span class="o">.</span><span class="n">write_recent_files_as_needed</span><span class="p">:</span>
3121 <span class="n">rf</span><span class="o">.</span><span class="n">createRecentFiles</span><span class="p">()</span>
3122 <span class="c">#@+node:ekr.20061010121944: *4* rf.createRecentFiles</span></div>
3123<div class="viewcode-block" id="RecentFilesManager.createRecentFiles"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.createRecentFiles">[docs]</a> <span class="k">def</span> <span class="nf">createRecentFiles</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3124
3125 <span class="sd">&#39;&#39;&#39;Trye to reate .leoRecentFiles.txt in</span>
3126<span class="sd"> - the users home directory first,</span>
3127<span class="sd"> - Leo&#39;s config directory second.&#39;&#39;&#39;</span>
3128
3129 <span class="k">for</span> <span class="n">theDir</span> <span class="ow">in</span> <span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeLeoDir</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">globalConfigDir</span><span class="p">):</span>
3130 <span class="k">if</span> <span class="n">theDir</span><span class="p">:</span>
3131 <span class="k">try</span><span class="p">:</span>
3132 <span class="n">fn</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_join</span><span class="p">(</span><span class="n">theDir</span><span class="p">,</span><span class="s">&#39;.leoRecentFiles.txt&#39;</span><span class="p">)</span>
3133 <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fn</span><span class="p">,</span><span class="s">&#39;w&#39;</span><span class="p">)</span>
3134 <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
3135 <span class="n">g</span><span class="o">.</span><span class="n">red</span><span class="p">(</span><span class="s">&#39;created&#39;</span><span class="p">,</span><span class="n">fn</span><span class="p">)</span>
3136 <span class="k">return</span>
3137 <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
3138 <span class="n">g</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&#39;can not create&#39;</span><span class="p">,</span><span class="n">fn</span><span class="p">)</span>
3139 <span class="n">g</span><span class="o">.</span><span class="n">es_exception</span><span class="p">()</span>
3140 <span class="c">#@+node:ekr.20050424115658: *4* rf.readRecentFilesFile</span></div>
3141<div class="viewcode-block" id="RecentFilesManager.readRecentFilesFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.readRecentFilesFile">[docs]</a> <span class="k">def</span> <span class="nf">readRecentFilesFile</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">path</span><span class="p">):</span>
3142
3143 <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span>
3144 <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3145 <span class="n">fileName</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="s">&#39;.leoRecentFiles.txt&#39;</span><span class="p">)</span>
3146 <span class="n">ok</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span>
3147 <span class="k">if</span> <span class="n">ok</span><span class="p">:</span>
3148 <span class="k">try</span><span class="p">:</span>
3149 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">:</span>
3150 <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="n">encoding</span><span class="o">=</span><span class="s">&#39;utf-8&#39;</span><span class="p">,</span><span class="n">mode</span><span class="o">=</span><span class="s">&#39;r&#39;</span><span class="p">)</span>
3151 <span class="k">else</span><span class="p">:</span>
3152 <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="s">&#39;r&#39;</span><span class="p">)</span>
3153 <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
3154 <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">(</span><span class="s">&#39;can not open&#39;</span><span class="p">,</span><span class="n">fileName</span><span class="p">)</span>
3155 <span class="k">return</span> <span class="bp">False</span>
3156
3157 <span class="k">if</span> <span class="n">trace</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">trace</span><span class="p">((</span><span class="s">&#39;reading </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">fileName</span><span class="p">))</span>
3158 <span class="n">lines</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">readlines</span><span class="p">()</span>
3159 <span class="k">if</span> <span class="n">lines</span> <span class="ow">and</span> <span class="n">rf</span><span class="o">.</span><span class="n">sanitize</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">==</span><span class="s">&#39;readonly&#39;</span><span class="p">:</span>
3160 <span class="n">lines</span> <span class="o">=</span> <span class="n">lines</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
3161 <span class="k">if</span> <span class="n">lines</span><span class="p">:</span>
3162 <span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="n">g</span><span class="o">.</span><span class="n">toUnicode</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">os_path_normpath</span><span class="p">(</span><span class="n">line</span><span class="p">))</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">]</span>
3163 <span class="n">rf</span><span class="o">.</span><span class="n">appendToRecentFiles</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span>
3164
3165 <span class="k">return</span> <span class="n">ok</span>
3166 <span class="c">#@+node:ekr.20120225072226.10285: *3* rf.sanitize</span></div>
3167<div class="viewcode-block" id="RecentFilesManager.sanitize"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.sanitize">[docs]</a> <span class="k">def</span> <span class="nf">sanitize</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">name</span><span class="p">):</span>
3168
3169 <span class="sd">&#39;&#39;&#39;Return a sanitized file name.&#39;&#39;&#39;</span>
3170
3171 <span class="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
3172 <span class="k">return</span> <span class="bp">None</span>
3173
3174 <span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
3175 <span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="p">(</span><span class="s">&#39;-&#39;</span><span class="p">,</span><span class="s">&#39;_&#39;</span><span class="p">,</span><span class="s">&#39; &#39;</span><span class="p">,</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">):</span>
3176 <span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ch</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
3177
3178 <span class="k">return</span> <span class="n">name</span> <span class="ow">or</span> <span class="bp">None</span>
3179 <span class="c">#@+node:ekr.20120215072959.12478: *3* rf.setRecentFiles</span></div>
3180<div class="viewcode-block" id="RecentFilesManager.setRecentFiles"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.setRecentFiles">[docs]</a> <span class="k">def</span> <span class="nf">setRecentFiles</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">files</span><span class="p">):</span>
3181
3182 <span class="sd">&#39;&#39;&#39;Update the recent files list.&#39;&#39;&#39;</span>
3183
3184 <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3185 <span class="n">rf</span><span class="o">.</span><span class="n">appendToRecentFiles</span><span class="p">(</span><span class="n">files</span><span class="p">)</span>
3186 <span class="c">#@+node:ekr.20120225072226.10293: *3* rf.sortRecentFiles</span></div>
3187<div class="viewcode-block" id="RecentFilesManager.sortRecentFiles"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.sortRecentFiles">[docs]</a> <span class="k">def</span> <span class="nf">sortRecentFiles</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">):</span>
3188
3189 <span class="sd">&#39;&#39;&#39;Sort the recent files list.&#39;&#39;&#39;</span>
3190
3191 <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3192
3193 <span class="n">aList</span> <span class="o">=</span> <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span>
3194 <span class="n">aList</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">s</span><span class="p">:</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_basename</span><span class="p">(</span><span class="n">s</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
3195 <span class="n">aList</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
3196
3197 <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span> <span class="o">=</span> <span class="p">[]</span>
3198 <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">aList</span><span class="p">:</span>
3199 <span class="n">rf</span><span class="o">.</span><span class="n">updateRecentFiles</span><span class="p">(</span><span class="n">z</span><span class="p">)</span>
3200
3201 <span class="n">rf</span><span class="o">.</span><span class="n">writeRecentFilesFile</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="n">force</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
3202 <span class="c"># Force the write message.</span>
3203 <span class="c">#@+node:ekr.20031218072017.2083: *3* rf.updateRecentFiles</span></div>
3204<div class="viewcode-block" id="RecentFilesManager.updateRecentFiles"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.updateRecentFiles">[docs]</a> <span class="k">def</span> <span class="nf">updateRecentFiles</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fileName</span><span class="p">):</span>
3205
3206 <span class="sd">&quot;&quot;&quot;Create the RecentFiles menu. May be called with Null fileName.&quot;&quot;&quot;</span>
3207
3208 <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3209
3210 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span> <span class="k">return</span>
3211
3212 <span class="k">def</span> <span class="nf">munge</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
3213 <span class="k">return</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize</span><span class="p">(</span><span class="n">name</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
3214 <span class="k">def</span> <span class="nf">munge2</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
3215 <span class="k">return</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize_join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">loadDir</span><span class="p">,</span><span class="n">name</span> <span class="ow">or</span> <span class="s">&#39;&#39;</span><span class="p">)</span>
3216
3217 <span class="c"># Update the recent files list in all windows.</span>
3218 <span class="k">if</span> <span class="n">fileName</span><span class="p">:</span>
3219 <span class="k">for</span> <span class="n">frame</span> <span class="ow">in</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">:</span>
3220 <span class="c"># Remove all versions of the file name.</span>
3221 <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span><span class="p">:</span>
3222 <span class="k">if</span> <span class="p">(</span><span class="n">munge</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span> <span class="o">==</span> <span class="n">munge</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">or</span>
3223 <span class="n">munge2</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span> <span class="o">==</span> <span class="n">munge2</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
3224 <span class="p">):</span>
3225 <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
3226 <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">fileName</span><span class="p">)</span>
3227 <span class="c"># Recreate the Recent Files menu.</span>
3228 <span class="n">rf</span><span class="o">.</span><span class="n">createRecentFilesMenuItems</span><span class="p">(</span><span class="n">frame</span><span class="o">.</span><span class="n">c</span><span class="p">)</span>
3229 <span class="k">else</span><span class="p">:</span>
3230 <span class="k">for</span> <span class="n">frame</span> <span class="ow">in</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">windowList</span><span class="p">:</span>
3231 <span class="n">rf</span><span class="o">.</span><span class="n">createRecentFilesMenuItems</span><span class="p">(</span><span class="n">frame</span><span class="o">.</span><span class="n">c</span><span class="p">)</span>
3232 <span class="c">#@+node:ekr.20050424114937.2: *3* rf.writeRecentFilesFile &amp; helper</span></div>
3233<div class="viewcode-block" id="RecentFilesManager.writeRecentFilesFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.writeRecentFilesFile">[docs]</a> <span class="k">def</span> <span class="nf">writeRecentFilesFile</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">force</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
3234
3235 <span class="sd">&#39;&#39;&#39;Write the appropriate .leoRecentFiles.txt file.</span>
3236
3237<span class="sd"> Write a message if force is True, or if it hasn&#39;t been written yet.&#39;&#39;&#39;</span>
3238
3239 <span class="n">tag</span> <span class="o">=</span> <span class="s">&#39;.leoRecentFiles.txt&#39;</span>
3240 <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3241 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
3242 <span class="k">return</span>
3243
3244 <span class="n">localFileName</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">fileName</span><span class="p">()</span>
3245 <span class="k">if</span> <span class="n">localFileName</span><span class="p">:</span>
3246 <span class="n">localPath</span><span class="p">,</span><span class="n">junk</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_split</span><span class="p">(</span><span class="n">localFileName</span><span class="p">)</span>
3247 <span class="k">else</span><span class="p">:</span>
3248 <span class="n">localPath</span> <span class="o">=</span> <span class="bp">None</span>
3249
3250 <span class="n">written</span> <span class="o">=</span> <span class="bp">False</span>
3251 <span class="n">seen</span> <span class="o">=</span> <span class="p">[]</span>
3252 <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="p">(</span><span class="n">localPath</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">globalConfigDir</span><span class="p">,</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeLeoDir</span><span class="p">):</span>
3253 <span class="k">if</span> <span class="n">path</span><span class="p">:</span>
3254 <span class="n">fileName</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="n">tag</span><span class="p">)</span>
3255 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">fileName</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">seen</span><span class="p">:</span>
3256 <span class="n">seen</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fileName</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
3257 <span class="n">ok</span> <span class="o">=</span> <span class="n">rf</span><span class="o">.</span><span class="n">writeRecentFilesFileHelper</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span>
3258 <span class="k">if</span> <span class="n">force</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">rf</span><span class="o">.</span><span class="n">recentFileMessageWritten</span><span class="p">:</span>
3259 <span class="k">if</span> <span class="n">ok</span><span class="p">:</span>
3260 <span class="n">g</span><span class="o">.</span><span class="n">pr</span><span class="p">(</span><span class="s">&#39;wrote recent file: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">fileName</span><span class="p">)</span>
3261 <span class="n">written</span> <span class="o">=</span> <span class="bp">True</span>
3262 <span class="k">else</span><span class="p">:</span>
3263 <span class="n">g</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&#39;failed to write recent file: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fileName</span><span class="p">))</span>
3264 <span class="c"># Bug fix: Leo 4.4.6: write *all* recent files.</span>
3265
3266 <span class="k">if</span> <span class="n">written</span><span class="p">:</span>
3267 <span class="n">rf</span><span class="o">.</span><span class="n">recentFileMessageWritten</span> <span class="o">=</span> <span class="bp">True</span>
3268 <span class="k">else</span><span class="p">:</span>
3269 <span class="c"># Attempt to create .leoRecentFiles.txt in the user&#39;s home directory.</span>
3270 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeLeoDir</span><span class="p">:</span>
3271 <span class="n">fileName</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_finalize_join</span><span class="p">(</span><span class="n">g</span><span class="o">.</span><span class="n">app</span><span class="o">.</span><span class="n">homeLeoDir</span><span class="p">,</span><span class="n">tag</span><span class="p">)</span>
3272 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">os_path_exists</span><span class="p">(</span><span class="n">fileName</span><span class="p">):</span>
3273 <span class="n">g</span><span class="o">.</span><span class="n">red</span><span class="p">(</span><span class="s">&#39;creating: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">fileName</span><span class="p">))</span>
3274 <span class="n">rf</span><span class="o">.</span><span class="n">writeRecentFilesFileHelper</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span>
3275
3276
3277 <span class="c">#@+node:ekr.20050424131051: *4* rf.writeRecentFilesFileHelper</span></div>
3278<div class="viewcode-block" id="RecentFilesManager.writeRecentFilesFileHelper"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoApp.RecentFilesManager.writeRecentFilesFileHelper">[docs]</a> <span class="k">def</span> <span class="nf">writeRecentFilesFileHelper</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">fileName</span><span class="p">):</span>
3279
3280 <span class="c"># g.trace(g.toUnicode(fileName))</span>
3281
3282 <span class="c"># Don&#39;t update the file if it begins with read-only.</span>
3283 <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3284 <span class="n">theFile</span> <span class="o">=</span> <span class="bp">None</span>
3285 <span class="k">try</span><span class="p">:</span>
3286 <span class="n">theFile</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fileName</span><span class="p">)</span>
3287 <span class="n">lines</span> <span class="o">=</span> <span class="n">theFile</span><span class="o">.</span><span class="n">readlines</span><span class="p">()</span>
3288 <span class="k">if</span> <span class="n">lines</span> <span class="ow">and</span> <span class="n">rf</span><span class="o">.</span><span class="n">sanitize</span><span class="p">(</span><span class="n">lines</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">==</span><span class="s">&#39;readonly&#39;</span><span class="p">:</span>
3289 <span class="c"># g.trace(&#39;read-only: %s&#39; %fileName)</span>
3290 <span class="k">return</span> <span class="bp">False</span>
3291 <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
3292 <span class="c"># The user may have erased a file. Not an error.</span>
3293 <span class="k">if</span> <span class="n">theFile</span><span class="p">:</span> <span class="n">theFile</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
3294
3295 <span class="n">theFile</span> <span class="o">=</span> <span class="bp">None</span>
3296 <span class="k">try</span><span class="p">:</span>
3297 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">:</span>
3298 <span class="n">theFile</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="n">encoding</span><span class="o">=</span><span class="s">&#39;utf-8&#39;</span><span class="p">,</span><span class="n">mode</span><span class="o">=</span><span class="s">&#39;w&#39;</span><span class="p">)</span>
3299 <span class="k">else</span><span class="p">:</span>
3300 <span class="n">theFile</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fileName</span><span class="p">,</span><span class="n">mode</span><span class="o">=</span><span class="s">&#39;w&#39;</span><span class="p">)</span>
3301 <span class="k">if</span> <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span><span class="p">:</span>
3302 <span class="n">s</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span><span class="p">)</span>
3303 <span class="k">else</span><span class="p">:</span>
3304 <span class="n">s</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>
3305 <span class="k">if</span> <span class="ow">not</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">:</span>
3306 <span class="n">s</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">toEncodedString</span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="n">reportErrors</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
3307 <span class="n">theFile</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
3308
3309 <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
3310 <span class="k">if</span> <span class="mi">1</span><span class="p">:</span> <span class="c"># The user may have erased a file. Not an error.</span>
3311 <span class="n">g</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&#39;error writing&#39;</span><span class="p">,</span><span class="n">fileName</span><span class="p">)</span>
3312 <span class="n">g</span><span class="o">.</span><span class="n">es_exception</span><span class="p">()</span>
3313 <span class="k">return</span> <span class="bp">False</span>
3314
3315 <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
3316 <span class="n">g</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">&#39;unexpected exception writing&#39;</span><span class="p">,</span><span class="n">fileName</span><span class="p">)</span>
3317 <span class="n">g</span><span class="o">.</span><span class="n">es_exception</span><span class="p">()</span>
3318 <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span> <span class="k">raise</span>
3319 <span class="k">return</span> <span class="bp">False</span>
3320
3321 <span class="k">if</span> <span class="n">theFile</span><span class="p">:</span>
3322 <span class="n">theFile</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
3323 <span class="k">return</span> <span class="bp">True</span>
3324 <span class="k">else</span><span class="p">:</span>
3325 <span class="k">return</span> <span class="bp">False</span>
3326 <span class="c">#@-others</span>
3327<span class="c">#@-others</span>
3328<span class="c">#@-leo</span></div></div>
3329</pre></div>
3330
3331 </div>
3332 </div>
3333 </div>
3334 <div class="sphinxsidebar">
3335 <div class="sphinxsidebarwrapper">
3336<div id="searchbox" style="display: none">
3337 <h3>Quick search</h3>
3338 <form class="search" action="../../../search.html" method="get">
3339 <input type="text" name="q" />
3340 <input type="submit" value="Go" />
3341 <input type="hidden" name="check_keywords" value="yes" />
3342 <input type="hidden" name="area" value="default" />
3343 </form>
3344 <p class="searchtip" style="font-size: 90%">
3345 Enter search terms or a module, class or function name.
3346 </p>
3347</div>
3348<script type="text/javascript">$('#searchbox').show(0);</script>
3349 </div>
3350 </div>
3351 <div class="clearer"></div>
3352 </div>
3353 <div class="related">
3354 <h3>Navigation</h3>
3355 <ul>
3356 <li class="right" style="margin-right: 10px">
3357 <a href="../../../genindex.html" title="General Index"
3358 >index</a></li>
3359 <li class="right" >
3360 <a href="../../../py-modindex.html" title="Python Module Index"
3361 >modules</a> |</li>
3362 <li><a href="../../../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
3363 <li><a href="../../index.html" >Module code</a> &raquo;</li>
3364 </ul>
3365 </div>
3366 <div class="footer">
3367 &copy; Copyright 2013, Ed K. Ream.
3368 Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
3369 </div>
3370 </body>
3371</html>
0\ No newline at end of file3372\ No newline at end of file
13373
=== added file 'sphinx-docs/_build/html/_modules/leo/core/leoAtFile.html'
--- sphinx-docs/_build/html/_modules/leo/core/leoAtFile.html 1970-01-01 00:00:00 +0000
+++ sphinx-docs/_build/html/_modules/leo/core/leoAtFile.html 2013-05-03 14:47:26 +0000
@@ -0,0 +1,5787 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6 <head>
7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
9 <title>leo.core.leoAtFile &mdash; Leo API 4.11dev documentation</title>
10
11 <link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
12 <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
13
14 <script type="text/javascript">
15 var DOCUMENTATION_OPTIONS = {
16 URL_ROOT: '../../../',
17 VERSION: '4.11dev',
18 COLLAPSE_INDEX: false,
19 FILE_SUFFIX: '.html',
20 HAS_SOURCE: true
21 };
22 </script>
23 <script type="text/javascript" src="../../../_static/jquery.js"></script>
24 <script type="text/javascript" src="../../../_static/underscore.js"></script>
25 <script type="text/javascript" src="../../../_static/doctools.js"></script>
26 <link rel="top" title="Leo API 4.11dev documentation" href="../../../index.html" />
27 <link rel="up" title="Module code" href="../../index.html" />
28 </head>
29 <body>
30 <div class="related">
31 <h3>Navigation</h3>
32 <ul>
33 <li class="right" style="margin-right: 10px">
34 <a href="../../../genindex.html" title="General Index"
35 accesskey="I">index</a></li>
36 <li class="right" >
37 <a href="../../../py-modindex.html" title="Python Module Index"
38 >modules</a> |</li>
39 <li><a href="../../../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
40 <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li>
41 </ul>
42 </div>
43
44 <div class="document">
45 <div class="documentwrapper">
46 <div class="bodywrapper">
47 <div class="body">
48
49 <h1>Source code for leo.core.leoAtFile</h1><div class="highlight"><pre>
50<span class="c">#@+leo-ver=5-thin</span>
51<span class="c">#@+node:ekr.20041005105605.1: * @file leoAtFile.py</span>
52<span class="c">#@@first</span>
53 <span class="c"># Needed because of unicode characters in tests.</span>
54
55<span class="sd">&quot;&quot;&quot;Classes to read and write @file nodes.&quot;&quot;&quot;</span>
56
57<span class="c">#@@language python</span>
58<span class="c">#@@tabwidth -4</span>
59<span class="c">#@@pagewidth 60</span>
60
61<span class="c">#@+&lt;&lt; imports &gt;&gt;</span>
62<span class="c">#@+node:ekr.20041005105605.2: ** &lt;&lt; imports &gt;&gt; (leoAtFile)</span>
63<span class="kn">import</span> <span class="nn">leo.core.leoGlobals</span> <span class="kn">as</span> <span class="nn">g</span>
64
65<span class="c"># if g.app and g.app.use_psyco:</span>
66 <span class="c"># # print(&quot;enabled psyco classes&quot;,__file__)</span>
67 <span class="c"># try: from psyco.classes import *</span>
68 <span class="c"># except ImportError: pass</span>
69
70<span class="kn">import</span> <span class="nn">leo.core.leoNodes</span> <span class="kn">as</span> <span class="nn">leoNodes</span>
71
72<span class="kn">import</span> <span class="nn">os</span>
73<span class="kn">import</span> <span class="nn">sys</span>
74<span class="kn">import</span> <span class="nn">time</span>
75
76<span class="c">#@-&lt;&lt; imports &gt;&gt;</span>
77
78<span class="n">allow_cloned_sibs</span> <span class="o">=</span> <span class="bp">True</span> <span class="c"># True: allow cloned siblings in @file nodes.</span>
79
80<span class="c"># if allow_cloned_sibs:</span>
81 <span class="c"># print(&#39;** allow_cloned_sibs: True&#39;)</span>
82
83<span class="k">class</span> <span class="nc">atFile</span><span class="p">:</span>
84<div class="viewcode-block" id="atFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoAtFile.atFile">[docs]</a>
85 <span class="sd">&quot;&quot;&quot;The class implementing the atFile subcommander.&quot;&quot;&quot;</span>
86
87 <span class="c">#@+&lt;&lt; define class constants &gt;&gt;</span>
88 <span class="c">#@+node:ekr.20041005105605.5: ** &lt;&lt; define class constants &gt;&gt;</span>
89 <span class="c"># These constants must be global to this module</span>
90 <span class="c"># because they are shared by several classes.</span>
91
92 <span class="c"># The kind of at_directives.</span>
93 <span class="n">noDirective</span> <span class="o">=</span> <span class="mi">1</span> <span class="c"># not an at-directive.</span>
94 <span class="n">allDirective</span> <span class="o">=</span> <span class="mi">2</span> <span class="c"># at-all (4.2)</span>
95 <span class="n">docDirective</span> <span class="o">=</span> <span class="mi">3</span> <span class="c"># @doc.</span>
96 <span class="n">atDirective</span> <span class="o">=</span> <span class="mi">4</span> <span class="c"># @&lt;space&gt; or @&lt;newline&gt;</span>
97 <span class="n">codeDirective</span> <span class="o">=</span> <span class="mi">5</span> <span class="c"># @code</span>
98 <span class="n">cDirective</span> <span class="o">=</span> <span class="mi">6</span> <span class="c"># @c&lt;space&gt; or @c&lt;newline&gt;</span>
99 <span class="n">othersDirective</span> <span class="o">=</span> <span class="mi">7</span> <span class="c"># at-others</span>
100 <span class="n">miscDirective</span> <span class="o">=</span> <span class="mi">8</span> <span class="c"># All other directives</span>
101 <span class="n">rawDirective</span> <span class="o">=</span> <span class="mi">9</span> <span class="c"># @raw</span>
102 <span class="n">endRawDirective</span> <span class="o">=</span> <span class="mi">10</span> <span class="c"># @end_raw</span>
103
104 <span class="c"># The kind of sentinel line.</span>
105 <span class="n">noSentinel</span> <span class="o">=</span> <span class="mi">20</span> <span class="c"># Not a sentinel</span>
106 <span class="n">endAt</span> <span class="o">=</span> <span class="mi">21</span> <span class="c"># @-at</span>
107 <span class="n">endBody</span> <span class="o">=</span> <span class="mi">22</span> <span class="c"># @-body</span>
108 <span class="c"># not used = 23</span>
109 <span class="n">endDoc</span> <span class="o">=</span> <span class="mi">24</span> <span class="c"># @-doc</span>
110 <span class="n">endLeo</span> <span class="o">=</span> <span class="mi">25</span> <span class="c"># @-leo</span>
111 <span class="n">endNode</span> <span class="o">=</span> <span class="mi">26</span> <span class="c"># @-node</span>
112 <span class="n">endOthers</span> <span class="o">=</span> <span class="mi">27</span> <span class="c"># @-others</span>
113
114 <span class="c"># not used = 40</span>
115 <span class="n">startAt</span> <span class="o">=</span> <span class="mi">41</span> <span class="c"># @+at</span>
116 <span class="n">startBody</span> <span class="o">=</span> <span class="mi">42</span> <span class="c"># @+body</span>
117 <span class="n">startDoc</span> <span class="o">=</span> <span class="mi">43</span> <span class="c"># @+doc</span>
118 <span class="n">startLeo</span> <span class="o">=</span> <span class="mi">44</span> <span class="c"># @+leo</span>
119 <span class="n">startNode</span> <span class="o">=</span> <span class="mi">45</span> <span class="c"># @+node</span>
120 <span class="n">startOthers</span> <span class="o">=</span> <span class="mi">46</span> <span class="c"># @+others</span>
121
122 <span class="n">startComment</span> <span class="o">=</span> <span class="mi">60</span> <span class="c"># @comment</span>
123 <span class="n">startDelims</span> <span class="o">=</span> <span class="mi">61</span> <span class="c"># @delims</span>
124 <span class="n">startDirective</span> <span class="o">=</span> <span class="mi">62</span> <span class="c"># @@</span>
125 <span class="n">startRef</span> <span class="o">=</span> <span class="mi">63</span> <span class="c"># @&lt; &lt; ... &gt; &gt;</span>
126 <span class="n">startVerbatim</span> <span class="o">=</span> <span class="mi">64</span> <span class="c"># @verbatim</span>
127 <span class="n">startVerbatimAfterRef</span> <span class="o">=</span> <span class="mi">65</span> <span class="c"># @verbatimAfterRef (3.0 only)</span>
128
129 <span class="c"># New in 4.x. Paired</span>
130 <span class="n">endAll</span> <span class="o">=</span> <span class="mi">70</span> <span class="c"># at-all (4.2)</span>
131 <span class="n">endMiddle</span> <span class="o">=</span> <span class="mi">71</span> <span class="c"># at-middle (4.2)</span>
132 <span class="n">startAll</span> <span class="o">=</span> <span class="mi">72</span> <span class="c"># at+all (4.2)</span>
133 <span class="n">startMiddle</span> <span class="o">=</span> <span class="mi">73</span> <span class="c"># at+middle (4.2)</span>
134
135 <span class="c"># New in 4.x. Unpaired.</span>
136 <span class="n">startAfterRef</span> <span class="o">=</span> <span class="mi">80</span> <span class="c"># @afterref (4.0)</span>
137 <span class="n">startClone</span> <span class="o">=</span> <span class="mi">81</span> <span class="c"># @clone (4.2)</span>
138 <span class="n">startNl</span> <span class="o">=</span> <span class="mi">82</span> <span class="c"># @nl (4.0)</span>
139 <span class="n">startNonl</span> <span class="o">=</span> <span class="mi">83</span> <span class="c"># @nonl (4.0)</span>
140
141 <span class="c"># New in 4.8.</span>
142 <span class="n">endRef</span> <span class="o">=</span> <span class="mi">84</span> <span class="c"># @-&lt;&lt;</span>
143 <span class="c">#@-&lt;&lt; define class constants &gt;&gt;</span>
144 <span class="c">#@+&lt;&lt; define sentinelDict &gt;&gt;</span>
145 <span class="c">#@+node:ekr.20041005105605.6: ** &lt;&lt; define sentinelDict &gt;&gt;</span>
146 <span class="n">sentinelDict</span> <span class="o">=</span> <span class="p">{</span>
147
148 <span class="c"># Unpaired sentinels: 3.x and 4.x.</span>
149 <span class="s">&quot;@comment&quot;</span> <span class="p">:</span> <span class="n">startComment</span><span class="p">,</span>
150 <span class="s">&quot;@delims&quot;</span> <span class="p">:</span> <span class="n">startDelims</span><span class="p">,</span>
151 <span class="s">&quot;@verbatim&quot;</span><span class="p">:</span> <span class="n">startVerbatim</span><span class="p">,</span>
152
153 <span class="c"># Unpaired sentinels: 3.x only.</span>
154 <span class="s">&quot;@verbatimAfterRef&quot;</span><span class="p">:</span> <span class="n">startVerbatimAfterRef</span><span class="p">,</span>
155
156 <span class="c"># Unpaired sentinels: 4.x only.</span>
157 <span class="s">&quot;@afterref&quot;</span> <span class="p">:</span> <span class="n">startAfterRef</span><span class="p">,</span>
158 <span class="s">&quot;@clone&quot;</span> <span class="p">:</span> <span class="n">startClone</span><span class="p">,</span>
159 <span class="s">&quot;@nl&quot;</span> <span class="p">:</span> <span class="n">startNl</span><span class="p">,</span>
160 <span class="s">&quot;@nonl&quot;</span> <span class="p">:</span> <span class="n">startNonl</span><span class="p">,</span>
161
162 <span class="c"># Paired sentinels: 3.x only.</span>
163 <span class="s">&quot;@+body&quot;</span><span class="p">:</span> <span class="n">startBody</span><span class="p">,</span> <span class="s">&quot;@-body&quot;</span><span class="p">:</span> <span class="n">endBody</span><span class="p">,</span>
164
165 <span class="c"># Paired sentinels: 3.x and 4.x.</span>
166 <span class="s">&quot;@+all&quot;</span><span class="p">:</span> <span class="n">startAll</span><span class="p">,</span> <span class="s">&quot;@-all&quot;</span><span class="p">:</span> <span class="n">endAll</span><span class="p">,</span>
167 <span class="s">&quot;@+at&quot;</span><span class="p">:</span> <span class="n">startAt</span><span class="p">,</span> <span class="s">&quot;@-at&quot;</span><span class="p">:</span> <span class="n">endAt</span><span class="p">,</span>
168 <span class="s">&quot;@+doc&quot;</span><span class="p">:</span> <span class="n">startDoc</span><span class="p">,</span> <span class="s">&quot;@-doc&quot;</span><span class="p">:</span> <span class="n">endDoc</span><span class="p">,</span>
169 <span class="s">&quot;@+leo&quot;</span><span class="p">:</span> <span class="n">startLeo</span><span class="p">,</span> <span class="s">&quot;@-leo&quot;</span><span class="p">:</span> <span class="n">endLeo</span><span class="p">,</span>
170 <span class="s">&quot;@+middle&quot;</span><span class="p">:</span> <span class="n">startMiddle</span><span class="p">,</span> <span class="s">&quot;@-middle&quot;</span><span class="p">:</span> <span class="n">endMiddle</span><span class="p">,</span>
171 <span class="s">&quot;@+node&quot;</span><span class="p">:</span> <span class="n">startNode</span><span class="p">,</span> <span class="s">&quot;@-node&quot;</span><span class="p">:</span> <span class="n">endNode</span><span class="p">,</span>
172 <span class="s">&quot;@+others&quot;</span><span class="p">:</span> <span class="n">startOthers</span><span class="p">,</span> <span class="s">&quot;@-others&quot;</span><span class="p">:</span> <span class="n">endOthers</span><span class="p">,</span>
173 <span class="p">}</span>
174 <span class="c">#@-&lt;&lt; define sentinelDict &gt;&gt;</span>
175
176 <span class="c">#@+others</span>
177 <span class="c">#@+node:ekr.20041005105605.7: ** at.Birth &amp; init</span>
178 <span class="c">#@+node:ekr.20041005105605.8: *3* atFile.ctor</span>
179 <span class="c"># Note: g.getScript also call the at.__init__ and at.finishCreate().</span>
180
181 <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">c</span><span class="p">):</span>
182
183 <span class="c"># **Warning**: all these ivars must **also** be inited in initCommonIvars.</span>
184 <span class="bp">self</span><span class="o">.</span><span class="n">c</span> <span class="o">=</span> <span class="n">c</span>
185 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span> <span class="o">=</span> <span class="bp">False</span>
186 <span class="bp">self</span><span class="o">.</span><span class="n">fileCommands</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">fileCommands</span>
187 <span class="bp">self</span><span class="o">.</span><span class="n">errors</span> <span class="o">=</span> <span class="mi">0</span> <span class="c"># Make sure at.error() works even when not inited.</span>
188
189 <span class="c"># User options.</span>
190 <span class="bp">self</span><span class="o">.</span><span class="n">checkPythonCodeOnWrite</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getBool</span><span class="p">(</span>
191 <span class="s">&#39;check-python-code-on-write&#39;</span><span class="p">,</span><span class="n">default</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
192 <span class="bp">self</span><span class="o">.</span><span class="n">underindentEscapeString</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">getString</span><span class="p">(</span>
193 <span class="s">&#39;underindent-escape-string&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="s">&#39;</span><span class="se">\\</s

Subscribers

People subscribed via source and target branches

to all changes: