#haskell #prompt #ghci
#haskell #приглашение #ghci
Вопрос:
В настоящее время так выглядит мое приглашение ghci:
И я хочу, чтобы это выглядело так:
или как это
Есть идеи о том, как я могу это сделать? Содержимое моего файла конфигурации (ghci.conf) выглядит так, как показано ниже
:set prompt "ESC[33mSTX[%s]ESC[38;5;86mSTX x03BB > ESC[0mSTX"
в котором я следовал синтаксису, написанному на:
https://downloads.haskell.org/ghc/8.8.1-alpha1/docs/html/users_guide/ghci.html#ghci-cmd-:set prompt
Ответ №1:
Вы можете использовать prompt-function
вместо prompt
того, чтобы запускать более продвинутые функции Haskell для приглашения. Вот пример ghci.conf
для вашего второго приглашения:
:{
prompter :: [String] -> Int -> IO String
prompter modules line = return $
concat [ "ESC[33mSTX["
, Data.List.intercalate ", " modules
, "]ESC[38;5;86mSTX x03BB > ESC[0mSTX"
]
:}
:set prompt-function prompter
Или, для чисел, вы можете использовать zipWith
:
:{
prompter :: [String] -> Int -> IO String
prompter modules line = return $
concat [ "ESC[33mSTX["
-- this is the only line that changed
, Data.List.intercalate ", " $ zipWith (n m -> concat [show n, ".", m]) [1..] modules
, "]ESC[38;5;86mSTX x03BB > ESC[0mSTX"
]
:}
:set prompt-function prompter
Я оставлю это как упражнение для написания строки продолжения, но оно очень похоже и просто включает prompt-cont-function
.
Комментарии:
1. Большое вам спасибо! У меня вопрос, я использовал код, который вы предоставили мне выше, и сделал его следующим образом: link и результат выглядит примерно так: link , однако всякий раз, когда я нажимаю ctrl-l (очистить экран), он становится таким: link . Есть ли у вас какие-либо идеи, почему это происходит и как я мог бы сделать так, чтобы это выглядело так: link всякий раз, когда я очищаю экран терминала? @Aplet123