John Beckett wrote:

A.J.Mechelynck wrote:

What about a different function to return, say, the number of
1K blocks (or the number of times 2^n bytes, with a parameter
passed to the function) that a file uses?


Yes, that's a much more general and better idea.

Since there's probably not much need for this, I think that
simplicity would be good. That is, have the function work in a
fixed way with no options.

Re Dr.Chip's LargeFile script: It occurs to me that another
workaround would be to use system() to capture the output of
'ls -l file' or 'dir file' (need an option for which).

Then do some funky editing to calculate the number of digits in
the file length. If more than 9, treat file as large.

I'm playing with a tiny utility to help the LargeFile script.
Bluesky: Its code (64-bit file size) could potentially be
incorporated in Vim. I'll post results in vim-dev.


(I've moved this over to vim-dev)

I've attached a patch to vim 7.1 which extends getfsize(); with the patch, getfsize() takes an optional second parameter which gives one the ability to specify a "unitsize". In other words,

getfsize("eval.c")  -> 478347     (after the patch)

getfsize("eval.c",1000)  -> 479   (truncated upwards)

I'll be awaiting Bram's input before making use of this in LargeFile.vim !

Regards,
Chip Campbell



*** src/o_eval.c        2007-05-25 08:52:12.000000000 -0400
--- src/eval.c  2007-05-25 09:04:43.000000000 -0400
***************
*** 7094,7100 ****
      {"getcwd",                0, 0, f_getcwd},
      {"getfontname",   0, 1, f_getfontname},
      {"getfperm",      1, 1, f_getfperm},
!     {"getfsize",      1, 1, f_getfsize},
      {"getftime",      1, 1, f_getftime},
      {"getftype",      1, 1, f_getftype},
      {"getline",               1, 2, f_getline},
--- 7094,7100 ----
      {"getcwd",                0, 0, f_getcwd},
      {"getfontname",   0, 1, f_getfontname},
      {"getfperm",      1, 1, f_getfperm},
!     {"getfsize",      1, 2, f_getfsize},
      {"getftime",      1, 1, f_getftime},
      {"getftype",      1, 1, f_getftype},
      {"getline",               1, 2, f_getline},
***************
*** 10135,10142 ****
      {
        if (mch_isdir(fname))
            rettv->vval.v_number = 0;
!       else
            rettv->vval.v_number = (varnumber_T)st.st_size;
      }
      else
          rettv->vval.v_number = -1;
--- 10135,10151 ----
      {
        if (mch_isdir(fname))
            rettv->vval.v_number = 0;
!       else if (argvars[1].v_type == VAR_UNKNOWN)
            rettv->vval.v_number = (varnumber_T)st.st_size;
+       else
+       {
+           unsigned long unitsize;
+           unsigned long stsize;
+           unitsize= get_tv_number(&argvars[1]);
+           stsize= st.st_size/unitsize;
+           if(stsize*unitsize < st.st_size) ++stsize;
+           rettv->vval.v_number = (varnumber_T) stsize;
+       }
      }
      else
          rettv->vval.v_number = -1;
*** runtime/doc/o_eval.txt      2007-05-25 09:00:08.000000000 -0400
--- runtime/doc/eval.txt        2007-05-25 09:06:19.000000000 -0400
***************
*** 1615,1621 ****
  getcmdtype()                  String  return the current command-line type
  getcwd()                      String  the current working directory
  getfperm( {fname})            String  file permissions of file {fname}
! getfsize( {fname})            Number  size in bytes of file {fname}
  getfontname( [{name}])                String  name of font being used
  getftime( {fname})            Number  last modification time of file
  getftype( {fname})            String  description of type of file {fname}
--- 1615,1621 ----
  getcmdtype()                  String  return the current command-line type
  getcwd()                      String  the current working directory
  getfperm( {fname})            String  file permissions of file {fname}
! getfsize( {fname} [,unitsize])        Number  size in bytes of file {fname}
  getfontname( [{name}])                String  name of font being used
  getftime( {fname})            Number  last modification time of file
  getftype( {fname})            String  description of type of file {fname}
***************
*** 2819,2827 ****
  getcwd()      The result is a String, which is the name of the current
                working directory.
  
! getfsize({fname})                                     *getfsize()*
                The result is a Number, which is the size in bytes of the
                given file {fname}.
                If {fname} is a directory, 0 is returned.
                If the file {fname} can't be found, -1 is returned.
  
--- 2819,2829 ----
  getcwd()      The result is a String, which is the name of the current
                working directory.
  
! getfsize({fname} [,unitsize])                         *getfsize()*
                The result is a Number, which is the size in bytes of the
                given file {fname}.
+               If unitsize is given, then the file {fname}'s size will be
+               returned in units of size unitsize bytes (truncated up).
                If {fname} is a directory, 0 is returned.
                If the file {fname} can't be found, -1 is returned.
  

Reply via email to