unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* opening correct source file on compile error
@ 2006-10-18 16:08 kl.vanw
  2006-10-19 16:14 ` Kevin Rodgers
       [not found] ` <mailman.98.1161274520.2130.help-gnu-emacs@gnu.org>
  0 siblings, 2 replies; 13+ messages in thread
From: kl.vanw @ 2006-10-18 16:08 UTC (permalink / raw)


Here's my situation. My header files (C++) are located in a dir named
src/lib. These are the files I edit and are CVS managed. When I run
'make', make copies the headers into include/, which my other source
files include. Then if there was an error in one of the headers, and I
use 'next-error' in the compilation buffer to open the header, emacs
opens the file in the include/ directory, but I really need it to open
the header in src/lib. Can I some how help emacs find the right file?

Unfortunately, I don't have the option of changing the way our makefile
works or the #include statements.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: opening correct source file on compile error
  2006-10-18 16:08 opening correct source file on compile error kl.vanw
@ 2006-10-19 16:14 ` Kevin Rodgers
       [not found] ` <mailman.98.1161274520.2130.help-gnu-emacs@gnu.org>
  1 sibling, 0 replies; 13+ messages in thread
From: Kevin Rodgers @ 2006-10-19 16:14 UTC (permalink / raw)


kl.vanw@gmail.com wrote:
> Here's my situation. My header files (C++) are located in a dir named
> src/lib. These are the files I edit and are CVS managed. When I run
> 'make', make copies the headers into include/, which my other source
> files include. Then if there was an error in one of the headers, and I
> use 'next-error' in the compilation buffer to open the header, emacs
> opens the file in the include/ directory, but I really need it to open
> the header in src/lib. Can I some how help emacs find the right file?
> 
> Unfortunately, I don't have the option of changing the way our makefile
> works or the #include statements.

Try this:

(add-hook 'find-file-hook
	  (lambda ()
	    (let* ((file (file-name-nondirectory buffer-file-name))
		   (directory (file-name-directory buffer-file-name))
		   (alternate-file (expand-file-name file "../src/lib")))
	      (when (and (equal (file-name-nondirectory
				 (directory-file-name directory))
				"include")
			 (file-exists-p alternate-file))
		(find-alternate-file alternate-file)))))

-- 
Kevin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: opening correct source file on compile error
       [not found] ` <mailman.98.1161274520.2130.help-gnu-emacs@gnu.org>
@ 2006-10-20 14:00   ` kl.vanw
  2006-10-23 16:15     ` Kevin Rodgers
       [not found]     ` <mailman.162.1161620177.27805.help-gnu-emacs@gnu.org>
  2006-10-23 17:29   ` Ushnish Basu
  1 sibling, 2 replies; 13+ messages in thread
From: kl.vanw @ 2006-10-20 14:00 UTC (permalink / raw)



Kevin Rodgers wrote:
> kl.vanw@gmail.com wrote:
> > Here's my situation. My header files (C++) are located in a dir named
> > src/lib. These are the files I edit and are CVS managed. When I run
> > 'make', make copies the headers into include/, which my other source
> > files include. Then if there was an error in one of the headers, and I
> > use 'next-error' in the compilation buffer to open the header, emacs
> > opens the file in the include/ directory, but I really need it to open
> > the header in src/lib. Can I some how help emacs find the right file?
> >
> > Unfortunately, I don't have the option of changing the way our makefile
> > works or the #include statements.
>
> Try this:
>
> (add-hook 'find-file-hook
> 	  (lambda ()
> 	    (let* ((file (file-name-nondirectory buffer-file-name))
> 		   (directory (file-name-directory buffer-file-name))
> 		   (alternate-file (expand-file-name file "../src/lib")))
> 	      (when (and (equal (file-name-nondirectory
> 				 (directory-file-name directory))
> 				"include")
> 			 (file-exists-p alternate-file))
> 		(find-alternate-file alternate-file)))))
>
> --
> Kevin

I tried that, but it didn't work. I also tried specifing the full paths
in the above, but it didn't work either. Did you verify that it works
for you?

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: opening correct source file on compile error
  2006-10-20 14:00   ` kl.vanw
@ 2006-10-23 16:15     ` Kevin Rodgers
       [not found]     ` <mailman.162.1161620177.27805.help-gnu-emacs@gnu.org>
  1 sibling, 0 replies; 13+ messages in thread
From: Kevin Rodgers @ 2006-10-23 16:15 UTC (permalink / raw)


kl.vanw@gmail.com wrote:
> Kevin Rodgers wrote:
>> kl.vanw@gmail.com wrote:
>>> Here's my situation. My header files (C++) are located in a dir named
>>> src/lib. These are the files I edit and are CVS managed. When I run
>>> 'make', make copies the headers into include/, which my other source
>>> files include. Then if there was an error in one of the headers, and I
>>> use 'next-error' in the compilation buffer to open the header, emacs
>>> opens the file in the include/ directory, but I really need it to open
>>> the header in src/lib. Can I some how help emacs find the right file?
>>>
>>> Unfortunately, I don't have the option of changing the way our makefile
>>> works or the #include statements.
>> Try this:
>>
>> (add-hook 'find-file-hook
>> 	  (lambda ()
>> 	    (let* ((file (file-name-nondirectory buffer-file-name))
>> 		   (directory (file-name-directory buffer-file-name))
>> 		   (alternate-file (expand-file-name file "../src/lib")))
>> 	      (when (and (equal (file-name-nondirectory
>> 				 (directory-file-name directory))
>> 				"include")
>> 			 (file-exists-p alternate-file))
>> 		(find-alternate-file alternate-file)))))
>>
>> --
>> Kevin
> 
> I tried that, but it didn't work. I also tried specifing the full paths
> in the above, but it didn't work either. Did you verify that it works
> for you?

Ah, it works in Emacs 22.  To make it work in older versions, use
find-file-hooks (plural) instead of find-file-hook.

-- 
Kevin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: opening correct source file on compile error
       [not found] ` <mailman.98.1161274520.2130.help-gnu-emacs@gnu.org>
  2006-10-20 14:00   ` kl.vanw
@ 2006-10-23 17:29   ` Ushnish Basu
  2006-10-23 20:07     ` Kevin Rodgers
       [not found]     ` <mailman.175.1161634161.27805.help-gnu-emacs@gnu.org>
  1 sibling, 2 replies; 13+ messages in thread
From: Ushnish Basu @ 2006-10-23 17:29 UTC (permalink / raw)


Kevin Rodgers <ihs_4664@yahoo.com> writes:

> kl.vanw@gmail.com wrote:
>> Here's my situation. My header files (C++) are located in a dir named
>> src/lib. These are the files I edit and are CVS managed. When I run
>> 'make', make copies the headers into include/, which my other source
>> files include. Then if there was an error in one of the headers, and I
>> use 'next-error' in the compilation buffer to open the header, emacs
>> opens the file in the include/ directory, but I really need it to open
>> the header in src/lib. Can I some how help emacs find the right file?
>> Unfortunately, I don't have the option of changing the way our makefile
>> works or the #include statements.
>
> Try this:
>
> (add-hook 'find-file-hook
> 	  (lambda ()
> 	    (let* ((file (file-name-nondirectory buffer-file-name))
> 		   (directory (file-name-directory buffer-file-name))
> 		   (alternate-file (expand-file-name file "../src/lib")))
> 	      (when (and (equal (file-name-nondirectory
> 				 (directory-file-name directory))
> 				"include")
> 			 (file-exists-p alternate-file))
> 		(find-alternate-file alternate-file)))))
>
> -- 
> Kevin
>

I have a similar problem, except that my CVS has *.F files (in say ../src) for
the fortran preprocessor, and make gives me corresponding *.f files in the
current directory. How would one modify the above example for this case?
Sorry, I don't understand (e)lisp well enough to do it myself, but I am
planning to learn. 

-- 
Ushnish Basu          ubasu@ce.berkeley.edu          
+1 510 644-1906       www.ce.berkeley.edu/~ubasu

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: opening correct source file on compile error
  2006-10-23 17:29   ` Ushnish Basu
@ 2006-10-23 20:07     ` Kevin Rodgers
       [not found]     ` <mailman.175.1161634161.27805.help-gnu-emacs@gnu.org>
  1 sibling, 0 replies; 13+ messages in thread
From: Kevin Rodgers @ 2006-10-23 20:07 UTC (permalink / raw)


Ushnish Basu wrote:
> Kevin Rodgers <ihs_4664@yahoo.com> writes:
> 
>> kl.vanw@gmail.com wrote:
>>> Here's my situation. My header files (C++) are located in a dir named
>>> src/lib. These are the files I edit and are CVS managed. When I run
>>> 'make', make copies the headers into include/, which my other source
>>> files include. Then if there was an error in one of the headers, and I
>>> use 'next-error' in the compilation buffer to open the header, emacs
>>> opens the file in the include/ directory, but I really need it to open
>>> the header in src/lib. Can I some how help emacs find the right file?
>>> Unfortunately, I don't have the option of changing the way our makefile
>>> works or the #include statements.
>> Try this:
>>
>> (add-hook 'find-file-hook
>> 	  (lambda ()
>> 	    (let* ((file (file-name-nondirectory buffer-file-name))
>> 		   (directory (file-name-directory buffer-file-name))
>> 		   (alternate-file (expand-file-name file "../src/lib")))
>> 	      (when (and (equal (file-name-nondirectory
>> 				 (directory-file-name directory))
>> 				"include")
>> 			 (file-exists-p alternate-file))
>> 		(find-alternate-file alternate-file)))))
>>
>> -- 
>> Kevin
>>
> 
> I have a similar problem, except that my CVS has *.F files (in say ../src) for
> the fortran preprocessor, and make gives me corresponding *.f files in the
> current directory. How would one modify the above example for this case?

(add-hook 'find-file-hook
  	  (lambda ()
  	    (let* ((file (file-name-nondirectory buffer-file-name))
  		   alternate-file)
  	      (when (and (equal (file-name-extension file) "f")
			 (file-exists-p
			  (setq alternate-file
				(expand-file-name (concat (file-name-sans-extension file)
							  ".F")
						  "../src"))))
  		(find-alternate-file alternate-file)))))

> Sorry, I don't understand (e)lisp well enough to do it myself, but I am
> planning to learn. 

You will be greatly rewarded for your efforts!

-- 
Kevin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: opening correct source file on compile error
       [not found]     ` <mailman.175.1161634161.27805.help-gnu-emacs@gnu.org>
@ 2006-10-23 22:23       ` Ushnish Basu
  0 siblings, 0 replies; 13+ messages in thread
From: Ushnish Basu @ 2006-10-23 22:23 UTC (permalink / raw)


Kevin Rodgers <ihs_4664@yahoo.com> writes:

> Ushnish Basu wrote:
>> I have a similar problem, except that my CVS has *.F files (in say ../src)
>> for
>> the fortran preprocessor, and make gives me corresponding *.f files in the
>> current directory. How would one modify the above example for this case?
>
> (add-hook 'find-file-hook
>   	  (lambda ()
>   	    (let* ((file (file-name-nondirectory buffer-file-name))
>   		   alternate-file)
>   	      (when (and (equal (file-name-extension file) "f")
> 			 (file-exists-p
> 			  (setq alternate-file
> 				(expand-file-name (concat (file-name-sans-extension file)
> 							  ".F")
> 						  "../src"))))
>   		(find-alternate-file alternate-file)))))
>

Great, thanks a bunch, I will try it out soon.

>> Sorry, I don't understand (e)lisp well enough to do it myself, but I am
>> planning to learn.
>
> You will be greatly rewarded for your efforts!
>

That's what I have heard. I just got Paul Graham's ANSI Common Lisp, so I will
go to elisp once I get familiar with lisp itself.

Ushnish

--
Ushnish Basu          ubasu@ce.berkeley.edu          
+1 510 644-1906       www.ce.berkeley.edu/~ubasu

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: opening correct source file on compile error
       [not found]     ` <mailman.162.1161620177.27805.help-gnu-emacs@gnu.org>
@ 2006-10-24 12:04       ` kl.vanw
  2006-10-24 12:46         ` Burton Samograd
                           ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: kl.vanw @ 2006-10-24 12:04 UTC (permalink / raw)



Kevin Rodgers wrote:
> kl.vanw@gmail.com wrote:
> > Kevin Rodgers wrote:
> >> kl.vanw@gmail.com wrote:
> >>> Here's my situation. My header files (C++) are located in a dir named
> >>> src/lib. These are the files I edit and are CVS managed. When I run
> >>> 'make', make copies the headers into include/, which my other source
> >>> files include. Then if there was an error in one of the headers, and I
> >>> use 'next-error' in the compilation buffer to open the header, emacs
> >>> opens the file in the include/ directory, but I really need it to open
> >>> the header in src/lib. Can I some how help emacs find the right file?
> >>>
> >>> Unfortunately, I don't have the option of changing the way our makefile
> >>> works or the #include statements.
> >> Try this:
> >>
> >> (add-hook 'find-file-hook
> >> 	  (lambda ()
> >> 	    (let* ((file (file-name-nondirectory buffer-file-name))
> >> 		   (directory (file-name-directory buffer-file-name))
> >> 		   (alternate-file (expand-file-name file "../src/lib")))
> >> 	      (when (and (equal (file-name-nondirectory
> >> 				 (directory-file-name directory))
> >> 				"include")
> >> 			 (file-exists-p alternate-file))
> >> 		(find-alternate-file alternate-file)))))
> >>
> >> --
> >> Kevin
> >
> > I tried that, but it didn't work. I also tried specifing the full paths
> > in the above, but it didn't work either. Did you verify that it works
> > for you?
>
> Ah, it works in Emacs 22.  To make it work in older versions, use
> find-file-hooks (plural) instead of find-file-hook.

Yes, I have Emacs 21.3.1. I couldn't get that to work either. Maybe I'm
messing up the paths. To be more explicit, the files I edit are in
~/project/math/src/lib/math/ and gmake puts them in
~/project/math/include/math/.

--
Kevin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: opening correct source file on compile error
  2006-10-24 12:04       ` kl.vanw
@ 2006-10-24 12:46         ` Burton Samograd
  2006-10-24 14:10           ` kl.vanw
  2006-10-24 21:53         ` Kevin Rodgers
       [not found]         ` <mailman.216.1161726966.27805.help-gnu-emacs@gnu.org>
  2 siblings, 1 reply; 13+ messages in thread
From: Burton Samograd @ 2006-10-24 12:46 UTC (permalink / raw)


kl.vanw@gmail.com writes:

> Kevin Rodgers wrote:
>> kl.vanw@gmail.com wrote:
>> > Kevin Rodgers wrote:
>> >> kl.vanw@gmail.com wrote:
>> >>> Here's my situation. My header files (C++) are located in a dir named
>> >>> src/lib. These are the files I edit and are CVS managed. When I run
>> >>> 'make', make copies the headers into include/, which my other source
>> >>> files include. Then if there was an error in one of the headers, and I
>> >>> use 'next-error' in the compilation buffer to open the header, emacs
>> >>> opens the file in the include/ directory, but I really need it to open
>> >>> the header in src/lib. Can I some how help emacs find the right
>> >>> file?

Might variable this help?  I was having a similar problem and this
fixed it right up.

compilation-search-path Variable:

*List of directories to search for  source files named in error
messages.

-- 
burton samograd                                             kruhft .at. gmail
    generative a/v artwork : http://kruhft.boldlygoingnowhere.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: opening correct source file on compile error
  2006-10-24 12:46         ` Burton Samograd
@ 2006-10-24 14:10           ` kl.vanw
  2006-10-24 22:31             ` Burton Samograd
  0 siblings, 1 reply; 13+ messages in thread
From: kl.vanw @ 2006-10-24 14:10 UTC (permalink / raw)



Burton Samograd wrote:
> kl.vanw@gmail.com writes:
>
> > Kevin Rodgers wrote:
> >> kl.vanw@gmail.com wrote:
> >> > Kevin Rodgers wrote:
> >> >> kl.vanw@gmail.com wrote:
> >> >>> Here's my situation. My header files (C++) are located in a dir named
> >> >>> src/lib. These are the files I edit and are CVS managed. When I run
> >> >>> 'make', make copies the headers into include/, which my other source
> >> >>> files include. Then if there was an error in one of the headers, and I
> >> >>> use 'next-error' in the compilation buffer to open the header, emacs
> >> >>> opens the file in the include/ directory, but I really need it to open
> >> >>> the header in src/lib. Can I some how help emacs find the right
> >> >>> file?
>
> Might variable this help?  I was having a similar problem and this
> fixed it right up.
>
> compilation-search-path Variable:
>
> *List of directories to search for  source files named in error
> messages.
>

That certainly sounds like what I need, but it doesn't work for me. I
think I've spent too much time on the minor annoyance. Thanks for your
help.

--
Kevin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: opening correct source file on compile error
  2006-10-24 12:04       ` kl.vanw
  2006-10-24 12:46         ` Burton Samograd
@ 2006-10-24 21:53         ` Kevin Rodgers
       [not found]         ` <mailman.216.1161726966.27805.help-gnu-emacs@gnu.org>
  2 siblings, 0 replies; 13+ messages in thread
From: Kevin Rodgers @ 2006-10-24 21:53 UTC (permalink / raw)


kl.vanw@gmail.com wrote:
> Kevin Rodgers wrote:
>> Ah, it works in Emacs 22.  To make it work in older versions, use
>> find-file-hooks (plural) instead of find-file-hook.
> 
> Yes, I have Emacs 21.3.1. I couldn't get that to work either. Maybe I'm
> messing up the paths. To be more explicit, the files I edit are in
> ~/project/math/src/lib/math/ and gmake puts them in
> ~/project/math/include/math/.

Ah, you didn't mention that the src/lib and include directories had
their own subdirectory structure, so I assumed otherwise.

(add-hook 'find-file-hooks
  	  (lambda ()
  	    (let ((alternate-file
		   (replace-regexp-in-string "/include/"
					     "/src/lib/"
					     buffer-file-name
					     t ; fixedcase
					     t))) ; literal
  	      (when (and (not (equal buffer-file-name alternate-file))
  			 (file-exists-p alternate-file))
  		(find-alternate-file alternate-file)))))

-- 
Kevin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: opening correct source file on compile error
  2006-10-24 14:10           ` kl.vanw
@ 2006-10-24 22:31             ` Burton Samograd
  0 siblings, 0 replies; 13+ messages in thread
From: Burton Samograd @ 2006-10-24 22:31 UTC (permalink / raw)


kl.vanw@gmail.com writes:

> Burton Samograd wrote:
>> kl.vanw@gmail.com writes:
>>
>> > Kevin Rodgers wrote:
>> >> kl.vanw@gmail.com wrote:
>> >> > Kevin Rodgers wrote:
>> >> >> kl.vanw@gmail.com wrote:
>> >> >>> Here's my situation. My header files (C++) are located in a dir named
>> >> >>> src/lib. These are the files I edit and are CVS managed. When I run
>> >> >>> 'make', make copies the headers into include/, which my other source
>> >> >>> files include. Then if there was an error in one of the headers, and I
>> >> >>> use 'next-error' in the compilation buffer to open the header, emacs
>> >> >>> opens the file in the include/ directory, but I really need it to open
>> >> >>> the header in src/lib. Can I some how help emacs find the right
>> >> >>> file?
>>
>> Might variable this help?  I was having a similar problem and this
>> fixed it right up.
>>
>> compilation-search-path Variable:
>>
>> *List of directories to search for  source files named in error
>> messages.
>>
>
> That certainly sounds like what I need, but it doesn't work for me. I
> think I've spent too much time on the minor annoyance. Thanks for your
> help.

Try this:

(setq compilation-search-path
   '("/path/to/where/you/want/compile/to/load/files"
     "/another/path/to/search"))

-- 
burton samograd                                             kruhft .at. gmail
    generative a/v artwork : http://kruhft.boldlygoingnowhere.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: opening correct source file on compile error
       [not found]         ` <mailman.216.1161726966.27805.help-gnu-emacs@gnu.org>
@ 2006-10-25 11:41           ` kl.vanw
  0 siblings, 0 replies; 13+ messages in thread
From: kl.vanw @ 2006-10-25 11:41 UTC (permalink / raw)



Kevin Rodgers wrote:
> kl.vanw@gmail.com wrote:
> > Kevin Rodgers wrote:
> >> Ah, it works in Emacs 22.  To make it work in older versions, use
> >> find-file-hooks (plural) instead of find-file-hook.
> >
> > Yes, I have Emacs 21.3.1. I couldn't get that to work either. Maybe I'm
> > messing up the paths. To be more explicit, the files I edit are in
> > ~/project/math/src/lib/math/ and gmake puts them in
> > ~/project/math/include/math/.
>
> Ah, you didn't mention that the src/lib and include directories had
> their own subdirectory structure, so I assumed otherwise.
>
> (add-hook 'find-file-hooks
>   	  (lambda ()
>   	    (let ((alternate-file
> 		   (replace-regexp-in-string "/include/"
> 					     "/src/lib/"
> 					     buffer-file-name
> 					     t ; fixedcase
> 					     t))) ; literal
>   	      (when (and (not (equal buffer-file-name alternate-file))
>   			 (file-exists-p alternate-file))
>   		(find-alternate-file alternate-file)))))
> 

That worked. You rock. Thanks.

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2006-10-25 11:41 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-18 16:08 opening correct source file on compile error kl.vanw
2006-10-19 16:14 ` Kevin Rodgers
     [not found] ` <mailman.98.1161274520.2130.help-gnu-emacs@gnu.org>
2006-10-20 14:00   ` kl.vanw
2006-10-23 16:15     ` Kevin Rodgers
     [not found]     ` <mailman.162.1161620177.27805.help-gnu-emacs@gnu.org>
2006-10-24 12:04       ` kl.vanw
2006-10-24 12:46         ` Burton Samograd
2006-10-24 14:10           ` kl.vanw
2006-10-24 22:31             ` Burton Samograd
2006-10-24 21:53         ` Kevin Rodgers
     [not found]         ` <mailman.216.1161726966.27805.help-gnu-emacs@gnu.org>
2006-10-25 11:41           ` kl.vanw
2006-10-23 17:29   ` Ushnish Basu
2006-10-23 20:07     ` Kevin Rodgers
     [not found]     ` <mailman.175.1161634161.27805.help-gnu-emacs@gnu.org>
2006-10-23 22:23       ` Ushnish Basu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).