Mercurial > emacs
annotate src/category.h @ 58195:c12b583f54b9
Fixed these problems:
** Clicking on partially visible lines fails
From: David Kastrup <dak@gnu.org>
Date: 27 Apr 2004 16:42:58 +0200
I had gnus display a mouse-highlighted line (a URL from browse-url)
partially at the bottom of its window. If I click with middle mouse
key on it, the window gets recentered while I hold the mouse key
pressed. If I release it, the window returns into its old position
(cursor in top row) and nothing happens, presumably because the click
was not registered on the line itself, but on the magically
recentered version.
That is a nuisance. Recentering of even partially visible click
targets should only happen if window-point moves there, but not at
the time of the click. From the moment I hold down a key until it
gets released, the displayed window portion should not change, with
the sole exception of scrolling when dragging at the edge of the
screen.
(progn
(setq line-spacing 4)
(dotimes (i (window-height))
(insert "\n" (int-to-string i)))
(forward-line -2)
(recenter -1))
** Can't drag modeline when mouse-autoselect-window is set
From: Klaus Zeitler <kzeitler@lucent.com>
Date: Mon, 11 Oct 2004 11:14:49 +0200
1. start emacs -q --no-site-file
2. set variable mouse-autoselect-window to t
3. split-window-vertically
now I can drag the modeline only upwards but not downwards
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Sat, 13 Nov 2004 01:40:36 +0000 |
parents | 695cf19ef79e |
children | a8fa7c632ee4 375f2633d815 |
rev | line source |
---|---|
17052 | 1 /* Declarations having to do with Emacs category tables. |
2 Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. | |
17504 | 3 Licensed to the Free Software Foundation. |
17052 | 4 |
5 This file is part of GNU Emacs. | |
6 | |
7 GNU Emacs is free software; you can redistribute it and/or modify | |
8 it under the terms of the GNU General Public License as published by | |
9 the Free Software Foundation; either version 2, or (at your option) | |
10 any later version. | |
11 | |
12 GNU Emacs is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GNU Emacs; see the file COPYING. If not, write to | |
17071 | 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
20 Boston, MA 02111-1307, USA. */ | |
17052 | 21 |
22 | |
23 /* We introduce here three types of object: category, category set, | |
24 and category table. | |
25 | |
26 A category is like syntax but differs in the following points: | |
27 | |
28 o A category is represented by a mnemonic character of the range | |
29 ` '(32)..`~'(126) (printable ASCII characters). | |
30 | |
31 o A category is not exclusive, i.e. a character has multiple | |
32 categories (category set). Of course, there's a case that a | |
33 category set is empty, i.e. the character has no category. | |
34 | |
35 o In addition to the predefined categories, a user can define new | |
36 categories. Total number of categories is limited to 95. | |
37 | |
38 A category set is a set of categories represented by Lisp | |
17187
9ab0c08a3359
Adjusted for the change of CHAR_TABLE_ORDINARY_SLOTS.
Kenichi Handa <handa@m17n.org>
parents:
17134
diff
changeset
|
39 bool-vector of length 128 (only elements of 31th through 126th |
17052 | 40 are used). |
41 | |
42 A category table is like syntax-table, represented by a Lisp | |
43 char-table. The contents are category sets or nil. It has two | |
17187
9ab0c08a3359
Adjusted for the change of CHAR_TABLE_ORDINARY_SLOTS.
Kenichi Handa <handa@m17n.org>
parents:
17134
diff
changeset
|
44 extra slots, for a vector of doc string of each category and a |
17052 | 45 version number. |
46 | |
47 The first extra slot is a vector of doc strings of categories, the | |
48 length is 95. The Nth element corresponding to the category N+32. | |
49 | |
50 The second extra slot is a version number of the category table. | |
51 But, for the moment, we are not using this slot. */ | |
52 | |
53 #define CATEGORYP(x) \ | |
54 (INTEGERP ((x)) && XFASTINT ((x)) >= 0x20 && XFASTINT ((x)) <= 0x7E) | |
55 | |
40654
46a74c23644e
(CHECK_CATEGORY, CHECK_CATEGORY_SET): Remove unused argument `i' in macros.
Pavel Janík <Pavel@Janik.cz>
parents:
26840
diff
changeset
|
56 #define CHECK_CATEGORY(x) \ |
17052 | 57 do { \ |
58 if (!CATEGORYP ((x))) x = wrong_type_argument (Qcategoryp, (x)); \ | |
59 } while (0) | |
60 | |
61 #define XCATEGORY_SET XBOOL_VECTOR | |
62 | |
63 #define CATEGORY_SET_P(x) \ | |
64 (BOOL_VECTOR_P ((x)) && (EMACS_INT) (XBOOL_VECTOR ((x))->size) == 128) | |
65 | |
66 /* Return a new empty category set. */ | |
67 #define MAKE_CATEGORY_SET (Fmake_bool_vector (make_number (128), Qnil)) | |
68 | |
69 /* Make CATEGORY_SET includes (if VAL is t) or excludes (if VAL is | |
70 nil) CATEGORY. */ | |
71 #define SET_CATEGORY_SET(category_set, category, val) \ | |
72 (Faset (category_set, category, val)) | |
73 | |
40654
46a74c23644e
(CHECK_CATEGORY, CHECK_CATEGORY_SET): Remove unused argument `i' in macros.
Pavel Janík <Pavel@Janik.cz>
parents:
26840
diff
changeset
|
74 #define CHECK_CATEGORY_SET(x) \ |
17052 | 75 do { \ |
76 if (!CATEGORY_SET_P ((x))) x = wrong_type_argument (Qcategorysetp, (x)); \ | |
77 } while (0) | |
78 | |
79 /* Return 1 if CATEGORY_SET contains CATEGORY, else return 0. | |
80 The faster version of `!NILP (Faref (category_set, category))'. */ | |
81 #define CATEGORY_MEMBER(category, category_set) \ | |
18613
614b916ff5bf
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18341
diff
changeset
|
82 (XCATEGORY_SET (category_set)->data[(category) / 8] \ |
614b916ff5bf
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18341
diff
changeset
|
83 & (1 << ((category) % 8))) |
17052 | 84 |
85 /* Temporary internal variable used in macro CHAR_HAS_CATEGORY. */ | |
86 extern Lisp_Object _temp_category_set; | |
87 | |
88 /* Return 1 if category set of CH contains CATEGORY, elt return 0. */ | |
89 #define CHAR_HAS_CATEGORY(ch, category) \ | |
90 (_temp_category_set = CATEGORY_SET (ch), \ | |
91 CATEGORY_MEMBER (category, _temp_category_set)) | |
92 | |
93 /* The standard category table is stored where it will automatically | |
94 be used in all new buffers. */ | |
95 #define Vstandard_category_table buffer_defaults.category_table | |
96 | |
97 /* Return the category set of character C in the current category table. */ | |
98 #ifdef __GNUC__ | |
17123
7130bd0ea697
(CATEGORY_SET): For a composite character, return
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
99 #define CATEGORY_SET(c) \ |
7130bd0ea697
(CATEGORY_SET): For a composite character, return
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
100 ({ Lisp_Object table = current_buffer->category_table; \ |
7130bd0ea697
(CATEGORY_SET): For a composite character, return
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
101 Lisp_Object temp; \ |
17187
9ab0c08a3359
Adjusted for the change of CHAR_TABLE_ORDINARY_SLOTS.
Kenichi Handa <handa@m17n.org>
parents:
17134
diff
changeset
|
102 if ((c) < CHAR_TABLE_SINGLE_BYTE_SLOTS) \ |
17134
124013c4d7b2
(CATEGORY_SET): Cast arg C to
Kenichi Handa <handa@m17n.org>
parents:
17123
diff
changeset
|
103 while (NILP (temp = XCHAR_TABLE (table)->contents[(unsigned char) c]) \ |
17123
7130bd0ea697
(CATEGORY_SET): For a composite character, return
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
104 && NILP (temp = XCHAR_TABLE (table)->defalt)) \ |
7130bd0ea697
(CATEGORY_SET): For a composite character, return
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
105 table = XCHAR_TABLE (table)->parent; \ |
7130bd0ea697
(CATEGORY_SET): For a composite character, return
Kenichi Handa <handa@m17n.org>
parents:
17071
diff
changeset
|
106 else \ |
26840
141799992598
(CATEGORY_SET): Delete codes for a composite character.
Kenichi Handa <handa@m17n.org>
parents:
23669
diff
changeset
|
107 temp = Faref (table, make_number (c)); \ |
17052 | 108 temp; }) |
109 #else | |
26840
141799992598
(CATEGORY_SET): Delete codes for a composite character.
Kenichi Handa <handa@m17n.org>
parents:
23669
diff
changeset
|
110 #define CATEGORY_SET(c) \ |
141799992598
(CATEGORY_SET): Delete codes for a composite character.
Kenichi Handa <handa@m17n.org>
parents:
23669
diff
changeset
|
111 Faref (current_buffer->category_table, make_number (c)) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
40654
diff
changeset
|
112 #endif |
17052 | 113 |
114 /* Return the doc string of CATEGORY in category table TABLE. */ | |
115 #define CATEGORY_DOCSTRING(table, category) \ | |
18750
06cace23a912
(CATEGORY_DOCSTRING): Convert Fchar_table_extra_slot
Richard M. Stallman <rms@gnu.org>
parents:
18613
diff
changeset
|
116 XVECTOR (Fchar_table_extra_slot (table, make_number (0)))->contents[(category) - ' '] |
17052 | 117 |
118 /* Return the version number of category table TABLE. Not used for | |
119 the moment. */ | |
120 #define CATEGORY_TABLE_VERSION (table) \ | |
18750
06cace23a912
(CATEGORY_DOCSTRING): Convert Fchar_table_extra_slot
Richard M. Stallman <rms@gnu.org>
parents:
18613
diff
changeset
|
121 Fchar_table_extra_slot (table, make_number (1)) |
17052 | 122 |
123 /* Return 1 if there is a word boundary between two word-constituent | |
124 characters C1 and C2 if they appear in this order, else return 0. | |
125 There is no word boundary between two word-constituent ASCII | |
126 characters. */ | |
127 #define WORD_BOUNDARY_P(c1, c2) \ | |
128 (!(SINGLE_BYTE_CHAR_P (c1) && SINGLE_BYTE_CHAR_P (c2)) \ | |
129 && word_boundary_p (c1, c2)) | |
20305
a98f18d91045
Add declaration of word_boundary_p.
Andreas Schwab <schwab@suse.de>
parents:
18750
diff
changeset
|
130 |
a98f18d91045
Add declaration of word_boundary_p.
Andreas Schwab <schwab@suse.de>
parents:
18750
diff
changeset
|
131 extern int word_boundary_p P_ ((int, int)); |
52401 | 132 |
133 /* arch-tag: 309dfe83-c3e2-4d22-8e81-faae5aece0ff | |
134 (do not change this comment) */ |