Coverage for C:\leo.repo\leo-editor\leo\commands\commanderHelpCommands.py: 24%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

243 statements  

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 

182 

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