Thread overview
Compile And Run in emacs
Nov 30, 2012
Aytug
Nov 30, 2012
Ali Çehreli
Nov 30, 2012
Dan
Nov 30, 2012
Dan
Nov 30, 2012
Aytug
Nov 30, 2012
Timon Gehr
November 30, 2012
So I have installed dmd, gdc, emacs and d-mode.el on my Debian
machine.

I can compile the program fine with M-compile. The problem starts
after that.

I cannot run the output file properly from within emacs. Either
there is a way and I cannot find it, or there really is no way.

What I try instead:
1. Write the sourcecode.
2. M-compile.
3. Launch a separate terminal, and run the executable from there.
Or,
3. Launch a shell in emacs, and use that. Which sucks.

What am I doing wrong? Isn't there a "compile&run" option? And
one more thing, is there maybe a C-* alternative to M-compile
since it takes time to type that everytime?
November 30, 2012
On 11/30/2012 03:13 PM, Aytug wrote:
> So I have installed dmd, gdc, emacs and d-mode.el on my Debian
> machine.
>
> I can compile the program fine with M-compile. The problem starts
> after that.
>
> I cannot run the output file properly from within emacs. Either
> there is a way and I cannot find it, or there really is no way.
>
> What I try instead:
> 1. Write the sourcecode.
> 2. M-compile.
> 3. Launch a separate terminal, and run the executable from there.
> Or,
> 3. Launch a shell in emacs, and use that. Which sucks.

I have the following in my Makefile:

deneme: ${ALL_FILES}
	${DMD} ${SOURCES} ${LIBRARIES} -of$@ ${OPTIONS}
	./$@

The last line there executes the program that has just been built.

As an aside, if you do C-u,M-x,compile then you can interact with the program's standard input as well.

> What am I doing wrong? Isn't there a "compile&run" option? And
> one more thing, is there maybe a C-* alternative to M-compile
> since it takes time to type that everytime?

You can set any key binding that you like in Emacs. I've never bothered to change it though: A quick M-x,M-p brings up the last compile command and I just hit Enter. (M-p is a key binding of mine that works better with the Dvorak keyboard, which means "up".)

Ali

-- 
D Programming Language Tutorial: http://ddili.org/ders/d.en/index.html

November 30, 2012
On Friday, 30 November 2012 at 23:13:10 UTC, Aytug wrote:
> So I have installed dmd, gdc, emacs and d-mode.el on my Debian
> machine.
>
> I can compile the program fine with M-compile. The problem starts
> after that.
>
> I cannot run the output file properly from within emacs. Either
> there is a way and I cannot find it, or there really is no way.
>
> What I try instead:
> 1. Write the sourcecode.
> 2. M-compile.
> 3. Launch a separate terminal, and run the executable from there.
> Or,
> 3. Launch a shell in emacs, and use that. Which sucks.
>
> What am I doing wrong? Isn't there a "compile&run" option? And
> one more thing, is there maybe a C-* alternative to M-compile
> since it takes time to type that everytime?

I use the lisp code below. Then from the source with main I do:
C-c @   To run the main in the current buffer
C-c #   To run the unit test in the current buffer


Thanks
Dan

---------------------- lisp code

(defun unittest-d-file (args)
   (interactive "sEnter args:")
   (setq fname (buffer-file-name))
   (setq cmdStr (concat "time rdmd -unittest --main \""   fname
"\" " args))
   (setq buffname (format "*%s*" cmdStr))
   (save-excursion
     (message (concat "Running:" cmdStr))
     (if (not (eq nil (get-buffer buffname))) (kill-buffer
buffname))
     (setq compilation-scroll-output t)
     (compile cmdStr)
     (set-buffer "*compilation*")
     (rename-buffer buffname t)
     ))

(defun run-current-file-args (args)
   (let (extention-alist fname suffix progName cmdStr)
     (setq extention-alist ; a keyed list of file suffix to
comand-line program to run
           '(
             ("php" . "php")
             ("pl" . "perl")
             ("py" . "python")
             ("rb" . "ruby")
             ("rspec" . "rspec")
             ("js" . "js")
             ("sh" . "bash")
             ("bash" . "bash")
             ("ml" . "ocaml")
             ("vbs" . "cscript")
             ("java" . "javac")
             ("go" . "rungo.sh")
             ("d" . "rdmd")
             ("html" . "firefox")
             )
           )
     (setq fname (buffer-file-name))
     (setq suffix (file-name-extension fname))
     (setq progName (cdr (assoc suffix extention-alist)))
     (setq cmdStr (concat "time " progName " \""   fname "\" "
args))
     (setq buffname (format "*%s*" cmdStr))

     (if (string-equal suffix "el")
         (load-file fname)
       (if progName                    ; is not nil
           (save-excursion
             (message (concat "Running:" cmdStr))
             (if (not (eq nil (get-buffer buffname))) (kill-buffer
buffname))
             (setq compilation-scroll-output t)
             (compile cmdStr)
             (set-buffer "*compilation*")
             (rename-buffer buffname t)
         (message "No recognized program file suffix for this
file.")
         )))))

(defun run-current-file ()
   "Execute or compile the current file.
For example, if the current buffer is the file x.pl,
then it'll call “perl x.pl” in a shell.
The file can be php, perl, python, ruby, javascript, bash, ocaml,
java.
File suffix is used to determine what program to run."
   (interactive)
   (run-current-file-args ""))

(defun run-current-file-prompt (args)
   (interactive "sEnter args:")
   (run-current-file-args args))

(global-set-key "\C-c@"         'run-current-file-prompt)
(global-set-key "\C-c#"         'unittest-d-file)

-------------------------------------------------------------------
November 30, 2012
On 12/01/2012 12:13 AM, Aytug wrote:
> So I have installed dmd, gdc, emacs and d-mode.el on my Debian
> machine.
>
> I can compile the program fine with M-compile. The problem starts
> after that.
>
> I cannot run the output file properly from within emacs. Either
> there is a way and I cannot find it, or there really is no way.
>
> What I try instead:
> 1. Write the sourcecode.
> 2. M-compile.
> 3. Launch a separate terminal, and run the executable from there.
> Or,
> 3. Launch a shell in emacs, and use that. Which sucks.
>
> What am I doing wrong? Isn't there a "compile&run" option? And
> one more thing, is there maybe a C-* alternative to M-compile
> since it takes time to type that everytime?

It is emacs. Every key binding is a possible alternative.
I use

(global-set-key (kbd "\C-c c") 'compile)
(global-set-key (kbd "\C-c n") 'next-error)

Usually I just run non-interactive programs from within compile,

M-x compile
dmd -run program args <<< "program input"

or
M-x compile
make && ./program args <<< "program input"

or just
M-x compile
./program args <<< "program input"

or even
M-x gdb
r <<< "program input"

otherwise I have a separate console (are you using a sane window manager?) or use M-x ansi-term.
November 30, 2012
The lisp code: http://pastebin.com/myAABm5G

November 30, 2012
On Friday, 30 November 2012 at 23:40:42 UTC, Dan wrote:
> The lisp code: http://pastebin.com/myAABm5G

Thanks Dan, that was really helpful :)