Commit | Line | Data |
---|---|---|
67d3ffe4 CY |
1 | ;;; ede/shell.el --- A shell controlled by EDE. |
2 | ;; | |
73b0cd50 | 3 | ;; Copyright (C) 2009-2011 Free Software Foundation, Inc. |
67d3ffe4 CY |
4 | ;; |
5 | ;; Author: Eric M. Ludlam <eric@siege-engine.com> | |
6 | ||
7 | ;; This file is part of GNU Emacs. | |
8 | ||
9 | ;; GNU Emacs is free software: you can redistribute it and/or modify | |
10 | ;; it under the terms of the GNU General Public License as published by | |
11 | ;; the Free Software Foundation, either version 3 of the License, or | |
12 | ;; (at your option) any later version. | |
13 | ||
14 | ;; GNU Emacs is distributed in the hope that it will be useful, | |
15 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 | ;; GNU General Public License for more details. | |
18 | ||
19 | ;; You should have received a copy of the GNU General Public License | |
20 | ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. | |
21 | ||
22 | ;;; Commentary: | |
23 | ;; | |
24 | ;; Run commands through a specialized EDE shell buffer. Commands will | |
25 | ;; be run as shell commands so users can type in their own thing in | |
26 | ;; the shells for testing purposes. | |
27 | ;; | |
28 | ;; Each thing that EDE wants to use will create a shell to interact with it. | |
29 | ||
30 | ;;; Code: | |
31 | ||
32 | (require 'ede) | |
33 | ||
34 | (declare-function comint-send-input "comint") | |
35 | ||
36 | (defmethod ede-shell-run-something ((target ede-target) command) | |
37 | "Create a shell to run stuff for TARGET. | |
38 | COMMAND is a text string representing the thing to be run." | |
39 | (let* ((buff (ede-shell-buffer target)) | |
40 | (cp (ede-target-parent target)) | |
41 | (dd (oref cp :directory))) | |
42 | ;; Show the new buffer. | |
43 | (when (not (get-buffer-window buff)) | |
44 | (switch-to-buffer-other-window buff t)) | |
45 | ;; Force a shell into the buffer. | |
46 | (shell buff) | |
47 | (while (eq (point-min) (point)) | |
48 | (accept-process-output)) | |
49 | ;; Change the default directory | |
50 | (if (not (string= (file-name-as-directory (expand-file-name default-directory)) | |
51 | (file-name-as-directory (expand-file-name dd)))) | |
52 | ;; Go there. | |
53 | (setq command (concat (concat "cd " dd ";" command)))) | |
54 | ;; Run the command itself. | |
55 | (ede-shell-run-command command) | |
56 | )) | |
57 | ||
58 | (defun ede-shell-run-command (command) | |
59 | "Run the COMMAND in the current shell-buffer." | |
60 | (require 'comint) | |
61 | ;; go to end | |
62 | (goto-char (point-max)) | |
63 | ;; Insert the stuff. | |
64 | (goto-char (point-max)) | |
65 | (insert command) | |
66 | ;; Send the command. | |
67 | (comint-send-input) | |
68 | ) | |
69 | ||
70 | (defmethod ede-shell-buffer ((target ede-target)) | |
71 | "Get the buffer for running shell commands for TARGET." | |
72 | (let ((name (ede-name target))) | |
cb85c0d8 | 73 | (get-buffer-create (format "*EDE Shell %s*" name)))) |
67d3ffe4 CY |
74 | |
75 | (provide 'ede/shell) | |
76 | ||
77 | ;; Local variables: | |
78 | ;; generated-autoload-file: "loaddefs.el" | |
67d3ffe4 CY |
79 | ;; generated-autoload-load-name: "ede/shell" |
80 | ;; End: | |
81 | ||
82 | ;;; ede/shell.el ends here |