Re: [eclipse-clp-users] Finding the ECLiPSE startup directory

From: Paulo Moura <pmoura_at_di.ubi.pt>
Date: Mon, 16 Mar 2009 17:51:45 +0000
On 2009/03/16, at 17:26, Kish Shen wrote:

> Paulo Moura wrote:
>> On 2009/03/16, at 14:05, Paulo Moura wrote:
>>> I'm looking for a cross-platform solution to find the startup
>>> directory when running ECLiPSe. On POSIX systems is easy as the
>>> environment variable PWD is usually defined so the solution is  
>>> simply
>>> to use getenv/2. This, of course, doesn't work on Windows. Is there
>>> any way to find the startup directory that would work across all
>>> operating-systems supported by ECLiPSe?
>> Please note that using getcwd/1  doesn't work as this built-in   
>> predicate returns the directory of the file being compiled, not  
>> the  directory from which ECLiPSE was started.
>> Paulo
>>
> Hi Paulo,
>
> getcwd/1 `doesn't work' if you run it within a directive in a file  
> that is compiled. This is because the current directory is changed  
> while you are compiling files. [this is to enable any relative  
> pathnames within your compiled files to behave in the expected way,  
> relative to the file]

Understood. I find this behavior reasonable.

> If you are running ECLiPSe interactively, or running ECLiPSe in  
> batch mode. then issuing getcwd/1 (via -e command line option if you  
> are running batch eclipse) will return the current working  
> directory, which is the startup directory unless you have explicitly  
> changed the directory.
>
> I am not quite sure how useful it is to know the startup directory  
> when you start ECLiPSe on Windows from the start menu -- in this  
> case, I think the initial current working directory is fixed by  
> Windows (My\ Document in the Vista machine I tried). Normally, if  
> you are running some application, you should change the directory to  
> the one you are interested in (e.g. where you application is) when  
> you start ECLiPSe (and if you have embedded ECLiPSe in some external  
> application, then its working directory is that of the external  
> application).


Allow me to briefly describe the problem I'm trying to solve. When  
starting up Logtalk (using ECLiPSE as the back-end Prolog compiler),  
the startup (Prolog) script looks into the current directory for a  
settings file. If not found, it looks for the file in the Logtalk user  
folder. If still not found, the default settings in the back-end  
Prolog compiler configuration file are used. This allows easy, per- 
project customizations of Logtalk settings. It also makes it more  
simple to update Logtalk as there is no longer a need to reapply  
configuration file customizations. For POSIX systems this is easy:

:- (	atom_string('$PWD/settings.pl', String),  
canonical_path_name(String, File), exists(File) ->
		compile('$PWD/settings.pl')
	;	atom_string('$LOGTALKUSER/settings.pl', String),  
canonical_path_name(String, File), exists(File) ->
		compile('$LOGTALKUSER/settings.pl')
	;	true
	).

I would like to also have a similar solution for Windows. Note that  
you can easily create a shortcut for the Windows Start Menu menu item  
that runs ECLiPSe and configure this shortcut to assume as the current  
directory the directory containing the shortcut.

Cheers,

Paulo


-----------------------------------------------------------------
Paulo Jorge Lopes de Moura, PhD
Assistant Professor
Dep. of Computer Science, University of Beira Interior
6201-001 Covilhã, Portugal

Office 4.3  Ext. 3257
Phone: +351 275319891 Fax: +351 275319899
Email: <mailto:pmoura_at_di.ubi.pt>

Home page: <http://www.di.ubi.pt/~pmoura>
Research:  <http://logtalk.org/>
-----------------------------------------------------------------
Received on Mon Mar 16 2009 - 17:52:06 CET

This archive was generated by hypermail 2.2.0 : Thu Feb 02 2012 - 02:31:58 CET