Как я могу заставить GHCI распознавать изменения рабочего каталога?
Я экспериментирую с использованием ghci+Turtle в качестве интерактивной оболочки вместо bash. Пока это работает довольно хорошо! Но я бы очень хотел Turtle's cd
функция для изменения рабочего каталога ghci, команда way ghci :cd
делает.
Допустим, я загружаю GHCI и черепаху в /home
λ> pwd
FilePath "/home"
λ> :show paths
current working directory:
/home
module import search paths:
.
λ> :cd /tmp/
λ> pwd
FilePath "/tmp"
λ> :show paths
current working directory:
/tmp
module import search paths:
.
λ>
Пока все хорошо: изменение каталога с помощью ghci's :cd
также изменяет рабочий каталог Turtle. Но другой путь не верен
λ> cd "/home"
λ> pwd
FilePath "/home"
λ> :show paths
current working directory:
/tmp
module import search paths:
.
λ>
Это означает, что если я изменю каталоги с помощью Turtle, я не смогу использовать :load
или же :script
или воспользуйтесь вкладкой ghci. Я всегда могу использовать :cd
вместо cd
, но потому что :cd
это команда ghci, она не может быть вызвана из функции или составлена каким-либо образом.
Что бы сделать, чтобы сделать cd
функция, которая говорит с GHCI? Я думаю, что мне нужно сделать что-то вроде написать свою собственную обертку cd
что это как-то меняет окружающую среду. Я не уверен, как это выглядит, так как я не могу вызвать :cd
в моем cd
обертка. Я предполагаю, что мне нужно использовать API GHC? Я не могу найти ничего очевидного.
РЕДАКТИРОВАТЬ: я обнаружил, что аналогичная проблема существует, когда я пытаюсь изменить приглашение ghci с помощью : set prompt-function. Если вы поместите в ваш ghci.conf следующее:
:module + Turtle
:set prompt-function \libs n -> (\wd -> encodeString wd ++ "> ") <$> pwd
Приглашение не изменит рабочие каталоги с cd
, но будет с :cd
, Используя что-то вроде :set prompt "%w > "
работает так же. Мое лучшее предположение заключается в том, что ghci каким-то образом сохраняет совершенно отдельный модуль файловой системы от модуля пользовательского пространства. Возможно, мне придется покопаться в источнике ghci, чтобы выяснить, что происходит.
Это не только черепаха, Filesystem.setWorkingDirectory
показывает то же поведение, что и Turtle.cd
,
0 ответов
У меня была похожая проблема при разработке тссс. Я работал над этим, предоставляя cd
функция, которая устанавливает PWD
а также изменение каталога и использование prompt-function
который читает эту переменную.
Минимальный пример..
:set prompt-function \_ _ -> getEnv "PWD"
cd :: FilePath -> IO ()
cd p = do
setCurrentDirectory p
a <- getCurrentDirectory
setEnv "PWD" a