diff --git a/main/Main.hs b/main/Main.hs index 63812a82..ee4d54df 100644 --- a/main/Main.hs +++ b/main/Main.hs @@ -101,6 +101,8 @@ parseKernelArgs = foldl' addFlag defaultKernelSpecOptions kernelSpecOpts { kernelSpecUseStack = True } addFlag kernelSpecOpts (KernelspecEnvFile fp) = kernelSpecOpts { kernelSpecEnvFile = Just fp } + addFlag kernelSpecOpts (KernelName name) = + kernelSpecOpts { kernelName = name } addFlag _kernelSpecOpts flag = error $ "Unknown flag" ++ show flag -- | Run the IHaskell language kernel. diff --git a/src/IHaskell/Flags.hs b/src/IHaskell/Flags.hs index 7b53d81b..e43e9d22 100644 --- a/src/IHaskell/Flags.hs +++ b/src/IHaskell/Flags.hs @@ -40,6 +40,7 @@ data Argument = ConfFile String -- ^ A file with commands to load at startup | KernelspecInstallPrefix String | KernelspecUseStack | KernelspecEnvFile FilePath + | KernelName String deriving (Eq, Show) data LhsStyle string = @@ -133,6 +134,10 @@ kernelEnvFileFlag = "" "Load environment from this file when kernel is installed" +kernelNameFlag :: Flag Args +kernelNameFlag = flagReq ["kernel-name"] (store KernelName) "" + "Specify a name for the install kernel (default: haskell)" + confFlag :: Flag Args confFlag = flagReq ["conf", "c"] (store ConfFile) "" "File with commands to execute at start; replaces ~/.ihaskell/rc.hs." @@ -153,7 +158,7 @@ store constructor str (Args md prev) = Right $ Args md $ constructor str : prev installKernelSpec :: Mode Args installKernelSpec = mode "install" (Args InstallKernelSpec []) "Install the Jupyter kernelspec." noArgs - [ghcLibFlag, ghcRTSFlag, kernelDebugFlag, confFlag, installPrefixFlag, helpFlag, kernelStackFlag, kernelEnvFileFlag] + [ghcLibFlag, ghcRTSFlag, kernelDebugFlag, confFlag, installPrefixFlag, helpFlag, kernelStackFlag, kernelEnvFileFlag, kernelNameFlag] kernel :: Mode Args kernel = mode "kernel" (Args (Kernel Nothing) []) "Invoke the IHaskell kernel." kernelArg diff --git a/src/IHaskell/IPython.hs b/src/IHaskell/IPython.hs index c7ce8160..db5886a8 100644 --- a/src/IHaskell/IPython.hs +++ b/src/IHaskell/IPython.hs @@ -8,7 +8,6 @@ module IHaskell.IPython ( getIHaskellDir, getSandboxPackageConf, subHome, - kernelName, KernelSpecOptions(..), defaultKernelSpecOptions, installLabextension, @@ -45,6 +44,7 @@ data KernelSpecOptions = , kernelSpecInstallPrefix :: Maybe String , kernelSpecUseStack :: Bool -- ^ Whether to use @stack@ environments. , kernelSpecEnvFile :: Maybe FilePath + , kernelName :: String -- ^ The Jupyter kernel name. } defaultKernelSpecOptions :: KernelSpecOptions @@ -58,12 +58,9 @@ defaultKernelSpecOptions = KernelSpecOptions , kernelSpecInstallPrefix = Nothing , kernelSpecUseStack = False , kernelSpecEnvFile = Nothing + , kernelName = "haskell" } --- | The IPython kernel name. -kernelName :: String -kernelName = "haskell" - ipythonCommand :: SH.Sh SH.FilePath ipythonCommand = do jupyterMay <- SH.which "jupyter" @@ -148,14 +145,14 @@ installKernelspec repl opts = void $ do let kernelSpec = KernelSpec { kernelDisplayName = "Haskell" - , kernelLanguage = kernelName + , kernelLanguage = kernelName opts , kernelCommand = [ihaskellPath, "kernel", "{connection_file}"] ++ kernelFlags } -- Create a temporary directory. Use this temporary directory to make a kernelspec directory; then, -- shell out to IPython to install this kernelspec directory. SH.withTmpDir $ \tmp -> do - let kernelDir = tmp SH. kernelName + let kernelDir = tmp SH. kernelName opts let filename = kernelDir SH. ("kernel.json" :: SH.FilePath) SH.mkdir_p kernelDir @@ -163,7 +160,7 @@ installKernelspec repl opts = void $ do let files = ["kernel.js", "logo-64x64.svg"] forM_ files $ \file -> do src <- liftIO $ Paths.getDataFileName $ "html/" ++ file - SH.cp (SH.fromText $ T.pack src) (tmp SH. kernelName SH. file) + SH.cp (SH.fromText $ T.pack src) (tmp SH. kernelName opts SH. file) ipython <- locateIPython