changeset 13912:8d19194c4b1f

cd: behave like unixy shells for "cd" alone, but be Matlab compatible if doing "current_dir = cd" * dirfns.cc (Fcd): Return current directory instead of changing to home directory if nargin == 0 and nargout > 0.
author John W. Eaton <jwe@octave.org>
date Tue, 22 Nov 2011 17:43:30 -0500
parents 1398901839b6
children 521adfd775be
files src/dirfns.cc
diffstat 1 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/dirfns.cc	Wed Nov 23 00:37:45 2011 +0100
+++ b/src/dirfns.cc	Tue Nov 22 17:43:30 2011 -0500
@@ -87,7 +87,7 @@
   return cd_ok;
 }
 
-DEFUN (cd, args, ,
+DEFUN (cd, args, nargout,
   "-*- texinfo -*-\n\
 @deftypefn  {Command} {} cd dir\n\
 @deftypefnx {Command} {} chdir dir\n\
@@ -127,10 +127,18 @@
     }
   else
     {
-      std::string home_dir = octave_env::get_home_directory ();
+      // Behave like Unixy shells for "cd" by itself, but be Matlab
+      // compatible if doing "current_dir = cd".
 
-      if (home_dir.empty () || ! octave_change_to_directory (home_dir))
-        return retval;
+      if (nargout == 0)
+        {
+          std::string home_dir = octave_env::get_home_directory ();
+
+          if (home_dir.empty () || ! octave_change_to_directory (home_dir))
+            return retval;
+        }
+      else
+        retval = octave_value (octave_env::get_current_directory ());
     }
 
   return retval;