g.manual.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #!/usr/bin/env python
  2. ############################################################################
  3. #
  4. # MODULE: g.manual
  5. # AUTHOR(S): Markus Neteler
  6. # Converted to Python by Glynn Clements
  7. # PURPOSE: Display the HTML/MAN pages
  8. # COPYRIGHT: (C) 2003,2008 by the GRASS Development Team
  9. #
  10. # This program is free software under the GNU General Public
  11. # License (>=v2). Read the file COPYING that comes with GRASS
  12. # for details.
  13. #
  14. #############################################################################
  15. #%Module
  16. #% description: Display the HTML man pages of GRASS
  17. #% keywords: general
  18. #% keywords: manual
  19. #% keywords: help
  20. #%End
  21. #%flag
  22. #% key: i
  23. #% description: Display index
  24. #%End
  25. #%flag
  26. #% key: m
  27. #% description: Display as MAN text page instead of HTML page in browser
  28. #%End
  29. #%option
  30. #% key: entry
  31. #% type: string
  32. #% description: Manual entry to be displayed
  33. #% required : no
  34. #%End
  35. import sys
  36. import os
  37. from grass.script import core as grass
  38. def start_browser(entry):
  39. path = os.path.join(gisbase, 'docs', 'html', entry + '.html')
  40. if not os.path.exists(path):
  41. grass.fatal(_("No HTML manual page entry for <%s>.") % entry)
  42. verbose = os.getenv("GRASS_VERBOSE")
  43. if not verbose or int(verbose) > 1:
  44. grass.message(_("Starting browser <%s> for module %s...") % (browser_name, entry))
  45. os.execlp(browser, browser_name, "file://%s/docs/html/%s.html" % (gisbase, entry))
  46. grass.fatal(_("Error starting browser <%s> for HTML file <%s>") % (browser, entry))
  47. def start_man(entry):
  48. path = os.path.join(gisbase, 'man', 'man1', entry + '.1')
  49. for ext in ['', '.gz', '.bz2']:
  50. if os.path.exists(path + ext):
  51. os.execlp('man', 'man', path + ext)
  52. grass.fatal(_("Error starting 'man' for <%s>") % path)
  53. grass.fatal(_("No manual page entry for <%s>.") % entry)
  54. def main():
  55. global gisbase, browser, browser_name
  56. index = flags['i']
  57. manual = flags['m']
  58. entry = options['entry']
  59. gisbase = os.environ['GISBASE']
  60. browser = os.getenv('GRASS_HTML_BROWSER')
  61. if "html_browser_mac.sh" in browser:
  62. #hack for MacOSX:
  63. browser_name = os.getenv('GRASS_HTML_BROWSER_MACOSX','..').split('.')[2]
  64. elif os.getenv('OSTYPE') == "cygwin":
  65. #hack for Cygwin:
  66. browser_name = grass.basename(browser, 'exe')
  67. else:
  68. browser_name = grass.basename(browser)
  69. #keep order!
  70. #first test for index...
  71. if index:
  72. if manual:
  73. start_man('index')
  74. else:
  75. start_browser('index')
  76. sys.exit(0)
  77. #... then for help parameter:
  78. if not entry:
  79. grass.run_command('g.manual', '--help')
  80. sys.exit(0)
  81. if manual:
  82. start_man(entry)
  83. else:
  84. start_browser(entry)
  85. if __name__ == "__main__":
  86. options, flags = grass.parser()
  87. main()