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
1=== added directory 'sphinx-docs'
2=== added file 'sphinx-docs/Makefile'
3--- sphinx-docs/Makefile 1970-01-01 00:00:00 +0000
4+++ sphinx-docs/Makefile 2013-05-03 14:47:26 +0000
5@@ -0,0 +1,181 @@
6+#@+leo-ver=5-thin
7+#@+node:peckj.20130503092808.1691: * @file Makefile
8+#@@language makefile
9+# Makefile for Sphinx documentation
10+#
11+
12+# You can set these variables from the command line.
13+SPHINXOPTS =
14+SPHINXBUILD = sphinx-build
15+PAPER =
16+BUILDDIR = _build
17+
18+# User-friendly check for sphinx-build
19+ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
20+$(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/)
21+endif
22+
23+# Internal variables.
24+PAPEROPT_a4 = -D latex_paper_size=a4
25+PAPEROPT_letter = -D latex_paper_size=letter
26+ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
27+# the i18n builder cannot share the environment and doctrees with the others
28+I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
29+
30+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
31+
32+help:
33+ @echo "Please use \`make <target>' where <target> is one of"
34+ @echo " html to make standalone HTML files"
35+ @echo " dirhtml to make HTML files named index.html in directories"
36+ @echo " singlehtml to make a single large HTML file"
37+ @echo " pickle to make pickle files"
38+ @echo " json to make JSON files"
39+ @echo " htmlhelp to make HTML files and a HTML help project"
40+ @echo " qthelp to make HTML files and a qthelp project"
41+ @echo " devhelp to make HTML files and a Devhelp project"
42+ @echo " epub to make an epub"
43+ @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
44+ @echo " latexpdf to make LaTeX files and run them through pdflatex"
45+ @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
46+ @echo " text to make text files"
47+ @echo " man to make manual pages"
48+ @echo " texinfo to make Texinfo files"
49+ @echo " info to make Texinfo files and run them through makeinfo"
50+ @echo " gettext to make PO message catalogs"
51+ @echo " changes to make an overview of all changed/added/deprecated items"
52+ @echo " xml to make Docutils-native XML files"
53+ @echo " pseudoxml to make pseudoxml-XML files for display purposes"
54+ @echo " linkcheck to check all external links for integrity"
55+ @echo " doctest to run all doctests embedded in the documentation (if enabled)"
56+
57+clean:
58+ rm -rf $(BUILDDIR)/*
59+
60+html:
61+ $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
62+ @echo
63+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
64+
65+dirhtml:
66+ $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
67+ @echo
68+ @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
69+
70+singlehtml:
71+ $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
72+ @echo
73+ @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
74+
75+pickle:
76+ $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
77+ @echo
78+ @echo "Build finished; now you can process the pickle files."
79+
80+json:
81+ $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
82+ @echo
83+ @echo "Build finished; now you can process the JSON files."
84+
85+htmlhelp:
86+ $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
87+ @echo
88+ @echo "Build finished; now you can run HTML Help Workshop with the" \
89+ ".hhp project file in $(BUILDDIR)/htmlhelp."
90+
91+qthelp:
92+ $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
93+ @echo
94+ @echo "Build finished; now you can run "qcollectiongenerator" with the" \
95+ ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
96+ @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Leo.qhcp"
97+ @echo "To view the help file:"
98+ @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Leo.qhc"
99+
100+devhelp:
101+ $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
102+ @echo
103+ @echo "Build finished."
104+ @echo "To view the help file:"
105+ @echo "# mkdir -p $$HOME/.local/share/devhelp/Leo"
106+ @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Leo"
107+ @echo "# devhelp"
108+
109+epub:
110+ $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
111+ @echo
112+ @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
113+
114+latex:
115+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
116+ @echo
117+ @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
118+ @echo "Run \`make' in that directory to run these through (pdf)latex" \
119+ "(use \`make latexpdf' here to do that automatically)."
120+
121+latexpdf:
122+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
123+ @echo "Running LaTeX files through pdflatex..."
124+ $(MAKE) -C $(BUILDDIR)/latex all-pdf
125+ @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
126+
127+latexpdfja:
128+ $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
129+ @echo "Running LaTeX files through platex and dvipdfmx..."
130+ $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
131+ @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
132+
133+text:
134+ $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
135+ @echo
136+ @echo "Build finished. The text files are in $(BUILDDIR)/text."
137+
138+man:
139+ $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
140+ @echo
141+ @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
142+
143+texinfo:
144+ $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
145+ @echo
146+ @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
147+ @echo "Run \`make' in that directory to run these through makeinfo" \
148+ "(use \`make info' here to do that automatically)."
149+
150+info:
151+ $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
152+ @echo "Running Texinfo files through makeinfo..."
153+ make -C $(BUILDDIR)/texinfo info
154+ @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
155+
156+gettext:
157+ $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
158+ @echo
159+ @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
160+
161+changes:
162+ $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
163+ @echo
164+ @echo "The overview file is in $(BUILDDIR)/changes."
165+
166+linkcheck:
167+ $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
168+ @echo
169+ @echo "Link check complete; look for any errors in the above output " \
170+ "or in $(BUILDDIR)/linkcheck/output.txt."
171+
172+doctest:
173+ $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
174+ @echo "Testing of doctests in the sources finished, look at the " \
175+ "results in $(BUILDDIR)/doctest/output.txt."
176+
177+xml:
178+ $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
179+ @echo
180+ @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
181+
182+pseudoxml:
183+ $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
184+ @echo
185+ @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
186+#@-leo
187
188=== added directory 'sphinx-docs/_build'
189=== added directory 'sphinx-docs/_build/doctrees'
190=== added file 'sphinx-docs/_build/doctrees/environment.pickle'
191Binary 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
192=== added file 'sphinx-docs/_build/doctrees/index.doctree'
193Binary 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
194=== added file 'sphinx-docs/_build/doctrees/leo.core.doctree'
195Binary 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
196=== added file 'sphinx-docs/_build/doctrees/leo.doctree'
197Binary 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
198=== added file 'sphinx-docs/_build/doctrees/leo.extensions.doctree'
199Binary 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
200=== added file 'sphinx-docs/_build/doctrees/leo.external.concurrent.doctree'
201Binary 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
202=== added file 'sphinx-docs/_build/doctrees/leo.external.concurrent.futures.doctree'
203Binary 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
204=== added file 'sphinx-docs/_build/doctrees/leo.external.doctree'
205Binary 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
206=== added file 'sphinx-docs/_build/doctrees/leo.modes.doctree'
207Binary 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
208=== added file 'sphinx-docs/_build/doctrees/leo.plugins.doctree'
209Binary 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
210=== added file 'sphinx-docs/_build/doctrees/leo.plugins.pygeotag.doctree'
211Binary 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
212=== added directory 'sphinx-docs/_build/html'
213=== added file 'sphinx-docs/_build/html/.buildinfo'
214--- sphinx-docs/_build/html/.buildinfo 1970-01-01 00:00:00 +0000
215+++ sphinx-docs/_build/html/.buildinfo 2013-05-03 14:47:26 +0000
216@@ -0,0 +1,4 @@
217+# Sphinx build info version 1
218+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
219+config: 1659204ed049af35611a59d0e4ea13de
220+tags: a205e9ed8462ae86fdd2f73488852ba9
221
222=== added directory 'sphinx-docs/_build/html/_modules'
223=== added file 'sphinx-docs/_build/html/_modules/index.html'
224--- sphinx-docs/_build/html/_modules/index.html 1970-01-01 00:00:00 +0000
225+++ sphinx-docs/_build/html/_modules/index.html 2013-05-03 14:47:26 +0000
226@@ -0,0 +1,206 @@
227+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
228+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
229+
230+
231+<html xmlns="http://www.w3.org/1999/xhtml">
232+ <head>
233+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
234+
235+ <title>Overview: module code &mdash; Leo API 4.11dev documentation</title>
236+
237+ <link rel="stylesheet" href="../_static/default.css" type="text/css" />
238+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
239+
240+ <script type="text/javascript">
241+ var DOCUMENTATION_OPTIONS = {
242+ URL_ROOT: '../',
243+ VERSION: '4.11dev',
244+ COLLAPSE_INDEX: false,
245+ FILE_SUFFIX: '.html',
246+ HAS_SOURCE: true
247+ };
248+ </script>
249+ <script type="text/javascript" src="../_static/jquery.js"></script>
250+ <script type="text/javascript" src="../_static/underscore.js"></script>
251+ <script type="text/javascript" src="../_static/doctools.js"></script>
252+ <link rel="top" title="Leo API 4.11dev documentation" href="../index.html" />
253+ </head>
254+ <body>
255+ <div class="related">
256+ <h3>Navigation</h3>
257+ <ul>
258+ <li class="right" style="margin-right: 10px">
259+ <a href="../genindex.html" title="General Index"
260+ accesskey="I">index</a></li>
261+ <li class="right" >
262+ <a href="../py-modindex.html" title="Python Module Index"
263+ >modules</a> |</li>
264+ <li><a href="../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
265+ </ul>
266+ </div>
267+
268+ <div class="document">
269+ <div class="documentwrapper">
270+ <div class="bodywrapper">
271+ <div class="body">
272+
273+ <h1>All modules for which code is available</h1>
274+<ul><li><a href="leo/__init__.html">leo.__init__</a></li>
275+<li><a href="leo/core/leoApp.html">leo.core.leoApp</a></li>
276+<li><a href="leo/core/leoAtFile.html">leo.core.leoAtFile</a></li>
277+<li><a href="leo/core/leoBridge.html">leo.core.leoBridge</a></li>
278+<li><a href="leo/core/leoBridgeTest.html">leo.core.leoBridgeTest</a></li>
279+<li><a href="leo/core/leoCache.html">leo.core.leoCache</a></li>
280+<li><a href="leo/core/leoChapters.html">leo.core.leoChapters</a></li>
281+<li><a href="leo/core/leoColor.html">leo.core.leoColor</a></li>
282+<li><a href="leo/core/leoCommands.html">leo.core.leoCommands</a></li>
283+<li><a href="leo/core/leoCompare.html">leo.core.leoCompare</a></li>
284+<li><a href="leo/core/leoConfig.html">leo.core.leoConfig</a></li>
285+<li><a href="leo/core/leoDebugger.html">leo.core.leoDebugger</a></li>
286+<li><a href="leo/core/leoDynamicTest.html">leo.core.leoDynamicTest</a></li>
287+<li><a href="leo/core/leoFileCommands.html">leo.core.leoFileCommands</a></li>
288+<li><a href="leo/core/leoFind.html">leo.core.leoFind</a></li>
289+<li><a href="leo/core/leoFrame.html">leo.core.leoFrame</a></li>
290+<li><a href="leo/core/leoGlobals.html">leo.core.leoGlobals</a></li>
291+<li><a href="leo/core/leoGui.html">leo.core.leoGui</a></li>
292+<li><a href="leo/core/leoIPython.html">leo.core.leoIPython</a></li>
293+<li><a href="leo/core/leoInspect.html">leo.core.leoInspect</a></li>
294+<li><a href="leo/core/leoKeys.html">leo.core.leoKeys</a></li>
295+<li><a href="leo/core/leoMenu.html">leo.core.leoMenu</a></li>
296+<li><a href="leo/core/leoNodes.html">leo.core.leoNodes</a></li>
297+<li><a href="leo/core/leoPlugins.html">leo.core.leoPlugins</a></li>
298+<li><a href="leo/core/leoPymacs.html">leo.core.leoPymacs</a></li>
299+<li><a href="leo/core/leoRst.html">leo.core.leoRst</a></li>
300+<li><a href="leo/core/leoShadow.html">leo.core.leoShadow</a></li>
301+<li><a href="leo/core/leoTangle.html">leo.core.leoTangle</a></li>
302+<li><a href="leo/core/leoTest.html">leo.core.leoTest</a></li>
303+<li><a href="leo/core/leoUndo.html">leo.core.leoUndo</a></li>
304+<li><a href="leo/core/runLeo.html">leo.core.runLeo</a></li>
305+<li><a href="leo/extensions/asciidoc.html">leo.extensions.asciidoc</a></li>
306+<li><a href="leo/extensions/colors.html">leo.extensions.colors</a></li>
307+<li><a href="leo/extensions/patch_11_01.html">leo.extensions.patch_11_01</a></li>
308+<li><a href="leo/external/codewise.html">leo.external.codewise</a></li>
309+<li><a href="leo/external/edb.html">leo.external.edb</a></li>
310+<li><a href="leo/external/leosax.html">leo.external.leosax</a></li>
311+<li><a href="leo/external/stringlist.html">leo.external.stringlist</a></li>
312+<li><a href="leo/plugins/FileActions.html">leo.plugins.FileActions</a></li>
313+<li><a href="leo/plugins/add_directives.html">leo.plugins.add_directives</a></li>
314+<li><a href="leo/plugins/at_folder.html">leo.plugins.at_folder</a></li>
315+<li><a href="leo/plugins/at_produce.html">leo.plugins.at_produce</a></li>
316+<li><a href="leo/plugins/at_view.html">leo.plugins.at_view</a></li>
317+<li><a href="leo/plugins/bibtex.html">leo.plugins.bibtex</a></li>
318+<li><a href="leo/plugins/chapter_hoist.html">leo.plugins.chapter_hoist</a></li>
319+<li><a href="leo/plugins/codewisecompleter.html">leo.plugins.codewisecompleter</a></li>
320+<li><a href="leo/plugins/colorize_headlines.html">leo.plugins.colorize_headlines</a></li>
321+<li><a href="leo/plugins/cursesGui.html">leo.plugins.cursesGui</a></li>
322+<li><a href="leo/plugins/datenodes.html">leo.plugins.datenodes</a></li>
323+<li><a href="leo/plugins/debugger_pudb.html">leo.plugins.debugger_pudb</a></li>
324+<li><a href="leo/plugins/dtest.html">leo.plugins.dtest</a></li>
325+<li><a href="leo/plugins/dump_globals.html">leo.plugins.dump_globals</a></li>
326+<li><a href="leo/plugins/empty_leo_file.html">leo.plugins.empty_leo_file</a></li>
327+<li><a href="leo/plugins/enable_gc.html">leo.plugins.enable_gc</a></li>
328+<li><a href="leo/plugins/expfolder.html">leo.plugins.expfolder</a></li>
329+<li><a href="leo/plugins/geotag.html">leo.plugins.geotag</a></li>
330+<li><a href="leo/plugins/gitarchive.html">leo.plugins.gitarchive</a></li>
331+<li><a href="leo/plugins/import_cisco_config.html">leo.plugins.import_cisco_config</a></li>
332+<li><a href="leo/plugins/initinclass.html">leo.plugins.initinclass</a></li>
333+<li><a href="leo/plugins/ipython.html">leo.plugins.ipython</a></li>
334+<li><a href="leo/plugins/jinjarender.html">leo.plugins.jinjarender</a></li>
335+<li><a href="leo/plugins/leoOPML.html">leo.plugins.leoOPML</a></li>
336+<li><a href="leo/plugins/leo_interface.html">leo.plugins.leo_interface</a></li>
337+<li><a href="leo/plugins/leo_to_html.html">leo.plugins.leo_to_html</a></li>
338+<li><a href="leo/plugins/leo_to_rtf.html">leo.plugins.leo_to_rtf</a></li>
339+<li><a href="leo/plugins/leocursor.html">leo.plugins.leocursor</a></li>
340+<li><a href="leo/plugins/leofeeds.html">leo.plugins.leofeeds</a></li>
341+<li><a href="leo/plugins/leomail.html">leo.plugins.leomail</a></li>
342+<li><a href="leo/plugins/lineNumbers.html">leo.plugins.lineNumbers</a></li>
343+<li><a href="leo/plugins/macros.html">leo.plugins.macros</a></li>
344+<li><a href="leo/plugins/maximizeNewWindows.html">leo.plugins.maximizeNewWindows</a></li>
345+<li><a href="leo/plugins/mime.html">leo.plugins.mime</a></li>
346+<li><a href="leo/plugins/mnplugins.html">leo.plugins.mnplugins</a></li>
347+<li><a href="leo/plugins/mod_autosave.html">leo.plugins.mod_autosave</a></li>
348+<li><a href="leo/plugins/mod_framesize.html">leo.plugins.mod_framesize</a></li>
349+<li><a href="leo/plugins/mod_http.html">leo.plugins.mod_http</a></li>
350+<li><a href="leo/plugins/mod_leo2ascd.html">leo.plugins.mod_leo2ascd</a></li>
351+<li><a href="leo/plugins/mod_read_dir_outline.html">leo.plugins.mod_read_dir_outline</a></li>
352+<li><a href="leo/plugins/mod_scripting.html">leo.plugins.mod_scripting</a></li>
353+<li><a href="leo/plugins/mod_speedups.html">leo.plugins.mod_speedups</a></li>
354+<li><a href="leo/plugins/mod_tempfname.html">leo.plugins.mod_tempfname</a></li>
355+<li><a href="leo/plugins/mod_timestamp.html">leo.plugins.mod_timestamp</a></li>
356+<li><a href="leo/plugins/multifile.html">leo.plugins.multifile</a></li>
357+<li><a href="leo/plugins/niceNosent.html">leo.plugins.niceNosent</a></li>
358+<li><a href="leo/plugins/nodeActions.html">leo.plugins.nodeActions</a></li>
359+<li><a href="leo/plugins/open_shell.html">leo.plugins.open_shell</a></li>
360+<li><a href="leo/plugins/outline_export.html">leo.plugins.outline_export</a></li>
361+<li><a href="leo/plugins/paste_as_headlines.html">leo.plugins.paste_as_headlines</a></li>
362+<li><a href="leo/plugins/pluginsTest.html">leo.plugins.pluginsTest</a></li>
363+<li><a href="leo/plugins/plugins_menu.html">leo.plugins.plugins_menu</a></li>
364+<li><a href="leo/plugins/pygeotag/pygeotag.html">leo.plugins.pygeotag.pygeotag</a></li>
365+<li><a href="leo/plugins/qtframecommands.html">leo.plugins.qtframecommands</a></li>
366+<li><a href="leo/plugins/quit_leo.html">leo.plugins.quit_leo</a></li>
367+<li><a href="leo/plugins/read_only_nodes.html">leo.plugins.read_only_nodes</a></li>
368+<li><a href="leo/plugins/redirect_to_log.html">leo.plugins.redirect_to_log</a></li>
369+<li><a href="leo/plugins/rst3.html">leo.plugins.rst3</a></li>
370+<li><a href="leo/plugins/run_nodes.html">leo.plugins.run_nodes</a></li>
371+<li><a href="leo/plugins/screenshots.html">leo.plugins.screenshots</a></li>
372+<li><a href="leo/plugins/script_io_to_body.html">leo.plugins.script_io_to_body</a></li>
373+<li><a href="leo/plugins/scripts_menu.html">leo.plugins.scripts_menu</a></li>
374+<li><a href="leo/plugins/setHomeDirectory.html">leo.plugins.setHomeDirectory</a></li>
375+<li><a href="leo/plugins/slideshow.html">leo.plugins.slideshow</a></li>
376+<li><a href="leo/plugins/startfile.html">leo.plugins.startfile</a></li>
377+<li><a href="leo/plugins/testRegisterCommand.html">leo.plugins.testRegisterCommand</a></li>
378+<li><a href="leo/plugins/textnode.html">leo.plugins.textnode</a></li>
379+<li><a href="leo/plugins/tkGui.html">leo.plugins.tkGui</a></li>
380+<li><a href="leo/plugins/tomboy_import.html">leo.plugins.tomboy_import</a></li>
381+<li><a href="leo/plugins/trace_gc_plugin.html">leo.plugins.trace_gc_plugin</a></li>
382+<li><a href="leo/plugins/trace_keys.html">leo.plugins.trace_keys</a></li>
383+<li><a href="leo/plugins/trace_tags.html">leo.plugins.trace_tags</a></li>
384+<li><a href="leo/plugins/valuespace.html">leo.plugins.valuespace</a></li>
385+<li><a href="leo/plugins/vim.html">leo.plugins.vim</a></li>
386+<li><a href="leo/plugins/word_count.html">leo.plugins.word_count</a></li>
387+<li><a href="leo/plugins/word_export.html">leo.plugins.word_export</a></li>
388+<li><a href="leo/plugins/xemacs.html">leo.plugins.xemacs</a></li>
389+<li><a href="leo/plugins/xsltWithNodes.html">leo.plugins.xsltWithNodes</a></li>
390+<li><a href="leo/plugins/zenity_file_dialogs.html">leo.plugins.zenity_file_dialogs</a></li>
391+</ul>
392+
393+ </div>
394+ </div>
395+ </div>
396+ <div class="sphinxsidebar">
397+ <div class="sphinxsidebarwrapper">
398+<div id="searchbox" style="display: none">
399+ <h3>Quick search</h3>
400+ <form class="search" action="../search.html" method="get">
401+ <input type="text" name="q" />
402+ <input type="submit" value="Go" />
403+ <input type="hidden" name="check_keywords" value="yes" />
404+ <input type="hidden" name="area" value="default" />
405+ </form>
406+ <p class="searchtip" style="font-size: 90%">
407+ Enter search terms or a module, class or function name.
408+ </p>
409+</div>
410+<script type="text/javascript">$('#searchbox').show(0);</script>
411+ </div>
412+ </div>
413+ <div class="clearer"></div>
414+ </div>
415+ <div class="related">
416+ <h3>Navigation</h3>
417+ <ul>
418+ <li class="right" style="margin-right: 10px">
419+ <a href="../genindex.html" title="General Index"
420+ >index</a></li>
421+ <li class="right" >
422+ <a href="../py-modindex.html" title="Python Module Index"
423+ >modules</a> |</li>
424+ <li><a href="../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
425+ </ul>
426+ </div>
427+ <div class="footer">
428+ &copy; Copyright 2013, Ed K. Ream.
429+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
430+ </div>
431+ </body>
432+</html>
433\ No newline at end of file
434
435=== added directory 'sphinx-docs/_build/html/_modules/leo'
436=== added file 'sphinx-docs/_build/html/_modules/leo/__init__.html'
437--- sphinx-docs/_build/html/_modules/leo/__init__.html 1970-01-01 00:00:00 +0000
438+++ sphinx-docs/_build/html/_modules/leo/__init__.html 2013-05-03 14:47:26 +0000
439@@ -0,0 +1,104 @@
440+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
441+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
442+
443+
444+<html xmlns="http://www.w3.org/1999/xhtml">
445+ <head>
446+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
447+
448+ <title>leo.__init__ &mdash; Leo API 4.11dev documentation</title>
449+
450+ <link rel="stylesheet" href="../../_static/default.css" type="text/css" />
451+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
452+
453+ <script type="text/javascript">
454+ var DOCUMENTATION_OPTIONS = {
455+ URL_ROOT: '../../',
456+ VERSION: '4.11dev',
457+ COLLAPSE_INDEX: false,
458+ FILE_SUFFIX: '.html',
459+ HAS_SOURCE: true
460+ };
461+ </script>
462+ <script type="text/javascript" src="../../_static/jquery.js"></script>
463+ <script type="text/javascript" src="../../_static/underscore.js"></script>
464+ <script type="text/javascript" src="../../_static/doctools.js"></script>
465+ <link rel="top" title="Leo API 4.11dev documentation" href="../../index.html" />
466+ <link rel="up" title="Module code" href="../index.html" />
467+ </head>
468+ <body>
469+ <div class="related">
470+ <h3>Navigation</h3>
471+ <ul>
472+ <li class="right" style="margin-right: 10px">
473+ <a href="../../genindex.html" title="General Index"
474+ accesskey="I">index</a></li>
475+ <li class="right" >
476+ <a href="../../py-modindex.html" title="Python Module Index"
477+ >modules</a> |</li>
478+ <li><a href="../../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
479+ <li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
480+ </ul>
481+ </div>
482+
483+ <div class="document">
484+ <div class="documentwrapper">
485+ <div class="bodywrapper">
486+ <div class="body">
487+
488+ <h1>Source code for leo.__init__</h1><pre>
489+# This file makes the leo directory a package.
490+
491+# The function allows the following code to work::
492+#
493+# import leo
494+# leo.run()
495+
496+<div class="viewcode-block" id="run"><a class="viewcode-back" href="../../leo.html#leo.__init__.run">[docs]</a>def run(*args,**keys):
497+ import pdb ; pdb = pdb.set_trace
498+ import leo.core.runLeo as runLeo
499+ runLeo.run(*args,**keys)
500+</div>
501+</pre>
502+
503+ </div>
504+ </div>
505+ </div>
506+ <div class="sphinxsidebar">
507+ <div class="sphinxsidebarwrapper">
508+<div id="searchbox" style="display: none">
509+ <h3>Quick search</h3>
510+ <form class="search" action="../../search.html" method="get">
511+ <input type="text" name="q" />
512+ <input type="submit" value="Go" />
513+ <input type="hidden" name="check_keywords" value="yes" />
514+ <input type="hidden" name="area" value="default" />
515+ </form>
516+ <p class="searchtip" style="font-size: 90%">
517+ Enter search terms or a module, class or function name.
518+ </p>
519+</div>
520+<script type="text/javascript">$('#searchbox').show(0);</script>
521+ </div>
522+ </div>
523+ <div class="clearer"></div>
524+ </div>
525+ <div class="related">
526+ <h3>Navigation</h3>
527+ <ul>
528+ <li class="right" style="margin-right: 10px">
529+ <a href="../../genindex.html" title="General Index"
530+ >index</a></li>
531+ <li class="right" >
532+ <a href="../../py-modindex.html" title="Python Module Index"
533+ >modules</a> |</li>
534+ <li><a href="../../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
535+ <li><a href="../index.html" >Module code</a> &raquo;</li>
536+ </ul>
537+ </div>
538+ <div class="footer">
539+ &copy; Copyright 2013, Ed K. Ream.
540+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
541+ </div>
542+ </body>
543+</html>
544\ No newline at end of file
545
546=== added directory 'sphinx-docs/_build/html/_modules/leo/core'
547=== added file 'sphinx-docs/_build/html/_modules/leo/core/leoApp.html'
548--- sphinx-docs/_build/html/_modules/leo/core/leoApp.html 1970-01-01 00:00:00 +0000
549+++ sphinx-docs/_build/html/_modules/leo/core/leoApp.html 2013-05-03 14:47:26 +0000
550@@ -0,0 +1,3371 @@
551+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
552+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
553+
554+
555+<html xmlns="http://www.w3.org/1999/xhtml">
556+ <head>
557+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
558+
559+ <title>leo.core.leoApp &mdash; Leo API 4.11dev documentation</title>
560+
561+ <link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
562+ <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
563+
564+ <script type="text/javascript">
565+ var DOCUMENTATION_OPTIONS = {
566+ URL_ROOT: '../../../',
567+ VERSION: '4.11dev',
568+ COLLAPSE_INDEX: false,
569+ FILE_SUFFIX: '.html',
570+ HAS_SOURCE: true
571+ };
572+ </script>
573+ <script type="text/javascript" src="../../../_static/jquery.js"></script>
574+ <script type="text/javascript" src="../../../_static/underscore.js"></script>
575+ <script type="text/javascript" src="../../../_static/doctools.js"></script>
576+ <link rel="top" title="Leo API 4.11dev documentation" href="../../../index.html" />
577+ <link rel="up" title="Module code" href="../../index.html" />
578+ </head>
579+ <body>
580+ <div class="related">
581+ <h3>Navigation</h3>
582+ <ul>
583+ <li class="right" style="margin-right: 10px">
584+ <a href="../../../genindex.html" title="General Index"
585+ accesskey="I">index</a></li>
586+ <li class="right" >
587+ <a href="../../../py-modindex.html" title="Python Module Index"
588+ >modules</a> |</li>
589+ <li><a href="../../../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
590+ <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li>
591+ </ul>
592+ </div>
593+
594+ <div class="document">
595+ <div class="documentwrapper">
596+ <div class="bodywrapper">
597+ <div class="body">
598+
599+ <h1>Source code for leo.core.leoApp</h1><div class="highlight"><pre>
600+<span class="c"># -*- coding: utf-8 -*-</span>
601+<span class="c">#@+leo-ver=5-thin</span>
602+<span class="c">#@+node:ekr.20031218072017.2608: * @file leoApp.py</span>
603+<span class="c">#@@first</span>
604+
605+<span class="c">#@@language python</span>
606+<span class="c">#@@tabwidth -4</span>
607+<span class="c">#@@pagewidth 60</span>
608+
609+<span class="c">#@+&lt;&lt; imports &gt;&gt;</span>
610+<span class="c">#@+node:ekr.20120219194520.10463: ** &lt;&lt; imports &gt;&gt; (leoApp)</span>
611+<span class="kn">import</span> <span class="nn">leo.core.leoGlobals</span> <span class="kn">as</span> <span class="nn">g</span>
612+
613+<span class="kn">import</span> <span class="nn">os</span>
614+<span class="kn">import</span> <span class="nn">optparse</span>
615+<span class="kn">import</span> <span class="nn">string</span>
616+<span class="kn">import</span> <span class="nn">sys</span>
617+<span class="kn">import</span> <span class="nn">traceback</span>
618+<span class="kn">import</span> <span class="nn">zipfile</span>
619+
620+<span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">:</span>
621+ <span class="kn">import</span> <span class="nn">io</span>
622+ <span class="n">StringIO</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">StringIO</span>
623+<span class="k">else</span><span class="p">:</span>
624+ <span class="kn">import</span> <span class="nn">cStringIO</span>
625+ <span class="n">StringIO</span> <span class="o">=</span> <span class="n">cStringIO</span><span class="o">.</span><span class="n">StringIO</span>
626+<span class="c">#@-&lt;&lt; imports &gt;&gt;</span>
627+
628+<span class="c">#@+others</span>
629+<span class="c">#@+node:ekr.20120209051836.10241: ** class LeoApp</span>
630+<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>
631+
632+ <span class="sd">&quot;&quot;&quot;A class representing the Leo application itself.</span>
633+
634+<span class="sd"> Ivars of this class are Leo&#39;s global variables.&quot;&quot;&quot;</span>
635+
636+ <span class="c">#@+others</span>
637+ <span class="c">#@+node:ekr.20031218072017.1416: *3* app.__init__</span>
638+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
639+
640+ <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>
641+ <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>
642+
643+ <span class="c"># These ivars are Leo&#39;s global vars.</span>
644+ <span class="c"># leoGlobals.py contains global switches to be set by hand.</span>
645+
646+ <span class="c"># Command-line arguments...</span>
647+ <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>
648+ <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>
649+ <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>
650+ <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>
651+ <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>
652+ <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>
653+ <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>
654+ <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>
655+ <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>
656+ <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>
657+ <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>
658+ <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>
659+ <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>
660+ <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>
661+ <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>
662+
663+ <span class="c"># Debugging &amp; statistics...</span>
664+ <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>
665+ <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>
666+ <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>
667+ <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>
668+ <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>
669+ <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>
670+ <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>
671+ <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>
672+
673+ <span class="c"># Error messages...</span>
674+ <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>
675+ <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>
676+ <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>
677+
678+ <span class="c"># Global directories...</span>
679+ <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>
680+ <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>
681+ <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>
682+ <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>
683+ <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>
684+ <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>
685+ <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>
686+
687+ <span class="c"># Global data...</span>
688+ <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>
689+ <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>
690+ <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>
691+ <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>
692+ <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>
693+ <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>
694+ <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>
695+
696+ <span class="c"># Global controller/manager objects...</span>
697+ <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>
698+ <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>
699+ <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>
700+ <span class="c"># self.logManager = None # The singleton LogManager instance.</span>
701+ <span class="c"># self.openWithManager = None # The singleton OpenWithManager instance.</span>
702+ <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>
703+ <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>
704+ <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>
705+
706+ <span class="c"># Global status vars...</span>
707+
708+ <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>
709+ <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>
710+ <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>
711+
712+ <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>
713+ <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>
714+ <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>
715+ <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>
716+ <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>
717+ <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>
718+ <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>
719+ <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>
720+
721+ <span class="c">#### To be moved to the LogManager.</span>
722+
723+ <span class="c"># The global log...</span>
724+ <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>
725+ <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>
726+ <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>
727+ <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>
728+ <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>
729+ <span class="bp">self</span><span class="o">.</span><span class="n">signon</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
730+ <span class="bp">self</span><span class="o">.</span><span class="n">signon2</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
731+ <span class="bp">self</span><span class="o">.</span><span class="n">signon_printed</span> <span class="o">=</span> <span class="bp">False</span>
732+
733+ <span class="c"># Global types.</span>
734+ <span class="kn">import</span> <span class="nn">leo.core.leoFrame</span> <span class="kn">as</span> <span class="nn">leoFrame</span>
735+ <span class="kn">import</span> <span class="nn">leo.core.leoGui</span> <span class="kn">as</span> <span class="nn">leoGui</span>
736+ <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>
737+ <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>
738+
739+ <span class="c">#### To be moved to OpenWithManager.</span>
740+
741+ <span class="c"># Open with data...</span>
742+ <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>
743+ <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>
744+ <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>
745+ <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>
746+
747+ <span class="c">#### To be moved to to the pluginsController.</span>
748+
749+ <span class="c"># Plugins and event handlers...</span>
750+ <span class="bp">self</span><span class="o">.</span><span class="n">afterHandler</span> <span class="o">=</span> <span class="bp">None</span>
751+ <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>
752+ <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>
753+ <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>
754+ <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>
755+ <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>
756+
757+ <span class="c"># Support for scripting...</span>
758+ <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>
759+ <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>
760+ <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>
761+
762+ <span class="c"># Unit testing...</span>
763+ <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>
764+ <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>
765+ <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>
766+ <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>
767+ <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>
768+ <span class="bp">self</span><span class="o">.</span><span class="n">unitTestMenusDict</span> <span class="o">=</span> <span class="p">{}</span>
769+ <span class="c"># Created in leoMenu.createMenuEntries for a unit test.</span>
770+ <span class="c"># keys are command names. values are sets of strokes.</span>
771+
772+ <span class="c"># Define all global data. </span>
773+ <span class="bp">self</span><span class="o">.</span><span class="n">define_global_constants</span><span class="p">()</span>
774+ <span class="bp">self</span><span class="o">.</span><span class="n">define_language_delims_dict</span><span class="p">()</span>
775+ <span class="bp">self</span><span class="o">.</span><span class="n">define_language_extension_dict</span><span class="p">()</span>
776+ <span class="bp">self</span><span class="o">.</span><span class="n">define_extension_dict</span><span class="p">()</span>
777+ <span class="bp">self</span><span class="o">.</span><span class="n">global_commands_dict</span> <span class="o">=</span> <span class="p">{}</span>
778+
779+ <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>
780+ <span class="c">#@+node:ekr.20031218072017.1417: *4* app.define_global_constants</span>
781+<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>
782+
783+ <span class="c"># self.prolog_string = &quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot;?&gt;&quot;</span>
784+
785+ <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>
786+ <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>
787+ <span class="bp">self</span><span class="o">.</span><span class="n">prolog_namespace_string</span> <span class="o">=</span> \
788+ <span class="s">&#39;xmlns:leo=&quot;http://edreamleo.org/namespaces/leo-python-editor/1.1&quot;&#39;</span>
789+ <span class="c">#@+node:ekr.20120522160137.9909: *4* app.define_language_delims_dict</span></div>
790+<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>
791+
792+ <span class="bp">self</span><span class="o">.</span><span class="n">language_delims_dict</span> <span class="o">=</span> <span class="p">{</span>
793+ <span class="c"># Internally, lower case is used for all language names.</span>
794+ <span class="c"># Keys are languages, values are 1,2 or 3-tuples of delims.</span>
795+ <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>
796+ <span class="s">&quot;ada&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
797+ <span class="s">&quot;ada95&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
798+ <span class="s">&quot;ahk&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
799+ <span class="s">&quot;antlr&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
800+ <span class="s">&quot;apacheconf&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
801+ <span class="s">&quot;apdl&quot;</span> <span class="p">:</span> <span class="s">&quot;!&quot;</span><span class="p">,</span>
802+ <span class="s">&quot;applescript&quot;</span> <span class="p">:</span> <span class="s">&quot;-- (* *)&quot;</span><span class="p">,</span>
803+ <span class="s">&quot;asp&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
804+ <span class="s">&quot;aspect_j&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
805+ <span class="s">&quot;assembly_macro32&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
806+ <span class="s">&quot;assembly_mcs51&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
807+ <span class="s">&quot;assembly_parrot&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
808+ <span class="s">&quot;assembly_r2000&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
809+ <span class="s">&quot;assembly_x86&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
810+ <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>
811+ <span class="s">&quot;awk&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
812+ <span class="s">&quot;b&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
813+ <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>
814+ <span class="s">&quot;bbj&quot;</span> <span class="p">:</span> <span class="s">&quot;/* */&quot;</span><span class="p">,</span>
815+ <span class="s">&quot;bcel&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
816+ <span class="s">&quot;bibtex&quot;</span> <span class="p">:</span> <span class="s">&quot;%&quot;</span><span class="p">,</span>
817+ <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>
818+ <span class="s">&quot;chill&quot;</span> <span class="p">:</span> <span class="s">&quot;/* */&quot;</span><span class="p">,</span>
819+ <span class="s">&quot;cobol&quot;</span> <span class="p">:</span> <span class="s">&quot;*&quot;</span><span class="p">,</span>
820+ <span class="s">&quot;coldfusion&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
821+ <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>
822+ <span class="s">&quot;cplusplus&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
823+ <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>
824+ <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>
825+ <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>
826+ <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>
827+ <span class="s">&quot;cython&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
828+ <span class="s">&quot;d&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
829+ <span class="s">&quot;doxygen&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
830+ <span class="s">&quot;eiffel&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
831+ <span class="s">&quot;elisp&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
832+ <span class="s">&quot;erlang&quot;</span> <span class="p">:</span> <span class="s">&quot;%&quot;</span><span class="p">,</span>
833+ <span class="s">&quot;factor&quot;</span> <span class="p">:</span> <span class="s">&quot;! ( )&quot;</span><span class="p">,</span>
834+ <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>
835+ <span class="s">&quot;fortran&quot;</span> <span class="p">:</span> <span class="s">&quot;C&quot;</span><span class="p">,</span>
836+ <span class="s">&quot;fortran90&quot;</span> <span class="p">:</span> <span class="s">&quot;!&quot;</span><span class="p">,</span>
837+ <span class="s">&quot;foxpro&quot;</span> <span class="p">:</span> <span class="s">&quot;&amp;&amp;&quot;</span><span class="p">,</span>
838+ <span class="s">&quot;gettext&quot;</span> <span class="p">:</span> <span class="s">&quot;# &quot;</span><span class="p">,</span>
839+ <span class="s">&quot;groovy&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
840+ <span class="s">&quot;haskell&quot;</span> <span class="p">:</span> <span class="s">&quot;--_ {-_ _-}&quot;</span><span class="p">,</span>
841+ <span class="s">&quot;haxe&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
842+ <span class="s">&quot;html&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
843+ <span class="s">&quot;i4gl&quot;</span> <span class="p">:</span> <span class="s">&quot;-- { }&quot;</span><span class="p">,</span>
844+ <span class="s">&quot;icon&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
845+ <span class="s">&quot;idl&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
846+ <span class="s">&quot;inform&quot;</span> <span class="p">:</span> <span class="s">&quot;!&quot;</span><span class="p">,</span>
847+ <span class="s">&quot;ini&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
848+ <span class="s">&quot;inno_setup&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
849+ <span class="s">&quot;interlis&quot;</span> <span class="p">:</span> <span class="s">&quot;/* */&quot;</span><span class="p">,</span>
850+ <span class="s">&quot;io&quot;</span> <span class="p">:</span> <span class="s">&quot;// */&quot;</span><span class="p">,</span>
851+ <span class="s">&quot;java&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
852+ <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>
853+ <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>
854+ <span class="s">&quot;jhtml&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
855+ <span class="s">&quot;jmk&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
856+ <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>
857+ <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>
858+ <span class="s">&quot;latex&quot;</span> <span class="p">:</span> <span class="s">&quot;%&quot;</span><span class="p">,</span>
859+ <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>
860+ <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>
861+ <span class="s">&quot;lotos&quot;</span> <span class="p">:</span> <span class="s">&quot;(* *)&quot;</span><span class="p">,</span>
862+ <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>
863+ <span class="s">&quot;mail&quot;</span> <span class="p">:</span> <span class="s">&quot;&gt;&quot;</span><span class="p">,</span>
864+ <span class="s">&quot;makefile&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
865+ <span class="s">&quot;maple&quot;</span> <span class="p">:</span> <span class="s">&quot;//&quot;</span><span class="p">,</span>
866+ <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>
867+ <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>
868+ <span class="s">&quot;ml&quot;</span> <span class="p">:</span> <span class="s">&quot;(* *)&quot;</span><span class="p">,</span>
869+ <span class="s">&quot;modula3&quot;</span> <span class="p">:</span> <span class="s">&quot;(* *)&quot;</span><span class="p">,</span>
870+ <span class="s">&quot;moin&quot;</span> <span class="p">:</span> <span class="s">&quot;##&quot;</span><span class="p">,</span>
871+ <span class="s">&quot;mqsc&quot;</span> <span class="p">:</span> <span class="s">&quot;*&quot;</span><span class="p">,</span>
872+ <span class="s">&quot;netrexx&quot;</span> <span class="p">:</span> <span class="s">&quot;-- /* */&quot;</span><span class="p">,</span>
873+ <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>
874+ <span class="s">&quot;nqc&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
875+ <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>
876+ <span class="s">&quot;nsis2&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
877+ <span class="s">&quot;objective_c&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
878+ <span class="s">&quot;objectrexx&quot;</span> <span class="p">:</span> <span class="s">&quot;-- /* */&quot;</span><span class="p">,</span>
879+ <span class="s">&quot;occam&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
880+ <span class="s">&quot;omnimark&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
881+ <span class="s">&quot;pascal&quot;</span> <span class="p">:</span> <span class="s">&quot;// { }&quot;</span><span class="p">,</span>
882+ <span class="s">&quot;perl&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
883+ <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>
884+ <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>
885+ <span class="s">&quot;pike&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
886+ <span class="s">&quot;pl1&quot;</span> <span class="p">:</span> <span class="s">&quot;/* */&quot;</span><span class="p">,</span>
887+ <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>
888+ <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>
889+ <span class="s">&quot;pop11&quot;</span> <span class="p">:</span> <span class="s">&quot;;;; /* */&quot;</span><span class="p">,</span>
890+ <span class="s">&quot;postscript&quot;</span> <span class="p">:</span> <span class="s">&quot;%&quot;</span><span class="p">,</span>
891+ <span class="s">&quot;povray&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
892+ <span class="s">&quot;powerdynamo&quot;</span> <span class="p">:</span> <span class="s">&quot;// &lt;!-- --&gt;&quot;</span><span class="p">,</span>
893+ <span class="s">&quot;prolog&quot;</span> <span class="p">:</span> <span class="s">&quot;% /* */&quot;</span><span class="p">,</span>
894+ <span class="s">&quot;psp&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
895+ <span class="s">&quot;ptl&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
896+ <span class="s">&quot;pvwave&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
897+ <span class="s">&quot;pyrex&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
898+ <span class="s">&quot;python&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
899+ <span class="s">&quot;r&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
900+ <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>
901+ <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>
902+ <span class="s">&quot;redcode&quot;</span> <span class="p">:</span> <span class="s">&quot;;&quot;</span><span class="p">,</span>
903+ <span class="s">&quot;rest&quot;</span> <span class="p">:</span> <span class="s">&quot;.._&quot;</span><span class="p">,</span>
904+ <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>
905+ <span class="s">&quot;rib&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
906+ <span class="s">&quot;rpmspec&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
907+ <span class="s">&quot;rst&quot;</span> <span class="p">:</span> <span class="s">&quot;.._&quot;</span><span class="p">,</span>
908+ <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>
909+ <span class="s">&quot;rview&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
910+ <span class="s">&quot;sas&quot;</span> <span class="p">:</span> <span class="s">&quot;* /* */&quot;</span><span class="p">,</span>
911+ <span class="s">&quot;scala&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
912+ <span class="s">&quot;scheme&quot;</span> <span class="p">:</span> <span class="s">&quot;; #| |#&quot;</span><span class="p">,</span>
913+ <span class="s">&quot;sdl_pr&quot;</span> <span class="p">:</span> <span class="s">&quot;/* */&quot;</span><span class="p">,</span>
914+ <span class="s">&quot;sgml&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
915+ <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>
916+ <span class="s">&quot;shellscript&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
917+ <span class="s">&quot;shtml&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
918+ <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>
919+ <span class="s">&quot;smi_mib&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
920+ <span class="s">&quot;splus&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
921+ <span class="s">&quot;sqr&quot;</span> <span class="p">:</span> <span class="s">&quot;!&quot;</span><span class="p">,</span>
922+ <span class="s">&quot;squidconf&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
923+ <span class="s">&quot;ssharp&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
924+ <span class="s">&quot;swig&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
925+ <span class="s">&quot;tcl&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
926+ <span class="s">&quot;tcltk&quot;</span> <span class="p">:</span> <span class="s">&quot;#&quot;</span><span class="p">,</span>
927+ <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>
928+ <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>
929+ <span class="s">&quot;texinfo&quot;</span> <span class="p">:</span> <span class="s">&quot;@c&quot;</span><span class="p">,</span>
930+ <span class="s">&quot;tpl&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
931+ <span class="s">&quot;tsql&quot;</span> <span class="p">:</span> <span class="s">&quot;-- /* */&quot;</span><span class="p">,</span>
932+ <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>
933+ <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>
934+ <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>
935+ <span class="s">&quot;uscript&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
936+ <span class="s">&quot;vbscript&quot;</span> <span class="p">:</span> <span class="s">&quot;&#39;&quot;</span><span class="p">,</span>
937+ <span class="s">&quot;velocity&quot;</span> <span class="p">:</span> <span class="s">&quot;## #* *#&quot;</span><span class="p">,</span>
938+ <span class="s">&quot;verilog&quot;</span> <span class="p">:</span> <span class="s">&quot;// /* */&quot;</span><span class="p">,</span>
939+ <span class="s">&quot;vhdl&quot;</span> <span class="p">:</span> <span class="s">&quot;--&quot;</span><span class="p">,</span>
940+ <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>
941+ <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>
942+ <span class="s">&quot;xml&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
943+ <span class="s">&quot;xsl&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
944+ <span class="s">&quot;xslt&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
945+ <span class="s">&quot;zpt&quot;</span> <span class="p">:</span> <span class="s">&quot;&lt;!-- --&gt;&quot;</span><span class="p">,</span>
946+
947+ <span class="c"># These aren&#39;t real languages, or have no delims...</span>
948+ <span class="c"># &quot;cvs_commit&quot; : &quot;&quot;,</span>
949+ <span class="c"># &quot;dsssl&quot; : &quot;; &lt;!-- --&gt;&quot;,</span>
950+ <span class="c"># &quot;embperl&quot; : &quot;&lt;!-- --&gt;&quot;, # Internal colorizing state.</span>
951+ <span class="c"># &quot;freemarker&quot; : &quot;&quot;,</span>
952+ <span class="c"># &quot;hex&quot; : &quot;&quot;,</span>
953+ <span class="c"># &quot;jcl&quot; : &quot;&quot;,</span>
954+ <span class="c"># &quot;patch&quot; : &quot;&quot;,</span>
955+ <span class="c"># &quot;phpsection&quot; : &quot;&lt;!-- --&gt;&quot;, # Internal colorizing state.</span>
956+ <span class="c"># &quot;props&quot; : &quot;#&quot;, # Unknown language.</span>
957+ <span class="c"># &quot;pseudoplain&quot; : &quot;&quot;,</span>
958+ <span class="c"># &quot;relax_ng_compact&quot; : &quot;#&quot;, # An xml schema.</span>
959+ <span class="c"># &quot;rtf&quot; : &quot;&quot;,</span>
960+ <span class="c"># &quot;svn_commit&quot; : &quot;&quot;,</span>
961+ <span class="p">}</span>
962+ <span class="c">#@+node:ekr.20120522160137.9910: *4* app.define_language_extension_dict</span></div>
963+<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>
964+
965+ <span class="c"># Used only by c.getOpenWithExt.</span>
966+
967+ <span class="c"># Keys are languages, values are extensions.</span>
968+ <span class="bp">self</span><span class="o">.</span><span class="n">language_extension_dict</span> <span class="o">=</span> <span class="p">{</span>
969+ <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>
970+ <span class="s">&quot;ada&quot;</span> <span class="p">:</span> <span class="s">&quot;ada&quot;</span><span class="p">,</span>
971+ <span class="s">&quot;ada95&quot;</span> <span class="p">:</span> <span class="s">&quot;ada&quot;</span><span class="p">,</span>
972+ <span class="s">&quot;ahk&quot;</span> <span class="p">:</span> <span class="s">&quot;ahk&quot;</span><span class="p">,</span>
973+ <span class="s">&quot;antlr&quot;</span> <span class="p">:</span> <span class="s">&quot;g&quot;</span><span class="p">,</span>
974+ <span class="s">&quot;apacheconf&quot;</span> <span class="p">:</span> <span class="s">&quot;conf&quot;</span><span class="p">,</span>
975+ <span class="s">&quot;apdl&quot;</span> <span class="p">:</span> <span class="s">&quot;apdl&quot;</span><span class="p">,</span>
976+ <span class="s">&quot;applescript&quot;</span> <span class="p">:</span> <span class="s">&quot;scpt&quot;</span><span class="p">,</span>
977+ <span class="s">&quot;asp&quot;</span> <span class="p">:</span> <span class="s">&quot;asp&quot;</span><span class="p">,</span>
978+ <span class="s">&quot;aspect_j&quot;</span> <span class="p">:</span> <span class="s">&quot;aj&quot;</span><span class="p">,</span>
979+ <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>
980+ <span class="s">&quot;awk&quot;</span> <span class="p">:</span> <span class="s">&quot;awk&quot;</span><span class="p">,</span>
981+ <span class="s">&quot;b&quot;</span> <span class="p">:</span> <span class="s">&quot;b&quot;</span><span class="p">,</span>
982+ <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>
983+ <span class="s">&quot;bbj&quot;</span> <span class="p">:</span> <span class="s">&quot;bbj&quot;</span><span class="p">,</span>
984+ <span class="s">&quot;bcel&quot;</span> <span class="p">:</span> <span class="s">&quot;bcel&quot;</span><span class="p">,</span>
985+ <span class="s">&quot;bibtex&quot;</span> <span class="p">:</span> <span class="s">&quot;bib&quot;</span><span class="p">,</span>
986+ <span class="s">&quot;c&quot;</span> <span class="p">:</span> <span class="s">&quot;c&quot;</span><span class="p">,</span>
987+ <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>
988+ <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>
989+ <span class="s">&quot;coldfusion&quot;</span> <span class="p">:</span> <span class="s">&quot;cfm&quot;</span><span class="p">,</span>
990+ <span class="s">&quot;config&quot;</span> <span class="p">:</span> <span class="s">&quot;cfg&quot;</span><span class="p">,</span>
991+ <span class="s">&quot;cplusplus&quot;</span> <span class="p">:</span> <span class="s">&quot;c++&quot;</span><span class="p">,</span>
992+ <span class="s">&quot;cpp&quot;</span> <span class="p">:</span> <span class="s">&quot;cpp&quot;</span><span class="p">,</span>
993+ <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>
994+ <span class="s">&quot;cweb&quot;</span> <span class="p">:</span> <span class="s">&quot;w&quot;</span><span class="p">,</span>
995+ <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>
996+ <span class="s">&quot;d&quot;</span> <span class="p">:</span> <span class="s">&quot;d&quot;</span><span class="p">,</span>
997+ <span class="s">&quot;eiffel&quot;</span> <span class="p">:</span> <span class="s">&quot;e&quot;</span><span class="p">,</span>
998+ <span class="s">&quot;elisp&quot;</span> <span class="p">:</span> <span class="s">&quot;el&quot;</span><span class="p">,</span>
999+ <span class="s">&quot;erlang&quot;</span> <span class="p">:</span> <span class="s">&quot;erl&quot;</span><span class="p">,</span>
1000+ <span class="s">&quot;factor&quot;</span> <span class="p">:</span> <span class="s">&quot;factor&quot;</span><span class="p">,</span>
1001+ <span class="s">&quot;forth&quot;</span> <span class="p">:</span> <span class="s">&quot;forth&quot;</span><span class="p">,</span>
1002+ <span class="s">&quot;fortran&quot;</span> <span class="p">:</span> <span class="s">&quot;f&quot;</span><span class="p">,</span>
1003+ <span class="s">&quot;fortran90&quot;</span> <span class="p">:</span> <span class="s">&quot;f90&quot;</span><span class="p">,</span>
1004+ <span class="s">&quot;foxpro&quot;</span> <span class="p">:</span> <span class="s">&quot;prg&quot;</span><span class="p">,</span>
1005+ <span class="s">&quot;gettext&quot;</span> <span class="p">:</span> <span class="s">&quot;po&quot;</span><span class="p">,</span>
1006+ <span class="s">&quot;groovy&quot;</span> <span class="p">:</span> <span class="s">&quot;groovy&quot;</span><span class="p">,</span>
1007+ <span class="s">&quot;haskell&quot;</span> <span class="p">:</span> <span class="s">&quot;hs&quot;</span><span class="p">,</span>
1008+ <span class="s">&quot;haxe&quot;</span> <span class="p">:</span> <span class="s">&quot;hx&quot;</span><span class="p">,</span>
1009+ <span class="s">&quot;html&quot;</span> <span class="p">:</span> <span class="s">&quot;html&quot;</span><span class="p">,</span>
1010+ <span class="s">&quot;i4gl&quot;</span> <span class="p">:</span> <span class="s">&quot;i4gl&quot;</span><span class="p">,</span>
1011+ <span class="s">&quot;icon&quot;</span> <span class="p">:</span> <span class="s">&quot;icn&quot;</span><span class="p">,</span>
1012+ <span class="s">&quot;idl&quot;</span> <span class="p">:</span> <span class="s">&quot;idl&quot;</span><span class="p">,</span>
1013+ <span class="s">&quot;inform&quot;</span> <span class="p">:</span> <span class="s">&quot;inf&quot;</span><span class="p">,</span>
1014+ <span class="s">&quot;ini&quot;</span> <span class="p">:</span> <span class="s">&quot;ini&quot;</span><span class="p">,</span>
1015+ <span class="s">&quot;inno_setup&quot;</span> <span class="p">:</span> <span class="s">&quot;iss&quot;</span><span class="p">,</span>
1016+ <span class="s">&quot;io&quot;</span> <span class="p">:</span> <span class="s">&quot;io&quot;</span><span class="p">,</span>
1017+ <span class="s">&quot;java&quot;</span> <span class="p">:</span> <span class="s">&quot;java&quot;</span><span class="p">,</span>
1018+ <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>
1019+ <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>
1020+ <span class="s">&quot;jhtml&quot;</span> <span class="p">:</span> <span class="s">&quot;jhtml&quot;</span><span class="p">,</span>
1021+ <span class="s">&quot;jmk&quot;</span> <span class="p">:</span> <span class="s">&quot;jmk&quot;</span><span class="p">,</span>
1022+ <span class="s">&quot;jsp&quot;</span> <span class="p">:</span> <span class="s">&quot;jsp&quot;</span><span class="p">,</span>
1023+ <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>
1024+ <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>
1025+ <span class="s">&quot;lilypond&quot;</span> <span class="p">:</span> <span class="s">&quot;ly&quot;</span><span class="p">,</span>
1026+ <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>
1027+ <span class="s">&quot;mail&quot;</span> <span class="p">:</span> <span class="s">&quot;eml&quot;</span><span class="p">,</span>
1028+ <span class="s">&quot;makefile&quot;</span> <span class="p">:</span> <span class="s">&quot;mak&quot;</span><span class="p">,</span>
1029+ <span class="s">&quot;maple&quot;</span> <span class="p">:</span> <span class="s">&quot;mpl&quot;</span><span class="p">,</span>
1030+ <span class="s">&quot;matlab&quot;</span> <span class="p">:</span> <span class="s">&quot;m&quot;</span><span class="p">,</span>
1031+ <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>
1032+ <span class="s">&quot;ml&quot;</span> <span class="p">:</span> <span class="s">&quot;ml&quot;</span><span class="p">,</span>
1033+ <span class="s">&quot;modula3&quot;</span> <span class="p">:</span> <span class="s">&quot;mod&quot;</span><span class="p">,</span>
1034+ <span class="s">&quot;moin&quot;</span> <span class="p">:</span> <span class="s">&quot;wiki&quot;</span><span class="p">,</span>
1035+ <span class="s">&quot;mqsc&quot;</span> <span class="p">:</span> <span class="s">&quot;mqsc&quot;</span><span class="p">,</span>
1036+ <span class="s">&quot;noweb&quot;</span> <span class="p">:</span> <span class="s">&quot;nw&quot;</span><span class="p">,</span>
1037+ <span class="s">&quot;nqc&quot;</span> <span class="p">:</span> <span class="s">&quot;nqc&quot;</span><span class="p">,</span>
1038+ <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>
1039+ <span class="s">&quot;nsis2&quot;</span> <span class="p">:</span> <span class="s">&quot;nsi&quot;</span><span class="p">,</span>
1040+ <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>
1041+ <span class="s">&quot;objectrexx&quot;</span> <span class="p">:</span> <span class="s">&quot;rex&quot;</span><span class="p">,</span>
1042+ <span class="s">&quot;occam&quot;</span> <span class="p">:</span> <span class="s">&quot;occ&quot;</span><span class="p">,</span>
1043+ <span class="s">&quot;omnimark&quot;</span> <span class="p">:</span> <span class="s">&quot;xom&quot;</span><span class="p">,</span>
1044+ <span class="s">&quot;pascal&quot;</span> <span class="p">:</span> <span class="s">&quot;p&quot;</span><span class="p">,</span>
1045+ <span class="s">&quot;perl&quot;</span> <span class="p">:</span> <span class="s">&quot;pl&quot;</span><span class="p">,</span>
1046+ <span class="s">&quot;perlpod&quot;</span> <span class="p">:</span> <span class="s">&quot;pod&quot;</span><span class="p">,</span>
1047+ <span class="s">&quot;php&quot;</span> <span class="p">:</span> <span class="s">&quot;php&quot;</span><span class="p">,</span>
1048+ <span class="s">&quot;pike&quot;</span> <span class="p">:</span> <span class="s">&quot;pike&quot;</span><span class="p">,</span>
1049+ <span class="s">&quot;pl1&quot;</span> <span class="p">:</span> <span class="s">&quot;pl1&quot;</span><span class="p">,</span>
1050+ <span class="s">&quot;plain&quot;</span> <span class="p">:</span> <span class="s">&quot;txt&quot;</span><span class="p">,</span>
1051+ <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>
1052+ <span class="c"># &quot;pop11&quot; : &quot;p&quot;, # Conflicts with pascall.</span>
1053+ <span class="s">&quot;postscript&quot;</span> <span class="p">:</span> <span class="s">&quot;ps&quot;</span><span class="p">,</span>
1054+ <span class="s">&quot;povray&quot;</span> <span class="p">:</span> <span class="s">&quot;pov&quot;</span><span class="p">,</span>
1055+ <span class="s">&quot;prolog&quot;</span> <span class="p">:</span> <span class="s">&quot;pro&quot;</span><span class="p">,</span>
1056+ <span class="s">&quot;psp&quot;</span> <span class="p">:</span> <span class="s">&quot;psp&quot;</span><span class="p">,</span>
1057+ <span class="s">&quot;ptl&quot;</span> <span class="p">:</span> <span class="s">&quot;ptl&quot;</span><span class="p">,</span>
1058+ <span class="s">&quot;pyrex&quot;</span> <span class="p">:</span> <span class="s">&quot;pyx&quot;</span><span class="p">,</span>
1059+ <span class="s">&quot;python&quot;</span> <span class="p">:</span> <span class="s">&quot;py&quot;</span><span class="p">,</span>
1060+ <span class="s">&quot;r&quot;</span> <span class="p">:</span> <span class="s">&quot;r&quot;</span><span class="p">,</span>
1061+ <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>
1062+ <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>
1063+ <span class="s">&quot;rhtml&quot;</span> <span class="p">:</span> <span class="s">&quot;rhtml&quot;</span><span class="p">,</span>
1064+ <span class="s">&quot;rib&quot;</span> <span class="p">:</span> <span class="s">&quot;rib&quot;</span><span class="p">,</span>
1065+ <span class="s">&quot;rst&quot;</span> <span class="p">:</span> <span class="s">&quot;rest&quot;</span><span class="p">,</span>
1066+ <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>
1067+ <span class="s">&quot;sas&quot;</span> <span class="p">:</span> <span class="s">&quot;sas&quot;</span><span class="p">,</span>
1068+ <span class="s">&quot;scala&quot;</span> <span class="p">:</span> <span class="s">&quot;scala&quot;</span><span class="p">,</span>
1069+ <span class="s">&quot;scheme&quot;</span> <span class="p">:</span> <span class="s">&quot;scm&quot;</span><span class="p">,</span>
1070+ <span class="s">&quot;sgml&quot;</span> <span class="p">:</span> <span class="s">&quot;sgml&quot;</span><span class="p">,</span>
1071+ <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>
1072+ <span class="s">&quot;shellscript&quot;</span> <span class="p">:</span> <span class="s">&quot;sh&quot;</span><span class="p">,</span>
1073+ <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>
1074+ <span class="s">&quot;smalltalk&quot;</span> <span class="p">:</span> <span class="s">&quot;sm&quot;</span><span class="p">,</span>
1075+ <span class="s">&quot;splus&quot;</span> <span class="p">:</span> <span class="s">&quot;splus&quot;</span><span class="p">,</span>
1076+ <span class="s">&quot;sqr&quot;</span> <span class="p">:</span> <span class="s">&quot;sqr&quot;</span><span class="p">,</span>
1077+ <span class="s">&quot;ssharp&quot;</span> <span class="p">:</span> <span class="s">&quot;ss&quot;</span><span class="p">,</span>
1078+ <span class="s">&quot;swig&quot;</span> <span class="p">:</span> <span class="s">&quot;i&quot;</span><span class="p">,</span>
1079+ <span class="s">&quot;tcl&quot;</span> <span class="p">:</span> <span class="s">&quot;tcl&quot;</span><span class="p">,</span>
1080+ <span class="s">&quot;tcltk&quot;</span> <span class="p">:</span> <span class="s">&quot;tcl&quot;</span><span class="p">,</span>
1081+ <span class="s">&quot;tex&quot;</span> <span class="p">:</span> <span class="s">&quot;tex&quot;</span><span class="p">,</span>
1082+ <span class="s">&quot;texinfo&quot;</span> <span class="p">:</span> <span class="s">&quot;info&quot;</span><span class="p">,</span>
1083+ <span class="s">&quot;text&quot;</span> <span class="p">:</span> <span class="s">&quot;txt&quot;</span><span class="p">,</span>
1084+ <span class="s">&quot;tpl&quot;</span> <span class="p">:</span> <span class="s">&quot;tpl&quot;</span><span class="p">,</span>
1085+ <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>
1086+ <span class="s">&quot;typescript&quot;</span> <span class="p">:</span> <span class="s">&quot;ts&quot;</span><span class="p">,</span>
1087+ <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>
1088+ <span class="s">&quot;uscript&quot;</span> <span class="p">:</span> <span class="s">&quot;uc&quot;</span><span class="p">,</span>
1089+ <span class="s">&quot;vbscript&quot;</span> <span class="p">:</span> <span class="s">&quot;vbs&quot;</span><span class="p">,</span>
1090+ <span class="s">&quot;velocity&quot;</span> <span class="p">:</span> <span class="s">&quot;vtl&quot;</span><span class="p">,</span>
1091+ <span class="s">&quot;verilog&quot;</span> <span class="p">:</span> <span class="s">&quot;v&quot;</span><span class="p">,</span>
1092+ <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>
1093+ <span class="s">&quot;vim&quot;</span> <span class="p">:</span> <span class="s">&quot;vim&quot;</span><span class="p">,</span>
1094+ <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>
1095+ <span class="s">&quot;xml&quot;</span> <span class="p">:</span> <span class="s">&quot;xml&quot;</span><span class="p">,</span>
1096+ <span class="s">&quot;xsl&quot;</span> <span class="p">:</span> <span class="s">&quot;xsl&quot;</span><span class="p">,</span>
1097+ <span class="s">&quot;xslt&quot;</span> <span class="p">:</span> <span class="s">&quot;xsl&quot;</span><span class="p">,</span>
1098+ <span class="s">&quot;zpt&quot;</span> <span class="p">:</span> <span class="s">&quot;zpt&quot;</span><span class="p">,</span>
1099+ <span class="p">}</span>
1100+
1101+ <span class="c"># These aren&#39;t real languages, or have no delims...</span>
1102+ <span class="c"># cvs_commit, dsssl, embperl, freemarker, hex, jcl,</span>
1103+ <span class="c"># patch, phpsection, progress, props, pseudoplain,</span>
1104+ <span class="c"># relax_ng_compact, rtf, svn_commit.</span>
1105+
1106+ <span class="c"># These have extensions which conflict with other languages.</span>
1107+ <span class="c"># assembly_macro32: .asm or .a</span>
1108+ <span class="c"># assembly_mcs51: .asm or .a</span>
1109+ <span class="c"># assembly_parrot: .asm or .a</span>
1110+ <span class="c"># assembly_r2000: .asm or .a</span>
1111+ <span class="c"># assembly_x86: .asm or .a</span>
1112+ <span class="c"># squidconf: .conf</span>
1113+ <span class="c"># rpmspec: .rpm</span>
1114+ <span class="c">#@+node:ekr.20120522160137.9911: *4* app.define_extension_dict</span></div>
1115+<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>
1116+
1117+ <span class="c"># Keys are extensions, values are languages</span>
1118+ <span class="bp">self</span><span class="o">.</span><span class="n">extension_dict</span> <span class="o">=</span> <span class="p">{</span>
1119+ <span class="c"># &quot;ada&quot;: &quot;ada&quot;,</span>
1120+ <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>
1121+ <span class="s">&quot;ahk&quot;</span><span class="p">:</span> <span class="s">&quot;autohotkey&quot;</span><span class="p">,</span>
1122+ <span class="s">&quot;aj&quot;</span><span class="p">:</span> <span class="s">&quot;aspect_j&quot;</span><span class="p">,</span>
1123+ <span class="s">&quot;apdl&quot;</span><span class="p">:</span> <span class="s">&quot;apdl&quot;</span><span class="p">,</span>
1124+ <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>
1125+ <span class="s">&quot;asp&quot;</span><span class="p">:</span> <span class="s">&quot;asp&quot;</span><span class="p">,</span>
1126+ <span class="s">&quot;awk&quot;</span><span class="p">:</span> <span class="s">&quot;awk&quot;</span><span class="p">,</span>
1127+ <span class="s">&quot;b&quot;</span><span class="p">:</span> <span class="s">&quot;b&quot;</span><span class="p">,</span>
1128+ <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>
1129+ <span class="s">&quot;bat&quot;</span><span class="p">:</span> <span class="s">&quot;batch&quot;</span><span class="p">,</span>
1130+ <span class="s">&quot;bbj&quot;</span><span class="p">:</span> <span class="s">&quot;bbj&quot;</span><span class="p">,</span>
1131+ <span class="s">&quot;bcel&quot;</span><span class="p">:</span> <span class="s">&quot;bcel&quot;</span><span class="p">,</span>
1132+ <span class="s">&quot;bib&quot;</span><span class="p">:</span> <span class="s">&quot;bibtex&quot;</span><span class="p">,</span>
1133+ <span class="s">&quot;c&quot;</span><span class="p">:</span> <span class="s">&quot;c&quot;</span><span class="p">,</span>
1134+ <span class="s">&quot;c++&quot;</span><span class="p">:</span> <span class="s">&quot;cplusplus&quot;</span><span class="p">,</span>
1135+ <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>
1136+ <span class="s">&quot;cfg&quot;</span><span class="p">:</span> <span class="s">&quot;config&quot;</span><span class="p">,</span>
1137+ <span class="s">&quot;cfm&quot;</span><span class="p">:</span> <span class="s">&quot;coldfusion&quot;</span><span class="p">,</span>
1138+ <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>
1139+ <span class="s">&quot;conf&quot;</span><span class="p">:</span> <span class="s">&quot;apacheconf&quot;</span><span class="p">,</span>
1140+ <span class="s">&quot;cpp&quot;</span><span class="p">:</span> <span class="s">&quot;cpp&quot;</span><span class="p">,</span>
1141+ <span class="s">&quot;css&quot;</span><span class="p">:</span> <span class="s">&quot;css&quot;</span><span class="p">,</span>
1142+ <span class="s">&quot;d&quot;</span><span class="p">:</span> <span class="s">&quot;d&quot;</span><span class="p">,</span>
1143+ <span class="s">&quot;e&quot;</span><span class="p">:</span> <span class="s">&quot;eiffel&quot;</span><span class="p">,</span>
1144+ <span class="s">&quot;el&quot;</span><span class="p">:</span> <span class="s">&quot;elisp&quot;</span><span class="p">,</span>
1145+ <span class="s">&quot;eml&quot;</span><span class="p">:</span> <span class="s">&quot;mail&quot;</span><span class="p">,</span>
1146+ <span class="s">&quot;erl&quot;</span><span class="p">:</span> <span class="s">&quot;erlang&quot;</span><span class="p">,</span>
1147+ <span class="s">&quot;f&quot;</span><span class="p">:</span> <span class="s">&quot;fortran&quot;</span><span class="p">,</span>
1148+ <span class="s">&quot;f90&quot;</span><span class="p">:</span> <span class="s">&quot;fortran90&quot;</span><span class="p">,</span>
1149+ <span class="s">&quot;factor&quot;</span><span class="p">:</span> <span class="s">&quot;factor&quot;</span><span class="p">,</span>
1150+ <span class="s">&quot;forth&quot;</span><span class="p">:</span> <span class="s">&quot;forth&quot;</span><span class="p">,</span>
1151+ <span class="s">&quot;g&quot;</span><span class="p">:</span> <span class="s">&quot;antlr&quot;</span><span class="p">,</span>
1152+ <span class="s">&quot;groovy&quot;</span><span class="p">:</span> <span class="s">&quot;groovy&quot;</span><span class="p">,</span>
1153+ <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>
1154+ <span class="s">&quot;hs&quot;</span><span class="p">:</span> <span class="s">&quot;haskell&quot;</span><span class="p">,</span>
1155+ <span class="s">&quot;html&quot;</span><span class="p">:</span> <span class="s">&quot;html&quot;</span><span class="p">,</span>
1156+ <span class="s">&quot;hx&quot;</span><span class="p">:</span> <span class="s">&quot;haxe&quot;</span><span class="p">,</span>
1157+ <span class="s">&quot;i&quot;</span><span class="p">:</span> <span class="s">&quot;swig&quot;</span><span class="p">,</span>
1158+ <span class="s">&quot;i4gl&quot;</span><span class="p">:</span> <span class="s">&quot;i4gl&quot;</span><span class="p">,</span>
1159+ <span class="s">&quot;icn&quot;</span><span class="p">:</span> <span class="s">&quot;icon&quot;</span><span class="p">,</span>
1160+ <span class="s">&quot;idl&quot;</span><span class="p">:</span> <span class="s">&quot;idl&quot;</span><span class="p">,</span>
1161+ <span class="s">&quot;inf&quot;</span><span class="p">:</span> <span class="s">&quot;inform&quot;</span><span class="p">,</span>
1162+ <span class="s">&quot;info&quot;</span><span class="p">:</span> <span class="s">&quot;texinfo&quot;</span><span class="p">,</span>
1163+ <span class="s">&quot;ini&quot;</span><span class="p">:</span> <span class="s">&quot;ini&quot;</span><span class="p">,</span>
1164+ <span class="s">&quot;io&quot;</span><span class="p">:</span> <span class="s">&quot;io&quot;</span><span class="p">,</span>
1165+ <span class="s">&quot;iss&quot;</span><span class="p">:</span> <span class="s">&quot;inno_setup&quot;</span><span class="p">,</span>
1166+ <span class="s">&quot;java&quot;</span><span class="p">:</span> <span class="s">&quot;java&quot;</span><span class="p">,</span>
1167+ <span class="s">&quot;jhtml&quot;</span><span class="p">:</span> <span class="s">&quot;jhtml&quot;</span><span class="p">,</span>
1168+ <span class="s">&quot;jmk&quot;</span><span class="p">:</span> <span class="s">&quot;jmk&quot;</span><span class="p">,</span>
1169+ <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>
1170+ <span class="s">&quot;jsp&quot;</span><span class="p">:</span> <span class="s">&quot;javaserverpage&quot;</span><span class="p">,</span>
1171+ <span class="c"># &quot;jsp&quot;: &quot;jsp&quot;,</span>
1172+ <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>
1173+ <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>
1174+ <span class="s">&quot;ly&quot;</span><span class="p">:</span> <span class="s">&quot;lilypond&quot;</span><span class="p">,</span>
1175+ <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>
1176+ <span class="s">&quot;mak&quot;</span><span class="p">:</span> <span class="s">&quot;makefile&quot;</span><span class="p">,</span>
1177+ <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>
1178+ <span class="s">&quot;ml&quot;</span><span class="p">:</span> <span class="s">&quot;ml&quot;</span><span class="p">,</span>
1179+ <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>
1180+ <span class="s">&quot;mod&quot;</span><span class="p">:</span> <span class="s">&quot;modula3&quot;</span><span class="p">,</span>
1181+ <span class="s">&quot;mpl&quot;</span><span class="p">:</span> <span class="s">&quot;maple&quot;</span><span class="p">,</span>
1182+ <span class="s">&quot;mqsc&quot;</span><span class="p">:</span> <span class="s">&quot;mqsc&quot;</span><span class="p">,</span>
1183+ <span class="s">&quot;nqc&quot;</span><span class="p">:</span> <span class="s">&quot;nqc&quot;</span><span class="p">,</span>
1184+ <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>
1185+ <span class="c"># &quot;nsi&quot;: &quot;nsis2&quot;,</span>
1186+ <span class="s">&quot;nw&quot;</span><span class="p">:</span> <span class="s">&quot;noweb&quot;</span><span class="p">,</span>
1187+ <span class="s">&quot;occ&quot;</span><span class="p">:</span> <span class="s">&quot;occam&quot;</span><span class="p">,</span>
1188+ <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>
1189+ <span class="s">&quot;p&quot;</span><span class="p">:</span> <span class="s">&quot;pascal&quot;</span><span class="p">,</span>
1190+ <span class="c"># &quot;p&quot;: &quot;pop11&quot;, # Conflicts with pascal.</span>
1191+ <span class="s">&quot;php&quot;</span><span class="p">:</span> <span class="s">&quot;php&quot;</span><span class="p">,</span>
1192+ <span class="s">&quot;pike&quot;</span><span class="p">:</span> <span class="s">&quot;pike&quot;</span><span class="p">,</span>
1193+ <span class="s">&quot;pl&quot;</span><span class="p">:</span> <span class="s">&quot;perl&quot;</span><span class="p">,</span>
1194+ <span class="s">&quot;pl1&quot;</span><span class="p">:</span> <span class="s">&quot;pl1&quot;</span><span class="p">,</span>
1195+ <span class="s">&quot;po&quot;</span><span class="p">:</span> <span class="s">&quot;gettext&quot;</span><span class="p">,</span>
1196+ <span class="s">&quot;pod&quot;</span><span class="p">:</span> <span class="s">&quot;perlpod&quot;</span><span class="p">,</span>
1197+ <span class="s">&quot;pov&quot;</span><span class="p">:</span> <span class="s">&quot;povray&quot;</span><span class="p">,</span>
1198+ <span class="s">&quot;prg&quot;</span><span class="p">:</span> <span class="s">&quot;foxpro&quot;</span><span class="p">,</span>
1199+ <span class="s">&quot;pro&quot;</span><span class="p">:</span> <span class="s">&quot;prolog&quot;</span><span class="p">,</span>
1200+ <span class="s">&quot;ps&quot;</span><span class="p">:</span> <span class="s">&quot;postscript&quot;</span><span class="p">,</span>
1201+ <span class="s">&quot;psp&quot;</span><span class="p">:</span> <span class="s">&quot;psp&quot;</span><span class="p">,</span>
1202+ <span class="s">&quot;ptl&quot;</span><span class="p">:</span> <span class="s">&quot;ptl&quot;</span><span class="p">,</span>
1203+ <span class="s">&quot;py&quot;</span><span class="p">:</span> <span class="s">&quot;python&quot;</span><span class="p">,</span>
1204+ <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>
1205+ <span class="c"># &quot;pyx&quot;: &quot;pyrex&quot;,</span>
1206+ <span class="c"># &quot;r&quot;: &quot;r&quot;, # modes/r.py does not exist.</span>
1207+ <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>
1208+ <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>
1209+ <span class="s">&quot;rest&quot;</span><span class="p">:</span> <span class="s">&quot;rst&quot;</span><span class="p">,</span>
1210+ <span class="s">&quot;rex&quot;</span><span class="p">:</span> <span class="s">&quot;objectrexx&quot;</span><span class="p">,</span>
1211+ <span class="s">&quot;rhtml&quot;</span><span class="p">:</span> <span class="s">&quot;rhtml&quot;</span><span class="p">,</span>
1212+ <span class="s">&quot;rib&quot;</span><span class="p">:</span> <span class="s">&quot;rib&quot;</span><span class="p">,</span>
1213+ <span class="s">&quot;sas&quot;</span><span class="p">:</span> <span class="s">&quot;sas&quot;</span><span class="p">,</span>
1214+ <span class="s">&quot;scala&quot;</span><span class="p">:</span> <span class="s">&quot;scala&quot;</span><span class="p">,</span>
1215+ <span class="s">&quot;scm&quot;</span><span class="p">:</span> <span class="s">&quot;scheme&quot;</span><span class="p">,</span>
1216+ <span class="s">&quot;scpt&quot;</span><span class="p">:</span> <span class="s">&quot;applescript&quot;</span><span class="p">,</span>
1217+ <span class="s">&quot;sgml&quot;</span><span class="p">:</span> <span class="s">&quot;sgml&quot;</span><span class="p">,</span>
1218+ <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>
1219+ <span class="c"># &quot;sh&quot;: &quot;shellscript&quot;,</span>
1220+ <span class="s">&quot;shtml&quot;</span><span class="p">:</span> <span class="s">&quot;shtml&quot;</span><span class="p">,</span>
1221+ <span class="s">&quot;sm&quot;</span><span class="p">:</span> <span class="s">&quot;smalltalk&quot;</span><span class="p">,</span>
1222+ <span class="s">&quot;splus&quot;</span><span class="p">:</span> <span class="s">&quot;splus&quot;</span><span class="p">,</span>
1223+ <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>
1224+ <span class="s">&quot;sqr&quot;</span><span class="p">:</span> <span class="s">&quot;sqr&quot;</span><span class="p">,</span>
1225+ <span class="s">&quot;ss&quot;</span><span class="p">:</span> <span class="s">&quot;ssharp&quot;</span><span class="p">,</span>
1226+ <span class="s">&quot;ssi&quot;</span><span class="p">:</span> <span class="s">&quot;shtml&quot;</span><span class="p">,</span>
1227+ <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>
1228+ <span class="c"># &quot;tcl&quot;: &quot;tcltk&quot;,</span>
1229+ <span class="s">&quot;tex&quot;</span><span class="p">:</span> <span class="s">&quot;latex&quot;</span><span class="p">,</span>
1230+ <span class="c"># &quot;tex&quot;: &quot;tex&quot;,</span>
1231+ <span class="s">&quot;tpl&quot;</span><span class="p">:</span> <span class="s">&quot;tpl&quot;</span><span class="p">,</span>
1232+ <span class="s">&quot;ts&quot;</span><span class="p">:</span> <span class="s">&quot;typescript&quot;</span><span class="p">,</span>
1233+ <span class="s">&quot;txt&quot;</span><span class="p">:</span> <span class="s">&quot;plain&quot;</span><span class="p">,</span>
1234+ <span class="c"># &quot;txt&quot;: &quot;text&quot;,</span>
1235+ <span class="c"># &quot;txt&quot;: &quot;unknown&quot;, # Set when @comment is seen.</span>
1236+ <span class="s">&quot;uc&quot;</span><span class="p">:</span> <span class="s">&quot;uscript&quot;</span><span class="p">,</span>
1237+ <span class="s">&quot;v&quot;</span><span class="p">:</span> <span class="s">&quot;verilog&quot;</span><span class="p">,</span>
1238+ <span class="s">&quot;vbs&quot;</span><span class="p">:</span> <span class="s">&quot;vbscript&quot;</span><span class="p">,</span>
1239+ <span class="s">&quot;vhd&quot;</span><span class="p">:</span> <span class="s">&quot;vhdl&quot;</span><span class="p">,</span>
1240+ <span class="s">&quot;vhdl&quot;</span><span class="p">:</span> <span class="s">&quot;vhdl&quot;</span><span class="p">,</span>
1241+ <span class="s">&quot;vim&quot;</span><span class="p">:</span> <span class="s">&quot;vim&quot;</span><span class="p">,</span>
1242+ <span class="s">&quot;vtl&quot;</span><span class="p">:</span> <span class="s">&quot;velocity&quot;</span><span class="p">,</span>
1243+ <span class="s">&quot;w&quot;</span><span class="p">:</span> <span class="s">&quot;cweb&quot;</span><span class="p">,</span>
1244+ <span class="s">&quot;wiki&quot;</span><span class="p">:</span> <span class="s">&quot;moin&quot;</span><span class="p">,</span>
1245+ <span class="s">&quot;xml&quot;</span><span class="p">:</span> <span class="s">&quot;xml&quot;</span><span class="p">,</span>
1246+ <span class="s">&quot;xom&quot;</span><span class="p">:</span> <span class="s">&quot;omnimark&quot;</span><span class="p">,</span>
1247+ <span class="s">&quot;xsl&quot;</span><span class="p">:</span> <span class="s">&quot;xsl&quot;</span><span class="p">,</span>
1248+ <span class="s">&quot;zpt&quot;</span><span class="p">:</span> <span class="s">&quot;zpt&quot;</span><span class="p">,</span>
1249+ <span class="p">}</span>
1250+
1251+ <span class="c"># These aren&#39;t real languages, or have no delims...</span>
1252+ <span class="c"># cvs_commit, dsssl, embperl, freemarker, hex, jcl,</span>
1253+ <span class="c"># patch, phpsection, progress, props, pseudoplain,</span>
1254+ <span class="c"># relax_ng_compact, rtf, svn_commit.</span>
1255+
1256+ <span class="c"># These have extensions which conflict with other languages.</span>
1257+ <span class="c"># assembly_macro32: .asm or .a</span>
1258+ <span class="c"># assembly_mcs51: .asm or .a</span>
1259+ <span class="c"># assembly_parrot: .asm or .a</span>
1260+ <span class="c"># assembly_r2000: .asm or .a</span>
1261+ <span class="c"># assembly_x86: .asm or .a</span>
1262+ <span class="c"># squidconf: .conf</span>
1263+ <span class="c"># rpmspec: .rpm</span>
1264+
1265+ <span class="c"># Extra language extensions, used to associate extensions with mode files.</span>
1266+ <span class="c"># Used by importCommands.languageForExtension.</span>
1267+ <span class="c"># Keys are extensions, values are corresponding mode file (without .py)</span>
1268+ <span class="c"># A value of &#39;none&#39; is a signal to unit tests that no extension file exists.</span>
1269+ <span class="bp">self</span><span class="o">.</span><span class="n">extra_extension_dict</span> <span class="o">=</span> <span class="p">{</span>
1270+ <span class="s">&#39;pod&#39;</span> <span class="p">:</span> <span class="s">&#39;perl&#39;</span><span class="p">,</span>
1271+ <span class="s">&#39;unknown_language&#39;</span><span class="p">:</span> <span class="s">&#39;none&#39;</span><span class="p">,</span>
1272+ <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>
1273+ <span class="p">}</span>
1274+
1275+ <span class="c">#@+node:ekr.20031218072017.2609: *3* app.closeLeoWindow</span></div>
1276+<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>
1277+
1278+ <span class="sd">&quot;&quot;&quot;Attempt to close a Leo window.</span>
1279+
1280+<span class="sd"> Return False if the user veto&#39;s the close.&quot;&quot;&quot;</span>
1281+
1282+ <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>
1283+ <span class="n">c</span> <span class="o">=</span> <span class="n">frame</span><span class="o">.</span><span class="n">c</span>
1284+
1285+ <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>
1286+
1287+ <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>
1288+
1289+ <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">promptingForClose</span><span class="p">:</span>
1290+ <span class="c"># There is already a dialog open asking what to do.</span>
1291+ <span class="k">return</span> <span class="bp">False</span>
1292+
1293+ <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>
1294+ <span class="c"># Make sure .leoRecentFiles.txt is written.</span>
1295+
1296+ <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">changed</span><span class="p">:</span>
1297+ <span class="n">c</span><span class="o">.</span><span class="n">promptingForClose</span> <span class="o">=</span> <span class="bp">True</span>
1298+ <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>
1299+ <span class="n">c</span><span class="o">.</span><span class="n">promptingForClose</span> <span class="o">=</span> <span class="bp">False</span>
1300+ <span class="k">if</span> <span class="n">veto</span><span class="p">:</span> <span class="k">return</span> <span class="bp">False</span>
1301+
1302+ <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>
1303+
1304+ <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>
1305+ <span class="c"># This may remove frame from the window list.</span>
1306+
1307+ <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>
1308+ <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>
1309+
1310+ <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>
1311+ <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>
1312+ <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>
1313+
1314+ <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>
1315+ <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>
1316+
1317+ <span class="k">return</span> <span class="bp">True</span> <span class="c"># The window has been closed.</span>
1318+ <span class="c">#@+node:ville.20090602181814.6219: *3* app.commanders</span></div>
1319+<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>
1320+ <span class="sd">&quot;&quot;&quot; Return list of currently active controllers &quot;&quot;&quot;</span>
1321+
1322+ <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>
1323+ <span class="c">#@+node:ekr.20090717112235.6007: *3* app.computeSignon</span></div>
1324+<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>
1325+
1326+ <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span>
1327+
1328+ <span class="kn">import</span> <span class="nn">leo.core.leoVersion</span> <span class="kn">as</span> <span class="nn">leoVersion</span>
1329+ <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>
1330+ <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>
1331+ <span class="n">leoVer</span> <span class="o">=</span> <span class="n">leoVersion</span><span class="o">.</span><span class="n">version</span>
1332+ <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>
1333+
1334+ <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>
1335+ <span class="n">sysVersion</span> <span class="o">=</span> <span class="s">&#39;Windows &#39;</span>
1336+ <span class="k">try</span><span class="p">:</span>
1337+ <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>
1338+ <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>
1339+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
1340+ <span class="k">pass</span>
1341+
1342+ <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>
1343+
1344+ <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>
1345+ <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>
1346+ <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>
1347+ <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>
1348+ <span class="c">#@+node:ekr.20100831090251.5838: *3* app.createXGui</span>
1349+ <span class="c">#@+node:ekr.20100831090251.5840: *4* app.createCursesGui</span></div>
1350+<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>
1351+
1352+ <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span>
1353+
1354+ <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>
1355+ <span class="c">#@+node:ekr.20090619065122.8593: *4* app.createDefaultGui</span></div>
1356+<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>
1357+
1358+ <span class="sd">&quot;&quot;&quot;A convenience routines for plugins to create the default gui class.&quot;&quot;&quot;</span>
1359+
1360+ <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>
1361+
1362+ <span class="c"># This method can be called twice if we had to get .leoID.txt.</span>
1363+ <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>
1364+
1365+ <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>
1366+ <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>
1367+ <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>
1368+ <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>
1369+ <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>
1370+ <span class="n">app</span><span class="o">.</span><span class="n">createCursesGui</span><span class="p">()</span>
1371+
1372+ <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>
1373+ <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>
1374+ <span class="c">#@+node:ekr.20031218072017.1938: *4* app.createNullGuiWithScript</span></div>
1375+<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>
1376+
1377+ <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span>
1378+
1379+ <span class="n">app</span><span class="o">.</span><span class="n">batchMode</span> <span class="o">=</span> <span class="bp">True</span>
1380+ <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>
1381+ <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>
1382+ <span class="c">#@+node:ekr.20090202191501.1: *4* app.createQtGui</span></div>
1383+<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>
1384+
1385+ <span class="c"># Do NOT omit fileName param: it is used in plugin code.</span>
1386+
1387+ <span class="sd">&quot;&quot;&quot;A convenience routines for plugins to create the Qt gui class.&quot;&quot;&quot;</span>
1388+
1389+ <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span>
1390+ <span class="k">try</span><span class="p">:</span>
1391+ <span class="c"># Take care to try the same imports as in qtGui.py.</span>
1392+ <span class="kn">import</span> <span class="nn">PyQt4.QtCore</span>
1393+ <span class="kn">import</span> <span class="nn">PyQt4.QtGui</span>
1394+ <span class="kn">import</span> <span class="nn">leo.plugins.qtGui</span> <span class="kn">as</span> <span class="nn">qtGui</span>
1395+ <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>
1396+ <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
1397+ <span class="n">qtGui</span> <span class="o">=</span> <span class="bp">None</span>
1398+
1399+ <span class="k">if</span> <span class="n">qtGui</span><span class="p">:</span>
1400+ <span class="n">qtGui</span><span class="o">.</span><span class="n">init</span><span class="p">()</span>
1401+ <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>
1402+ <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>
1403+ <span class="c">#@+node:ekr.20090126063121.3: *4* app.createWxGui</span></div>
1404+<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>
1405+
1406+ <span class="c"># Do NOT omit fileName param: it is used in plugin code.</span>
1407+
1408+ <span class="sd">&quot;&quot;&quot;A convenience routines for plugins to create the wx gui class.&quot;&quot;&quot;</span>
1409+
1410+ <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span>
1411+
1412+ <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>
1413+
1414+ <span class="k">if</span> <span class="n">fileName</span> <span class="ow">and</span> <span class="n">verbose</span><span class="p">:</span>
1415+
1416+ <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>
1417+ <span class="c">#@+node:ekr.20031218072017.2612: *3* app.destroyAllOpenWithFiles</span></div>
1418+<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>
1419+
1420+ <span class="sd">&quot;&quot;&quot;Try to remove temp files created with the Open With command.</span>
1421+
1422+<span class="sd"> This may fail if the files are still open.</span>
1423+
1424+<span class="sd"> Called by g.app.finishQuit&quot;&quot;&quot;</span>
1425+
1426+ <span class="c"># We can&#39;t use g.es here because the log stream no longer exists.</span>
1427+
1428+ <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>
1429+ <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>
1430+
1431+ <span class="c"># Delete the list so the gc can recycle Leo windows!</span>
1432+ <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>
1433+ <span class="c">#@+node:ekr.20031218072017.2613: *3* app.destroyOpenWithFilesForFrame</span></div>
1434+<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>
1435+
1436+ <span class="sd">&quot;&quot;&quot;Close all &quot;Open With&quot; files associated with frame</span>
1437+
1438+<span class="sd"> Called by app.destroyWindow.</span>
1439+<span class="sd"> &quot;&quot;&quot;</span>
1440+
1441+ <span class="c"># Make a copy of the list: it may change in the loop.</span>
1442+ <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>
1443+
1444+ <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>
1445+ <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>
1446+ <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>
1447+ <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>
1448+ <span class="c">#@+node:ekr.20031218072017.2614: *3* app.destroyOpenWithFileWithDict</span></div>
1449+<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>
1450+
1451+ <span class="sd">&#39;&#39;&#39;</span>
1452+<span class="sd"> A helper for app.destroyAllOpenWithFiles and</span>
1453+<span class="sd"> app.destroyOpenWithFilesForFrame.</span>
1454+<span class="sd"> &#39;&#39;&#39;</span>
1455+
1456+ <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>
1457+ <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>
1458+ <span class="k">try</span><span class="p">:</span>
1459+ <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>
1460+ <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>
1461+ <span class="k">except</span><span class="p">:</span>
1462+ <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>
1463+
1464+ <span class="c"># Remove theDict from the list so the gc can recycle the Leo window!</span>
1465+ <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>
1466+ <span class="c">#@+node:ekr.20031218072017.2615: *3* app.destroyWindow</span></div>
1467+<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>
1468+
1469+ <span class="c"># g.trace(frame in g.app.windowList,frame)</span>
1470+ <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>
1471+
1472+ <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>
1473+ <span class="c"># g.trace(g.app.windowList)</span>
1474+ <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>
1475+ <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>
1476+
1477+ <span class="c"># force the window to go away now.</span>
1478+ <span class="c"># Important: this also destroys all the objects of the commander.</span>
1479+ <span class="n">frame</span><span class="o">.</span><span class="n">destroySelf</span><span class="p">()</span>
1480+ <span class="c">#@+node:ekr.20031218072017.1732: *3* app.finishQuit</span></div>
1481+<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>
1482+
1483+ <span class="c"># forceShutdown may already have fired the &quot;end1&quot; hook.</span>
1484+ <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>
1485+ <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>
1486+
1487+ <span class="bp">self</span><span class="o">.</span><span class="n">destroyAllOpenWithFiles</span><span class="p">()</span>
1488+
1489+ <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>
1490+ <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>
1491+
1492+ <span class="c"># Don&#39;t use g.trace!</span>
1493+ <span class="c"># print(&#39;app.finishQuit: setting g.app.killed&#39;,g.callers())</span>
1494+
1495+ <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>
1496+ <span class="c"># Disable all further hooks and events.</span>
1497+ <span class="c"># Alas, &quot;idle&quot; events can still be called</span>
1498+ <span class="c"># even after the following code.</span>
1499+
1500+ <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>
1501+ <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>
1502+ <span class="c">#@+node:ekr.20031218072017.2616: *3* app.forceShutdown</span></div>
1503+<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>
1504+
1505+ <span class="sd">&quot;&quot;&quot;Forces an immediate shutdown of Leo at any time.</span>
1506+
1507+<span class="sd"> In particular, may be called from plugins during startup.&quot;&quot;&quot;</span>
1508+
1509+ <span class="c"># Wait until everything is quiet before really quitting.</span>
1510+ <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>
1511+
1512+ <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>
1513+ <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>
1514+
1515+ <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>
1516+ <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>
1517+
1518+ <span class="bp">self</span><span class="o">.</span><span class="n">finishQuit</span><span class="p">()</span>
1519+ <span class="c">#@+node:ekr.20031218072017.2188: *3* app.newCommander &amp; helper</span></div>
1520+<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>
1521+
1522+ <span class="sd">&quot;&quot;&quot;Create a commander and its view frame for the Leo main window.&quot;&quot;&quot;</span>
1523+
1524+ <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>
1525+ <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>
1526+
1527+ <span class="c"># Create the commander and its subcommanders.</span>
1528+ <span class="c"># This takes about 3/4 sec when called by the leoBridge module.</span>
1529+ <span class="kn">import</span> <span class="nn">leo.core.leoCommands</span> <span class="kn">as</span> <span class="nn">leoCommands</span>
1530+
1531+ <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>
1532+ <span class="c">#@+node:ekr.20031218072017.2617: *3* app.onQuit</span></div>
1533+<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>
1534+
1535+ <span class="sd">&#39;&#39;&#39;Exit Leo, prompting to save unsaved outlines first.&#39;&#39;&#39;</span>
1536+
1537+ <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>
1538+
1539+ <span class="c"># Don&#39;t use g.trace here.</span>
1540+ <span class="c"># print(&#39;onQuit&#39;,g.app.save_session,g.app.sessionManager)</span>
1541+
1542+ <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>
1543+ <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>
1544+
1545+ <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>
1546+ <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>
1547+ <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>
1548+ <span class="k">break</span>
1549+
1550+ <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>
1551+ <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>
1552+ <span class="c">#@+node:ekr.20120304065838.15588: *3* app.selectLeoWindow</span></div>
1553+<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>
1554+
1555+ <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>
1556+ <span class="k">assert</span> <span class="n">c</span>
1557+ <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>
1558+
1559+ <span class="n">frame</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">frame</span>
1560+ <span class="n">frame</span><span class="o">.</span><span class="n">deiconify</span><span class="p">()</span>
1561+ <span class="n">frame</span><span class="o">.</span><span class="n">lift</span><span class="p">()</span>
1562+ <span class="n">c</span><span class="o">.</span><span class="n">setLog</span><span class="p">()</span>
1563+
1564+ <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>
1565+
1566+ <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>
1567+ <span class="c"># frame.top.leo_master is a TabbedTopLevel.</span>
1568+ <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>
1569+
1570+ <span class="n">c</span><span class="o">.</span><span class="n">bodyWantsFocus</span><span class="p">()</span>
1571+ <span class="n">c</span><span class="o">.</span><span class="n">outerUpdate</span><span class="p">()</span>
1572+ <span class="c">#@+node:ville.20090620122043.6275: *3* app.setGlobalDb</span></div>
1573+<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>
1574+ <span class="sd">&quot;&quot;&quot; Create global pickleshare db</span>
1575+
1576+<span class="sd"> Usable by::</span>
1577+
1578+<span class="sd"> g.app.db[&#39;hello&#39;] = [1,2,5]</span>
1579+
1580+<span class="sd"> &quot;&quot;&quot;</span>
1581+
1582+ <span class="c"># Fixes bug 670108.</span>
1583+ <span class="kn">import</span> <span class="nn">leo.core.leoCache</span> <span class="kn">as</span> <span class="nn">leoCache</span>
1584+ <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>
1585+ <span class="c">#@+node:ekr.20031218072017.1978: *3* app.setLeoID</span></div>
1586+<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>
1587+
1588+ <span class="n">tag</span> <span class="o">=</span> <span class="s">&quot;.leoID.txt&quot;</span>
1589+ <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>
1590+ <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>
1591+ <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>
1592+
1593+ <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>
1594+ <span class="c">#@+&lt;&lt; return if we can set leoID from sys.leoID &gt;&gt;</span>
1595+ <span class="c">#@+node:ekr.20031218072017.1979: *4* &lt;&lt; return if we can set leoID from sys.leoID&gt;&gt;</span>
1596+ <span class="c"># This would be set by in Python&#39;s sitecustomize.py file.</span>
1597+
1598+ <span class="c"># Use hasattr &amp; getattr to suppress pylint warning.</span>
1599+ <span class="c"># Use a &quot;non-constant&quot; attribute to suppress another warning!</span>
1600+
1601+ <span class="n">nonConstantAttr</span> <span class="o">=</span> <span class="s">&quot;leoID&quot;</span>
1602+
1603+ <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>
1604+ <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>
1605+ <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>
1606+ <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>
1607+ <span class="c"># Careful: periods in the id field of a gnx will corrupt the .leo file!</span>
1608+ <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>
1609+ <span class="k">return</span>
1610+ <span class="k">else</span><span class="p">:</span>
1611+ <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>
1612+ <span class="c">#@-&lt;&lt; return if we can set leoID from sys.leoID &gt;&gt;</span>
1613+ <span class="c">#@+&lt;&lt; return if we can set leoID from &quot;leoID.txt&quot; &gt;&gt;</span>
1614+ <span class="c">#@+node:ekr.20031218072017.1980: *4* &lt;&lt; return if we can set leoID from &quot;leoID.txt&quot; &gt;&gt;</span>
1615+ <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>
1616+ <span class="c"># N.B. We would use the _working_ directory if theDir is None!</span>
1617+ <span class="k">if</span> <span class="n">theDir</span><span class="p">:</span>
1618+ <span class="k">try</span><span class="p">:</span>
1619+ <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>
1620+ <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>
1621+ <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>
1622+ <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
1623+ <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>
1624+ <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>
1625+ <span class="c"># Careful: periods in the id field of a gnx</span>
1626+ <span class="c"># will corrupt the .leo file!</span>
1627+ <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>
1628+ <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>
1629+ <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>
1630+ <span class="k">return</span>
1631+ <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>
1632+ <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>
1633+ <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
1634+ <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>
1635+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
1636+ <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>
1637+ <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>
1638+ <span class="n">g</span><span class="o">.</span><span class="n">es_exception</span><span class="p">()</span>
1639+ <span class="c">#@-&lt;&lt; return if we can set leoID from &quot;leoID.txt&quot; &gt;&gt;</span>
1640+ <span class="c">#@+&lt;&lt; return if we can set leoID from os.getenv(&#39;USER&#39;) &gt;&gt;</span>
1641+ <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>
1642+ <span class="k">try</span><span class="p">:</span>
1643+ <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>
1644+ <span class="k">if</span> <span class="n">theId</span><span class="p">:</span>
1645+ <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>
1646+ <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>
1647+ <span class="nb">repr</span><span class="p">(</span><span class="n">theId</span><span class="p">))</span>
1648+ <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>
1649+ <span class="c"># Careful: periods in the id field of a gnx</span>
1650+ <span class="c"># will corrupt the .leo file!</span>
1651+ <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>
1652+ <span class="k">return</span>
1653+
1654+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
1655+ <span class="k">pass</span>
1656+ <span class="c">#@-&lt;&lt; return if we can set leoID from os.getenv(&#39;USER&#39;) &gt;&gt;</span>
1657+ <span class="c">#@+&lt;&lt; put up a dialog requiring a valid id &gt;&gt;</span>
1658+ <span class="c">#@+node:ekr.20031218072017.1981: *4* &lt;&lt; put up a dialog requiring a valid id &gt;&gt;</span>
1659+ <span class="c"># 2011/06/13: Don&#39;t put up a splash screen.</span>
1660+ <span class="c"># It would obscure the coming dialog.</span>
1661+ <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>
1662+
1663+ <span class="c"># New in 4.1: get an id for gnx&#39;s. Plugins may set g.app.leoID.</span>
1664+ <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>
1665+ <span class="c"># Create the Qt gui if it exists.</span>
1666+ <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>
1667+
1668+ <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>
1669+ <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>
1670+ <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>
1671+ <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>
1672+ <span class="k">else</span><span class="p">:</span>
1673+ <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>
1674+ <span class="k">else</span><span class="p">:</span>
1675+ <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>
1676+
1677+ <span class="c"># Bug fix: 2/6/05: put result in g.app.leoID.</span>
1678+ <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>
1679+
1680+ <span class="c"># Careful: periods in the id field of a gnx will corrupt the .leo file!</span>
1681+ <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>
1682+
1683+ <span class="c"># g.trace(g.app.leoID)</span>
1684+ <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>
1685+ <span class="c">#@-&lt;&lt; put up a dialog requiring a valid id &gt;&gt;</span>
1686+ <span class="c">#@+&lt;&lt; attempt to create leoID.txt &gt;&gt;</span>
1687+ <span class="c">#@+node:ekr.20031218072017.1982: *4* &lt;&lt; attempt to create leoID.txt &gt;&gt; (changed)</span>
1688+ <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>
1689+ <span class="c"># N.B. We would use the _working_ directory if theDir is None!</span>
1690+ <span class="k">if</span> <span class="n">theDir</span><span class="p">:</span>
1691+ <span class="k">try</span><span class="p">:</span>
1692+ <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>
1693+ <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>
1694+ <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>
1695+ <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>
1696+ <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>
1697+ <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>
1698+ <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
1699+ <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>
1700+ <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>
1701+ <span class="k">return</span>
1702+ <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
1703+ <span class="k">pass</span>
1704+
1705+ <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>
1706+ <span class="c">#@-&lt;&lt; attempt to create leoID.txt &gt;&gt;</span>
1707+ <span class="c">#@+node:ekr.20031218072017.1847: *3* app.setLog, lockLog, unlocklog</span></div>
1708+<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>
1709+
1710+ <span class="sd">&quot;&quot;&quot;set the frame to which log messages will go&quot;&quot;&quot;</span>
1711+
1712+ <span class="c"># print(&quot;app.setLog:&quot;,log)</span>
1713+ <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>
1714+ <span class="bp">self</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="n">log</span>
1715+</div>
1716+<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>
1717+ <span class="sd">&quot;&quot;&quot;Disable changes to the log&quot;&quot;&quot;</span>
1718+ <span class="bp">self</span><span class="o">.</span><span class="n">logIsLocked</span> <span class="o">=</span> <span class="bp">True</span>
1719+</div>
1720+<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>
1721+ <span class="sd">&quot;&quot;&quot;Enable changes to the log&quot;&quot;&quot;</span>
1722+ <span class="bp">self</span><span class="o">.</span><span class="n">logIsLocked</span> <span class="o">=</span> <span class="bp">False</span>
1723+ <span class="c">#@+node:ekr.20031218072017.2619: *3* app.writeWaitingLog</span></div>
1724+<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>
1725+
1726+ <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span>
1727+ <span class="n">app</span> <span class="o">=</span> <span class="bp">self</span>
1728+
1729+ <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
1730+ <span class="c"># Do not call g.es, g.es_print, g.pr or g.trace here!</span>
1731+ <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>
1732+ <span class="c"># print(&#39;writeWaitingLog&#39;,g.callers())</span>
1733+ <span class="c"># import sys ; print(&#39;writeWaitingLog: argv&#39;,sys.argv)</span>
1734+
1735+ <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>
1736+ <span class="k">return</span>
1737+
1738+ <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
1739+ <span class="n">app</span><span class="o">.</span><span class="n">printWaiting</span> <span class="o">=</span> <span class="p">[]</span>
1740+ <span class="n">app</span><span class="o">.</span><span class="n">logWaiting</span> <span class="o">=</span> <span class="p">[]</span>
1741+ <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>
1742+ <span class="k">return</span>
1743+
1744+ <span class="n">table</span> <span class="o">=</span> <span class="p">[</span>
1745+ <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>
1746+ <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>
1747+ <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>
1748+ <span class="p">]</span>
1749+ <span class="n">table</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
1750+
1751+ <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>
1752+ <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>
1753+
1754+ <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>
1755+ <span class="n">app</span><span class="o">.</span><span class="n">signon_printed</span> <span class="o">=</span> <span class="bp">True</span>
1756+ <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>
1757+ <span class="k">print</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
1758+ <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>
1759+ <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>
1760+ <span class="k">print</span><span class="p">(</span><span class="s">&#39;** caching disabled&#39;</span><span class="p">)</span>
1761+ <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>
1762+ <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>
1763+ <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>
1764+ <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>
1765+ <span class="k">print</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
1766+ <span class="n">app</span><span class="o">.</span><span class="n">printWaiting</span> <span class="o">=</span> <span class="p">[]</span>
1767+
1768+ <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>
1769+ <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>
1770+ <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>
1771+ <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>
1772+ <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>
1773+ <span class="c"># The caller must write the newlines.</span>
1774+ <span class="n">app</span><span class="o">.</span><span class="n">logWaiting</span> <span class="o">=</span> <span class="p">[]</span>
1775+
1776+ <span class="c"># Essential when opening multiple files...</span>
1777+ <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>
1778+ <span class="c">#@+node:ekr.20120427064024.10068: *3* app.Detecting already-open files</span>
1779+ <span class="c">#@+node:ekr.20120427064024.10064: *4* app.checkForOpenFile</span></div>
1780+<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>
1781+
1782+ <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>
1783+
1784+ <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>
1785+ <span class="k">return</span> <span class="bp">True</span>
1786+ <span class="k">else</span><span class="p">:</span>
1787+ <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>
1788+ <span class="k">if</span> <span class="n">fn</span> <span class="ow">in</span> <span class="n">aList</span><span class="p">:</span>
1789+ <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>
1790+ <span class="n">title</span><span class="o">=</span><span class="s">&#39;Open Leo File Again?&#39;</span><span class="p">,</span>
1791+ <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>
1792+ <span class="p">)</span>
1793+ <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>
1794+ <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>
1795+ <span class="n">title</span><span class="o">=</span><span class="s">&#39;Reset open count?&#39;</span><span class="p">,</span>
1796+ <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> \
1797+ <span class="s">&quot;</span><span class="se">\n</span><span class="s">Say yes if you know this outline&quot;</span> \
1798+ <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>
1799+ <span class="p">)</span>
1800+ <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>
1801+ <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>
1802+ <span class="c"># IMPORTANT - rest of load process will add another</span>
1803+ <span class="c"># entry for this Leo instance, don&#39;t do it here</span>
1804+ <span class="k">return</span> <span class="n">result</span> <span class="o">==</span> <span class="s">&#39;yes&#39;</span>
1805+ <span class="k">else</span><span class="p">:</span>
1806+ <span class="k">return</span> <span class="bp">True</span>
1807+ <span class="c">#@+node:ekr.20120427064024.10066: *4* app.forgetOpenFile</span></div>
1808+<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>
1809+
1810+ <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>
1811+ <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>
1812+
1813+ <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>
1814+ <span class="k">pass</span>
1815+ <span class="k">else</span><span class="p">:</span>
1816+ <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>
1817+ <span class="k">if</span> <span class="n">fn</span> <span class="ow">in</span> <span class="n">aList</span><span class="p">:</span>
1818+ <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>
1819+ <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
1820+ <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>
1821+ <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">aList</span><span class="p">:</span>
1822+ <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>
1823+ <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>
1824+ <span class="k">else</span><span class="p">:</span>
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;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>
1826+ <span class="c">#@+node:ekr.20120427064024.10065: *4* app.rememberOpenFile</span></div>
1827+<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>
1828+
1829+ <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>
1830+ <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>
1831+
1832+ <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>
1833+ <span class="k">pass</span>
1834+ <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>
1835+ <span class="k">pass</span>
1836+ <span class="k">else</span><span class="p">:</span>
1837+ <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>
1838+ <span class="c"># It&#39;s proper to add duplicates to this list.</span>
1839+ <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>
1840+ <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
1841+ <span class="c"># Trace doesn&#39;t work well while initing.</span>
1842+ <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>
1843+ <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">aList</span><span class="p">:</span>
1844+ <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>
1845+ <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>
1846+ <span class="c">#@-others</span>
1847+<span class="c">#@+node:ekr.20120209051836.10242: ** class LoadManager</span></div></div>
1848+<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>
1849+
1850+ <span class="sd">&#39;&#39;&#39;A class to manage loading .leo files, including configuration files.&#39;&#39;&#39;</span>
1851+
1852+ <span class="c">#@+others</span>
1853+ <span class="c">#@+node:ekr.20120214060149.15851: *3* LM.ctor</span>
1854+ <span class="k">def</span> <span class="nf">__init__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
1855+
1856+ <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>
1857+ <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>
1858+
1859+ <span class="c"># Global settings &amp; shortcuts dicts.</span>
1860+ <span class="c"># The are the defaults for computing settings and shortcuts for all loaded files.</span>
1861+ <span class="bp">self</span><span class="o">.</span><span class="n">globalSettingsDict</span> <span class="o">=</span> <span class="bp">None</span>
1862+ <span class="c"># A g.TypedDict containing the merger of default settings,</span>
1863+ <span class="c"># settings in leoSettings.leo and settings in myLeoSettings.leo</span>
1864+ <span class="bp">self</span><span class="o">.</span><span class="n">globalShortcutsDict</span> <span class="o">=</span> <span class="bp">None</span>
1865+ <span class="c"># A g.TypedDictOfLists containg the merger of shortcuts in</span>
1866+ <span class="c"># leoSettings.leo and settings in myLeoSettings.leo.</span>
1867+
1868+ <span class="c"># LoadManager ivars corresponding to user options....</span>
1869+ <span class="bp">self</span><span class="o">.</span><span class="n">files</span> <span class="o">=</span> <span class="p">[]</span>
1870+ <span class="c"># List of files to be loaded.</span>
1871+ <span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
1872+ <span class="c"># Dictionary of user options. Keys are option names.</span>
1873+
1874+ <span class="k">if</span> <span class="mi">0</span><span class="p">:</span> <span class="c"># use lm.options.get instead.</span>
1875+ <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>
1876+ <span class="bp">self</span><span class="o">.</span><span class="n">script_name</span> <span class="o">=</span> <span class="bp">None</span>
1877+ <span class="bp">self</span><span class="o">.</span><span class="n">script_path</span> <span class="o">=</span> <span class="bp">None</span>
1878+ <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>
1879+ <span class="bp">self</span><span class="o">.</span><span class="n">screenshot_fn</span> <span class="o">=</span> <span class="bp">None</span>
1880+ <span class="bp">self</span><span class="o">.</span><span class="n">selectHeadline</span> <span class="o">=</span> <span class="bp">None</span>
1881+ <span class="bp">self</span><span class="o">.</span><span class="n">versionFlag</span> <span class="o">=</span> <span class="bp">False</span>
1882+ <span class="bp">self</span><span class="o">.</span><span class="n">windowFlag</span> <span class="o">=</span> <span class="bp">False</span>
1883+ <span class="bp">self</span><span class="o">.</span><span class="n">windowSize</span> <span class="o">=</span> <span class="bp">None</span>
1884+
1885+ <span class="c"># Ivars of *other* classes corresponding to command-line arguments...</span>
1886+ <span class="c"># g.app.batchMode Set in createNullGuiWithScript</span>
1887+ <span class="c"># g.app.gui = None The gui class.</span>
1888+ <span class="c"># g.app.guiArgName The gui name given in --gui option.</span>
1889+ <span class="c"># g.app.qt_use_tabs </span>
1890+ <span class="c"># g.app.silentMode </span>
1891+ <span class="c"># g.app.start_fullscreen </span>
1892+ <span class="c"># g.app.start_maximized .</span>
1893+ <span class="c"># g.app.start_minimized</span>
1894+ <span class="c"># g.app.useIpython</span>
1895+ <span class="c"># g.app.use_splash_screen</span>
1896+ <span class="c"># g.enableDB --no-cache</span>
1897+ <span class="c">#@+node:ekr.20120211121736.10812: *3* LM.Directory &amp; file utils</span>
1898+ <span class="c">#@+node:ekr.20120219154958.10481: *4* LM.completeFileName</span>
1899+<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>
1900+
1901+ <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>
1902+ <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>
1903+
1904+ <span class="c"># 2011/10/12: don&#39;t add .leo to *any* file.</span>
1905+ <span class="k">return</span> <span class="n">fileName</span>
1906+ <span class="c">#@+node:ekr.20120209051836.10372: *4* LM.computeLeoSettingsPath</span></div>
1907+<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>
1908+
1909+ <span class="sd">&#39;&#39;&#39;Return the full path to leoSettings.leo.&#39;&#39;&#39;</span>
1910+
1911+ <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span>
1912+ <span class="c"># lm = self</span>
1913+ <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>
1914+ <span class="n">settings_fn</span> <span class="o">=</span> <span class="s">&#39;leoSettings.leo&#39;</span>
1915+ <span class="n">table</span> <span class="o">=</span> <span class="p">(</span>
1916+ <span class="c"># First, leoSettings.leo in the home directories.</span>
1917+ <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>
1918+ <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>
1919+ <span class="c"># Last, leoSettings.leo in leo/config directory.</span>
1920+ <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>
1921+ <span class="p">)</span>
1922+ <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span>
1923+ <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>
1924+ <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>
1925+ <span class="k">break</span>
1926+ <span class="k">else</span><span class="p">:</span>
1927+ <span class="n">path</span> <span class="o">=</span> <span class="bp">None</span>
1928+ <span class="k">return</span> <span class="n">path</span>
1929+ <span class="c">#@+node:ekr.20120209051836.10373: *4* LM.computeMyLeoSettingsPath</span></div>
1930+<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>
1931+
1932+ <span class="sd">&#39;&#39;&#39;Return the full path to myLeoSettings.leo.</span>
1933+
1934+<span class="sd"> The &quot;footnote&quot;: Get the local directory from lm.files[0]&#39;&#39;&#39;</span>
1935+
1936+ <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span>
1937+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
1938+ <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>
1939+ <span class="n">settings_fn</span> <span class="o">=</span> <span class="s">&#39;myLeoSettings.leo&#39;</span>
1940+
1941+ <span class="c"># This seems pointless: we need a machine *directory*.</span>
1942+ <span class="c"># For now, however, we&#39;ll keep the existing code as is.</span>
1943+ <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>
1944+
1945+ <span class="c"># First, compute the directory of the first loaded file.</span>
1946+ <span class="c"># All entries in lm.files are full, absolute paths.</span>
1947+ <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>
1948+
1949+ <span class="n">table</span> <span class="o">=</span> <span class="p">(</span>
1950+ <span class="c"># First, myLeoSettings.leo in the local directory</span>
1951+ <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>
1952+
1953+ <span class="c"># Next, myLeoSettings.leo in the home directories.</span>
1954+ <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>
1955+ <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>
1956+
1957+ <span class="c"># Next, &lt;machine-name&gt;myLeoSettings.leo in the home directories.</span>
1958+ <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>
1959+ <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>
1960+
1961+ <span class="c"># Last, leoSettings.leo in leo/config directory.</span>
1962+ <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>
1963+ <span class="p">)</span>
1964+
1965+ <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span>
1966+ <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>
1967+ <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>
1968+ <span class="k">break</span>
1969+ <span class="k">else</span><span class="p">:</span>
1970+ <span class="n">path</span> <span class="o">=</span> <span class="bp">None</span>
1971+
1972+ <span class="k">return</span> <span class="n">path</span>
1973+ <span class="c">#@+node:ekr.20120209051836.10252: *4* LM.computeStandardDirectories &amp; helpers</span></div>
1974+<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>
1975+
1976+ <span class="sd">&#39;&#39;&#39;Compute the locations of standard directories and</span>
1977+<span class="sd"> set the corresponding ivars.&#39;&#39;&#39;</span>
1978+
1979+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
1980+
1981+ <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>
1982+ <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>
1983+ <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>
1984+ <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>
1985+ <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>
1986+
1987+ <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>
1988+ <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>
1989+ <span class="c">#@+node:ekr.20120209051836.10253: *5* lm.computeGlobalConfigDir</span></div>
1990+<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>
1991+
1992+ <span class="c"># lm = self</span>
1993+
1994+ <span class="c"># To avoid pylint complaints that sys.leo_config_directory does not exist.</span>
1995+ <span class="n">leo_config_dir</span> <span class="o">=</span> <span class="p">(</span>
1996+ <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>
1997+ <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>
1998+ <span class="k">if</span> <span class="n">leo_config_dir</span><span class="p">:</span>
1999+ <span class="n">theDir</span> <span class="o">=</span> <span class="n">leo_config_dir</span>
2000+ <span class="k">else</span><span class="p">:</span>
2001+ <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>
2002+ <span class="k">if</span> <span class="n">theDir</span><span class="p">:</span>
2003+ <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>
2004+ <span class="k">if</span> <span class="p">(</span>
2005+ <span class="ow">not</span> <span class="n">theDir</span> <span class="ow">or</span>
2006+ <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>
2007+ <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>
2008+ <span class="p">):</span>
2009+ <span class="n">theDir</span> <span class="o">=</span> <span class="bp">None</span>
2010+ <span class="k">return</span> <span class="n">theDir</span>
2011+ <span class="c">#@+node:ekr.20120209051836.10254: *5* lm.computeHomeDir</span></div>
2012+<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>
2013+
2014+ <span class="sd">&quot;&quot;&quot;Returns the user&#39;s home directory.&quot;&quot;&quot;</span>
2015+
2016+ <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>
2017+ <span class="c"># Windows searches the HOME, HOMEPATH and HOMEDRIVE</span>
2018+ <span class="c"># environment vars, then gives up.</span>
2019+
2020+ <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>
2021+ <span class="c"># Get the indirect reference to the true home.</span>
2022+ <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>
2023+
2024+ <span class="k">if</span> <span class="n">home</span><span class="p">:</span>
2025+ <span class="c"># Important: This returns the _working_ directory if home is None!</span>
2026+ <span class="c"># This was the source of the 4.3 .leoID.txt problems.</span>
2027+ <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>
2028+ <span class="k">if</span> <span class="p">(</span>
2029+ <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>
2030+ <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>
2031+ <span class="p">):</span>
2032+ <span class="n">home</span> <span class="o">=</span> <span class="bp">None</span>
2033+
2034+ <span class="c"># g.trace(home)</span>
2035+ <span class="k">return</span> <span class="n">home</span>
2036+ <span class="c">#@+node:ekr.20120209051836.10260: *5* lm.computeHomeLeoDir</span></div>
2037+<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>
2038+
2039+ <span class="c"># lm = self</span>
2040+ <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>
2041+ <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>
2042+ <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>
2043+ <span class="k">return</span> <span class="n">homeLeoDir</span>
2044+ <span class="c">#@+node:ekr.20120209051836.10255: *5* lm.computeLeoDir</span></div>
2045+<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>
2046+
2047+ <span class="c"># lm = self</span>
2048+ <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>
2049+ <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>
2050+ <span class="c"># We don&#39;t want the result in sys.path</span>
2051+ <span class="c">#@+node:ekr.20120209051836.10256: *5* lm.computeLoadDir</span></div>
2052+<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>
2053+
2054+ <span class="sd">&quot;&quot;&quot;Returns the directory containing leo.py.&quot;&quot;&quot;</span>
2055+
2056+ <span class="kn">import</span> <span class="nn">sys</span>
2057+
2058+ <span class="k">try</span><span class="p">:</span>
2059+ <span class="c"># Fix a hangnail: on Windows the drive letter returned by</span>
2060+ <span class="c"># __file__ is randomly upper or lower case!</span>
2061+ <span class="c"># The made for an ugly recent files list.</span>
2062+ <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>
2063+ <span class="c"># g.trace(repr(path))</span>
2064+ <span class="k">if</span> <span class="n">path</span><span class="p">:</span>
2065+ <span class="c"># Possible fix for bug 735938:</span>
2066+ <span class="c"># Do the following only if path exists.</span>
2067+ <span class="c">#@+&lt;&lt; resolve symlinks &gt;&gt;</span>
2068+ <span class="c">#@+node:ekr.20120209051836.10257: *6* &lt;&lt; resolve symlinks &gt;&gt;</span>
2069+ <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>
2070+ <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>
2071+ <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>
2072+ <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>
2073+ <span class="c">#@-&lt;&lt; resolve symlinks &gt;&gt;</span>
2074+ <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>
2075+ <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>
2076+ <span class="c"># Convert the drive name to upper case.</span>
2077+ <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>
2078+
2079+
2080+ <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>
2081+ <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>
2082+ <span class="k">else</span><span class="p">:</span> <span class="n">loadDir</span> <span class="o">=</span> <span class="bp">None</span>
2083+
2084+ <span class="k">if</span> <span class="p">(</span>
2085+ <span class="ow">not</span> <span class="n">loadDir</span> <span class="ow">or</span>
2086+ <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>
2087+ <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>
2088+ <span class="p">):</span>
2089+ <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>
2090+ <span class="c"># From Marc-Antoine Parent.</span>
2091+ <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>
2092+ <span class="n">loadDir</span> <span class="o">+=</span> <span class="s">&quot;/leo/plugins&quot;</span>
2093+ <span class="k">else</span><span class="p">:</span>
2094+ <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>
2095+ <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>
2096+ <span class="c"># g.trace(loadDir)</span>
2097+ <span class="k">return</span> <span class="n">loadDir</span>
2098+ <span class="k">except</span><span class="p">:</span>
2099+ <span class="k">print</span><span class="p">(</span><span class="s">&quot;Exception getting load directory&quot;</span><span class="p">)</span>
2100+ <span class="k">raise</span>
2101+ <span class="c">#@+node:ekr.20120213164030.10697: *5* lm.computeMachineName</span></div>
2102+<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>
2103+
2104+ <span class="sd">&#39;&#39;&#39;Return the name of the current machine, i.e, HOSTNAME.&#39;&#39;&#39;</span>
2105+
2106+ <span class="c"># This is prepended to leoSettings.leo or myLeoSettings.leo</span>
2107+ <span class="c"># to give the machine-specific setting name.</span>
2108+ <span class="c"># How can this be worth doing??</span>
2109+
2110+ <span class="k">try</span><span class="p">:</span>
2111+ <span class="kn">import</span> <span class="nn">os</span>
2112+ <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>
2113+ <span class="k">if</span> <span class="ow">not</span> <span class="n">name</span><span class="p">:</span>
2114+ <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>
2115+ <span class="k">if</span> <span class="ow">not</span> <span class="n">name</span><span class="p">:</span>
2116+ <span class="kn">import</span> <span class="nn">socket</span>
2117+ <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>
2118+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
2119+ <span class="n">name</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>
2120+
2121+ <span class="c"># g.trace(name)</span>
2122+
2123+ <span class="k">return</span> <span class="n">name</span>
2124+ <span class="c">#@+node:ekr.20120211121736.10772: *4* LM.computeWorkbookFileName</span></div>
2125+<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>
2126+
2127+ <span class="c"># lm = self</span>
2128+
2129+ <span class="c"># Get the name of the workbook.</span>
2130+ <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>
2131+ <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>
2132+ <span class="k">if</span> <span class="ow">not</span> <span class="n">fn</span><span class="p">:</span> <span class="k">return</span>
2133+ <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>
2134+ <span class="k">return</span> <span class="n">fn</span>
2135+ <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>
2136+ <span class="c"># Create the file.</span>
2137+ <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>
2138+ <span class="k">return</span> <span class="n">fn</span>
2139+ <span class="k">else</span><span class="p">:</span>
2140+ <span class="c"># It&#39;s too risky to open a default file if it is relative.</span>
2141+ <span class="k">return</span> <span class="bp">None</span>
2142+ <span class="c">#@+node:ekr.20120219154958.10485: *4* LM.reportDirectories</span></div>
2143+<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>
2144+
2145+ <span class="k">if</span> <span class="ow">not</span> <span class="n">verbose</span><span class="p">:</span> <span class="k">return</span>
2146+
2147+ <span class="k">if</span> <span class="mi">1</span><span class="p">:</span> <span class="c"># old</span>
2148+
2149+ <span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
2150+ <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>
2151+ <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>
2152+ <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>
2153+ <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>
2154+ <span class="p">):</span>
2155+ <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>
2156+
2157+ <span class="k">else</span><span class="p">:</span>
2158+ <span class="n">aList</span> <span class="o">=</span> <span class="p">(</span>
2159+ <span class="s">&#39;homeDir&#39;</span><span class="p">,</span><span class="s">&#39;homeLeoDir&#39;</span><span class="p">,</span>
2160+ <span class="s">&#39;leoDir&#39;</span><span class="p">,</span><span class="s">&#39;loadDir&#39;</span><span class="p">,</span>
2161+ <span class="s">&#39;extensionsDir&#39;</span><span class="p">,</span><span class="s">&#39;globalConfigDir&#39;</span><span class="p">)</span>
2162+
2163+ <span class="k">for</span> <span class="n">ivar</span> <span class="ow">in</span> <span class="n">aList</span><span class="p">:</span>
2164+ <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>
2165+ <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>
2166+
2167+ <span class="c">#@+node:ekr.20120215062153.10740: *3* LM.Settings</span>
2168+ <span class="c">#@+node:ekr.20120130101219.10182: *4* lm.computeBindingLetter</span></div>
2169+<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>
2170+
2171+ <span class="c"># lm = self</span>
2172+ <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span><span class="p">:</span>
2173+ <span class="k">return</span> <span class="s">&#39;D&#39;</span>
2174+ <span class="n">table</span> <span class="o">=</span> <span class="p">(</span>
2175+ <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>
2176+ <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>
2177+ <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>
2178+ <span class="p">)</span>
2179+ <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>
2180+ <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>
2181+ <span class="k">return</span> <span class="n">letter</span>
2182+ <span class="k">else</span><span class="p">:</span>
2183+ <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>
2184+ <span class="c">#@+node:ekr.20120223062418.10421: *4* lm.computeLocalSettings (where the crash happened)</span></div>
2185+<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>
2186+
2187+ <span class="sd">&#39;&#39;&#39;Merge the settings dicts from c&#39;s outline into *new copies of*</span>
2188+<span class="sd"> settings_d and shortcuts_d.&#39;&#39;&#39;</span>
2189+
2190+ <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>
2191+ <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>
2192+ <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>
2193+
2194+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2195+
2196+ <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>
2197+
2198+ <span class="k">assert</span> <span class="n">shortcuts_d</span>
2199+ <span class="k">assert</span> <span class="n">settings_d</span>
2200+
2201+ <span class="k">if</span> <span class="n">settings_d2</span><span class="p">:</span>
2202+ <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>
2203+ <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>
2204+
2205+ <span class="k">if</span> <span class="n">shortcuts_d2</span><span class="p">:</span>
2206+ <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>
2207+
2208+ <span class="k">return</span> <span class="n">settings_d</span><span class="p">,</span><span class="n">shortcuts_d</span>
2209+ <span class="c">#@+node:ekr.20121126202114.3: *4* lm.createDefaultSettingsDicts (New)</span></div>
2210+<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>
2211+
2212+ <span class="sd">&#39;&#39;&#39;Create lm.globalSettingsDict &amp; lm.globalShortcutsDict.&#39;&#39;&#39;</span>
2213+
2214+ <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>
2215+ <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>
2216+ <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>
2217+
2218+ <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>
2219+ <span class="n">name</span><span class="o">=</span><span class="s">&#39;lm.globalShortcutsDict&#39;</span><span class="p">,</span>
2220+ <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>
2221+
2222+ <span class="k">return</span> <span class="n">settings_d</span><span class="p">,</span><span class="n">shortcuts_d</span>
2223+ <span class="c">#@+node:ekr.20120214165710.10726: *4* lm.createSettingsDicts</span></div>
2224+<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>
2225+
2226+ <span class="kn">import</span> <span class="nn">leo.core.leoConfig</span> <span class="kn">as</span> <span class="nn">leoConfig</span>
2227+
2228+ <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>
2229+ <span class="c"># returns the *raw* shortcutsDict, not a *merged* shortcuts dict.</span>
2230+
2231+ <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>
2232+
2233+ <span class="k">return</span> <span class="n">shortcutsDict</span><span class="p">,</span><span class="n">settingsDict</span>
2234+ <span class="c">#@+node:ekr.20120223062418.10414: *4* LM.getPreviousSettings</span></div>
2235+<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>
2236+
2237+ <span class="sd">&#39;&#39;&#39;Return the settings in effect for fn. Typically,</span>
2238+<span class="sd"> this involves pre-reading fn.&#39;&#39;&#39;</span>
2239+
2240+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2241+ <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>
2242+ <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>
2243+
2244+ <span class="c"># A special case: settings in leoSettings.leo do *not* override</span>
2245+ <span class="c"># the global settings, that is, settings in myLeoSettings.leo.</span>
2246+ <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>
2247+
2248+ <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>
2249+ <span class="c"># Open the file usinging a null gui.</span>
2250+ <span class="k">try</span><span class="p">:</span>
2251+ <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>
2252+ <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>
2253+ <span class="k">finally</span><span class="p">:</span>
2254+ <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>
2255+
2256+ <span class="c"># Merge the settings from c into *copies* of the global dicts.</span>
2257+ <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>
2258+ <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>
2259+ <span class="c"># d1 and d2 are copies.</span>
2260+ <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>
2261+ <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>
2262+ <span class="k">else</span><span class="p">:</span>
2263+ <span class="c"># Get the settings from the globals settings dicts.</span>
2264+ <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>
2265+ <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>
2266+
2267+ <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>
2268+ <span class="c">#@+node:ekr.20120214132927.10723: *4* lm.mergeShortcutsDicts &amp; helpers</span></div>
2269+<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>
2270+
2271+ <span class="sd">&#39;&#39;&#39;Create a new dict by overriding all shortcuts in old_d by shortcuts in new_d.</span>
2272+
2273+<span class="sd"> Both old_d and new_d remain unchanged.&#39;&#39;&#39;</span>
2274+
2275+ <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>
2276+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2277+
2278+ <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>
2279+ <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>
2280+
2281+ <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
2282+ <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>
2283+ <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>
2284+ <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>
2285+
2286+ <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>
2287+ <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>
2288+
2289+ <span class="c"># Fix bug 951921: check for duplicate shortcuts only in the new file.</span>
2290+ <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>
2291+
2292+ <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>
2293+ <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>
2294+
2295+ <span class="k">return</span> <span class="n">result</span>
2296+ <span class="c">#@+node:ekr.20120311070142.9904: *5* lm.checkForDuplicateShortcuts</span></div>
2297+<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>
2298+
2299+ <span class="sd">&#39;&#39;&#39;Check for duplicates in an &quot;inverted&quot; dictionary d</span>
2300+<span class="sd"> whose keys are strokes and whose values are lists of ShortcutInfo nodes.</span>
2301+
2302+<span class="sd"> Duplicates happen only if panes conflict.</span>
2303+<span class="sd"> &#39;&#39;&#39;</span>
2304+
2305+ <span class="c"># lm = self</span>
2306+
2307+ <span class="c"># Fix bug 951921: check for duplicate shortcuts only in the new file.</span>
2308+ <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>
2309+ <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>
2310+ <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>
2311+ <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>
2312+ <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>
2313+ <span class="k">for</span> <span class="n">si</span> <span class="ow">in</span> <span class="n">aList2</span><span class="p">:</span>
2314+ <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>
2315+ <span class="n">conflict</span> <span class="o">=</span> <span class="bp">True</span> <span class="p">;</span> <span class="k">break</span>
2316+ <span class="k">else</span><span class="p">:</span>
2317+ <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>
2318+ <span class="k">if</span> <span class="n">conflict</span><span class="p">:</span>
2319+ <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>
2320+ <span class="k">for</span> <span class="n">si</span> <span class="ow">in</span> <span class="n">aList2</span><span class="p">:</span>
2321+ <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>
2322+ <span class="c">#@+node:ekr.20120214132927.10724: *5* lm.invert</span></div>
2323+<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>
2324+
2325+ <span class="sd">&#39;&#39;&#39;Invert a shortcut dict whose keys are command names,</span>
2326+<span class="sd"> returning a dict whose keys are strokes.&#39;&#39;&#39;</span>
2327+
2328+ <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>
2329+ <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>
2330+
2331+ <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>
2332+ <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>
2333+ <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>
2334+ <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>
2335+
2336+ <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>
2337+ <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>
2338+ <span class="c"># This assert can fail if there is an exception in the ShortcutInfo ctor.</span>
2339+ <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>
2340+
2341+ <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>
2342+ <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>
2343+ <span class="k">assert</span> <span class="n">stroke</span>
2344+ <span class="k">if</span> <span class="n">trace</span> <span class="ow">and</span> <span class="n">verbose</span><span class="p">:</span>
2345+ <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>
2346+ <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>
2347+
2348+ <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>
2349+ <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>
2350+ <span class="k">return</span> <span class="n">result</span>
2351+ <span class="c">#@+node:ekr.20120214132927.10725: *5* lm.uninvert</span></div>
2352+<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>
2353+
2354+ <span class="sd">&#39;&#39;&#39;Uninvert an inverted shortcut dict whose keys are strokes,</span>
2355+<span class="sd"> returning a dict whose keys are command names.&#39;&#39;&#39;</span>
2356+
2357+ <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>
2358+ <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>
2359+
2360+ <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>
2361+ <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>
2362+ <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>
2363+ <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>
2364+ <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>
2365+
2366+ <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>
2367+ <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>
2368+ <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>
2369+ <span class="n">commandName</span> <span class="o">=</span> <span class="n">si</span><span class="o">.</span><span class="n">commandName</span>
2370+ <span class="k">if</span> <span class="n">trace</span> <span class="ow">and</span> <span class="n">verbose</span><span class="p">:</span>
2371+ <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>
2372+ <span class="k">assert</span> <span class="n">commandName</span>
2373+ <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>
2374+
2375+ <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>
2376+ <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>
2377+ <span class="k">return</span> <span class="n">result</span>
2378+ <span class="c">#@+node:ekr.20120222103014.10312: *4* lm.openSettingsFile</span></div>
2379+<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>
2380+
2381+ <span class="sd">&#39;&#39;&#39;Open a settings file with a null gui. Return the commander.</span>
2382+
2383+<span class="sd"> The caller must init the c.config object.&#39;&#39;&#39;</span>
2384+
2385+ <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>
2386+ <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>
2387+ <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>
2388+
2389+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2390+ <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>
2391+
2392+ <span class="n">giveMessage</span> <span class="o">=</span> <span class="p">(</span>
2393+ <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>
2394+ <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>
2395+ <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>
2396+ <span class="c"># and not g.app.inBridge</span>
2397+ <span class="k">def</span> <span class="nf">message</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
2398+ <span class="c"># This occurs early in startup, so use the following.</span>
2399+ <span class="k">if</span> <span class="ow">not</span> <span class="n">giveMessage</span><span class="p">:</span> <span class="k">return</span>
2400+ <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>
2401+ <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>
2402+ <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>
2403+
2404+ <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>
2405+
2406+ <span class="k">if</span> <span class="n">theFile</span><span class="p">:</span>
2407+ <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>
2408+
2409+ <span class="c"># Changing g.app.gui here is a major hack. It is necessary.</span>
2410+ <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>
2411+ <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>
2412+ <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>
2413+ <span class="n">frame</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">frame</span>
2414+ <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>
2415+ <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>
2416+ <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>
2417+ <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>
2418+ <span class="c"># closes theFile.</span>
2419+ <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>
2420+ <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>
2421+ <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>
2422+ <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>
2423+ <span class="c">#@+node:ekr.20120213081706.10382: *4* lm.readGlobalSettingsFiles (changed)</span></div>
2424+<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>
2425+
2426+ <span class="sd">&#39;&#39;&#39;Read leoSettings.leo and myLeoSettings.leo using a null gui.&#39;&#39;&#39;</span>
2427+
2428+ <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>
2429+ <span class="n">verbose</span> <span class="o">=</span> <span class="bp">False</span>
2430+ <span class="n">tag</span> <span class="o">=</span> <span class="s">&#39;lm.readGlobalSettingsFiles&#39;</span>
2431+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2432+
2433+ <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>
2434+ <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>
2435+
2436+ <span class="c"># Open the standard settings files with a nullGui.</span>
2437+ <span class="c"># Important: their commanders do not exist outside this method!</span>
2438+ <span class="n">commanders</span> <span class="o">=</span> <span class="p">[</span>
2439+ <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>
2440+ <span class="n">lm</span><span class="o">.</span><span class="n">computeLeoSettingsPath</span><span class="p">(),</span>
2441+ <span class="n">lm</span><span class="o">.</span><span class="n">computeMyLeoSettingsPath</span><span class="p">())]</span>
2442+
2443+ <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>
2444+
2445+ <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">commanders</span><span class="p">:</span>
2446+ <span class="k">if</span> <span class="n">c</span><span class="p">:</span>
2447+ <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>
2448+ <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>
2449+
2450+ <span class="c"># Adjust the name.</span>
2451+ <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>
2452+
2453+ <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
2454+ <span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
2455+ <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">commanders</span><span class="p">:</span>
2456+ <span class="k">print</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
2457+ <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>
2458+ <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>
2459+ <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>
2460+
2461+ <span class="n">lm</span><span class="o">.</span><span class="n">globalSettingsDict</span> <span class="o">=</span> <span class="n">settings_d</span>
2462+ <span class="n">lm</span><span class="o">.</span><span class="n">globalShortcutsDict</span> <span class="o">=</span> <span class="n">shortcuts_d</span>
2463+ <span class="c">#@+node:ekr.20120214165710.10838: *4* lm.traceSettingsDict</span></div>
2464+<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>
2465+
2466+ <span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
2467+ <span class="k">print</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
2468+ <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>
2469+ <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>
2470+ <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>
2471+ <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>
2472+ <span class="k">else</span><span class="p">:</span>
2473+ <span class="k">print</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
2474+ <span class="c">#@+node:ekr.20120214165710.10822: *4* lm.traceShortcutsDict</span></div>
2475+<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>
2476+
2477+ <span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
2478+ <span class="k">print</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
2479+ <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>
2480+ <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>
2481+ <span class="c"># print(&#39;%20s %s&#39; % (key,val.dump()))</span>
2482+ <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>
2483+ <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>
2484+ <span class="k">else</span><span class="p">:</span>
2485+ <span class="k">print</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
2486+ <span class="c">#@+node:ekr.20120219154958.10452: *3* LM.load</span></div>
2487+<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>
2488+
2489+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2490+
2491+ <span class="c"># Phase 1: before loading plugins.</span>
2492+ <span class="c"># Scan options, set directories and read settings.</span>
2493+ <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>
2494+
2495+ <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>
2496+ <span class="c"># sets lm.options and lm.files</span>
2497+
2498+ <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>
2499+ <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>
2500+ <span class="k">return</span>
2501+ <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>
2502+ <span class="k">return</span>
2503+
2504+ <span class="c"># Phase 2: load plugins: the gui has already been set.</span>
2505+ <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>
2506+ <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>
2507+
2508+ <span class="c"># Phase 3: after loading plugins. Create one or more frames.</span>
2509+ <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>
2510+
2511+ <span class="k">if</span> <span class="n">ok</span><span class="p">:</span>
2512+ <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>
2513+ <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>
2514+ <span class="c"># For scripts, the gui is a nullGui.</span>
2515+ <span class="c"># and the gui.setScript has already been called.</span>
2516+ <span class="c">#@+node:ekr.20120219154958.10477: *4* LM.doPrePluginsInit &amp; helpers</span></div>
2517+<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>
2518+
2519+ <span class="sd">&#39;&#39;&#39; Scan options, set directories and read settings.&#39;&#39;&#39;</span>
2520+
2521+ <span class="c"># trace = False</span>
2522+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2523+ <span class="n">lm</span><span class="o">.</span><span class="n">computeStandardDirectories</span><span class="p">()</span>
2524+ <span class="n">lm</span><span class="o">.</span><span class="n">adjustSysPath</span><span class="p">()</span>
2525+
2526+ <span class="c"># Scan the options as early as possible.</span>
2527+ <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>
2528+ <span class="c"># also sets lm.files.</span>
2529+
2530+ <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>
2531+ <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>
2532+ <span class="k">return</span>
2533+
2534+ <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>
2535+ <span class="n">verbose</span> <span class="o">=</span> <span class="n">script</span> <span class="ow">is</span> <span class="bp">None</span>
2536+
2537+ <span class="c"># Init the app.</span>
2538+ <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>
2539+ <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>
2540+
2541+ <span class="c"># Read settings *after* setting g.app.config and *before* opening plugins.</span>
2542+ <span class="c"># This means if-gui has effect only in per-file settings.</span>
2543+ <span class="n">lm</span><span class="o">.</span><span class="n">readGlobalSettingsFiles</span><span class="p">()</span>
2544+ <span class="c"># reads only standard settings files, using a null gui.</span>
2545+ <span class="c"># uses lm.files[0] to compute the local directory</span>
2546+ <span class="c"># that might contain myLeoSettings.leo.</span>
2547+
2548+ <span class="c"># Read the recent files file.</span>
2549+ <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>
2550+ <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>
2551+
2552+ <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>
2553+
2554+ <span class="c"># Create the gui after reading options and settings.</span>
2555+ <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>
2556+
2557+ <span class="c"># We can&#39;t print the signon until we know the gui.</span>
2558+ <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>
2559+ <span class="c">#@+node:ekr.20120219154958.10478: *5* LM.createGui</span></div>
2560+<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>
2561+
2562+ <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>
2563+ <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>
2564+
2565+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2566+
2567+ <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>
2568+ <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>
2569+ <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>
2570+
2571+ <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>
2572+ <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>
2573+ <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>
2574+ <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>
2575+ <span class="k">else</span><span class="p">:</span>
2576+ <span class="c"># This can happen when launching Leo from IPython.</span>
2577+ <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>
2578+ <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>
2579+ <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>
2580+ <span class="c"># Always use null gui for scripts.</span>
2581+ <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>
2582+ <span class="k">else</span><span class="p">:</span>
2583+ <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>
2584+ <span class="k">else</span><span class="p">:</span>
2585+ <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>
2586+ <span class="c">#@+node:ekr.20120219154958.10479: *5* LM.createSpecialGui</span></div>
2587+<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>
2588+
2589+ <span class="c"># lm = self</span>
2590+
2591+ <span class="k">if</span> <span class="n">pymacs</span><span class="p">:</span>
2592+ <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>
2593+ <span class="k">elif</span> <span class="n">script</span><span class="p">:</span>
2594+ <span class="k">if</span> <span class="n">windowFlag</span><span class="p">:</span>
2595+ <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>
2596+ <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>
2597+ <span class="n">sys</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="p">[]</span>
2598+ <span class="k">else</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">createNullGuiWithScript</span><span class="p">(</span><span class="n">script</span><span class="o">=</span><span class="n">script</span><span class="p">)</span>
2600+ <span class="k">else</span><span class="p">:</span>
2601+ <span class="c"># assert g.app.guiArgName</span>
2602+ <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>
2603+ <span class="c">#@+node:ekr.20120219154958.10480: *5* LM.adjustSysPath</span></div>
2604+<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>
2605+
2606+ <span class="sd">&#39;&#39;&#39;Adjust sys.path to enable imports as usual with Leo.</span>
2607+
2608+<span class="sd"> This method is no longer needed:</span>
2609+
2610+<span class="sd"> 1. g.importModule will import from the</span>
2611+<span class="sd"> &#39;external&#39; or &#39;extensions&#39; folders as needed</span>
2612+<span class="sd"> without altering sys.path.</span>
2613+
2614+<span class="sd"> 2. Plugins now do fully qualified imports.</span>
2615+<span class="sd"> &#39;&#39;&#39;</span>
2616+
2617+ <span class="k">pass</span>
2618+ <span class="c">#@+node:ekr.20120219154958.10482: *5* LM.getDefaultFile</span></div>
2619+<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>
2620+
2621+ <span class="c"># Get the name of the workbook.</span>
2622+ <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>
2623+ <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>
2624+ <span class="k">if</span> <span class="ow">not</span> <span class="n">fn</span><span class="p">:</span> <span class="k">return</span>
2625+
2626+ <span class="c"># g.trace(g.os_path_exists(fn),fn)</span>
2627+
2628+ <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>
2629+ <span class="k">return</span> <span class="n">fn</span>
2630+ <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>
2631+ <span class="c"># Create the file.</span>
2632+ <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>
2633+ <span class="k">return</span> <span class="n">fn</span>
2634+ <span class="k">else</span><span class="p">:</span>
2635+ <span class="c"># It&#39;s too risky to open a default file if it is relative.</span>
2636+ <span class="k">return</span> <span class="bp">None</span>
2637+ <span class="c">#@+node:ekr.20120219154958.10484: *5* LM.initApp</span></div>
2638+<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>
2639+
2640+ <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>
2641+ <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>
2642+
2643+ <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>
2644+
2645+ <span class="kn">import</span> <span class="nn">leo.core.leoConfig</span> <span class="kn">as</span> <span class="nn">leoConfig</span>
2646+ <span class="kn">import</span> <span class="nn">leo.core.leoNodes</span> <span class="kn">as</span> <span class="nn">leoNodes</span>
2647+ <span class="kn">import</span> <span class="nn">leo.core.leoPlugins</span> <span class="kn">as</span> <span class="nn">leoPlugins</span>
2648+ <span class="kn">import</span> <span class="nn">leo.core.leoSessions</span> <span class="kn">as</span> <span class="nn">leoSessions</span>
2649+
2650+ <span class="c"># Import leoIPython only if requested. The import is quite slow.</span>
2651+ <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>
2652+ <span class="kn">import</span> <span class="nn">leo.core.leoIPython</span> <span class="kn">as</span> <span class="nn">leoIPython</span>
2653+ <span class="c"># Use the GlobalIPythonManager created during the import process.</span>
2654+ <span class="c"># This ensures that only one copy is ever created.</span>
2655+ <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>
2656+
2657+ <span class="c"># Make sure we call the new leoPlugins.init top-level function.</span>
2658+ <span class="c"># This prevents a crash when run is called repeatedly from</span>
2659+ <span class="c"># IPython&#39;s lleo extension.</span>
2660+ <span class="n">leoPlugins</span><span class="o">.</span><span class="n">init</span><span class="p">()</span>
2661+
2662+ <span class="c"># Force the user to set g.app.leoID.</span>
2663+ <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>
2664+
2665+ <span class="c"># Create early classes *after* doing plugins.init()</span>
2666+ <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>
2667+ <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>
2668+ <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>
2669+ <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>
2670+
2671+ <span class="c"># Complete the plugins class last.</span>
2672+ <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>
2673+ <span class="c">#@+node:ekr.20120219154958.10486: *5* LM.scanOptions &amp; helper</span></div>
2674+<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>
2675+
2676+ <span class="sd">&#39;&#39;&#39;Handle all options, remove them from sys.argv and set lm.options.&#39;&#39;&#39;</span>
2677+
2678+ <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span>
2679+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2680+
2681+ <span class="c"># print(&#39;scanOptions&#39;,sys.argv)</span>
2682+
2683+ <span class="c"># Note: this automatically implements the --help option.</span>
2684+ <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>
2685+ <span class="n">add</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span>
2686+
2687+ <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>
2688+ <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;start fullscreen (Qt only)&#39;</span><span class="p">)</span>
2689+ <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>
2690+ <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;enable ipython support&#39;</span><span class="p">)</span>
2691+ <span class="n">add</span><span class="p">(</span><span class="s">&#39;--gui&#39;</span><span class="p">,</span>
2692+ <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;gui to use (qt/qttabs)&#39;</span><span class="p">)</span>
2693+ <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>
2694+ <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;start maximized (Qt only)&#39;</span><span class="p">)</span>
2695+ <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>
2696+ <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;start minimized&#39;</span><span class="p">)</span>
2697+ <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>
2698+ <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;disable reading of cached files&#39;</span><span class="p">)</span>
2699+ <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>
2700+ <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;disable all plugins&#39;</span><span class="p">)</span>
2701+ <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>
2702+ <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;disable the splash screen&#39;</span><span class="p">)</span>
2703+ <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>
2704+ <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>
2705+ <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>
2706+ <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>
2707+ <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>
2708+ <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;open a window for scripts&#39;</span><span class="p">)</span>
2709+ <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>
2710+ <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>
2711+ <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>
2712+ <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>
2713+ <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>
2714+ <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;save session tabs on exit&#39;</span><span class="p">)</span>
2715+ <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>
2716+ <span class="n">help</span> <span class="o">=</span> <span class="s">&#39;disable all log messages&#39;</span><span class="p">)</span>
2717+ <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>
2718+ <span class="n">help</span><span class="o">=</span><span class="s">&#39;print version number and exit&#39;</span><span class="p">)</span>
2719+ <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>
2720+ <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>
2721+
2722+ <span class="c"># Parse the options, and remove them from sys.argv.</span>
2723+ <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>
2724+ <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>
2725+ <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
2726+ <span class="c"># print(&#39;scanOptions:&#39;,sys.argv)</span>
2727+ <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>
2728+
2729+ <span class="c"># Handle the args...</span>
2730+
2731+ <span class="c"># --gui</span>
2732+ <span class="n">gui</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">gui</span>
2733+
2734+ <span class="k">if</span> <span class="n">gui</span><span class="p">:</span>
2735+ <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>
2736+ <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>
2737+ <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>
2738+ <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>
2739+ <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>
2740+ <span class="k">else</span><span class="p">:</span>
2741+ <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>
2742+ <span class="n">gui</span> <span class="o">=</span> <span class="s">&#39;qt&#39;</span>
2743+ <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>
2744+ <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>
2745+ <span class="n">gui</span> <span class="o">=</span> <span class="s">&#39;qt&#39;</span>
2746+ <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>
2747+ <span class="k">else</span><span class="p">:</span>
2748+ <span class="n">gui</span> <span class="o">=</span> <span class="s">&#39;qttabs&#39;</span>
2749+ <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>
2750+
2751+ <span class="k">assert</span> <span class="n">gui</span>
2752+ <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>
2753+
2754+ <span class="c"># --ipython</span>
2755+ <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>
2756+ <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>
2757+
2758+ <span class="c"># --fullscreen</span>
2759+ <span class="c"># --minimized</span>
2760+ <span class="c"># --maximized</span>
2761+ <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>
2762+ <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>
2763+ <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>
2764+
2765+ <span class="c"># --no-cache</span>
2766+ <span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">no_cache</span><span class="p">:</span>
2767+ <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>
2768+ <span class="n">g</span><span class="o">.</span><span class="n">enableDB</span> <span class="o">=</span> <span class="bp">False</span>
2769+
2770+ <span class="c"># --no-plugins</span>
2771+ <span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">no_plugins</span><span class="p">:</span>
2772+ <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>
2773+ <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>
2774+
2775+ <span class="c"># --no-splash</span>
2776+ <span class="c"># g.trace(&#39;--no-splash&#39;,options.no_splash_screen)</span>
2777+ <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>
2778+
2779+ <span class="c"># --screen-shot=fn</span>
2780+ <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>
2781+ <span class="k">if</span> <span class="n">screenshot_fn</span><span class="p">:</span>
2782+ <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>
2783+ <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>
2784+
2785+ <span class="c"># --script</span>
2786+ <span class="n">script_path</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">script</span>
2787+ <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>
2788+ <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>
2789+ <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>
2790+
2791+ <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>
2792+ <span class="k">if</span> <span class="n">script_name</span><span class="p">:</span>
2793+ <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>
2794+ <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>
2795+ <span class="c"># print(&#39;script_name&#39;,repr(script_name))</span>
2796+ <span class="k">else</span><span class="p">:</span>
2797+ <span class="n">script</span> <span class="o">=</span> <span class="bp">None</span>
2798+ <span class="c"># if trace: print(&#39;scanOptions: no script&#39;)</span>
2799+
2800+ <span class="c"># --select</span>
2801+ <span class="n">select</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">select</span>
2802+ <span class="k">if</span> <span class="n">select</span><span class="p">:</span>
2803+ <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>
2804+ <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>
2805+
2806+ <span class="c"># --session-restore &amp; --session-save</span>
2807+ <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>
2808+ <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>
2809+
2810+ <span class="c"># --silent</span>
2811+ <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>
2812+ <span class="c"># print(&#39;scanOptions: silentMode&#39;,g.app.silentMode)</span>
2813+
2814+ <span class="c"># --version: print the version and exit.</span>
2815+ <span class="n">versionFlag</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">version</span>
2816+
2817+
2818+ <span class="c"># --window-size</span>
2819+ <span class="n">windowSize</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">window_size</span>
2820+ <span class="k">if</span> <span class="n">windowSize</span><span class="p">:</span>
2821+ <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>
2822+ <span class="k">try</span><span class="p">:</span>
2823+ <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>
2824+ <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
2825+ <span class="n">windowSize</span> <span class="o">=</span> <span class="bp">None</span>
2826+ <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>
2827+
2828+ <span class="c"># Compute lm.files</span>
2829+ <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>
2830+
2831+ <span class="c"># Post-process the options.</span>
2832+ <span class="k">if</span> <span class="n">pymacs</span><span class="p">:</span>
2833+ <span class="n">script</span> <span class="o">=</span> <span class="bp">None</span>
2834+ <span class="n">windowFlag</span> <span class="o">=</span> <span class="bp">None</span>
2835+
2836+ <span class="c"># Compute the return values.</span>
2837+ <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>
2838+ <span class="n">d</span> <span class="o">=</span> <span class="p">{</span>
2839+ <span class="s">&#39;gui&#39;</span><span class="p">:</span><span class="n">gui</span><span class="p">,</span>
2840+ <span class="s">&#39;screenshot_fn&#39;</span><span class="p">:</span><span class="n">screenshot_fn</span><span class="p">,</span>
2841+ <span class="s">&#39;script&#39;</span><span class="p">:</span><span class="n">script</span><span class="p">,</span>
2842+ <span class="s">&#39;select&#39;</span><span class="p">:</span><span class="n">select</span><span class="p">,</span>
2843+ <span class="s">&#39;version&#39;</span><span class="p">:</span><span class="n">versionFlag</span><span class="p">,</span>
2844+ <span class="s">&#39;windowFlag&#39;</span><span class="p">:</span><span class="n">windowFlag</span><span class="p">,</span>
2845+ <span class="s">&#39;windowSize&#39;</span><span class="p">:</span><span class="n">windowSize</span><span class="p">,</span>
2846+ <span class="p">}</span>
2847+
2848+ <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>
2849+
2850+ <span class="k">return</span> <span class="n">d</span>
2851+ <span class="c">#@+node:ekr.20120219154958.10483: *6* LM.computeFilesList</span></div>
2852+<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>
2853+
2854+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2855+ <span class="n">files</span> <span class="o">=</span> <span class="p">[]</span>
2856+ <span class="k">if</span> <span class="n">fileName</span><span class="p">:</span>
2857+ <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>
2858+
2859+ <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>
2860+ <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>
2861+ <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>
2862+
2863+ <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>
2864+ <span class="c">#@+node:ekr.20120219154958.10487: *4* LM.doPostPluginsInit &amp; helpers</span></div>
2865+<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>
2866+
2867+ <span class="sd">&#39;&#39;&#39;Create a Leo window for each file in the lm.files list.&#39;&#39;&#39;</span>
2868+
2869+ <span class="c"># Clear g.app.initing _before_ creating commanders.</span>
2870+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
2871+ <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>
2872+
2873+ <span class="c"># Create the main frame. Show it and all queued messages.</span>
2874+
2875+ <span class="c"># g.trace(lm.files)</span>
2876+ <span class="k">if</span> <span class="n">lm</span><span class="o">.</span><span class="n">files</span><span class="p">:</span>
2877+ <span class="n">c1</span> <span class="o">=</span> <span class="bp">None</span>
2878+ <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>
2879+ <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>
2880+ <span class="c"># Will give a &quot;not found&quot; message.</span>
2881+ <span class="c"># This can fail if the file is open in another instance of Leo.</span>
2882+ <span class="c"># assert c</span>
2883+ <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>
2884+ <span class="k">else</span><span class="p">:</span>
2885+ <span class="n">c</span> <span class="o">=</span> <span class="n">c1</span> <span class="o">=</span> <span class="bp">None</span>
2886+
2887+ <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>
2888+ <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>
2889+ <span class="k">if</span> <span class="n">m</span><span class="p">:</span>
2890+ <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>
2891+ <span class="k">if</span> <span class="n">aList</span><span class="p">:</span>
2892+ <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>
2893+ <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>
2894+
2895+ <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>
2896+ <span class="c"># Create an empty frame.</span>
2897+ <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>
2898+ <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>
2899+
2900+ <span class="c"># Put the focus in the first-opened file.</span>
2901+ <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>
2902+ <span class="n">c</span> <span class="o">=</span> <span class="n">c1</span>
2903+
2904+ <span class="c"># For qttabs gui, select the first-loaded tab.</span>
2905+ <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>
2906+ <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>
2907+ <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>
2908+ <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>
2909+
2910+ <span class="c"># Fix bug 844953: tell Unity which menu to use.</span>
2911+ <span class="n">c</span><span class="o">.</span><span class="n">enableMenuBar</span><span class="p">()</span>
2912+
2913+ <span class="c"># Do the final inits.</span>
2914+ <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>
2915+ <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>
2916+ <span class="n">c</span><span class="o">.</span><span class="n">setLog</span><span class="p">()</span>
2917+ <span class="c"># print(&#39;doPostPluginsInit: ***** set log&#39;)</span>
2918+
2919+ <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>
2920+ <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>
2921+ <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>
2922+
2923+ <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>
2924+ <span class="k">if</span> <span class="n">screenshot_fn</span><span class="p">:</span>
2925+ <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>
2926+ <span class="k">return</span> <span class="bp">False</span> <span class="c"># Force an immediate exit.</span>
2927+
2928+ <span class="k">return</span> <span class="bp">True</span>
2929+ <span class="c">#@+node:ekr.20120219154958.10488: *5* LM.initFocusAndDraw</span></div>
2930+<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>
2931+
2932+ <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>
2933+
2934+ <span class="k">if</span> <span class="ow">not</span> <span class="n">fileName</span><span class="p">:</span>
2935+ <span class="n">c</span><span class="o">.</span><span class="n">redraw</span><span class="p">()</span>
2936+
2937+ <span class="c"># Respect c&#39;s focus wishes if posssible.</span>
2938+ <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>
2939+ <span class="n">c</span><span class="o">.</span><span class="n">bodyWantsFocus</span><span class="p">()</span>
2940+ <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>
2941+
2942+ <span class="n">c</span><span class="o">.</span><span class="n">outerUpdate</span><span class="p">()</span>
2943+ <span class="c">#@+node:ekr.20120219154958.10489: *5* LM.make_screen_shot</span></div>
2944+<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>
2945+
2946+ <span class="sd">&#39;&#39;&#39;Create a screenshot of the present Leo outline and save it to path.&#39;&#39;&#39;</span>
2947+
2948+ <span class="c"># g.trace(&#39;runLeo.py&#39;,fn)</span>
2949+
2950+ <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>
2951+ <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>
2952+ <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>
2953+ <span class="c">#@+node:ekr.20120219154958.10491: *4* LM.isValidPython &amp; emergency (Tk) dialog class</span></div>
2954+<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>
2955+
2956+ <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>
2957+ <span class="k">return</span> <span class="bp">True</span>
2958+
2959+ <span class="n">minimum_python_version</span> <span class="o">=</span> <span class="s">&#39;2.6&#39;</span>
2960+
2961+ <span class="n">message</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;</span><span class="se">\</span>
2962+<span class="s"> Leo requires Python </span><span class="si">%s</span><span class="s"> or higher.</span>
2963+<span class="s"> You may download Python from</span>
2964+<span class="s"> http://python.org/download/</span>
2965+<span class="s"> &quot;&quot;&quot;</span> <span class="o">%</span> <span class="n">minimum_python_version</span>
2966+
2967+ <span class="k">try</span><span class="p">:</span>
2968+ <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>
2969+ <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>
2970+ <span class="k">if</span> <span class="ow">not</span> <span class="n">ok</span><span class="p">:</span>
2971+ <span class="k">print</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
2972+ <span class="k">try</span><span class="p">:</span>
2973+ <span class="c"># g.app.gui does not exist yet.</span>
2974+ <span class="kn">import</span> <span class="nn">Tkinter</span> <span class="kn">as</span> <span class="nn">Tk</span>
2975+ <span class="c">#@+&lt;&lt; define emergency dialog class &gt;&gt;</span>
2976+ <span class="c">#@+node:ekr.20120219154958.10492: *5* &lt;&lt; define emergency dialog class &gt;&gt;</span>
2977+ <span class="k">class</span> <span class="nc">emergencyDialog</span><span class="p">:</span>
2978+
2979+ <span class="sd">&quot;&quot;&quot;A class that creates an Tkinter dialog with a single OK button.&quot;&quot;&quot;</span>
2980+
2981+ <span class="c">#@+others</span>
2982+ <span class="c">#@+node:ekr.20120219154958.10493: *6* __init__ (emergencyDialog)</span>
2983+ <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>
2984+
2985+ <span class="sd">&quot;&quot;&quot;Constructor for the leoTkinterDialog class.&quot;&quot;&quot;</span>
2986+
2987+ <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>
2988+ <span class="bp">self</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="n">title</span>
2989+ <span class="bp">self</span><span class="o">.</span><span class="n">message</span><span class="o">=</span><span class="n">message</span>
2990+
2991+ <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>
2992+ <span class="bp">self</span><span class="o">.</span><span class="n">defaultButtonCommand</span> <span class="o">=</span> <span class="bp">None</span>
2993+ <span class="c"># Command to call when user closes the window</span>
2994+ <span class="c"># by clicking the close box.</span>
2995+ <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>
2996+ <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>
2997+ <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>
2998+
2999+ <span class="bp">self</span><span class="o">.</span><span class="n">createTopFrame</span><span class="p">()</span>
3000+ <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>
3001+ <span class="c"># Singleton tuple.</span>
3002+ <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>
3003+ <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>
3004+ <span class="c">#@+node:ekr.20120219154958.10494: *6* createButtons</span>
3005+ <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>
3006+
3007+ <span class="sd">&quot;&quot;&quot;Create a row of buttons.</span>
3008+
3009+<span class="sd"> buttons is a list of dictionaries containing</span>
3010+<span class="sd"> the properties of each button.&quot;&quot;&quot;</span>
3011+
3012+ <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>
3013+ <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>
3014+ <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>
3015+
3016+ <span class="c"># Buttons is a list of dictionaries, with an empty dictionary</span>
3017+ <span class="c"># at the end if there is only one entry.</span>
3018+ <span class="n">buttonList</span> <span class="o">=</span> <span class="p">[]</span>
3019+ <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">buttons</span><span class="p">:</span>
3020+ <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>
3021+ <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>
3022+ <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>
3023+ <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>
3024+ <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>
3025+
3026+ <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>
3027+ <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>
3028+ <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>
3029+ <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>
3030+
3031+ <span class="k">if</span> <span class="n">isDefault</span> <span class="ow">and</span> <span class="n">command</span><span class="p">:</span>
3032+ <span class="bp">self</span><span class="o">.</span><span class="n">defaultButtonCommand</span> <span class="o">=</span> <span class="n">command</span>
3033+
3034+ <span class="k">return</span> <span class="n">buttonList</span>
3035+ <span class="c">#@+node:ekr.20120219154958.10495: *6* createTopFrame</span>
3036+ <span class="k">def</span> <span class="nf">createTopFrame</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3037+
3038+ <span class="sd">&quot;&quot;&quot;Create the Tk.Toplevel widget for a leoTkinterDialog.&quot;&quot;&quot;</span>
3039+
3040+ <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>
3041+ <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>
3042+ <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>
3043+ <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>
3044+
3045+ <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>
3046+ <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>
3047+
3048+ <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>
3049+ <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>
3050+ <span class="c">#@+node:ekr.20120219154958.10496: *6* okButton</span>
3051+ <span class="k">def</span> <span class="nf">okButton</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3052+
3053+ <span class="sd">&quot;&quot;&quot;Do default click action in ok button.&quot;&quot;&quot;</span>
3054+
3055+ <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>
3056+ <span class="bp">self</span><span class="o">.</span><span class="n">top</span> <span class="o">=</span> <span class="bp">None</span>
3057+
3058+ <span class="c">#@+node:ekr.20120219154958.10497: *6* onKey</span>
3059+ <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>
3060+
3061+ <span class="sd">&quot;&quot;&quot;Handle Key events in askOk dialogs.&quot;&quot;&quot;</span>
3062+
3063+ <span class="bp">self</span><span class="o">.</span><span class="n">okButton</span><span class="p">()</span>
3064+
3065+ <span class="k">return</span> <span class="c"># (for Tk) &quot;break&quot;</span>
3066+ <span class="c">#@+node:ekr.20120219154958.10498: *6* run</span>
3067+ <span class="k">def</span> <span class="nf">run</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3068+
3069+ <span class="sd">&quot;&quot;&quot;Run the modal emergency dialog.&quot;&quot;&quot;</span>
3070+
3071+ <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>
3072+ <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>
3073+
3074+ <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>
3075+ <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>
3076+ <span class="c">#@-others</span>
3077+ <span class="c">#@-&lt;&lt; define emergency dialog class &gt;&gt;</span>
3078+ <span class="n">d</span> <span class="o">=</span> <span class="n">emergencyDialog</span><span class="p">(</span>
3079+ <span class="n">title</span><span class="o">=</span><span class="s">&#39;Python Version Error&#39;</span><span class="p">,</span>
3080+ <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">)</span>
3081+ <span class="n">d</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
3082+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
3083+ <span class="k">pass</span>
3084+ <span class="k">return</span> <span class="n">ok</span>
3085+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
3086+ <span class="k">print</span><span class="p">(</span><span class="s">&quot;isValidPython: unexpected exception: g.CheckVersion&quot;</span><span class="p">)</span>
3087+ <span class="n">traceback</span><span class="o">.</span><span class="n">print_exc</span><span class="p">()</span>
3088+ <span class="k">return</span> <span class="mi">0</span>
3089+ <span class="c">#@+node:ekr.20120223062418.10393: *4* LM.loadLocalFile &amp; helper</span></div>
3090+<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>
3091+
3092+ <span class="sd">&#39;&#39;&#39;Completely read a file, creating the corresonding outline.</span>
3093+
3094+<span class="sd"> 1. If fn is an existing .leo file (possibly zipped), read it twice:</span>
3095+<span class="sd"> the first time with a nullGui to discover settings,</span>
3096+<span class="sd"> the second time with the requested gui to create the outline.</span>
3097+
3098+<span class="sd"> 2. If fn is an external file:</span>
3099+<span class="sd"> get settings from the leoSettings.leo and myLeoSetting.leo, then</span>
3100+<span class="sd"> create a &quot;wrapper&quot; outline continain an @file node for the external file.</span>
3101+
3102+<span class="sd"> 3. If fn is empty:</span>
3103+<span class="sd"> get settings from the leoSettings.leo and myLeoSetting.leo or default settings,</span>
3104+<span class="sd"> or open an empty outline.</span>
3105+<span class="sd"> &#39;&#39;&#39;</span>
3106+
3107+ <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>
3108+ <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>
3109+
3110+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
3111+
3112+ <span class="c"># Step 0: Return if the file is already open.</span>
3113+ <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>
3114+ <span class="k">if</span> <span class="n">fn</span><span class="p">:</span>
3115+ <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>
3116+ <span class="k">if</span> <span class="n">c</span><span class="p">:</span>
3117+ <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>
3118+ <span class="k">return</span> <span class="n">c</span>
3119+
3120+ <span class="c"># Step 1: get the previous settings.</span>
3121+ <span class="c"># For .leo files (and zipped .leo files) this pre-reads the file in a null gui.</span>
3122+ <span class="c"># Otherwise, get settings from leoSettings.leo, myLeoSettings.leo, or default settings.</span>
3123+ <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>
3124+
3125+ <span class="c"># Step 2: open the outline in the requested gui.</span>
3126+ <span class="c"># For .leo files (and zipped .leo file) this opens the file a second time.</span>
3127+ <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>
3128+ <span class="k">return</span> <span class="n">c</span>
3129+ <span class="c">#@+node:ekr.20120223062418.10394: *5* LM.openFileByName &amp; helpers</span></div>
3130+<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>
3131+
3132+ <span class="sd">&#39;&#39;&#39;Read the local file whose full path is fn using the given gui.</span>
3133+<span class="sd"> fn may be a Leo file (including .leo or zipped file) or an external file.</span>
3134+
3135+<span class="sd"> This is not a pre-read: the previousSettings always exist and</span>
3136+<span class="sd"> the commander created here persists until the user closes the outline.</span>
3137+
3138+<span class="sd"> Reads the entire outline if fn exists and is a .leo file or zipped file.</span>
3139+<span class="sd"> Creates an empty outline if fn is a non-existent Leo file.</span>
3140+<span class="sd"> Creates an wrapper outline if fn is an external file, existing or not.</span>
3141+<span class="sd"> &#39;&#39;&#39;</span>
3142+
3143+ <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>
3144+ <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>
3145+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
3146+
3147+ <span class="c"># Disable the log.</span>
3148+ <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>
3149+ <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>
3150+
3151+ <span class="c"># Create the a commander for the .leo file.</span>
3152+ <span class="c"># Important. The settings don&#39;t matter for pre-reads!</span>
3153+ <span class="c"># For second read, the settings for the file are *exactly* previousSettings.</span>
3154+ <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>
3155+ <span class="n">previousSettings</span><span class="o">=</span><span class="n">previousSettings</span><span class="p">)</span>
3156+ <span class="k">assert</span> <span class="n">c</span>
3157+
3158+ <span class="c"># Open the file, if possible.</span>
3159+ <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>
3160+ <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>
3161+
3162+ <span class="c"># Enable the log.</span>
3163+ <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>
3164+ <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>
3165+
3166+ <span class="c"># Phase 2: Create the outline.</span>
3167+ <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>
3168+ <span class="k">if</span> <span class="n">theFile</span><span class="p">:</span>
3169+ <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>
3170+ <span class="c">### The log is not set properly here. ###</span>
3171+ <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>
3172+ <span class="c"># Call c.fileCommands.openLeoFile to read the .leo file.</span>
3173+ <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>
3174+ <span class="k">else</span><span class="p">:</span>
3175+ <span class="c"># Create a wrapper .leo file if:</span>
3176+ <span class="c"># a) fn is a .leo file that does not exist or</span>
3177+ <span class="c"># b) fn is an external file, existing or not.</span>
3178+ <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>
3179+ <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>
3180+
3181+ <span class="c"># Phase 3: Complete the initialization.</span>
3182+ <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>
3183+ <span class="n">c</span><span class="o">.</span><span class="n">setLog</span><span class="p">()</span>
3184+ <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>
3185+ <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>
3186+ <span class="k">return</span> <span class="n">c</span>
3187+ <span class="c">#@+node:ekr.20120223062418.10405: *6* LM.createMenu</span></div>
3188+<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>
3189+
3190+ <span class="c"># lm = self</span>
3191+
3192+ <span class="c"># Create the menu as late as possible so it can use user commands.</span>
3193+ <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>
3194+ <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>
3195+ <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>
3196+ <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>
3197+ <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>
3198+ <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>
3199+
3200+ <span class="c"># Fix bug 844953: tell Unity which menu to use.</span>
3201+ <span class="n">c</span><span class="o">.</span><span class="n">enableMenuBar</span><span class="p">()</span>
3202+ <span class="c">#@+node:ekr.20120223062418.10406: *6* LM.findOpenFile</span></div>
3203+<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>
3204+
3205+ <span class="c"># lm = self</span>
3206+
3207+ <span class="k">def</span> <span class="nf">munge</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
3208+ <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>
3209+
3210+ <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>
3211+ <span class="n">c</span> <span class="o">=</span> <span class="n">frame</span><span class="o">.</span><span class="n">c</span>
3212+ <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>
3213+ <span class="n">frame</span><span class="o">.</span><span class="n">bringToFront</span><span class="p">()</span>
3214+ <span class="n">c</span><span class="o">.</span><span class="n">setLog</span><span class="p">()</span>
3215+ <span class="c"># 2011/11/21: selecting the new tab ensures focus is set.</span>
3216+ <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>
3217+ <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>
3218+ <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>
3219+ <span class="n">c</span><span class="o">.</span><span class="n">outerUpdate</span><span class="p">()</span>
3220+ <span class="k">return</span> <span class="n">c</span>
3221+
3222+ <span class="k">return</span> <span class="bp">None</span>
3223+ <span class="c">#@+node:ekr.20120223062418.10407: *6* LM.finishOpen</span></div>
3224+<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>
3225+
3226+ <span class="c"># lm = self</span>
3227+ <span class="n">k</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">k</span>
3228+ <span class="k">assert</span> <span class="n">k</span>
3229+
3230+ <span class="c"># New in Leo 4.6: provide an official way for very late initialization.</span>
3231+ <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>
3232+ <span class="n">c</span><span class="o">.</span><span class="n">initAfterLoad</span><span class="p">()</span>
3233+ <span class="n">c</span><span class="o">.</span><span class="n">redraw</span><span class="p">()</span>
3234+
3235+ <span class="c"># chapterController.finishCreate must be called after the first real redraw</span>
3236+ <span class="c"># because it requires a valid value for c.rootPosition().</span>
3237+ <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>
3238+ <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>
3239+ <span class="n">c</span><span class="o">.</span><span class="n">initialFocusHelper</span><span class="p">()</span>
3240+ <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>
3241+ <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>
3242+
3243+ <span class="c">#@+node:ekr.20120223062418.10408: *6* LM.initWrapperLeoFile</span></div>
3244+<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>
3245+
3246+ <span class="sd">&#39;&#39;&#39;Create an empty file if the external fn is empty.</span>
3247+
3248+<span class="sd"> Otherwise, create an @edit or @file node for the external file.</span>
3249+<span class="sd"> &#39;&#39;&#39;</span>
3250+
3251+ <span class="c"># lm = self</span>
3252+
3253+ <span class="c"># Use the config params to set the size and location of the window.</span>
3254+ <span class="n">frame</span> <span class="o">=</span> <span class="n">c</span><span class="o">.</span><span class="n">frame</span>
3255+ <span class="n">frame</span><span class="o">.</span><span class="n">setInitialWindowGeometry</span><span class="p">()</span>
3256+ <span class="n">frame</span><span class="o">.</span><span class="n">deiconify</span><span class="p">()</span>
3257+ <span class="n">frame</span><span class="o">.</span><span class="n">lift</span><span class="p">()</span>
3258+ <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>
3259+ <span class="c"># Resize the _new_ frame.</span>
3260+
3261+ <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>
3262+ <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>
3263+ <span class="c"># Create an empty @edit node unless fn is an .leo file.</span>
3264+ <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>
3265+ <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>
3266+ <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>
3267+ <span class="c"># 2011/10/10: Create an @file node.</span>
3268+ <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>
3269+ <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>
3270+ <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>
3271+ <span class="k">else</span><span class="p">:</span>
3272+ <span class="c"># Create an @edit node.</span>
3273+ <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>
3274+ <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>
3275+ <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>
3276+ <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>
3277+ <span class="k">if</span> <span class="n">p</span><span class="p">:</span>
3278+ <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>
3279+ <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>
3280+ <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>
3281+
3282+ <span class="c"># chapterController.finishCreate must be called after the first real redraw</span>
3283+ <span class="c"># because it requires a valid value for c.rootPosition().</span>
3284+ <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>
3285+ <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>
3286+
3287+ <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>
3288+ <span class="c"># Mark the outline clean.</span>
3289+ <span class="c"># This makes it easy to open non-Leo files for quick study.</span>
3290+ <span class="k">return</span> <span class="n">c</span>
3291+ <span class="c">#@+node:ekr.20120223062418.10419: *6* LM.isLeoFile &amp; LM.isZippedFile</span></div>
3292+<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>
3293+
3294+ <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>
3295+</div>
3296+<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>
3297+
3298+ <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>
3299+ <span class="c">#@+node:ekr.20120224161905.10030: *6* LM.openLeoOrZipFile</span></div>
3300+<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>
3301+
3302+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
3303+
3304+ <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>
3305+
3306+ <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>
3307+ <span class="k">if</span> <span class="n">zipped</span><span class="p">:</span>
3308+ <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>
3309+ <span class="k">else</span><span class="p">:</span>
3310+ <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>
3311+ <span class="k">else</span><span class="p">:</span>
3312+ <span class="n">theFile</span> <span class="o">=</span> <span class="bp">None</span>
3313+
3314+ <span class="k">return</span> <span class="n">theFile</span>
3315+ <span class="c">#@+node:ekr.20120223062418.10416: *6* LM.openLeoFile</span></div>
3316+<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>
3317+
3318+ <span class="c"># lm = self</span>
3319+ <span class="k">try</span><span class="p">:</span>
3320+ <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>
3321+ <span class="k">return</span> <span class="n">theFile</span>
3322+ <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
3323+ <span class="c"># Do not use string + here: it will fail for non-ascii strings!</span>
3324+ <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>
3325+ <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>
3326+ <span class="k">return</span> <span class="bp">None</span>
3327+ <span class="c">#@+node:ekr.20120223062418.10410: *6* LM.openZipFile</span></div>
3328+<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>
3329+
3330+ <span class="c"># lm = self</span>
3331+ <span class="k">try</span><span class="p">:</span>
3332+ <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>
3333+ <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>
3334+
3335+ <span class="c"># Read the file into an StringIO file.</span>
3336+ <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>
3337+ <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>
3338+ <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>
3339+ <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>
3340+ <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>
3341+ <span class="k">return</span> <span class="n">StringIO</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
3342+
3343+ <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
3344+ <span class="c"># Do not use string + here: it will fail for non-ascii strings!</span>
3345+ <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>
3346+ <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>
3347+ <span class="k">return</span> <span class="bp">None</span>
3348+ <span class="c">#@+node:ekr.20120223062418.10412: *6* LM.readOpenedLeoFile</span></div>
3349+<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>
3350+
3351+ <span class="c"># New in Leo 4.10: The open1 event does not allow an override of the init logic.</span>
3352+ <span class="k">assert</span> <span class="n">theFile</span>
3353+ <span class="c"># lm = self</span>
3354+ <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>
3355+ <span class="n">readAtFileNodesFlag</span><span class="o">=</span><span class="n">readAtFileNodesFlag</span><span class="p">)</span>
3356+ <span class="c"># closes file.</span>
3357+ <span class="k">if</span> <span class="n">ok</span><span class="p">:</span>
3358+ <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>
3359+ <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>
3360+ <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>
3361+ <span class="k">else</span><span class="p">:</span>
3362+ <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>
3363+ <span class="k">return</span> <span class="n">ok</span>
3364+ <span class="c">#@-others</span>
3365+
3366+<span class="c">#@+node:ekr.20120211121736.10831: ** class LogManager</span></div></div>
3367+<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>
3368+
3369+ <span class="sd">&#39;&#39;&#39;A class to handle the global log, and especially</span>
3370+<span class="sd"> switching the log from commander to commander.&#39;&#39;&#39;</span>
3371+
3372+ <span class="k">def</span> <span class="nf">__init__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3373+
3374+ <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>
3375+ <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>
3376+
3377+ <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>
3378+ <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>
3379+ <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>
3380+ <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>
3381+ <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>
3382+ <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>
3383+
3384+ <span class="c">#@+others</span>
3385+ <span class="c">#@+node:ekr.20120211121736.10834: *3* LogM.setLog, lockLog, unlocklog</span>
3386+<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>
3387+
3388+ <span class="sd">&quot;&quot;&quot;set the frame to which log messages will go&quot;&quot;&quot;</span>
3389+
3390+ <span class="c"># print(&quot;app.setLog:&quot;,log,g.callers())</span>
3391+ <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>
3392+ <span class="bp">self</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="n">log</span>
3393+</div>
3394+<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>
3395+ <span class="sd">&quot;&quot;&quot;Disable changes to the log&quot;&quot;&quot;</span>
3396+ <span class="bp">self</span><span class="o">.</span><span class="n">logIsLocked</span> <span class="o">=</span> <span class="bp">True</span>
3397+</div>
3398+<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>
3399+ <span class="sd">&quot;&quot;&quot;Enable changes to the log&quot;&quot;&quot;</span>
3400+ <span class="bp">self</span><span class="o">.</span><span class="n">logIsLocked</span> <span class="o">=</span> <span class="bp">False</span>
3401+ <span class="c">#@+node:ekr.20120211121736.10836: *3* LogM.writeWaitingLog</span></div>
3402+<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>
3403+
3404+ <span class="n">trace</span> <span class="o">=</span> <span class="bp">False</span>
3405+ <span class="n">lm</span> <span class="o">=</span> <span class="bp">self</span>
3406+
3407+ <span class="k">if</span> <span class="n">trace</span><span class="p">:</span>
3408+ <span class="c"># Do not call g.es, g.es_print, g.pr or g.trace here!</span>
3409+ <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>
3410+ <span class="c"># print(&#39;writeWaitingLog&#39;,g.callers())</span>
3411+ <span class="c"># import sys ; print(&#39;writeWaitingLog: argv&#39;,sys.argv)</span>
3412+
3413+ <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>
3414+ <span class="k">return</span>
3415+
3416+ <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">unitTesting</span><span class="p">:</span>
3417+ <span class="n">lm</span><span class="o">.</span><span class="n">printWaiting</span> <span class="o">=</span> <span class="p">[]</span>
3418+ <span class="n">lm</span><span class="o">.</span><span class="n">logWaiting</span> <span class="o">=</span> <span class="p">[]</span>
3419+ <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>
3420+ <span class="k">return</span>
3421+
3422+ <span class="n">table</span> <span class="o">=</span> <span class="p">[</span>
3423+ <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>
3424+ <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>
3425+ <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>
3426+ <span class="p">]</span>
3427+ <span class="n">table</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
3428+
3429+ <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>
3430+ <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>
3431+
3432+ <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>
3433+ <span class="n">lm</span><span class="o">.</span><span class="n">signon_printed</span> <span class="o">=</span> <span class="bp">True</span>
3434+ <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>
3435+ <span class="k">print</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
3436+ <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>
3437+ <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>
3438+ <span class="k">print</span><span class="p">(</span><span class="s">&#39;** caching disabled&#39;</span><span class="p">)</span>
3439+ <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>
3440+ <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>
3441+ <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>
3442+ <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>
3443+ <span class="k">print</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
3444+ <span class="n">lm</span><span class="o">.</span><span class="n">printWaiting</span> <span class="o">=</span> <span class="p">[]</span>
3445+
3446+ <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>
3447+ <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>
3448+ <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>
3449+ <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>
3450+ <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>
3451+ <span class="c"># The caller must write the newlines.</span>
3452+ <span class="n">lm</span><span class="o">.</span><span class="n">logWaiting</span> <span class="o">=</span> <span class="p">[]</span>
3453+
3454+ <span class="c"># Essential when opening multiple files...</span>
3455+ <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>
3456+ <span class="c">#@-others</span>
3457+<span class="c">#@+node:ekr.20120223062418.10420: ** class PreviousSettings</span></div></div>
3458+<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>
3459+
3460+ <span class="sd">&#39;&#39;&#39;A class holding the settings and shortcuts dictionaries</span>
3461+<span class="sd"> that are computed in the first pass when loading local</span>
3462+<span class="sd"> files and passed to the second pass.&#39;&#39;&#39;</span>
3463+
3464+ <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>
3465+
3466+ <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>
3467+ <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>
3468+
3469+ <span class="bp">self</span><span class="o">.</span><span class="n">settingsDict</span> <span class="o">=</span> <span class="n">settingsDict</span>
3470+ <span class="bp">self</span><span class="o">.</span><span class="n">shortcutsDict</span> <span class="o">=</span> <span class="n">shortcutsDict</span>
3471+
3472+ <span class="k">def</span> <span class="nf">__repr__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3473+
3474+ <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>
3475+ <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>
3476+
3477+ <span class="n">__str__</span> <span class="o">=</span> <span class="n">__repr__</span>
3478+<span class="c">#@+node:ekr.20120225072226.10283: ** class RecentFilesManager</span></div>
3479+<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>
3480+
3481+ <span class="sd">&#39;&#39;&#39;A class to manipulate leoRecentFiles.txt.&#39;&#39;&#39;</span>
3482+
3483+ <span class="k">def</span> <span class="nf">__init__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
3484+
3485+ <span class="bp">self</span><span class="o">.</span><span class="n">groupedMenus</span> <span class="o">=</span> <span class="p">[]</span>
3486+ <span class="c"># Set in rf.createRecentFilesMenuItems.</span>
3487+ <span class="bp">self</span><span class="o">.</span><span class="n">recentFiles</span> <span class="o">=</span> <span class="p">[]</span>
3488+ <span class="c"># List of g.Bunches describing .leoRecentFiles.txt files.</span>
3489+ <span class="bp">self</span><span class="o">.</span><span class="n">recentFileMessageWritten</span> <span class="o">=</span> <span class="bp">False</span>
3490+ <span class="c"># To suppress all but the first message.</span>
3491+ <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>
3492+ <span class="c"># Will be set later.</span>
3493+
3494+ <span class="c">#@+others</span>
3495+ <span class="c">#@+node:ekr.20041201080436: *3* rf.appendToRecentFiles</span>
3496+<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>
3497+
3498+ <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3499+
3500+ <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>
3501+
3502+ <span class="k">def</span> <span class="nf">munge</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
3503+ <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>
3504+
3505+ <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span>
3506+ <span class="c"># Remove all variants of name.</span>
3507+ <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>
3508+ <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>
3509+ <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>
3510+
3511+ <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>
3512+ <span class="c">#@+node:ekr.20120225072226.10289: *3* rf.cleanRecentFiles</span></div>
3513+<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>
3514+
3515+ <span class="sd">&#39;&#39;&#39;Removed items from the recent files list that are no longer valid.&#39;&#39;&#39;</span>
3516+
3517+ <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3518+
3519+ <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>
3520+ <span class="k">if</span> <span class="ow">not</span> <span class="n">dat</span><span class="p">:</span>
3521+ <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>
3522+ <span class="k">return</span>
3523+
3524+ <span class="n">changes</span> <span class="o">=</span> <span class="p">[]</span>
3525+ <span class="n">replace</span> <span class="o">=</span> <span class="bp">None</span>
3526+ <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">dat</span><span class="p">:</span>
3527+ <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>
3528+ <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>
3529+ <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>
3530+ <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>
3531+ <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>
3532+ <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>
3533+ <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>
3534+
3535+ <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>
3536+
3537+ <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span> <span class="o">=</span> <span class="p">[]</span>
3538+
3539+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">orig</span><span class="p">:</span>
3540+ <span class="n">t</span> <span class="o">=</span> <span class="n">i</span>
3541+ <span class="k">for</span> <span class="n">change</span> <span class="ow">in</span> <span class="n">changes</span><span class="p">:</span>
3542+ <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>
3543+ <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>
3544+
3545+ <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>
3546+ <span class="c"># Force the write message.</span>
3547+ <span class="c">#@+node:ekr.20120225072226.10297: *3* rf.clearRecentFiles</span></div>
3548+<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>
3549+
3550+ <span class="sd">&quot;&quot;&quot;Clear the recent files list, then add the present file.&quot;&quot;&quot;</span>
3551+
3552+ <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>
3553+
3554+ <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>
3555+
3556+ <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>
3557+ <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>
3558+
3559+ <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>
3560+ <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>
3561+ <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>
3562+
3563+ <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>
3564+
3565+ <span class="c"># Write the file immediately.</span>
3566+ <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>
3567+ <span class="c"># Force the write message.</span>
3568+ <span class="c">#@+node:ekr.20120225072226.10301: *3* rf.createRecentFilesMenuItems</span></div>
3569+<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>
3570+
3571+ <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3572+ <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>
3573+
3574+ <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>
3575+
3576+ <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>
3577+ <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>
3578+ <span class="k">return</span>
3579+
3580+ <span class="c"># Delete all previous entries.</span>
3581+ <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>
3582+
3583+ <span class="c"># Create the permanent (static) menu entries.</span>
3584+ <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>
3585+ <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>
3586+
3587+ <span class="c"># Create all the other entries (a maximum of 36).</span>
3588+ <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>
3589+ <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
3590+ <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>
3591+
3592+ <span class="c"># see if we&#39;re grouping when files occur in more than one place</span>
3593+ <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>
3594+ <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>
3595+ <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>
3596+
3597+ <span class="k">if</span> <span class="n">groupedEntries</span><span class="p">:</span> <span class="c"># if so, make dict of groups</span>
3598+ <span class="n">dirCount</span> <span class="o">=</span> <span class="p">{}</span>
3599+ <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>
3600+ <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>
3601+ <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>
3602+ <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>
3603+ <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>
3604+
3605+ <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>
3606+ <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>
3607+ <span class="k">continue</span> <span class="c"># happens with empty list/new file</span>
3608+
3609+ <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>
3610+ <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>
3611+
3612+ <span class="k">if</span> <span class="n">groupedEntries</span><span class="p">:</span>
3613+ <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>
3614+
3615+ <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>
3616+
3617+ <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>
3618+ <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>
3619+ <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>
3620+ <span class="c"># acts as a flag for the need to create the menu</span>
3621+ <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>
3622+ <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>
3623+ <span class="k">else</span><span class="p">:</span> <span class="c"># single occurence, no submenu</span>
3624+ <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>
3625+ <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>
3626+
3627+ <span class="k">else</span><span class="p">:</span> <span class="c"># original behavior</span>
3628+ <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>
3629+ <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>
3630+ <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>
3631+ <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
3632+
3633+ <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>
3634+ <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>
3635+ <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>
3636+ <span class="c">#@+node:ekr.20120225072226.10286: *3* rf.getRecentFiles</span></div>
3637+<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>
3638+
3639+ <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">recentFiles</span>
3640+ <span class="c">#@+node:ekr.20120225072226.10304: *3* rf.getRecentFilesTable</span></div>
3641+<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>
3642+
3643+ <span class="k">return</span> <span class="p">(</span>
3644+ <span class="s">&quot;*clear-recent-files&quot;</span><span class="p">,</span>
3645+ <span class="s">&quot;*clean-recent-files&quot;</span><span class="p">,</span>
3646+ <span class="s">&quot;*sort-recent-files&quot;</span><span class="p">,</span>
3647+ <span class="c"># (&quot;-&quot;,None,None),</span>
3648+ <span class="p">)</span>
3649+ <span class="c">#@+node:ekr.20070224115832: *3* rf.readRecentFiles &amp; helpers</span></div>
3650+<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>
3651+
3652+ <span class="sd">&#39;&#39;&#39;Read all .leoRecentFiles.txt files.&#39;&#39;&#39;</span>
3653+
3654+ <span class="c"># The order of files in this list affects the order of the recent files list.</span>
3655+ <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3656+ <span class="n">seen</span> <span class="o">=</span> <span class="p">[]</span>
3657+ <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>
3658+
3659+ <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="p">(</span>
3660+ <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>
3661+ <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>
3662+ <span class="n">localConfigPath</span><span class="p">,</span>
3663+ <span class="p">):</span>
3664+ <span class="k">if</span> <span class="n">path</span><span class="p">:</span>
3665+ <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>
3666+ <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>
3667+ <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>
3668+ <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>
3669+
3670+ <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>
3671+ <span class="n">rf</span><span class="o">.</span><span class="n">createRecentFiles</span><span class="p">()</span>
3672+ <span class="c">#@+node:ekr.20061010121944: *4* rf.createRecentFiles</span></div>
3673+<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>
3674+
3675+ <span class="sd">&#39;&#39;&#39;Trye to reate .leoRecentFiles.txt in</span>
3676+<span class="sd"> - the users home directory first,</span>
3677+<span class="sd"> - Leo&#39;s config directory second.&#39;&#39;&#39;</span>
3678+
3679+ <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>
3680+ <span class="k">if</span> <span class="n">theDir</span><span class="p">:</span>
3681+ <span class="k">try</span><span class="p">:</span>
3682+ <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>
3683+ <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>
3684+ <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
3685+ <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>
3686+ <span class="k">return</span>
3687+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
3688+ <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>
3689+ <span class="n">g</span><span class="o">.</span><span class="n">es_exception</span><span class="p">()</span>
3690+ <span class="c">#@+node:ekr.20050424115658: *4* rf.readRecentFilesFile</span></div>
3691+<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>
3692+
3693+ <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>
3694+ <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3695+ <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>
3696+ <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>
3697+ <span class="k">if</span> <span class="n">ok</span><span class="p">:</span>
3698+ <span class="k">try</span><span class="p">:</span>
3699+ <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">:</span>
3700+ <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>
3701+ <span class="k">else</span><span class="p">:</span>
3702+ <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>
3703+ <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
3704+ <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>
3705+ <span class="k">return</span> <span class="bp">False</span>
3706+
3707+ <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>
3708+ <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>
3709+ <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>
3710+ <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>
3711+ <span class="k">if</span> <span class="n">lines</span><span class="p">:</span>
3712+ <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>
3713+ <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>
3714+
3715+ <span class="k">return</span> <span class="n">ok</span>
3716+ <span class="c">#@+node:ekr.20120225072226.10285: *3* rf.sanitize</span></div>
3717+<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>
3718+
3719+ <span class="sd">&#39;&#39;&#39;Return a sanitized file name.&#39;&#39;&#39;</span>
3720+
3721+ <span class="k">if</span> <span class="n">name</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
3722+ <span class="k">return</span> <span class="bp">None</span>
3723+
3724+ <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>
3725+ <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>
3726+ <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>
3727+
3728+ <span class="k">return</span> <span class="n">name</span> <span class="ow">or</span> <span class="bp">None</span>
3729+ <span class="c">#@+node:ekr.20120215072959.12478: *3* rf.setRecentFiles</span></div>
3730+<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>
3731+
3732+ <span class="sd">&#39;&#39;&#39;Update the recent files list.&#39;&#39;&#39;</span>
3733+
3734+ <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3735+ <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>
3736+ <span class="c">#@+node:ekr.20120225072226.10293: *3* rf.sortRecentFiles</span></div>
3737+<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>
3738+
3739+ <span class="sd">&#39;&#39;&#39;Sort the recent files list.&#39;&#39;&#39;</span>
3740+
3741+ <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3742+
3743+ <span class="n">aList</span> <span class="o">=</span> <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span>
3744+ <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>
3745+ <span class="n">aList</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
3746+
3747+ <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span> <span class="o">=</span> <span class="p">[]</span>
3748+ <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">aList</span><span class="p">:</span>
3749+ <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>
3750+
3751+ <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>
3752+ <span class="c"># Force the write message.</span>
3753+ <span class="c">#@+node:ekr.20031218072017.2083: *3* rf.updateRecentFiles</span></div>
3754+<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>
3755+
3756+ <span class="sd">&quot;&quot;&quot;Create the RecentFiles menu. May be called with Null fileName.&quot;&quot;&quot;</span>
3757+
3758+ <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3759+
3760+ <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>
3761+
3762+ <span class="k">def</span> <span class="nf">munge</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
3763+ <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>
3764+ <span class="k">def</span> <span class="nf">munge2</span><span class="p">(</span><span class="n">name</span><span class="p">):</span>
3765+ <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>
3766+
3767+ <span class="c"># Update the recent files list in all windows.</span>
3768+ <span class="k">if</span> <span class="n">fileName</span><span class="p">:</span>
3769+ <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>
3770+ <span class="c"># Remove all versions of the file name.</span>
3771+ <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>
3772+ <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>
3773+ <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>
3774+ <span class="p">):</span>
3775+ <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>
3776+ <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>
3777+ <span class="c"># Recreate the Recent Files menu.</span>
3778+ <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>
3779+ <span class="k">else</span><span class="p">:</span>
3780+ <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>
3781+ <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>
3782+ <span class="c">#@+node:ekr.20050424114937.2: *3* rf.writeRecentFilesFile &amp; helper</span></div>
3783+<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>
3784+
3785+ <span class="sd">&#39;&#39;&#39;Write the appropriate .leoRecentFiles.txt file.</span>
3786+
3787+<span class="sd"> Write a message if force is True, or if it hasn&#39;t been written yet.&#39;&#39;&#39;</span>
3788+
3789+ <span class="n">tag</span> <span class="o">=</span> <span class="s">&#39;.leoRecentFiles.txt&#39;</span>
3790+ <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3791+ <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>
3792+ <span class="k">return</span>
3793+
3794+ <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>
3795+ <span class="k">if</span> <span class="n">localFileName</span><span class="p">:</span>
3796+ <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>
3797+ <span class="k">else</span><span class="p">:</span>
3798+ <span class="n">localPath</span> <span class="o">=</span> <span class="bp">None</span>
3799+
3800+ <span class="n">written</span> <span class="o">=</span> <span class="bp">False</span>
3801+ <span class="n">seen</span> <span class="o">=</span> <span class="p">[]</span>
3802+ <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>
3803+ <span class="k">if</span> <span class="n">path</span><span class="p">:</span>
3804+ <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>
3805+ <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>
3806+ <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>
3807+ <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>
3808+ <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>
3809+ <span class="k">if</span> <span class="n">ok</span><span class="p">:</span>
3810+ <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>
3811+ <span class="n">written</span> <span class="o">=</span> <span class="bp">True</span>
3812+ <span class="k">else</span><span class="p">:</span>
3813+ <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>
3814+ <span class="c"># Bug fix: Leo 4.4.6: write *all* recent files.</span>
3815+
3816+ <span class="k">if</span> <span class="n">written</span><span class="p">:</span>
3817+ <span class="n">rf</span><span class="o">.</span><span class="n">recentFileMessageWritten</span> <span class="o">=</span> <span class="bp">True</span>
3818+ <span class="k">else</span><span class="p">:</span>
3819+ <span class="c"># Attempt to create .leoRecentFiles.txt in the user&#39;s home directory.</span>
3820+ <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>
3821+ <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>
3822+ <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>
3823+ <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>
3824+ <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>
3825+
3826+
3827+ <span class="c">#@+node:ekr.20050424131051: *4* rf.writeRecentFilesFileHelper</span></div>
3828+<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>
3829+
3830+ <span class="c"># g.trace(g.toUnicode(fileName))</span>
3831+
3832+ <span class="c"># Don&#39;t update the file if it begins with read-only.</span>
3833+ <span class="n">rf</span> <span class="o">=</span> <span class="bp">self</span>
3834+ <span class="n">theFile</span> <span class="o">=</span> <span class="bp">None</span>
3835+ <span class="k">try</span><span class="p">:</span>
3836+ <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>
3837+ <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>
3838+ <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>
3839+ <span class="c"># g.trace(&#39;read-only: %s&#39; %fileName)</span>
3840+ <span class="k">return</span> <span class="bp">False</span>
3841+ <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
3842+ <span class="c"># The user may have erased a file. Not an error.</span>
3843+ <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>
3844+
3845+ <span class="n">theFile</span> <span class="o">=</span> <span class="bp">None</span>
3846+ <span class="k">try</span><span class="p">:</span>
3847+ <span class="k">if</span> <span class="n">g</span><span class="o">.</span><span class="n">isPython3</span><span class="p">:</span>
3848+ <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>
3849+ <span class="k">else</span><span class="p">:</span>
3850+ <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>
3851+ <span class="k">if</span> <span class="n">rf</span><span class="o">.</span><span class="n">recentFiles</span><span class="p">:</span>
3852+ <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>
3853+ <span class="k">else</span><span class="p">:</span>
3854+ <span class="n">s</span> <span class="o">=</span> <span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span>
3855+ <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>
3856+ <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>
3857+ <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>
3858+
3859+ <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span>
3860+ <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>
3861+ <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>
3862+ <span class="n">g</span><span class="o">.</span><span class="n">es_exception</span><span class="p">()</span>
3863+ <span class="k">return</span> <span class="bp">False</span>
3864+
3865+ <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
3866+ <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>
3867+ <span class="n">g</span><span class="o">.</span><span class="n">es_exception</span><span class="p">()</span>
3868+ <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>
3869+ <span class="k">return</span> <span class="bp">False</span>
3870+
3871+ <span class="k">if</span> <span class="n">theFile</span><span class="p">:</span>
3872+ <span class="n">theFile</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
3873+ <span class="k">return</span> <span class="bp">True</span>
3874+ <span class="k">else</span><span class="p">:</span>
3875+ <span class="k">return</span> <span class="bp">False</span>
3876+ <span class="c">#@-others</span>
3877+<span class="c">#@-others</span>
3878+<span class="c">#@-leo</span></div></div>
3879+</pre></div>
3880+
3881+ </div>
3882+ </div>
3883+ </div>
3884+ <div class="sphinxsidebar">
3885+ <div class="sphinxsidebarwrapper">
3886+<div id="searchbox" style="display: none">
3887+ <h3>Quick search</h3>
3888+ <form class="search" action="../../../search.html" method="get">
3889+ <input type="text" name="q" />
3890+ <input type="submit" value="Go" />
3891+ <input type="hidden" name="check_keywords" value="yes" />
3892+ <input type="hidden" name="area" value="default" />
3893+ </form>
3894+ <p class="searchtip" style="font-size: 90%">
3895+ Enter search terms or a module, class or function name.
3896+ </p>
3897+</div>
3898+<script type="text/javascript">$('#searchbox').show(0);</script>
3899+ </div>
3900+ </div>
3901+ <div class="clearer"></div>
3902+ </div>
3903+ <div class="related">
3904+ <h3>Navigation</h3>
3905+ <ul>
3906+ <li class="right" style="margin-right: 10px">
3907+ <a href="../../../genindex.html" title="General Index"
3908+ >index</a></li>
3909+ <li class="right" >
3910+ <a href="../../../py-modindex.html" title="Python Module Index"
3911+ >modules</a> |</li>
3912+ <li><a href="../../../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
3913+ <li><a href="../../index.html" >Module code</a> &raquo;</li>
3914+ </ul>
3915+ </div>
3916+ <div class="footer">
3917+ &copy; Copyright 2013, Ed K. Ream.
3918+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
3919+ </div>
3920+ </body>
3921+</html>
3922\ No newline at end of file
3923
3924=== added file 'sphinx-docs/_build/html/_modules/leo/core/leoAtFile.html'
3925--- sphinx-docs/_build/html/_modules/leo/core/leoAtFile.html 1970-01-01 00:00:00 +0000
3926+++ sphinx-docs/_build/html/_modules/leo/core/leoAtFile.html 2013-05-03 14:47:26 +0000
3927@@ -0,0 +1,5787 @@
3928+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3929+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3930+
3931+
3932+<html xmlns="http://www.w3.org/1999/xhtml">
3933+ <head>
3934+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
3935+
3936+ <title>leo.core.leoAtFile &mdash; Leo API 4.11dev documentation</title>
3937+
3938+ <link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
3939+ <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
3940+
3941+ <script type="text/javascript">
3942+ var DOCUMENTATION_OPTIONS = {
3943+ URL_ROOT: '../../../',
3944+ VERSION: '4.11dev',
3945+ COLLAPSE_INDEX: false,
3946+ FILE_SUFFIX: '.html',
3947+ HAS_SOURCE: true
3948+ };
3949+ </script>
3950+ <script type="text/javascript" src="../../../_static/jquery.js"></script>
3951+ <script type="text/javascript" src="../../../_static/underscore.js"></script>
3952+ <script type="text/javascript" src="../../../_static/doctools.js"></script>
3953+ <link rel="top" title="Leo API 4.11dev documentation" href="../../../index.html" />
3954+ <link rel="up" title="Module code" href="../../index.html" />
3955+ </head>
3956+ <body>
3957+ <div class="related">
3958+ <h3>Navigation</h3>
3959+ <ul>
3960+ <li class="right" style="margin-right: 10px">
3961+ <a href="../../../genindex.html" title="General Index"
3962+ accesskey="I">index</a></li>
3963+ <li class="right" >
3964+ <a href="../../../py-modindex.html" title="Python Module Index"
3965+ >modules</a> |</li>
3966+ <li><a href="../../../index.html">Leo API 4.11dev documentation</a> &raquo;</li>
3967+ <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li>
3968+ </ul>
3969+ </div>
3970+
3971+ <div class="document">
3972+ <div class="documentwrapper">
3973+ <div class="bodywrapper">
3974+ <div class="body">
3975+
3976+ <h1>Source code for leo.core.leoAtFile</h1><div class="highlight"><pre>
3977+<span class="c">#@+leo-ver=5-thin</span>
3978+<span class="c">#@+node:ekr.20041005105605.1: * @file leoAtFile.py</span>
3979+<span class="c">#@@first</span>
3980+ <span class="c"># Needed because of unicode characters in tests.</span>
3981+
3982+<span class="sd">&quot;&quot;&quot;Classes to read and write @file nodes.&quot;&quot;&quot;</span>
3983+
3984+<span class="c">#@@language python</span>
3985+<span class="c">#@@tabwidth -4</span>
3986+<span class="c">#@@pagewidth 60</span>
3987+
3988+<span class="c">#@+&lt;&lt; imports &gt;&gt;</span>
3989+<span class="c">#@+node:ekr.20041005105605.2: ** &lt;&lt; imports &gt;&gt; (leoAtFile)</span>
3990+<span class="kn">import</span> <span class="nn">leo.core.leoGlobals</span> <span class="kn">as</span> <span class="nn">g</span>
3991+
3992+<span class="c"># if g.app and g.app.use_psyco:</span>
3993+ <span class="c"># # print(&quot;enabled psyco classes&quot;,__file__)</span>
3994+ <span class="c"># try: from psyco.classes import *</span>
3995+ <span class="c"># except ImportError: pass</span>
3996+
3997+<span class="kn">import</span> <span class="nn">leo.core.leoNodes</span> <span class="kn">as</span> <span class="nn">leoNodes</span>
3998+
3999+<span class="kn">import</span> <span class="nn">os</span>
4000+<span class="kn">import</span> <span class="nn">sys</span>
4001+<span class="kn">import</span> <span class="nn">time</span>
4002+
4003+<span class="c">#@-&lt;&lt; imports &gt;&gt;</span>
4004+
4005+<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>
4006+
4007+<span class="c"># if allow_cloned_sibs:</span>
4008+ <span class="c"># print(&#39;** allow_cloned_sibs: True&#39;)</span>
4009+
4010+<span class="k">class</span> <span class="nc">atFile</span><span class="p">:</span>
4011+<div class="viewcode-block" id="atFile"><a class="viewcode-back" href="../../../leo.core.html#leo.core.leoAtFile.atFile">[docs]</a>
4012+ <span class="sd">&quot;&quot;&quot;The class implementing the atFile subcommander.&quot;&quot;&quot;</span>
4013+
4014+ <span class="c">#@+&lt;&lt; define class constants &gt;&gt;</span>
4015+ <span class="c">#@+node:ekr.20041005105605.5: ** &lt;&lt; define class constants &gt;&gt;</span>
4016+ <span class="c"># These constants must be global to this module</span>
4017+ <span class="c"># because they are shared by several classes.</span>
4018+
4019+ <span class="c"># The kind of at_directives.</span>
4020+ <span class="n">noDirective</span> <span class="o">=</span> <span class="mi">1</span> <span class="c"># not an at-directive.</span>
4021+ <span class="n">allDirective</span> <span class="o">=</span> <span class="mi">2</span> <span class="c"># at-all (4.2)</span>
4022+ <span class="n">docDirective</span> <span class="o">=</span> <span class="mi">3</span> <span class="c"># @doc.</span>
4023+ <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>
4024+ <span class="n">codeDirective</span> <span class="o">=</span> <span class="mi">5</span> <span class="c"># @code</span>
4025+ <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>
4026+ <span class="n">othersDirective</span> <span class="o">=</span> <span class="mi">7</span> <span class="c"># at-others</span>
4027+ <span class="n">miscDirective</span> <span class="o">=</span> <span class="mi">8</span> <span class="c"># All other directives</span>
4028+ <span class="n">rawDirective</span> <span class="o">=</span> <span class="mi">9</span> <span class="c"># @raw</span>
4029+ <span class="n">endRawDirective</span> <span class="o">=</span> <span class="mi">10</span> <span class="c"># @end_raw</span>
4030+
4031+ <span class="c"># The kind of sentinel line.</span>
4032+ <span class="n">noSentinel</span> <span class="o">=</span> <span class="mi">20</span> <span class="c"># Not a sentinel</span>
4033+ <span class="n">endAt</span> <span class="o">=</span> <span class="mi">21</span> <span class="c"># @-at</span>
4034+ <span class="n">endBody</span> <span class="o">=</span> <span class="mi">22</span> <span class="c"># @-body</span>
4035+ <span class="c"># not used = 23</span>
4036+ <span class="n">endDoc</span> <span class="o">=</span> <span class="mi">24</span> <span class="c"># @-doc</span>
4037+ <span class="n">endLeo</span> <span class="o">=</span> <span class="mi">25</span> <span class="c"># @-leo</span>
4038+ <span class="n">endNode</span> <span class="o">=</span> <span class="mi">26</span> <span class="c"># @-node</span>
4039+ <span class="n">endOthers</span> <span class="o">=</span> <span class="mi">27</span> <span class="c"># @-others</span>
4040+
4041+ <span class="c"># not used = 40</span>
4042+ <span class="n">startAt</span> <span class="o">=</span> <span class="mi">41</span> <span class="c"># @+at</span>
4043+ <span class="n">startBody</span> <span class="o">=</span> <span class="mi">42</span> <span class="c"># @+body</span>
4044+ <span class="n">startDoc</span> <span class="o">=</span> <span class="mi">43</span> <span class="c"># @+doc</span>
4045+ <span class="n">startLeo</span> <span class="o">=</span> <span class="mi">44</span> <span class="c"># @+leo</span>
4046+ <span class="n">startNode</span> <span class="o">=</span> <span class="mi">45</span> <span class="c"># @+node</span>
4047+ <span class="n">startOthers</span> <span class="o">=</span> <span class="mi">46</span> <span class="c"># @+others</span>
4048+
4049+ <span class="n">startComment</span> <span class="o">=</span> <span class="mi">60</span> <span class="c"># @comment</span>
4050+ <span class="n">startDelims</span> <span class="o">=</span> <span class="mi">61</span> <span class="c"># @delims</span>
4051+ <span class="n">startDirective</span> <span class="o">=</span> <span class="mi">62</span> <span class="c"># @@</span>
4052+ <span class="n">startRef</span> <span class="o">=</span> <span class="mi">63</span> <span class="c"># @&lt; &lt; ... &gt; &gt;</span>
4053+ <span class="n">startVerbatim</span> <span class="o">=</span> <span class="mi">64</span> <span class="c"># @verbatim</span>
4054+ <span class="n">startVerbatimAfterRef</span> <span class="o">=</span> <span class="mi">65</span> <span class="c"># @verbatimAfterRef (3.0 only)</span>
4055+
4056+ <span class="c"># New in 4.x. Paired</span>
4057+ <span class="n">endAll</span> <span class="o">=</span> <span class="mi">70</span> <span class="c"># at-all (4.2)</span>
4058+ <span class="n">endMiddle</span> <span class="o">=</span> <span class="mi">71</span> <span class="c"># at-middle (4.2)</span>
4059+ <span class="n">startAll</span> <span class="o">=</span> <span class="mi">72</span> <span class="c"># at+all (4.2)</span>
4060+ <span class="n">startMiddle</span> <span class="o">=</span> <span class="mi">73</span> <span class="c"># at+middle (4.2)</span>
4061+
4062+ <span class="c"># New in 4.x. Unpaired.</span>
4063+ <span class="n">startAfterRef</span> <span class="o">=</span> <span class="mi">80</span> <span class="c"># @afterref (4.0)</span>
4064+ <span class="n">startClone</span> <span class="o">=</span> <span class="mi">81</span> <span class="c"># @clone (4.2)</span>
4065+ <span class="n">startNl</span> <span class="o">=</span> <span class="mi">82</span> <span class="c"># @nl (4.0)</span>
4066+ <span class="n">startNonl</span> <span class="o">=</span> <span class="mi">83</span> <span class="c"># @nonl (4.0)</span>
4067+
4068+ <span class="c"># New in 4.8.</span>
4069+ <span class="n">endRef</span> <span class="o">=</span> <span class="mi">84</span> <span class="c"># @-&lt;&lt;</span>
4070+ <span class="c">#@-&lt;&lt; define class constants &gt;&gt;</span>
4071+ <span class="c">#@+&lt;&lt; define sentinelDict &gt;&gt;</span>
4072+ <span class="c">#@+node:ekr.20041005105605.6: ** &lt;&lt; define sentinelDict &gt;&gt;</span>
4073+ <span class="n">sentinelDict</span> <span class="o">=</span> <span class="p">{</span>
4074+
4075+ <span class="c"># Unpaired sentinels: 3.x and 4.x.</span>
4076+ <span class="s">&quot;@comment&quot;</span> <span class="p">:</span> <span class="n">startComment</span><span class="p">,</span>
4077+ <span class="s">&quot;@delims&quot;</span> <span class="p">:</span> <span class="n">startDelims</span><span class="p">,</span>
4078+ <span class="s">&quot;@verbatim&quot;</span><span class="p">:</span> <span class="n">startVerbatim</span><span class="p">,</span>
4079+
4080+ <span class="c"># Unpaired sentinels: 3.x only.</span>
4081+ <span class="s">&quot;@verbatimAfterRef&quot;</span><span class="p">:</span> <span class="n">startVerbatimAfterRef</span><span class="p">,</span>
4082+
4083+ <span class="c"># Unpaired sentinels: 4.x only.</span>
4084+ <span class="s">&quot;@afterref&quot;</span> <span class="p">:</span> <span class="n">startAfterRef</span><span class="p">,</span>
4085+ <span class="s">&quot;@clone&quot;</span> <span class="p">:</span> <span class="n">startClone</span><span class="p">,</span>
4086+ <span class="s">&quot;@nl&quot;</span> <span class="p">:</span> <span class="n">startNl</span><span class="p">,</span>
4087+ <span class="s">&quot;@nonl&quot;</span> <span class="p">:</span> <span class="n">startNonl</span><span class="p">,</span>
4088+
4089+ <span class="c"># Paired sentinels: 3.x only.</span>
4090+ <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>
4091+
4092+ <span class="c"># Paired sentinels: 3.x and 4.x.</span>
4093+ <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>
4094+ <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>
4095+ <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>
4096+ <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>
4097+ <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>
4098+ <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>
4099+ <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>
4100+ <span class="p">}</span>
4101+ <span class="c">#@-&lt;&lt; define sentinelDict &gt;&gt;</span>
4102+
4103+ <span class="c">#@+others</span>
4104+ <span class="c">#@+node:ekr.20041005105605.7: ** at.Birth &amp; init</span>
4105+ <span class="c">#@+node:ekr.20041005105605.8: *3* atFile.ctor</span>
4106+ <span class="c"># Note: g.getScript also call the at.__init__ and at.finishCreate().</span>
4107+
4108+ <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>
4109+
4110+ <span class="c"># **Warning**: all these ivars must **also** be inited in initCommonIvars.</span>
4111+ <span class="bp">self</span><span class="o">.</span><span class="n">c</span> <span class="o">=</span> <span class="n">c</span>
4112+ <span class="bp">self</span><span class="o">.</span><span class="n">debug</span> <span class="o">=</span> <span class="bp">False</span>
4113+ <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>
4114+ <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>
4115+
4116+ <span class="c"># User options.</span>
4117+ <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>
4118+ <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>
4119+ <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>
4120+ <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: