annotate src/editfns.c @ 51747:b4fb79bf98ba

Fixed some autoload problems: Try to ensure that the entry for ".c" extension comes before the one for ".C" on auto-mode-alist', to behave better on case insensitive OS:es. Fixed incorrect entries that were added to interpreter-mode-alist'. Moved the autoload directives for AWK to the top level since they aren't recognized anywhere else. Do not use the new AWK mode doc in the autoload form for the old AWK mode.
author Martin Stjernholm <mast@lysator.liu.se>
date Sat, 05 Jul 2003 19:53:33 +0000
parents beceb827c1ce
children 59ba1f5d0a16
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Lisp functions pertaining to editing.
51042
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
2 Copyright (C) 1985,86,87,89,93,94,95,96,97,98, 1999, 2000, 2001, 02, 2003
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
3 Free Software Foundation, Inc.
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
12244
ac7375e60931 Update GPL to version 2.
Karl Heuer <kwzh@gnu.org>
parents: 12063
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
14862
e368c0d12356 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14440
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
e368c0d12356 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 14440
diff changeset
20 Boston, MA 02111-1307, USA. */
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
23 #include <config.h>
2962
79314d830f7d * editfns.c: #include <sys/types.h>, to get time_t for Eggert's
Jim Blandy <jimb@redhat.com>
parents: 2921
diff changeset
24 #include <sys/types.h>
79314d830f7d * editfns.c: #include <sys/types.h>, to get time_t for Eggert's
Jim Blandy <jimb@redhat.com>
parents: 2921
diff changeset
25
372
481e29c1e27e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 330
diff changeset
26 #ifdef VMS
577
53f29271d1b0 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 512
diff changeset
27 #include "vms-pwd.h"
372
481e29c1e27e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 330
diff changeset
28 #else
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 #include <pwd.h>
372
481e29c1e27e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 330
diff changeset
30 #endif
481e29c1e27e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 330
diff changeset
31
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21381
diff changeset
32 #ifdef HAVE_UNISTD_H
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21381
diff changeset
33 #include <unistd.h>
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21381
diff changeset
34 #endif
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21381
diff changeset
35
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43897
diff changeset
36 /* Without this, sprintf on Mac OS Classic will produce wrong
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43897
diff changeset
37 result. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43897
diff changeset
38 #ifdef MAC_OS8
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43897
diff changeset
39 #include <stdio.h>
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43897
diff changeset
40 #endif
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 43897
diff changeset
41
40699
d51d2fa675d0 Move the include of ctype.h after unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
42 #include <ctype.h>
d51d2fa675d0 Move the include of ctype.h after unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
43
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 #include "lisp.h"
1285
d50533e23dff * editfns.c (make_buffer_string): Call copy_intervals_to_string().
Joseph Arceneaux <jla@gnu.org>
parents: 1254
diff changeset
45 #include "intervals.h"
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 #include "buffer.h"
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
47 #include "charset.h"
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
48 #include "coding.h"
38059
0b34b024286d (Fmessage_box): If the frame is not under a window
Eli Zaretskii <eliz@gnu.org>
parents: 37916
diff changeset
49 #include "frame.h"
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 #include "window.h"
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51
577
53f29271d1b0 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 512
diff changeset
52 #include "systime.h"
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53
38519
200c049178cc (toplevel) [STDC_HEADERS]: Include float.h.
Gerd Moellmann <gerd@gnu.org>
parents: 38059
diff changeset
54 #ifdef STDC_HEADERS
200c049178cc (toplevel) [STDC_HEADERS]: Include float.h.
Gerd Moellmann <gerd@gnu.org>
parents: 38059
diff changeset
55 #include <float.h>
200c049178cc (toplevel) [STDC_HEADERS]: Include float.h.
Gerd Moellmann <gerd@gnu.org>
parents: 38059
diff changeset
56 #define MAX_10_EXP DBL_MAX_10_EXP
200c049178cc (toplevel) [STDC_HEADERS]: Include float.h.
Gerd Moellmann <gerd@gnu.org>
parents: 38059
diff changeset
57 #else
200c049178cc (toplevel) [STDC_HEADERS]: Include float.h.
Gerd Moellmann <gerd@gnu.org>
parents: 38059
diff changeset
58 #define MAX_10_EXP 310
200c049178cc (toplevel) [STDC_HEADERS]: Include float.h.
Gerd Moellmann <gerd@gnu.org>
parents: 38059
diff changeset
59 #endif
200c049178cc (toplevel) [STDC_HEADERS]: Include float.h.
Gerd Moellmann <gerd@gnu.org>
parents: 38059
diff changeset
60
19441
2e2b54ae9b9d (NULL): Define, if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 19416
diff changeset
61 #ifndef NULL
2e2b54ae9b9d (NULL): Define, if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 19416
diff changeset
62 #define NULL 0
2e2b54ae9b9d (NULL): Define, if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 19416
diff changeset
63 #endif
2e2b54ae9b9d (NULL): Define, if not defined.
Richard M. Stallman <rms@gnu.org>
parents: 19416
diff changeset
64
31095
e19d38e14720 [USE_CRT_DLL]: Remove unnecessary extern, which screws
Andrew Innes <andrewi@gnu.org>
parents: 31016
diff changeset
65 #ifndef USE_CRT_DLL
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
66 extern char **environ;
31095
e19d38e14720 [USE_CRT_DLL]: Remove unnecessary extern, which screws
Andrew Innes <andrewi@gnu.org>
parents: 31016
diff changeset
67 #endif
e19d38e14720 [USE_CRT_DLL]: Remove unnecessary extern, which screws
Andrew Innes <andrewi@gnu.org>
parents: 31016
diff changeset
68
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
69 extern Lisp_Object make_time P_ ((time_t));
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
70 extern size_t emacs_strftimeu P_ ((char *, size_t, const char *,
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
71 const struct tm *, int));
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
72 static int tm_diff P_ ((struct tm *, struct tm *));
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
73 static void find_field P_ ((Lisp_Object, Lisp_Object, Lisp_Object, int *, Lisp_Object, int *));
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
74 static void update_buffer_properties P_ ((int, int));
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
75 static Lisp_Object region_limit P_ ((int));
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
76 static int lisp_time_argument P_ ((Lisp_Object, time_t *, int *));
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
77 static size_t emacs_memftimeu P_ ((char *, size_t, const char *,
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
78 size_t, const struct tm *, int));
46464
e05dd5b81fc7 (general_insert_function): Insertion function now
Ken Raeburn <raeburn@raeburn.org>
parents: 46447
diff changeset
79 static void general_insert_function P_ ((void (*) (const unsigned char *, int),
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
80 void (*) (Lisp_Object, int, int, int,
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
81 int, int),
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
82 int, int, Lisp_Object *));
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
83 static Lisp_Object subst_char_in_region_unwind P_ ((Lisp_Object));
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
84 static Lisp_Object subst_char_in_region_unwind_1 P_ ((Lisp_Object));
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
85 static void transpose_markers P_ ((int, int, int, int, int, int, int, int));
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
86
31336
3ecef4a7b3cd Remove includes of
Gerd Moellmann <gerd@gnu.org>
parents: 31225
diff changeset
87 #ifdef HAVE_INDEX
3ecef4a7b3cd Remove includes of
Gerd Moellmann <gerd@gnu.org>
parents: 31225
diff changeset
88 extern char *index P_ ((const char *, int));
3ecef4a7b3cd Remove includes of
Gerd Moellmann <gerd@gnu.org>
parents: 31225
diff changeset
89 #endif
3ecef4a7b3cd Remove includes of
Gerd Moellmann <gerd@gnu.org>
parents: 31225
diff changeset
90
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
91 Lisp_Object Vbuffer_access_fontify_functions;
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
92 Lisp_Object Qbuffer_access_fontify_functions;
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
93 Lisp_Object Vbuffer_access_fontified_property;
9657
0fc126c193e7 (Finsert_buffer_substring): Use insert_from_buffer instead of insert.
Karl Heuer <kwzh@gnu.org>
parents: 9572
diff changeset
94
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
95 Lisp_Object Fuser_full_name P_ ((Lisp_Object));
17829
2d98572c57ab Declare Fuser_full_name as Lisp_Object in advance to
Kenichi Handa <handa@m17n.org>
parents: 17115
diff changeset
96
27077
19a664c654ab (Vinhibit_field_text_motion): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 26853
diff changeset
97 /* Non-nil means don't stop at field boundary in text motion commands. */
19a664c654ab (Vinhibit_field_text_motion): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 26853
diff changeset
98
19a664c654ab (Vinhibit_field_text_motion): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 26853
diff changeset
99 Lisp_Object Vinhibit_field_text_motion;
19a664c654ab (Vinhibit_field_text_motion): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 26853
diff changeset
100
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 /* Some static data, and a function to initialize it for each run */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 Lisp_Object Vsystem_name;
12026
505a894d943e (syms_of_editfns): user-login-name renamed from user-name.
Karl Heuer <kwzh@gnu.org>
parents: 11912
diff changeset
104 Lisp_Object Vuser_real_login_name; /* login name of current user ID */
505a894d943e (syms_of_editfns): user-login-name renamed from user-name.
Karl Heuer <kwzh@gnu.org>
parents: 11912
diff changeset
105 Lisp_Object Vuser_full_name; /* full name of current user */
505a894d943e (syms_of_editfns): user-login-name renamed from user-name.
Karl Heuer <kwzh@gnu.org>
parents: 11912
diff changeset
106 Lisp_Object Vuser_login_name; /* user name from LOGNAME or USER */
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
108 /* Symbol for the text property used to mark fields. */
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
109
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
110 Lisp_Object Qfield;
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
111
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
112 /* A special value for Qfield properties. */
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
113
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
114 Lisp_Object Qboundary;
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
115
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
116
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 void
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 init_editfns ()
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 {
330
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
120 char *user_name;
25782
8f59abd3a02b (init_editfns): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents: 25662
diff changeset
121 register unsigned char *p;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 struct passwd *pw; /* password entry for the current user */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 Lisp_Object tem;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 /* Set up system_name even when dumping. */
7907
148ad20d6774 (init_editfns): Call init_system_name instead of get_system_name.
Karl Heuer <kwzh@gnu.org>
parents: 7862
diff changeset
126 init_system_name ();
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 #ifndef CANNOT_DUMP
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 /* Don't bother with this on initial start when just dumping out */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 if (!initialized)
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 return;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 #endif /* not CANNOT_DUMP */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 pw = (struct passwd *) getpwuid (getuid ());
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
135 #ifdef MSDOS
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
136 /* We let the real user name default to "root" because that's quite
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
137 accurate on MSDOG and because it lets Emacs find the init file.
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
138 (The DVX libraries override the Djgpp libraries here.) */
12026
505a894d943e (syms_of_editfns): user-login-name renamed from user-name.
Karl Heuer <kwzh@gnu.org>
parents: 11912
diff changeset
139 Vuser_real_login_name = build_string (pw ? pw->pw_name : "root");
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
140 #else
12026
505a894d943e (syms_of_editfns): user-login-name renamed from user-name.
Karl Heuer <kwzh@gnu.org>
parents: 11912
diff changeset
141 Vuser_real_login_name = build_string (pw ? pw->pw_name : "unknown");
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
142 #endif
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143
330
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
144 /* Get the effective user name, by consulting environment variables,
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
145 or the effective uid if those are unset. */
5907
5fdb226fe9a4 (init_editfns): Look at LOGNAME before USER.
Karl Heuer <kwzh@gnu.org>
parents: 5884
diff changeset
146 user_name = (char *) getenv ("LOGNAME");
330
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
147 if (!user_name)
9801
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
148 #ifdef WINDOWSNT
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
149 user_name = (char *) getenv ("USERNAME"); /* it's USERNAME on NT */
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
150 #else /* WINDOWSNT */
5907
5fdb226fe9a4 (init_editfns): Look at LOGNAME before USER.
Karl Heuer <kwzh@gnu.org>
parents: 5884
diff changeset
151 user_name = (char *) getenv ("USER");
9801
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
152 #endif /* WINDOWSNT */
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 if (!user_name)
330
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
154 {
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
155 pw = (struct passwd *) getpwuid (geteuid ());
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
156 user_name = (char *) (pw ? pw->pw_name : "unknown");
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
157 }
12026
505a894d943e (syms_of_editfns): user-login-name renamed from user-name.
Karl Heuer <kwzh@gnu.org>
parents: 11912
diff changeset
158 Vuser_login_name = build_string (user_name);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159
330
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
160 /* If the user name claimed in the environment vars differs from
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
161 the real uid, use the claimed name to find the full name. */
12026
505a894d943e (syms_of_editfns): user-login-name renamed from user-name.
Karl Heuer <kwzh@gnu.org>
parents: 11912
diff changeset
162 tem = Fstring_equal (Vuser_login_name, Vuser_real_login_name);
16641
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
163 Vuser_full_name = Fuser_full_name (NILP (tem)? make_number (geteuid())
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
164 : Vuser_login_name);
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
165
11447
d51e912495be (init_editfns): Add casts.
Richard M. Stallman <rms@gnu.org>
parents: 11433
diff changeset
166 p = (unsigned char *) getenv ("NAME");
11135
9ab21ef32537 (init_editfns): Use NAME envvar to init user-full-name.
Richard M. Stallman <rms@gnu.org>
parents: 10480
diff changeset
167 if (p)
9ab21ef32537 (init_editfns): Use NAME envvar to init user-full-name.
Richard M. Stallman <rms@gnu.org>
parents: 10480
diff changeset
168 Vuser_full_name = build_string (p);
16683
6802dbd07a80 (Fuser_full_name): Return nil if the specified user doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents: 16648
diff changeset
169 else if (NILP (Vuser_full_name))
6802dbd07a80 (Fuser_full_name): Return nil if the specified user doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents: 16648
diff changeset
170 Vuser_full_name = build_string ("unknown");
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 DEFUN ("char-to-string", Fchar_to_string, Schar_to_string, 1, 1, 0,
40203
9d2aeb5c05b4 (char-to-string): Fix argument names (use CHAR instead of C) and usage.
Pavel Janík <Pavel@Janik.cz>
parents: 40140
diff changeset
174 doc: /* Convert arg CHAR to a string containing that character.
9d2aeb5c05b4 (char-to-string): Fix argument names (use CHAR instead of C) and usage.
Pavel Janík <Pavel@Janik.cz>
parents: 40140
diff changeset
175 usage: (char-to-string CHAR) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
176 (character)
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
177 Lisp_Object character;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 {
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
179 int len;
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
180 unsigned char str[MAX_MULTIBYTE_LENGTH];
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
181
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
182 CHECK_NUMBER (character);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183
35998
5cf8398ba424 (Fchar_to_string): If CHARACTER is less than 256,
Kenichi Handa <handa@m17n.org>
parents: 35845
diff changeset
184 len = (SINGLE_BYTE_CHAR_P (XFASTINT (character))
5cf8398ba424 (Fchar_to_string): If CHARACTER is less than 256,
Kenichi Handa <handa@m17n.org>
parents: 35845
diff changeset
185 ? (*str = (unsigned char)(XFASTINT (character)), 1)
5cf8398ba424 (Fchar_to_string): If CHARACTER is less than 256,
Kenichi Handa <handa@m17n.org>
parents: 35845
diff changeset
186 : char_to_string (XFASTINT (character), str));
21257
205a5aa4aa2f (Fchar_to_string): Use make_string_from_bytes.
Richard M. Stallman <rms@gnu.org>
parents: 21245
diff changeset
187 return make_string_from_bytes (str, 1, len);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 DEFUN ("string-to-char", Fstring_to_char, Sstring_to_char, 1, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
191 doc: /* Convert arg STRING to a character, the first character of that string.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
192 A multibyte character is handled correctly. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
193 (string)
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
194 register Lisp_Object string;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 register Lisp_Object val;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
197 CHECK_STRING (string);
46443
b612fecce4cc (Fstring_to_char): Use string macros instead of Lisp_String fields.
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
198 if (SCHARS (string))
23650
3cc42e65f25b (Fstring_to_char): Don't return a multibyte character
Kenichi Handa <handa@m17n.org>
parents: 23596
diff changeset
199 {
3cc42e65f25b (Fstring_to_char): Don't return a multibyte character
Kenichi Handa <handa@m17n.org>
parents: 23596
diff changeset
200 if (STRING_MULTIBYTE (string))
46443
b612fecce4cc (Fstring_to_char): Use string macros instead of Lisp_String fields.
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
201 XSETFASTINT (val, STRING_CHAR (SDATA (string), SBYTES (string)));
23650
3cc42e65f25b (Fstring_to_char): Don't return a multibyte character
Kenichi Handa <handa@m17n.org>
parents: 23596
diff changeset
202 else
46443
b612fecce4cc (Fstring_to_char): Use string macros instead of Lisp_String fields.
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
203 XSETFASTINT (val, SREF (string, 0));
23650
3cc42e65f25b (Fstring_to_char): Don't return a multibyte character
Kenichi Handa <handa@m17n.org>
parents: 23596
diff changeset
204 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 else
9305
ac077e2a75f1 (Fstring_to_char, Fpoint, Fbufsize, Fpoint_min, Fpoint_max, Ffollowing_char,
Karl Heuer <kwzh@gnu.org>
parents: 9265
diff changeset
206 XSETFASTINT (val, 0);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 return val;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 static Lisp_Object
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
211 buildmark (charpos, bytepos)
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
212 int charpos, bytepos;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 register Lisp_Object mark;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 mark = Fmake_marker ();
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
216 set_marker_both (mark, Qnil, charpos, bytepos);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 return mark;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 DEFUN ("point", Fpoint, Spoint, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
221 doc: /* Return value of point, as an integer.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
222 Beginning of buffer is position (point-min). */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
223 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 Lisp_Object temp;
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15910
diff changeset
226 XSETFASTINT (temp, PT);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 return temp;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 DEFUN ("point-marker", Fpoint_marker, Spoint_marker, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
231 doc: /* Return value of point, as a marker object. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
232 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
234 return buildmark (PT, PT_BYTE);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 int
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 clip_to_bounds (lower, num, upper)
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 int lower, num, upper;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 if (num < lower)
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 return lower;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 else if (num > upper)
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 return upper;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 else
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 return num;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 DEFUN ("goto-char", Fgoto_char, Sgoto_char, 1, 1, "NGoto char: ",
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
250 doc: /* Set point to POSITION, a number or marker.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
251 Beginning of buffer is position (point-min), end is (point-max).
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
252 If the position is in the middle of a multibyte form,
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
253 the actual point is set at the head of the multibyte form
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
254 except in the case that `enable-multibyte-characters' is nil. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
255 (position)
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
256 register Lisp_Object position;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 {
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
258 int pos;
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
259
21226
c8d0df2cbd3d (Fgoto_char): If POSITION is a marker pointing a
Richard M. Stallman <rms@gnu.org>
parents: 21225
diff changeset
260 if (MARKERP (position)
c8d0df2cbd3d (Fgoto_char): If POSITION is a marker pointing a
Richard M. Stallman <rms@gnu.org>
parents: 21225
diff changeset
261 && current_buffer == XMARKER (position)->buffer)
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
262 {
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
263 pos = marker_position (position);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
264 if (pos < BEGV)
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
265 SET_PT_BOTH (BEGV, BEGV_BYTE);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
266 else if (pos > ZV)
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
267 SET_PT_BOTH (ZV, ZV_BYTE);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
268 else
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
269 SET_PT_BOTH (pos, marker_byte_position (position));
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
270
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
271 return position;
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
272 }
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
273
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
274 CHECK_NUMBER_COERCE_MARKER (position);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
276 pos = clip_to_bounds (BEGV, XINT (position), ZV);
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
277 SET_PT (pos);
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
278 return position;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
281
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
282 /* Return the start or end position of the region.
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
283 BEGINNINGP non-zero means return the start.
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
284 If there is no region active, signal an error. */
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
285
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 static Lisp_Object
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 region_limit (beginningp)
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 int beginningp;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 {
4047
e950abdc9ed2 (region_limit): Declare Vmark_even_if_inactive.
Roland McGrath <roland@gnu.org>
parents: 4038
diff changeset
290 extern Lisp_Object Vmark_even_if_inactive; /* Defined in callint.c. */
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
291 Lisp_Object m;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49472
diff changeset
292
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
293 if (!NILP (Vtransient_mark_mode)
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
294 && NILP (Vmark_even_if_inactive)
4038
03a4c3912c13 (region_limit): Don't error if Vmark_even_if_inactive is set. When the
Roland McGrath <roland@gnu.org>
parents: 4019
diff changeset
295 && NILP (current_buffer->mark_active))
03a4c3912c13 (region_limit): Don't error if Vmark_even_if_inactive is set. When the
Roland McGrath <roland@gnu.org>
parents: 4019
diff changeset
296 Fsignal (Qmark_inactive, Qnil);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49472
diff changeset
297
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 m = Fmarker_position (current_buffer->mark);
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
299 if (NILP (m))
43042
63639e690611 (region_limit): Nicer error message.
Richard M. Stallman <rms@gnu.org>
parents: 42484
diff changeset
300 error ("The mark is not set now, so there is no region");
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49472
diff changeset
301
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15910
diff changeset
302 if ((PT < XFASTINT (m)) == beginningp)
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
303 m = make_number (PT);
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
304 return m;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 DEFUN ("region-beginning", Fregion_beginning, Sregion_beginning, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
308 doc: /* Return position of beginning of region, as an integer. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
309 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 {
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
311 return region_limit (1);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 DEFUN ("region-end", Fregion_end, Sregion_end, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
315 doc: /* Return position of end of region, as an integer. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
316 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 {
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
318 return region_limit (0);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 DEFUN ("mark-marker", Fmark_marker, Smark_marker, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
322 doc: /* Return this buffer's mark, as a marker object.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
323 Watch out! Moving this marker changes the mark position.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
324 If you set the marker not to point anywhere, the buffer will have no mark. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
325 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 return current_buffer->mark;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 }
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
329
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
330
48094
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
331 /* Find all the overlays in the current buffer that touch position POS.
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
332 Return the number found, and store them in a vector in VEC
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
333 of length LEN. */
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
334
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
335 static int
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
336 overlays_around (pos, vec, len)
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
337 int pos;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
338 Lisp_Object *vec;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
339 int len;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
340 {
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
341 Lisp_Object tail, overlay, start, end;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
342 int startpos, endpos;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
343 int idx = 0;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
344
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
345 for (tail = current_buffer->overlays_before;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
346 GC_CONSP (tail);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
347 tail = XCDR (tail))
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
348 {
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
349 overlay = XCAR (tail);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
350
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
351 end = OVERLAY_END (overlay);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
352 endpos = OVERLAY_POSITION (end);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
353 if (endpos < pos)
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
354 break;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
355 start = OVERLAY_START (overlay);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
356 startpos = OVERLAY_POSITION (start);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
357 if (startpos <= pos)
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
358 {
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
359 if (idx < len)
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
360 vec[idx] = overlay;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
361 /* Keep counting overlays even if we can't return them all. */
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
362 idx++;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
363 }
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
364 }
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
365
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
366 for (tail = current_buffer->overlays_after;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
367 GC_CONSP (tail);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
368 tail = XCDR (tail))
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
369 {
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
370 overlay = XCAR (tail);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
371
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
372 start = OVERLAY_START (overlay);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
373 startpos = OVERLAY_POSITION (start);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
374 if (pos < startpos)
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
375 break;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
376 end = OVERLAY_END (overlay);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
377 endpos = OVERLAY_POSITION (end);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
378 if (pos <= endpos)
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
379 {
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
380 if (idx < len)
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
381 vec[idx] = overlay;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
382 idx++;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
383 }
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
384 }
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
385
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
386 return idx;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
387 }
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
388
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
389 /* Return the value of property PROP, in OBJECT at POSITION.
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
390 It's the value of PROP that a char inserted at POSITION would get.
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
391 OBJECT is optional and defaults to the current buffer.
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
392 If OBJECT is a buffer, then overlay properties are considered as well as
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
393 text properties.
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
394 If OBJECT is a window, then that window's buffer is used, but
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
395 window-specific overlays are considered only if they are associated
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
396 with OBJECT. */
48134
ef2b87569c38 (get_pos_property): Don't hardcode Qfield.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48115
diff changeset
397 Lisp_Object
48094
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
398 get_pos_property (position, prop, object)
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
399 Lisp_Object position, object;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
400 register Lisp_Object prop;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
401 {
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
402 CHECK_NUMBER_COERCE_MARKER (position);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
403
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
404 if (NILP (object))
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
405 XSETBUFFER (object, current_buffer);
51042
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
406 else if (WINDOWP (object))
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
407 object = XWINDOW (object)->buffer;
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
408
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
409 if (!BUFFERP (object))
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
410 /* pos-property only makes sense in buffers right now, since strings
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
411 have no overlays and no notion of insertion for which stickiness
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
412 could be obeyed. */
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
413 return Fget_text_property (position, prop, object);
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
414 else
48094
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
415 {
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
416 int posn = XINT (position);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
417 int noverlays;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
418 Lisp_Object *overlay_vec, tem;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
419 struct buffer *obuf = current_buffer;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
420
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
421 set_buffer_temp (XBUFFER (object));
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
422
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
423 /* First try with room for 40 overlays. */
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
424 noverlays = 40;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
425 overlay_vec = (Lisp_Object *) alloca (noverlays * sizeof (Lisp_Object));
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
426 noverlays = overlays_around (posn, overlay_vec, noverlays);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
427
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
428 /* If there are more than 40,
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
429 make enough space for all, and try again. */
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
430 if (noverlays > 40)
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
431 {
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
432 overlay_vec = (Lisp_Object *) alloca (noverlays * sizeof (Lisp_Object));
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
433 noverlays = overlays_around (posn, overlay_vec, noverlays);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
434 }
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
435 noverlays = sort_overlays (overlay_vec, noverlays, NULL);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
436
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
437 set_buffer_temp (obuf);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
438
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
439 /* Now check the overlays in order of decreasing priority. */
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
440 while (--noverlays >= 0)
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
441 {
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
442 Lisp_Object ol = overlay_vec[noverlays];
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
443 tem = Foverlay_get (ol, prop);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
444 if (!NILP (tem))
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
445 {
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
446 /* Check the overlay is indeed active at point. */
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
447 Lisp_Object start = OVERLAY_START (ol), finish = OVERLAY_END (ol);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
448 if ((OVERLAY_POSITION (start) == posn
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
449 && XMARKER (start)->insertion_type == 1)
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
450 || (OVERLAY_POSITION (finish) == posn
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
451 && XMARKER (finish)->insertion_type == 0))
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
452 ; /* The overlay will not cover a char inserted at point. */
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
453 else
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
454 {
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
455 return tem;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
456 }
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
457 }
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
458 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49472
diff changeset
459
51042
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
460 { /* Now check the text-properties. */
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
461 int stickiness = text_property_stickiness (prop, position, object);
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
462 if (stickiness > 0)
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
463 return Fget_text_property (position, prop, object);
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
464 else if (stickiness < 0
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
465 && XINT (position) > BUF_BEGV (XBUFFER (object)))
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
466 return Fget_text_property (make_number (XINT (position) - 1),
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
467 prop, object);
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
468 else
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
469 return Qnil;
edeae7524de9 (get_pos_property): Don't assume that `object' = nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50746
diff changeset
470 }
48094
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
471 }
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
472 }
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
473
26389
e2acf63b5403 (Fline_beginning_position): If N is not 1,
Richard M. Stallman <rms@gnu.org>
parents: 26372
diff changeset
474 /* Find the field surrounding POS in *BEG and *END. If POS is nil,
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
475 the value of point is used instead. If BEG or END null,
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
476 means don't store the beginning or end of the field.
26389
e2acf63b5403 (Fline_beginning_position): If N is not 1,
Richard M. Stallman <rms@gnu.org>
parents: 26372
diff changeset
477
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
478 BEG_LIMIT and END_LIMIT serve to limit the ranged of the returned
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
479 results; they do not effect boundary behavior.
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
480
26389
e2acf63b5403 (Fline_beginning_position): If N is not 1,
Richard M. Stallman <rms@gnu.org>
parents: 26372
diff changeset
481 If MERGE_AT_BOUNDARY is nonzero, then if POS is at the very first
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
482 position of a field, then the beginning of the previous field is
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
483 returned instead of the beginning of POS's field (since the end of a
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
484 field is actually also the beginning of the next input field, this
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
485 behavior is sometimes useful). Additionally in the MERGE_AT_BOUNDARY
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
486 true case, if two fields are separated by a field with the special
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
487 value `boundary', and POS lies within it, then the two separated
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
488 fields are considered to be adjacent, and POS between them, when
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
489 finding the beginning and ending of the "merged" field.
26389
e2acf63b5403 (Fline_beginning_position): If N is not 1,
Richard M. Stallman <rms@gnu.org>
parents: 26372
diff changeset
490
e2acf63b5403 (Fline_beginning_position): If N is not 1,
Richard M. Stallman <rms@gnu.org>
parents: 26372
diff changeset
491 Either BEG or END may be 0, in which case the corresponding value
e2acf63b5403 (Fline_beginning_position): If N is not 1,
Richard M. Stallman <rms@gnu.org>
parents: 26372
diff changeset
492 is not stored. */
e2acf63b5403 (Fline_beginning_position): If N is not 1,
Richard M. Stallman <rms@gnu.org>
parents: 26372
diff changeset
493
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
494 static void
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
495 find_field (pos, merge_at_boundary, beg_limit, beg, end_limit, end)
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
496 Lisp_Object pos;
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
497 Lisp_Object merge_at_boundary;
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
498 Lisp_Object beg_limit, end_limit;
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
499 int *beg, *end;
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
500 {
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
501 /* Fields right before and after the point. */
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
502 Lisp_Object before_field, after_field;
26389
e2acf63b5403 (Fline_beginning_position): If N is not 1,
Richard M. Stallman <rms@gnu.org>
parents: 26372
diff changeset
503 /* 1 if POS counts as the start of a field. */
e2acf63b5403 (Fline_beginning_position): If N is not 1,
Richard M. Stallman <rms@gnu.org>
parents: 26372
diff changeset
504 int at_field_start = 0;
e2acf63b5403 (Fline_beginning_position): If N is not 1,
Richard M. Stallman <rms@gnu.org>
parents: 26372
diff changeset
505 /* 1 if POS counts as the end of a field. */
e2acf63b5403 (Fline_beginning_position): If N is not 1,
Richard M. Stallman <rms@gnu.org>
parents: 26372
diff changeset
506 int at_field_end = 0;
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
507
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
508 if (NILP (pos))
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
509 XSETFASTINT (pos, PT);
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
510 else
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
511 CHECK_NUMBER_COERCE_MARKER (pos);
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
512
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
513 after_field
48094
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
514 = get_char_property_and_overlay (pos, Qfield, Qnil, NULL);
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
515 before_field
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
516 = (XFASTINT (pos) > BEGV
32850
6958fdfed738 (find_field):
Miles Bader <miles@gnu.org>
parents: 32517
diff changeset
517 ? get_char_property_and_overlay (make_number (XINT (pos) - 1),
48094
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
518 Qfield, Qnil, NULL)
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
519 : Qnil);
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
520
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
521 /* See if we need to handle the case where MERGE_AT_BOUNDARY is nil
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
522 and POS is at beginning of a field, which can also be interpreted
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
523 as the end of the previous field. Note that the case where if
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
524 MERGE_AT_BOUNDARY is non-nil (see function comment) is actually the
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
525 more natural one; then we avoid treating the beginning of a field
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
526 specially. */
48094
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
527 if (NILP (merge_at_boundary))
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
528 {
48094
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
529 Lisp_Object field = get_pos_property (pos, Qfield, Qnil);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
530 if (!EQ (field, after_field))
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
531 at_field_end = 1;
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
532 if (!EQ (field, before_field))
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
533 at_field_start = 1;
48111
7103ad01172d (find_field): Make an exception for nil fields.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48094
diff changeset
534 if (NILP (field) && at_field_start && at_field_end)
7103ad01172d (find_field): Make an exception for nil fields.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48094
diff changeset
535 /* If an inserted char would have a nil field while the surrounding
7103ad01172d (find_field): Make an exception for nil fields.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48094
diff changeset
536 text is non-nil, we're probably not looking at a
7103ad01172d (find_field): Make an exception for nil fields.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48094
diff changeset
537 zero-length field, but instead at a non-nil field that's
7103ad01172d (find_field): Make an exception for nil fields.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48094
diff changeset
538 not intended for editing (such as comint's prompts). */
7103ad01172d (find_field): Make an exception for nil fields.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48094
diff changeset
539 at_field_end = at_field_start = 0;
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
540 }
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
541
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
542 /* Note about special `boundary' fields:
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
543
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
544 Consider the case where the point (`.') is between the fields `x' and `y':
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
545
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
546 xxxx.yyyy
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
547
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
548 In this situation, if merge_at_boundary is true, we consider the
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
549 `x' and `y' fields as forming one big merged field, and so the end
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
550 of the field is the end of `y'.
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
551
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
552 However, if `x' and `y' are separated by a special `boundary' field
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
553 (a field with a `field' char-property of 'boundary), then we ignore
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
554 this special field when merging adjacent fields. Here's the same
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
555 situation, but with a `boundary' field between the `x' and `y' fields:
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
556
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
557 xxx.BBBByyyy
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
558
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
559 Here, if point is at the end of `x', the beginning of `y', or
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
560 anywhere in-between (within the `boundary' field), we merge all
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
561 three fields and consider the beginning as being the beginning of
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
562 the `x' field, and the end as being the end of the `y' field. */
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
563
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
564 if (beg)
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
565 {
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
566 if (at_field_start)
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
567 /* POS is at the edge of a field, and we should consider it as
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
568 the beginning of the following field. */
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
569 *beg = XFASTINT (pos);
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
570 else
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
571 /* Find the previous field boundary. */
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
572 {
48094
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
573 Lisp_Object p = pos;
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
574 if (!NILP (merge_at_boundary) && EQ (before_field, Qboundary))
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
575 /* Skip a `boundary' field. */
48094
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
576 p = Fprevious_single_char_property_change (p, Qfield, Qnil,
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
577 beg_limit);
48094
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
578
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
579 p = Fprevious_single_char_property_change (p, Qfield, Qnil,
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
580 beg_limit);
2a8ba962e34d (overlays_around, get_pos_property): New funs.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48020
diff changeset
581 *beg = NILP (p) ? BEGV : XFASTINT (p);
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
582 }
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
583 }
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
584
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
585 if (end)
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
586 {
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
587 if (at_field_end)
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
588 /* POS is at the edge of a field, and we should consider it as
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
589 the end of the previous field. */
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
590 *end = XFASTINT (pos);
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
591 else
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
592 /* Find the next field boundary. */
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
593 {
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
594 if (!NILP (merge_at_boundary) && EQ (after_field, Qboundary))
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
595 /* Skip a `boundary' field. */
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
596 pos = Fnext_single_char_property_change (pos, Qfield, Qnil,
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
597 end_limit);
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
598
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
599 pos = Fnext_single_char_property_change (pos, Qfield, Qnil,
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
600 end_limit);
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
601 *end = NILP (pos) ? ZV : XFASTINT (pos);
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
602 }
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
603 }
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
604 }
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
605
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
606
26629
05dcbc266797 (Fdelete_field): Make it noninteractive. Return nil.
Richard M. Stallman <rms@gnu.org>
parents: 26526
diff changeset
607 DEFUN ("delete-field", Fdelete_field, Sdelete_field, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
608 doc: /* Delete the field surrounding POS.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
609 A field is a region of text with the same `field' property.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
610 If POS is nil, the value of point is used for POS. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
611 (pos)
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
612 Lisp_Object pos;
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
613 {
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
614 int beg, end;
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
615 find_field (pos, Qnil, Qnil, &beg, Qnil, &end);
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
616 if (beg != end)
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
617 del_range (beg, end);
26629
05dcbc266797 (Fdelete_field): Make it noninteractive. Return nil.
Richard M. Stallman <rms@gnu.org>
parents: 26526
diff changeset
618 return Qnil;
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
619 }
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
620
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
621 DEFUN ("field-string", Ffield_string, Sfield_string, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
622 doc: /* Return the contents of the field surrounding POS as a string.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
623 A field is a region of text with the same `field' property.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
624 If POS is nil, the value of point is used for POS. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
625 (pos)
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
626 Lisp_Object pos;
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
627 {
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
628 int beg, end;
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
629 find_field (pos, Qnil, Qnil, &beg, Qnil, &end);
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
630 return make_buffer_string (beg, end, 1);
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
631 }
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
632
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
633 DEFUN ("field-string-no-properties", Ffield_string_no_properties, Sfield_string_no_properties, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
634 doc: /* Return the contents of the field around POS, without text-properties.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
635 A field is a region of text with the same `field' property.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
636 If POS is nil, the value of point is used for POS. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
637 (pos)
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
638 Lisp_Object pos;
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
639 {
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
640 int beg, end;
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
641 find_field (pos, Qnil, Qnil, &beg, Qnil, &end);
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
642 return make_buffer_string (beg, end, 0);
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
643 }
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
644
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
645 DEFUN ("field-beginning", Ffield_beginning, Sfield_beginning, 0, 3, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
646 doc: /* Return the beginning of the field surrounding POS.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
647 A field is a region of text with the same `field' property.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
648 If POS is nil, the value of point is used for POS.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
649 If ESCAPE-FROM-EDGE is non-nil and POS is at the beginning of its
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
650 field, then the beginning of the *previous* field is returned.
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
651 If LIMIT is non-nil, it is a buffer position; if the beginning of the field
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
652 is before LIMIT, then LIMIT will be returned instead. */)
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
653 (pos, escape_from_edge, limit)
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
654 Lisp_Object pos, escape_from_edge, limit;
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
655 {
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
656 int beg;
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
657 find_field (pos, escape_from_edge, limit, &beg, Qnil, 0);
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
658 return make_number (beg);
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
659 }
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
660
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
661 DEFUN ("field-end", Ffield_end, Sfield_end, 0, 3, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
662 doc: /* Return the end of the field surrounding POS.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
663 A field is a region of text with the same `field' property.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
664 If POS is nil, the value of point is used for POS.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
665 If ESCAPE-FROM-EDGE is non-nil and POS is at the end of its field,
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
666 then the end of the *following* field is returned.
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
667 If LIMIT is non-nil, it is a buffer position; if the end of the field
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
668 is after LIMIT, then LIMIT will be returned instead. */)
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
669 (pos, escape_from_edge, limit)
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
670 Lisp_Object pos, escape_from_edge, limit;
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
671 {
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
672 int end;
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
673 find_field (pos, escape_from_edge, Qnil, 0, limit, &end);
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
674 return make_number (end);
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
675 }
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
676
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
677 DEFUN ("constrain-to-field", Fconstrain_to_field, Sconstrain_to_field, 2, 5, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
678 doc: /* Return the position closest to NEW-POS that is in the same field as OLD-POS.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
679
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
680 A field is a region of text with the same `field' property.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
681 If NEW-POS is nil, then the current point is used instead, and set to the
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
682 constrained position if that is different.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
683
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
684 If OLD-POS is at the boundary of two fields, then the allowable
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
685 positions for NEW-POS depends on the value of the optional argument
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
686 ESCAPE-FROM-EDGE: If ESCAPE-FROM-EDGE is nil, then NEW-POS is
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
687 constrained to the field that has the same `field' char-property
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
688 as any new characters inserted at OLD-POS, whereas if ESCAPE-FROM-EDGE
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
689 is non-nil, NEW-POS is constrained to the union of the two adjacent
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
690 fields. Additionally, if two fields are separated by another field with
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
691 the special value `boundary', then any point within this special field is
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
692 also considered to be `on the boundary'.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
693
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
694 If the optional argument ONLY-IN-LINE is non-nil and constraining
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
695 NEW-POS would move it to a different line, NEW-POS is returned
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
696 unconstrained. This useful for commands that move by line, like
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
697 \\[next-line] or \\[beginning-of-line], which should generally respect field boundaries
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
698 only in the case where they can still move to the right line.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
699
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
700 If the optional argument INHIBIT-CAPTURE-PROPERTY is non-nil, and OLD-POS has
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
701 a non-nil property of that name, then any field boundaries are ignored.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
702
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
703 Field boundaries are not noticed if `inhibit-field-text-motion' is non-nil. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
704 (new_pos, old_pos, escape_from_edge, only_in_line, inhibit_capture_property)
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
705 Lisp_Object new_pos, old_pos;
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
706 Lisp_Object escape_from_edge, only_in_line, inhibit_capture_property;
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
707 {
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
708 /* If non-zero, then the original point, before re-positioning. */
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
709 int orig_point = 0;
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
710
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
711 if (NILP (new_pos))
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
712 /* Use the current point, and afterwards, set it. */
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
713 {
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
714 orig_point = PT;
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
715 XSETFASTINT (new_pos, PT);
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
716 }
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
717
27081
f068649f1c28 (Fconstrain_to_field): Don't constrain if
Gerd Moellmann <gerd@gnu.org>
parents: 27077
diff changeset
718 if (NILP (Vinhibit_field_text_motion)
f068649f1c28 (Fconstrain_to_field): Don't constrain if
Gerd Moellmann <gerd@gnu.org>
parents: 27077
diff changeset
719 && !EQ (new_pos, old_pos)
32517
78c3fdea490c (Fconstrain_to_field): Check carefully for field boundaries if either
Miles Bader <miles@gnu.org>
parents: 32420
diff changeset
720 && (!NILP (Fget_char_property (new_pos, Qfield, Qnil))
78c3fdea490c (Fconstrain_to_field): Check carefully for field boundaries if either
Miles Bader <miles@gnu.org>
parents: 32420
diff changeset
721 || !NILP (Fget_char_property (old_pos, Qfield, Qnil)))
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
722 && (NILP (inhibit_capture_property)
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
723 || NILP (Fget_char_property(old_pos, inhibit_capture_property, Qnil))))
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
724 /* NEW_POS is not within the same field as OLD_POS; try to
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
725 move NEW_POS so that it is. */
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
726 {
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
727 int fwd, shortage;
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
728 Lisp_Object field_bound;
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
729
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
730 CHECK_NUMBER_COERCE_MARKER (new_pos);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
731 CHECK_NUMBER_COERCE_MARKER (old_pos);
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
732
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
733 fwd = (XFASTINT (new_pos) > XFASTINT (old_pos));
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
734
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
735 if (fwd)
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
736 field_bound = Ffield_end (old_pos, escape_from_edge, new_pos);
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
737 else
41065
af0215d05281 (find_field): Add BEG_LIMIT and END_LIMIT parameters.
Miles Bader <miles@gnu.org>
parents: 41062
diff changeset
738 field_bound = Ffield_beginning (old_pos, escape_from_edge, new_pos);
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
739
30550
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
740 if (/* See if ESCAPE_FROM_EDGE caused FIELD_BOUND to jump to the
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
741 other side of NEW_POS, which would mean that NEW_POS is
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
742 already acceptable, and it's not necessary to constrain it
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
743 to FIELD_BOUND. */
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
744 ((XFASTINT (field_bound) < XFASTINT (new_pos)) ? fwd : !fwd)
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
745 /* NEW_POS should be constrained, but only if either
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
746 ONLY_IN_LINE is nil (in which case any constraint is OK),
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
747 or NEW_POS and FIELD_BOUND are on the same line (in which
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
748 case the constraint is OK even if ONLY_IN_LINE is non-nil). */
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
749 && (NILP (only_in_line)
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
750 /* This is the ONLY_IN_LINE case, check that NEW_POS and
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
751 FIELD_BOUND are on the same line by seeing whether
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
752 there's an intervening newline or not. */
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
753 || (scan_buffer ('\n',
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
754 XFASTINT (new_pos), XFASTINT (field_bound),
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
755 fwd ? -1 : 1, &shortage, 1),
73040724e653 (Fconstrain_to_field): Fix the conditions for deciding when to constrain
Miles Bader <miles@gnu.org>
parents: 30503
diff changeset
756 shortage != 0)))
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
757 /* Constrain NEW_POS to FIELD_BOUND. */
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
758 new_pos = field_bound;
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
759
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
760 if (orig_point && XFASTINT (new_pos) != orig_point)
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
761 /* The NEW_POS argument was originally nil, so automatically set PT. */
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
762 SET_PT (XFASTINT (new_pos));
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
763 }
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
764
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
765 return new_pos;
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
766 }
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
767
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
768
40042
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
769 DEFUN ("line-beginning-position",
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
770 Fline_beginning_position, Sline_beginning_position, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
771 doc: /* Return the character position of the first character on the current line.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
772 With argument N not nil or 1, move forward N - 1 lines first.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
773 If scan reaches end of buffer, return that position.
40042
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
774
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
775 The scan does not cross a field boundary unless doing so would move
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
776 beyond there to a different line; if N is nil or 1, and scan starts at a
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
777 field boundary, the scan stops as soon as it starts. To ignore field
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
778 boundaries bind `inhibit-field-text-motion' to t.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
779
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
780 This function does not move point. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
781 (n)
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
782 Lisp_Object n;
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
783 {
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
784 int orig, orig_byte, end;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
786 if (NILP (n))
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
787 XSETFASTINT (n, 1);
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
788 else
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
789 CHECK_NUMBER (n);
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
790
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
791 orig = PT;
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
792 orig_byte = PT_BYTE;
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
793 Fforward_line (make_number (XINT (n) - 1));
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
794 end = PT;
25647
947cb0e32a1d (Fline_beginning_position): Handle minibuffer prompt here.
Richard M. Stallman <rms@gnu.org>
parents: 25609
diff changeset
795
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
796 SET_PT_BOTH (orig, orig_byte);
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
797
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
798 /* Return END constrained to the current input field. */
27081
f068649f1c28 (Fconstrain_to_field): Don't constrain if
Gerd Moellmann <gerd@gnu.org>
parents: 27077
diff changeset
799 return Fconstrain_to_field (make_number (end), make_number (orig),
f068649f1c28 (Fconstrain_to_field): Don't constrain if
Gerd Moellmann <gerd@gnu.org>
parents: 27077
diff changeset
800 XINT (n) != 1 ? Qt : Qnil,
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
801 Qt, Qnil);
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
802 }
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
803
40042
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
804 DEFUN ("line-end-position", Fline_end_position, Sline_end_position, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
805 doc: /* Return the character position of the last character on the current line.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
806 With argument N not nil or 1, move forward N - 1 lines first.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
807 If scan reaches end of buffer, return that position.
40042
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
808
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
809 The scan does not cross a field boundary unless doing so would move
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
810 beyond there to a different line; if N is nil or 1, and scan starts at a
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
811 field boundary, the scan stops as soon as it starts. To ignore field
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
812 boundaries bind `inhibit-field-text-motion' to t.
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
813
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
814 This function does not move point. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
815 (n)
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
816 Lisp_Object n;
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
817 {
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
818 int end_pos;
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
819 int orig = PT;
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
820
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
821 if (NILP (n))
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
822 XSETFASTINT (n, 1);
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
823 else
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
824 CHECK_NUMBER (n);
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
825
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
826 end_pos = find_before_next_newline (orig, 0, XINT (n) - (XINT (n) <= 0));
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
827
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
828 /* Return END_POS constrained to the current input field. */
27081
f068649f1c28 (Fconstrain_to_field): Don't constrain if
Gerd Moellmann <gerd@gnu.org>
parents: 27077
diff changeset
829 return Fconstrain_to_field (make_number (end_pos), make_number (orig),
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
830 Qnil, Qt, Qnil);
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
831 }
40042
c9ad5da1f79d (Fline_beginning_position, Fline_end_position): Clarify documentation.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
832
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
833
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834 Lisp_Object
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 save_excursion_save ()
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836 {
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
837 int visible = (XBUFFER (XWINDOW (selected_window)->buffer)
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
838 == current_buffer);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840 return Fcons (Fpoint_marker (),
12982
385a67ad96c3 (save_excursion_save): Pass the new arg to Fcopy_marker.
Richard M. Stallman <rms@gnu.org>
parents: 12973
diff changeset
841 Fcons (Fcopy_marker (current_buffer->mark, Qnil),
2049
a358c97a23e4 (save_excursion_save): Save mark_active of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1916
diff changeset
842 Fcons (visible ? Qt : Qnil,
32420
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
843 Fcons (current_buffer->mark_active,
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
844 selected_window))));
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
847 Lisp_Object
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 save_excursion_restore (info)
15075
e8613675066c (save_excursion_restore): Add gcpros.
Richard M. Stallman <rms@gnu.org>
parents: 15015
diff changeset
849 Lisp_Object info;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850 {
15075
e8613675066c (save_excursion_restore): Add gcpros.
Richard M. Stallman <rms@gnu.org>
parents: 15015
diff changeset
851 Lisp_Object tem, tem1, omark, nmark;
e8613675066c (save_excursion_restore): Add gcpros.
Richard M. Stallman <rms@gnu.org>
parents: 15015
diff changeset
852 struct gcpro gcpro1, gcpro2, gcpro3;
32420
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
853 int visible_p;
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
854
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
855 tem = Fmarker_buffer (XCAR (info));
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856 /* If buffer being returned to is now deleted, avoid error */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857 /* Otherwise could get error here while unwinding to top level
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858 and crash */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 /* In that case, Fmarker_buffer returns nil now. */
488
4fddd0f0fc33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 448
diff changeset
860 if (NILP (tem))
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861 return Qnil;
15075
e8613675066c (save_excursion_restore): Add gcpros.
Richard M. Stallman <rms@gnu.org>
parents: 15015
diff changeset
862
e8613675066c (save_excursion_restore): Add gcpros.
Richard M. Stallman <rms@gnu.org>
parents: 15015
diff changeset
863 omark = nmark = Qnil;
e8613675066c (save_excursion_restore): Add gcpros.
Richard M. Stallman <rms@gnu.org>
parents: 15015
diff changeset
864 GCPRO3 (info, omark, nmark);
e8613675066c (save_excursion_restore): Add gcpros.
Richard M. Stallman <rms@gnu.org>
parents: 15015
diff changeset
865
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
866 Fset_buffer (tem);
32420
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
867
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
868 /* Point marker. */
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
869 tem = XCAR (info);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
870 Fgoto_char (tem);
51670
beceb827c1ce (save_excursion_restore, transpose_markers): Update for new types.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51042
diff changeset
871 unchain_marker (XMARKER (tem));
32420
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
872
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
873 /* Mark marker. */
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
874 info = XCDR (info);
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
875 tem = XCAR (info);
7485
a1b7f72e0ea2 (save_excursion_restore): Don't run activate-mark-hook
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
876 omark = Fmarker_position (current_buffer->mark);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877 Fset_marker (current_buffer->mark, tem, Fcurrent_buffer ());
7485
a1b7f72e0ea2 (save_excursion_restore): Don't run activate-mark-hook
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
878 nmark = Fmarker_position (tem);
51670
beceb827c1ce (save_excursion_restore, transpose_markers): Update for new types.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51042
diff changeset
879 unchain_marker (XMARKER (tem));
32420
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
880
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
881 /* visible */
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
882 info = XCDR (info);
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
883 visible_p = !NILP (XCAR (info));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49472
diff changeset
884
4420
8113d9ba472e (save_excursion_restore): Never make the buffer visible.
Richard M. Stallman <rms@gnu.org>
parents: 4358
diff changeset
885 #if 0 /* We used to make the current buffer visible in the selected window
8113d9ba472e (save_excursion_restore): Never make the buffer visible.
Richard M. Stallman <rms@gnu.org>
parents: 4358
diff changeset
886 if that was true previously. That avoids some anomalies.
8113d9ba472e (save_excursion_restore): Never make the buffer visible.
Richard M. Stallman <rms@gnu.org>
parents: 4358
diff changeset
887 But it creates others, and it wasn't documented, and it is simpler
8113d9ba472e (save_excursion_restore): Never make the buffer visible.
Richard M. Stallman <rms@gnu.org>
parents: 4358
diff changeset
888 and cleaner never to alter the window/buffer connections. */
2049
a358c97a23e4 (save_excursion_save): Save mark_active of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1916
diff changeset
889 tem1 = Fcar (tem);
a358c97a23e4 (save_excursion_save): Save mark_active of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1916
diff changeset
890 if (!NILP (tem1)
1254
c7e7e3438711 * editfns.c (save_excursion_save, save_excursion_restore):
Jim Blandy <jimb@redhat.com>
parents: 1117
diff changeset
891 && current_buffer != XBUFFER (XWINDOW (selected_window)->buffer))
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892 Fswitch_to_buffer (Fcurrent_buffer (), Qnil);
4420
8113d9ba472e (save_excursion_restore): Never make the buffer visible.
Richard M. Stallman <rms@gnu.org>
parents: 4358
diff changeset
893 #endif /* 0 */
2049
a358c97a23e4 (save_excursion_save): Save mark_active of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1916
diff changeset
894
32420
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
895 /* Mark active */
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
896 info = XCDR (info);
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
897 tem = XCAR (info);
2049
a358c97a23e4 (save_excursion_save): Save mark_active of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1916
diff changeset
898 tem1 = current_buffer->mark_active;
32420
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
899 current_buffer->mark_active = tem;
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
900
6206
67c608b0e2f7 (save_excursion_restore): Don't call Vrun_hooks if nil.
Richard M. Stallman <rms@gnu.org>
parents: 5915
diff changeset
901 if (!NILP (Vrun_hooks))
67c608b0e2f7 (save_excursion_restore): Don't call Vrun_hooks if nil.
Richard M. Stallman <rms@gnu.org>
parents: 5915
diff changeset
902 {
7485
a1b7f72e0ea2 (save_excursion_restore): Don't run activate-mark-hook
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
903 /* If mark is active now, and either was not active
a1b7f72e0ea2 (save_excursion_restore): Don't run activate-mark-hook
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
904 or was at a different place, run the activate hook. */
6206
67c608b0e2f7 (save_excursion_restore): Don't call Vrun_hooks if nil.
Richard M. Stallman <rms@gnu.org>
parents: 5915
diff changeset
905 if (! NILP (current_buffer->mark_active))
7485
a1b7f72e0ea2 (save_excursion_restore): Don't run activate-mark-hook
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
906 {
a1b7f72e0ea2 (save_excursion_restore): Don't run activate-mark-hook
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
907 if (! EQ (omark, nmark))
a1b7f72e0ea2 (save_excursion_restore): Don't run activate-mark-hook
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
908 call1 (Vrun_hooks, intern ("activate-mark-hook"));
a1b7f72e0ea2 (save_excursion_restore): Don't run activate-mark-hook
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
909 }
a1b7f72e0ea2 (save_excursion_restore): Don't run activate-mark-hook
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
910 /* If mark has ceased to be active, run deactivate hook. */
6206
67c608b0e2f7 (save_excursion_restore): Don't call Vrun_hooks if nil.
Richard M. Stallman <rms@gnu.org>
parents: 5915
diff changeset
911 else if (! NILP (tem1))
67c608b0e2f7 (save_excursion_restore): Don't call Vrun_hooks if nil.
Richard M. Stallman <rms@gnu.org>
parents: 5915
diff changeset
912 call1 (Vrun_hooks, intern ("deactivate-mark-hook"));
67c608b0e2f7 (save_excursion_restore): Don't call Vrun_hooks if nil.
Richard M. Stallman <rms@gnu.org>
parents: 5915
diff changeset
913 }
32420
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
914
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
915 /* If buffer was visible in a window, and a different window was
34165
3b3a64fbcb05 (save_excursion_restore): Don't move point
Gerd Moellmann <gerd@gnu.org>
parents: 32857
diff changeset
916 selected, and the old selected window is still showing this
3b3a64fbcb05 (save_excursion_restore): Don't move point
Gerd Moellmann <gerd@gnu.org>
parents: 32857
diff changeset
917 buffer, restore point in that window. */
32420
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
918 tem = XCDR (info);
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
919 if (visible_p
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
920 && !EQ (tem, selected_window)
37492
b9cea35cf91f (save_excursion_restore): Don't use XBUFFER on
Gerd Moellmann <gerd@gnu.org>
parents: 37217
diff changeset
921 && (tem1 = XWINDOW (tem)->buffer,
b9cea35cf91f (save_excursion_restore): Don't use XBUFFER on
Gerd Moellmann <gerd@gnu.org>
parents: 37217
diff changeset
922 (/* Window is live... */
b9cea35cf91f (save_excursion_restore): Don't use XBUFFER on
Gerd Moellmann <gerd@gnu.org>
parents: 37217
diff changeset
923 BUFFERP (tem1)
b9cea35cf91f (save_excursion_restore): Don't use XBUFFER on
Gerd Moellmann <gerd@gnu.org>
parents: 37217
diff changeset
924 /* ...and it shows the current buffer. */
b9cea35cf91f (save_excursion_restore): Don't use XBUFFER on
Gerd Moellmann <gerd@gnu.org>
parents: 37217
diff changeset
925 && XBUFFER (tem1) == current_buffer)))
32420
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
926 Fset_window_point (tem, make_number (PT));
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
927
15075
e8613675066c (save_excursion_restore): Add gcpros.
Richard M. Stallman <rms@gnu.org>
parents: 15015
diff changeset
928 UNGCPRO;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
929 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
930 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
931
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
932 DEFUN ("save-excursion", Fsave_excursion, Ssave_excursion, 0, UNEVALLED, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
933 doc: /* Save point, mark, and current buffer; execute BODY; restore those things.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
934 Executes BODY just like `progn'.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
935 The values of point, mark and the current buffer are restored
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
936 even in case of abnormal exit (throw or error).
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
937 The state of activation of the mark is also restored.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
938
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
939 This construct does not save `deactivate-mark', and therefore
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
940 functions that change the buffer will still cause deactivation
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
941 of the mark at the end of the command. To prevent that, bind
40140
9bf80d5fff41 (Fsave_excursion, Fsave_current_buffer)
Miles Bader <miles@gnu.org>
parents: 40131
diff changeset
942 `deactivate-mark' with `let'.
9bf80d5fff41 (Fsave_excursion, Fsave_current_buffer)
Miles Bader <miles@gnu.org>
parents: 40131
diff changeset
943
9bf80d5fff41 (Fsave_excursion, Fsave_current_buffer)
Miles Bader <miles@gnu.org>
parents: 40131
diff changeset
944 usage: (save-excursion &rest BODY) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
945 (args)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946 Lisp_Object args;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 register Lisp_Object val;
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45398
diff changeset
949 int count = SPECPDL_INDEX ();
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 record_unwind_protect (save_excursion_restore, save_excursion_save ());
16298
17304eb73f97 (Fsave_current_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16269
diff changeset
952
17304eb73f97 (Fsave_current_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16269
diff changeset
953 val = Fprogn (args);
17304eb73f97 (Fsave_current_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16269
diff changeset
954 return unbind_to (count, val);
17304eb73f97 (Fsave_current_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16269
diff changeset
955 }
17304eb73f97 (Fsave_current_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16269
diff changeset
956
17304eb73f97 (Fsave_current_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16269
diff changeset
957 DEFUN ("save-current-buffer", Fsave_current_buffer, Ssave_current_buffer, 0, UNEVALLED, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
958 doc: /* Save the current buffer; execute BODY; restore the current buffer.
40140
9bf80d5fff41 (Fsave_excursion, Fsave_current_buffer)
Miles Bader <miles@gnu.org>
parents: 40131
diff changeset
959 Executes BODY just like `progn'.
9bf80d5fff41 (Fsave_excursion, Fsave_current_buffer)
Miles Bader <miles@gnu.org>
parents: 40131
diff changeset
960 usage: (save-current-buffer &rest BODY) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
961 (args)
16298
17304eb73f97 (Fsave_current_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16269
diff changeset
962 Lisp_Object args;
17304eb73f97 (Fsave_current_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16269
diff changeset
963 {
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
964 Lisp_Object val;
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45398
diff changeset
965 int count = SPECPDL_INDEX ();
16298
17304eb73f97 (Fsave_current_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16269
diff changeset
966
20696
cdbe4824e7f1 (Fsave_current_buffer): Use set_buffer_if_live.
Richard M. Stallman <rms@gnu.org>
parents: 20688
diff changeset
967 record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ());
16298
17304eb73f97 (Fsave_current_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16269
diff changeset
968
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
969 val = Fprogn (args);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
970 return unbind_to (count, val);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
971 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972
25608
1cdab17df2b3 (Fbufsize): Accept an extra BUFFER parameter.
Richard M. Stallman <rms@gnu.org>
parents: 25507
diff changeset
973 DEFUN ("buffer-size", Fbufsize, Sbufsize, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
974 doc: /* Return the number of characters in the current buffer.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
975 If BUFFER, return the number of characters in that buffer instead. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
976 (buffer)
25608
1cdab17df2b3 (Fbufsize): Accept an extra BUFFER parameter.
Richard M. Stallman <rms@gnu.org>
parents: 25507
diff changeset
977 Lisp_Object buffer;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
978 {
25608
1cdab17df2b3 (Fbufsize): Accept an extra BUFFER parameter.
Richard M. Stallman <rms@gnu.org>
parents: 25507
diff changeset
979 if (NILP (buffer))
1cdab17df2b3 (Fbufsize): Accept an extra BUFFER parameter.
Richard M. Stallman <rms@gnu.org>
parents: 25507
diff changeset
980 return make_number (Z - BEG);
25609
157f0e91232e Clear up previous change.
Richard M. Stallman <rms@gnu.org>
parents: 25608
diff changeset
981 else
157f0e91232e Clear up previous change.
Richard M. Stallman <rms@gnu.org>
parents: 25608
diff changeset
982 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
983 CHECK_BUFFER (buffer);
25609
157f0e91232e Clear up previous change.
Richard M. Stallman <rms@gnu.org>
parents: 25608
diff changeset
984 return make_number (BUF_Z (XBUFFER (buffer))
157f0e91232e Clear up previous change.
Richard M. Stallman <rms@gnu.org>
parents: 25608
diff changeset
985 - BUF_BEG (XBUFFER (buffer)));
157f0e91232e Clear up previous change.
Richard M. Stallman <rms@gnu.org>
parents: 25608
diff changeset
986 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989 DEFUN ("point-min", Fpoint_min, Spoint_min, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
990 doc: /* Return the minimum permissible value of point in the current buffer.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
991 This is 1, unless narrowing (a buffer restriction) is in effect. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
992 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994 Lisp_Object temp;
9305
ac077e2a75f1 (Fstring_to_char, Fpoint, Fbufsize, Fpoint_min, Fpoint_max, Ffollowing_char,
Karl Heuer <kwzh@gnu.org>
parents: 9265
diff changeset
995 XSETFASTINT (temp, BEGV);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996 return temp;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999 DEFUN ("point-min-marker", Fpoint_min_marker, Spoint_min_marker, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1000 doc: /* Return a marker to the minimum permissible value of point in this buffer.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1001 This is the beginning, unless narrowing (a buffer restriction) is in effect. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1002 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1004 return buildmark (BEGV, BEGV_BYTE);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 DEFUN ("point-max", Fpoint_max, Spoint_max, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1008 doc: /* Return the maximum permissible value of point in the current buffer.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1009 This is (1+ (buffer-size)), unless narrowing (a buffer restriction)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1010 is in effect, in which case it is less. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1011 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 Lisp_Object temp;
9305
ac077e2a75f1 (Fstring_to_char, Fpoint, Fbufsize, Fpoint_min, Fpoint_max, Ffollowing_char,
Karl Heuer <kwzh@gnu.org>
parents: 9265
diff changeset
1014 XSETFASTINT (temp, ZV);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 return temp;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 DEFUN ("point-max-marker", Fpoint_max_marker, Spoint_max_marker, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1019 doc: /* Return a marker to the maximum permissible value of point in this buffer.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1020 This is (1+ (buffer-size)), unless narrowing (a buffer restriction)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1021 is in effect, in which case it is less. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1022 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1024 return buildmark (ZV, ZV_BYTE);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026
21821
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1027 DEFUN ("gap-position", Fgap_position, Sgap_position, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1028 doc: /* Return the position of the gap, in the current buffer.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1029 See also `gap-size'. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1030 ()
21821
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1031 {
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1032 Lisp_Object temp;
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1033 XSETFASTINT (temp, GPT);
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1034 return temp;
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1035 }
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1036
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1037 DEFUN ("gap-size", Fgap_size, Sgap_size, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1038 doc: /* Return the size of the current buffer's gap.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1039 See also `gap-position'. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1040 ()
21821
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1041 {
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1042 Lisp_Object temp;
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1043 XSETFASTINT (temp, GAP_SIZE);
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1044 return temp;
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1045 }
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
1046
20861
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
1047 DEFUN ("position-bytes", Fposition_bytes, Sposition_bytes, 1, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1048 doc: /* Return the byte position for character position POSITION.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1049 If POSITION is out of range, the value is nil. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1050 (position)
20879
64d2baa47498 (Fposition_bytes): Declare arg POSITION as Lips_Object.
Kenichi Handa <handa@m17n.org>
parents: 20878
diff changeset
1051 Lisp_Object position;
20861
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
1052 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1053 CHECK_NUMBER_COERCE_MARKER (position);
23132
1c8e0e09aea1 (Fposition_bytes): If the arg POSITION is out of
Kenichi Handa <handa@m17n.org>
parents: 23063
diff changeset
1054 if (XINT (position) < BEG || XINT (position) > Z)
1c8e0e09aea1 (Fposition_bytes): If the arg POSITION is out of
Kenichi Handa <handa@m17n.org>
parents: 23063
diff changeset
1055 return Qnil;
20878
34e0c8eb49eb (Fposition_bytes): Allow marker as arg POSITION. Use
Kenichi Handa <handa@m17n.org>
parents: 20861
diff changeset
1056 return make_number (CHAR_TO_BYTE (XINT (position)));
20861
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
1057 }
22645
e5b201634497 (Fbyte_to_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22199
diff changeset
1058
e5b201634497 (Fbyte_to_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22199
diff changeset
1059 DEFUN ("byte-to-position", Fbyte_to_position, Sbyte_to_position, 1, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1060 doc: /* Return the character position for byte position BYTEPOS.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1061 If BYTEPOS is out of range, the value is nil. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1062 (bytepos)
22645
e5b201634497 (Fbyte_to_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22199
diff changeset
1063 Lisp_Object bytepos;
e5b201634497 (Fbyte_to_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22199
diff changeset
1064 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1065 CHECK_NUMBER (bytepos);
23132
1c8e0e09aea1 (Fposition_bytes): If the arg POSITION is out of
Kenichi Handa <handa@m17n.org>
parents: 23063
diff changeset
1066 if (XINT (bytepos) < BEG_BYTE || XINT (bytepos) > Z_BYTE)
1c8e0e09aea1 (Fposition_bytes): If the arg POSITION is out of
Kenichi Handa <handa@m17n.org>
parents: 23063
diff changeset
1067 return Qnil;
22645
e5b201634497 (Fbyte_to_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22199
diff changeset
1068 return make_number (BYTE_TO_CHAR (XINT (bytepos)));
e5b201634497 (Fbyte_to_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22199
diff changeset
1069 }
20861
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
1070
512
b7a1e4e4e7e6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
1071 DEFUN ("following-char", Ffollowing_char, Sfollowing_char, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1072 doc: /* Return the character following point, as a number.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1073 At the end of the buffer or accessible region, return 0. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1074 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 Lisp_Object temp;
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15910
diff changeset
1077 if (PT >= ZV)
9305
ac077e2a75f1 (Fstring_to_char, Fpoint, Fbufsize, Fpoint_min, Fpoint_max, Ffollowing_char,
Karl Heuer <kwzh@gnu.org>
parents: 9265
diff changeset
1078 XSETFASTINT (temp, 0);
512
b7a1e4e4e7e6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
1079 else
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1080 XSETFASTINT (temp, FETCH_CHAR (PT_BYTE));
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 return temp;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083
512
b7a1e4e4e7e6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
1084 DEFUN ("preceding-char", Fprevious_char, Sprevious_char, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1085 doc: /* Return the character preceding point, as a number.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1086 At the beginning of the buffer or accessible region, return 0. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1087 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 Lisp_Object temp;
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15910
diff changeset
1090 if (PT <= BEGV)
9305
ac077e2a75f1 (Fstring_to_char, Fpoint, Fbufsize, Fpoint_min, Fpoint_max, Ffollowing_char,
Karl Heuer <kwzh@gnu.org>
parents: 9265
diff changeset
1091 XSETFASTINT (temp, 0);
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1092 else if (!NILP (current_buffer->enable_multibyte_characters))
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1093 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1094 int pos = PT_BYTE;
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1095 DEC_POS (pos);
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1096 XSETFASTINT (temp, FETCH_CHAR (pos));
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1097 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 else
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1099 XSETFASTINT (temp, FETCH_BYTE (PT_BYTE - 1));
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 return temp;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 DEFUN ("bobp", Fbobp, Sbobp, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1104 doc: /* Return t if point is at the beginning of the buffer.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1105 If the buffer is narrowed, this means the beginning of the narrowed part. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1106 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 {
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15910
diff changeset
1108 if (PT == BEGV)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 return Qt;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 DEFUN ("eobp", Feobp, Seobp, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1114 doc: /* Return t if point is at the end of the buffer.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1115 If the buffer is narrowed, this means the end of the narrowed part. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1116 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 {
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15910
diff changeset
1118 if (PT == ZV)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 return Qt;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 DEFUN ("bolp", Fbolp, Sbolp, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1124 doc: /* Return t if point is at the beginning of a line. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1125 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1127 if (PT == BEGV || FETCH_BYTE (PT_BYTE - 1) == '\n')
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128 return Qt;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 DEFUN ("eolp", Feolp, Seolp, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1133 doc: /* Return t if point is at the end of a line.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1134 `End of a line' includes point being at the end of the buffer. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1135 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1137 if (PT == ZV || FETCH_BYTE (PT_BYTE) == '\n')
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 return Qt;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141
18252
9c4fb902b6eb (Fchar_after, Fchar_before): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 18240
diff changeset
1142 DEFUN ("char-after", Fchar_after, Schar_after, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1143 doc: /* Return character in current buffer at position POS.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1144 POS is an integer or a marker.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1145 If POS is out of range, the value is nil. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1146 (pos)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1147 Lisp_Object pos;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1149 register int pos_byte;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150
18252
9c4fb902b6eb (Fchar_after, Fchar_before): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 18240
diff changeset
1151 if (NILP (pos))
22199
edca9002c740 (Fchar_after): Make nil fully equivalent to (point) as arg.
Richard M. Stallman <rms@gnu.org>
parents: 21914
diff changeset
1152 {
edca9002c740 (Fchar_after): Make nil fully equivalent to (point) as arg.
Richard M. Stallman <rms@gnu.org>
parents: 21914
diff changeset
1153 pos_byte = PT_BYTE;
23577
36cccf1ba0a9 (Fchar_after): Fix type clashes.
Andreas Schwab <schwab@suse.de>
parents: 23565
diff changeset
1154 XSETFASTINT (pos, PT);
22199
edca9002c740 (Fchar_after): Make nil fully equivalent to (point) as arg.
Richard M. Stallman <rms@gnu.org>
parents: 21914
diff changeset
1155 }
edca9002c740 (Fchar_after): Make nil fully equivalent to (point) as arg.
Richard M. Stallman <rms@gnu.org>
parents: 21914
diff changeset
1156
edca9002c740 (Fchar_after): Make nil fully equivalent to (point) as arg.
Richard M. Stallman <rms@gnu.org>
parents: 21914
diff changeset
1157 if (MARKERP (pos))
21200
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1158 {
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1159 pos_byte = marker_byte_position (pos);
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1160 if (pos_byte < BEGV_BYTE || pos_byte >= ZV_BYTE)
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1161 return Qnil;
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1162 }
18252
9c4fb902b6eb (Fchar_after, Fchar_before): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 18240
diff changeset
1163 else
9c4fb902b6eb (Fchar_after, Fchar_before): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 18240
diff changeset
1164 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1165 CHECK_NUMBER_COERCE_MARKER (pos);
21521
354a7085f1d7 (Fchar_after, Fchar_before): Fix mixing of Lisp_Object
Andreas Schwab <schwab@suse.de>
parents: 21514
diff changeset
1166 if (XINT (pos) < BEGV || XINT (pos) >= ZV)
21200
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1167 return Qnil;
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1168
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1169 pos_byte = CHAR_TO_BYTE (XINT (pos));
18252
9c4fb902b6eb (Fchar_after, Fchar_before): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 18240
diff changeset
1170 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1172 return make_number (FETCH_CHAR (pos_byte));
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 }
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1174
18252
9c4fb902b6eb (Fchar_after, Fchar_before): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 18240
diff changeset
1175 DEFUN ("char-before", Fchar_before, Schar_before, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1176 doc: /* Return character in current buffer preceding position POS.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1177 POS is an integer or a marker.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1178 If POS is out of range, the value is nil. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1179 (pos)
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1180 Lisp_Object pos;
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1181 {
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1182 register Lisp_Object val;
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1183 register int pos_byte;
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1184
18252
9c4fb902b6eb (Fchar_after, Fchar_before): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 18240
diff changeset
1185 if (NILP (pos))
22199
edca9002c740 (Fchar_after): Make nil fully equivalent to (point) as arg.
Richard M. Stallman <rms@gnu.org>
parents: 21914
diff changeset
1186 {
edca9002c740 (Fchar_after): Make nil fully equivalent to (point) as arg.
Richard M. Stallman <rms@gnu.org>
parents: 21914
diff changeset
1187 pos_byte = PT_BYTE;
23577
36cccf1ba0a9 (Fchar_after): Fix type clashes.
Andreas Schwab <schwab@suse.de>
parents: 23565
diff changeset
1188 XSETFASTINT (pos, PT);
22199
edca9002c740 (Fchar_after): Make nil fully equivalent to (point) as arg.
Richard M. Stallman <rms@gnu.org>
parents: 21914
diff changeset
1189 }
edca9002c740 (Fchar_after): Make nil fully equivalent to (point) as arg.
Richard M. Stallman <rms@gnu.org>
parents: 21914
diff changeset
1190
edca9002c740 (Fchar_after): Make nil fully equivalent to (point) as arg.
Richard M. Stallman <rms@gnu.org>
parents: 21914
diff changeset
1191 if (MARKERP (pos))
21200
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1192 {
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1193 pos_byte = marker_byte_position (pos);
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1194
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1195 if (pos_byte <= BEGV_BYTE || pos_byte > ZV_BYTE)
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1196 return Qnil;
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1197 }
18252
9c4fb902b6eb (Fchar_after, Fchar_before): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 18240
diff changeset
1198 else
9c4fb902b6eb (Fchar_after, Fchar_before): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 18240
diff changeset
1199 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1200 CHECK_NUMBER_COERCE_MARKER (pos);
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1201
21521
354a7085f1d7 (Fchar_after, Fchar_before): Fix mixing of Lisp_Object
Andreas Schwab <schwab@suse.de>
parents: 21514
diff changeset
1202 if (XINT (pos) <= BEGV || XINT (pos) > ZV)
21200
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1203 return Qnil;
ea520c42a342 (Fchar_after, Fchar_before): Properly check arg type
Richard M. Stallman <rms@gnu.org>
parents: 21064
diff changeset
1204
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1205 pos_byte = CHAR_TO_BYTE (XINT (pos));
18252
9c4fb902b6eb (Fchar_after, Fchar_before): Make arg optional.
Richard M. Stallman <rms@gnu.org>
parents: 18240
diff changeset
1206 }
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1207
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1208 if (!NILP (current_buffer->enable_multibyte_characters))
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1209 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1210 DEC_POS (pos_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1211 XSETFASTINT (val, FETCH_CHAR (pos_byte));
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1212 }
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1213 else
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1214 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1215 pos_byte--;
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
1216 XSETFASTINT (val, FETCH_BYTE (pos_byte));
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1217 }
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1218 return val;
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1219 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1220
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
1221 DEFUN ("user-login-name", Fuser_login_name, Suser_login_name, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1222 doc: /* Return the name under which the user logged in, as a string.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1223 This is based on the effective uid, not the real uid.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1224 Also, if the environment variable LOGNAME or USER is set,
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1225 that determines the value of this function.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1226
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1227 If optional argument UID is an integer, return the login name of the user
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1228 with that uid, or nil if there is no such user. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1229 (uid)
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
1230 Lisp_Object uid;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231 {
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
1232 struct passwd *pw;
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
1233
9520
5187a4159d16 (Fuser_login_name, Fuser_real_login_name):
Richard M. Stallman <rms@gnu.org>
parents: 9305
diff changeset
1234 /* Set up the user name info if we didn't do it before.
5187a4159d16 (Fuser_login_name, Fuser_real_login_name):
Richard M. Stallman <rms@gnu.org>
parents: 9305
diff changeset
1235 (That can happen if Emacs is dumpable
5187a4159d16 (Fuser_login_name, Fuser_real_login_name):
Richard M. Stallman <rms@gnu.org>
parents: 9305
diff changeset
1236 but you decide to run `temacs -l loadup' and not dump. */
12026
505a894d943e (syms_of_editfns): user-login-name renamed from user-name.
Karl Heuer <kwzh@gnu.org>
parents: 11912
diff changeset
1237 if (INTEGERP (Vuser_login_name))
9520
5187a4159d16 (Fuser_login_name, Fuser_real_login_name):
Richard M. Stallman <rms@gnu.org>
parents: 9305
diff changeset
1238 init_editfns ();
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
1239
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
1240 if (NILP (uid))
12026
505a894d943e (syms_of_editfns): user-login-name renamed from user-name.
Karl Heuer <kwzh@gnu.org>
parents: 11912
diff changeset
1241 return Vuser_login_name;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
1242
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1243 CHECK_NUMBER (uid);
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
1244 pw = (struct passwd *) getpwuid (XINT (uid));
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9520
diff changeset
1245 return (pw ? build_string (pw->pw_name) : Qnil);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1246 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1247
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1248 DEFUN ("user-real-login-name", Fuser_real_login_name, Suser_real_login_name,
40981
fee88c193206 (Fuser_real_login_name): Reindent.
Pavel Janík <Pavel@Janik.cz>
parents: 40699
diff changeset
1249 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1250 doc: /* Return the name of the user's real uid, as a string.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1251 This ignores the environment variables LOGNAME and USER, so it differs from
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1252 `user-login-name' when running under `su'. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1253 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1254 {
9520
5187a4159d16 (Fuser_login_name, Fuser_real_login_name):
Richard M. Stallman <rms@gnu.org>
parents: 9305
diff changeset
1255 /* Set up the user name info if we didn't do it before.
5187a4159d16 (Fuser_login_name, Fuser_real_login_name):
Richard M. Stallman <rms@gnu.org>
parents: 9305
diff changeset
1256 (That can happen if Emacs is dumpable
5187a4159d16 (Fuser_login_name, Fuser_real_login_name):
Richard M. Stallman <rms@gnu.org>
parents: 9305
diff changeset
1257 but you decide to run `temacs -l loadup' and not dump. */
12026
505a894d943e (syms_of_editfns): user-login-name renamed from user-name.
Karl Heuer <kwzh@gnu.org>
parents: 11912
diff changeset
1258 if (INTEGERP (Vuser_login_name))
9520
5187a4159d16 (Fuser_login_name, Fuser_real_login_name):
Richard M. Stallman <rms@gnu.org>
parents: 9305
diff changeset
1259 init_editfns ();
12026
505a894d943e (syms_of_editfns): user-login-name renamed from user-name.
Karl Heuer <kwzh@gnu.org>
parents: 11912
diff changeset
1260 return Vuser_real_login_name;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1261 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1262
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263 DEFUN ("user-uid", Fuser_uid, Suser_uid, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1264 doc: /* Return the effective uid of Emacs.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1265 Value is an integer or float, depending on the value. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1266 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1267 {
39774
b34a792f4234 (Fuser_uid, Fuser_real_uid): Use make_fixnum_or_float.
Gerd Moellmann <gerd@gnu.org>
parents: 39720
diff changeset
1268 return make_fixnum_or_float (geteuid ());
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271 DEFUN ("user-real-uid", Fuser_real_uid, Suser_real_uid, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1272 doc: /* Return the real uid of Emacs.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1273 Value is an integer or float, depending on the value. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1274 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 {
39774
b34a792f4234 (Fuser_uid, Fuser_real_uid): Use make_fixnum_or_float.
Gerd Moellmann <gerd@gnu.org>
parents: 39720
diff changeset
1276 return make_fixnum_or_float (getuid ());
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
1279 DEFUN ("user-full-name", Fuser_full_name, Suser_full_name, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1280 doc: /* Return the full name of the user logged in, as a string.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1281 If the full name corresponding to Emacs's userid is not known,
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1282 return "unknown".
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1283
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1284 If optional argument UID is an integer or float, return the full name
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1285 of the user with that uid, or nil if there is no such user.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1286 If UID is a string, return the full name of the user with that login
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1287 name, or nil if there is no such user. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1288 (uid)
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
1289 Lisp_Object uid;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1290 {
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
1291 struct passwd *pw;
18661
537522d5e6d8 (Fuser_full_name): Declare p, q and r as unsigned char *.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
1292 register unsigned char *p, *q;
16641
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1293 Lisp_Object full;
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
1294
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
1295 if (NILP (uid))
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1296 return Vuser_full_name;
16641
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1297 else if (NUMBERP (uid))
39774
b34a792f4234 (Fuser_uid, Fuser_real_uid): Use make_fixnum_or_float.
Gerd Moellmann <gerd@gnu.org>
parents: 39720
diff changeset
1298 pw = (struct passwd *) getpwuid ((uid_t) XFLOATINT (uid));
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1299 else if (STRINGP (uid))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1300 pw = (struct passwd *) getpwnam (SDATA (uid));
16641
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1301 else
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1302 error ("Invalid UID specification");
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
1303
16641
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1304 if (!pw)
16683
6802dbd07a80 (Fuser_full_name): Return nil if the specified user doesn't exist.
Richard M. Stallman <rms@gnu.org>
parents: 16648
diff changeset
1305 return Qnil;
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1306
16641
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1307 p = (unsigned char *) USER_FULL_NAME;
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1308 /* Chop off everything after the first comma. */
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1309 q = (unsigned char *) index (p, ',');
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1310 full = make_string (p, q ? q - p : strlen (p));
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1311
16641
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1312 #ifdef AMPERSAND_FULL_NAME
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1313 p = SDATA (full);
16641
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1314 q = (unsigned char *) index (p, '&');
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1315 /* Substitute the login name for the &, upcasing the first character. */
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1316 if (q)
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1317 {
18661
537522d5e6d8 (Fuser_full_name): Declare p, q and r as unsigned char *.
Richard M. Stallman <rms@gnu.org>
parents: 18613
diff changeset
1318 register unsigned char *r;
16641
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1319 Lisp_Object login;
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1320
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1321 login = Fuser_login_name (make_number (pw->pw_uid));
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1322 r = (unsigned char *) alloca (strlen (p) + SCHARS (login) + 1);
16641
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1323 bcopy (p, r, q - p);
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1324 r[q - p] = 0;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1325 strcat (r, SDATA (login));
16641
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1326 r[q - p] = UPCASE (r[q - p]);
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1327 strcat (r, q + 1);
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1328 full = build_string (r);
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1329 }
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1330 #endif /* AMPERSAND_FULL_NAME */
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1331
2103a88cc61f (Fuser_full_name): Accept a string (the login name) as
Richard M. Stallman <rms@gnu.org>
parents: 16639
diff changeset
1332 return full;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1333 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335 DEFUN ("system-name", Fsystem_name, Ssystem_name, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1336 doc: /* Return the name of the machine you are running on, as a string. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1337 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1338 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1339 return Vsystem_name;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1340 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1341
7907
148ad20d6774 (init_editfns): Call init_system_name instead of get_system_name.
Karl Heuer <kwzh@gnu.org>
parents: 7862
diff changeset
1342 /* For the benefit of callers who don't want to include lisp.h */
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
1343
7907
148ad20d6774 (init_editfns): Call init_system_name instead of get_system_name.
Karl Heuer <kwzh@gnu.org>
parents: 7862
diff changeset
1344 char *
148ad20d6774 (init_editfns): Call init_system_name instead of get_system_name.
Karl Heuer <kwzh@gnu.org>
parents: 7862
diff changeset
1345 get_system_name ()
148ad20d6774 (init_editfns): Call init_system_name instead of get_system_name.
Karl Heuer <kwzh@gnu.org>
parents: 7862
diff changeset
1346 {
18756
751f531e5a20 (get_system_name): Don't crash if Vsystem_name does not contain a string.
Richard M. Stallman <rms@gnu.org>
parents: 18745
diff changeset
1347 if (STRINGP (Vsystem_name))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1348 return (char *) SDATA (Vsystem_name);
18756
751f531e5a20 (get_system_name): Don't crash if Vsystem_name does not contain a string.
Richard M. Stallman <rms@gnu.org>
parents: 18745
diff changeset
1349 else
751f531e5a20 (get_system_name): Don't crash if Vsystem_name does not contain a string.
Richard M. Stallman <rms@gnu.org>
parents: 18745
diff changeset
1350 return "";
7907
148ad20d6774 (init_editfns): Call init_system_name instead of get_system_name.
Karl Heuer <kwzh@gnu.org>
parents: 7862
diff changeset
1351 }
148ad20d6774 (init_editfns): Call init_system_name instead of get_system_name.
Karl Heuer <kwzh@gnu.org>
parents: 7862
diff changeset
1352
5373
a70b89d2d6bb (Femacs_pid): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5242
diff changeset
1353 DEFUN ("emacs-pid", Femacs_pid, Semacs_pid, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1354 doc: /* Return the process ID of Emacs, as an integer. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1355 ()
5373
a70b89d2d6bb (Femacs_pid): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5242
diff changeset
1356 {
a70b89d2d6bb (Femacs_pid): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5242
diff changeset
1357 return make_number (getpid ());
a70b89d2d6bb (Femacs_pid): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5242
diff changeset
1358 }
a70b89d2d6bb (Femacs_pid): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5242
diff changeset
1359
448
129e6320092c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 372
diff changeset
1360 DEFUN ("current-time", Fcurrent_time, Scurrent_time, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1361 doc: /* Return the current time, as the number of seconds since 1970-01-01 00:00:00.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1362 The time is returned as a list of three integers. The first has the
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1363 most significant 16 bits of the seconds, while the second has the
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1364 least significant 16 bits. The third integer gives the microsecond
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1365 count.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1366
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1367 The microsecond count is zero on systems that do not provide
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1368 resolution finer than a second. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1369 ()
448
129e6320092c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 372
diff changeset
1370 {
577
53f29271d1b0 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 512
diff changeset
1371 EMACS_TIME t;
53f29271d1b0 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 512
diff changeset
1372 Lisp_Object result[3];
53f29271d1b0 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 512
diff changeset
1373
53f29271d1b0 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 512
diff changeset
1374 EMACS_GET_TIME (t);
9265
e44908d7323b (Fcurrent_time, Fformat): Use new accessor macros instead of calling XSET
Karl Heuer <kwzh@gnu.org>
parents: 9163
diff changeset
1375 XSETINT (result[0], (EMACS_SECS (t) >> 16) & 0xffff);
e44908d7323b (Fcurrent_time, Fformat): Use new accessor macros instead of calling XSET
Karl Heuer <kwzh@gnu.org>
parents: 9163
diff changeset
1376 XSETINT (result[1], (EMACS_SECS (t) >> 0) & 0xffff);
e44908d7323b (Fcurrent_time, Fformat): Use new accessor macros instead of calling XSET
Karl Heuer <kwzh@gnu.org>
parents: 9163
diff changeset
1377 XSETINT (result[2], EMACS_USECS (t));
577
53f29271d1b0 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 512
diff changeset
1378
53f29271d1b0 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 512
diff changeset
1379 return Flist (3, result);
448
129e6320092c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 372
diff changeset
1380 }
129e6320092c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 372
diff changeset
1381
129e6320092c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 372
diff changeset
1382
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1383 static int
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1384 lisp_time_argument (specified_time, result, usec)
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1385 Lisp_Object specified_time;
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1386 time_t *result;
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1387 int *usec;
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1388 {
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1389 if (NILP (specified_time))
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1390 {
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1391 if (usec)
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1392 {
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1393 EMACS_TIME t;
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1394
30503
fef49230e1aa (lisp_time_argument): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 30480
diff changeset
1395 EMACS_GET_TIME (t);
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1396 *usec = EMACS_USECS (t);
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1397 *result = EMACS_SECS (t);
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1398 return 1;
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1399 }
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1400 else
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1401 return time (result) != -1;
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1402 }
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1403 else
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1404 {
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1405 Lisp_Object high, low;
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1406 high = Fcar (specified_time);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1407 CHECK_NUMBER (high);
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1408 low = Fcdr (specified_time);
9163
41fe5f636879 (lisp_time_argument, Finsert, Finsert_and_inherit, Finsert_before_markers,
Karl Heuer <kwzh@gnu.org>
parents: 9154
diff changeset
1409 if (CONSP (low))
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1410 {
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1411 if (usec)
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1412 {
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1413 Lisp_Object usec_l = Fcdr (low);
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1414 if (CONSP (usec_l))
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1415 usec_l = Fcar (usec_l);
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1416 if (NILP (usec_l))
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1417 *usec = 0;
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1418 else
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1419 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1420 CHECK_NUMBER (usec_l);
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1421 *usec = XINT (usec_l);
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1422 }
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1423 }
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1424 low = Fcar (low);
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1425 }
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1426 else if (usec)
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1427 *usec = 0;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1428 CHECK_NUMBER (low);
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1429 *result = (XINT (high) << 16) + (XINT (low) & 0xffff);
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1430 return *result >> 16 == XINT (high);
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1431 }
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1432 }
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1433
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1434 DEFUN ("float-time", Ffloat_time, Sfloat_time, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1435 doc: /* Return the current time, as a float number of seconds since the epoch.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1436 If an argument is given, it specifies a time to convert to float
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1437 instead of the current time. The argument should have the forms:
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1438 (HIGH . LOW) or (HIGH LOW USEC) or (HIGH LOW . USEC).
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1439 Thus, you can use times obtained from `current-time'
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1440 and from `file-attributes'.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1441
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1442 WARNING: Since the result is floating point, it may not be exact.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1443 Do not use this function if precise time stamps are required. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1444 (specified_time)
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1445 Lisp_Object specified_time;
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1446 {
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1447 time_t sec;
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1448 int usec;
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1449
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1450 if (! lisp_time_argument (specified_time, &sec, &usec))
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1451 error ("Invalid time specification");
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1452
37046
a9b2639dd045 (Ffloat_time): Fix off-by-factor-of-10 bug in the
Gerd Moellmann <gerd@gnu.org>
parents: 36479
diff changeset
1453 return make_float ((sec * 1e6 + usec) / 1e6);
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1454 }
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1455
23213
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1456 /* Write information into buffer S of size MAXSIZE, according to the
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1457 FORMAT of length FORMAT_LEN, using time information taken from *TP.
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1458 Default to Universal Time if UT is nonzero, local time otherwise.
23213
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1459 Return the number of bytes written, not including the terminating
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1460 '\0'. If S is NULL, nothing will be written anywhere; so to
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1461 determine how many bytes would be written, use NULL for S and
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1462 ((size_t) -1) for MAXSIZE.
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1463
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1464 This function behaves like emacs_strftimeu, except it allows null
23213
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1465 bytes in FORMAT. */
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1466 static size_t
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1467 emacs_memftimeu (s, maxsize, format, format_len, tp, ut)
23213
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1468 char *s;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1469 size_t maxsize;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1470 const char *format;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1471 size_t format_len;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1472 const struct tm *tp;
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1473 int ut;
23213
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1474 {
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1475 size_t total = 0;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1476
23218
90e5d916ebd9 Add a comment to emacs_memftime, explaining why it needs to loop.
Paul Eggert <eggert@twinsun.com>
parents: 23213
diff changeset
1477 /* Loop through all the null-terminated strings in the format
90e5d916ebd9 Add a comment to emacs_memftime, explaining why it needs to loop.
Paul Eggert <eggert@twinsun.com>
parents: 23213
diff changeset
1478 argument. Normally there's just one null-terminated string, but
90e5d916ebd9 Add a comment to emacs_memftime, explaining why it needs to loop.
Paul Eggert <eggert@twinsun.com>
parents: 23213
diff changeset
1479 there can be arbitrarily many, concatenated together, if the
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1480 format contains '\0' bytes. emacs_strftimeu stops at the first
23218
90e5d916ebd9 Add a comment to emacs_memftime, explaining why it needs to loop.
Paul Eggert <eggert@twinsun.com>
parents: 23213
diff changeset
1481 '\0' byte so we must invoke it separately for each such string. */
23213
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1482 for (;;)
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1483 {
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1484 size_t len;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1485 size_t result;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1486
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1487 if (s)
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1488 s[0] = '\1';
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1489
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1490 result = emacs_strftimeu (s, maxsize, format, tp, ut);
23213
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1491
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1492 if (s)
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1493 {
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1494 if (result == 0 && s[0] != '\0')
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1495 return 0;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1496 s += result + 1;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1497 }
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1498
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1499 maxsize -= result + 1;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1500 total += result;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1501 len = strlen (format);
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1502 if (len == format_len)
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1503 return total;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1504 total++;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1505 format += len + 1;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1506 format_len -= len + 1;
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1507 }
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1508 }
3bfc1e9b0377 (emacs_memftime): New function.
Paul Eggert <eggert@twinsun.com>
parents: 23211
diff changeset
1509
17907
a1f8ff84f3f1 (Fformat_time_string): Doc update.
Richard M. Stallman <rms@gnu.org>
parents: 17829
diff changeset
1510 DEFUN ("format-time-string", Fformat_time_string, Sformat_time_string, 1, 3, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1511 doc: /* Use FORMAT-STRING to format the time TIME, or now if omitted.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1512 TIME is specified as (HIGH LOW . IGNORED) or (HIGH . LOW), as returned by
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1513 `current-time' or `file-attributes'.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1514 The third, optional, argument UNIVERSAL, if non-nil, means describe TIME
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1515 as Universal Time; nil means describe TIME in the local time zone.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1516 The value is a copy of FORMAT-STRING, but with certain constructs replaced
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1517 by text that describes the specified date and time in TIME:
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1518
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1519 %Y is the year, %y within the century, %C the century.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1520 %G is the year corresponding to the ISO week, %g within the century.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1521 %m is the numeric month.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1522 %b and %h are the locale's abbreviated month name, %B the full name.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1523 %d is the day of the month, zero-padded, %e is blank-padded.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1524 %u is the numeric day of week from 1 (Monday) to 7, %w from 0 (Sunday) to 6.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1525 %a is the locale's abbreviated name of the day of week, %A the full name.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1526 %U is the week number starting on Sunday, %W starting on Monday,
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1527 %V according to ISO 8601.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1528 %j is the day of the year.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1529
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1530 %H is the hour on a 24-hour clock, %I is on a 12-hour clock, %k is like %H
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1531 only blank-padded, %l is like %I blank-padded.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1532 %p is the locale's equivalent of either AM or PM.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1533 %M is the minute.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1534 %S is the second.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1535 %Z is the time zone name, %z is the numeric form.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1536 %s is the number of seconds since 1970-01-01 00:00:00 +0000.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1537
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1538 %c is the locale's date and time format.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1539 %x is the locale's "preferred" date format.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1540 %D is like "%m/%d/%y".
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1541
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1542 %R is like "%H:%M", %T is like "%H:%M:%S", %r is like "%I:%M:%S %p".
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1543 %X is the locale's "preferred" time format.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1544
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1545 Finally, %n is a newline, %t is a tab, %% is a literal %.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1546
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1547 Certain flags and modifiers are available with some format controls.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1548 The flags are `_', `-', `^' and `#'. For certain characters X,
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1549 %_X is like %X, but padded with blanks; %-X is like %X,
47763
da8405c812f2 (Fformat_time_string): Doc fix.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 46921
diff changeset
1550 but without padding. %^X is like %X, but with all textual
da8405c812f2 (Fformat_time_string): Doc fix.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 46921
diff changeset
1551 characters up-cased; %#X is like %X, but with letter-case of
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1552 all textual characters reversed.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1553 %NX (where N stands for an integer) is like %X,
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1554 but takes up at least N (a number) positions.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1555 The modifiers are `E' and `O'. For certain characters X,
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1556 %EX is a locale's alternative version of %X;
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1557 %OX is like %X, but uses the locale's number symbols.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1558
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1559 For example, to produce full ISO 8601 format, use "%Y-%m-%dT%T%z". */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1560 (format_string, time, universal)
17907
a1f8ff84f3f1 (Fformat_time_string): Doc update.
Richard M. Stallman <rms@gnu.org>
parents: 17829
diff changeset
1561 Lisp_Object format_string, time, universal;
9154
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1562 {
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1563 time_t value;
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1564 int size;
23198
dddce768cf7a (Fformat_time_string, Fdecode_time, Fcurrent_time_zone):
Paul Eggert <eggert@twinsun.com>
parents: 23197
diff changeset
1565 struct tm *tm;
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1566 int ut = ! NILP (universal);
9154
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1567
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1568 CHECK_STRING (format_string);
9154
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1569
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1570 if (! lisp_time_argument (time, &value, NULL))
9154
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1571 error ("Invalid time specification");
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1572
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1573 format_string = code_convert_string_norecord (format_string,
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1574 Vlocale_coding_system, 1);
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1575
9154
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1576 /* This is probably enough. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1577 size = SBYTES (format_string) * 6 + 50;
9154
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1578
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1579 tm = ut ? gmtime (&value) : localtime (&value);
23198
dddce768cf7a (Fformat_time_string, Fdecode_time, Fcurrent_time_zone):
Paul Eggert <eggert@twinsun.com>
parents: 23197
diff changeset
1580 if (! tm)
dddce768cf7a (Fformat_time_string, Fdecode_time, Fcurrent_time_zone):
Paul Eggert <eggert@twinsun.com>
parents: 23197
diff changeset
1581 error ("Specified time is not representable");
dddce768cf7a (Fformat_time_string, Fdecode_time, Fcurrent_time_zone):
Paul Eggert <eggert@twinsun.com>
parents: 23197
diff changeset
1582
26526
b7438760079b * callproc.c (strerror): Remove decl.
Paul Eggert <eggert@twinsun.com>
parents: 26415
diff changeset
1583 synchronize_system_time_locale ();
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1584
9154
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1585 while (1)
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1586 {
17907
a1f8ff84f3f1 (Fformat_time_string): Doc update.
Richard M. Stallman <rms@gnu.org>
parents: 17829
diff changeset
1587 char *buf = (char *) alloca (size + 1);
a1f8ff84f3f1 (Fformat_time_string): Doc update.
Richard M. Stallman <rms@gnu.org>
parents: 17829
diff changeset
1588 int result;
a1f8ff84f3f1 (Fformat_time_string): Doc update.
Richard M. Stallman <rms@gnu.org>
parents: 17829
diff changeset
1589
19032
84ae0a03a643 (Fformat_time_string): Don't hang if strftime produces
Richard M. Stallman <rms@gnu.org>
parents: 18937
diff changeset
1590 buf[0] = '\1';
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1591 result = emacs_memftimeu (buf, size, SDATA (format_string),
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1592 SBYTES (format_string),
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1593 tm, ut);
19032
84ae0a03a643 (Fformat_time_string): Don't hang if strftime produces
Richard M. Stallman <rms@gnu.org>
parents: 18937
diff changeset
1594 if ((result > 0 && result < size) || (result == 0 && buf[0] == '\0'))
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1595 return code_convert_string_norecord (make_string (buf, result),
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1596 Vlocale_coding_system, 0);
17907
a1f8ff84f3f1 (Fformat_time_string): Doc update.
Richard M. Stallman <rms@gnu.org>
parents: 17829
diff changeset
1597
a1f8ff84f3f1 (Fformat_time_string): Doc update.
Richard M. Stallman <rms@gnu.org>
parents: 17829
diff changeset
1598 /* If buffer was too small, make it bigger and try again. */
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1599 result = emacs_memftimeu (NULL, (size_t) -1,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1600 SDATA (format_string),
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1601 SBYTES (format_string),
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 26058
diff changeset
1602 tm, ut);
17907
a1f8ff84f3f1 (Fformat_time_string): Doc update.
Richard M. Stallman <rms@gnu.org>
parents: 17829
diff changeset
1603 size = result + 1;
9154
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1604 }
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1605 }
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
1606
9801
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1607 DEFUN ("decode-time", Fdecode_time, Sdecode_time, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1608 doc: /* Decode a time value as (SEC MINUTE HOUR DAY MONTH YEAR DOW DST ZONE).
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1609 The optional SPECIFIED-TIME should be a list of (HIGH LOW . IGNORED)
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1610 or (HIGH . LOW), as from `current-time' and `file-attributes', or `nil'
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1611 to use the current time. The list has the following nine members:
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1612 SEC is an integer between 0 and 60; SEC is 60 for a leap second, which
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1613 only some operating systems support. MINUTE is an integer between 0 and 59.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1614 HOUR is an integer between 0 and 23. DAY is an integer between 1 and 31.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1615 MONTH is an integer between 1 and 12. YEAR is an integer indicating the
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1616 four-digit year. DOW is the day of week, an integer between 0 and 6, where
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1617 0 is Sunday. DST is t if daylight savings time is effect, otherwise nil.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1618 ZONE is an integer indicating the number of seconds east of Greenwich.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1619 (Note that Common Lisp has different meanings for DOW and ZONE.) */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1620 (specified_time)
9801
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1621 Lisp_Object specified_time;
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1622 {
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1623 time_t time_spec;
9812
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1624 struct tm save_tm;
9801
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1625 struct tm *decoded_time;
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1626 Lisp_Object list_args[9];
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1627
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1628 if (! lisp_time_argument (specified_time, &time_spec, NULL))
9801
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1629 error ("Invalid time specification");
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1630
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1631 decoded_time = localtime (&time_spec);
23198
dddce768cf7a (Fformat_time_string, Fdecode_time, Fcurrent_time_zone):
Paul Eggert <eggert@twinsun.com>
parents: 23197
diff changeset
1632 if (! decoded_time)
dddce768cf7a (Fformat_time_string, Fdecode_time, Fcurrent_time_zone):
Paul Eggert <eggert@twinsun.com>
parents: 23197
diff changeset
1633 error ("Specified time is not representable");
9812
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1634 XSETFASTINT (list_args[0], decoded_time->tm_sec);
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1635 XSETFASTINT (list_args[1], decoded_time->tm_min);
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1636 XSETFASTINT (list_args[2], decoded_time->tm_hour);
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1637 XSETFASTINT (list_args[3], decoded_time->tm_mday);
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1638 XSETFASTINT (list_args[4], decoded_time->tm_mon + 1);
15757
5ddb082ffebb (Fdecode_time, difftm): Work even if tm_year represents
Richard M. Stallman <rms@gnu.org>
parents: 15334
diff changeset
1639 XSETINT (list_args[5], decoded_time->tm_year + 1900);
9812
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1640 XSETFASTINT (list_args[6], decoded_time->tm_wday);
9801
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1641 list_args[7] = (decoded_time->tm_isdst)? Qt : Qnil;
9812
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1642
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1643 /* Make a copy, in case gmtime modifies the struct. */
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1644 save_tm = *decoded_time;
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1645 decoded_time = gmtime (&time_spec);
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1646 if (decoded_time == 0)
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1647 list_args[8] = Qnil;
bc352c8f079c (Fdecode_time): Fix Lisp_Object vs. integer problems.
Karl Heuer <kwzh@gnu.org>
parents: 9809
diff changeset
1648 else
16269
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1649 XSETINT (list_args[8], tm_diff (&save_tm, decoded_time));
9801
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1650 return Flist (9, list_args);
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1651 }
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
1652
15180
9a22c72359c1 (Fencode_time): Accept MANY args, so as to cope
Richard M. Stallman <rms@gnu.org>
parents: 15075
diff changeset
1653 DEFUN ("encode-time", Fencode_time, Sencode_time, 6, MANY, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1654 doc: /* Convert SECOND, MINUTE, HOUR, DAY, MONTH, YEAR and ZONE to internal time.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1655 This is the reverse operation of `decode-time', which see.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1656 ZONE defaults to the current time zone rule. This can
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1657 be a string or t (as from `set-time-zone-rule'), or it can be a list
40044
7a0668d72687 (text_property_stickiness): Non-rear-non-stickiness doesn't take
Miles Bader <miles@gnu.org>
parents: 40042
diff changeset
1658 \(as from `current-time-zone') or an integer (as from `decode-time')
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1659 applied without consideration for daylight savings time.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1660
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1661 You can pass more than 7 arguments; then the first six arguments
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1662 are used as SECOND through YEAR, and the *last* argument is used as ZONE.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1663 The intervening arguments are ignored.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1664 This feature lets (apply 'encode-time (decode-time ...)) work.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1665
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1666 Out-of-range values for SEC, MINUTE, HOUR, DAY, or MONTH are allowed;
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1667 for example, a DAY of 0 means the day preceding the given month.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1668 Year numbers less than 100 are treated just like other year numbers.
40131
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
1669 If you want them to stand for years in this century, you must do that yourself.
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
1670
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
1671 usage: (encode-time SECOND MINUTE HOUR DAY MONTH YEAR &optional ZONE) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1672 (nargs, args)
15180
9a22c72359c1 (Fencode_time): Accept MANY args, so as to cope
Richard M. Stallman <rms@gnu.org>
parents: 15075
diff changeset
1673 int nargs;
9a22c72359c1 (Fencode_time): Accept MANY args, so as to cope
Richard M. Stallman <rms@gnu.org>
parents: 15075
diff changeset
1674 register Lisp_Object *args;
11402
66d935214d8e (Fencode_time): Use XINT to examine `zone'.
Richard M. Stallman <rms@gnu.org>
parents: 11263
diff changeset
1675 {
11468
772f49d1969d (Fencode_time): Rewrite by Naggum.
Richard M. Stallman <rms@gnu.org>
parents: 11451
diff changeset
1676 time_t time;
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1677 struct tm tm;
16874
0b914fcd97a1 Clean up parentheses.
Richard M. Stallman <rms@gnu.org>
parents: 16683
diff changeset
1678 Lisp_Object zone = (nargs > 6 ? args[nargs - 1] : Qnil);
11402
66d935214d8e (Fencode_time): Use XINT to examine `zone'.
Richard M. Stallman <rms@gnu.org>
parents: 11263
diff changeset
1679
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1680 CHECK_NUMBER (args[0]); /* second */
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1681 CHECK_NUMBER (args[1]); /* minute */
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1682 CHECK_NUMBER (args[2]); /* hour */
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1683 CHECK_NUMBER (args[3]); /* day */
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1684 CHECK_NUMBER (args[4]); /* month */
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1685 CHECK_NUMBER (args[5]); /* year */
11468
772f49d1969d (Fencode_time): Rewrite by Naggum.
Richard M. Stallman <rms@gnu.org>
parents: 11451
diff changeset
1686
15180
9a22c72359c1 (Fencode_time): Accept MANY args, so as to cope
Richard M. Stallman <rms@gnu.org>
parents: 15075
diff changeset
1687 tm.tm_sec = XINT (args[0]);
9a22c72359c1 (Fencode_time): Accept MANY args, so as to cope
Richard M. Stallman <rms@gnu.org>
parents: 15075
diff changeset
1688 tm.tm_min = XINT (args[1]);
9a22c72359c1 (Fencode_time): Accept MANY args, so as to cope
Richard M. Stallman <rms@gnu.org>
parents: 15075
diff changeset
1689 tm.tm_hour = XINT (args[2]);
9a22c72359c1 (Fencode_time): Accept MANY args, so as to cope
Richard M. Stallman <rms@gnu.org>
parents: 15075
diff changeset
1690 tm.tm_mday = XINT (args[3]);
9a22c72359c1 (Fencode_time): Accept MANY args, so as to cope
Richard M. Stallman <rms@gnu.org>
parents: 15075
diff changeset
1691 tm.tm_mon = XINT (args[4]) - 1;
9a22c72359c1 (Fencode_time): Accept MANY args, so as to cope
Richard M. Stallman <rms@gnu.org>
parents: 15075
diff changeset
1692 tm.tm_year = XINT (args[5]) - 1900;
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1693 tm.tm_isdst = -1;
11468
772f49d1969d (Fencode_time): Rewrite by Naggum.
Richard M. Stallman <rms@gnu.org>
parents: 11451
diff changeset
1694
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1695 if (CONSP (zone))
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1696 zone = Fcar (zone);
11468
772f49d1969d (Fencode_time): Rewrite by Naggum.
Richard M. Stallman <rms@gnu.org>
parents: 11451
diff changeset
1697 if (NILP (zone))
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1698 time = mktime (&tm);
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1699 else
11468
772f49d1969d (Fencode_time): Rewrite by Naggum.
Richard M. Stallman <rms@gnu.org>
parents: 11451
diff changeset
1700 {
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1701 char tzbuf[100];
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1702 char *tzstring;
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1703 char **oldenv = environ, **newenv;
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1704
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18605
diff changeset
1705 if (EQ (zone, Qt))
15910
8cd4f2fd5525 (Fencode_time, Fset_time_zone_rule): Use UTC if the zone is t.
Erik Naggum <erik@naggum.no>
parents: 15841
diff changeset
1706 tzstring = "UTC0";
8cd4f2fd5525 (Fencode_time, Fset_time_zone_rule): Use UTC if the zone is t.
Erik Naggum <erik@naggum.no>
parents: 15841
diff changeset
1707 else if (STRINGP (zone))
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1708 tzstring = (char *) SDATA (zone);
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1709 else if (INTEGERP (zone))
11468
772f49d1969d (Fencode_time): Rewrite by Naggum.
Richard M. Stallman <rms@gnu.org>
parents: 11451
diff changeset
1710 {
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1711 int abszone = abs (XINT (zone));
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1712 sprintf (tzbuf, "XXX%s%d:%02d:%02d", "-" + (XINT (zone) < 0),
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1713 abszone / (60*60), (abszone/60) % 60, abszone % 60);
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1714 tzstring = tzbuf;
11468
772f49d1969d (Fencode_time): Rewrite by Naggum.
Richard M. Stallman <rms@gnu.org>
parents: 11451
diff changeset
1715 }
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1716 else
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1717 error ("Invalid time zone specification");
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1718
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1719 /* Set TZ before calling mktime; merely adjusting mktime's returned
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1720 value doesn't suffice, since that would mishandle leap seconds. */
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1721 set_time_zone_rule (tzstring);
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1722
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1723 time = mktime (&tm);
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1724
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1725 /* Restore TZ to previous value. */
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1726 newenv = environ;
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1727 environ = oldenv;
16521
fe9cc0d392dd (Fencode_time): Use xfree, not free.
Richard M. Stallman <rms@gnu.org>
parents: 16485
diff changeset
1728 xfree (newenv);
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1729 #ifdef LOCALTIME_CACHE
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1730 tzset ();
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1731 #endif
11468
772f49d1969d (Fencode_time): Rewrite by Naggum.
Richard M. Stallman <rms@gnu.org>
parents: 11451
diff changeset
1732 }
11402
66d935214d8e (Fencode_time): Use XINT to examine `zone'.
Richard M. Stallman <rms@gnu.org>
parents: 11263
diff changeset
1733
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1734 if (time == (time_t) -1)
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1735 error ("Specified time is not representable");
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1736
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1737 return make_time (time);
11402
66d935214d8e (Fencode_time): Use XINT to examine `zone'.
Richard M. Stallman <rms@gnu.org>
parents: 11263
diff changeset
1738 }
66d935214d8e (Fencode_time): Use XINT to examine `zone'.
Richard M. Stallman <rms@gnu.org>
parents: 11263
diff changeset
1739
2154
69c58e548ca5 (Fcurrent_time_string): Optional arg specifies time.
Richard M. Stallman <rms@gnu.org>
parents: 2049
diff changeset
1740 DEFUN ("current-time-string", Fcurrent_time_string, Scurrent_time_string, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1741 doc: /* Return the current time, as a human-readable string.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1742 Programs can use this function to decode a time,
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1743 since the number of columns in each field is fixed.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1744 The format is `Sun Sep 16 01:03:52 1973'.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1745 However, see also the functions `decode-time' and `format-time-string'
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1746 which provide a much more powerful and general facility.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1747
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1748 If an argument is given, it specifies a time to format
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1749 instead of the current time. The argument should have the form:
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1750 (HIGH . LOW)
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1751 or the form:
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1752 (HIGH LOW . IGNORED).
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1753 Thus, you can use times obtained from `current-time'
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1754 and from `file-attributes'. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1755 (specified_time)
2154
69c58e548ca5 (Fcurrent_time_string): Optional arg specifies time.
Richard M. Stallman <rms@gnu.org>
parents: 2049
diff changeset
1756 Lisp_Object specified_time;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 {
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1758 time_t value;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759 char buf[30];
2154
69c58e548ca5 (Fcurrent_time_string): Optional arg specifies time.
Richard M. Stallman <rms@gnu.org>
parents: 2049
diff changeset
1760 register char *tem;
69c58e548ca5 (Fcurrent_time_string): Optional arg specifies time.
Richard M. Stallman <rms@gnu.org>
parents: 2049
diff changeset
1761
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1762 if (! lisp_time_argument (specified_time, &value, NULL))
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1763 value = -1;
2154
69c58e548ca5 (Fcurrent_time_string): Optional arg specifies time.
Richard M. Stallman <rms@gnu.org>
parents: 2049
diff changeset
1764 tem = (char *) ctime (&value);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1766 strncpy (buf, tem, 24);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1767 buf[24] = 0;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1768
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1769 return build_string (buf);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1770 }
962
3533821d6edc * editfns.c (Fcurrent_time_zone): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 690
diff changeset
1771
16269
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1772 #define TM_YEAR_BASE 1900
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1773
16269
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1774 /* Yield A - B, measured in seconds.
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1775 This function is copied from the GNU C Library. */
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1776 static int
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1777 tm_diff (a, b)
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1778 struct tm *a, *b;
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1779 {
16269
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1780 /* Compute intervening leap days correctly even if year is negative.
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1781 Take care to avoid int overflow in leap day calculations,
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1782 but it's OK to assume that A and B are close to each other. */
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1783 int a4 = (a->tm_year >> 2) + (TM_YEAR_BASE >> 2) - ! (a->tm_year & 3);
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1784 int b4 = (b->tm_year >> 2) + (TM_YEAR_BASE >> 2) - ! (b->tm_year & 3);
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1785 int a100 = a4 / 25 - (a4 % 25 < 0);
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1786 int b100 = b4 / 25 - (b4 % 25 < 0);
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1787 int a400 = a100 >> 2;
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1788 int b400 = b100 >> 2;
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1789 int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1790 int years = a->tm_year - b->tm_year;
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1791 int days = (365 * years + intervening_leap_days
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1792 + (a->tm_yday - b->tm_yday));
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1793 return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
79e6c47054c5 (tm_diff): Renamed from difftm. Yield int, not long.
Paul Eggert <eggert@twinsun.com>
parents: 16134
diff changeset
1794 + (a->tm_min - b->tm_min))
5882
319a7fcb7609 (difftm): Simplify expression.
Karl Heuer <kwzh@gnu.org>
parents: 5373
diff changeset
1795 + (a->tm_sec - b->tm_sec));
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1796 }
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1797
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1798 DEFUN ("current-time-zone", Fcurrent_time_zone, Scurrent_time_zone, 0, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1799 doc: /* Return the offset and name for the local time zone.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1800 This returns a list of the form (OFFSET NAME).
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1801 OFFSET is an integer number of seconds ahead of UTC (east of Greenwich).
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1802 A negative value means west of Greenwich.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1803 NAME is a string giving the name of the time zone.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1804 If an argument is given, it specifies when the time zone offset is determined
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1805 instead of using the current time. The argument should have the form:
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1806 (HIGH . LOW)
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1807 or the form:
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1808 (HIGH LOW . IGNORED).
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1809 Thus, you can use times obtained from `current-time'
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1810 and from `file-attributes'.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1811
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1812 Some operating systems cannot provide all this information to Emacs;
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1813 in this case, `current-time-zone' returns a list containing nil for
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1814 the data it can't find. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1815 (specified_time)
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1816 Lisp_Object specified_time;
962
3533821d6edc * editfns.c (Fcurrent_time_zone): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 690
diff changeset
1817 {
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1818 time_t value;
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1819 struct tm *t;
23198
dddce768cf7a (Fformat_time_string, Fdecode_time, Fcurrent_time_zone):
Paul Eggert <eggert@twinsun.com>
parents: 23197
diff changeset
1820 struct tm gmt;
962
3533821d6edc * editfns.c (Fcurrent_time_zone): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 690
diff changeset
1821
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1822 if (lisp_time_argument (specified_time, &value, NULL)
23198
dddce768cf7a (Fformat_time_string, Fdecode_time, Fcurrent_time_zone):
Paul Eggert <eggert@twinsun.com>
parents: 23197
diff changeset
1823 && (t = gmtime (&value)) != 0
dddce768cf7a (Fformat_time_string, Fdecode_time, Fcurrent_time_zone):
Paul Eggert <eggert@twinsun.com>
parents: 23197
diff changeset
1824 && (gmt = *t, t = localtime (&value)) != 0)
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1825 {
23198
dddce768cf7a (Fformat_time_string, Fdecode_time, Fcurrent_time_zone):
Paul Eggert <eggert@twinsun.com>
parents: 23197
diff changeset
1826 int offset = tm_diff (t, &gmt);
dddce768cf7a (Fformat_time_string, Fdecode_time, Fcurrent_time_zone):
Paul Eggert <eggert@twinsun.com>
parents: 23197
diff changeset
1827 char *s = 0;
dddce768cf7a (Fformat_time_string, Fdecode_time, Fcurrent_time_zone):
Paul Eggert <eggert@twinsun.com>
parents: 23197
diff changeset
1828 char buf[6];
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1829 #ifdef HAVE_TM_ZONE
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1830 if (t->tm_zone)
7506
9fa47d36798a (Fcurrent_time_zone): Add cast.
Richard M. Stallman <rms@gnu.org>
parents: 7485
diff changeset
1831 s = (char *)t->tm_zone;
3522
dc9f7a107e28 (Fcurrent_time_zone): Add alternative for !HAVE_TM_ZONE.
Richard M. Stallman <rms@gnu.org>
parents: 2994
diff changeset
1832 #else /* not HAVE_TM_ZONE */
dc9f7a107e28 (Fcurrent_time_zone): Add alternative for !HAVE_TM_ZONE.
Richard M. Stallman <rms@gnu.org>
parents: 2994
diff changeset
1833 #ifdef HAVE_TZNAME
dc9f7a107e28 (Fcurrent_time_zone): Add alternative for !HAVE_TM_ZONE.
Richard M. Stallman <rms@gnu.org>
parents: 2994
diff changeset
1834 if (t->tm_isdst == 0 || t->tm_isdst == 1)
dc9f7a107e28 (Fcurrent_time_zone): Add alternative for !HAVE_TM_ZONE.
Richard M. Stallman <rms@gnu.org>
parents: 2994
diff changeset
1835 s = tzname[t->tm_isdst];
962
3533821d6edc * editfns.c (Fcurrent_time_zone): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 690
diff changeset
1836 #endif
3522
dc9f7a107e28 (Fcurrent_time_zone): Add alternative for !HAVE_TM_ZONE.
Richard M. Stallman <rms@gnu.org>
parents: 2994
diff changeset
1837 #endif /* not HAVE_TM_ZONE */
36479
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1838
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1839 #if defined HAVE_TM_ZONE || defined HAVE_TZNAME
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1840 if (s)
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1841 {
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1842 /* On Japanese w32, we can get a Japanese string as time
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1843 zone name. Don't accept that. */
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1844 char *p;
39720
e7c5b465528a (Fcurrent_time_zone): Cast isalnum() argument to
Gerd Moellmann <gerd@gnu.org>
parents: 39682
diff changeset
1845 for (p = s; *p && (isalnum ((unsigned char)*p) || *p == ' '); ++p)
36479
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1846 ;
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1847 if (p == s || *p)
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1848 s = NULL;
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1849 }
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1850 #endif
ac3ee681e8f9 (Fcurrent_time_zone) [HAVE_TM_ZONE || HAVE_TZNAME]:
Gerd Moellmann <gerd@gnu.org>
parents: 35998
diff changeset
1851
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1852 if (!s)
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1853 {
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1854 /* No local time zone name is available; use "+-NNNN" instead. */
2994
b087b4fd6066 (Fcurrent_time_zone): Make `am' an int, not long.
Richard M. Stallman <rms@gnu.org>
parents: 2976
diff changeset
1855 int am = (offset < 0 ? -offset : offset) / 60;
2921
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1856 sprintf (buf, "%c%02d%02d", (offset < 0 ? '-' : '+'), am/60, am%60);
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1857 s = buf;
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1858 }
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1859 return Fcons (make_number (offset), Fcons (build_string (s), Qnil));
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1860 }
37503f466755 Some time-handling patches from Paul Eggert:
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
1861 else
18745
192b3ebd108e (Fcurrent_time_zone): Convert Fmake_list argument to Lisp_Integer.
Richard M. Stallman <rms@gnu.org>
parents: 18661
diff changeset
1862 return Fmake_list (make_number (2), Qnil);
962
3533821d6edc * editfns.c (Fcurrent_time_zone): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 690
diff changeset
1863 }
3533821d6edc * editfns.c (Fcurrent_time_zone): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 690
diff changeset
1864
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
1865 /* This holds the value of `environ' produced by the previous
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
1866 call to Fset_time_zone_rule, or 0 if Fset_time_zone_rule
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
1867 has never been called. */
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
1868 static char **environbuf;
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
1869
13019
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1870 DEFUN ("set-time-zone-rule", Fset_time_zone_rule, Sset_time_zone_rule, 1, 1, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1871 doc: /* Set the local time zone using TZ, a string specifying a time zone rule.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
1872 If TZ is nil, use implementation-defined default time zone information.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1873 If TZ is t, use Universal Time. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
1874 (tz)
13019
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1875 Lisp_Object tz;
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1876 {
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1877 char *tzstring;
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1878
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1879 if (NILP (tz))
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1880 tzstring = 0;
18613
614b916ff5bf Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents: 18605
diff changeset
1881 else if (EQ (tz, Qt))
15910
8cd4f2fd5525 (Fencode_time, Fset_time_zone_rule): Use UTC if the zone is t.
Erik Naggum <erik@naggum.no>
parents: 15841
diff changeset
1882 tzstring = "UTC0";
13019
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1883 else
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1884 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
1885 CHECK_STRING (tz);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1886 tzstring = (char *) SDATA (tz);
13019
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1887 }
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1888
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1889 set_time_zone_rule (tzstring);
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1890 if (environbuf)
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1891 free (environbuf);
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1892 environbuf = environ;
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1893
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1894 return Qnil;
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1895 }
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1896
16918
ab49512bcdff (set_time_zone_rule_tz1, set_time_zone_rule_tz2):
Paul Eggert <eggert@twinsun.com>
parents: 16874
diff changeset
1897 #ifdef LOCALTIME_CACHE
ab49512bcdff (set_time_zone_rule_tz1, set_time_zone_rule_tz2):
Paul Eggert <eggert@twinsun.com>
parents: 16874
diff changeset
1898
ab49512bcdff (set_time_zone_rule_tz1, set_time_zone_rule_tz2):
Paul Eggert <eggert@twinsun.com>
parents: 16874
diff changeset
1899 /* These two values are known to load tz files in buggy implementations,
ab49512bcdff (set_time_zone_rule_tz1, set_time_zone_rule_tz2):
Paul Eggert <eggert@twinsun.com>
parents: 16874
diff changeset
1900 i.e. Solaris 1 executables running under either Solaris 1 or Solaris 2.
15841
80a852988718 (set_time_zone_rule): Don't put a string literal
Richard M. Stallman <rms@gnu.org>
parents: 15779
diff changeset
1901 Their values shouldn't matter in non-buggy implementations.
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
1902 We don't use string literals for these strings,
15841
80a852988718 (set_time_zone_rule): Don't put a string literal
Richard M. Stallman <rms@gnu.org>
parents: 15779
diff changeset
1903 since if a string in the environment is in readonly
80a852988718 (set_time_zone_rule): Don't put a string literal
Richard M. Stallman <rms@gnu.org>
parents: 15779
diff changeset
1904 storage, it runs afoul of bugs in SVR4 and Solaris 2.3.
80a852988718 (set_time_zone_rule): Don't put a string literal
Richard M. Stallman <rms@gnu.org>
parents: 15779
diff changeset
1905 See Sun bugs 1113095 and 1114114, ``Timezone routines
80a852988718 (set_time_zone_rule): Don't put a string literal
Richard M. Stallman <rms@gnu.org>
parents: 15779
diff changeset
1906 improperly modify environment''. */
80a852988718 (set_time_zone_rule): Don't put a string literal
Richard M. Stallman <rms@gnu.org>
parents: 15779
diff changeset
1907
16918
ab49512bcdff (set_time_zone_rule_tz1, set_time_zone_rule_tz2):
Paul Eggert <eggert@twinsun.com>
parents: 16874
diff changeset
1908 static char set_time_zone_rule_tz1[] = "TZ=GMT+0";
ab49512bcdff (set_time_zone_rule_tz1, set_time_zone_rule_tz2):
Paul Eggert <eggert@twinsun.com>
parents: 16874
diff changeset
1909 static char set_time_zone_rule_tz2[] = "TZ=GMT+1";
ab49512bcdff (set_time_zone_rule_tz1, set_time_zone_rule_tz2):
Paul Eggert <eggert@twinsun.com>
parents: 16874
diff changeset
1910
ab49512bcdff (set_time_zone_rule_tz1, set_time_zone_rule_tz2):
Paul Eggert <eggert@twinsun.com>
parents: 16874
diff changeset
1911 #endif
15841
80a852988718 (set_time_zone_rule): Don't put a string literal
Richard M. Stallman <rms@gnu.org>
parents: 15779
diff changeset
1912
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1913 /* Set the local time zone rule to TZSTRING.
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1914 This allocates memory into `environ', which it is the caller's
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1915 responsibility to free. */
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
1916
14201
ff372902386d (set_time_zone_rule): No longer static.
Richard M. Stallman <rms@gnu.org>
parents: 14126
diff changeset
1917 void
13025
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1918 set_time_zone_rule (tzstring)
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1919 char *tzstring;
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1920 {
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1921 int envptrs;
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1922 char **from, **to, **newenv;
1eab52043f10 (Fencode_time): Use mktime to do the real work;
Paul Eggert <eggert@twinsun.com>
parents: 13019
diff changeset
1923
15334
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1924 /* Make the ENVIRON vector longer with room for TZSTRING. */
13019
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1925 for (from = environ; *from; from++)
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1926 continue;
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1927 envptrs = from - environ + 2;
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1928 newenv = to = (char **) xmalloc (envptrs * sizeof (char *)
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1929 + (tzstring ? strlen (tzstring) + 4 : 0));
15334
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1930
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1931 /* Add TZSTRING to the end of environ, as a value for TZ. */
13019
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1932 if (tzstring)
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1933 {
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1934 char *t = (char *) (to + envptrs);
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1935 strcpy (t, "TZ=");
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1936 strcat (t, tzstring);
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1937 *to++ = t;
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1938 }
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1939
15334
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1940 /* Copy the old environ vector elements into NEWENV,
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1941 but don't copy the TZ variable.
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1942 So we have only one definition of TZ, which came from TZSTRING. */
13019
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1943 for (from = environ; *from; from++)
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1944 if (strncmp (*from, "TZ=", 3) != 0)
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1945 *to++ = *from;
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1946 *to = 0;
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1947
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1948 environ = newenv;
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1949
15334
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1950 /* If we do have a TZSTRING, NEWENV points to the vector slot where
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1951 the TZ variable is stored. If we do not have a TZSTRING,
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1952 TO points to the vector slot which has the terminating null. */
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1953
13019
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1954 #ifdef LOCALTIME_CACHE
15334
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1955 {
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1956 /* In SunOS 4.1.3_U1 and 4.1.4, if TZ has a value like
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1957 "US/Pacific" that loads a tz file, then changes to a value like
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1958 "XXX0" that does not load a tz file, and then changes back to
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1959 its original value, the last change is (incorrectly) ignored.
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1960 Also, if TZ changes twice in succession to values that do
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1961 not load a tz file, tzset can dump core (see Sun bug#1225179).
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1962 The following code works around these bugs. */
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1963
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1964 if (tzstring)
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1965 {
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1966 /* Temporarily set TZ to a value that loads a tz file
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1967 and that differs from tzstring. */
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1968 char *tz = *newenv;
15841
80a852988718 (set_time_zone_rule): Don't put a string literal
Richard M. Stallman <rms@gnu.org>
parents: 15779
diff changeset
1969 *newenv = (strcmp (tzstring, set_time_zone_rule_tz1 + 3) == 0
80a852988718 (set_time_zone_rule): Don't put a string literal
Richard M. Stallman <rms@gnu.org>
parents: 15779
diff changeset
1970 ? set_time_zone_rule_tz2 : set_time_zone_rule_tz1);
15334
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1971 tzset ();
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1972 *newenv = tz;
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1973 }
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1974 else
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1975 {
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1976 /* The implied tzstring is unknown, so temporarily set TZ to
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1977 two different values that each load a tz file. */
15841
80a852988718 (set_time_zone_rule): Don't put a string literal
Richard M. Stallman <rms@gnu.org>
parents: 15779
diff changeset
1978 *to = set_time_zone_rule_tz1;
15334
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1979 to[1] = 0;
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1980 tzset ();
15841
80a852988718 (set_time_zone_rule): Don't put a string literal
Richard M. Stallman <rms@gnu.org>
parents: 15779
diff changeset
1981 *to = set_time_zone_rule_tz2;
15334
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1982 tzset ();
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1983 *to = 0;
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1984 }
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1985
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1986 /* Now TZ has the desired value, and tzset can be invoked safely. */
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1987 }
07c1581d1cc5 (set_time_zone_rule):
Richard M. Stallman <rms@gnu.org>
parents: 15241
diff changeset
1988
13019
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1989 tzset ();
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1990 #endif
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
1991 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1992
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1993 /* Insert NARGS Lisp objects in the array ARGS by calling INSERT_FUNC
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1994 (if a type of object is Lisp_Int) or INSERT_FROM_STRING_FUNC (if a
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1995 type of object is Lisp_String). INHERIT is passed to
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1996 INSERT_FROM_STRING_FUNC as the last argument. */
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1997
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
1998 static void
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
1999 general_insert_function (insert_func, insert_from_string_func,
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2000 inherit, nargs, args)
46464
e05dd5b81fc7 (general_insert_function): Insertion function now
Ken Raeburn <raeburn@raeburn.org>
parents: 46447
diff changeset
2001 void (*insert_func) P_ ((const unsigned char *, int));
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
2002 void (*insert_from_string_func) P_ ((Lisp_Object, int, int, int, int, int));
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2003 int inherit, nargs;
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2004 register Lisp_Object *args;
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2005 {
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2006 register int argnum;
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2007 register Lisp_Object val;
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2008
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2009 for (argnum = 0; argnum < nargs; argnum++)
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2010 {
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2011 val = args[argnum];
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2012 retry:
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2013 if (INTEGERP (val))
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2014 {
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2015 unsigned char str[MAX_MULTIBYTE_LENGTH];
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2016 int len;
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2017
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2018 if (!NILP (current_buffer->enable_multibyte_characters))
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2019 len = CHAR_STRING (XFASTINT (val), str);
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2020 else
22929
6dda0a4b882f (general_insert_function): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 22895
diff changeset
2021 {
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2022 str[0] = (SINGLE_BYTE_CHAR_P (XINT (val))
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2023 ? XINT (val)
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2024 : multibyte_char_to_unibyte (XINT (val), Qnil));
22929
6dda0a4b882f (general_insert_function): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 22895
diff changeset
2025 len = 1;
6dda0a4b882f (general_insert_function): If enable-multibyte-characters is
Kenichi Handa <handa@m17n.org>
parents: 22895
diff changeset
2026 }
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2027 (*insert_func) (str, len);
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2028 }
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2029 else if (STRINGP (val))
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2030 {
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
2031 (*insert_from_string_func) (val, 0, 0,
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
2032 SCHARS (val),
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
2033 SBYTES (val),
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
2034 inherit);
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2035 }
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2036 else
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2037 {
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2038 val = wrong_type_argument (Qchar_or_string_p, val);
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2039 goto retry;
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2040 }
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2041 }
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2042 }
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2043
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2044 void
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2045 insert1 (arg)
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2046 Lisp_Object arg;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2047 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2048 Finsert (1, &arg);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2049 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2050
330
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
2051
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
2052 /* Callers passing one argument to Finsert need not gcpro the
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
2053 argument "array", since the only element of the array will
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
2054 not be used after calling insert or insert_from_string, so
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
2055 we don't care if it gets trashed. */
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
2056
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2057 DEFUN ("insert", Finsert, Sinsert, 0, MANY, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2058 doc: /* Insert the arguments, either strings or characters, at point.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2059 Point and before-insertion markers move forward to end up
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2060 after the inserted text.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2061 Any other markers at the point of insertion remain before the text.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2062
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2063 If the current buffer is multibyte, unibyte strings are converted
49293
41213ea7b9d6 (Finsert): Mention `string-make-multibyte' and
Kim F. Storm <storm@cua.dk>
parents: 49285
diff changeset
2064 to multibyte for insertion (see `string-make-multibyte').
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2065 If the current buffer is unibyte, multibyte strings are converted
49293
41213ea7b9d6 (Finsert): Mention `string-make-multibyte' and
Kim F. Storm <storm@cua.dk>
parents: 49285
diff changeset
2066 to unibyte for insertion (see `string-make-unibyte').
41213ea7b9d6 (Finsert): Mention `string-make-multibyte' and
Kim F. Storm <storm@cua.dk>
parents: 49285
diff changeset
2067
41213ea7b9d6 (Finsert): Mention `string-make-multibyte' and
Kim F. Storm <storm@cua.dk>
parents: 49285
diff changeset
2068 When operating on binary data, it may be necessary to preserve the
41213ea7b9d6 (Finsert): Mention `string-make-multibyte' and
Kim F. Storm <storm@cua.dk>
parents: 49285
diff changeset
2069 original bytes of a unibyte string when inserting it into a multibyte
41213ea7b9d6 (Finsert): Mention `string-make-multibyte' and
Kim F. Storm <storm@cua.dk>
parents: 49285
diff changeset
2070 buffer; to accomplish this, apply `string-as-multibyte' to the string
41213ea7b9d6 (Finsert): Mention `string-make-multibyte' and
Kim F. Storm <storm@cua.dk>
parents: 49285
diff changeset
2071 and insert the result.
40131
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
2072
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
2073 usage: (insert &rest ARGS) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2074 (nargs, args)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2075 int nargs;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2076 register Lisp_Object *args;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2077 {
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2078 general_insert_function (insert, insert_from_string, 0, nargs, args);
4714
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2079 return Qnil;
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2080 }
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2081
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2082 DEFUN ("insert-and-inherit", Finsert_and_inherit, Sinsert_and_inherit,
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2083 0, MANY, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2084 doc: /* Insert the arguments at point, inheriting properties from adjoining text.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2085 Point and before-insertion markers move forward to end up
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2086 after the inserted text.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2087 Any other markers at the point of insertion remain before the text.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2088
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2089 If the current buffer is multibyte, unibyte strings are converted
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2090 to multibyte for insertion (see `unibyte-char-to-multibyte').
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2091 If the current buffer is unibyte, multibyte strings are converted
40131
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
2092 to unibyte for insertion.
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
2093
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
2094 usage: (insert-and-inherit &rest ARGS) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2095 (nargs, args)
4714
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2096 int nargs;
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2097 register Lisp_Object *args;
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2098 {
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2099 general_insert_function (insert_and_inherit, insert_from_string, 1,
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2100 nargs, args);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2101 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2102 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2103
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2104 DEFUN ("insert-before-markers", Finsert_before_markers, Sinsert_before_markers, 0, MANY, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2105 doc: /* Insert strings or characters at point, relocating markers after the text.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2106 Point and markers move forward to end up after the inserted text.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2107
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2108 If the current buffer is multibyte, unibyte strings are converted
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2109 to multibyte for insertion (see `unibyte-char-to-multibyte').
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2110 If the current buffer is unibyte, multibyte strings are converted
40131
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
2111 to unibyte for insertion.
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
2112
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
2113 usage: (insert-before-markers &rest ARGS) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2114 (nargs, args)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2115 int nargs;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2116 register Lisp_Object *args;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2117 {
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2118 general_insert_function (insert_before_markers,
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2119 insert_from_string_before_markers, 0,
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2120 nargs, args);
4714
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2121 return Qnil;
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2122 }
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2123
16485
9b919c5464a4 Reorganize function definitions so etags finds them.
Erik Naggum <erik@naggum.no>
parents: 16298
diff changeset
2124 DEFUN ("insert-before-markers-and-inherit", Finsert_and_inherit_before_markers,
9b919c5464a4 Reorganize function definitions so etags finds them.
Erik Naggum <erik@naggum.no>
parents: 16298
diff changeset
2125 Sinsert_and_inherit_before_markers, 0, MANY, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2126 doc: /* Insert text at point, relocating markers and inheriting properties.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2127 Point and markers move forward to end up after the inserted text.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2128
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2129 If the current buffer is multibyte, unibyte strings are converted
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2130 to multibyte for insertion (see `unibyte-char-to-multibyte').
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2131 If the current buffer is unibyte, multibyte strings are converted
40131
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
2132 to unibyte for insertion.
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
2133
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
2134 usage: (insert-before-markers-and-inherit &rest ARGS) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2135 (nargs, args)
4714
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2136 int nargs;
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2137 register Lisp_Object *args;
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
2138 {
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2139 general_insert_function (insert_before_markers_and_inherit,
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2140 insert_from_string_before_markers, 1,
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2141 nargs, args);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2142 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2143 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2144
8646
0f05e3e89f87 (Finsert_char): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 8333
diff changeset
2145 DEFUN ("insert-char", Finsert_char, Sinsert_char, 2, 3, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2146 doc: /* Insert COUNT (second arg) copies of CHARACTER (first arg).
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2147 Both arguments are required.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2148 Point, and before-insertion markers, are relocated as in the function `insert'.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2149 The optional third arg INHERIT, if non-nil, says to inherit text properties
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2150 from adjoining text, if those properties are sticky. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2151 (character, count, inherit)
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2152 Lisp_Object character, count, inherit;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2153 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2154 register unsigned char *string;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2155 register int strlen;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2156 register int i, n;
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2157 int len;
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2158 unsigned char str[MAX_MULTIBYTE_LENGTH];
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2159
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2160 CHECK_NUMBER (character);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2161 CHECK_NUMBER (count);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2162
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2163 if (!NILP (current_buffer->enable_multibyte_characters))
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2164 len = CHAR_STRING (XFASTINT (character), str);
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2165 else
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2166 str[0] = XFASTINT (character), len = 1;
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2167 n = XINT (count) * len;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2168 if (n <= 0)
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2169 return Qnil;
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2170 strlen = min (n, 256 * len);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2171 string = (unsigned char *) alloca (strlen);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2172 for (i = 0; i < strlen; i++)
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2173 string[i] = str[i % len];
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2174 while (n >= strlen)
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2175 {
18194
c291aa915b85 (Finsert_char): Check QUIT.
Richard M. Stallman <rms@gnu.org>
parents: 18106
diff changeset
2176 QUIT;
8646
0f05e3e89f87 (Finsert_char): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 8333
diff changeset
2177 if (!NILP (inherit))
0f05e3e89f87 (Finsert_char): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 8333
diff changeset
2178 insert_and_inherit (string, strlen);
0f05e3e89f87 (Finsert_char): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 8333
diff changeset
2179 else
0f05e3e89f87 (Finsert_char): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 8333
diff changeset
2180 insert (string, strlen);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2181 n -= strlen;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2182 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2183 if (n > 0)
10382
9738aad59697 (Finsert_char): Check inherit flag for long strings too.
Karl Heuer <kwzh@gnu.org>
parents: 10308
diff changeset
2184 {
9738aad59697 (Finsert_char): Check inherit flag for long strings too.
Karl Heuer <kwzh@gnu.org>
parents: 10308
diff changeset
2185 if (!NILP (inherit))
9738aad59697 (Finsert_char): Check inherit flag for long strings too.
Karl Heuer <kwzh@gnu.org>
parents: 10308
diff changeset
2186 insert_and_inherit (string, n);
9738aad59697 (Finsert_char): Check inherit flag for long strings too.
Karl Heuer <kwzh@gnu.org>
parents: 10308
diff changeset
2187 else
9738aad59697 (Finsert_char): Check inherit flag for long strings too.
Karl Heuer <kwzh@gnu.org>
parents: 10308
diff changeset
2188 insert (string, n);
9738aad59697 (Finsert_char): Check inherit flag for long strings too.
Karl Heuer <kwzh@gnu.org>
parents: 10308
diff changeset
2189 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2190 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2191 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2192
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2193
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2194 /* Making strings from buffer contents. */
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2195
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2196 /* Return a Lisp_String containing the text of the current buffer from
1285
d50533e23dff * editfns.c (make_buffer_string): Call copy_intervals_to_string().
Joseph Arceneaux <jla@gnu.org>
parents: 1254
diff changeset
2197 START to END. If text properties are in use and the current buffer
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3522
diff changeset
2198 has properties in the range specified, the resulting string will also
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2199 have them, if PROPS is nonzero.
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2200
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2201 We don't want to use plain old make_string here, because it calls
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2202 make_uninit_string, which can cause the buffer arena to be
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2203 compacted. make_string has no way of knowing that the data has
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2204 been moved, and thus copies the wrong data into the string. This
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2205 doesn't effect most of the other users of make_string, so it should
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2206 be left as is. But we should use this function when conjuring
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2207 buffer substrings. */
1285
d50533e23dff * editfns.c (make_buffer_string): Call copy_intervals_to_string().
Joseph Arceneaux <jla@gnu.org>
parents: 1254
diff changeset
2208
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2209 Lisp_Object
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2210 make_buffer_string (start, end, props)
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2211 int start, end;
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2212 int props;
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2213 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2214 int start_byte = CHAR_TO_BYTE (start);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2215 int end_byte = CHAR_TO_BYTE (end);
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2216
21235
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2217 return make_buffer_string_both (start, start_byte, end, end_byte, props);
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2218 }
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2219
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2220 /* Return a Lisp_String containing the text of the current buffer from
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2221 START / START_BYTE to END / END_BYTE.
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2222
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2223 If text properties are in use and the current buffer
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2224 has properties in the range specified, the resulting string will also
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2225 have them, if PROPS is nonzero.
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2226
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2227 We don't want to use plain old make_string here, because it calls
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2228 make_uninit_string, which can cause the buffer arena to be
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2229 compacted. make_string has no way of knowing that the data has
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2230 been moved, and thus copies the wrong data into the string. This
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2231 doesn't effect most of the other users of make_string, so it should
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2232 be left as is. But we should use this function when conjuring
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2233 buffer substrings. */
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2234
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2235 Lisp_Object
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2236 make_buffer_string_both (start, start_byte, end, end_byte, props)
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2237 int start, start_byte, end, end_byte;
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2238 int props;
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2239 {
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2240 Lisp_Object result, tem, tem1;
eba3d61855d0 (make_buffer_string_both): New function.
Richard M. Stallman <rms@gnu.org>
parents: 21226
diff changeset
2241
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2242 if (start < GPT && GPT < end)
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2243 move_gap (start);
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2244
21257
205a5aa4aa2f (Fchar_to_string): Use make_string_from_bytes.
Richard M. Stallman <rms@gnu.org>
parents: 21245
diff changeset
2245 if (! NILP (current_buffer->enable_multibyte_characters))
205a5aa4aa2f (Fchar_to_string): Use make_string_from_bytes.
Richard M. Stallman <rms@gnu.org>
parents: 21245
diff changeset
2246 result = make_uninit_multibyte_string (end - start, end_byte - start_byte);
205a5aa4aa2f (Fchar_to_string): Use make_string_from_bytes.
Richard M. Stallman <rms@gnu.org>
parents: 21245
diff changeset
2247 else
205a5aa4aa2f (Fchar_to_string): Use make_string_from_bytes.
Richard M. Stallman <rms@gnu.org>
parents: 21245
diff changeset
2248 result = make_uninit_string (end - start);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
2249 bcopy (BYTE_POS_ADDR (start_byte), SDATA (result),
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2250 end_byte - start_byte);
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2251
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2252 /* If desired, update and copy the text properties. */
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2253 if (props)
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2254 {
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2255 update_buffer_properties (start, end);
5130
ddee29e260d2 (make_buffer_string): Don't copy intervals
Richard M. Stallman <rms@gnu.org>
parents: 4943
diff changeset
2256
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2257 tem = Fnext_property_change (make_number (start), Qnil, make_number (end));
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2258 tem1 = Ftext_properties_at (make_number (start), Qnil);
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2259
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2260 if (XINT (tem) != end || !NILP (tem1))
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2261 copy_intervals_to_string (result, current_buffer, start,
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2262 end - start);
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2263 }
1285
d50533e23dff * editfns.c (make_buffer_string): Call copy_intervals_to_string().
Joseph Arceneaux <jla@gnu.org>
parents: 1254
diff changeset
2264
648
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2265 return result;
70b112526394 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2266 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2267
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2268 /* Call Vbuffer_access_fontify_functions for the range START ... END
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2269 in the current buffer, if necessary. */
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2270
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2271 static void
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2272 update_buffer_properties (start, end)
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2273 int start, end;
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2274 {
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2275 /* If this buffer has some access functions,
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2276 call them, specifying the range of the buffer being accessed. */
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2277 if (!NILP (Vbuffer_access_fontify_functions))
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2278 {
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2279 Lisp_Object args[3];
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2280 Lisp_Object tem;
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2281
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2282 args[0] = Qbuffer_access_fontify_functions;
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2283 XSETINT (args[1], start);
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2284 XSETINT (args[2], end);
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2285
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2286 /* But don't call them if we can tell that the work
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2287 has already been done. */
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2288 if (!NILP (Vbuffer_access_fontified_property))
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2289 {
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2290 tem = Ftext_property_any (args[1], args[2],
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2291 Vbuffer_access_fontified_property,
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2292 Qnil, Qnil);
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2293 if (! NILP (tem))
14126
edc94b82c3b3 (update_buffer_properties): Delete superfluous &'s.
Karl Heuer <kwzh@gnu.org>
parents: 14071
diff changeset
2294 Frun_hook_with_args (3, args);
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2295 }
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2296 else
14126
edc94b82c3b3 (update_buffer_properties): Delete superfluous &'s.
Karl Heuer <kwzh@gnu.org>
parents: 14071
diff changeset
2297 Frun_hook_with_args (3, args);
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2298 }
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2299 }
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2300
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2301 DEFUN ("buffer-substring", Fbuffer_substring, Sbuffer_substring, 2, 2, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2302 doc: /* Return the contents of part of the current buffer as a string.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2303 The two arguments START and END are character positions;
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2304 they can be in either order.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2305 The string returned is multibyte if the buffer is multibyte.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2306
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2307 This function copies the text properties of that part of the buffer
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2308 into the result string; if you don't want the text properties,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2309 use `buffer-substring-no-properties' instead. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2310 (start, end)
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2311 Lisp_Object start, end;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2312 {
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2313 register int b, e;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2314
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2315 validate_region (&start, &end);
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2316 b = XINT (start);
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2317 e = XINT (end);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2318
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2319 return make_buffer_string (b, e, 1);
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2320 }
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2321
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2322 DEFUN ("buffer-substring-no-properties", Fbuffer_substring_no_properties,
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2323 Sbuffer_substring_no_properties, 2, 2, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2324 doc: /* Return the characters of part of the buffer, without the text properties.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2325 The two arguments START and END are character positions;
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2326 they can be in either order. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2327 (start, end)
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2328 Lisp_Object start, end;
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2329 {
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2330 register int b, e;
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2331
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2332 validate_region (&start, &end);
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2333 b = XINT (start);
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2334 e = XINT (end);
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2335
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2336 return make_buffer_string (b, e, 0);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2337 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2338
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2339 DEFUN ("buffer-string", Fbuffer_string, Sbuffer_string, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2340 doc: /* Return the contents of the current buffer as a string.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2341 If narrowing is in effect, this function returns only the visible part
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2342 of the buffer. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2343 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2344 {
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
2345 return make_buffer_string (BEGV, ZV, 1);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2346 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2347
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2348 DEFUN ("insert-buffer-substring", Finsert_buffer_substring, Sinsert_buffer_substring,
40981
fee88c193206 (Fuser_real_login_name): Reindent.
Pavel Janík <Pavel@Janik.cz>
parents: 40699
diff changeset
2349 1, 3, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2350 doc: /* Insert before point a substring of the contents of buffer BUFFER.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2351 BUFFER may be a buffer or a buffer name.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2352 Arguments START and END are character numbers specifying the substring.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2353 They default to the beginning and the end of BUFFER. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2354 (buf, start, end)
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2355 Lisp_Object buf, start, end;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2356 {
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2357 register int b, e, temp;
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2358 register struct buffer *bp, *obuf;
1854
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2359 Lisp_Object buffer;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2360
1854
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2361 buffer = Fget_buffer (buf);
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2362 if (NILP (buffer))
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2363 nsberror (buf);
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2364 bp = XBUFFER (buffer);
16134
7558d82368f9 (Finsert_buffer_substring): Check for deleted buffer.
Karl Heuer <kwzh@gnu.org>
parents: 16097
diff changeset
2365 if (NILP (bp->name))
7558d82368f9 (Finsert_buffer_substring): Check for deleted buffer.
Karl Heuer <kwzh@gnu.org>
parents: 16097
diff changeset
2366 error ("Selecting deleted buffer");
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2367
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2368 if (NILP (start))
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2369 b = BUF_BEGV (bp);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2370 else
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2371 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2372 CHECK_NUMBER_COERCE_MARKER (start);
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2373 b = XINT (start);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2374 }
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2375 if (NILP (end))
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2376 e = BUF_ZV (bp);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2377 else
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2378 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2379 CHECK_NUMBER_COERCE_MARKER (end);
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2380 e = XINT (end);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2381 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2382
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2383 if (b > e)
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2384 temp = b, b = e, e = temp;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2385
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2386 if (!(BUF_BEGV (bp) <= b && e <= BUF_ZV (bp)))
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2387 args_out_of_range (start, end);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2388
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2389 obuf = current_buffer;
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2390 set_buffer_internal_1 (bp);
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2391 update_buffer_properties (b, e);
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2392 set_buffer_internal_1 (obuf);
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
2393
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2394 insert_from_buffer (bp, b, e - b, 0);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2395 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2396 }
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2397
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2398 DEFUN ("compare-buffer-substrings", Fcompare_buffer_substrings, Scompare_buffer_substrings,
40981
fee88c193206 (Fuser_real_login_name): Reindent.
Pavel Janík <Pavel@Janik.cz>
parents: 40699
diff changeset
2399 6, 6, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2400 doc: /* Compare two substrings of two buffers; return result as number.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2401 the value is -N if first string is less after N-1 chars,
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2402 +N if first string is greater after N-1 chars, or 0 if strings match.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2403 Each substring is represented as three arguments: BUFFER, START and END.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2404 That makes six args in all, three for each substring.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2405
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2406 The value of `case-fold-search' in the current buffer
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2407 determines whether case is significant or ignored. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2408 (buffer1, start1, end1, buffer2, start2, end2)
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2409 Lisp_Object buffer1, start1, end1, buffer2, start2, end2;
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2410 {
21837
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2411 register int begp1, endp1, begp2, endp2, temp;
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2412 register struct buffer *bp1, *bp2;
14391
dfdf939f3e8c (Fcompare_buffer_substrings): Access case_canon_table as a char_table.
Richard M. Stallman <rms@gnu.org>
parents: 14237
diff changeset
2413 register Lisp_Object *trt
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2414 = (!NILP (current_buffer->case_fold_search)
14391
dfdf939f3e8c (Fcompare_buffer_substrings): Access case_canon_table as a char_table.
Richard M. Stallman <rms@gnu.org>
parents: 14237
diff changeset
2415 ? XCHAR_TABLE (current_buffer->case_canon_table)->contents : 0);
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2416 int chars = 0;
21837
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2417 int i1, i2, i1_byte, i2_byte;
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2418
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2419 /* Find the first buffer and its substring. */
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2420
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2421 if (NILP (buffer1))
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2422 bp1 = current_buffer;
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2423 else
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2424 {
1854
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2425 Lisp_Object buf1;
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2426 buf1 = Fget_buffer (buffer1);
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2427 if (NILP (buf1))
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2428 nsberror (buffer1);
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2429 bp1 = XBUFFER (buf1);
16134
7558d82368f9 (Finsert_buffer_substring): Check for deleted buffer.
Karl Heuer <kwzh@gnu.org>
parents: 16097
diff changeset
2430 if (NILP (bp1->name))
7558d82368f9 (Finsert_buffer_substring): Check for deleted buffer.
Karl Heuer <kwzh@gnu.org>
parents: 16097
diff changeset
2431 error ("Selecting deleted buffer");
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2432 }
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2433
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2434 if (NILP (start1))
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2435 begp1 = BUF_BEGV (bp1);
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2436 else
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2437 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2438 CHECK_NUMBER_COERCE_MARKER (start1);
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2439 begp1 = XINT (start1);
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2440 }
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2441 if (NILP (end1))
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2442 endp1 = BUF_ZV (bp1);
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2443 else
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2444 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2445 CHECK_NUMBER_COERCE_MARKER (end1);
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2446 endp1 = XINT (end1);
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2447 }
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2448
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2449 if (begp1 > endp1)
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2450 temp = begp1, begp1 = endp1, endp1 = temp;
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2451
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2452 if (!(BUF_BEGV (bp1) <= begp1
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2453 && begp1 <= endp1
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2454 && endp1 <= BUF_ZV (bp1)))
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2455 args_out_of_range (start1, end1);
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2456
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2457 /* Likewise for second substring. */
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2458
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2459 if (NILP (buffer2))
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2460 bp2 = current_buffer;
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2461 else
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2462 {
1854
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2463 Lisp_Object buf2;
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2464 buf2 = Fget_buffer (buffer2);
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2465 if (NILP (buf2))
5a18c36181fa (Finsert_buffer_substring): Proper error for non-ex buffer.
Richard M. Stallman <rms@gnu.org>
parents: 1853
diff changeset
2466 nsberror (buffer2);
15015
8f8d48ab0a53 (Fcompare_buffer_substrings): Fix dumb bug handling buffer name as second arg.
Richard M. Stallman <rms@gnu.org>
parents: 15004
diff changeset
2467 bp2 = XBUFFER (buf2);
16134
7558d82368f9 (Finsert_buffer_substring): Check for deleted buffer.
Karl Heuer <kwzh@gnu.org>
parents: 16097
diff changeset
2468 if (NILP (bp2->name))
7558d82368f9 (Finsert_buffer_substring): Check for deleted buffer.
Karl Heuer <kwzh@gnu.org>
parents: 16097
diff changeset
2469 error ("Selecting deleted buffer");
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2470 }
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2471
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2472 if (NILP (start2))
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2473 begp2 = BUF_BEGV (bp2);
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2474 else
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2475 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2476 CHECK_NUMBER_COERCE_MARKER (start2);
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2477 begp2 = XINT (start2);
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2478 }
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2479 if (NILP (end2))
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2480 endp2 = BUF_ZV (bp2);
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2481 else
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2482 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2483 CHECK_NUMBER_COERCE_MARKER (end2);
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2484 endp2 = XINT (end2);
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2485 }
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2486
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2487 if (begp2 > endp2)
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2488 temp = begp2, begp2 = endp2, endp2 = temp;
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2489
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2490 if (!(BUF_BEGV (bp2) <= begp2
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2491 && begp2 <= endp2
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2492 && endp2 <= BUF_ZV (bp2)))
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2493 args_out_of_range (start2, end2);
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2494
21837
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2495 i1 = begp1;
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2496 i2 = begp2;
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2497 i1_byte = buf_charpos_to_bytepos (bp1, i1);
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2498 i2_byte = buf_charpos_to_bytepos (bp2, i2);
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2499
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2500 while (i1 < endp1 && i2 < endp2)
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2501 {
21837
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2502 /* When we find a mismatch, we must compare the
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2503 characters, not just the bytes. */
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2504 int c1, c2;
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2505
42116
37b724c77b98 (Fcompare_buffer_substrings): Add QUIT to main loop.
Richard M. Stallman <rms@gnu.org>
parents: 41065
diff changeset
2506 QUIT;
37b724c77b98 (Fcompare_buffer_substrings): Add QUIT to main loop.
Richard M. Stallman <rms@gnu.org>
parents: 41065
diff changeset
2507
21837
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2508 if (! NILP (bp1->enable_multibyte_characters))
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2509 {
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2510 c1 = BUF_FETCH_MULTIBYTE_CHAR (bp1, i1_byte);
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2511 BUF_INC_POS (bp1, i1_byte);
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2512 i1++;
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2513 }
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2514 else
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2515 {
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2516 c1 = BUF_FETCH_BYTE (bp1, i1);
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2517 c1 = unibyte_char_to_multibyte (c1);
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2518 i1++;
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2519 }
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2520
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2521 if (! NILP (bp2->enable_multibyte_characters))
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2522 {
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2523 c2 = BUF_FETCH_MULTIBYTE_CHAR (bp2, i2_byte);
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2524 BUF_INC_POS (bp2, i2_byte);
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2525 i2++;
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2526 }
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2527 else
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2528 {
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2529 c2 = BUF_FETCH_BYTE (bp2, i2);
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2530 c2 = unibyte_char_to_multibyte (c2);
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2531 i2++;
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2532 }
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2533
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2534 if (trt)
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2535 {
18106
b129c5fd7925 (Fcompare_buffer_substrings): trt contains Lisp_Objects.
Richard M. Stallman <rms@gnu.org>
parents: 18031
diff changeset
2536 c1 = XINT (trt[c1]);
b129c5fd7925 (Fcompare_buffer_substrings): trt contains Lisp_Objects.
Richard M. Stallman <rms@gnu.org>
parents: 18031
diff changeset
2537 c2 = XINT (trt[c2]);
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2538 }
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2539 if (c1 < c2)
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2540 return make_number (- 1 - chars);
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2541 if (c1 > c2)
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2542 return make_number (chars + 1);
21837
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2543
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2544 chars++;
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2545 }
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2546
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2547 /* The strings match as far as they go.
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2548 If one is shorter, that one is less. */
21837
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2549 if (chars < endp1 - begp1)
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2550 return make_number (chars + 1);
21837
ea78758c282e (Fcompare_buffer_substrings): Rewrite to loop by chars.
Richard M. Stallman <rms@gnu.org>
parents: 21821
diff changeset
2551 else if (chars < endp2 - begp2)
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2552 return make_number (- chars - 1);
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2553
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2554 /* Same length too => they are equal. */
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2555 return make_number (0);
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
2556 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2557
10480
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2558 static Lisp_Object
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2559 subst_char_in_region_unwind (arg)
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2560 Lisp_Object arg;
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2561 {
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2562 return current_buffer->undo_list = arg;
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2563 }
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2564
12622
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2565 static Lisp_Object
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2566 subst_char_in_region_unwind_1 (arg)
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2567 Lisp_Object arg;
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2568 {
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2569 return current_buffer->filename = arg;
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2570 }
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2571
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2572 DEFUN ("subst-char-in-region", Fsubst_char_in_region,
40981
fee88c193206 (Fuser_real_login_name): Reindent.
Pavel Janík <Pavel@Janik.cz>
parents: 40699
diff changeset
2573 Ssubst_char_in_region, 4, 5, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2574 doc: /* From START to END, replace FROMCHAR with TOCHAR each time it occurs.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2575 If optional arg NOUNDO is non-nil, don't record this change for undo
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2576 and don't mark the buffer as really changed.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2577 Both characters must have the same length of multi-byte form. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2578 (start, end, fromchar, tochar, noundo)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2579 Lisp_Object start, end, fromchar, tochar, noundo;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2580 {
20834
95a80c1e06c3 (Fsubst_char_in_region): Handle character-base
Kenichi Handa <handa@m17n.org>
parents: 20826
diff changeset
2581 register int pos, pos_byte, stop, i, len, end_byte;
5130
ddee29e260d2 (make_buffer_string): Don't copy intervals
Richard M. Stallman <rms@gnu.org>
parents: 4943
diff changeset
2582 int changed = 0;
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2583 unsigned char fromstr[MAX_MULTIBYTE_LENGTH], tostr[MAX_MULTIBYTE_LENGTH];
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2584 unsigned char *p;
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45398
diff changeset
2585 int count = SPECPDL_INDEX ();
25507
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2586 #define COMBINING_NO 0
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2587 #define COMBINING_BEFORE 1
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2588 #define COMBINING_AFTER 2
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2589 #define COMBINING_BOTH (COMBINING_BEFORE | COMBINING_AFTER)
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2590 int maybe_byte_combining = COMBINING_NO;
32420
40df6727225a (save_excursion_save): Additionally record the
Gerd Moellmann <gerd@gnu.org>
parents: 31774
diff changeset
2591 int last_changed = 0;
28358
7ae3851c0a19 (Fsubst_char_in_region): Don't use INC_POS in unibyte
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
2592 int multibyte_p = !NILP (current_buffer->enable_multibyte_characters);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2593
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2594 validate_region (&start, &end);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2595 CHECK_NUMBER (fromchar);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2596 CHECK_NUMBER (tochar);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2597
28358
7ae3851c0a19 (Fsubst_char_in_region): Don't use INC_POS in unibyte
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
2598 if (multibyte_p)
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2599 {
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2600 len = CHAR_STRING (XFASTINT (fromchar), fromstr);
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2601 if (CHAR_STRING (XFASTINT (tochar), tostr) != len)
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2602 error ("Characters in subst-char-in-region have different byte-lengths");
25507
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2603 if (!ASCII_BYTE_P (*tostr))
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2604 {
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2605 /* If *TOSTR is in the range 0x80..0x9F and TOCHAR is not a
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2606 complete multibyte character, it may be combined with the
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2607 after bytes. If it is in the range 0xA0..0xFF, it may be
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2608 combined with the before and after bytes. */
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2609 if (!CHAR_HEAD_P (*tostr))
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2610 maybe_byte_combining = COMBINING_BOTH;
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2611 else if (BYTES_BY_CHAR_HEAD (*tostr) > len)
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2612 maybe_byte_combining = COMBINING_AFTER;
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2613 }
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2614 }
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2615 else
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2616 {
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2617 len = 1;
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2618 fromstr[0] = XFASTINT (fromchar);
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2619 tostr[0] = XFASTINT (tochar);
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2620 }
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2621
20834
95a80c1e06c3 (Fsubst_char_in_region): Handle character-base
Kenichi Handa <handa@m17n.org>
parents: 20826
diff changeset
2622 pos = XINT (start);
95a80c1e06c3 (Fsubst_char_in_region): Handle character-base
Kenichi Handa <handa@m17n.org>
parents: 20826
diff changeset
2623 pos_byte = CHAR_TO_BYTE (pos);
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2624 stop = CHAR_TO_BYTE (XINT (end));
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2625 end_byte = stop;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2626
10480
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2627 /* If we don't want undo, turn off putting stuff on the list.
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2628 That's faster than getting rid of things,
12622
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2629 and it prevents even the entry for a first change.
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2630 Also inhibit locking the file. */
10480
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2631 if (!NILP (noundo))
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2632 {
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2633 record_unwind_protect (subst_char_in_region_unwind,
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2634 current_buffer->undo_list);
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2635 current_buffer->undo_list = Qt;
12622
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2636 /* Don't do file-locking. */
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2637 record_unwind_protect (subst_char_in_region_unwind_1,
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2638 current_buffer->filename);
205232bb7efe (Fsubst_char_in_region): Bind buffer-file-name to nil if NOUNDO is true.
Richard M. Stallman <rms@gnu.org>
parents: 12603
diff changeset
2639 current_buffer->filename = Qnil;
10480
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2640 }
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2641
20834
95a80c1e06c3 (Fsubst_char_in_region): Handle character-base
Kenichi Handa <handa@m17n.org>
parents: 20826
diff changeset
2642 if (pos_byte < GPT_BYTE)
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2643 stop = min (stop, GPT_BYTE);
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2644 while (1)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2645 {
23554
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2646 int pos_byte_next = pos_byte;
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2647
20834
95a80c1e06c3 (Fsubst_char_in_region): Handle character-base
Kenichi Handa <handa@m17n.org>
parents: 20826
diff changeset
2648 if (pos_byte >= stop)
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2649 {
20834
95a80c1e06c3 (Fsubst_char_in_region): Handle character-base
Kenichi Handa <handa@m17n.org>
parents: 20826
diff changeset
2650 if (pos_byte >= end_byte) break;
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2651 stop = end_byte;
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2652 }
20834
95a80c1e06c3 (Fsubst_char_in_region): Handle character-base
Kenichi Handa <handa@m17n.org>
parents: 20826
diff changeset
2653 p = BYTE_POS_ADDR (pos_byte);
28358
7ae3851c0a19 (Fsubst_char_in_region): Don't use INC_POS in unibyte
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
2654 if (multibyte_p)
7ae3851c0a19 (Fsubst_char_in_region): Don't use INC_POS in unibyte
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
2655 INC_POS (pos_byte_next);
7ae3851c0a19 (Fsubst_char_in_region): Don't use INC_POS in unibyte
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
2656 else
7ae3851c0a19 (Fsubst_char_in_region): Don't use INC_POS in unibyte
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
2657 ++pos_byte_next;
23554
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2658 if (pos_byte_next - pos_byte == len
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2659 && p[0] == fromstr[0]
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2660 && (len == 1
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2661 || (p[1] == fromstr[1]
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2662 && (len == 2 || (p[2] == fromstr[2]
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
2663 && (len == 3 || p[3] == fromstr[3]))))))
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2664 {
5130
ddee29e260d2 (make_buffer_string): Don't copy intervals
Richard M. Stallman <rms@gnu.org>
parents: 4943
diff changeset
2665 if (! changed)
ddee29e260d2 (make_buffer_string): Don't copy intervals
Richard M. Stallman <rms@gnu.org>
parents: 4943
diff changeset
2666 {
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2667 changed = pos;
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2668 modify_region (current_buffer, changed, XINT (end));
5242
0e99ea9941e2 (Fmessage): Use message2.
Richard M. Stallman <rms@gnu.org>
parents: 5130
diff changeset
2669
0e99ea9941e2 (Fmessage): Use message2.
Richard M. Stallman <rms@gnu.org>
parents: 5130
diff changeset
2670 if (! NILP (noundo))
0e99ea9941e2 (Fmessage): Use message2.
Richard M. Stallman <rms@gnu.org>
parents: 5130
diff changeset
2671 {
10308
90784ed0416f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 9812
diff changeset
2672 if (MODIFF - 1 == SAVE_MODIFF)
90784ed0416f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 9812
diff changeset
2673 SAVE_MODIFF++;
5242
0e99ea9941e2 (Fmessage): Use message2.
Richard M. Stallman <rms@gnu.org>
parents: 5130
diff changeset
2674 if (MODIFF - 1 == current_buffer->auto_save_modified)
0e99ea9941e2 (Fmessage): Use message2.
Richard M. Stallman <rms@gnu.org>
parents: 5130
diff changeset
2675 current_buffer->auto_save_modified++;
0e99ea9941e2 (Fmessage): Use message2.
Richard M. Stallman <rms@gnu.org>
parents: 5130
diff changeset
2676 }
5130
ddee29e260d2 (make_buffer_string): Don't copy intervals
Richard M. Stallman <rms@gnu.org>
parents: 4943
diff changeset
2677 }
ddee29e260d2 (make_buffer_string): Don't copy intervals
Richard M. Stallman <rms@gnu.org>
parents: 4943
diff changeset
2678
22895
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2679 /* Take care of the case where the new character
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
2680 combines with neighboring bytes. */
23554
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2681 if (maybe_byte_combining
25507
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2682 && (maybe_byte_combining == COMBINING_AFTER
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2683 ? (pos_byte_next < Z_BYTE
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2684 && ! CHAR_HEAD_P (FETCH_BYTE (pos_byte_next)))
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2685 : ((pos_byte_next < Z_BYTE
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2686 && ! CHAR_HEAD_P (FETCH_BYTE (pos_byte_next)))
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2687 || (pos_byte > BEG_BYTE
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2688 && ! ASCII_BYTE_P (FETCH_BYTE (pos_byte - 1))))))
22895
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2689 {
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2690 Lisp_Object tem, string;
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2691
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2692 struct gcpro gcpro1;
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2693
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2694 tem = current_buffer->undo_list;
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2695 GCPRO1 (tem);
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2696
25507
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2697 /* Make a multibyte string containing this single character. */
b9b4581adf36 (Fsubst_char_in_region): Adjust the way to check byte-combining
Kenichi Handa <handa@m17n.org>
parents: 25346
diff changeset
2698 string = make_multibyte_string (tostr, 1, len);
22895
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2699 /* replace_range is less efficient, because it moves the gap,
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2700 but it handles combining correctly. */
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2701 replace_range (pos, pos + 1, string,
23211
d7bd20e02b1d (Fsubst_char_in_region): Call replace_range with the
Kenichi Handa <handa@m17n.org>
parents: 23198
diff changeset
2702 0, 0, 1);
23554
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2703 pos_byte_next = CHAR_TO_BYTE (pos);
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2704 if (pos_byte_next > pos_byte)
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2705 /* Before combining happened. We should not increment
23565
077655e1e014 (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23554
diff changeset
2706 POS. So, to cancel the later increment of POS,
077655e1e014 (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23554
diff changeset
2707 decrease it now. */
077655e1e014 (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23554
diff changeset
2708 pos--;
23554
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2709 else
23565
077655e1e014 (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23554
diff changeset
2710 INC_POS (pos_byte_next);
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
2711
22895
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2712 if (! NILP (noundo))
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2713 current_buffer->undo_list = tem;
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2714
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2715 UNGCPRO;
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2716 }
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2717 else
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2718 {
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2719 if (NILP (noundo))
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2720 record_change (pos, 1);
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2721 for (i = 0; i < len; i++) *p++ = tostr[i];
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2722 }
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2723 last_changed = pos + 1;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2724 }
23565
077655e1e014 (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23554
diff changeset
2725 pos_byte = pos_byte_next;
077655e1e014 (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23554
diff changeset
2726 pos++;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2727 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2728
5130
ddee29e260d2 (make_buffer_string): Don't copy intervals
Richard M. Stallman <rms@gnu.org>
parents: 4943
diff changeset
2729 if (changed)
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2730 {
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2731 signal_after_change (changed,
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2732 last_changed - changed, last_changed - changed);
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2733 update_compositions (changed, last_changed, CHECK_ALL);
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2734 }
5130
ddee29e260d2 (make_buffer_string): Don't copy intervals
Richard M. Stallman <rms@gnu.org>
parents: 4943
diff changeset
2735
10480
fbb254882b9f (subst_char_in_region_unwind): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10383
diff changeset
2736 unbind_to (count, Qnil);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2737 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2738 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2739
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2740 DEFUN ("translate-region", Ftranslate_region, Stranslate_region, 3, 3, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2741 doc: /* From START to END, translate characters according to TABLE.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2742 TABLE is a string; the Nth character in it is the mapping
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2743 for the character with code N.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2744 This function does not alter multibyte characters.
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2745 It returns the number of characters changed. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2746 (start, end, table)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2747 Lisp_Object start;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2748 Lisp_Object end;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2749 register Lisp_Object table;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2750 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2751 register int pos_byte, stop; /* Limits of the region. */
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2752 register unsigned char *tt; /* Trans table. */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2753 register int nc; /* New character. */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2754 int cnt; /* Number of changes made. */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2755 int size; /* Size of translate table. */
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
2756 int pos;
26415
bda6a3a2bf96 (Ftranslate_region): Check the buffer multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 26389
diff changeset
2757 int multibyte = !NILP (current_buffer->enable_multibyte_characters);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2758
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2759 validate_region (&start, &end);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2760 CHECK_STRING (table);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2761
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
2762 size = SBYTES (table);
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
2763 tt = SDATA (table);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2764
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2765 pos_byte = CHAR_TO_BYTE (XINT (start));
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2766 stop = CHAR_TO_BYTE (XINT (end));
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2767 modify_region (current_buffer, XINT (start), XINT (end));
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
2768 pos = XINT (start);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2769
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2770 cnt = 0;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
2771 for (; pos_byte < stop; )
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2772 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2773 register unsigned char *p = BYTE_POS_ADDR (pos_byte);
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
2774 int len;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
2775 int oc;
23554
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2776 int pos_byte_next;
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2777
26415
bda6a3a2bf96 (Ftranslate_region): Check the buffer multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 26389
diff changeset
2778 if (multibyte)
bda6a3a2bf96 (Ftranslate_region): Check the buffer multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 26389
diff changeset
2779 oc = STRING_CHAR_AND_LENGTH (p, stop - pos_byte, len);
bda6a3a2bf96 (Ftranslate_region): Check the buffer multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 26389
diff changeset
2780 else
bda6a3a2bf96 (Ftranslate_region): Check the buffer multibyteness.
Kenichi Handa <handa@m17n.org>
parents: 26389
diff changeset
2781 oc = *p, len = 1;
23554
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2782 pos_byte_next = pos_byte + len;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
2783 if (oc < size && len == 1)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2784 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2785 nc = tt[oc];
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2786 if (nc != oc)
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2787 {
22895
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2788 /* Take care of the case where the new character
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
2789 combines with neighboring bytes. */
23554
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2790 if (!ASCII_BYTE_P (nc)
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2791 && (CHAR_HEAD_P (nc)
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2792 ? ! CHAR_HEAD_P (FETCH_BYTE (pos_byte + 1))
23596
8dcbcad4482c (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23577
diff changeset
2793 : (pos_byte > BEG_BYTE
23554
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2794 && ! ASCII_BYTE_P (FETCH_BYTE (pos_byte - 1)))))
22895
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2795 {
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2796 Lisp_Object string;
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2797
23554
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2798 string = make_multibyte_string (tt + oc, 1, 1);
22895
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2799 /* This is less efficient, because it moves the gap,
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2800 but it handles combining correctly. */
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2801 replace_range (pos, pos + 1, string,
23554
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2802 1, 0, 1);
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2803 pos_byte_next = CHAR_TO_BYTE (pos);
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2804 if (pos_byte_next > pos_byte)
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2805 /* Before combining happened. We should not
23565
077655e1e014 (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23554
diff changeset
2806 increment POS. So, to cancel the later
077655e1e014 (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23554
diff changeset
2807 increment of POS, we decrease it now. */
077655e1e014 (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23554
diff changeset
2808 pos--;
23554
e06e84c477fa (Fsubst_char_in_region): Correctly handle the case
Kenichi Handa <handa@m17n.org>
parents: 23553
diff changeset
2809 else
23565
077655e1e014 (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23554
diff changeset
2810 INC_POS (pos_byte_next);
22895
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2811 }
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2812 else
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2813 {
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2814 record_change (pos, 1);
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2815 *p = nc;
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2816 signal_after_change (pos, 1, 1);
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
2817 update_compositions (pos, pos + 1, CHECK_BORDER);
22895
9f800ebc6091 (Fsubst_char_in_region): Use replace_range in the case
Richard M. Stallman <rms@gnu.org>
parents: 22712
diff changeset
2818 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2819 ++cnt;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2820 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2821 }
23565
077655e1e014 (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23554
diff changeset
2822 pos_byte = pos_byte_next;
077655e1e014 (Fsubst_char_in_region): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 23554
diff changeset
2823 pos++;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2824 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2825
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2826 return make_number (cnt);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2827 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2828
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2829 DEFUN ("delete-region", Fdelete_region, Sdelete_region, 2, 2, "r",
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2830 doc: /* Delete the text between point and mark.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2831 When called from a program, expects two arguments,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2832 positions (integers or markers) specifying the stretch to be deleted. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2833 (start, end)
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2834 Lisp_Object start, end;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2835 {
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2836 validate_region (&start, &end);
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2837 del_range (XINT (start), XINT (end));
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2838 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2839 }
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26699
diff changeset
2840
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26699
diff changeset
2841 DEFUN ("delete-and-extract-region", Fdelete_and_extract_region,
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26699
diff changeset
2842 Sdelete_and_extract_region, 2, 2, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2843 doc: /* Delete the text between START and END and return it. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2844 (start, end)
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26699
diff changeset
2845 Lisp_Object start, end;
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26699
diff changeset
2846 {
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26699
diff changeset
2847 validate_region (&start, &end);
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26699
diff changeset
2848 return del_range_1 (XINT (start), XINT (end), 1, 1);
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26699
diff changeset
2849 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2850
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2851 DEFUN ("widen", Fwiden, Swiden, 0, 0, "",
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2852 doc: /* Remove restrictions (narrowing) from current buffer.
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2853 This allows the buffer's full text to be seen and edited. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2854 ()
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2855 {
19207
be370e94fb42 (Fwiden, Fnarrow_to_region, save_restriction_restore):
Richard M. Stallman <rms@gnu.org>
parents: 19032
diff changeset
2856 if (BEG != BEGV || Z != ZV)
be370e94fb42 (Fwiden, Fnarrow_to_region, save_restriction_restore):
Richard M. Stallman <rms@gnu.org>
parents: 19032
diff changeset
2857 current_buffer->clip_changed = 1;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2858 BEGV = BEG;
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2859 BEGV_BYTE = BEG_BYTE;
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2860 SET_BUF_ZV_BOTH (current_buffer, Z, Z_BYTE);
330
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
2861 /* Changing the buffer bounds invalidates any recorded current column. */
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
2862 invalidate_current_column ();
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2863 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2864 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2865
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2866 DEFUN ("narrow-to-region", Fnarrow_to_region, Snarrow_to_region, 2, 2, "r",
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2867 doc: /* Restrict editing in this buffer to the current region.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2868 The rest of the text becomes temporarily invisible and untouchable
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2869 but is not deleted; if you save the buffer in a file, the invisible
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2870 text is included in the file. \\[widen] makes all visible again.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2871 See also `save-restriction'.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2872
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2873 When calling from a program, pass two arguments; positions (integers
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2874 or markers) bounding the text that should remain visible. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2875 (start, end)
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2876 register Lisp_Object start, end;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2877 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2878 CHECK_NUMBER_COERCE_MARKER (start);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
2879 CHECK_NUMBER_COERCE_MARKER (end);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2880
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2881 if (XINT (start) > XINT (end))
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2882 {
10383
a7fe0fb11314 (Fnarrow_to_region): Swap using temp Lisp_Object, not int.
Karl Heuer <kwzh@gnu.org>
parents: 10382
diff changeset
2883 Lisp_Object tem;
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2884 tem = start; start = end; end = tem;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2885 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2886
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2887 if (!(BEG <= XINT (start) && XINT (start) <= XINT (end) && XINT (end) <= Z))
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2888 args_out_of_range (start, end);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2889
19207
be370e94fb42 (Fwiden, Fnarrow_to_region, save_restriction_restore):
Richard M. Stallman <rms@gnu.org>
parents: 19032
diff changeset
2890 if (BEGV != XFASTINT (start) || ZV != XFASTINT (end))
be370e94fb42 (Fwiden, Fnarrow_to_region, save_restriction_restore):
Richard M. Stallman <rms@gnu.org>
parents: 19032
diff changeset
2891 current_buffer->clip_changed = 1;
be370e94fb42 (Fwiden, Fnarrow_to_region, save_restriction_restore):
Richard M. Stallman <rms@gnu.org>
parents: 19032
diff changeset
2892
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
2893 SET_BUF_BEGV (current_buffer, XFASTINT (start));
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2894 SET_BUF_ZV (current_buffer, XFASTINT (end));
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15910
diff changeset
2895 if (PT < XFASTINT (start))
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2896 SET_PT (XFASTINT (start));
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15910
diff changeset
2897 if (PT > XFASTINT (end))
14071
59906ecd9b92 (Fchar_to_string, Fstring_to_char, Fgoto_char, Fencode_time, Finsert_char,
Erik Naggum <erik@naggum.no>
parents: 13878
diff changeset
2898 SET_PT (XFASTINT (end));
330
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
2899 /* Changing the buffer bounds invalidates any recorded current column. */
9b1e9b496441 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 305
diff changeset
2900 invalidate_current_column ();
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2901 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2902 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2903
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2904 Lisp_Object
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2905 save_restriction_save ()
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2906 {
30931
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2907 if (BEGV == BEG && ZV == Z)
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2908 /* The common case that the buffer isn't narrowed.
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2909 We return just the buffer object, which save_restriction_restore
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2910 recognizes as meaning `no restriction'. */
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2911 return Fcurrent_buffer ();
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2912 else
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2913 /* We have to save a restriction, so return a pair of markers, one
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2914 for the beginning and one for the end. */
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2915 {
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2916 Lisp_Object beg, end;
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2917
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2918 beg = buildmark (BEGV, BEGV_BYTE);
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2919 end = buildmark (ZV, ZV_BYTE);
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2920
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2921 /* END must move forward if text is inserted at its exact location. */
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2922 XMARKER(end)->insertion_type = 1;
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2923
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2924 return Fcons (beg, end);
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2925 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2926 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2927
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2928 Lisp_Object
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2929 save_restriction_restore (data)
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2930 Lisp_Object data;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2931 {
30931
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2932 if (CONSP (data))
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2933 /* A pair of marks bounding a saved restriction. */
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2934 {
30931
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2935 struct Lisp_Marker *beg = XMARKER (XCAR (data));
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2936 struct Lisp_Marker *end = XMARKER (XCDR (data));
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2937 struct buffer *buf = beg->buffer; /* END should have the same buffer. */
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2938
46921
40c8bb63c063 (save_restriction_restore): Defend from unchained marker.
Richard M. Stallman <rms@gnu.org>
parents: 46639
diff changeset
2939 if (buf /* Verify marker still points to a buffer. */
40c8bb63c063 (save_restriction_restore): Defend from unchained marker.
Richard M. Stallman <rms@gnu.org>
parents: 46639
diff changeset
2940 && (beg->charpos != BUF_BEGV (buf) || end->charpos != BUF_ZV (buf)))
30931
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2941 /* The restriction has changed from the saved one, so restore
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2942 the saved restriction. */
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2943 {
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2944 int pt = BUF_PT (buf);
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2945
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2946 SET_BUF_BEGV_BOTH (buf, beg->charpos, beg->bytepos);
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2947 SET_BUF_ZV_BOTH (buf, end->charpos, end->bytepos);
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2948
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2949 if (pt < beg->charpos || pt > end->charpos)
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2950 /* The point is outside the new visible range, move it inside. */
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2951 SET_BUF_PT_BOTH (buf,
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2952 clip_to_bounds (beg->charpos, pt, end->charpos),
46921
40c8bb63c063 (save_restriction_restore): Defend from unchained marker.
Richard M. Stallman <rms@gnu.org>
parents: 46639
diff changeset
2953 clip_to_bounds (beg->bytepos, BUF_PT_BYTE (buf),
30931
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2954 end->bytepos));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49472
diff changeset
2955
30931
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2956 buf->clip_changed = 1; /* Remember that the narrowing changed. */
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2957 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2958 }
30931
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2959 else
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2960 /* A buffer, which means that there was no old restriction. */
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2961 {
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2962 struct buffer *buf = XBUFFER (data);
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2963
46921
40c8bb63c063 (save_restriction_restore): Defend from unchained marker.
Richard M. Stallman <rms@gnu.org>
parents: 46639
diff changeset
2964 if (buf /* Verify marker still points to a buffer. */
40c8bb63c063 (save_restriction_restore): Defend from unchained marker.
Richard M. Stallman <rms@gnu.org>
parents: 46639
diff changeset
2965 && (BUF_BEGV (buf) != BUF_BEG (buf) || BUF_ZV (buf) != BUF_Z (buf)))
30931
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2966 /* The buffer has been narrowed, get rid of the narrowing. */
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2967 {
46921
40c8bb63c063 (save_restriction_restore): Defend from unchained marker.
Richard M. Stallman <rms@gnu.org>
parents: 46639
diff changeset
2968 SET_BUF_BEGV_BOTH (buf, BUF_BEG (buf), BUF_BEG_BYTE (buf));
40c8bb63c063 (save_restriction_restore): Defend from unchained marker.
Richard M. Stallman <rms@gnu.org>
parents: 46639
diff changeset
2969 SET_BUF_ZV_BOTH (buf, BUF_Z (buf), BUF_Z_BYTE (buf));
30931
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2970
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2971 buf->clip_changed = 1; /* Remember that the narrowing changed. */
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2972 }
35428eaf59e3 (save_restriction_save): Rewrite to use markers.
Miles Bader <miles@gnu.org>
parents: 30677
diff changeset
2973 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2974
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2975 return Qnil;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2976 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2977
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2978 DEFUN ("save-restriction", Fsave_restriction, Ssave_restriction, 0, UNEVALLED, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2979 doc: /* Execute BODY, saving and restoring current buffer's restrictions.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2980 The buffer's restrictions make parts of the beginning and end invisible.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2981 (They are set up with `narrow-to-region' and eliminated with `widen'.)
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2982 This special form, `save-restriction', saves the current buffer's restrictions
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2983 when it is entered, and restores them when it is exited.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2984 So any `narrow-to-region' within BODY lasts only until the end of the form.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2985 The old restrictions settings are restored
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2986 even in case of abnormal exit (throw or error).
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2987
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2988 The value returned is the value of the last form in BODY.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2989
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2990 Note: if you are using both `save-excursion' and `save-restriction',
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
2991 use `save-excursion' outermost:
40140
9bf80d5fff41 (Fsave_excursion, Fsave_current_buffer)
Miles Bader <miles@gnu.org>
parents: 40131
diff changeset
2992 (save-excursion (save-restriction ...))
9bf80d5fff41 (Fsave_excursion, Fsave_current_buffer)
Miles Bader <miles@gnu.org>
parents: 40131
diff changeset
2993
9bf80d5fff41 (Fsave_excursion, Fsave_current_buffer)
Miles Bader <miles@gnu.org>
parents: 40131
diff changeset
2994 usage: (save-restriction &rest BODY) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
2995 (body)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2996 Lisp_Object body;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2997 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2998 register Lisp_Object val;
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45398
diff changeset
2999 int count = SPECPDL_INDEX ();
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3000
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3001 record_unwind_protect (save_restriction_restore, save_restriction_save ());
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3002 val = Fprogn (body);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3003 return unbind_to (count, val);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3004 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3005
38059
0b34b024286d (Fmessage_box): If the frame is not under a window
Eli Zaretskii <eliz@gnu.org>
parents: 37916
diff changeset
3006 /* Buffer for the most recent text displayed by Fmessage_box. */
5884
d02095ea13a5 (Fmessage): Copy the text to be displayed into a malloc'd buffer.
Karl Heuer <kwzh@gnu.org>
parents: 5882
diff changeset
3007 static char *message_text;
d02095ea13a5 (Fmessage): Copy the text to be displayed into a malloc'd buffer.
Karl Heuer <kwzh@gnu.org>
parents: 5882
diff changeset
3008
d02095ea13a5 (Fmessage): Copy the text to be displayed into a malloc'd buffer.
Karl Heuer <kwzh@gnu.org>
parents: 5882
diff changeset
3009 /* Allocated length of that buffer. */
d02095ea13a5 (Fmessage): Copy the text to be displayed into a malloc'd buffer.
Karl Heuer <kwzh@gnu.org>
parents: 5882
diff changeset
3010 static int message_length;
d02095ea13a5 (Fmessage): Copy the text to be displayed into a malloc'd buffer.
Karl Heuer <kwzh@gnu.org>
parents: 5882
diff changeset
3011
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3012 DEFUN ("message", Fmessage, Smessage, 1, MANY, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3013 doc: /* Print a one-line message at the bottom of the screen.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3014 The first argument is a format control string, and the rest are data
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3015 to be formatted under control of the string. See `format' for details.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3016
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3017 If the first argument is nil, clear any existing message; let the
40131
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3018 minibuffer contents show.
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3019
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3020 usage: (message STRING &rest ARGS) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3021 (nargs, args)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3022 int nargs;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3023 Lisp_Object *args;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3024 {
46639
8587dd21917c (Fmessage): Treat "" like nil.
Richard M. Stallman <rms@gnu.org>
parents: 46464
diff changeset
3025 if (NILP (args[0])
8587dd21917c (Fmessage): Treat "" like nil.
Richard M. Stallman <rms@gnu.org>
parents: 46464
diff changeset
3026 || (STRINGP (args[0])
8587dd21917c (Fmessage): Treat "" like nil.
Richard M. Stallman <rms@gnu.org>
parents: 46464
diff changeset
3027 && SBYTES (args[0]) == 0))
1916
e21c1f3e37cb * editfns.c (Fmessage): Don't forget to return a value when
Jim Blandy <jimb@redhat.com>
parents: 1854
diff changeset
3028 {
e21c1f3e37cb * editfns.c (Fmessage): Don't forget to return a value when
Jim Blandy <jimb@redhat.com>
parents: 1854
diff changeset
3029 message (0);
e21c1f3e37cb * editfns.c (Fmessage): Don't forget to return a value when
Jim Blandy <jimb@redhat.com>
parents: 1854
diff changeset
3030 return Qnil;
e21c1f3e37cb * editfns.c (Fmessage): Don't forget to return a value when
Jim Blandy <jimb@redhat.com>
parents: 1854
diff changeset
3031 }
1426
67fd35416ba3 * * editfns.c (Fmessage): With no arguments, clear any active
Jim Blandy <jimb@redhat.com>
parents: 1285
diff changeset
3032 else
67fd35416ba3 * * editfns.c (Fmessage): With no arguments, clear any active
Jim Blandy <jimb@redhat.com>
parents: 1285
diff changeset
3033 {
67fd35416ba3 * * editfns.c (Fmessage): With no arguments, clear any active
Jim Blandy <jimb@redhat.com>
parents: 1285
diff changeset
3034 register Lisp_Object val;
48115
72f8d789f551 (Fmessage): Revert last change to properly handle %% format.
Andreas Schwab <schwab@suse.de>
parents: 48111
diff changeset
3035 val = Fformat (nargs, args);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3036 message3 (val, SBYTES (val), STRING_MULTIBYTE (val));
1426
67fd35416ba3 * * editfns.c (Fmessage): With no arguments, clear any active
Jim Blandy <jimb@redhat.com>
parents: 1285
diff changeset
3037 return val;
67fd35416ba3 * * editfns.c (Fmessage): With no arguments, clear any active
Jim Blandy <jimb@redhat.com>
parents: 1285
diff changeset
3038 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3039 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3040
8975
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3041 DEFUN ("message-box", Fmessage_box, Smessage_box, 1, MANY, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3042 doc: /* Display a message, in a dialog box if possible.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3043 If a dialog box is not available, use the echo area.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3044 The first argument is a format control string, and the rest are data
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3045 to be formatted under control of the string. See `format' for details.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3046
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3047 If the first argument is nil, clear any existing message; let the
40131
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3048 minibuffer contents show.
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3049
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3050 usage: (message-box STRING &rest ARGS) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3051 (nargs, args)
8975
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3052 int nargs;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3053 Lisp_Object *args;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3054 {
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3055 if (NILP (args[0]))
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3056 {
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3057 message (0);
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3058 return Qnil;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3059 }
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3060 else
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3061 {
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3062 register Lisp_Object val;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3063 val = Fformat (nargs, args);
13878
2a71500dfb93 (Fmessage_box, Fmessage_or_box):
Richard M. Stallman <rms@gnu.org>
parents: 13767
diff changeset
3064 #ifdef HAVE_MENUS
38059
0b34b024286d (Fmessage_box): If the frame is not under a window
Eli Zaretskii <eliz@gnu.org>
parents: 37916
diff changeset
3065 /* The MS-DOS frames support popup menus even though they are
0b34b024286d (Fmessage_box): If the frame is not under a window
Eli Zaretskii <eliz@gnu.org>
parents: 37916
diff changeset
3066 not FRAME_WINDOW_P. */
0b34b024286d (Fmessage_box): If the frame is not under a window
Eli Zaretskii <eliz@gnu.org>
parents: 37916
diff changeset
3067 if (FRAME_WINDOW_P (XFRAME (selected_frame))
0b34b024286d (Fmessage_box): If the frame is not under a window
Eli Zaretskii <eliz@gnu.org>
parents: 37916
diff changeset
3068 || FRAME_MSDOS_P (XFRAME (selected_frame)))
8975
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3069 {
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3070 Lisp_Object pane, menu, obj;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3071 struct gcpro gcpro1;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3072 pane = Fcons (Fcons (build_string ("OK"), Qt), Qnil);
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3073 GCPRO1 (pane);
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3074 menu = Fcons (val, pane);
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3075 obj = Fx_popup_dialog (Qt, menu);
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3076 UNGCPRO;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3077 return val;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3078 }
38059
0b34b024286d (Fmessage_box): If the frame is not under a window
Eli Zaretskii <eliz@gnu.org>
parents: 37916
diff changeset
3079 #endif /* HAVE_MENUS */
8975
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3080 /* Copy the data so that it won't move when we GC. */
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3081 if (! message_text)
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3082 {
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3083 message_text = (char *)xmalloc (80);
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3084 message_length = 80;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3085 }
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3086 if (SBYTES (val) > message_length)
8975
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3087 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3088 message_length = SBYTES (val);
8975
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3089 message_text = (char *)xrealloc (message_text, message_length);
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3090 }
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3091 bcopy (SDATA (val), message_text, SBYTES (val));
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3092 message2 (message_text, SBYTES (val),
21358
e9f7d8708bae (Fmessage_box): Pass the missing third argument
Richard M. Stallman <rms@gnu.org>
parents: 21257
diff changeset
3093 STRING_MULTIBYTE (val));
8975
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3094 return val;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3095 }
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3096 }
13878
2a71500dfb93 (Fmessage_box, Fmessage_or_box):
Richard M. Stallman <rms@gnu.org>
parents: 13767
diff changeset
3097 #ifdef HAVE_MENUS
8975
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3098 extern Lisp_Object last_nonmenu_event;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3099 #endif
13878
2a71500dfb93 (Fmessage_box, Fmessage_or_box):
Richard M. Stallman <rms@gnu.org>
parents: 13767
diff changeset
3100
8975
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3101 DEFUN ("message-or-box", Fmessage_or_box, Smessage_or_box, 1, MANY, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3102 doc: /* Display a message in a dialog box or in the echo area.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3103 If this command was invoked with the mouse, use a dialog box if
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3104 `use-dialog-box' is non-nil.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3105 Otherwise, use the echo area.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3106 The first argument is a format control string, and the rest are data
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3107 to be formatted under control of the string. See `format' for details.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3108
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3109 If the first argument is nil, clear any existing message; let the
40131
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3110 minibuffer contents show.
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3111
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3112 usage: (message-or-box STRING &rest ARGS) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3113 (nargs, args)
8975
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3114 int nargs;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3115 Lisp_Object *args;
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3116 {
13878
2a71500dfb93 (Fmessage_box, Fmessage_or_box):
Richard M. Stallman <rms@gnu.org>
parents: 13767
diff changeset
3117 #ifdef HAVE_MENUS
26699
ed4ab9d24450 (Fmessage_or_box): Use use_dialog_box.
Dave Love <fx@gnu.org>
parents: 26629
diff changeset
3118 if ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
28470
93996c44b23a * editfns.c (text_property_stickiness, Fmessage_or_box): Use NILP to test
Ken Raeburn <raeburn@raeburn.org>
parents: 28358
diff changeset
3119 && use_dialog_box)
8981
6e1a5ff3d795 (Fmessage_or_box): Use Fmessage_box with new name.
Richard M. Stallman <rms@gnu.org>
parents: 8975
diff changeset
3120 return Fmessage_box (nargs, args);
8975
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3121 #endif
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3122 return Fmessage (nargs, args);
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3123 }
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
3124
18937
ddb91108a9d2 (Fcurrent_message): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18756
diff changeset
3125 DEFUN ("current-message", Fcurrent_message, Scurrent_message, 0, 0, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3126 doc: /* Return the string currently displayed in the echo area, or nil if none. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3127 ()
18937
ddb91108a9d2 (Fcurrent_message): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18756
diff changeset
3128 {
25346
15ec35852b48 Remove conditional compilation on NO_PROMPT_IN_BUFFER.
Gerd Moellmann <gerd@gnu.org>
parents: 25018
diff changeset
3129 return current_message ();
18937
ddb91108a9d2 (Fcurrent_message): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18756
diff changeset
3130 }
ddb91108a9d2 (Fcurrent_message): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18756
diff changeset
3131
25815
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3132
41062
07a4ff5f0909 (Fpropertize): Allow call with 1 arg.
Richard M. Stallman <rms@gnu.org>
parents: 40981
diff changeset
3133 DEFUN ("propertize", Fpropertize, Spropertize, 1, MANY, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3134 doc: /* Return a copy of STRING with text properties added.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3135 First argument is the string to copy.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3136 Remaining arguments form a sequence of PROPERTY VALUE pairs for text
40131
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3137 properties to add to the result.
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3138 usage: (propertize STRING &rest PROPERTIES) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3139 (nargs, args)
25815
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3140 int nargs;
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3141 Lisp_Object *args;
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3142 {
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3143 Lisp_Object properties, string;
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3144 struct gcpro gcpro1, gcpro2;
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3145 int i;
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3146
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3147 /* Number of args must be odd. */
41062
07a4ff5f0909 (Fpropertize): Allow call with 1 arg.
Richard M. Stallman <rms@gnu.org>
parents: 40981
diff changeset
3148 if ((nargs & 1) == 0 || nargs < 1)
25815
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3149 error ("Wrong number of arguments");
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3150
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3151 properties = string = Qnil;
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3152 GCPRO2 (properties, string);
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
3153
25815
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3154 /* First argument must be a string. */
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
3155 CHECK_STRING (args[0]);
25815
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3156 string = Fcopy_sequence (args[0]);
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3157
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3158 for (i = 1; i < nargs; i += 2)
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3159 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
3160 CHECK_SYMBOL (args[i]);
25815
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3161 properties = Fcons (args[i], Fcons (args[i + 1], properties));
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3162 }
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3163
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3164 Fadd_text_properties (make_number (0),
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3165 make_number (SCHARS (string)),
25815
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3166 properties, string);
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3167 RETURN_UNGCPRO (string);
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3168 }
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3169
768a5bb054df (Fproperties): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25782
diff changeset
3170
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3171 /* Number of bytes that STRING will occupy when put into the result.
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3172 MULTIBYTE is nonzero if the result should be multibyte. */
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3173
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3174 #define CONVERTED_BYTE_SIZE(MULTIBYTE, STRING) \
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3175 (((MULTIBYTE) && ! STRING_MULTIBYTE (STRING)) \
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3176 ? count_size_as_multibyte (SDATA (STRING), SBYTES (STRING)) \
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3177 : SBYTES (STRING))
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3178
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3179 DEFUN ("format", Fformat, Sformat, 1, MANY, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3180 doc: /* Format a string out of a control-string and arguments.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3181 The first argument is a control string.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3182 The other arguments are substituted into it to make the result, a string.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3183 It may contain %-sequences meaning to substitute the next argument.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3184 %s means print a string argument. Actually, prints any object, with `princ'.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3185 %d means print as number in decimal (%o octal, %x hex).
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3186 %X is like %x, but uses upper case.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3187 %e means print a number in exponential notation.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3188 %f means print a number in decimal-point notation.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3189 %g means print a number in exponential notation
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3190 or decimal-point notation, whichever uses fewer characters.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3191 %c means print a number as a single character.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3192 %S means print any object as an s-expression (using `prin1').
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3193 The argument used for %d, %o, %x, %e, %f, %g or %c must be a number.
40131
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3194 Use %% to put a single % into the output.
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3195
de086e415fa2 (Finsert, Finsert_and_inherit, Finsert_before_markers, Fmessage)
Miles Bader <miles@gnu.org>
parents: 40046
diff changeset
3196 usage: (format STRING &rest OBJECTS) */)
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3197 (nargs, args)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3198 int nargs;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3199 register Lisp_Object *args;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3200 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3201 register int n; /* The number of the next arg to substitute */
20826
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3202 register int total; /* An estimate of the final length */
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3203 char *buf, *p;
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3204 register unsigned char *format, *end, *format_start;
25782
8f59abd3a02b (init_editfns): Remove unused variables.
Gerd Moellmann <gerd@gnu.org>
parents: 25662
diff changeset
3205 int nchars;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3206 /* Nonzero if the output should be a multibyte string,
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3207 which is true if any of the inputs is one. */
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3208 int multibyte = 0;
22698
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3209 /* When we make a multibyte string, we must pay attention to the
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3210 byte combining problem, i.e., a byte may be combined with a
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3211 multibyte charcter of the previous string. This flag tells if we
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3212 must consider such a situation or not. */
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3213 int maybe_combine_byte;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3214 unsigned char *this_format;
48764
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3215 /* Precision for each spec, or -1, a flag value meaning no precision
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3216 was given in that spec. Element 0, corresonding to the format
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3217 string itself, will not be used. Element NARGS, corresponding to
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3218 no argument, *will* be assigned to in the case that a `%' and `.'
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3219 occur after the final format specifier. */
48782
b02bdb795a5c (Fformat): Use alloca, not _alloca.
Juanma Barranquero <lekktu@gmail.com>
parents: 48781
diff changeset
3220 int *precision = (int *) (alloca(nargs * sizeof (int)));
20826
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3221 int longest_format;
20804
14fa73136e64 (CONVERTED_BYTE_SIZE): Fix the logic.
Kenichi Handa <handa@m17n.org>
parents: 20706
diff changeset
3222 Lisp_Object val;
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3223 int arg_intervals = 0;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3224
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3225 /* discarded[I] is 1 if byte I of the format
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3226 string was not copied into the output.
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3227 It is 2 if byte I was not the first byte of its character. */
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3228 char *discarded;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3229
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3230 /* Each element records, for one argument,
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3231 the start and end bytepos in the output string,
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3232 and whether the argument is a string with intervals.
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3233 info[0] is unused. Unused elements have -1 for start. */
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3234 struct info
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3235 {
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3236 int start, end, intervals;
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3237 } *info = 0;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3238
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3239 /* It should not be necessary to GCPRO ARGS, because
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3240 the caller in the interpreter should take care of that. */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3241
20826
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3242 /* Try to determine whether the result should be multibyte.
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3243 This is not always right; sometimes the result needs to be multibyte
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3244 because of an object that we will pass through prin1,
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3245 and in that case, we won't know it here. */
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3246 for (n = 0; n < nargs; n++)
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3247 {
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3248 if (STRINGP (args[n]) && STRING_MULTIBYTE (args[n]))
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3249 multibyte = 1;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3250 /* Piggyback on this loop to initialize precision[N]. */
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3251 precision[n] = -1;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3252 }
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3253
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
3254 CHECK_STRING (args[0]);
50430
4d74ea083bd2 (Fformat): Use a copy of FORMAT string so that we can
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
3255 /* We may have to change "%S" to "%s". */
4d74ea083bd2 (Fformat): Use a copy of FORMAT string so that we can
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
3256 args[0] = Fcopy_sequence (args[0]);
20826
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3257
50746
2a57a6e6b390 (Fformat): Set abort_on_gc during first scan of format.
Richard M. Stallman <rms@gnu.org>
parents: 50555
diff changeset
3258 /* GC should never happen here, so abort if it does. */
2a57a6e6b390 (Fformat): Set abort_on_gc during first scan of format.
Richard M. Stallman <rms@gnu.org>
parents: 50555
diff changeset
3259 abort_on_gc++;
2a57a6e6b390 (Fformat): Set abort_on_gc during first scan of format.
Richard M. Stallman <rms@gnu.org>
parents: 50555
diff changeset
3260
20826
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3261 /* If we start out planning a unibyte result,
50746
2a57a6e6b390 (Fformat): Set abort_on_gc during first scan of format.
Richard M. Stallman <rms@gnu.org>
parents: 50555
diff changeset
3262 then discover it has to be multibyte, we jump back to retry.
2a57a6e6b390 (Fformat): Set abort_on_gc during first scan of format.
Richard M. Stallman <rms@gnu.org>
parents: 50555
diff changeset
3263 That can only happen from the first large while loop below. */
20826
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3264 retry:
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3265
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3266 format = SDATA (args[0]);
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3267 format_start = format;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3268 end = format + SBYTES (args[0]);
20826
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3269 longest_format = 0;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3270
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3271 /* Make room in result for all the non-%-codes in the control string. */
20826
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3272 total = 5 + CONVERTED_BYTE_SIZE (multibyte, args[0]);
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3273
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3274 /* Allocate the info and discarded tables. */
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3275 {
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3276 int nbytes = nargs * sizeof *info;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3277 int i;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3278 info = (struct info *) alloca (nbytes);
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3279 bzero (info, nbytes);
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3280 for (i = 0; i <= nargs; i++)
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3281 info[i].start = -1;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3282 discarded = (char *) alloca (SBYTES (args[0]));
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3283 bzero (discarded, SBYTES (args[0]));
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3284 }
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3285
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3286 /* Add to TOTAL enough space to hold the converted arguments. */
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3287
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3288 n = 0;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3289 while (format != end)
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3290 if (*format++ == '%')
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3291 {
34566
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3292 int thissize = 0;
42484
717eee813b2c (Fformat): Update thissize from field_width
Richard M. Stallman <rms@gnu.org>
parents: 42116
diff changeset
3293 int actual_width = 0;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3294 unsigned char *this_format_start = format - 1;
48764
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3295 int field_width = 0;
34566
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3296
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3297 /* General format specifications look like
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3298
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3299 '%' [flags] [field-width] [precision] format
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3300
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3301 where
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3302
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3303 flags ::= [#-* 0]+
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3304 field-width ::= [0-9]+
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3305 precision ::= '.' [0-9]*
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3306
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3307 If a field-width is specified, it specifies to which width
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3308 the output should be padded with blanks, iff the output
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3309 string is shorter than field-width.
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3310
48764
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3311 If precision is specified, it specifies the number of
34566
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3312 digits to print after the '.' for floats, or the max.
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3313 number of chars to print from a string. */
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3314
48764
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3315 /* NOTE the handling of specifiers here differs in some ways
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3316 from the libc model. There are bugs in this code that lead
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3317 to incorrect formatting when flags recognized by C but
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3318 neither parsed nor rejected here are used. Further
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3319 revisions will be made soon. */
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3320
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3321 /* incorrect list of flags to skip; will be fixed */
34566
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3322 while (index ("-*# 0", *format))
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3323 ++format;
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3324
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3325 if (*format >= '0' && *format <= '9')
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3326 {
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3327 for (field_width = 0; *format >= '0' && *format <= '9'; ++format)
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3328 field_width = 10 * field_width + *format - '0';
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3329 }
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3330
48764
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3331 /* N is not incremented for another few lines below, so refer to
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3332 element N+1 (which might be precision[NARGS]). */
34566
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3333 if (*format == '.')
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3334 {
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3335 ++format;
48764
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3336 for (precision[n+1] = 0; *format >= '0' && *format <= '9'; ++format)
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3337 precision[n+1] = 10 * precision[n+1] + *format - '0';
34566
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3338 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3339
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3340 if (format - this_format_start + 1 > longest_format)
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3341 longest_format = format - this_format_start + 1;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3342
23197
0d3baa5514b7 (Fformat): Detect incomplete format spec at string's end.
Karl Heuer <kwzh@gnu.org>
parents: 23166
diff changeset
3343 if (format == end)
0d3baa5514b7 (Fformat): Detect incomplete format spec at string's end.
Karl Heuer <kwzh@gnu.org>
parents: 23166
diff changeset
3344 error ("Format string ends in middle of format specifier");
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3345 if (*format == '%')
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3346 format++;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3347 else if (++n >= nargs)
12831
3917c5d131d3 (Fformat): Limit minlen to avoid stack overflow.
Richard M. Stallman <rms@gnu.org>
parents: 12623
diff changeset
3348 error ("Not enough arguments for format string");
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3349 else if (*format == 'S')
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3350 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3351 /* For `S', prin1 the argument and then treat like a string. */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3352 register Lisp_Object tem;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3353 tem = Fprin1_to_string (args[n], Qnil);
20826
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3354 if (STRING_MULTIBYTE (tem) && ! multibyte)
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3355 {
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3356 multibyte = 1;
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3357 goto retry;
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3358 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3359 args[n] = tem;
50430
4d74ea083bd2 (Fformat): Use a copy of FORMAT string so that we can
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
3360 /* If we restart the loop, we should not come here again
4d74ea083bd2 (Fformat): Use a copy of FORMAT string so that we can
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
3361 because args[n] is now a string and calling
4d74ea083bd2 (Fformat): Use a copy of FORMAT string so that we can
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
3362 Fprin1_to_string on it produces superflous double
4d74ea083bd2 (Fformat): Use a copy of FORMAT string so that we can
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
3363 quotes. So, change "%S" to "%s" now. */
4d74ea083bd2 (Fformat): Use a copy of FORMAT string so that we can
Kenichi Handa <handa@m17n.org>
parents: 49600
diff changeset
3364 *format = 's';
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3365 goto string;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3366 }
9163
41fe5f636879 (lisp_time_argument, Finsert, Finsert_and_inherit, Finsert_before_markers,
Karl Heuer <kwzh@gnu.org>
parents: 9154
diff changeset
3367 else if (SYMBOLP (args[n]))
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3368 {
46447
8e01c92219ab (Fstring_to_char): Don't use XSTRING/XSETSTRING to copy a lisp value.
Ken Raeburn <raeburn@raeburn.org>
parents: 46443
diff changeset
3369 args[n] = SYMBOL_NAME (args[n]);
20861
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
3370 if (STRING_MULTIBYTE (args[n]) && ! multibyte)
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
3371 {
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
3372 multibyte = 1;
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
3373 goto retry;
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
3374 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3375 goto string;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3376 }
9163
41fe5f636879 (lisp_time_argument, Finsert, Finsert_and_inherit, Finsert_before_markers,
Karl Heuer <kwzh@gnu.org>
parents: 9154
diff changeset
3377 else if (STRINGP (args[n]))
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3378 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3379 string:
6528
d0f6a386b7cb (Fformat): Validate number and type of arguments.
Karl Heuer <kwzh@gnu.org>
parents: 6206
diff changeset
3380 if (*format != 's' && *format != 'S')
23197
0d3baa5514b7 (Fformat): Detect incomplete format spec at string's end.
Karl Heuer <kwzh@gnu.org>
parents: 23166
diff changeset
3381 error ("Format specifier doesn't match argument type");
48764
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3382 /* In the case (PRECISION[N] > 0), THISSIZE may not need
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3383 to be as large as is calculated here. Easy check for
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3384 the case PRECISION = 0. */
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3385 thissize = precision[n] ? CONVERTED_BYTE_SIZE (multibyte, args[n]) : 0;
42484
717eee813b2c (Fformat): Update thissize from field_width
Richard M. Stallman <rms@gnu.org>
parents: 42116
diff changeset
3386 actual_width = lisp_string_width (args[n], -1, NULL, NULL);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3387 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3388 /* Would get MPV otherwise, since Lisp_Int's `point' to low memory. */
9163
41fe5f636879 (lisp_time_argument, Finsert, Finsert_and_inherit, Finsert_before_markers,
Karl Heuer <kwzh@gnu.org>
parents: 9154
diff changeset
3389 else if (INTEGERP (args[n]) && *format != 's')
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3390 {
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3522
diff changeset
3391 /* The following loop assumes the Lisp type indicates
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3392 the proper way to pass the argument.
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3393 So make sure we have a flonum if the argument should
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3394 be a double. */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3395 if (*format == 'e' || *format == 'f' || *format == 'g')
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3396 args[n] = Ffloat (args[n]);
23326
df3f641c9ca1 (Fformat): Check format control characters.
Kenichi Handa <handa@m17n.org>
parents: 23292
diff changeset
3397 else
df3f641c9ca1 (Fformat): Check format control characters.
Kenichi Handa <handa@m17n.org>
parents: 23292
diff changeset
3398 if (*format != 'd' && *format != 'o' && *format != 'x'
24505
d6fcaeb4c03c (Fformat): Accept %i format.
Karl Heuer <kwzh@gnu.org>
parents: 24272
diff changeset
3399 && *format != 'i' && *format != 'X' && *format != 'c')
23326
df3f641c9ca1 (Fformat): Check format control characters.
Kenichi Handa <handa@m17n.org>
parents: 23292
diff changeset
3400 error ("Invalid format operation %%%c", *format);
df3f641c9ca1 (Fformat): Check format control characters.
Kenichi Handa <handa@m17n.org>
parents: 23292
diff changeset
3401
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
3402 thissize = 30;
49285
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3403 if (*format == 'c')
21064
90bdbe2754c8 (Fformat): Format multibyte characters by "%c"
Kenichi Handa <handa@m17n.org>
parents: 21052
diff changeset
3404 {
49285
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3405 if (! SINGLE_BYTE_CHAR_P (XINT (args[n]))
49472
3fd3c5521557 (Fformat): Add comment about the treatment of 0 as a multibyte
Kenichi Handa <handa@m17n.org>
parents: 49443
diff changeset
3406 /* Note: No one can remeber why we have to treat
3fd3c5521557 (Fformat): Add comment about the treatment of 0 as a multibyte
Kenichi Handa <handa@m17n.org>
parents: 49443
diff changeset
3407 the character 0 as a multibyte character here.
3fd3c5521557 (Fformat): Add comment about the treatment of 0 as a multibyte
Kenichi Handa <handa@m17n.org>
parents: 49443
diff changeset
3408 But, until it causes a real problem, let's
3fd3c5521557 (Fformat): Add comment about the treatment of 0 as a multibyte
Kenichi Handa <handa@m17n.org>
parents: 49443
diff changeset
3409 don't change it. */
49285
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3410 || XINT (args[n]) == 0)
21064
90bdbe2754c8 (Fformat): Format multibyte characters by "%c"
Kenichi Handa <handa@m17n.org>
parents: 21052
diff changeset
3411 {
49285
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3412 if (! multibyte)
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3413 {
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3414 multibyte = 1;
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3415 goto retry;
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3416 }
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3417 args[n] = Fchar_to_string (args[n]);
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3418 thissize = SBYTES (args[n]);
21064
90bdbe2754c8 (Fformat): Format multibyte characters by "%c"
Kenichi Handa <handa@m17n.org>
parents: 21052
diff changeset
3419 }
49285
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3420 else if (! ASCII_BYTE_P (XINT (args[n])) && multibyte)
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3421 {
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3422 args[n]
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3423 = Fchar_to_string (Funibyte_char_to_multibyte (args[n]));
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3424 thissize = SBYTES (args[n]);
7ec1335b6d36 (Fformat): Convert an unibyte char argument that is
Kenichi Handa <handa@m17n.org>
parents: 48908
diff changeset
3425 }
21064
90bdbe2754c8 (Fformat): Format multibyte characters by "%c"
Kenichi Handa <handa@m17n.org>
parents: 21052
diff changeset
3426 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3427 }
9163
41fe5f636879 (lisp_time_argument, Finsert, Finsert_and_inherit, Finsert_before_markers,
Karl Heuer <kwzh@gnu.org>
parents: 9154
diff changeset
3428 else if (FLOATP (args[n]) && *format != 's')
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3429 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3430 if (! (*format == 'e' || *format == 'f' || *format == 'g'))
48020
7ac7ca5ac550 (Fformat): Detect invalid format letters for floats.
Richard M. Stallman <rms@gnu.org>
parents: 47763
diff changeset
3431 {
7ac7ca5ac550 (Fformat): Detect invalid format letters for floats.
Richard M. Stallman <rms@gnu.org>
parents: 47763
diff changeset
3432 if (*format != 'd' && *format != 'o' && *format != 'x'
7ac7ca5ac550 (Fformat): Detect invalid format letters for floats.
Richard M. Stallman <rms@gnu.org>
parents: 47763
diff changeset
3433 && *format != 'i' && *format != 'X' && *format != 'c')
7ac7ca5ac550 (Fformat): Detect invalid format letters for floats.
Richard M. Stallman <rms@gnu.org>
parents: 47763
diff changeset
3434 error ("Invalid format operation %%%c", *format);
7ac7ca5ac550 (Fformat): Detect invalid format letters for floats.
Richard M. Stallman <rms@gnu.org>
parents: 47763
diff changeset
3435 args[n] = Ftruncate (args[n], Qnil);
7ac7ca5ac550 (Fformat): Detect invalid format letters for floats.
Richard M. Stallman <rms@gnu.org>
parents: 47763
diff changeset
3436 }
34566
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3437
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3438 /* Note that we're using sprintf to print floats,
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3439 so we have to take into account what that function
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3440 prints. */
48782
b02bdb795a5c (Fformat): Use alloca, not _alloca.
Juanma Barranquero <lekktu@gmail.com>
parents: 48781
diff changeset
3441 /* Filter out flag value of -1. */
48908
d5680dc3113e (Fformat): Add parens.
Richard M. Stallman <rms@gnu.org>
parents: 48782
diff changeset
3442 thissize = (MAX_10_EXP + 100
d5680dc3113e (Fformat): Add parens.
Richard M. Stallman <rms@gnu.org>
parents: 48782
diff changeset
3443 + (precision[n] > 0 ? precision[n] : 0));
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3444 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3445 else
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3446 {
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3447 /* Anything but a string, convert to a string using princ. */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3448 register Lisp_Object tem;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3449 tem = Fprin1_to_string (args[n], Qt);
21052
eea2c6235bd1 (Fformat): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents: 21035
diff changeset
3450 if (STRING_MULTIBYTE (tem) & ! multibyte)
20826
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3451 {
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3452 multibyte = 1;
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3453 goto retry;
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3454 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3455 args[n] = tem;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3456 goto string;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3457 }
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
3458
42484
717eee813b2c (Fformat): Update thissize from field_width
Richard M. Stallman <rms@gnu.org>
parents: 42116
diff changeset
3459 thissize += max (0, field_width - actual_width);
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3460 total += thissize + 4;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3461 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3462
50746
2a57a6e6b390 (Fformat): Set abort_on_gc during first scan of format.
Richard M. Stallman <rms@gnu.org>
parents: 50555
diff changeset
3463 abort_on_gc--;
2a57a6e6b390 (Fformat): Set abort_on_gc during first scan of format.
Richard M. Stallman <rms@gnu.org>
parents: 50555
diff changeset
3464
20826
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3465 /* Now we can no longer jump to retry.
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3466 TOTAL and LONGEST_FORMAT are known for certain. */
cbaa9e50b013 (Fformat): If MULTIBYTE is changed to 1
Richard M. Stallman <rms@gnu.org>
parents: 20804
diff changeset
3467
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3468 this_format = (unsigned char *) alloca (longest_format + 1);
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3469
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3470 /* Allocate the space for the result.
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3471 Note that TOTAL is an overestimate. */
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3472 if (total < 1000)
21914
d1f79bb20a20 (Fformat): Fix casts when assigning buf.
Richard M. Stallman <rms@gnu.org>
parents: 21899
diff changeset
3473 buf = (char *) alloca (total + 1);
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3474 else
21914
d1f79bb20a20 (Fformat): Fix casts when assigning buf.
Richard M. Stallman <rms@gnu.org>
parents: 21899
diff changeset
3475 buf = (char *) xmalloc (total + 1);
4019
0463aae99f4e * editfns.c (Fformat): Since floats occupy two elements in the
Jim Blandy <jimb@redhat.com>
parents: 3776
diff changeset
3476
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3477 p = buf;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3478 nchars = 0;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3479 n = 0;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3480
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3481 /* Scan the format and store result in BUF. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3482 format = SDATA (args[0]);
50746
2a57a6e6b390 (Fformat): Set abort_on_gc during first scan of format.
Richard M. Stallman <rms@gnu.org>
parents: 50555
diff changeset
3483 format_start = format;
2a57a6e6b390 (Fformat): Set abort_on_gc during first scan of format.
Richard M. Stallman <rms@gnu.org>
parents: 50555
diff changeset
3484 end = format + SBYTES (args[0]);
22698
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3485 maybe_combine_byte = 0;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3486 while (format != end)
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3487 {
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3488 if (*format == '%')
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3489 {
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3490 int minlen;
21225
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3491 int negative = 0;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3492 unsigned char *this_format_start = format;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3493
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3494 discarded[format - format_start] = 1;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3495 format++;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3496
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3497 /* Process a numeric arg and skip it. */
48764
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3498 /* NOTE atoi is the wrong thing to use here; will be fixed */
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3499 minlen = atoi (format);
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3500 if (minlen < 0)
21225
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3501 minlen = - minlen, negative = 1;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3502
48764
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3503 /* NOTE the parsing here is not consistent with the first
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3504 pass, and neither attempt is what we want to do. Will be
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3505 fixed. */
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3506 while ((*format >= '0' && *format <= '9')
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3507 || *format == '-' || *format == ' ' || *format == '.')
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3508 {
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3509 discarded[format - format_start] = 1;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3510 format++;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3511 }
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3512
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3513 if (*format++ == '%')
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3514 {
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3515 *p++ = '%';
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3516 nchars++;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3517 continue;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3518 }
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3519
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3520 ++n;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3521
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3522 discarded[format - format_start - 1] = 1;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3523 info[n].start = nchars;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3524
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3525 if (STRINGP (args[n]))
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3526 {
48764
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3527 /* handle case (precision[n] >= 0) */
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3528
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3529 int width, padding;
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3530 int nbytes, start, end;
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3531 int nchars_string;
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3532
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3533 /* lisp_string_width ignores a precision of 0, but GNU
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3534 libc functions print 0 characters when the precision
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3535 is 0. Imitate libc behavior here. Changing
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3536 lisp_string_width is the right thing, and will be
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3537 done, but meanwhile we work with it. */
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3538
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3539 if (precision[n] == 0)
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3540 width = nchars_string = nbytes = 0;
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3541 else if (precision[n] > 0)
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3542 width = lisp_string_width (args[n], precision[n], &nchars_string, &nbytes);
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3543 else
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3544 { /* no precision spec given for this argument */
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3545 width = lisp_string_width (args[n], -1, NULL, NULL);
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3546 nbytes = SBYTES (args[n]);
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3547 nchars_string = SCHARS (args[n]);
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3548 }
21225
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3549
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3550 /* If spec requires it, pad on right with spaces. */
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3551 padding = minlen - width;
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3552 if (! negative)
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3553 while (padding-- > 0)
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3554 {
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3555 *p++ = ' ';
35461
f0f0e9179ed6 (Fformat): Don't extend text properties from arguments
Gerd Moellmann <gerd@gnu.org>
parents: 35440
diff changeset
3556 ++nchars;
21225
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3557 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3558
35461
f0f0e9179ed6 (Fformat): Don't extend text properties from arguments
Gerd Moellmann <gerd@gnu.org>
parents: 35440
diff changeset
3559 start = nchars;
48764
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3560 nchars += nchars_string;
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3561 end = nchars;
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3562
22698
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3563 if (p > buf
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3564 && multibyte
22712
6f129ed55108 (Fformat): Replace explicit numeric constants with proper macros.
Kenichi Handa <handa@m17n.org>
parents: 22698
diff changeset
3565 && !ASCII_BYTE_P (*((unsigned char *) p - 1))
22698
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3566 && STRING_MULTIBYTE (args[n])
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3567 && !CHAR_HEAD_P (SREF (args[n], 0)))
22698
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3568 maybe_combine_byte = 1;
48764
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3569
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3570 p += copy_text (SDATA (args[n]), p,
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3571 nbytes,
4a69081f2ff4 (Fformat): Handle precision in string conversion specifiers like libc
Kai Großjohann <kgrossjo@eu.uu.net>
parents: 48134
diff changeset
3572 STRING_MULTIBYTE (args[n]), multibyte);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3573
21225
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3574 if (negative)
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3575 while (padding-- > 0)
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3576 {
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3577 *p++ = ' ';
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3578 nchars++;
47e189a470d2 (Fformat): Handle padding before or after, for %s etc.
Richard M. Stallman <rms@gnu.org>
parents: 21202
diff changeset
3579 }
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3580
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3581 /* If this argument has text properties, record where
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3582 in the result string it appears. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3583 if (STRING_INTERVALS (args[n]))
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3584 info[n].intervals = arg_intervals = 1;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3585 }
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3586 else if (INTEGERP (args[n]) || FLOATP (args[n]))
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3587 {
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3588 int this_nchars;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3589
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3590 bcopy (this_format_start, this_format,
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3591 format - this_format_start);
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3592 this_format[format - this_format_start] = 0;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3593
21202
ef954087e7b9 (Fformat): Properly print floats.
Richard M. Stallman <rms@gnu.org>
parents: 21200
diff changeset
3594 if (INTEGERP (args[n]))
ef954087e7b9 (Fformat): Properly print floats.
Richard M. Stallman <rms@gnu.org>
parents: 21200
diff changeset
3595 sprintf (p, this_format, XINT (args[n]));
ef954087e7b9 (Fformat): Properly print floats.
Richard M. Stallman <rms@gnu.org>
parents: 21200
diff changeset
3596 else
25662
0a7261c1d487 Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents: 25656
diff changeset
3597 sprintf (p, this_format, XFLOAT_DATA (args[n]));
12603
6d033c8501d4 (Fformat): Increment total for size of control string.
Richard M. Stallman <rms@gnu.org>
parents: 12602
diff changeset
3598
22698
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3599 if (p > buf
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3600 && multibyte
22712
6f129ed55108 (Fformat): Replace explicit numeric constants with proper macros.
Kenichi Handa <handa@m17n.org>
parents: 22698
diff changeset
3601 && !ASCII_BYTE_P (*((unsigned char *) p - 1))
6f129ed55108 (Fformat): Replace explicit numeric constants with proper macros.
Kenichi Handa <handa@m17n.org>
parents: 22698
diff changeset
3602 && !CHAR_HEAD_P (*((unsigned char *) p)))
22698
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3603 maybe_combine_byte = 1;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3604 this_nchars = strlen (p);
29008
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3605 if (multibyte)
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3606 p += str_to_multibyte (p, buf + total - p, this_nchars);
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3607 else
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3608 p += this_nchars;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3609 nchars += this_nchars;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3610 }
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3611
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3612 info[n].end = nchars;
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3613 }
20861
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
3614 else if (STRING_MULTIBYTE (args[0]))
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
3615 {
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
3616 /* Copy a whole multibyte character. */
22698
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3617 if (p > buf
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3618 && multibyte
22712
6f129ed55108 (Fformat): Replace explicit numeric constants with proper macros.
Kenichi Handa <handa@m17n.org>
parents: 22698
diff changeset
3619 && !ASCII_BYTE_P (*((unsigned char *) p - 1))
6f129ed55108 (Fformat): Replace explicit numeric constants with proper macros.
Kenichi Handa <handa@m17n.org>
parents: 22698
diff changeset
3620 && !CHAR_HEAD_P (*format))
22698
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3621 maybe_combine_byte = 1;
20861
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
3622 *p++ = *format++;
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3623 while (! CHAR_HEAD_P (*format))
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3624 {
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3625 discarded[format - format_start] = 2;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3626 *p++ = *format++;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3627 }
20861
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
3628 nchars++;
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
3629 }
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
3630 else if (multibyte)
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3631 {
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3632 /* Convert a single-byte character to multibyte. */
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3633 int len = copy_text (format, p, 1, 0, 1);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3634
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3635 p += len;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3636 format++;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3637 nchars++;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3638 }
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3639 else
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3640 *p++ = *format++, nchars++;
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3641 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3642
34566
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3643 if (p > buf + total + 1)
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3644 abort ();
0370af7597d2 (Fformat): Prevent a buffer overrun when the format
Gerd Moellmann <gerd@gnu.org>
parents: 34165
diff changeset
3645
22698
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3646 if (maybe_combine_byte)
ea6ef56295b4 (Fformat): Pay attention to the byte combining problem.
Kenichi Handa <handa@m17n.org>
parents: 22669
diff changeset
3647 nchars = multibyte_chars_in_text (buf, p - buf);
21257
205a5aa4aa2f (Fchar_to_string): Use make_string_from_bytes.
Richard M. Stallman <rms@gnu.org>
parents: 21245
diff changeset
3648 val = make_specified_string (buf, nchars, p - buf, multibyte);
20804
14fa73136e64 (CONVERTED_BYTE_SIZE): Fix the logic.
Kenichi Handa <handa@m17n.org>
parents: 20706
diff changeset
3649
20606
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3650 /* If we allocated BUF with malloc, free it too. */
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3651 if (total >= 1000)
9331e7e88cf5 (Fformat): Do all the work directly--don't use doprnt.
Richard M. Stallman <rms@gnu.org>
parents: 20564
diff changeset
3652 xfree (buf);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3653
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3654 /* If the format string has text properties, or any of the string
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3655 arguments has text properties, set up text properties of the
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3656 result string. */
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
3657
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3658 if (STRING_INTERVALS (args[0]) || arg_intervals)
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3659 {
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3660 Lisp_Object len, new_len, props;
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3661 struct gcpro gcpro1;
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
3662
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3663 /* Add text properties from the format string. */
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3664 len = make_number (SCHARS (args[0]));
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3665 props = text_property_list (args[0], make_number (0), len, Qnil);
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3666 GCPRO1 (props);
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
3667
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3668 if (CONSP (props))
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3669 {
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3670 int bytepos = 0, position = 0, translated = 0, argn = 1;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3671 Lisp_Object list;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3672
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3673 /* Adjust the bounds of each text property
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3674 to the proper start and end in the output string. */
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3675 /* We take advantage of the fact that the positions in PROPS
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3676 are in increasing order, so that we can do (effectively)
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3677 one scan through the position space of the format string.
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3678
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3679 BYTEPOS is the byte position in the format string,
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3680 POSITION is the untranslated char position in it,
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3681 TRANSLATED is the translated char position in BUF,
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3682 and ARGN is the number of the next arg we will come to. */
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3683 for (list = props; CONSP (list); list = XCDR (list))
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3684 {
50555
37d227b879ad (Fformat): Lisp_Object/int mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50499
diff changeset
3685 Lisp_Object item;
37d227b879ad (Fformat): Lisp_Object/int mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50499
diff changeset
3686 int pos;
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3687
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3688 item = XCAR (list);
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3689
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3690 /* First adjust the property start position. */
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3691 pos = XINT (XCAR (item));
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3692
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3693 /* Advance BYTEPOS, POSITION, TRANSLATED and ARGN
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3694 up to this position. */
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3695 for (; position < pos; bytepos++)
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3696 {
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3697 if (! discarded[bytepos])
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3698 position++, translated++;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3699 else if (discarded[bytepos] == 1)
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3700 {
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3701 position++;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3702 if (translated == info[argn].start)
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3703 {
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3704 translated += info[argn].end - info[argn].start;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3705 argn++;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3706 }
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3707 }
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3708 }
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3709
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3710 XSETCAR (item, make_number (translated));
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3711
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3712 /* Likewise adjust the property end position. */
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3713 pos = XINT (XCAR (XCDR (item)));
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3714
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3715 for (; bytepos < pos; bytepos++)
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3716 {
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3717 if (! discarded[bytepos])
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3718 position++, translated++;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3719 else if (discarded[bytepos] == 1)
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3720 {
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3721 position++;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3722 if (translated == info[argn].start)
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3723 {
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3724 translated += info[argn].end - info[argn].start;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3725 argn++;
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3726 }
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3727 }
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3728 }
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3729
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3730 XSETCAR (XCDR (item), make_number (translated));
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3731 }
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3732
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3733 add_text_properties_from_list (val, props, make_number (0));
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3734 }
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3735
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3736 /* Add text properties from arguments. */
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3737 if (arg_intervals)
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3738 for (n = 1; n < nargs; ++n)
50499
0abd4951c0fb (Fformat): Translate positions of text properties
Richard M. Stallman <rms@gnu.org>
parents: 50430
diff changeset
3739 if (info[n].intervals)
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3740 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
3741 len = make_number (SCHARS (args[n]));
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3742 new_len = make_number (info[n].end - info[n].start);
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3743 props = text_property_list (args[n], make_number (0), len, Qnil);
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3744 extend_property_ranges (props, len, new_len);
30023
ec25786e4705 (Fformat): While copying text properties, make each composition
Kenichi Handa <handa@m17n.org>
parents: 29008
diff changeset
3745 /* If successive arguments have properites, be sure that
ec25786e4705 (Fformat): While copying text properties, make each composition
Kenichi Handa <handa@m17n.org>
parents: 29008
diff changeset
3746 the value of `composition' property be the copy. */
ec25786e4705 (Fformat): While copying text properties, make each composition
Kenichi Handa <handa@m17n.org>
parents: 29008
diff changeset
3747 if (n > 1 && info[n - 1].end)
ec25786e4705 (Fformat): While copying text properties, make each composition
Kenichi Handa <handa@m17n.org>
parents: 29008
diff changeset
3748 make_composition_value_copy (props);
25018
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3749 add_text_properties_from_list (val, props,
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3750 make_number (info[n].start));
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3751 }
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3752
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3753 UNGCPRO;
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3754 }
890e8042db8f (Fmessage): Use message3.
Gerd Moellmann <gerd@gnu.org>
parents: 24847
diff changeset
3755
20804
14fa73136e64 (CONVERTED_BYTE_SIZE): Fix the logic.
Kenichi Handa <handa@m17n.org>
parents: 20706
diff changeset
3756 return val;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3757 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3758
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3759 Lisp_Object
49443
f9f7612c767a (format2): New function, replaces format1
Richard M. Stallman <rms@gnu.org>
parents: 49293
diff changeset
3760 format2 (string1, arg0, arg1)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3761 char *string1;
49443
f9f7612c767a (format2): New function, replaces format1
Richard M. Stallman <rms@gnu.org>
parents: 49293
diff changeset
3762 Lisp_Object arg0, arg1;
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3763 {
49443
f9f7612c767a (format2): New function, replaces format1
Richard M. Stallman <rms@gnu.org>
parents: 49293
diff changeset
3764 Lisp_Object args[3];
f9f7612c767a (format2): New function, replaces format1
Richard M. Stallman <rms@gnu.org>
parents: 49293
diff changeset
3765 args[0] = build_string (string1);
f9f7612c767a (format2): New function, replaces format1
Richard M. Stallman <rms@gnu.org>
parents: 49293
diff changeset
3766 args[1] = arg0;
f9f7612c767a (format2): New function, replaces format1
Richard M. Stallman <rms@gnu.org>
parents: 49293
diff changeset
3767 args[2] = arg1;
f9f7612c767a (format2): New function, replaces format1
Richard M. Stallman <rms@gnu.org>
parents: 49293
diff changeset
3768 return Fformat (3, args);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3769 }
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3770
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3771 DEFUN ("char-equal", Fchar_equal, Schar_equal, 2, 2, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3772 doc: /* Return t if two characters match, optionally ignoring case.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3773 Both arguments must be characters (i.e. integers).
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3774 Case is ignored if `case-fold-search' is non-nil in the current buffer. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3775 (c1, c2)
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3776 register Lisp_Object c1, c2;
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3777 {
20688
16c458803c32 (Fchar_equal): Fix case-conversion code.
Richard M. Stallman <rms@gnu.org>
parents: 20606
diff changeset
3778 int i1, i2;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
3779 CHECK_NUMBER (c1);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40287
diff changeset
3780 CHECK_NUMBER (c2);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3781
20688
16c458803c32 (Fchar_equal): Fix case-conversion code.
Richard M. Stallman <rms@gnu.org>
parents: 20606
diff changeset
3782 if (XINT (c1) == XINT (c2))
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3783 return Qt;
20688
16c458803c32 (Fchar_equal): Fix case-conversion code.
Richard M. Stallman <rms@gnu.org>
parents: 20606
diff changeset
3784 if (NILP (current_buffer->case_fold_search))
16c458803c32 (Fchar_equal): Fix case-conversion code.
Richard M. Stallman <rms@gnu.org>
parents: 20606
diff changeset
3785 return Qnil;
16c458803c32 (Fchar_equal): Fix case-conversion code.
Richard M. Stallman <rms@gnu.org>
parents: 20606
diff changeset
3786
16c458803c32 (Fchar_equal): Fix case-conversion code.
Richard M. Stallman <rms@gnu.org>
parents: 20606
diff changeset
3787 /* Do these in separate statements,
16c458803c32 (Fchar_equal): Fix case-conversion code.
Richard M. Stallman <rms@gnu.org>
parents: 20606
diff changeset
3788 then compare the variables.
16c458803c32 (Fchar_equal): Fix case-conversion code.
Richard M. Stallman <rms@gnu.org>
parents: 20606
diff changeset
3789 because of the way DOWNCASE uses temp variables. */
16c458803c32 (Fchar_equal): Fix case-conversion code.
Richard M. Stallman <rms@gnu.org>
parents: 20606
diff changeset
3790 i1 = DOWNCASE (XFASTINT (c1));
16c458803c32 (Fchar_equal): Fix case-conversion code.
Richard M. Stallman <rms@gnu.org>
parents: 20606
diff changeset
3791 i2 = DOWNCASE (XFASTINT (c2));
16c458803c32 (Fchar_equal): Fix case-conversion code.
Richard M. Stallman <rms@gnu.org>
parents: 20606
diff changeset
3792 return (i1 == i2 ? Qt : Qnil);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3793 }
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3794
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3795 /* Transpose the markers in two regions of the current buffer, and
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3796 adjust the ones between them if necessary (i.e.: if the regions
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3797 differ in size).
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3798
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3799 START1, END1 are the character positions of the first region.
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3800 START1_BYTE, END1_BYTE are the byte positions.
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3801 START2, END2 are the character positions of the second region.
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3802 START2_BYTE, END2_BYTE are the byte positions.
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3803
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3804 Traverses the entire marker list of the buffer to do so, adding an
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3805 appropriate amount to some, subtracting from some, and leaving the
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3806 rest untouched. Most of this is copied from adjust_markers in insdel.c.
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
3807
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3808 It's the caller's job to ensure that START1 <= END1 <= START2 <= END2. */
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3809
31016
b26ac1565dd4 (find_field): Formatting changes.
Gerd Moellmann <gerd@gnu.org>
parents: 30931
diff changeset
3810 static void
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3811 transpose_markers (start1, end1, start2, end2,
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3812 start1_byte, end1_byte, start2_byte, end2_byte)
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3813 register int start1, end1, start2, end2;
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3814 register int start1_byte, end1_byte, start2_byte, end2_byte;
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3815 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3816 register int amt1, amt1_byte, amt2, amt2_byte, diff, diff_byte, mpos;
51670
beceb827c1ce (save_excursion_restore, transpose_markers): Update for new types.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51042
diff changeset
3817 register struct Lisp_Marker *marker;
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3818
7862
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3819 /* Update point as if it were a marker. */
7519
987ab382275c (Ftranspose_regions): Fix overlays after moving markers.
Karl Heuer <kwzh@gnu.org>
parents: 7506
diff changeset
3820 if (PT < start1)
987ab382275c (Ftranspose_regions): Fix overlays after moving markers.
Karl Heuer <kwzh@gnu.org>
parents: 7506
diff changeset
3821 ;
987ab382275c (Ftranspose_regions): Fix overlays after moving markers.
Karl Heuer <kwzh@gnu.org>
parents: 7506
diff changeset
3822 else if (PT < end1)
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3823 TEMP_SET_PT_BOTH (PT + (end2 - end1),
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3824 PT_BYTE + (end2_byte - end1_byte));
7519
987ab382275c (Ftranspose_regions): Fix overlays after moving markers.
Karl Heuer <kwzh@gnu.org>
parents: 7506
diff changeset
3825 else if (PT < start2)
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3826 TEMP_SET_PT_BOTH (PT + (end2 - start2) - (end1 - start1),
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3827 (PT_BYTE + (end2_byte - start2_byte)
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3828 - (end1_byte - start1_byte)));
7519
987ab382275c (Ftranspose_regions): Fix overlays after moving markers.
Karl Heuer <kwzh@gnu.org>
parents: 7506
diff changeset
3829 else if (PT < end2)
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3830 TEMP_SET_PT_BOTH (PT - (start2 - start1),
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3831 PT_BYTE - (start2_byte - start1_byte));
7519
987ab382275c (Ftranspose_regions): Fix overlays after moving markers.
Karl Heuer <kwzh@gnu.org>
parents: 7506
diff changeset
3832
7862
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3833 /* We used to adjust the endpoints here to account for the gap, but that
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3834 isn't good enough. Even if we assume the caller has tried to move the
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3835 gap out of our way, it might still be at start1 exactly, for example;
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3836 and that places it `inside' the interval, for our purposes. The amount
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3837 of adjustment is nontrivial if there's a `denormalized' marker whose
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3838 position is between GPT and GPT + GAP_SIZE, so it's simpler to leave
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3839 the dirty work to Fmarker_position, below. */
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3840
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3841 /* The difference between the region's lengths */
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3842 diff = (end2 - start2) - (end1 - start1);
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3843 diff_byte = (end2_byte - start2_byte) - (end1_byte - start1_byte);
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
3844
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3845 /* For shifting each marker in a region by the length of the other
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3846 region plus the distance between the regions. */
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3847 amt1 = (end2 - start2) + (start2 - end1);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3848 amt2 = (end1 - start1) + (start2 - end1);
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3849 amt1_byte = (end2_byte - start2_byte) + (start2_byte - end1_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3850 amt2_byte = (end1_byte - start1_byte) + (start2_byte - end1_byte);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3851
51670
beceb827c1ce (save_excursion_restore, transpose_markers): Update for new types.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51042
diff changeset
3852 for (marker = BUF_MARKERS (current_buffer); marker; marker = marker->next)
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3853 {
51670
beceb827c1ce (save_excursion_restore, transpose_markers): Update for new types.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51042
diff changeset
3854 mpos = marker->bytepos;
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3855 if (mpos >= start1_byte && mpos < end2_byte)
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3856 {
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3857 if (mpos < end1_byte)
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3858 mpos += amt1_byte;
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3859 else if (mpos < start2_byte)
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3860 mpos += diff_byte;
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3861 else
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3862 mpos -= amt2_byte;
51670
beceb827c1ce (save_excursion_restore, transpose_markers): Update for new types.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51042
diff changeset
3863 marker->bytepos = mpos;
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3864 }
51670
beceb827c1ce (save_excursion_restore, transpose_markers): Update for new types.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51042
diff changeset
3865 mpos = marker->charpos;
7862
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3866 if (mpos >= start1 && mpos < end2)
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3867 {
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3868 if (mpos < end1)
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3869 mpos += amt1;
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3870 else if (mpos < start2)
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3871 mpos += diff;
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3872 else
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3873 mpos -= amt2;
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
3874 }
51670
beceb827c1ce (save_excursion_restore, transpose_markers): Update for new types.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 51042
diff changeset
3875 marker->charpos = mpos;
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3876 }
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3877 }
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3878
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3879 DEFUN ("transpose-regions", Ftranspose_regions, Stranspose_regions, 4, 5, 0,
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3880 doc: /* Transpose region START1 to END1 with START2 to END2.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3881 The regions may not be overlapping, because the size of the buffer is
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3882 never changed in a transposition.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3883
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3884 Optional fifth arg LEAVE_MARKERS, if non-nil, means don't update
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3885 any markers that happen to be located in the regions.
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
3886
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3887 Transposing beyond buffer boundaries is an error. */)
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
3888 (startr1, endr1, startr2, endr2, leave_markers)
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3889 Lisp_Object startr1, endr1, startr2, endr2, leave_markers;
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3890 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3891 register int start1, end1, start2, end2;
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3892 int start1_byte, start2_byte, len1_byte, len2_byte;
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3893 int gap, len1, len_mid, len2;
7250
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
3894 unsigned char *start1_addr, *start2_addr, *temp;
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3895
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3896 INTERVAL cur_intv, tmp_interval1, tmp_interval_mid, tmp_interval2;
10308
90784ed0416f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 9812
diff changeset
3897 cur_intv = BUF_INTERVALS (current_buffer);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3898
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3899 validate_region (&startr1, &endr1);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3900 validate_region (&startr2, &endr2);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3901
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3902 start1 = XFASTINT (startr1);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3903 end1 = XFASTINT (endr1);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3904 start2 = XFASTINT (startr2);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3905 end2 = XFASTINT (endr2);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3906 gap = GPT;
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3907
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3908 /* Swap the regions if they're reversed. */
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3909 if (start2 < end1)
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3910 {
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3911 register int glumph = start1;
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3912 start1 = start2;
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3913 start2 = glumph;
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3914 glumph = end1;
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3915 end1 = end2;
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3916 end2 = glumph;
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3917 }
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3918
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3919 len1 = end1 - start1;
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3920 len2 = end2 - start2;
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3921
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3922 if (start2 < end1)
21245
6cde55b7c9de Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21235
diff changeset
3923 error ("Transposed regions overlap");
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3924 else if (start1 == end1 || start2 == end2)
21245
6cde55b7c9de Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21235
diff changeset
3925 error ("Transposed region has length 0");
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3926
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3927 /* The possibilities are:
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3928 1. Adjacent (contiguous) regions, or separate but equal regions
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3929 (no, really equal, in this case!), or
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3930 2. Separate regions of unequal size.
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
3931
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3932 The worst case is usually No. 2. It means that (aside from
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3933 potential need for getting the gap out of the way), there also
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3934 needs to be a shifting of the text between the two regions. So
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3935 if they are spread far apart, we are that much slower... sigh. */
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3936
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3937 /* It must be pointed out that the really studly thing to do would
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3938 be not to move the gap at all, but to leave it in place and work
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3939 around it if necessary. This would be extremely efficient,
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3940 especially considering that people are likely to do
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3941 transpositions near where they are working interactively, which
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3942 is exactly where the gap would be found. However, such code
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3943 would be much harder to write and to read. So, if you are
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3944 reading this comment and are feeling squirrely, by all means have
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3945 a go! I just didn't feel like doing it, so I will simply move
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3946 the gap the minimum distance to get it out of the way, and then
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3947 deal with an unbroken array. */
7250
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
3948
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
3949 /* Make sure the gap won't interfere, by moving it out of the text
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
3950 we will operate on. */
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
3951 if (start1 < gap && gap < end2)
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
3952 {
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
3953 if (gap - start1 < end2 - gap)
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
3954 move_gap (start1);
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
3955 else
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
3956 move_gap (end2);
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
3957 }
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3958
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3959 start1_byte = CHAR_TO_BYTE (start1);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3960 start2_byte = CHAR_TO_BYTE (start2);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3961 len1_byte = CHAR_TO_BYTE (end1) - start1_byte;
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
3962 len2_byte = CHAR_TO_BYTE (end2) - start2_byte;
21245
6cde55b7c9de Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21235
diff changeset
3963
29008
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3964 #ifdef BYTE_COMBINING_DEBUG
21245
6cde55b7c9de Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21235
diff changeset
3965 if (end1 == start2)
6cde55b7c9de Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21235
diff changeset
3966 {
29008
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3967 if (count_combining_before (BYTE_POS_ADDR (start2_byte),
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3968 len2_byte, start1, start1_byte)
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3969 || count_combining_before (BYTE_POS_ADDR (start1_byte),
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3970 len1_byte, end2, start2_byte + len2_byte)
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3971 || count_combining_after (BYTE_POS_ADDR (start1_byte),
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3972 len1_byte, end2, start2_byte + len2_byte))
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3973 abort ();
21245
6cde55b7c9de Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21235
diff changeset
3974 }
6cde55b7c9de Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21235
diff changeset
3975 else
6cde55b7c9de Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21235
diff changeset
3976 {
29008
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3977 if (count_combining_before (BYTE_POS_ADDR (start2_byte),
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3978 len2_byte, start1, start1_byte)
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3979 || count_combining_before (BYTE_POS_ADDR (start1_byte),
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3980 len1_byte, start2, start2_byte)
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3981 || count_combining_after (BYTE_POS_ADDR (start2_byte),
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3982 len2_byte, end1, start1_byte + len1_byte)
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3983 || count_combining_after (BYTE_POS_ADDR (start1_byte),
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3984 len1_byte, end2, start2_byte + len2_byte))
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3985 abort ();
21245
6cde55b7c9de Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents: 21235
diff changeset
3986 }
29008
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3987 #endif
939760ef7379 (Fformat): Be sure to convert 8-bit characters to
Kenichi Handa <handa@m17n.org>
parents: 28545
diff changeset
3988
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3989 /* Hmmm... how about checking to see if the gap is large
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3990 enough to use as the temporary storage? That would avoid an
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3991 allocation... interesting. Later, don't fool with it now. */
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3992
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3993 /* Working without memmove, for portability (sigh), so must be
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3994 careful of overlapping subsections of the array... */
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3995
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3996 if (end1 == start2) /* adjacent regions */
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3997 {
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3998 modify_region (current_buffer, start1, end2);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
3999 record_change (start1, len1 + len2);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4000
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4001 tmp_interval1 = copy_intervals (cur_intv, start1, len1);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4002 tmp_interval2 = copy_intervals (cur_intv, start2, len2);
18745
192b3ebd108e (Fcurrent_time_zone): Convert Fmake_list argument to Lisp_Integer.
Richard M. Stallman <rms@gnu.org>
parents: 18661
diff changeset
4003 Fset_text_properties (make_number (start1), make_number (end2),
192b3ebd108e (Fcurrent_time_zone): Convert Fmake_list argument to Lisp_Integer.
Richard M. Stallman <rms@gnu.org>
parents: 18661
diff changeset
4004 Qnil, Qnil);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4005
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4006 /* First region smaller than second. */
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4007 if (len1_byte < len2_byte)
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4008 {
7250
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
4009 /* We use alloca only if it is small,
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
4010 because we want to avoid stack overflow. */
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4011 if (len2_byte > 20000)
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4012 temp = (unsigned char *) xmalloc (len2_byte);
7250
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
4013 else
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4014 temp = (unsigned char *) alloca (len2_byte);
7862
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
4015
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
4016 /* Don't precompute these addresses. We have to compute them
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
4017 at the last minute, because the relocating allocator might
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
4018 have moved the buffer around during the xmalloc. */
23166
6072f28afec9 (Ftranspose_regions): Use BYTE_POS_ADDR to get an
Kenichi Handa <handa@m17n.org>
parents: 23132
diff changeset
4019 start1_addr = BYTE_POS_ADDR (start1_byte);
6072f28afec9 (Ftranspose_regions): Use BYTE_POS_ADDR to get an
Kenichi Handa <handa@m17n.org>
parents: 23132
diff changeset
4020 start2_addr = BYTE_POS_ADDR (start2_byte);
7862
0b6f46029ea2 (transpose_markers): Allow for gap at start of region.
Karl Heuer <kwzh@gnu.org>
parents: 7710
diff changeset
4021
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4022 bcopy (start2_addr, temp, len2_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4023 bcopy (start1_addr, start1_addr + len2_byte, len1_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4024 bcopy (temp, start1_addr, len2_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4025 if (len2_byte > 20000)
30606
438ad5366a03 (Ftranspose_regions): Use xfree instead of free.
Gerd Moellmann <gerd@gnu.org>
parents: 30550
diff changeset
4026 xfree (temp);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4027 }
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4028 else
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4029 /* First region not smaller than second. */
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4030 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4031 if (len1_byte > 20000)
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4032 temp = (unsigned char *) xmalloc (len1_byte);
7250
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
4033 else
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4034 temp = (unsigned char *) alloca (len1_byte);
23166
6072f28afec9 (Ftranspose_regions): Use BYTE_POS_ADDR to get an
Kenichi Handa <handa@m17n.org>
parents: 23132
diff changeset
4035 start1_addr = BYTE_POS_ADDR (start1_byte);
6072f28afec9 (Ftranspose_regions): Use BYTE_POS_ADDR to get an
Kenichi Handa <handa@m17n.org>
parents: 23132
diff changeset
4036 start2_addr = BYTE_POS_ADDR (start2_byte);
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4037 bcopy (start1_addr, temp, len1_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4038 bcopy (start2_addr, start1_addr, len2_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4039 bcopy (temp, start1_addr + len2_byte, len1_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4040 if (len1_byte > 20000)
30606
438ad5366a03 (Ftranspose_regions): Use xfree instead of free.
Gerd Moellmann <gerd@gnu.org>
parents: 30550
diff changeset
4041 xfree (temp);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4042 }
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4043 graft_intervals_into_buffer (tmp_interval1, start1 + len2,
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4044 len1, current_buffer, 0);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4045 graft_intervals_into_buffer (tmp_interval2, start1,
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4046 len2, current_buffer, 0);
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
4047 update_compositions (start1, start1 + len2, CHECK_BORDER);
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
4048 update_compositions (start1 + len2, end2, CHECK_TAIL);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4049 }
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4050 /* Non-adjacent regions, because end1 != start2, bleagh... */
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4051 else
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4052 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4053 len_mid = start2_byte - (start1_byte + len1_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4054
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4055 if (len1_byte == len2_byte)
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4056 /* Regions are same size, though, how nice. */
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4057 {
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4058 modify_region (current_buffer, start1, end1);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4059 modify_region (current_buffer, start2, end2);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4060 record_change (start1, len1);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4061 record_change (start2, len2);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4062 tmp_interval1 = copy_intervals (cur_intv, start1, len1);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4063 tmp_interval2 = copy_intervals (cur_intv, start2, len2);
18745
192b3ebd108e (Fcurrent_time_zone): Convert Fmake_list argument to Lisp_Integer.
Richard M. Stallman <rms@gnu.org>
parents: 18661
diff changeset
4064 Fset_text_properties (make_number (start1), make_number (end1),
192b3ebd108e (Fcurrent_time_zone): Convert Fmake_list argument to Lisp_Integer.
Richard M. Stallman <rms@gnu.org>
parents: 18661
diff changeset
4065 Qnil, Qnil);
192b3ebd108e (Fcurrent_time_zone): Convert Fmake_list argument to Lisp_Integer.
Richard M. Stallman <rms@gnu.org>
parents: 18661
diff changeset
4066 Fset_text_properties (make_number (start2), make_number (end2),
192b3ebd108e (Fcurrent_time_zone): Convert Fmake_list argument to Lisp_Integer.
Richard M. Stallman <rms@gnu.org>
parents: 18661
diff changeset
4067 Qnil, Qnil);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4068
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4069 if (len1_byte > 20000)
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4070 temp = (unsigned char *) xmalloc (len1_byte);
7250
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
4071 else
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4072 temp = (unsigned char *) alloca (len1_byte);
23166
6072f28afec9 (Ftranspose_regions): Use BYTE_POS_ADDR to get an
Kenichi Handa <handa@m17n.org>
parents: 23132
diff changeset
4073 start1_addr = BYTE_POS_ADDR (start1_byte);
6072f28afec9 (Ftranspose_regions): Use BYTE_POS_ADDR to get an
Kenichi Handa <handa@m17n.org>
parents: 23132
diff changeset
4074 start2_addr = BYTE_POS_ADDR (start2_byte);
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4075 bcopy (start1_addr, temp, len1_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4076 bcopy (start2_addr, start1_addr, len2_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4077 bcopy (temp, start2_addr, len1_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4078 if (len1_byte > 20000)
30606
438ad5366a03 (Ftranspose_regions): Use xfree instead of free.
Gerd Moellmann <gerd@gnu.org>
parents: 30550
diff changeset
4079 xfree (temp);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4080 graft_intervals_into_buffer (tmp_interval1, start2,
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4081 len1, current_buffer, 0);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4082 graft_intervals_into_buffer (tmp_interval2, start1,
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4083 len2, current_buffer, 0);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4084 }
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4085
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4086 else if (len1_byte < len2_byte) /* Second region larger than first */
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4087 /* Non-adjacent & unequal size, area between must also be shifted. */
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4088 {
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4089 modify_region (current_buffer, start1, end2);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4090 record_change (start1, (end2 - start1));
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4091 tmp_interval1 = copy_intervals (cur_intv, start1, len1);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4092 tmp_interval_mid = copy_intervals (cur_intv, end1, len_mid);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4093 tmp_interval2 = copy_intervals (cur_intv, start2, len2);
18745
192b3ebd108e (Fcurrent_time_zone): Convert Fmake_list argument to Lisp_Integer.
Richard M. Stallman <rms@gnu.org>
parents: 18661
diff changeset
4094 Fset_text_properties (make_number (start1), make_number (end2),
192b3ebd108e (Fcurrent_time_zone): Convert Fmake_list argument to Lisp_Integer.
Richard M. Stallman <rms@gnu.org>
parents: 18661
diff changeset
4095 Qnil, Qnil);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4096
7250
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
4097 /* holds region 2 */
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4098 if (len2_byte > 20000)
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4099 temp = (unsigned char *) xmalloc (len2_byte);
7250
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
4100 else
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4101 temp = (unsigned char *) alloca (len2_byte);
23166
6072f28afec9 (Ftranspose_regions): Use BYTE_POS_ADDR to get an
Kenichi Handa <handa@m17n.org>
parents: 23132
diff changeset
4102 start1_addr = BYTE_POS_ADDR (start1_byte);
6072f28afec9 (Ftranspose_regions): Use BYTE_POS_ADDR to get an
Kenichi Handa <handa@m17n.org>
parents: 23132
diff changeset
4103 start2_addr = BYTE_POS_ADDR (start2_byte);
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4104 bcopy (start2_addr, temp, len2_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4105 bcopy (start1_addr, start1_addr + len_mid + len2_byte, len1_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4106 safe_bcopy (start1_addr + len1_byte, start1_addr + len2_byte, len_mid);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4107 bcopy (temp, start1_addr, len2_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4108 if (len2_byte > 20000)
30606
438ad5366a03 (Ftranspose_regions): Use xfree instead of free.
Gerd Moellmann <gerd@gnu.org>
parents: 30550
diff changeset
4109 xfree (temp);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4110 graft_intervals_into_buffer (tmp_interval1, end2 - len1,
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4111 len1, current_buffer, 0);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4112 graft_intervals_into_buffer (tmp_interval_mid, start1 + len2,
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4113 len_mid, current_buffer, 0);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4114 graft_intervals_into_buffer (tmp_interval2, start1,
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4115 len2, current_buffer, 0);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4116 }
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4117 else
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4118 /* Second region smaller than first. */
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4119 {
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4120 record_change (start1, (end2 - start1));
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4121 modify_region (current_buffer, start1, end2);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4122
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4123 tmp_interval1 = copy_intervals (cur_intv, start1, len1);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4124 tmp_interval_mid = copy_intervals (cur_intv, end1, len_mid);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4125 tmp_interval2 = copy_intervals (cur_intv, start2, len2);
18745
192b3ebd108e (Fcurrent_time_zone): Convert Fmake_list argument to Lisp_Integer.
Richard M. Stallman <rms@gnu.org>
parents: 18661
diff changeset
4126 Fset_text_properties (make_number (start1), make_number (end2),
192b3ebd108e (Fcurrent_time_zone): Convert Fmake_list argument to Lisp_Integer.
Richard M. Stallman <rms@gnu.org>
parents: 18661
diff changeset
4127 Qnil, Qnil);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4128
7250
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
4129 /* holds region 1 */
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4130 if (len1_byte > 20000)
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4131 temp = (unsigned char *) xmalloc (len1_byte);
7250
67bb3bb1b62d (Ftranspose_regions): Take addresses only after move gap.
Richard M. Stallman <rms@gnu.org>
parents: 7207
diff changeset
4132 else
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4133 temp = (unsigned char *) alloca (len1_byte);
23166
6072f28afec9 (Ftranspose_regions): Use BYTE_POS_ADDR to get an
Kenichi Handa <handa@m17n.org>
parents: 23132
diff changeset
4134 start1_addr = BYTE_POS_ADDR (start1_byte);
6072f28afec9 (Ftranspose_regions): Use BYTE_POS_ADDR to get an
Kenichi Handa <handa@m17n.org>
parents: 23132
diff changeset
4135 start2_addr = BYTE_POS_ADDR (start2_byte);
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4136 bcopy (start1_addr, temp, len1_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4137 bcopy (start2_addr, start1_addr, len2_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4138 bcopy (start1_addr + len1_byte, start1_addr + len2_byte, len_mid);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4139 bcopy (temp, start1_addr + len2_byte + len_mid, len1_byte);
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4140 if (len1_byte > 20000)
30606
438ad5366a03 (Ftranspose_regions): Use xfree instead of free.
Gerd Moellmann <gerd@gnu.org>
parents: 30550
diff changeset
4141 xfree (temp);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4142 graft_intervals_into_buffer (tmp_interval1, end2 - len1,
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4143 len1, current_buffer, 0);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4144 graft_intervals_into_buffer (tmp_interval_mid, start1 + len2,
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4145 len_mid, current_buffer, 0);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4146 graft_intervals_into_buffer (tmp_interval2, start1,
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4147 len2, current_buffer, 0);
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4148 }
26853
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
4149
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
4150 update_compositions (start1, start1 + len2, CHECK_BORDER);
bf700e4957ec (Fchar_to_string): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 26742
diff changeset
4151 update_compositions (end2 - len1, end2, CHECK_BORDER);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4152 }
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4153
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4154 /* When doing multiple transpositions, it might be nice
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4155 to optimize this. Perhaps the markers in any one buffer
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4156 should be organized in some sorted data tree. */
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4157 if (NILP (leave_markers))
7519
987ab382275c (Ftranspose_regions): Fix overlays after moving markers.
Karl Heuer <kwzh@gnu.org>
parents: 7506
diff changeset
4158 {
20558
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4159 transpose_markers (start1, end1, start2, end2,
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4160 start1_byte, start1_byte + len1_byte,
d19346dc4453 (Fgoto_char): When arg is a marker, copy char and byte
Richard M. Stallman <rms@gnu.org>
parents: 20338
diff changeset
4161 start2_byte, start2_byte + len2_byte);
7519
987ab382275c (Ftranspose_regions): Fix overlays after moving markers.
Karl Heuer <kwzh@gnu.org>
parents: 7506
diff changeset
4162 fix_overlays_in_range (start1, end2);
987ab382275c (Ftranspose_regions): Fix overlays after moving markers.
Karl Heuer <kwzh@gnu.org>
parents: 7506
diff changeset
4163 }
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4164
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4165 return Qnil;
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4166 }
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4167
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4168
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4169 void
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4170 syms_of_editfns ()
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4171 {
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
4172 environbuf = 0;
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
4173
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
4174 Qbuffer_access_fontify_functions
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
4175 = intern ("buffer-access-fontify-functions");
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
4176 staticpro (&Qbuffer_access_fontify_functions);
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
4177
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4178 DEFVAR_LISP ("inhibit-field-text-motion", &Vinhibit_field_text_motion,
43862
7263004fcb03 (syms_of_editfns): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents: 43042
diff changeset
4179 doc: /* Non-nil means text motion commands don't notice fields. */);
27077
19a664c654ab (Vinhibit_field_text_motion): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 26853
diff changeset
4180 Vinhibit_field_text_motion = Qnil;
19a664c654ab (Vinhibit_field_text_motion): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 26853
diff changeset
4181
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
4182 DEFVAR_LISP ("buffer-access-fontify-functions",
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4183 &Vbuffer_access_fontify_functions,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4184 doc: /* List of functions called by `buffer-substring' to fontify if necessary.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
4185 Each function is called with two arguments which specify the range
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
4186 of the buffer being accessed. */);
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
4187 Vbuffer_access_fontify_functions = Qnil;
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
4188
14440
e99b3302c154 (syms_of_editfns): Make buffer-access-fontify-functions
Richard M. Stallman <rms@gnu.org>
parents: 14391
diff changeset
4189 {
e99b3302c154 (syms_of_editfns): Make buffer-access-fontify-functions
Richard M. Stallman <rms@gnu.org>
parents: 14391
diff changeset
4190 Lisp_Object obuf;
e99b3302c154 (syms_of_editfns): Make buffer-access-fontify-functions
Richard M. Stallman <rms@gnu.org>
parents: 14391
diff changeset
4191 extern Lisp_Object Vprin1_to_string_buffer;
e99b3302c154 (syms_of_editfns): Make buffer-access-fontify-functions
Richard M. Stallman <rms@gnu.org>
parents: 14391
diff changeset
4192 obuf = Fcurrent_buffer ();
e99b3302c154 (syms_of_editfns): Make buffer-access-fontify-functions
Richard M. Stallman <rms@gnu.org>
parents: 14391
diff changeset
4193 /* Do this here, because init_buffer_once is too early--it won't work. */
e99b3302c154 (syms_of_editfns): Make buffer-access-fontify-functions
Richard M. Stallman <rms@gnu.org>
parents: 14391
diff changeset
4194 Fset_buffer (Vprin1_to_string_buffer);
e99b3302c154 (syms_of_editfns): Make buffer-access-fontify-functions
Richard M. Stallman <rms@gnu.org>
parents: 14391
diff changeset
4195 /* Make sure buffer-access-fontify-functions is nil in this buffer. */
e99b3302c154 (syms_of_editfns): Make buffer-access-fontify-functions
Richard M. Stallman <rms@gnu.org>
parents: 14391
diff changeset
4196 Fset (Fmake_local_variable (intern ("buffer-access-fontify-functions")),
e99b3302c154 (syms_of_editfns): Make buffer-access-fontify-functions
Richard M. Stallman <rms@gnu.org>
parents: 14391
diff changeset
4197 Qnil);
e99b3302c154 (syms_of_editfns): Make buffer-access-fontify-functions
Richard M. Stallman <rms@gnu.org>
parents: 14391
diff changeset
4198 Fset_buffer (obuf);
e99b3302c154 (syms_of_editfns): Make buffer-access-fontify-functions
Richard M. Stallman <rms@gnu.org>
parents: 14391
diff changeset
4199 }
e99b3302c154 (syms_of_editfns): Make buffer-access-fontify-functions
Richard M. Stallman <rms@gnu.org>
parents: 14391
diff changeset
4200
14220
74d7745bcaa4 sp correction
Simon Marshall <simon@gnu.org>
parents: 14201
diff changeset
4201 DEFVAR_LISP ("buffer-access-fontified-property",
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4202 &Vbuffer_access_fontified_property,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4203 doc: /* Property which (if non-nil) indicates text has been fontified.
39966
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
4204 `buffer-substring' need not call the `buffer-access-fontify-functions'
1c2d486200f3 Put doc strings in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 39962
diff changeset
4205 functions if all the text being accessed has this property. */);
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
4206 Vbuffer_access_fontified_property = Qnil;
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
4207
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4208 DEFVAR_LISP ("system-name", &Vsystem_name,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4209 doc: /* The name of the machine Emacs is running on. */);
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4210
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4211 DEFVAR_LISP ("user-full-name", &Vuser_full_name,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4212 doc: /* The full name of the user logged in. */);
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4213
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4214 DEFVAR_LISP ("user-login-name", &Vuser_login_name,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4215 doc: /* The user's name, taken from environment variables if possible. */);
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4216
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4217 DEFVAR_LISP ("user-real-login-name", &Vuser_real_login_name,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39966
diff changeset
4218 doc: /* The user's name, based upon the real uid only. */);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4219
25833
65cab65c4a28 (Fpropertize): Renamed from Fproperties.
Gerd Moellmann <gerd@gnu.org>
parents: 25815
diff changeset
4220 defsubr (&Spropertize);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4221 defsubr (&Schar_equal);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4222 defsubr (&Sgoto_char);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4223 defsubr (&Sstring_to_char);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4224 defsubr (&Schar_to_string);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4225 defsubr (&Sbuffer_substring);
13767
862fff660446 (Fset_time_zone_rule): Move static var environbuf
Karl Heuer <kwzh@gnu.org>
parents: 13618
diff changeset
4226 defsubr (&Sbuffer_substring_no_properties);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4227 defsubr (&Sbuffer_string);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4228
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4229 defsubr (&Spoint_marker);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4230 defsubr (&Smark_marker);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4231 defsubr (&Spoint);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4232 defsubr (&Sregion_beginning);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4233 defsubr (&Sregion_end);
20861
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
4234
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
4235 staticpro (&Qfield);
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
4236 Qfield = intern ("field");
30439
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
4237 staticpro (&Qboundary);
c084f49c2a7f (find_field): Honor special `boundary' fields.
Miles Bader <miles@gnu.org>
parents: 30244
diff changeset
4238 Qboundary = intern ("boundary");
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
4239 defsubr (&Sfield_beginning);
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
4240 defsubr (&Sfield_end);
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
4241 defsubr (&Sfield_string);
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
4242 defsubr (&Sfield_string_no_properties);
26347
7fd9f4ecdd29 (Fdelete_field): Renamed from Ferase_field.
Gerd Moellmann <gerd@gnu.org>
parents: 26088
diff changeset
4243 defsubr (&Sdelete_field);
26058
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
4244 defsubr (&Sconstrain_to_field);
c11f0832a7c5 (Fconstrain_to_field): Make sure we don't violate the
Gerd Moellmann <gerd@gnu.org>
parents: 25833
diff changeset
4245
20861
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
4246 defsubr (&Sline_beginning_position);
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
4247 defsubr (&Sline_end_position);
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
4248
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4249 /* defsubr (&Smark); */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4250 /* defsubr (&Sset_mark); */
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4251 defsubr (&Ssave_excursion);
16298
17304eb73f97 (Fsave_current_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16269
diff changeset
4252 defsubr (&Ssave_current_buffer);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4253
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4254 defsubr (&Sbufsize);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4255 defsubr (&Spoint_max);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4256 defsubr (&Spoint_min);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4257 defsubr (&Spoint_min_marker);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4258 defsubr (&Spoint_max_marker);
21821
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
4259 defsubr (&Sgap_position);
9e82920b194d (Fgap_position, Fgap_size): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 21717
diff changeset
4260 defsubr (&Sgap_size);
20861
9f9937a74050 (Fformat): Handle a symbol of which name contains
Richard M. Stallman <rms@gnu.org>
parents: 20834
diff changeset
4261 defsubr (&Sposition_bytes);
22645
e5b201634497 (Fbyte_to_position): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22199
diff changeset
4262 defsubr (&Sbyte_to_position);
16639
b6ba5d371c1c (Fline_beginning_position, Fline_end_position): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 16526
diff changeset
4263
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4264 defsubr (&Sbobp);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4265 defsubr (&Seobp);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4266 defsubr (&Sbolp);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4267 defsubr (&Seolp);
512
b7a1e4e4e7e6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
4268 defsubr (&Sfollowing_char);
b7a1e4e4e7e6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
4269 defsubr (&Sprevious_char);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4270 defsubr (&Schar_after);
17031
c612a2cdd83b Include charset.h.
Karl Heuer <kwzh@gnu.org>
parents: 16918
diff changeset
4271 defsubr (&Schar_before);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4272 defsubr (&Sinsert);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4273 defsubr (&Sinsert_before_markers);
4714
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
4274 defsubr (&Sinsert_and_inherit);
350231e38e68 (Finsert_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
4275 defsubr (&Sinsert_and_inherit_before_markers);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4276 defsubr (&Sinsert_char);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4277
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4278 defsubr (&Suser_login_name);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4279 defsubr (&Suser_real_login_name);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4280 defsubr (&Suser_uid);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4281 defsubr (&Suser_real_uid);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4282 defsubr (&Suser_full_name);
5373
a70b89d2d6bb (Femacs_pid): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5242
diff changeset
4283 defsubr (&Semacs_pid);
448
129e6320092c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 372
diff changeset
4284 defsubr (&Scurrent_time);
9154
b4739bcefc44 (Fformat_time_string): Mostly rewritten, to handle
Richard M. Stallman <rms@gnu.org>
parents: 8981
diff changeset
4285 defsubr (&Sformat_time_string);
30480
5ef94127f946 new function: float-time
Sam Steingold <sds@gnu.org>
parents: 30439
diff changeset
4286 defsubr (&Sfloat_time);
9801
7003b5184aec (init_editfns): Get the username from the environment
Richard M. Stallman <rms@gnu.org>
parents: 9657
diff changeset
4287 defsubr (&Sdecode_time);
11402
66d935214d8e (Fencode_time): Use XINT to examine `zone'.
Richard M. Stallman <rms@gnu.org>
parents: 11263
diff changeset
4288 defsubr (&Sencode_time);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4289 defsubr (&Scurrent_time_string);
962
3533821d6edc * editfns.c (Fcurrent_time_zone): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 690
diff changeset
4290 defsubr (&Scurrent_time_zone);
13019
5381e2022370 (Fset_time_zone_rule): New function.
Richard M. Stallman <rms@gnu.org>
parents: 13013
diff changeset
4291 defsubr (&Sset_time_zone_rule);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4292 defsubr (&Ssystem_name);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4293 defsubr (&Smessage);
8975
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
4294 defsubr (&Smessage_box);
e8a4c71251cb (Fmessage_box): Renamed from Fbox_message.
Richard M. Stallman <rms@gnu.org>
parents: 8824
diff changeset
4295 defsubr (&Smessage_or_box);
18937
ddb91108a9d2 (Fcurrent_message): New function.
Richard M. Stallman <rms@gnu.org>
parents: 18756
diff changeset
4296 defsubr (&Scurrent_message);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4297 defsubr (&Sformat);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4298
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4299 defsubr (&Sinsert_buffer_substring);
1853
8866e36c0ed5 (Fcompare_buffer_substrings): New function.
Richard M. Stallman <rms@gnu.org>
parents: 1748
diff changeset
4300 defsubr (&Scompare_buffer_substrings);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4301 defsubr (&Ssubst_char_in_region);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4302 defsubr (&Stranslate_region);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4303 defsubr (&Sdelete_region);
26742
936b39bd05b4 * editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 26699
diff changeset
4304 defsubr (&Sdelete_and_extract_region);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4305 defsubr (&Swiden);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4306 defsubr (&Snarrow_to_region);
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4307 defsubr (&Ssave_restriction);
7207
c83b161fe62c (Ftranspose_regions): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6878
diff changeset
4308 defsubr (&Stranspose_regions);
305
75f54c84f733 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4309 }