Вероятно, не совсем то, что вы хотели, но это должно обрабатывать пункт 1 для вас:
(defun lein-javac (&optional PROJECT-DIR)
(interactive)
(let ((output-buffer (progn
(with-output-to-temp-buffer "*lein-javac*" nil )
(select-window (get-buffer-window "*lein-javac*"))
(read-only-mode 'toggle)
(window-buffer)) ))
(shell-command (concat "cd " (or PROJECT-DIR default-directory)
" && lein javac &") "*lein-javac*")))