diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/.gdbinit | 6 | ||||
| -rw-r--r-- | src/ChangeLog | 48 | ||||
| -rw-r--r-- | src/callproc.c | 3 | ||||
| -rw-r--r-- | src/emacs.c | 3 | ||||
| -rw-r--r-- | src/keymap.c | 129 | ||||
| -rw-r--r-- | src/lread.c | 33 | ||||
| -rw-r--r-- | src/minibuf.c | 19 | ||||
| -rw-r--r-- | src/process.c | 2 | ||||
| -rw-r--r-- | src/term.c | 16 | ||||
| -rw-r--r-- | src/textprop.c | 6 |
10 files changed, 234 insertions, 31 deletions
diff --git a/src/.gdbinit b/src/.gdbinit index 10f993fdd9f..4120b1e10bf 100644 --- a/src/.gdbinit +++ b/src/.gdbinit | |||
| @@ -764,6 +764,12 @@ show environment DISPLAY | |||
| 764 | show environment TERM | 764 | show environment TERM |
| 765 | #set args -geometry 80x40+0+0 | 765 | #set args -geometry 80x40+0+0 |
| 766 | 766 | ||
| 767 | # People get bothered when they see messages about non-existent functions... | ||
| 768 | echo \n | ||
| 769 | echo If you see messages below about functions not being defined,\n | ||
| 770 | echo don\'t worry about them. Nothing is wrong.\n | ||
| 771 | echo \n | ||
| 772 | |||
| 767 | # Don't let abort actually run, as it will make | 773 | # Don't let abort actually run, as it will make |
| 768 | # stdio stop working and therefore the `pr' command above as well. | 774 | # stdio stop working and therefore the `pr' command above as well. |
| 769 | break abort | 775 | break abort |
diff --git a/src/ChangeLog b/src/ChangeLog index 4f6cb895004..6ad7c939bce 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,51 @@ | |||
| 1 | 2006-01-01 Ken Raeburn <raeburn@gnu.org> | ||
| 2 | |||
| 3 | * callproc.c (Fcall_process_region): Bind file-name-handler-alist | ||
| 4 | to nil for the call to Fwrite_region. | ||
| 5 | |||
| 6 | 2005-12-31 Richard M. Stallman <rms@gnu.org> | ||
| 7 | |||
| 8 | * minibuf.c (read_minibuf): Clear out all other minibuffer windows. | ||
| 9 | |||
| 10 | 2005-12-31 Eli Zaretskii <eliz@gnu.org> | ||
| 11 | |||
| 12 | * emacs.c (gdb_pvec_type): A dummy variable for GDB's sake. | ||
| 13 | |||
| 14 | 2005-12-30 Luc Teirlinck <teirllm@auburn.edu> | ||
| 15 | |||
| 16 | * textprop.c (set_text_properties): Reword description of return value. | ||
| 17 | Return Qnil if caller wants to remove all text properties from a | ||
| 18 | string and the string already has no intervals. | ||
| 19 | |||
| 20 | 2005-12-30 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 21 | |||
| 22 | * term.c (visible_cursor): New boolean var. | ||
| 23 | (set_terminal_modes, tty_show_cursor): Use "vs" or "ve" depending on | ||
| 24 | visible_cursor. | ||
| 25 | (syms_of_term): Export the new var as "visible-cursor". | ||
| 26 | |||
| 27 | 2005-12-30 Eli Zaretskii <eliz@gnu.org> | ||
| 28 | |||
| 29 | * .gdbinit: Tell users not to worry about GDB warnings that some | ||
| 30 | functions do not exist in the binary. | ||
| 31 | |||
| 32 | 2005-12-30 Andreas Schwab <schwab@suse.de> | ||
| 33 | |||
| 34 | * process.c (Fnetwork_interface_info): Correctly terminate the | ||
| 35 | loop over ifflag_table. | ||
| 36 | |||
| 37 | 2005-12-29 Richard M. Stallman <rms@gnu.org> | ||
| 38 | |||
| 39 | * lread.c (readevalloop): Test for reading a whole buffer | ||
| 40 | before actually reading anything. Handle all cases, including | ||
| 41 | START = END = nil and an already-narrowed buffer. | ||
| 42 | Convert END to a marker if it is a number. | ||
| 43 | |||
| 44 | * keymap.c (describe_map): Put sparse map elements into an array, | ||
| 45 | sort them, then output a sequence of identical bindings on one line. | ||
| 46 | (struct describe_map_elt): New data type. | ||
| 47 | (describe_map_compare): New function. | ||
| 48 | |||
| 1 | 2005-12-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> | 49 | 2005-12-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> |
| 2 | 50 | ||
| 3 | * gtkutil.c (xg_get_file_with_chooser): Changed message shown | 51 | * gtkutil.c (xg_get_file_with_chooser): Changed message shown |
diff --git a/src/callproc.c b/src/callproc.c index f38b7c03ab3..c7804b485c7 100644 --- a/src/callproc.c +++ b/src/callproc.c | |||
| @@ -1133,6 +1133,9 @@ usage: (call-process-region START END PROGRAM &optional DELETE BUFFER DISPLAY &r | |||
| 1133 | int count1 = SPECPDL_INDEX (); | 1133 | int count1 = SPECPDL_INDEX (); |
| 1134 | 1134 | ||
| 1135 | specbind (intern ("coding-system-for-write"), val); | 1135 | specbind (intern ("coding-system-for-write"), val); |
| 1136 | /* POSIX lets mk[s]temp use "."; don't invoke jka-compr if we | ||
| 1137 | happen to get a ".Z" suffix. */ | ||
| 1138 | specbind (intern ("file-name-handler-alist"), Qnil); | ||
| 1136 | Fwrite_region (start, end, filename_string, Qnil, Qlambda, Qnil, Qnil); | 1139 | Fwrite_region (start, end, filename_string, Qnil, Qlambda, Qnil, Qnil); |
| 1137 | 1140 | ||
| 1138 | unbind_to (count1, Qnil); | 1141 | unbind_to (count1, Qnil); |
diff --git a/src/emacs.c b/src/emacs.c index 142da86df95..d38cf4379bf 100644 --- a/src/emacs.c +++ b/src/emacs.c | |||
| @@ -113,6 +113,9 @@ EMACS_INT gdb_data_seg_bits = 0; | |||
| 113 | #endif | 113 | #endif |
| 114 | EMACS_INT PVEC_FLAG = PSEUDOVECTOR_FLAG; | 114 | EMACS_INT PVEC_FLAG = PSEUDOVECTOR_FLAG; |
| 115 | EMACS_INT gdb_array_mark_flag = ARRAY_MARK_FLAG; | 115 | EMACS_INT gdb_array_mark_flag = ARRAY_MARK_FLAG; |
| 116 | /* GDB might say "No enum type named pvec_type" if we don't have at | ||
| 117 | least one symbol with that type, and then xbacktrace could fail. */ | ||
| 118 | enum pvec_type gdb_pvec_type = PVEC_TYPE_MASK; | ||
| 116 | 119 | ||
| 117 | /* Command line args from shell, as list of strings. */ | 120 | /* Command line args from shell, as list of strings. */ |
| 118 | Lisp_Object Vcommand_line_args; | 121 | Lisp_Object Vcommand_line_args; |
diff --git a/src/keymap.c b/src/keymap.c index 97789a75f1d..64069ca4deb 100644 --- a/src/keymap.c +++ b/src/keymap.c | |||
| @@ -3167,6 +3167,34 @@ describe_translation (definition, args) | |||
| 3167 | insert_string ("??\n"); | 3167 | insert_string ("??\n"); |
| 3168 | } | 3168 | } |
| 3169 | 3169 | ||
| 3170 | /* describe_map puts all the usable elements of a sparse keymap | ||
| 3171 | into an array of `struct describe_map_elt', | ||
| 3172 | then sorts them by the events. */ | ||
| 3173 | |||
| 3174 | struct describe_map_elt { Lisp_Object event; Lisp_Object definition; int shadowed; }; | ||
| 3175 | |||
| 3176 | /* qsort comparison function for sorting `struct describe_map_elt' by | ||
| 3177 | the event field. */ | ||
| 3178 | |||
| 3179 | static int | ||
| 3180 | describe_map_compare (aa, bb) | ||
| 3181 | const void *aa, *bb; | ||
| 3182 | { | ||
| 3183 | const struct describe_map_elt *a = aa, *b = bb; | ||
| 3184 | if (INTEGERP (a->event) && INTEGERP (b->event)) | ||
| 3185 | return ((XINT (a->event) > XINT (b->event)) | ||
| 3186 | - (XINT (a->event) < XINT (b->event))); | ||
| 3187 | if (!INTEGERP (a->event) && INTEGERP (b->event)) | ||
| 3188 | return 1; | ||
| 3189 | if (INTEGERP (a->event) && !INTEGERP (b->event)) | ||
| 3190 | return -1; | ||
| 3191 | if (SYMBOLP (a->event) && SYMBOLP (b->event)) | ||
| 3192 | return (Fstring_lessp (a->event, b->event) ? -1 | ||
| 3193 | : Fstring_lessp (b->event, a->event) ? 1 | ||
| 3194 | : 0); | ||
| 3195 | return 0; | ||
| 3196 | } | ||
| 3197 | |||
| 3170 | /* Describe the contents of map MAP, assuming that this map itself is | 3198 | /* Describe the contents of map MAP, assuming that this map itself is |
| 3171 | reached by the sequence of prefix keys PREFIX (a string or vector). | 3199 | reached by the sequence of prefix keys PREFIX (a string or vector). |
| 3172 | PARTIAL, SHADOW, NOMENU are as in `describe_map_tree' above. */ | 3200 | PARTIAL, SHADOW, NOMENU are as in `describe_map_tree' above. */ |
| @@ -3190,6 +3218,13 @@ describe_map (map, prefix, elt_describer, partial, shadow, | |||
| 3190 | int first = 1; | 3218 | int first = 1; |
| 3191 | struct gcpro gcpro1, gcpro2, gcpro3; | 3219 | struct gcpro gcpro1, gcpro2, gcpro3; |
| 3192 | 3220 | ||
| 3221 | /* These accumulate the values from sparse keymap bindings, | ||
| 3222 | so we can sort them and handle them in order. */ | ||
| 3223 | int length_needed = 0; | ||
| 3224 | struct describe_map_elt *vect; | ||
| 3225 | int slots_used = 0; | ||
| 3226 | int i; | ||
| 3227 | |||
| 3193 | suppress = Qnil; | 3228 | suppress = Qnil; |
| 3194 | 3229 | ||
| 3195 | if (partial) | 3230 | if (partial) |
| @@ -3201,6 +3236,12 @@ describe_map (map, prefix, elt_describer, partial, shadow, | |||
| 3201 | kludge = Fmake_vector (make_number (1), Qnil); | 3236 | kludge = Fmake_vector (make_number (1), Qnil); |
| 3202 | definition = Qnil; | 3237 | definition = Qnil; |
| 3203 | 3238 | ||
| 3239 | for (tail = map; CONSP (tail); tail = XCDR (tail)) | ||
| 3240 | length_needed++; | ||
| 3241 | |||
| 3242 | vect = ((struct describe_map_elt *) | ||
| 3243 | alloca (sizeof (struct describe_map_elt) * length_needed)); | ||
| 3244 | |||
| 3204 | GCPRO3 (prefix, definition, kludge); | 3245 | GCPRO3 (prefix, definition, kludge); |
| 3205 | 3246 | ||
| 3206 | for (tail = map; CONSP (tail); tail = XCDR (tail)) | 3247 | for (tail = map; CONSP (tail); tail = XCDR (tail)) |
| @@ -3215,6 +3256,7 @@ describe_map (map, prefix, elt_describer, partial, shadow, | |||
| 3215 | else if (CONSP (XCAR (tail))) | 3256 | else if (CONSP (XCAR (tail))) |
| 3216 | { | 3257 | { |
| 3217 | int this_shadowed = 0; | 3258 | int this_shadowed = 0; |
| 3259 | |||
| 3218 | event = XCAR (XCAR (tail)); | 3260 | event = XCAR (XCAR (tail)); |
| 3219 | 3261 | ||
| 3220 | /* Ignore bindings whose "prefix" are not really valid events. | 3262 | /* Ignore bindings whose "prefix" are not really valid events. |
| @@ -3255,27 +3297,10 @@ describe_map (map, prefix, elt_describer, partial, shadow, | |||
| 3255 | tem = Flookup_key (map, kludge, Qt); | 3297 | tem = Flookup_key (map, kludge, Qt); |
| 3256 | if (!EQ (tem, definition)) continue; | 3298 | if (!EQ (tem, definition)) continue; |
| 3257 | 3299 | ||
| 3258 | if (first) | 3300 | vect[slots_used].event = event; |
| 3259 | { | 3301 | vect[slots_used].definition = definition; |
| 3260 | previous_description_column = 0; | 3302 | vect[slots_used].shadowed = this_shadowed; |
| 3261 | insert ("\n", 1); | 3303 | slots_used++; |
| 3262 | first = 0; | ||
| 3263 | } | ||
| 3264 | |||
| 3265 | /* THIS gets the string to describe the character EVENT. */ | ||
| 3266 | insert1 (Fkey_description (kludge, prefix)); | ||
| 3267 | |||
| 3268 | /* Print a description of the definition of this character. | ||
| 3269 | elt_describer will take care of spacing out far enough | ||
| 3270 | for alignment purposes. */ | ||
| 3271 | (*elt_describer) (definition, Qnil); | ||
| 3272 | |||
| 3273 | if (this_shadowed) | ||
| 3274 | { | ||
| 3275 | SET_PT (PT - 1); | ||
| 3276 | insert_string (" (binding currently shadowed)"); | ||
| 3277 | SET_PT (PT + 1); | ||
| 3278 | } | ||
| 3279 | } | 3304 | } |
| 3280 | else if (EQ (XCAR (tail), Qkeymap)) | 3305 | else if (EQ (XCAR (tail), Qkeymap)) |
| 3281 | { | 3306 | { |
| @@ -3289,6 +3314,68 @@ describe_map (map, prefix, elt_describer, partial, shadow, | |||
| 3289 | } | 3314 | } |
| 3290 | } | 3315 | } |
| 3291 | 3316 | ||
| 3317 | /* If we found some sparse map events, sort them. */ | ||
| 3318 | |||
| 3319 | qsort (vect, slots_used, sizeof (struct describe_map_elt), | ||
| 3320 | describe_map_compare); | ||
| 3321 | |||
| 3322 | /* Now output them in sorted order. */ | ||
| 3323 | |||
| 3324 | for (i = 0; i < slots_used; i++) | ||
| 3325 | { | ||
| 3326 | Lisp_Object start, end; | ||
| 3327 | |||
| 3328 | if (first) | ||
| 3329 | { | ||
| 3330 | previous_description_column = 0; | ||
| 3331 | insert ("\n", 1); | ||
| 3332 | first = 0; | ||
| 3333 | } | ||
| 3334 | |||
| 3335 | ASET (kludge, 0, vect[i].event); | ||
| 3336 | start = vect[i].event; | ||
| 3337 | end = start; | ||
| 3338 | |||
| 3339 | definition = vect[i].definition; | ||
| 3340 | |||
| 3341 | /* Find consecutive chars that are identically defined. */ | ||
| 3342 | if (INTEGERP (vect[i].event)) | ||
| 3343 | { | ||
| 3344 | while (i + 1 < slots_used | ||
| 3345 | && XINT (vect[i + 1].event) == XINT (vect[i].event) + 1 | ||
| 3346 | && !NILP (Fequal (vect[i + 1].definition, definition)) | ||
| 3347 | && vect[i].shadowed == vect[i + 1].shadowed) | ||
| 3348 | i++; | ||
| 3349 | end = vect[i].event; | ||
| 3350 | } | ||
| 3351 | |||
| 3352 | /* Now START .. END is the range to describe next. */ | ||
| 3353 | |||
| 3354 | /* Insert the string to describe the event START. */ | ||
| 3355 | insert1 (Fkey_description (kludge, prefix)); | ||
| 3356 | |||
| 3357 | if (!EQ (start, end)) | ||
| 3358 | { | ||
| 3359 | insert (" .. ", 4); | ||
| 3360 | |||
| 3361 | ASET (kludge, 0, end); | ||
| 3362 | /* Insert the string to describe the character END. */ | ||
| 3363 | insert1 (Fkey_description (kludge, prefix)); | ||
| 3364 | } | ||
| 3365 | |||
| 3366 | /* Print a description of the definition of this character. | ||
| 3367 | elt_describer will take care of spacing out far enough | ||
| 3368 | for alignment purposes. */ | ||
| 3369 | (*elt_describer) (vect[i].definition, Qnil); | ||
| 3370 | |||
| 3371 | if (vect[i].shadowed) | ||
| 3372 | { | ||
| 3373 | SET_PT (PT - 1); | ||
| 3374 | insert_string (" (binding currently shadowed)"); | ||
| 3375 | SET_PT (PT + 1); | ||
| 3376 | } | ||
| 3377 | } | ||
| 3378 | |||
| 3292 | UNGCPRO; | 3379 | UNGCPRO; |
| 3293 | } | 3380 | } |
| 3294 | 3381 | ||
diff --git a/src/lread.c b/src/lread.c index 236ebebda13..0eb54393482 100644 --- a/src/lread.c +++ b/src/lread.c | |||
| @@ -1323,7 +1323,18 @@ readevalloop (readcharfun, stream, sourcename, evalfun, | |||
| 1323 | int count = SPECPDL_INDEX (); | 1323 | int count = SPECPDL_INDEX (); |
| 1324 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; | 1324 | struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
| 1325 | struct buffer *b = 0; | 1325 | struct buffer *b = 0; |
| 1326 | int bpos; | ||
| 1326 | int continue_reading_p; | 1327 | int continue_reading_p; |
| 1328 | /* Nonzero if reading an entire buffer. */ | ||
| 1329 | int whole_buffer = 0; | ||
| 1330 | /* 1 on the first time around. */ | ||
| 1331 | int first_sexp = 1; | ||
| 1332 | |||
| 1333 | if (MARKERP (readcharfun)) | ||
| 1334 | { | ||
| 1335 | if (NILP (start)) | ||
| 1336 | start = readcharfun; | ||
| 1337 | } | ||
| 1327 | 1338 | ||
| 1328 | if (BUFFERP (readcharfun)) | 1339 | if (BUFFERP (readcharfun)) |
| 1329 | b = XBUFFER (readcharfun); | 1340 | b = XBUFFER (readcharfun); |
| @@ -1349,7 +1360,6 @@ readevalloop (readcharfun, stream, sourcename, evalfun, | |||
| 1349 | if (b != 0 && NILP (b->name)) | 1360 | if (b != 0 && NILP (b->name)) |
| 1350 | error ("Reading from killed buffer"); | 1361 | error ("Reading from killed buffer"); |
| 1351 | 1362 | ||
| 1352 | |||
| 1353 | if (!NILP (start)) | 1363 | if (!NILP (start)) |
| 1354 | { | 1364 | { |
| 1355 | /* Switch to the buffer we are reading from. */ | 1365 | /* Switch to the buffer we are reading from. */ |
| @@ -1364,9 +1374,20 @@ readevalloop (readcharfun, stream, sourcename, evalfun, | |||
| 1364 | 1374 | ||
| 1365 | /* Set point and ZV around stuff to be read. */ | 1375 | /* Set point and ZV around stuff to be read. */ |
| 1366 | Fgoto_char (start); | 1376 | Fgoto_char (start); |
| 1367 | Fnarrow_to_region (make_number (BEGV), end); | 1377 | if (!NILP (end)) |
| 1378 | Fnarrow_to_region (make_number (BEGV), end); | ||
| 1379 | |||
| 1380 | /* Just for cleanliness, convert END to a marker | ||
| 1381 | if it is an integer. */ | ||
| 1382 | if (INTEGERP (end)) | ||
| 1383 | end = Fpoint_max_marker (); | ||
| 1368 | } | 1384 | } |
| 1369 | 1385 | ||
| 1386 | /* On the first cycle, we can easily test here | ||
| 1387 | whether we are reading the whole buffer. */ | ||
| 1388 | if (b && first_sexp) | ||
| 1389 | whole_buffer = (PT == BEG && ZV == Z); | ||
| 1390 | |||
| 1370 | instream = stream; | 1391 | instream = stream; |
| 1371 | read_next: | 1392 | read_next: |
| 1372 | c = READCHAR; | 1393 | c = READCHAR; |
| @@ -1416,8 +1437,11 @@ readevalloop (readcharfun, stream, sourcename, evalfun, | |||
| 1416 | 1437 | ||
| 1417 | if (!NILP (start) && continue_reading_p) | 1438 | if (!NILP (start) && continue_reading_p) |
| 1418 | start = Fpoint_marker (); | 1439 | start = Fpoint_marker (); |
| 1440 | |||
| 1441 | /* Restore saved point and BEGV. */ | ||
| 1419 | unbind_to (count1, Qnil); | 1442 | unbind_to (count1, Qnil); |
| 1420 | 1443 | ||
| 1444 | /* Now eval what we just read. */ | ||
| 1421 | val = (*evalfun) (val); | 1445 | val = (*evalfun) (val); |
| 1422 | 1446 | ||
| 1423 | if (printflag) | 1447 | if (printflag) |
| @@ -1428,11 +1452,12 @@ readevalloop (readcharfun, stream, sourcename, evalfun, | |||
| 1428 | else | 1452 | else |
| 1429 | Fprint (val, Qnil); | 1453 | Fprint (val, Qnil); |
| 1430 | } | 1454 | } |
| 1455 | |||
| 1456 | first_sexp = 0; | ||
| 1431 | } | 1457 | } |
| 1432 | 1458 | ||
| 1433 | build_load_history (sourcename, | 1459 | build_load_history (sourcename, |
| 1434 | stream || (INTEGERP (start) && INTEGERP (end) | 1460 | stream || whole_buffer); |
| 1435 | && XINT (start) == BEG && XINT (end) == Z)); | ||
| 1436 | 1461 | ||
| 1437 | UNGCPRO; | 1462 | UNGCPRO; |
| 1438 | 1463 | ||
diff --git a/src/minibuf.c b/src/minibuf.c index 7f3f7fe87ea..b327f2d040a 100644 --- a/src/minibuf.c +++ b/src/minibuf.c | |||
| @@ -464,6 +464,9 @@ read_minibuf (map, initial, prompt, backup_n, expflag, | |||
| 464 | /* String to add to the history. */ | 464 | /* String to add to the history. */ |
| 465 | Lisp_Object histstring; | 465 | Lisp_Object histstring; |
| 466 | 466 | ||
| 467 | Lisp_Object empty_minibuf; | ||
| 468 | Lisp_Object dummy, frame; | ||
| 469 | |||
| 467 | extern Lisp_Object Qfront_sticky; | 470 | extern Lisp_Object Qfront_sticky; |
| 468 | extern Lisp_Object Qrear_nonsticky; | 471 | extern Lisp_Object Qrear_nonsticky; |
| 469 | 472 | ||
| @@ -641,6 +644,22 @@ read_minibuf (map, initial, prompt, backup_n, expflag, | |||
| 641 | Vminibuf_scroll_window = selected_window; | 644 | Vminibuf_scroll_window = selected_window; |
| 642 | if (minibuf_level == 1 || !EQ (minibuf_window, selected_window)) | 645 | if (minibuf_level == 1 || !EQ (minibuf_window, selected_window)) |
| 643 | minibuf_selected_window = selected_window; | 646 | minibuf_selected_window = selected_window; |
| 647 | |||
| 648 | /* Empty out the minibuffers of all frames other than the one | ||
| 649 | where we are going to display one now. | ||
| 650 | Set them to point to ` *Minibuf-0*', which is always empty. */ | ||
| 651 | empty_minibuf = Fget_buffer (build_string (" *Minibuf-0*")); | ||
| 652 | |||
| 653 | FOR_EACH_FRAME (dummy, frame) | ||
| 654 | { | ||
| 655 | Lisp_Object root_window = Fframe_root_window (frame); | ||
| 656 | Lisp_Object mini_window = XWINDOW (root_window)->next; | ||
| 657 | |||
| 658 | if (! NILP (mini_window) && !NILP (Fwindow_minibuffer_p (mini_window))) | ||
| 659 | Fset_window_buffer (mini_window, empty_minibuf, Qnil); | ||
| 660 | } | ||
| 661 | |||
| 662 | /* Display this minibuffer in the proper window. */ | ||
| 644 | Fset_window_buffer (minibuf_window, Fcurrent_buffer (), Qnil); | 663 | Fset_window_buffer (minibuf_window, Fcurrent_buffer (), Qnil); |
| 645 | Fselect_window (minibuf_window, Qnil); | 664 | Fselect_window (minibuf_window, Qnil); |
| 646 | XSETFASTINT (XWINDOW (minibuf_window)->hscroll, 0); | 665 | XSETFASTINT (XWINDOW (minibuf_window)->hscroll, 0); |
diff --git a/src/process.c b/src/process.c index 752768a7bad..e869456e5c8 100644 --- a/src/process.c +++ b/src/process.c | |||
| @@ -3558,7 +3558,7 @@ FLAGS is the current flags of the interface. */) | |||
| 3558 | int fnum; | 3558 | int fnum; |
| 3559 | 3559 | ||
| 3560 | any++; | 3560 | any++; |
| 3561 | for (fp = ifflag_table; flags != 0 && fp; fp++) | 3561 | for (fp = ifflag_table; flags != 0 && fp->flag_sym; fp++) |
| 3562 | { | 3562 | { |
| 3563 | if (flags & fp->flag_bit) | 3563 | if (flags & fp->flag_bit) |
| 3564 | { | 3564 | { |
diff --git a/src/term.c b/src/term.c index 49356348545..899739de6ae 100644 --- a/src/term.c +++ b/src/term.c | |||
| @@ -109,6 +109,10 @@ static void delete_tty P_ ((struct terminal *)); | |||
| 109 | 109 | ||
| 110 | #define OUTPUT1_IF(tty, a) do { if (a) emacs_tputs ((tty), a, 1, cmputc); } while (0) | 110 | #define OUTPUT1_IF(tty, a) do { if (a) emacs_tputs ((tty), a, 1, cmputc); } while (0) |
| 111 | 111 | ||
| 112 | /* If true, use "vs", otherwise use "ve" to make the cursor visible. */ | ||
| 113 | |||
| 114 | static int visible_cursor; | ||
| 115 | |||
| 112 | /* Display space properties */ | 116 | /* Display space properties */ |
| 113 | 117 | ||
| 114 | extern Lisp_Object Qspace, QCalign_to, QCwidth; | 118 | extern Lisp_Object Qspace, QCalign_to, QCwidth; |
| @@ -217,7 +221,7 @@ tty_set_terminal_modes (struct terminal *terminal) | |||
| 217 | } | 221 | } |
| 218 | 222 | ||
| 219 | OUTPUT_IF (tty, tty->TS_termcap_modes); | 223 | OUTPUT_IF (tty, tty->TS_termcap_modes); |
| 220 | OUTPUT_IF (tty, tty->TS_cursor_visible); | 224 | OUTPUT_IF (tty, visible_cursor ? tty->TS_cursor_visible : tty->TS_cursor_normal); |
| 221 | OUTPUT_IF (tty, tty->TS_keypad_mode); | 225 | OUTPUT_IF (tty, tty->TS_keypad_mode); |
| 222 | losecursor (tty); | 226 | losecursor (tty); |
| 223 | fflush (tty->output); | 227 | fflush (tty->output); |
| @@ -359,7 +363,8 @@ tty_show_cursor (struct tty_display_info *tty) | |||
| 359 | { | 363 | { |
| 360 | tty->cursor_hidden = 0; | 364 | tty->cursor_hidden = 0; |
| 361 | OUTPUT_IF (tty, tty->TS_cursor_normal); | 365 | OUTPUT_IF (tty, tty->TS_cursor_normal); |
| 362 | OUTPUT_IF (tty, tty->TS_cursor_visible); | 366 | if (visible_cursor) |
| 367 | OUTPUT_IF (tty, tty->TS_cursor_visible); | ||
| 363 | } | 368 | } |
| 364 | } | 369 | } |
| 365 | 370 | ||
| @@ -3031,6 +3036,13 @@ The functions are run with one argument, the name of the tty that was revived. | |||
| 3031 | See `resume-tty'. */); | 3036 | See `resume-tty'. */); |
| 3032 | Vresume_tty_functions = Qnil; | 3037 | Vresume_tty_functions = Qnil; |
| 3033 | 3038 | ||
| 3039 | DEFVAR_BOOL ("visible-cursor", &visible_cursor, | ||
| 3040 | doc: /* Non-nil means to make the cursor very visible. | ||
| 3041 | This only has an effect when running in a text terminal. | ||
| 3042 | What means \"very visible\" is up to your terminal. It may make the cursor | ||
| 3043 | bigger, or it may make it blink, or it may do nothing at all. */); | ||
| 3044 | visible_cursor = 1; | ||
| 3045 | |||
| 3034 | defsubr (&Stty_display_color_p); | 3046 | defsubr (&Stty_display_color_p); |
| 3035 | defsubr (&Stty_display_color_cells); | 3047 | defsubr (&Stty_display_color_cells); |
| 3036 | defsubr (&Stty_no_underline); | 3048 | defsubr (&Stty_no_underline); |
diff --git a/src/textprop.c b/src/textprop.c index fa9b0e498c5..029f2f41031 100644 --- a/src/textprop.c +++ b/src/textprop.c | |||
| @@ -1316,8 +1316,8 @@ the designated part of OBJECT. */) | |||
| 1316 | properties PROPERTIES. OBJECT is the buffer or string containing | 1316 | properties PROPERTIES. OBJECT is the buffer or string containing |
| 1317 | the text. OBJECT nil means use the current buffer. | 1317 | the text. OBJECT nil means use the current buffer. |
| 1318 | SIGNAL_AFTER_CHANGE_P nil means don't signal after changes. Value | 1318 | SIGNAL_AFTER_CHANGE_P nil means don't signal after changes. Value |
| 1319 | is non-nil if properties were replaced; it is nil if there weren't | 1319 | is nil if the function _detected_ that it did not replace any |
| 1320 | any properties to replace. */ | 1320 | properties, non-nil otherwise. */ |
| 1321 | 1321 | ||
| 1322 | Lisp_Object | 1322 | Lisp_Object |
| 1323 | set_text_properties (start, end, properties, object, signal_after_change_p) | 1323 | set_text_properties (start, end, properties, object, signal_after_change_p) |
| @@ -1341,7 +1341,7 @@ set_text_properties (start, end, properties, object, signal_after_change_p) | |||
| 1341 | && XFASTINT (end) == SCHARS (object)) | 1341 | && XFASTINT (end) == SCHARS (object)) |
| 1342 | { | 1342 | { |
| 1343 | if (! STRING_INTERVALS (object)) | 1343 | if (! STRING_INTERVALS (object)) |
| 1344 | return Qt; | 1344 | return Qnil; |
| 1345 | 1345 | ||
| 1346 | STRING_SET_INTERVALS (object, NULL_INTERVAL); | 1346 | STRING_SET_INTERVALS (object, NULL_INTERVAL); |
| 1347 | return Qt; | 1347 | return Qt; |