X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/ffe832ea680b4820f5ff399191f7f2d41350ee2e..43db14bbd823795adfc6f37efcc74abccb77fdd7:/src/editfns.c diff --git a/src/editfns.c b/src/editfns.c index 1551077960..0487ecf470 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -5,10 +5,10 @@ This file is part of GNU Emacs. -GNU Emacs is free software; you can redistribute it and/or modify +GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,9 +16,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. */ +along with GNU Emacs. If not, see . */ #include @@ -482,7 +480,7 @@ get_pos_property (position, prop, object) } } - { /* Now check the text-properties. */ + { /* Now check the text properties. */ int stickiness = text_property_stickiness (prop, position, object); if (stickiness > 0) return Fget_text_property (position, prop, object); @@ -658,7 +656,7 @@ If POS is nil, the value of point is used for POS. */) } DEFUN ("field-string-no-properties", Ffield_string_no_properties, Sfield_string_no_properties, 0, 1, 0, - doc: /* Return the contents of the field around POS, without text-properties. + doc: /* Return the contents of the field around POS, without text properties. A field is a region of text with the same `field' property. If POS is nil, the value of point is used for POS. */) (pos) @@ -1487,7 +1485,7 @@ on systems that do not provide resolution finer than a second. */) make_number ((secs >> 0) & 0xffff), make_number (usecs)); #else /* ! HAVE_GETRUSAGE */ -#if WINDOWSNT +#ifdef WINDOWSNT return w32_get_internal_run_time (); #else /* ! WINDOWSNT */ return Fcurrent_time (); @@ -2011,6 +2009,11 @@ the data it can't find. */) has never been called. */ static char **environbuf; +/* This holds the startup value of the TZ environment variable so it + can be restored if the user calls set-time-zone-rule with a nil + argument. */ +static char *initial_tz; + DEFUN ("set-time-zone-rule", Fset_time_zone_rule, Sset_time_zone_rule, 1, 1, 0, doc: /* Set the local time zone using TZ, a string specifying a time zone rule. If TZ is nil, use implementation-defined default time zone information. @@ -2020,8 +2023,12 @@ If TZ is t, use Universal Time. */) { char *tzstring; + /* When called for the first time, save the original TZ. */ + if (!environbuf) + initial_tz = (char *) getenv ("TZ"); + if (NILP (tz)) - tzstring = 0; + tzstring = initial_tz; else if (EQ (tz, Qt)) tzstring = "UTC0"; else @@ -2031,8 +2038,7 @@ If TZ is t, use Universal Time. */) } set_time_zone_rule (tzstring); - if (environbuf) - free (environbuf); + free (environbuf); environbuf = environ; return Qnil; @@ -3041,7 +3047,7 @@ It returns the number of characters changed. */) if (string_multibyte) { str = tt + string_char_to_byte (table, oc); - nc = STRING_CHAR_AND_LENGTH (str, MAX_MULTIBYTE_LENGTH, + nc = STRING_CHAR_AND_LENGTH (str, MAX_MULTIBYTE_LENGTH, str_len); } else @@ -3513,7 +3519,10 @@ DEFUN ("format", Fformat, Sformat, 1, MANY, 0, doc: /* Format a string out of a format-string and arguments. The first argument is a format control string. The other arguments are substituted into it to make the result, a string. -It may contain %-sequences meaning to substitute the next argument. + +The format control string may contain %-sequences meaning to substitute +the next available argument: + %s means print a string argument. Actually, prints any object, with `princ'. %d means print as number in decimal (%o octal, %x hex). %X is like %x, but uses upper case. @@ -3523,12 +3532,34 @@ It may contain %-sequences meaning to substitute the next argument. or decimal-point notation, whichever uses fewer characters. %c means print a number as a single character. %S means print any object as an s-expression (using `prin1'). - The argument used for %d, %o, %x, %e, %f, %g or %c must be a number. + +The argument used for %d, %o, %x, %e, %f, %g or %c must be a number. Use %% to put a single % into the output. -The basic structure of a %-sequence is - % character -where flags is [-+ #0]+, width is [0-9]+, and precision is .[0-9]+ +A %-sequence may contain optional flag, width, and precision +specifiers, as follows: + + %character + +where flags is [+ #-0]+, width is [0-9]+, and precision is .[0-9]+ + +The + flag character inserts a + before any positive number, while a +space inserts a space before any positive number; these flags only +affect %d, %e, %f, and %g sequences, and the + flag takes precedence. +The # flag means to use an alternate display form for %o, %x, %X, %e, +%f, and %g sequences. The - and 0 flags affect the width specifier, +as described below. + +The width specifier supplies a lower limit for the length of the +printed representation. The padding, if any, normally goes on the +left, but it goes on the right if the - flag is present. The padding +character is normally a space, but it is 0 if the 0 flag is present. +The - flag takes precedence over the 0 flag. + +For %e, %f, and %g sequences, the number after the "." in the +precision specifier says how many decimal places to show; if zero, the +decimal point itself is omitted. For %s and %S, the precision +specifier truncates the string to the given width. usage: (format STRING &rest OBJECTS) */) (nargs, args) @@ -4151,8 +4182,10 @@ Case is ignored if `case-fold-search' is non-nil in the current buffer. */) register Lisp_Object c1, c2; { int i1, i2; - CHECK_NUMBER (c1); - CHECK_NUMBER (c2); + /* Check they're chars, not just integers, otherwise we could get array + bounds violations in DOWNCASE. */ + CHECK_CHARACTER (c1); + CHECK_CHARACTER (c2); if (XINT (c1) == XINT (c2)) return Qt; @@ -4563,6 +4596,7 @@ void syms_of_editfns () { environbuf = 0; + initial_tz = 0; Qbuffer_access_fontify_functions = intern ("buffer-access-fontify-functions");