Make kernelName configurable

This does not change the display name, so it doesn't seem that useful on
its own.
This commit is contained in:
Vaibhav Sagar 2021-09-13 03:49:17 +10:00
parent 119655f90f
commit cd50f50ce6
3 changed files with 13 additions and 9 deletions

View File

@ -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.

View File

@ -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 =
"<file>"
"Load environment from this file when kernel is installed"
kernelNameFlag :: Flag Args
kernelNameFlag = flagReq ["kernel-name"] (store KernelName) "<name>"
"Specify a name for the install kernel (default: haskell)"
confFlag :: Flag Args
confFlag = flagReq ["conf", "c"] (store ConfFile) "<rc.hs>"
"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

View File

@ -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