View mode: basic / threaded / horizontal-split · Log in · Help
November 30, 2012
Compile And Run in emacs
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
Re: Compile And Run in emacs
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
Re: Compile And Run in emacs
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
Re: Compile And Run in emacs
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
Re: Compile And Run in emacs
The lisp code: http://pastebin.com/myAABm5G
November 30, 2012
Re: Compile And Run in emacs
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 :)
Top | Discussion index | About this forum | D home