Coverage for C:\Repos\leo-editor\leo\commands\commanderHelpCommands.py: 24%
243 statements
« prev ^ index » next coverage.py v6.4, created at 2022-05-24 10:21 -0500
« prev ^ index » next coverage.py v6.4, created at 2022-05-24 10:21 -0500
1# -*- coding: utf-8 -*-
2#@+leo-ver=5-thin
3#@+node:ekr.20171124073126.1: * @file ../commands/commanderHelpCommands.py
4#@@first
5"""Help commands that used to be defined in leoCommands.py"""
6import os
7import sys
8import time
9from leo.core import leoGlobals as g
10#@+others
11#@+node:ekr.20031218072017.2939: ** c_help.about (version number & date)
12@g.commander_command('about-leo')
13def about(self, event=None):
14 """Bring up an About Leo Dialog."""
15 c = self
16 import datetime
17 # Don't use triple-quoted strings or continued strings here.
18 # Doing so would add unwanted leading tabs.
19 version = g.app.signon + '\n\n'
20 theCopyright = (
21 "Copyright 1999-%s by Edward K. Ream\n" +
22 "All Rights Reserved\n" +
23 "Leo is distributed under the MIT License") % datetime.date.today().year
24 url = "http://leoeditor.com/"
25 email = "edreamleo@gmail.com"
26 g.app.gui.runAboutLeoDialog(c, version, theCopyright, url, email)
27#@+node:vitalije.20170713174950.1: ** c_help.editOneSetting
28@g.commander_command('edit-setting')
29def editOneSetting(self, event=None):
30 """Opens correct dialog for selected setting type"""
31 c, p = self, self.c.p
32 func = None
33 if p.h.startswith('@font'):
34 func = c.commandsDict.get('show-fonts')
35 elif p.h.startswith('@color '):
36 func = c.commandsDict.get('show-color-wheel')
37 elif p.h.startswith(('@shortcuts', '@button', '@command')):
38 c.editShortcut()
39 return
40 else:
41 g.es('not in a setting node')
42 return
43 if func:
44 event = g.app.gui.create_key_event(c)
45 func(event)
46#@+node:vitalije.20170708172746.1: ** c_help.editShortcut
47@g.commander_command('edit-shortcut')
48def editShortcut(self, event=None):
49 k = self.k
50 if k.isEditShortcutSensible():
51 self.k.setState('input-shortcut', 'input-shortcut')
52 g.es('Press desired key combination')
53 else:
54 g.es('No possible shortcut in selected body line/headline')
55 g.es('Select @button, @command, @shortcuts or @mode node and run it again.')
56#@+node:ekr.20171124093409.1: ** c_help.Open Leo files
57#@+node:ekr.20031218072017.2940: *3* c_help.leoDocumentation
58@g.commander_command('open-leo-docs-leo')
59@g.commander_command('leo-docs-leo')
60def leoDocumentation(self, event=None):
61 """Open LeoDocs.leo in a new Leo window."""
62 c = self
63 name = "LeoDocs.leo"
64 fileName = g.os_path_finalize_join(g.app.loadDir, "..", "doc", name)
65 # Bug fix: 2012/04/09: only call g.openWithFileName if the file exists.
66 if g.os_path_exists(fileName):
67 c2 = g.openWithFileName(fileName, old_c=c)
68 if c2:
69 return
70 g.es("not found:", name)
71#@+node:ekr.20090628075121.5994: *3* c_help.leoQuickStart
72@g.commander_command('open-quickstart-leo')
73@g.commander_command('leo-quickstart-leo')
74def leoQuickStart(self, event=None):
75 """Open quickstart.leo in a new Leo window."""
76 c = self
77 name = "quickstart.leo"
78 fileName = g.os_path_finalize_join(g.app.loadDir, "..", "doc", name)
79 # Bug fix: 2012/04/09: only call g.openWithFileName if the file exists.
80 if g.os_path_exists(fileName):
81 c2 = g.openWithFileName(fileName, old_c=c)
82 if c2:
83 return
84 g.es("not found:", name)
85#@+node:ekr.20131028155339.17096: *3* c_help.openCheatSheet
86@g.commander_command('open-cheat-sheet-leo')
87@g.commander_command('leo-cheat-sheet')
88@g.commander_command('cheat-sheet')
89def openCheatSheet(self, event=None):
90 """Open leo/doc/cheatSheet.leo"""
91 c = self
92 fn = g.os_path_finalize_join(g.app.loadDir, '..', 'doc', 'CheatSheet.leo')
93 if not g.os_path_exists(fn):
94 g.es(f"file not found: {fn}")
95 return
96 c2 = g.openWithFileName(fn, old_c=c)
97 p = g.findNodeAnywhere(c2, "Leo's cheat sheet")
98 if p:
99 c2.selectPosition(p)
100 p.expand()
101 c2.redraw()
102#@+node:lkj.20190714022527.1: *3* c_help.openDesktopIntegration
103@g.commander_command('open-desktop-integration-leo')
104@g.commander_command('desktop-integration-leo')
105def openDesktopIntegration(self, event=None):
106 """Open Desktop-integration.leo."""
107 c = self
108 fileName = g.os_path_finalize_join(
109 g.app.loadDir, '..', 'scripts', 'desktop-integration.leo')
110 # only call g.openWithFileName if the file exists.
111 if g.os_path_exists(fileName):
112 c2 = g.openWithFileName(fileName, old_c=c)
113 if c2:
114 return
115 g.es('not found:', fileName)
116#@+node:ekr.20161025090405.1: *3* c_help.openLeoDist
117@g.commander_command('open-leo-dist-leo')
118@g.commander_command('leo-dist-leo')
119def openLeoDist(self, event=None):
120 """Open leoDist.leo in a new Leo window."""
121 c = self
122 name = "leoDist.leo"
123 fileName = g.os_path_finalize_join(g.app.loadDir, "..", "dist", name)
124 if g.os_path_exists(fileName):
125 c2 = g.openWithFileName(fileName, old_c=c)
126 if c2:
127 return
128 g.es("not found:", name)
129#@+node:ekr.20151225193723.1: *3* c_help.openLeoPy
130@g.commander_command('open-leo-py-leo')
131@g.commander_command('leo-py-leo')
132def openLeoPy(self, event=None):
133 """Open leoPy.leo or LeoPyRef.leo in a new Leo window."""
134 c = self
135 names = ('leoPy.leo', 'LeoPyRef.leo',) # Used in error message.
136 for name in names:
137 fileName = g.os_path_finalize_join(g.app.loadDir, "..", "core", name)
138 # Only call g.openWithFileName if the file exists.
139 if g.os_path_exists(fileName):
140 c2 = g.openWithFileName(fileName, old_c=c)
141 if c2:
142 return
143 g.es('not found:', ', '.join(names))
144#@+node:ekr.20201013105418.1: *3* c_help.openLeoPyRef
145@g.commander_command('open-leo-py-ref-leo')
146@g.commander_command('leo-py-ref-leo')
147def openLeoPyRef(self, event=None):
148 """Open leoPyRef.leo in a new Leo window."""
149 c = self
150 path = g.os_path_finalize_join(g.app.loadDir, "..", "core", "LeoPyRef.leo")
151 # Only call g.openWithFileName if the file exists.
152 if g.os_path_exists(path):
153 c2 = g.openWithFileName(path, old_c=c)
154 if c2:
155 return
156 g.es('LeoPyRef.leo not found')
157#@+node:ekr.20061018094539: *3* c_help.openLeoScripts
158@g.commander_command('open-scripts-leo')
159@g.commander_command('leo-scripts-leo')
160def openLeoScripts(self, event=None):
161 """Open scripts.leo."""
162 c = self
163 fileName = g.os_path_finalize_join(g.app.loadDir, '..', 'scripts', 'scripts.leo')
164 # Bug fix: 2012/04/09: only call g.openWithFileName if the file exists.
165 if g.os_path_exists(fileName):
166 c2 = g.openWithFileName(fileName, old_c=c)
167 if c2:
168 return
169 g.es('not found:', fileName)
170#@+node:ekr.20031218072017.2943: *3* c_help.openLeoSettings & openMyLeoSettings & helper
171@g.commander_command('open-leo-settings')
172@g.commander_command('open-leo-settings-leo') # #1343.
173@g.commander_command('leo-settings')
174def openLeoSettings(self, event=None):
175 """Open leoSettings.leo in a new Leo window."""
176 c, lm = self, g.app.loadManager
177 path = lm.computeLeoSettingsPath()
178 if path:
179 return g.openWithFileName(path, old_c=c)
180 g.es('not found: leoSettings.leo')
181 return None
183@g.commander_command('open-my-leo-settings')
184@g.commander_command('open-my-leo-settings-leo') # #1343.
185@g.commander_command('my-leo-settings')
186def openMyLeoSettings(self, event=None):
187 """Open myLeoSettings.leo in a new Leo window."""
188 c, lm = self, g.app.loadManager
189 path = lm.computeMyLeoSettingsPath()
190 if path:
191 return g.openWithFileName(path, old_c=c)
192 g.es('not found: myLeoSettings.leo')
193 return createMyLeoSettings(c)
194#@+node:ekr.20141119161908.2: *4* function: c_help.createMyLeoSettings
195def createMyLeoSettings(c):
196 """createMyLeoSettings - Return true if myLeoSettings.leo created ok
197 """
198 name = "myLeoSettings.leo"
199 homeLeoDir = g.app.homeLeoDir
200 loadDir = g.app.loadDir
201 configDir = g.app.globalConfigDir
202 # check it doesn't already exist
203 for path in homeLeoDir, loadDir, configDir:
204 fileName = g.os_path_join(path, name)
205 if g.os_path_exists(fileName):
206 return None
207 ok = g.app.gui.runAskYesNoDialog(c,
208 title='Create myLeoSettings.leo?',
209 message=f"Create myLeoSettings.leo in {homeLeoDir}?",
210 )
211 if ok == 'no':
212 return None
213 # get '@enabled-plugins' from g.app.globalConfigDir
214 fileName = g.os_path_join(configDir, "leoSettings.leo")
215 leosettings = g.openWithFileName(fileName, old_c=c)
216 enabledplugins = g.findNodeAnywhere(leosettings, '@enabled-plugins')
217 if not enabledplugins:
218 return None
219 enabledplugins = enabledplugins.b
220 leosettings.close()
221 # now create "~/.leo/myLeoSettings.leo"
222 fileName = g.os_path_join(homeLeoDir, name)
223 c2 = g.openWithFileName(fileName, old_c=c)
224 # add content to outline
225 nd = c2.rootPosition()
226 nd.h = "Settings README"
227 nd.b = (
228 "myLeoSettings.leo personal settings file created {time}\n\n"
229 "Only nodes that are descendants of the @settings node are read.\n\n"
230 "Only settings you need to modify should be in this file, do\n"
231 "not copy large parts of leoSettings.py here.\n\n"
232 "For more information see http://leoeditor.com/customizing.html"
233 "".format(time=time.asctime())
234 )
235 nd = nd.insertAfter()
236 nd.h = '@settings'
237 nd = nd.insertAsNthChild(0)
238 nd.h = '@enabled-plugins'
239 nd.b = enabledplugins
240 nd = nd.insertAfter()
241 nd.h = '@keys'
242 nd = nd.insertAsNthChild(0)
243 nd.h = '@shortcuts'
244 nd.b = (
245 "# You can define keyboard shortcuts here of the form:\n"
246 "#\n"
247 "# some-command Shift-F5\n"
248 )
249 c2.redraw()
250 return c2
251#@+node:ekr.20171124093507.1: ** c_help.Open Leo web pages
252#@+node:ekr.20031218072017.2941: *3* c_help.leoHome
253@g.commander_command('open-online-home')
254def leoHome(self, event=None):
255 """Open Leo's Home page in a web browser."""
256 import webbrowser
257 url = "http://leoeditor.com/"
258 try:
259 webbrowser.open_new(url)
260 except Exception:
261 g.es("not found:", url)
262#@+node:ekr.20131213072223.19441: *3* c_help.openLeoTOC
263@g.commander_command('open-online-toc')
264def openLeoTOC(self, event=None):
265 """Open Leo's tutorials page in a web browser."""
266 import webbrowser
267 url = "http://leoeditor.com/leo_toc.html"
268 try:
269 webbrowser.open_new(url)
270 except Exception:
271 g.es("not found:", url)
272#@+node:ekr.20131213072223.19435: *3* c_help.openLeoTutorials
273@g.commander_command('open-online-tutorials')
274def openLeoTutorials(self, event=None):
275 """Open Leo's tutorials page in a web browser."""
276 import webbrowser
277 url = "http://leoeditor.com/tutorial.html"
278 try:
279 webbrowser.open_new(url)
280 except Exception:
281 g.es("not found:", url)
282#@+node:ekr.20060613082924: *3* c_help.openLeoUsersGuide
283@g.commander_command('open-users-guide')
284def openLeoUsersGuide(self, event=None):
285 """Open Leo's users guide in a web browser."""
286 import webbrowser
287 url = "http://leoeditor.com/usersguide.html"
288 try:
289 webbrowser.open_new(url)
290 except Exception:
291 g.es("not found:", url)
292#@+node:ekr.20131213072223.19437: *3* c_help.openLeoVideos
293@g.commander_command('open-online-videos')
294def openLeoVideos(self, event=None):
295 """Open Leo's videos page in a web browser."""
296 import webbrowser
297 url = "http://leoeditor.com/screencasts.html"
298 try:
299 webbrowser.open_new(url)
300 except Exception:
301 g.es("not found:", url)
302#@+node:ekr.20031218072017.2932: ** c_help.openPythonWindow
303@g.commander_command('open-python-window')
304def openPythonWindow(self, event=None):
305 """Open Python's Idle debugger in a separate process."""
306 m = g.import_module('idlelib')
307 if not m:
308 g.trace('can not open idlelib')
309 return
310 idle_path = os.path.dirname(m.__file__)
311 idle = g.os_path_join(idle_path, 'idle.py')
312 args = [sys.executable, idle]
313 if 1: # Use present environment.
314 os.spawnv(os.P_NOWAIT, sys.executable, args)
315 else: # Use a pristine environment.
316 os.spawnve(os.P_NOWAIT, sys.executable, args, os.environ)
317#@+node:ekr.20131213072223.19532: ** c_help.selectAtSettingsNode
318@g.commander_command('open-local-settings')
319def selectAtSettingsNode(self, event=None):
320 """Select the @settings node, if there is one."""
321 c = self
322 p = c.config.settingsRoot()
323 if p:
324 c.selectPosition(p)
325 c.redraw()
326 else:
327 g.es('no local @settings tree.')
328#@-others
329#@-leo