Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Restore haskell-process-cd functionality.. #797

Merged
10 changes: 6 additions & 4 deletions haskell-cabal.el
Original file line number Diff line number Diff line change
Expand Up @@ -186,14 +186,16 @@ file), then this function returns nil."
(haskell-cabal-get-setting name))))))

;;;###autoload
(defun haskell-cabal-get-dir ()
(defun haskell-cabal-get-dir (&optional use-defaults)
"Get the Cabal dir for a new project. Various ways of figuring this out,
and indeed just prompting the user. Do them all."
(let* ((file (haskell-cabal-find-file))
(dir (if file (file-name-directory file) default-directory)))
(haskell-utils-read-directory-name
(format "Cabal dir%s: " (if file (format " (guessed from %s)" (file-relative-name file)) ""))
dir)))
(if use-defaults
dir
(haskell-utils-read-directory-name
(format "Cabal dir%s: " (if file (format " (guessed from %s)" (file-relative-name file)) ""))
dir))))

(defun haskell-cabal-compute-checksum (dir)
"Compute MD5 checksum of package description file in DIR.
Expand Down
38 changes: 20 additions & 18 deletions haskell-commands.el
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ You can create new session using function `haskell-session-make'."
(haskell-process-set (haskell-session-process session) 'is-restarting nil)
(let ((default-directory (haskell-session-cabal-dir session))
(log-and-command (haskell-process-compute-process-log-and-command session (haskell-process-type))))
(haskell-session-pwd session)
(haskell-session-prompt-set-current-dir session (not haskell-process-load-or-reload-prompt))
(haskell-process-set-process
process
(progn
Expand Down Expand Up @@ -518,31 +518,33 @@ Requires the :loc-at command from GHCi."
"Change directory."
(interactive)
(let* ((session (haskell-interactive-session))
(dir (haskell-session-pwd session t)))
(dir (haskell-session-prompt-set-current-dir session)))
(haskell-process-log
(propertize (format "Changing directory to %s ...\n" dir)
'face font-lock-comment-face))
(haskell-process-change-dir session
(haskell-interactive-process)
dir)))

(defun haskell-session-pwd (session &optional change)
(defun haskell-session-buffer-default-dir (session &optional buffer)
"Try to deduce a sensible default directory for SESSION and BUFFER,
of which the latter defaults to the current buffer."
(or (haskell-session-get session 'current-dir)
(haskell-session-get session 'cabal-dir)
(if (buffer-file-name buffer)
(file-name-directory (buffer-file-name buffer))
"~/")))

(defun haskell-session-prompt-set-current-dir (session &optional use-default)
"Prompt for the current directory.
Return current working directory for SESSION.
Optional CHANGE argument makes user to choose new working directory for SESSION.
In this case new working directory path will be returned."
(or (unless change
(haskell-session-get session 'current-dir))
(progn (haskell-session-set-current-dir
session
(haskell-utils-read-directory-name
(if change "Change directory: " "Set current directory: ")
(or (haskell-session-get session 'current-dir)
(haskell-session-get session 'cabal-dir)
(if (buffer-file-name)
(file-name-directory (buffer-file-name))
"~/"))))
(haskell-session-get session 'current-dir))))
Return current working directory for SESSION."
(let ((default (haskell-session-buffer-default-dir session)))
(haskell-session-set-current-dir
session
(if use-default
default
(haskell-utils-read-directory-name "Set current directory: " default))))
(haskell-session-get session 'current-dir))

(defun haskell-process-change-dir (session process dir)
"Change SESSION's current directory.
Expand Down
23 changes: 10 additions & 13 deletions haskell-session.el
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,14 @@
(when (and (buffer-file-name)
(consp haskell-sessions))
(cl-reduce (lambda (acc a)
(let ((dir (haskell-session-cabal-dir a t)))
(let ((dir (haskell-session-get a 'cabal-dir)))
(if dir
(if (string-prefix-p dir
(file-name-directory (buffer-file-name)))
(if acc
(if (and
(> (length (haskell-session-cabal-dir a t))
(length (haskell-session-cabal-dir acc t))))
(> (length (haskell-session-get a 'cabal-dir))
(length (haskell-session-get acc 'cabal-dir))))
a
acc)
a)
Expand Down Expand Up @@ -194,17 +194,14 @@ If `haskell-process-load-or-reload-prompt' is nil, accept `default'."
(haskell-session-set s 'cabal-checksum
(haskell-cabal-compute-checksum cabal-dir)))

(defun haskell-session-cabal-dir (s &optional no-prompt)
(defun haskell-session-cabal-dir (s)
"Get the session cabal-dir."
(let ((dir (haskell-session-get s 'cabal-dir)))
(if dir
dir
(unless no-prompt
(let ((set-dir (haskell-cabal-get-dir)))
(if set-dir
(progn (haskell-session-set-cabal-dir s set-dir)
set-dir)
(haskell-session-cabal-dir s)))))))
(or (haskell-session-get s 'cabal-dir)
(let ((set-dir (haskell-cabal-get-dir (not haskell-process-load-or-reload-prompt))))
(if set-dir
(progn (haskell-session-set-cabal-dir s set-dir)
set-dir)
(haskell-session-cabal-dir s)))))

(defun haskell-session-modify (session key update)
"Update the value at KEY in SESSION with UPDATE."
Expand Down
7 changes: 1 addition & 6 deletions haskell-utils.el
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,7 @@
"Read directory name and normalize to true absolute path.
Refer to `read-directory-name' for the meaning of PROMPT and
DEFAULT. If `haskell-process-load-or-reload-prompt' is nil, accept `default'."
(let ((filename (file-truename
(if haskell-process-load-or-reload-prompt
(read-directory-name prompt
default
default)
default))))
(let ((filename (file-truename (read-directory-name prompt default default))))
(concat (replace-regexp-in-string "/$" "" filename) "/")))

(defun haskell-utils-parse-import-statement-at-point ()
Expand Down