From 95e2af755cc24a58fde8befb441845b92c9e2df0 Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauld.mccarthy@gmail.com>
Date: Wed, 2 Dec 2015 10:25:45 +0000
Subject: [PATCH] New '--version' command line argument, which prints version
 and exits.

---
 fsl/__init__.py                  | 26 +++++++++++++++++++++-----
 fsl/fsleyes/frame.py             |  1 +
 fsl/fsleyes/fsleyes_parseargs.py |  9 ++++++---
 3 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/fsl/__init__.py b/fsl/__init__.py
index 6a5e19bef..9f97f4634 100644
--- a/fsl/__init__.py
+++ b/fsl/__init__.py
@@ -45,6 +45,9 @@ The conventional way to run ``fslpy`` is as follows::
           single place - the :mod:`fsl.version` module.
 """
 
+
+from __future__ import print_function
+
 import logging
 import pkgutil
 import warnings
@@ -249,6 +252,10 @@ def _parseArgs(argv, allTools):
     parser.add_argument(
         '-v', '--verbose', action='count',
         help='Verbose output (can be used up to 3 times)')
+
+    parser.add_argument(
+        '-V', '--version', action='store_true',
+        help='Print the current fslpy version and exit') 
     
     parser.add_argument(
         '-n', '--noisy', metavar='MODULE', action='append',
@@ -261,13 +268,14 @@ def _parseArgs(argv, allTools):
     parser.add_argument(
         '-w', '--wxinspect', action='store_true',
         help='Run wx inspection tool')
-    parser.add_argument('tool', help='FSL program to run')
+    
+    parser.add_argument('tool', help='FSL program to run', nargs='?')
 
     # No arguments at all? 
     # I'm not a mind-reader
     if len(argv) == 0:
         parser.print_help()
-        sys.exit(1) 
+        sys.exit(1)
 
     # find the index of the first positional
     # argument, i.e. the tool name
@@ -275,6 +283,9 @@ def _parseArgs(argv, allTools):
     while True:
 
         i = i + 1
+
+        if i >= len(argv):
+            break
             
         if argv[i].startswith('-'):
             continue
@@ -293,6 +304,11 @@ def _parseArgs(argv, allTools):
 
     namespace = parser.parse_args(fslArgv)
 
+    # Version number
+    if namespace.version:
+        print('fslpy version: {}'.format(__version__))
+        sys.exit(0)
+
     if namespace.noisy is None:
         namespace.noisy = []
 
@@ -307,7 +323,7 @@ def _parseArgs(argv, allTools):
 
         # unknown tool name supplied
         if toolArgv[0] not in allTools:
-            print '\nUnknown FSL tool: {}\n'.format(toolArgv[0])
+            print('\nUnknown FSL tool: {}\n'.format(toolArgv[0]))
             parser.print_help()
             sys.exit(1)
 
@@ -315,7 +331,7 @@ def _parseArgs(argv, allTools):
 
         # no tool specific argument parser
         if fslTool.parseArgs is None:
-            print 'No help for {}'.format(toolArgv[0])
+            print('No help for {}'.format(toolArgv[0]))
             
         # Otherwise, get help from the tool. We assume that
         # all the argument parser for every  tool will interpret
@@ -326,7 +342,7 @@ def _parseArgs(argv, allTools):
 
     # Unknown tool name supplied
     elif namespace.tool not in allTools:
-        print '\nUnknown FSL tool: {}\n'.format(namespace.tool)
+        print('\nUnknown FSL tool: {}\n'.format(namespace.tool))
         parser.print_help()
         sys.exit(1)
 
diff --git a/fsl/fsleyes/frame.py b/fsl/fsleyes/frame.py
index 34060c109..284d40c0b 100644
--- a/fsl/fsleyes/frame.py
+++ b/fsl/fsleyes/frame.py
@@ -611,6 +611,7 @@ class FSLEyesFrame(wx.Frame):
                       viewAction)
 
         # Perspectives
+        viewMenu.AppendSeparator()
         viewMenu.AppendSubMenu(perspectiveMenu, 'Perspectives')
         self.__makePerspectiveMenu()
 
diff --git a/fsl/fsleyes/fsleyes_parseargs.py b/fsl/fsleyes/fsleyes_parseargs.py
index f805ebe0d..0bf41f36b 100644
--- a/fsl/fsleyes/fsleyes_parseargs.py
+++ b/fsl/fsleyes/fsleyes_parseargs.py
@@ -101,6 +101,9 @@ To make this new propery settable via the command line, you need to:
          })
 """
 
+
+from __future__ import print_function
+
 import sys
 import os.path as op
 import functools
@@ -838,8 +841,8 @@ def parseArgs(mainParser, argv, name, desc, toolOptsDesc='[options]'):
             ovlHelp = ovlParser.format_help()
             ovlHelp = ovlHelp[ovlHelp.index(dispGroup):]
             
-        print 
-        print ovlHelp
+        print() 
+        print(ovlHelp)
 
     # And I want to handle overlay argument errors,
     # rather than having the overlay parser force
@@ -938,7 +941,7 @@ def parseArgs(mainParser, argv, name, desc, toolOptsDesc='[options]'):
             
         except Exception as e:
             printHelp(shortHelp=True)
-            print e.message
+            print(e.message)
             sys.exit(1)
 
         # We just add a list of argparse.Namespace
-- 
GitLab