From c15672376943ae6bfe05f3ab91f5b8a65a9d8d4a Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 26 Dec 2020 12:35:34 +0200 Subject: [PATCH 001/116] Fix Rmail summary display when From: header is malformed * lisp/mail/rmailsum.el (rmail-header-summary): Remove newlines from the "From:" value, to avoid producing corrupted summary display. --- lisp/mail/rmailsum.el | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el index cc55451902a..2eda3222a47 100644 --- a/lisp/mail/rmailsum.el +++ b/lisp/mail/rmailsum.el @@ -786,6 +786,11 @@ the message being processed." ;; To: =?UTF-8?Q?=C5=A0t=C4=9Bp=C3=A1n_?= =?UTF-8?Q?N=C4=9Bmec?= ;; (setq from (rfc2047-decode-string from)) + ;; We cannot tolerate any leftover newlines in From, + ;; as that disrupts the rmail-summary display. + ;; Newlines can be left in From if it was malformed, + ;; e.g. had unbalanced quotes. + (setq from (replace-regexp-in-string "\n+" " " from)) (setq len (length from)) (setq mch (string-match "[@%]" from)) (format "%25s" From c9b37634b131f3617314bd5a38090e96d0b465cf Mon Sep 17 00:00:00 2001 From: Alan Third Date: Wed, 23 Dec 2020 20:12:02 +0000 Subject: [PATCH 002/116] Remove NS menu synthesized events (bug#44333) Remove the frame tracking stuff as it's not used for anything, and move the update tracking into the EmacsMenu class. * src/nsmenu.m (ns_update_menubar): Copy the parsing code from xmenu.c and rework the NS specific code around to update the existing menus instead of rebuilding them completely. (ns_activate_menubar): ([EmacsMenu trackingNotification:]): ([EmacsMenu menuWillOpen:]): ([EmacsMenu menuDidClose:]): Remove unused functions. ([EmacsMenu menuNeedsUpdate:]): Remove menu tracking code and add code to check whether an update is required. ([EmacsMenu fillWithWidgetValue:]): ([EmacsMenu addSubmenuWithTitle:]): ([EmacsMenu initWithTitle:]): Remove references to frame. ([EmacsMenu setFrame:]): Remove method. ([EmacsMenu clear]): Rename to removeAllItems. ([EmacsMenu removeAllItems]): Use built-in removeAllItems, if available. (syms_of_nsmenu): Remove tracking code. * src/nsterm.m (ns_check_menu_open): (ns_check_pending_open_menu): (ns_create_terminal): Remove unused functions. (ns_term_init): Get rid of menu tracking. * src/nsterm.h (EmacsMenu): Remove frame, add needsUpdate and update method definitions. --- src/nsmenu.m | 461 ++++++++++++++++++--------------------------------- src/nsterm.h | 15 +- src/nsterm.m | 101 ----------- 3 files changed, 160 insertions(+), 417 deletions(-) diff --git a/src/nsmenu.m b/src/nsmenu.m index efad978316e..3f0cd0c6ed4 100644 --- a/src/nsmenu.m +++ b/src/nsmenu.m @@ -47,21 +47,11 @@ #endif -#if 0 -/* Include lisp -> C common menu parsing code. */ -#define ENCODE_MENU_STRING(str) ENCODE_UTF_8 (str) -#include "nsmenu_common.c" -#endif - extern long context_menu_value; EmacsMenu *svcsMenu; /* Nonzero means a menu is currently active. */ static int popup_activated_flag; -/* Nonzero means we are tracking and updating menus. */ -static int trackingMenu; - - /* NOTE: toolbar implementation is at end, following complete menu implementation. */ @@ -98,16 +88,18 @@ 3) deep_p, submenu = non-nil: Update contents of a single submenu. -------------------------------------------------------------------------- */ static void -ns_update_menubar (struct frame *f, bool deep_p, EmacsMenu *submenu) +ns_update_menubar (struct frame *f, bool deep_p) { NSAutoreleasePool *pool; - id menu = [NSApp mainMenu]; - static EmacsMenu *last_submenu = nil; BOOL needsSet = NO; - bool owfi; + id menu = [NSApp mainMenu]; + Lisp_Object items; widget_value *wv, *first_wv, *prev_wv = 0; int i; + int *submenu_start, *submenu_end; + bool *submenu_top_level_items; + int *submenu_n_panes; #if NSMENUPROFILE struct timeb tb; @@ -141,115 +133,94 @@ t = -(1000*tb.time+tb.millitm); #endif -#ifdef NS_IMPL_GNUSTEP - deep_p = 1; /* until GNUstep NSMenu implements the Panther delegation model */ -#endif - if (deep_p) { - /* Fully parse one or more of the submenus. */ - int n = 0; - int *submenu_start, *submenu_end; - bool *submenu_top_level_items; - int *submenu_n_panes; + /* Make a widget-value tree representing the entire menu trees. */ + struct buffer *prev = current_buffer; Lisp_Object buffer; ptrdiff_t specpdl_count = SPECPDL_INDEX (); int previous_menu_items_used = f->menu_bar_items_used; Lisp_Object *previous_items = alloca (previous_menu_items_used * sizeof *previous_items); + int subitems; - /* lisp preliminaries */ buffer = XWINDOW (FRAME_SELECTED_WINDOW (f))->contents; specbind (Qinhibit_quit, Qt); + /* Don't let the debugger step into this code + because it is not reentrant. */ specbind (Qdebug_on_next_call, Qnil); + record_unwind_save_match_data (); if (NILP (Voverriding_local_map_menu_flag)) { specbind (Qoverriding_terminal_local_map, Qnil); specbind (Qoverriding_local_map, Qnil); } + set_buffer_internal_1 (XBUFFER (buffer)); - /* TODO: for some reason this is not needed in other terms, - but some menu updates call Info-extract-pointer which causes - abort-on-error if waiting-for-input. Needs further investigation. */ - owfi = waiting_for_input; - waiting_for_input = 0; - - /* lucid hook and possible reset */ + /* Run the Lucid hook. */ safe_run_hooks (Qactivate_menubar_hook); + + /* If it has changed current-menubar from previous value, + really recompute the menubar from the value. */ if (! NILP (Vlucid_menu_bar_dirty_flag)) call0 (Qrecompute_lucid_menubar); safe_run_hooks (Qmenu_bar_update_hook); fset_menu_bar_items (f, menu_bar_items (FRAME_MENU_BAR_ITEMS (f))); - /* Now ready to go */ items = FRAME_MENU_BAR_ITEMS (f); - /* Save the frame's previous menu bar contents data */ + /* Save the frame's previous menu bar contents data. */ if (previous_menu_items_used) - memcpy (previous_items, aref_addr (f->menu_bar_vector, 0), - previous_menu_items_used * sizeof (Lisp_Object)); + memcpy (previous_items, xvector_contents (f->menu_bar_vector), + previous_menu_items_used * word_size); - /* parse stage 1: extract from lisp */ + /* Fill in menu_items with the current menu bar contents. + This can evaluate Lisp code. */ save_menu_items (); menu_items = f->menu_bar_vector; menu_items_allocated = VECTORP (menu_items) ? ASIZE (menu_items) : 0; - submenu_start = alloca (ASIZE (items) * sizeof *submenu_start); - submenu_end = alloca (ASIZE (items) * sizeof *submenu_end); - submenu_n_panes = alloca (ASIZE (items) * sizeof *submenu_n_panes); - submenu_top_level_items = alloca (ASIZE (items) + subitems = ASIZE (items) / 4; + submenu_start = alloca ((subitems + 1) * sizeof *submenu_start); + submenu_end = alloca (subitems * sizeof *submenu_end); + submenu_n_panes = alloca (subitems * sizeof *submenu_n_panes); + submenu_top_level_items = alloca (subitems * sizeof *submenu_top_level_items); init_menu_items (); - for (i = 0; i < ASIZE (items); i += 4) + for (i = 0; i < subitems; i++) { Lisp_Object key, string, maps; - key = AREF (items, i); - string = AREF (items, i + 1); - maps = AREF (items, i + 2); + key = AREF (items, 4 * i); + string = AREF (items, 4 * i + 1); + maps = AREF (items, 4 * i + 2); if (NILP (string)) break; - /* FIXME: we'd like to only parse the needed submenu, but this - was causing crashes in the _common parsing code: need to make - sure proper initialization done. */ - /* if (submenu && strcmp ([[submenu title] UTF8String], SSDATA (string))) - continue; */ - submenu_start[i] = menu_items_used; menu_items_n_panes = 0; - submenu_top_level_items[i] = parse_single_submenu (key, string, maps); + submenu_top_level_items[i] + = parse_single_submenu (key, string, maps); submenu_n_panes[i] = menu_items_n_panes; + submenu_end[i] = menu_items_used; - n++; } + submenu_start[i] = -1; finish_menu_items (); - waiting_for_input = owfi; + /* Convert menu_items into widget_value trees + to display the menu. This cannot evaluate Lisp code. */ - if (submenu && n == 0) - { - /* should have found a menu for this one but didn't */ - fprintf (stderr, "ERROR: did not find lisp menu for submenu '%s'.\n", - [[submenu title] UTF8String]); - discard_menu_items (); - unbind_to (specpdl_count, Qnil); - unblock_input (); - return; - } - - /* parse stage 2: insert into lucid 'widget_value' structures - [comments in other terms say not to evaluate lisp code here] */ wv = make_widget_value ("menubar", NULL, true, Qnil); wv->button_type = BUTTON_TYPE_NONE; first_wv = wv; - for (i = 0; i < 4*n; i += 4) + for (i = 0; submenu_start[i] >= 0; i++) { menu_items_n_panes = submenu_n_panes[i]; wv = digest_single_submenu (submenu_start[i], submenu_end[i], @@ -259,169 +230,79 @@ else first_wv->contents = wv; /* Don't set wv->name here; GC during the loop might relocate it. */ - wv->enabled = 1; + wv->enabled = true; wv->button_type = BUTTON_TYPE_NONE; prev_wv = wv; } set_buffer_internal_1 (prev); - /* Compare the new menu items with previous, and leave off if no change. */ - /* FIXME: following other terms here, but seems like this should be - done before parse stage 2 above, since its results aren't used. */ - if (previous_menu_items_used - && (!submenu || (submenu && submenu == last_submenu)) - && menu_items_used == previous_menu_items_used) - { - for (i = 0; i < previous_menu_items_used; i++) - /* FIXME: this ALWAYS fails on Buffers menu items.. something - about their strings causes them to change every time, so we - double-check failures. */ - if (!EQ (previous_items[i], AREF (menu_items, i))) - if (!(STRINGP (previous_items[i]) - && STRINGP (AREF (menu_items, i)) - && !strcmp (SSDATA (previous_items[i]), - SSDATA (AREF (menu_items, i))))) - break; - if (i == previous_menu_items_used) - { - /* No change. */ + /* If there has been no change in the Lisp-level contents + of the menu bar, skip redisplaying it. Just exit. */ -#if NSMENUPROFILE - ftime (&tb); - t += 1000*tb.time+tb.millitm; - fprintf (stderr, "NO CHANGE! CUTTING OUT after %ld msec.\n", t); -#endif + /* Compare the new menu items with the ones computed last time. */ + for (i = 0; i < previous_menu_items_used; i++) + if (menu_items_used == i + || (!EQ (previous_items[i], AREF (menu_items, i)))) + break; + if (i == menu_items_used && i == previous_menu_items_used && i != 0) + { + /* The menu items have not changed. Don't bother updating + the menus in any form, since it would be a no-op. */ + free_menubar_widget_value_tree (first_wv); + discard_menu_items (); + unbind_to (specpdl_count, Qnil); + return; + } - free_menubar_widget_value_tree (first_wv); - discard_menu_items (); - unbind_to (specpdl_count, Qnil); - unblock_input (); - return; - } - } /* The menu items are different, so store them in the frame. */ - /* FIXME: this is not correct for single-submenu case. */ fset_menu_bar_vector (f, menu_items); f->menu_bar_items_used = menu_items_used; - /* Calls restore_menu_items, etc., as they were outside. */ + /* This undoes save_menu_items. */ unbind_to (specpdl_count, Qnil); - /* Parse stage 2a: now GC cannot happen during the lifetime of the - widget_value, so it's safe to store data from a Lisp_String. */ + /* Now GC cannot happen during the lifetime of the widget_value, + so it's safe to store data from a Lisp_String. */ wv = first_wv->contents; for (i = 0; i < ASIZE (items); i += 4) { Lisp_Object string; string = AREF (items, i + 1); if (NILP (string)) - break; - - wv->name = SSDATA (string); + break; + wv->name = SSDATA (string); update_submenu_strings (wv->contents); - wv = wv->next; + wv = wv->next; } - /* Now, update the NS menu; if we have a submenu, use that, otherwise - create a new menu for each sub and fill it. */ - if (submenu) - { - const char *submenuTitle = [[submenu title] UTF8String]; - for (wv = first_wv->contents; wv; wv = wv->next) - { - if (!strcmp (submenuTitle, wv->name)) - { - [submenu fillWithWidgetValue: wv->contents]; - last_submenu = submenu; - break; - } - } - } - else - { - [menu fillWithWidgetValue: first_wv->contents frame: f]; - } - } else { - static int n_previous_strings = 0; - static char previous_strings[100][10]; - static struct frame *last_f = NULL; - int n; - Lisp_Object string; + /* Make a widget-value tree containing + just the top level menu bar strings. */ wv = make_widget_value ("menubar", NULL, true, Qnil); wv->button_type = BUTTON_TYPE_NONE; first_wv = wv; - /* Make widget-value tree with just the top level menu bar strings. */ items = FRAME_MENU_BAR_ITEMS (f); - if (NILP (items)) - { - free_menubar_widget_value_tree (first_wv); - unblock_input (); - return; - } - - - /* Check if no change: this mechanism is a bit rough, but ready. */ - n = ASIZE (items) / 4; - if (f == last_f && n_previous_strings == n) - { - for (i = 0; ibutton_type = BUTTON_TYPE_NONE; + /* This prevents lwlib from assuming this + menu item is really supposed to be empty. */ + /* The intptr_t cast avoids a warning. + This value just has to be different from small integers. */ wv->call_data = (void *) (intptr_t) (-1); -#ifdef NS_IMPL_COCOA - /* We'll update the real copy under app menu when time comes. */ - if (!strcmp ("Services", wv->name)) - { - /* But we need to make sure it will update on demand. */ - [svcsMenu setFrame: f]; - } - else -#endif - [menu addSubmenuWithTitle: wv->name forFrame: f]; - if (prev_wv) prev_wv->next = wv; else @@ -429,15 +310,68 @@ prev_wv = wv; } - last_f = f; - if (n < 100) - n_previous_strings = n; - else - n_previous_strings = 0; - + /* Forget what we thought we knew about what is in the + detailed contents of the menu bar menus. + Changing the top level always destroys the contents. */ + f->menu_bar_items_used = 0; } - free_menubar_widget_value_tree (first_wv); + /* Now, update the NS menu. */ + if (deep_p) + { + /* This path is typically used when a menu has been clicked. I + think Apple expect us to only update that one menu, however + to update one we need to do the hard work of parsing the + whole tree, so we may as well update them all. */ +#ifdef NS_IMPL_COCOA + int i = 1; +#else + int i = 0; +#endif + for (wv = first_wv->contents; wv; wv = wv->next) + { + /* The contents of wv should match the top level menu. */ + EmacsMenu *submenu = (EmacsMenu*)[[menu itemAtIndex:i++] submenu]; + + [submenu fillWithWidgetValue: wv->contents]; + } + } + else + { + /* Make sure we skip the "application" menu, which is always the + first entry in our top-level menu. */ +#ifdef NS_IMPL_COCOA + int i = 1; +#else + int i = 0; +#endif + for (wv = first_wv->contents; wv; wv = wv->next) + { + if (i < [menu numberOfItems]) + { + NSString *titleStr = [NSString stringWithUTF8String: wv->name]; + NSMenuItem *item = [menu itemAtIndex:i]; + EmacsMenu *submenu = (EmacsMenu*)[item submenu]; + + [item setTitle:titleStr]; + [submenu setTitle:titleStr]; + [submenu removeAllItems]; + } + else + [menu addSubmenuWithTitle: wv->name]; + + i += 1; + } + + while (i < [menu numberOfItems]) + { + /* Remove any extra items. */ + [menu removeItemAtIndex:i]; + } + } + + + free_menubar_widget_value_tree (first_wv); #if NSMENUPROFILE ftime (&tb); @@ -460,20 +394,9 @@ void set_frame_menubar (struct frame *f, bool first_time, bool deep_p) { - ns_update_menubar (f, deep_p, nil); + ns_update_menubar (f, deep_p); } -void -ns_activate_menubar (struct frame *f) -{ -#ifdef NS_IMPL_COCOA - ns_update_menubar (f, true, nil); - ns_check_pending_open_menu (); -#endif -} - - - /* ========================================================================== @@ -490,97 +413,31 @@ @implementation EmacsMenu /* override designated initializer */ - (instancetype)initWithTitle: (NSString *)title { - frame = 0; if ((self = [super initWithTitle: title])) [self setAutoenablesItems: NO]; - return self; -} - - -/* used for top-level */ -- (instancetype)initWithTitle: (NSString *)title frame: (struct frame *)f -{ - [self initWithTitle: title]; - frame = f; -#ifdef NS_IMPL_COCOA [self setDelegate: self]; -#endif + + needsUpdate = YES; + return self; } -- (void)setFrame: (struct frame *)f -{ - frame = f; -} - -#ifdef NS_IMPL_COCOA --(void)trackingNotification:(NSNotification *)notification -{ - /* Update menu in menuNeedsUpdate only while tracking menus. */ - trackingMenu = ([notification name] == NSMenuDidBeginTrackingNotification - ? 1 : 0); - if (! trackingMenu) ns_check_menu_open (nil); -} - -- (void)menuWillOpen:(NSMenu *)menu -{ - ++trackingMenu; - -#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070 - // On 10.6 we get repeated calls, only the one for NSSystemDefined is "real". - if ( -#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 - NSAppKitVersionNumber < NSAppKitVersionNumber10_7 && -#endif - [[NSApp currentEvent] type] != NSEventTypeSystemDefined) - return; -#endif - - /* When dragging from one menu to another, we get willOpen followed by didClose, - i.e. trackingMenu == 3 in willOpen and then 2 after didClose. - We have updated all menus, so avoid doing it when trackingMenu == 3. */ - if (trackingMenu == 2) - ns_check_menu_open (menu); -} - -- (void)menuDidClose:(NSMenu *)menu -{ - --trackingMenu; -} - -#endif /* NS_IMPL_COCOA */ - /* Delegate method called when a submenu is being opened: run a 'deep' call to set_frame_menubar. */ + +/* TODO: GNUstep calls this method when the menu is still being built + which throws it into an infinite loop. One possible solution is to + use menuWillOpen instead, but the Apple docs explicitly warn + against changing the contents of the menu in it. I don't know what + the right thing to do for GNUstep is. */ - (void)menuNeedsUpdate: (NSMenu *)menu { - if (!FRAME_LIVE_P (frame)) + if (!FRAME_LIVE_P (SELECTED_FRAME ())) return; - /* Cocoa/Carbon will request update on every keystroke - via IsMenuKeyEvent -> CheckMenusForKeyEvent. These are not needed - since key equivalents are handled through emacs. - On Leopard, even keystroke events generate SystemDefined event. - Third-party applications that enhance mouse / trackpad - interaction, or also VNC/Remote Desktop will send events - of type AppDefined rather than SysDefined. - Menus will fail to show up if they haven't been initialized. - AppDefined events may lack timing data. - - Thus, we rely on the didBeginTrackingNotification notification - as above to indicate the need for updates. - From 10.6 on, we could also use -[NSMenu propertiesToUpdate]: In the - key press case, NSMenuPropertyItemImage (e.g.) won't be set. - */ - if (trackingMenu == 0) - return; -/*fprintf (stderr, "Updating menu '%s'\n", [[self title] UTF8String]); NSLog (@"%@\n", event); */ -#ifdef NS_IMPL_GNUSTEP - /* Don't know how to do this for anything other than Mac OS X 10.5 and later. - This is wrong, as it might run Lisp code in the event loop. */ - ns_update_menubar (frame, true, self); -#endif + if (needsUpdate) + ns_update_menubar (SELECTED_FRAME (), true); } @@ -674,8 +531,13 @@ - (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr /* convenience */ --(void)clear +-(void)removeAllItems { +#ifdef NS_IMPL_COCOA + [super removeAllItems]; +#else + /* GNUstep doesn't have removeAllItems yet, so do it + manually. */ int n; for (n = [self numberOfItems]-1; n >= 0; n--) @@ -687,20 +549,18 @@ -(void)clear continue; [self removeItemAtIndex: n]; } +#endif + + needsUpdate = YES; } - (void)fillWithWidgetValue: (void *)wvptr -{ - [self fillWithWidgetValue: wvptr frame: (struct frame *)nil]; -} - -- (void)fillWithWidgetValue: (void *)wvptr frame: (struct frame *)f { widget_value *wv = (widget_value *)wvptr; /* clear existing contents */ - [self clear]; + [self removeAllItems]; /* add new contents */ for (; wv != NULL; wv = wv->next) @@ -711,10 +571,7 @@ - (void)fillWithWidgetValue: (void *)wvptr frame: (struct frame *)f { EmacsMenu *submenu; - if (f) - submenu = [[EmacsMenu alloc] initWithTitle: [item title] frame:f]; - else - submenu = [[EmacsMenu alloc] initWithTitle: [item title]]; + submenu = [[EmacsMenu alloc] initWithTitle: [item title]]; [self setSubmenu: submenu forItem: item]; [submenu fillWithWidgetValue: wv->contents]; @@ -723,6 +580,8 @@ - (void)fillWithWidgetValue: (void *)wvptr frame: (struct frame *)f } } + needsUpdate = NO; + #ifdef NS_IMPL_GNUSTEP if ([[self window] isVisible]) [self sizeToFit]; @@ -731,13 +590,13 @@ - (void)fillWithWidgetValue: (void *)wvptr frame: (struct frame *)f /* Adds an empty submenu and returns it. */ -- (EmacsMenu *)addSubmenuWithTitle: (const char *)title forFrame: (struct frame *)f +- (EmacsMenu *)addSubmenuWithTitle: (const char *)title { NSString *titleStr = [NSString stringWithUTF8String: title]; NSMenuItem *item = [self addItemWithTitle: titleStr action: (SEL)nil /*@selector (menuDown:) */ keyEquivalent: @""]; - EmacsMenu *submenu = [[EmacsMenu alloc] initWithTitle: titleStr frame: f]; + EmacsMenu *submenu = [[EmacsMenu alloc] initWithTitle: titleStr]; [self setSubmenu: submenu forItem: item]; [submenu release]; return submenu; @@ -1881,12 +1740,6 @@ - (Lisp_Object)runDialogAt: (NSPoint)p void syms_of_nsmenu (void) { -#ifndef NS_IMPL_COCOA - /* Don't know how to keep track of this in Next/Open/GNUstep. Always - update menus there. */ - trackingMenu = 1; - PDUMPER_REMEMBER_SCALAR (trackingMenu); -#endif defsubr (&Sns_reset_menu); defsubr (&Smenu_or_popup_active_p); diff --git a/src/nsterm.h b/src/nsterm.h index 94472ec1070..b7b4d3b047c 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -513,25 +513,18 @@ typedef id instancetype; ========================================================================== */ -#ifdef NS_IMPL_COCOA @interface EmacsMenu : NSMenu -#else -@interface EmacsMenu : NSMenu -#endif { - struct frame *frame; unsigned long keyEquivModMask; + BOOL needsUpdate; } -- (instancetype)initWithTitle: (NSString *)title frame: (struct frame *)f; -- (void)setFrame: (struct frame *)f; - (void)menuNeedsUpdate: (NSMenu *)menu; /* (delegate method) */ - (NSString *)parseKeyEquiv: (const char *)key; - (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr; - (void)fillWithWidgetValue: (void *)wvptr; -- (void)fillWithWidgetValue: (void *)wvptr frame: (struct frame *)f; -- (EmacsMenu *)addSubmenuWithTitle: (const char *)title forFrame: (struct frame *)f; -- (void) clear; +- (EmacsMenu *)addSubmenuWithTitle: (const char *)title; +- (void) removeAllItems; - (Lisp_Object)runMenuAt: (NSPoint)p forFrame: (struct frame *)f keymaps: (bool)keymaps; @end @@ -1130,8 +1123,6 @@ extern int ns_lisp_to_color (Lisp_Object color, NSColor **col); extern NSColor *ns_lookup_indexed_color (unsigned long idx, struct frame *f); extern unsigned long ns_index_color (NSColor *color, struct frame *f); extern const char *ns_get_pending_menu_title (void); -extern void ns_check_menu_open (NSMenu *menu); -extern void ns_check_pending_open_menu (void); #endif /* Implemented in nsfns, published in nsterm. */ diff --git a/src/nsterm.m b/src/nsterm.m index 2a117a07801..161677484f9 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -310,24 +310,6 @@ - (NSColor *)colorUsingDefaultColorSpace NULL, 0, 0 }; -#ifdef NS_IMPL_COCOA -/* - * State for pending menu activation: - * MENU_NONE Normal state - * MENU_PENDING A menu has been clicked on, but has been canceled so we can - * run lisp to update the menu. - * MENU_OPENING Menu is up to date, and the click event is redone so the menu - * will open. - */ -#define MENU_NONE 0 -#define MENU_PENDING 1 -#define MENU_OPENING 2 -static int menu_will_open_state = MENU_NONE; - -/* Saved position for menu click. */ -static CGPoint menu_mouse_point; -#endif - /* Convert modifiers in a NeXTstep event to emacs style modifiers. */ #define NS_FUNCTION_KEY_MASK 0x800000 #define NSLeftControlKeyMask (0x000001 | NSEventModifierFlagControl) @@ -4607,79 +4589,6 @@ in certain situations (rapid incoming events). } #endif -/* GNUstep does not have cancelTracking. */ -#ifdef NS_IMPL_COCOA -/* Check if menu open should be canceled or continued as normal. */ -void -ns_check_menu_open (NSMenu *menu) -{ - /* Click in menu bar? */ - NSArray *a = [[NSApp mainMenu] itemArray]; - int i; - BOOL found = NO; - - if (menu == nil) // Menu tracking ended. - { - if (menu_will_open_state == MENU_OPENING) - menu_will_open_state = MENU_NONE; - return; - } - - for (i = 0; ! found && i < [a count]; i++) - found = menu == [[a objectAtIndex:i] submenu]; - if (found) - { - if (menu_will_open_state == MENU_NONE && emacs_event) - { - NSEvent *theEvent = [NSApp currentEvent]; - struct frame *emacsframe = SELECTED_FRAME (); - - /* On macOS, the following can cause an event loop when the - Spotlight for Help search field is populated. Avoid this by - not postponing mouse drag and non-user-generated mouse down - events (Bug#31371). */ - if (([theEvent type] == NSEventTypeLeftMouseDown) - && [theEvent eventNumber]) - { - [menu cancelTracking]; - menu_will_open_state = MENU_PENDING; - emacs_event->kind = MENU_BAR_ACTIVATE_EVENT; - EV_TRAILER (theEvent); - - CGEventRef ourEvent = CGEventCreate (NULL); - menu_mouse_point = CGEventGetLocation (ourEvent); - CFRelease (ourEvent); - } - } - else if (menu_will_open_state == MENU_OPENING) - { - menu_will_open_state = MENU_NONE; - } - } -} - -/* Redo saved menu click if state is MENU_PENDING. */ -void -ns_check_pending_open_menu () -{ - if (menu_will_open_state == MENU_PENDING) - { - CGEventSourceRef source - = CGEventSourceCreate (kCGEventSourceStateHIDSystemState); - - CGEventRef event = CGEventCreateMouseEvent (source, - kCGEventLeftMouseDown, - menu_mouse_point, - kCGMouseButtonLeft); - CGEventSetType (event, kCGEventLeftMouseDown); - CGEventPost (kCGHIDEventTap, event); - CFRelease (event); - CFRelease (source); - - menu_will_open_state = MENU_OPENING; - } -} -#endif /* NS_IMPL_COCOA */ static int ns_read_socket (struct terminal *terminal, struct input_event *hold_quit) @@ -5416,7 +5325,6 @@ static Lisp_Object ns_new_font (struct frame *f, Lisp_Object font_object, terminal->set_new_font_hook = ns_new_font; terminal->implicit_set_name_hook = ns_implicitly_set_name; terminal->menu_show_hook = ns_menu_show; - terminal->activate_menubar_hook = ns_activate_menubar; terminal->popup_dialog_hook = ns_popup_dialog; terminal->set_vertical_scroll_bar_hook = ns_set_vertical_scroll_bar; terminal->set_horizontal_scroll_bar_hook = ns_set_horizontal_scroll_bar; @@ -5661,15 +5569,6 @@ Needs to be here because ns_initialize_display_info () uses AppKit classes. [NSApp setServicesMenu: svcsMenu]; /* Needed at least on Cocoa, to get dock menu to show windows */ [NSApp setWindowsMenu: [[NSMenu alloc] init]]; - - [[NSNotificationCenter defaultCenter] - addObserver: mainMenu - selector: @selector (trackingNotification:) - name: NSMenuDidBeginTrackingNotification object: mainMenu]; - [[NSNotificationCenter defaultCenter] - addObserver: mainMenu - selector: @selector (trackingNotification:) - name: NSMenuDidEndTrackingNotification object: mainMenu]; } #endif /* macOS menu setup */ From 03808272eeaaf65a257f69ad91c3a3bebe186439 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 27 Dec 2020 17:16:54 -0500 Subject: [PATCH 003/116] * lisp/textmodes/rst.el (rst-mode): Don't touch global hook MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (rst-re): η-reduce. --- lisp/textmodes/rst.el | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lisp/textmodes/rst.el b/lisp/textmodes/rst.el index 435de2683ef..6090cea0cb2 100644 --- a/lisp/textmodes/rst.el +++ b/lisp/textmodes/rst.el @@ -568,9 +568,7 @@ After interpretation of ARGS the results are concatenated as for (regexp-quote (char-to-string re))) ((listp re) (let ((nested - (mapcar (lambda (elt) - (rst-re elt)) - (cdr re)))) + (mapcar #'rst-re (cdr re)))) (cond ((eq (car re) :seq) (mapconcat #'identity nested "")) @@ -1398,7 +1396,8 @@ highlighting. t nil nil nil (font-lock-multiline . t) (font-lock-mark-block-function . mark-paragraph))) - (add-hook 'font-lock-extend-region-functions #'rst-font-lock-extend-region t) + (add-hook 'font-lock-extend-region-functions + #'rst-font-lock-extend-region nil t) ;; Text after a changed line may need new fontification. (setq-local jit-lock-contextually t) From 8d5a6c9ef5272b2a98c2faa0a9308ab69f011570 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 27 Dec 2020 17:31:07 -0500 Subject: [PATCH 004/116] * lisp/emacs-lisp/package.el (package-archives): Add NonGNU ELPA --- etc/NEWS | 2 ++ lisp/emacs-lisp/package.el | 3 +++ 2 files changed, 5 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 4f072df31c5..328c666da34 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -85,6 +85,8 @@ useful on systems such as FreeBSD which ships only with "etc/termcap". * Changes in Emacs 28.1 +** The new NonGNU ELPA archive is enabled by default alongside GNU ELPA + ** Minibuffer scrolling is now conservative by default. This is controlled by the new variable 'scroll-minibuffer-conservatively'. diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index bc450b09d01..8f77f66af11 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -203,6 +203,9 @@ If VERSION is nil, the package is not made available (it is \"disabled\")." (defcustom package-archives `(("gnu" . ,(format "http%s://elpa.gnu.org/packages/" + (if (gnutls-available-p) "s" ""))) + ("nongnu" . + ,(format "http%s://elpa.nongnu.org/nongnu/" (if (gnutls-available-p) "s" "")))) "An alist of archives from which to fetch. The default value points to the GNU Emacs package repository. From 8914fb2227b51851ab734513938c38de7d01902e Mon Sep 17 00:00:00 2001 From: Tim Landscheidt Date: Mon, 28 Dec 2020 00:37:51 +0100 Subject: [PATCH 005/116] Do not output two spaces for non-autoloaded ieieo constructor functions * lisp/emacs-lisp/eieio-opt.el (eieio-help-constructor): Amend format to avoid two spaces for non-autoloaded object constructor functions (bug#45454). Copyright-paperwork-exempt: yes --- lisp/emacs-lisp/eieio-opt.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el index 59af7e12d21..3b222b93129 100644 --- a/lisp/emacs-lisp/eieio-opt.el +++ b/lisp/emacs-lisp/eieio-opt.el @@ -136,9 +136,9 @@ are not abstract." (def (symbol-function ctr))) (goto-char (point-min)) (prin1 ctr) - (insert (format " is an %s object constructor function" + (insert (format " is an %sobject constructor function" (if (autoloadp def) - "autoloaded" + "autoloaded " ""))) (when (and (autoloadp def) (null location)) From 8c383456291185b029b469061338b5b797a49747 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Mon, 28 Dec 2020 02:30:09 +0200 Subject: [PATCH 006/116] Rename and document the built-in xref-show-definitions-function's * lisp/progmodes/xref.el (xref-show-definitions-buffer): Rename from 'xref--show-defs-buffer'. (xref-show-definitions-buffer-at-bottom): Rename from 'xref--show-defs-buffer-at-bottom'. --- etc/NEWS | 8 ++++++++ lisp/progmodes/xref.el | 45 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 328c666da34..131931052a5 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1293,6 +1293,14 @@ searches. These commands are bound respectively to 'P' and 'N', and navigate to the first item of the previous or next group in the "*xref*" buffer. +*** New alternative value for 'xref-show-definitions-function': +'xref-show-definitions-completing-read'. + +*** The two existing alternatives for 'xref-show-definitions-function' +have been renamed to have "proper" public names and documented +('xref-show-definitions-buffer' and +'xref-show-definitions-buffer-at-bottom'). + ** json.el --- diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 181f94b0bc6..b8a5d481190 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -941,7 +941,10 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)." 'face 'error)))) (goto-char (point-min))))) -(defun xref--show-defs-buffer (fetcher alist) +(defun xref-show-definitions-buffer (fetcher alist) + "Show the definitions list in a regular window. + +When only one definition found, jump to it right away instead." (let ((xrefs (funcall fetcher))) (cond ((not (cdr xrefs)) @@ -952,8 +955,12 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)." (cons (cons 'fetched-xrefs xrefs) alist)))))) -(defun xref--show-defs-buffer-at-bottom (fetcher alist) - "Show definitions list in a window at the bottom. +(define-obsolete-function-alias + 'xref--show-defs-buffer #'xref-show-definitions-buffer "28.1") + +(defun xref-show-definitions-buffer-at-bottom (fetcher alist) + "Show the definitions list in a window at the bottom. + When there is more than one definition, split the selected window and show the list in a small window at the bottom. And use a local keymap that binds `RET' to `xref-quit-and-goto-xref'." @@ -970,7 +977,14 @@ local keymap that binds `RET' to `xref-quit-and-goto-xref'." '(display-buffer-in-direction . ((direction . below)))) (current-buffer)))))) -(defun xref--show-defs-minibuffer (fetcher alist) +(define-obsolete-function-alias + 'xref--show-defs-buffer-at-bottom #'xref-show-definitions-buffer-at-bottom) + +(defun xref-show-definitions-completing-read (fetcher alist) + "Let the user choose the target definition with completion. + +When there is more than one definition, let the user choose +between them by typing in the minibuffer with completion." (let* ((xrefs (funcall fetcher)) (xref-alist (xref--analyze xrefs)) xref-alist-with-line-info @@ -1010,6 +1024,10 @@ local keymap that binds `RET' to `xref-quit-and-goto-xref'." (xref-pop-to-location xref (assoc-default 'display-action alist)))) +;; TODO: Can delete this alias before Emacs 28's release. +(define-obsolete-function-alias + 'xref--show-defs-minibuffer #'xref-show-definitions-completing-read "28.1") + (defcustom xref-show-xrefs-function 'xref--show-xref-buffer "Function to display a list of search results. @@ -1030,11 +1048,22 @@ displayed. The possible values are nil, `window' meaning the other window, or `frame' meaning the other frame." :type 'function) -(defcustom xref-show-definitions-function 'xref--show-defs-buffer - "Function to display a list of definitions. +(defcustom xref-show-definitions-function 'xref-show-definitions-buffer + "Function to handle the definition search results. -Accepts the same arguments as `xref-show-xrefs-function'." - :type 'function) +Accepts the same arguments as `xref-show-xrefs-function'. + +Generally, it is expected to jump to the definition if there's +only one, and otherwise provide some way to choose among the +definitions." + :type '(choice + (const :tag "Show a regular list of locations" + xref-show-definitions-buffer) + (const :tag "Show a \"transient\" list at the bottom of the window" + xref-show-definitions-buffer-at-bottom) + (const :tag "Choose the definition with completion" + xref-show-definitions-completing-read) + (function :tag "Custom function"))) (defvar xref--read-identifier-history nil) From 4ffb2ec357a75867a123b3571d622be184945dc5 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Mon, 28 Dec 2020 02:03:56 +0100 Subject: [PATCH 007/116] Allow remember-notes to use the *scratch* buffer * lisp/textmodes/remember.el (remember-notes): Allow the remember-notes buffer to use the *scratch* buffer (as documented) (bug#20740). --- lisp/textmodes/remember.el | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lisp/textmodes/remember.el b/lisp/textmodes/remember.el index 7bc7dc1762e..599e8f69ba7 100644 --- a/lisp/textmodes/remember.el +++ b/lisp/textmodes/remember.el @@ -638,9 +638,14 @@ to turn the *scratch* buffer into your notes buffer." (interactive "p") (let ((buf (or (find-buffer-visiting remember-data-file) (with-current-buffer (find-file-noselect remember-data-file) - (and remember-notes-buffer-name - (not (get-buffer remember-notes-buffer-name)) - (rename-buffer remember-notes-buffer-name)) + (when remember-notes-buffer-name + (when (and (get-buffer remember-notes-buffer-name) + (equal remember-notes-buffer-name "*scratch*")) + (kill-buffer remember-notes-buffer-name)) + ;; Rename the buffer to the requested name (if + ;; it's not already in use). + (unless (get-buffer remember-notes-buffer-name) + (rename-buffer remember-notes-buffer-name))) (funcall (or remember-notes-initial-major-mode initial-major-mode)) (remember-notes-mode 1) From b825131041e2c9294ca662125ea6b70ba9242a8e Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Mon, 28 Dec 2020 02:18:16 +0100 Subject: [PATCH 008/116] Document the text property limitations in mode lines * doc/lispref/modes.texi (Properties in Mode, Mode Line Basics): Mention the special text property limitations. --- doc/lispref/modes.texi | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 98aa94e90d4..675aeec8a5f 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -1982,9 +1982,15 @@ variables without prompting the user.) @item (@var{string} @var{rest}@dots{}) @itemx (@var{list} @var{rest}@dots{}) -A list whose first element is a string or list means to process all the -elements recursively and concatenate the results. This is the most -common form of mode line construct. +A list whose first element is a string or list means to process all +the elements recursively and concatenate the results. This is the +most common form of mode line construct. (Note that text properties +are handled specially (for reasons of efficiency) when displaying +strings in the mode line: Only the text property on the first +character of the string are considered, and they are then used over +the entire string. If you need a string with different text +properties, you have to use the special @code{:propertize} mode line +construct.) @item (:eval @var{form}) A list whose first element is the symbol @code{:eval} says to evaluate @@ -2439,7 +2445,7 @@ line: @enumerate @item Put a string with a text property directly into the mode line data -structure. +structure, but see @ref{Mode Line Data} for caveats for that. @item Put a text property on a mode line %-construct such as @samp{%12b}; then From 66274210687a911e7a9e61e96db908ec9782039e Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Mon, 28 Dec 2020 02:47:25 +0100 Subject: [PATCH 009/116] Fix alignment of Java String[] and the like * lisp/align.el (align-rules-list): Allow aligning Java String[] etc (bug#19385). Test case: class X { String field1; String[] field2; int field3; int[] field4; X field5; X[] field6; } --- lisp/align.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/align.el b/lisp/align.el index a11d834b823..905328b6625 100644 --- a/lisp/align.el +++ b/lisp/align.el @@ -411,7 +411,7 @@ The possible settings for `align-region-separate' are: (modes . align-c++-modes)) (c-variable-declaration - (regexp . ,(concat "[*&0-9A-Za-z_]>?[&*]*\\(\\s-+[*&]*\\)" + (regexp . ,(concat "[*&0-9A-Za-z_]>?[][&*]*\\(\\s-+[*&]*\\)" "[A-Za-z_][][0-9A-Za-z:_]*\\s-*\\(\\()\\|" "=[^=\n].*\\|(.*)\\|\\(\\[.*\\]\\)*\\)" "\\s-*[;,]\\|)\\s-*$\\)")) From 40e9cec7d2b81d1dd1c7254acfdd5075f52040b5 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Mon, 28 Dec 2020 04:09:51 +0100 Subject: [PATCH 010/116] Fix background mode on Gnome 3.38 terminals * lisp/term/xterm.el (xterm--version-handler): Adjust to Gnome 3.38 (bug#43891). --- lisp/term/xterm.el | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el index 709410064b1..b3f240aa2e9 100644 --- a/lisp/term/xterm.el +++ b/lisp/term/xterm.el @@ -710,15 +710,18 @@ Return the pasted text as a string." (while (and (setq chr (xterm--read-event-for-query)) (not (equal chr ?c))) (setq str (concat str (string chr)))) ;; Since xterm-280, the terminal type (NUMBER1) is now 41 instead of 0. - (when (string-match "\\([0-9]+\\);\\([0-9]+\\);0" str) + (when (string-match "\\([0-9]+\\);\\([0-9]+\\);[01]" str) (let ((version (string-to-number (match-string 2 str)))) - (when (and (> version 2000) (equal (match-string 1 str) "1")) + (when (and (> version 2000) + (or (equal (match-string 1 str) "1") + (equal (match-string 1 str) "65"))) ;; Hack attack! bug#16988: gnome-terminal reports "1;NNNN;0" ;; with a large NNNN but is based on a rather old xterm code. ;; Gnome terminal 2.32.1 reports 1;2802;0 ;; Gnome terminal 3.6.1 reports 1;3406;0 ;; Gnome terminal 3.22.2 reports 1;4601;0 and *does* support ;; background color querying (Bug#29716). + ;; Gnome terminal 3.38.0 reports 65;6200;1. (when (> version 4000) (xterm--query "\e]11;?\e\\" '(("\e]11;" . xterm--report-background-handler)))) From 2a64de5e982fb8b868b76626ac2e92ddfafc9ca5 Mon Sep 17 00:00:00 2001 From: Yichao Yu Date: Mon, 28 Dec 2020 04:17:43 +0100 Subject: [PATCH 011/116] Make XIM to work with non-CJK locales * src/xfns.c (best_xim_style): Don't rely on supported_xim_styles (bug#10867). * src/xterm.c (x_draw_window_cursor): Adjust to modern input styles. (xim_instantiate_callback): Ditto. --- src/xfns.c | 29 ++--------------------------- src/xterm.c | 9 +++------ 2 files changed, 5 insertions(+), 33 deletions(-) diff --git a/src/xfns.c b/src/xfns.c index abe293e903e..333385da62a 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -2321,24 +2321,6 @@ hack_wm_protocols (struct frame *f, Widget widget) static XFontSet xic_create_xfontset (struct frame *); static XIMStyle best_xim_style (XIMStyles *); - -/* Supported XIM styles, ordered by preference. */ - -static const XIMStyle supported_xim_styles[] = -{ - XIMPreeditPosition | XIMStatusArea, - XIMPreeditPosition | XIMStatusNothing, - XIMPreeditPosition | XIMStatusNone, - XIMPreeditNothing | XIMStatusArea, - XIMPreeditNothing | XIMStatusNothing, - XIMPreeditNothing | XIMStatusNone, - XIMPreeditNone | XIMStatusArea, - XIMPreeditNone | XIMStatusNothing, - XIMPreeditNone | XIMStatusNone, - 0, -}; - - #if defined HAVE_X_WINDOWS && defined USE_X_TOOLKIT /* Create an X fontset on frame F with base font name BASE_FONTNAME. */ @@ -2622,15 +2604,8 @@ xic_free_xfontset (struct frame *f) static XIMStyle best_xim_style (XIMStyles *xim) { - int i, j; - int nr_supported = ARRAYELTS (supported_xim_styles); - - for (i = 0; i < nr_supported; ++i) - for (j = 0; j < xim->count_styles; ++j) - if (supported_xim_styles[i] == xim->supported_styles[j]) - return supported_xim_styles[i]; - - /* Return the default style. */ + /* Return the default style. This is what GTK3 uses and + should work fine with all modern input methods. */ return XIMPreeditNothing | XIMStatusNothing; } diff --git a/src/xterm.c b/src/xterm.c index 7f8728e47c4..b3632a375ad 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -9706,7 +9706,7 @@ x_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, int x, #ifdef HAVE_X_I18N if (w == XWINDOW (f->selected_window)) - if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMPreeditPosition)) + if (FRAME_XIC (f)) xic_set_preeditarea (w, x, y); #endif } @@ -10389,11 +10389,8 @@ xim_instantiate_callback (Display *display, XPointer client_data, XPointer call_ create_frame_xic (f); if (FRAME_XIC_STYLE (f) & XIMStatusArea) xic_set_statusarea (f); - if (FRAME_XIC_STYLE (f) & XIMPreeditPosition) - { - struct window *w = XWINDOW (f->selected_window); - xic_set_preeditarea (w, w->cursor.x, w->cursor.y); - } + struct window *w = XWINDOW (f->selected_window); + xic_set_preeditarea (w, w->cursor.x, w->cursor.y); } } From ed30956099fff5025698c8ffdd9e876f207ed2af Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Mon, 28 Dec 2020 04:24:01 +0100 Subject: [PATCH 012/116] Make octave-send-region be asynchronous * lisp/progmodes/octave.el (octave-send-region): Send things asynchronously to the inferior process (bug#24492). --- lisp/progmodes/octave.el | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/lisp/progmodes/octave.el b/lisp/progmodes/octave.el index bda4e60c55c..f295917c0ad 100644 --- a/lisp/progmodes/octave.el +++ b/lisp/progmodes/octave.el @@ -1512,28 +1512,12 @@ current buffer file unless called with a prefix arg \\[universal-argument]." (interactive "r") (inferior-octave t) (let ((proc inferior-octave-process) - (string (buffer-substring-no-properties beg end)) - line) + (string (buffer-substring-no-properties beg end))) (with-current-buffer inferior-octave-buffer ;; https://lists.gnu.org/r/emacs-devel/2013-10/msg00095.html (compilation-forget-errors) - (setq inferior-octave-output-list nil) - (while (not (string-equal string "")) - (if (string-match "\n" string) - (setq line (substring string 0 (match-beginning 0)) - string (substring string (match-end 0))) - (setq line string string "")) - (setq inferior-octave-receive-in-progress t) - (inferior-octave-send-list-and-digest (list (concat line "\n"))) - (while inferior-octave-receive-in-progress - (accept-process-output proc)) - (insert-before-markers - (mapconcat 'identity - (append - (if octave-send-echo-input (list line) (list "")) - inferior-octave-output-list - (list inferior-octave-output-string)) - "\n"))))) + (insert-before-markers string "\n") + (comint-send-string proc (concat string "\n")))) (if octave-send-show-buffer (display-buffer inferior-octave-buffer))) From 0ebea8ffbfb7b9b1bd92f30011df0875b54eb663 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Sun, 6 Dec 2020 12:44:19 +0100 Subject: [PATCH 013/116] Make byte-compiler warn about wide docstrings * lisp/emacs-lisp/bytecomp.el (byte-compile--wide-docstring-p): (byte-compile-docstring-length-warn): New defuns. (byte-compile-docstring-max-column): New defcustom. (byte-compile--wide-docstring-substitution-len): New variable. (byte-compile-warning-types, byte-compile-warnings): New value 'docstrings'. (byte-compile-file-form-autoload, byte-compile-file-form-defvar): (byte-compile-file-form-defvar-function, byte-compile-lambda): (byte-compile-defvar, byte-compile-file-form-defalias): Warn about too wide docstrings. (Bug#44858) * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-warn-wide-docstring/defconst) (bytecomp-warn-wide-docstring/defvar): New tests. (bytecomp--define-warning-file-test): New macro. (bytecomp/warn-wide-docstring-autoload\.el) (bytecomp/warn-wide-docstring-custom-declare-variable\.el) (bytecomp/warn-wide-docstring-defalias\.el) (bytecomp/warn-wide-docstring-defconst\.el) (bytecomp/warn-wide-docstring-define-abbrev-table\.el) (bytecomp/warn-wide-docstring-define-obsolete-function-alias\.el) (bytecomp/warn-wide-docstring-define-obsolete-variable-alias\.el) (bytecomp/warn-wide-docstring-defun\.el) (bytecomp/warn-wide-docstring-defvar\.el) (bytecomp/warn-wide-docstring-defvaralias\.el) (bytecomp/warn-wide-docstring-ignore-fill-column\.el) (bytecomp/warn-wide-docstring-ignore-override\.el) (bytecomp/warn-wide-docstring-ignore\.el) (bytecomp/warn-wide-docstring-multiline-first\.el) (bytecomp/warn-wide-docstring-multiline\.el): New tests. * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-autoload.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-custom-declare-variable.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defalias.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defconst.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-abbrev-table.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-function-alias.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-variable-alias.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defun.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvar.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvaralias.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-fill-column.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-override.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline-first.el: * test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline.el: New files. --- etc/NEWS | 11 ++- etc/TODO | 2 - lisp/emacs-lisp/bytecomp.el | 88 ++++++++++++++++++- .../warn-wide-docstring-autoload.el | 3 + ...-wide-docstring-custom-declare-variable.el | 4 + .../warn-wide-docstring-defalias.el | 3 + .../warn-wide-docstring-defconst.el | 3 + ...warn-wide-docstring-define-abbrev-table.el | 3 + ...ocstring-define-obsolete-function-alias.el | 3 + ...ocstring-define-obsolete-variable-alias.el | 3 + .../warn-wide-docstring-defun.el | 3 + .../warn-wide-docstring-defvar.el | 6 ++ .../warn-wide-docstring-defvaralias.el | 3 + .../warn-wide-docstring-ignore-fill-column.el | 7 ++ .../warn-wide-docstring-ignore-override.el | 8 ++ .../warn-wide-docstring-ignore.el | 7 ++ .../warn-wide-docstring-multiline-first.el | 5 ++ .../warn-wide-docstring-multiline.el | 6 ++ test/lisp/emacs-lisp/bytecomp-tests.el | 71 +++++++++++++++ 19 files changed, 233 insertions(+), 6 deletions(-) create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-autoload.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-custom-declare-variable.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defalias.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defconst.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-abbrev-table.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-function-alias.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-variable-alias.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defun.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvar.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvaralias.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-fill-column.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-override.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline-first.el create mode 100644 test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline.el diff --git a/etc/NEWS b/etc/NEWS index 131931052a5..f8282696e46 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2200,17 +2200,24 @@ menu handling. +++ ** 'inhibit-nul-byte-detection' is renamed to 'inhibit-null-byte-detection'. +** Byte compiler + +++ -** New byte-compiler check for missing dynamic variable declarations. +*** New byte-compiler check for missing dynamic variable declarations. It is meant as an (experimental) aid for converting Emacs Lisp code to lexical binding, where dynamic (special) variables bound in one file can affect code in another. For details, see the manual section "(Elisp) Converting to Lexical Binding". +++ -** 'byte-recompile-directory' can now compile symlinked ".el" files. +*** 'byte-recompile-directory' can now compile symlinked ".el" files. This is achieved by giving a non-nil FOLLOW-SYMLINKS parameter. +*** The byte-compiler now warns about too wide documentation strings. +By default, it will warn if a documentation string is wider than the +largest of 80 characters or 'fill-column'. This is controlled by the +new user option 'byte-compile-docstring-max-column'. + --- ** 'unload-feature' now also tries to undo additions to buffer-local hooks. diff --git a/etc/TODO b/etc/TODO index 2a9fd8869e0..d7bcfd4d97c 100644 --- a/etc/TODO +++ b/etc/TODO @@ -638,8 +638,6 @@ Do this for some or all errors associated with using subprocesses. ** Maybe reinterpret 'parse-error' as a category of errors Put some other errors under it. -** Make byte-compiler warn when a doc string is too wide - ** Make byte-optimization warnings issue accurate line numbers ** Record the sxhash of the default value for customized variables diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 7e1a3304cc8..f14ad93d2e0 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -299,7 +299,8 @@ The information is logged to `byte-compile-log-buffer'." (defconst byte-compile-warning-types '(redefine callargs free-vars unresolved obsolete noruntime interactive-only - make-local mapcar constants suspicious lexical lexical-dynamic) + make-local mapcar constants suspicious lexical lexical-dynamic + docstrings) "The list of warning types used when `byte-compile-warnings' is t.") (defcustom byte-compile-warnings t "List of warnings that the byte-compiler should issue (t for all). @@ -322,6 +323,8 @@ Elements of the list may be: make-local calls to make-variable-buffer-local that may be incorrect. mapcar mapcar called for effect. constants let-binding of, or assignment to, constants/nonvariables. + docstrings docstrings that are too wide (longer than 80 characters, + or `fill-column', whichever is bigger) suspicious constructs that usually don't do what the coder wanted. If the list begins with `not', then the remaining elements specify warnings to @@ -1563,6 +1566,81 @@ extra args." (if (equal sig1 '(1 . 1)) "argument" "arguments") (byte-compile-arglist-signature-string sig2))))))) +(defvar byte-compile--wide-docstring-substitution-len 3 + "Substitution width used in `byte-compile--wide-docstring-p'. +This is a heuristic for guessing the width of a documentation +string: `byte-compile--wide-docstring-p' assumes that any +`substitute-command-keys' command substitutions are this long.") + +(defun byte-compile--wide-docstring-p (docstring col) + "Return t if string DOCSTRING is wider than COL. +Ignore all `substitute-command-keys' substitutions, except for +the `\\\\=[command]' ones that are assumed to be of length +`byte-compile--wide-docstring-substitution-len'. Also ignore +URLs." + (string-match + (format "^.\\{%s,\\}$" (int-to-string (1+ col))) + (replace-regexp-in-string + (rx (or + ;; Ignore some URLs. + (seq "http" (? "s") "://" (* anychar)) + ;; Ignore these `substitute-command-keys' substitutions. + (seq "\\" (or "=" + (seq "<" (* (not ">")) ">") + (seq "{" (* (not "}")) "}"))))) + "" + ;; Heuristic: assume these substitutions are of some length N. + (replace-regexp-in-string + (rx "\\" (or (seq "[" (* (not "]")) "]"))) + (make-string byte-compile--wide-docstring-substitution-len ?x) + docstring)))) + +(defcustom byte-compile-docstring-max-column 80 + "Recommended maximum width of doc string lines. +The byte-compiler will emit a warning for documentation strings +containing lines wider than this. If `fill-column' has a larger +value, it will override this variable." + :group 'bytecomp + :type 'integer + :safe #'integerp + :version "28.1") + +(defun byte-compile-docstring-length-warn (form) + "Warn if documentation string of FORM is too wide. +It is too wide if it has any lines longer than the largest of +`fill-column' and `byte-compile-docstring-max-column'." + ;; This has some limitations that it would be nice to fix: + ;; 1. We don't try to handle defuns. It is somewhat tricky to get + ;; it right since `defun' is a macro. Also, some macros + ;; themselves produce defuns (e.g. `define-derived-mode'). + ;; 2. We assume that any `subsititute-command-keys' command replacement has a + ;; given length. We can't reliably do these replacements, since the value + ;; of the keymaps in general can't be known at compile time. + (when (byte-compile-warning-enabled-p 'docstrings) + (let ((col (max byte-compile-docstring-max-column fill-column)) + kind name docs) + (pcase (car form) + ((or 'autoload 'custom-declare-variable 'defalias + 'defconst 'define-abbrev-table + 'defvar 'defvaralias) + (setq kind (nth 0 form)) + (setq name (nth 1 form)) + (setq docs (nth 3 form))) + ;; Here is how one could add lambda's here: + ;; ('lambda + ;; (setq kind "") ; can't be "function", unfortunately + ;; (setq docs (and (stringp (nth 2 form)) + ;; (nth 2 form)))) + ) + (when (and (consp name) (eq (car name) 'quote)) + (setq name (cadr name))) + (setq name (if name (format " `%s'" name) "")) + (when (and kind docs (stringp docs) + (byte-compile--wide-docstring-p docs col)) + (byte-compile-warn "%s%s docstring wider than %s characters" + kind name col)))) + form) + (defun byte-compile-print-syms (str1 strn syms) (when syms (byte-compile-set-symbol-position (car syms) t)) @@ -2410,7 +2488,8 @@ list that represents a doc string reference. (delq (assq funsym byte-compile-unresolved-functions) byte-compile-unresolved-functions))))) (if (stringp (nth 3 form)) - form + (prog1 form + (byte-compile-docstring-length-warn form)) ;; No doc string, so we can compile this as a normal form. (byte-compile-keep-pending form 'byte-compile-normal-call))) @@ -2438,6 +2517,7 @@ list that represents a doc string reference. (if (and (null (cddr form)) ;No `value' provided. (eq (car form) 'defvar)) ;Just a declaration. nil + (byte-compile-docstring-length-warn form) (cond ((consp (nth 2 form)) (setq form (copy-sequence form)) (setcar (cdr (cdr form)) @@ -2461,6 +2541,7 @@ list that represents a doc string reference. (if (byte-compile-warning-enabled-p 'suspicious) (byte-compile-warn "Alias for `%S' should be declared before its referent" newname))))) + (byte-compile-docstring-length-warn form) (byte-compile-keep-pending form)) (put 'custom-declare-variable 'byte-hunk-handler @@ -2844,6 +2925,7 @@ for symbols generated by the byte compiler itself." (unless (eq 'lambda (car-safe fun)) (error "Not a lambda list: %S" fun)) (byte-compile-set-symbol-position 'lambda)) + (byte-compile-docstring-length-warn fun) (byte-compile-check-lambda-list (nth 1 fun)) (let* ((arglist (nth 1 fun)) (arglistvars (byte-compile-arglist-vars arglist)) @@ -4624,6 +4706,7 @@ binding slots have been popped." (byte-compile-warning-enabled-p 'lexical (nth 1 form))) (byte-compile-warn "global/dynamic var `%s' lacks a prefix" (nth 1 form))) + (byte-compile-docstring-length-warn form) (let ((fun (nth 0 form)) (var (nth 1 form)) (value (nth 2 form)) @@ -4698,6 +4781,7 @@ binding slots have been popped." ;; - `arg' is the expression to which it is defined. ;; - `rest' is the rest of the arguments. (`(,_ ',name ,arg . ,rest) + (byte-compile-docstring-length-warn form) (pcase-let* ;; `macro' is non-nil if it defines a macro. ;; `fun' is the function part of `arg' (defaults to `arg'). diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-autoload.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-autoload.el new file mode 100644 index 00000000000..96deb1bbb0a --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-autoload.el @@ -0,0 +1,3 @@ +;;; -*- lexical-binding: t -*- +(autoload 'foox "foo" + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-custom-declare-variable.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-custom-declare-variable.el new file mode 100644 index 00000000000..2a4700bfda5 --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-custom-declare-variable.el @@ -0,0 +1,4 @@ +;;; -*- lexical-binding: t -*- +(custom-declare-variable + 'foo t + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defalias.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defalias.el new file mode 100644 index 00000000000..a4235d22bd3 --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defalias.el @@ -0,0 +1,3 @@ +;;; -*- lexical-binding: t -*- +(defalias 'foo #'ignore + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defconst.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defconst.el new file mode 100644 index 00000000000..946f01989a0 --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defconst.el @@ -0,0 +1,3 @@ +;;; -*- lexical-binding: t -*- +(defconst foo-bar nil + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-abbrev-table.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-abbrev-table.el new file mode 100644 index 00000000000..3da9ccd48c6 --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-abbrev-table.el @@ -0,0 +1,3 @@ +;;; -*- lexical-binding: t -*- +(define-abbrev-table 'foo () + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-function-alias.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-function-alias.el new file mode 100644 index 00000000000..fea841b12ec --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-function-alias.el @@ -0,0 +1,3 @@ +;;; -*- lexical-binding: t -*- +(define-obsolete-function-alias 'foo #'ignore "99.1" + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-variable-alias.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-variable-alias.el new file mode 100644 index 00000000000..2d5f201cb65 --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-define-obsolete-variable-alias.el @@ -0,0 +1,3 @@ +;;; -*- lexical-binding: t -*- +(define-obsolete-variable-alias 'foo 'ignore "99.1" + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defun.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defun.el new file mode 100644 index 00000000000..94b0e80c979 --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defun.el @@ -0,0 +1,3 @@ +;;; -*- lexical-binding: t -*- +(defun foo () + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvar.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvar.el new file mode 100644 index 00000000000..99aacd09cbd --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvar.el @@ -0,0 +1,6 @@ +;;; -*- lexical-binding: t -*- +(defvar foo-bar nil + "multiline +foo +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +bar") diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvaralias.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvaralias.el new file mode 100644 index 00000000000..52fdc17f5bf --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-defvaralias.el @@ -0,0 +1,3 @@ +;;; -*- lexical-binding: t -*- +(defvaralias 'foo-bar #'ignore + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-fill-column.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-fill-column.el new file mode 100644 index 00000000000..1ff554f3704 --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-fill-column.el @@ -0,0 +1,7 @@ +;;; -*- lexical-binding: t -*- +(defvar foo-bar nil + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") + +;; Local Variables: +;; fill-column: 100 +;; End: diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-override.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-override.el new file mode 100644 index 00000000000..0bcf7b1d63b --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore-override.el @@ -0,0 +1,8 @@ +;;; -*- lexical-binding: t -*- +(defvar foo-bar nil + "123456789012345") + +;; Local Variables: +;; byte-compile-docstring-max-column: 10 +;; fill-column: 20 +;; End: diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore.el new file mode 100644 index 00000000000..c80ddd180d9 --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-ignore.el @@ -0,0 +1,7 @@ +;;; -*- lexical-binding: t -*- +(defvar foo-bar nil + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") + +;; Local Variables: +;; byte-compile-docstring-max-column: 100 +;; End: diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline-first.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline-first.el new file mode 100644 index 00000000000..2563dbbb3b9 --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline-first.el @@ -0,0 +1,5 @@ +;;; -*- lexical-binding: t -*- +(defvar foo-bar nil + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +This is a multiline docstring where the first line is long. +foobar") diff --git a/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline.el b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline.el new file mode 100644 index 00000000000..9ae7bc9b9f0 --- /dev/null +++ b/test/lisp/emacs-lisp/bytecomp-resources/warn-wide-docstring-multiline.el @@ -0,0 +1,6 @@ +;;; -*- lexical-binding: t -*- +(defvar foo-bar nil + "This is a multiline docstring. +But it's not the first line that is long. +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +foobar") diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el b/test/lisp/emacs-lisp/bytecomp-tests.el index 4a6e28f7c7c..47aab563f6f 100644 --- a/test/lisp/emacs-lisp/bytecomp-tests.el +++ b/test/lisp/emacs-lisp/bytecomp-tests.el @@ -540,6 +540,16 @@ Subtests signal errors if something goes wrong." (bytecomp--with-warning-test "foo.*lacks a prefix" '(defvar foo nil))) +(defvar bytecomp-tests--docstring (make-string 100 ?x)) + +(ert-deftest bytecomp-warn-wide-docstring/defconst () + (bytecomp--with-warning-test "defconst.*foo.*wider than.*characters" + `(defconst foo t ,bytecomp-tests--docstring))) + +(ert-deftest bytecomp-warn-wide-docstring/defvar () + (bytecomp--with-warning-test "defvar.*foo.*wider than.*characters" + `(defvar foo t ,bytecomp-tests--docstring))) + (defmacro bytecomp--define-warning-file-test (file re-warning &optional reverse) `(ert-deftest ,(intern (format "bytecomp/%s" file)) () :expected-result ,(if reverse :failed :passed) @@ -639,6 +649,67 @@ Subtests signal errors if something goes wrong." (bytecomp--define-warning-file-test "warn-variable-set-nonvariable.el" "variable reference to nonvariable") +(bytecomp--define-warning-file-test + "warn-wide-docstring-autoload.el" + "autoload.*foox.*wider than.*characters") + +(bytecomp--define-warning-file-test + "warn-wide-docstring-custom-declare-variable.el" + "custom-declare-variable.*foo.*wider than.*characters") + +(bytecomp--define-warning-file-test + "warn-wide-docstring-defalias.el" + "defalias.*foo.*wider than.*characters") + +(bytecomp--define-warning-file-test + "warn-wide-docstring-defconst.el" + "defconst.*foo.*wider than.*characters") + +(bytecomp--define-warning-file-test + "warn-wide-docstring-define-abbrev-table.el" + "define-abbrev.*foo.*wider than.*characters") + +(bytecomp--define-warning-file-test + "warn-wide-docstring-define-obsolete-function-alias.el" + "defalias.*foo.*wider than.*characters") + +(bytecomp--define-warning-file-test + "warn-wide-docstring-define-obsolete-variable-alias.el" + "defvaralias.*foo.*wider than.*characters") + +;; TODO: We don't yet issue warnings for defuns. +(bytecomp--define-warning-file-test + "warn-wide-docstring-defun.el" + "wider than.*characters" 'reverse) + +(bytecomp--define-warning-file-test + "warn-wide-docstring-defvar.el" + "defvar.*foo.*wider than.*characters") + +(bytecomp--define-warning-file-test + "warn-wide-docstring-defvaralias.el" + "defvaralias.*foo.*wider than.*characters") + +(bytecomp--define-warning-file-test + "warn-wide-docstring-ignore-fill-column.el" + "defvar.*foo.*wider than.*characters" 'reverse) + +(bytecomp--define-warning-file-test + "warn-wide-docstring-ignore-override.el" + "defvar.*foo.*wider than.*characters" 'reverse) + +(bytecomp--define-warning-file-test + "warn-wide-docstring-ignore.el" + "defvar.*foo.*wider than.*characters" 'reverse) + +(bytecomp--define-warning-file-test + "warn-wide-docstring-multiline-first.el" + "defvar.*foo.*wider than.*characters") + +(bytecomp--define-warning-file-test + "warn-wide-docstring-multiline.el" + "defvar.*foo.*wider than.*characters") + ;;;; Macro expansion. From 6b8bb47ac085700740feaad24a591a8bbec3a71c Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Thu, 10 Dec 2020 22:36:18 +0100 Subject: [PATCH 014/116] Fill some auto-generated docstrings * lisp/emacs-lisp/easy-mmode.el (define-minor-mode) (define-globalized-minor-mode): Fill auto-generated documentation strings. (Bug#44858) * lisp/subr.el (internal--fill-string-single-line) (internal--format-docstring-line): New functions. --- lisp/emacs-lisp/derived.el | 42 +++++++++++++++++++---------------- lisp/emacs-lisp/easy-mmode.el | 39 ++++++++++++++++---------------- lisp/subr.el | 18 +++++++++++++++ 3 files changed, 61 insertions(+), 38 deletions(-) diff --git a/lisp/emacs-lisp/derived.el b/lisp/emacs-lisp/derived.el index 6a11f1c3949..dee507269b2 100644 --- a/lisp/emacs-lisp/derived.el +++ b/lisp/emacs-lisp/derived.el @@ -306,11 +306,13 @@ No problems result if this variable is not bound. ;; Use a default docstring. (setq docstring (if (null parent) - ;; FIXME filling. - (format "Major-mode.\nUses keymap `%s'%s%s." map - (if abbrev (format "%s abbrev table `%s'" - (if syntax "," " and") abbrev) "") - (if syntax (format " and syntax-table `%s'" syntax) "")) + (concat + "Major-mode.\n" + (internal--format-docstring-line + "Uses keymap `%s'%s%s." map + (if abbrev (format "%s abbrev table `%s'" + (if syntax "," " and") abbrev) "") + (if syntax (format " and syntax-table `%s'" syntax) ""))) (format "Major mode derived from `%s' by `define-derived-mode'. It inherits all of the parent's attributes, but has its own keymap%s: @@ -336,20 +338,22 @@ which more-or-less shadow%s %s's corresponding table%s." (unless (string-match (regexp-quote (symbol-name hook)) docstring) ;; Make sure the docstring mentions the mode's hook. (setq docstring - (concat docstring - (if (null parent) - "\n\nThis mode " - (concat - "\n\nIn addition to any hooks its parent mode " - (if (string-match (format "[`‘]%s['’]" - (regexp-quote - (symbol-name parent))) - docstring) - nil - (format "`%s' " parent)) - "might have run,\nthis mode ")) - (format "runs the hook `%s'" hook) - ", as the final or penultimate step\nduring initialization."))) + (concat docstring "\n\n" + (internal--format-docstring-line + "%s%s%s" + (if (null parent) + "This mode " + (concat + "In addition to any hooks its parent mode " + (if (string-match (format "[`‘]%s['’]" + (regexp-quote + (symbol-name parent))) + docstring) + nil + (format "`%s' " parent)) + "might have run, this mode ")) + (format "runs the hook `%s'" hook) + ", as the final or penultimate step during initialization.")))) (unless (string-match "\\\\[{[]" docstring) ;; And don't forget to put the mode's keymap. diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index 261f2508af7..1344c3391bf 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -278,8 +278,10 @@ For example, you could write ((not globalp) `(progn :autoload-end - (defvar ,mode ,init-value ,(format "Non-nil if %s is enabled. -Use the command `%s' to change this variable." pretty-name mode)) + (defvar ,mode ,init-value + ,(concat (format "Non-nil if %s is enabled.\n" pretty-name) + (internal--format-docstring-line + "Use the command `%s' to change this variable." mode))) (make-variable-buffer-local ',mode))) (t (let ((base-doc-string @@ -455,24 +457,23 @@ on if the hook has explicitly disabled it. (make-variable-buffer-local ',MODE-major-mode)) ;; The actual global minor-mode (define-minor-mode ,global-mode - ;; Very short lines to avoid too long lines in the generated - ;; doc string. - ,(format "Toggle %s in all buffers. -With prefix ARG, enable %s if ARG is positive; -otherwise, disable it. If called from Lisp, enable the mode if -ARG is omitted or nil. - -%s is enabled in all buffers where -`%s' would do it. - -See `%s' for more information on -%s.%s" - pretty-name pretty-global-name - pretty-name turn-on mode pretty-name + ,(concat (format "Toggle %s in all buffers.\n" pretty-name) + (internal--format-docstring-line + "With prefix ARG, enable %s if ARG is positive; otherwise, \ +disable it. If called from Lisp, enable the mode if ARG is omitted or nil.\n\n" + pretty-global-name) + (internal--format-docstring-line + "%s is enabled in all buffers where `%s' would do it.\n\n" + pretty-name turn-on) + (internal--format-docstring-line + "See `%s' for more information on %s." + mode pretty-name) (if predicate - (format "\n\n`%s' is used to control which modes -this minor mode is used in." - MODE-predicate) + (concat + "\n\n" + (internal--format-docstring-line + "`%s' is used to control which modes this minor mode is used in." + MODE-predicate)) "")) :global t ,@group ,@(nreverse extra-keywords) diff --git a/lisp/subr.el b/lisp/subr.el index 725722cbee1..384dbb25cf8 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -5973,4 +5973,22 @@ seconds." ;; Continue running. nil))) +(defun internal--fill-string-single-line (str) + "Fill string STR to `fill-column'. +This is intended for very simple filling while bootstrapping +Emacs itself, and does not support all the customization options +of fill.el (for example `fill-region')." + (if (< (string-width str) fill-column) + str + (let ((fst (substring str 0 fill-column)) + (lst (substring str fill-column))) + (if (string-match ".*\\( \\(.+\\)\\)$" fst) + (setq fst (replace-match "\n\\2" nil nil fst 1))) + (concat fst (internal--fill-string-single-line lst))))) + +(defun internal--format-docstring-line (string &rest objects) + "Format a documentation string out of STRING and OBJECTS. +This is intended for internal use only." + (internal--fill-string-single-line (apply #'format string objects))) + ;;; subr.el ends here From f4fe4e500d709bef84fd500f41a3dbef62538fe5 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Mon, 28 Dec 2020 06:42:06 +0100 Subject: [PATCH 015/116] Fix too-long feedmail-sendmail-f-doesnt-sell-me-out doc string * lisp/mail/feedmail.el (feedmail-sendmail-f-doesnt-sell-me-out): Fold the example SMTP header using continuation folding. --- lisp/mail/feedmail.el | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lisp/mail/feedmail.el b/lisp/mail/feedmail.el index 2907093ea71..ce5a57e2283 100644 --- a/lisp/mail/feedmail.el +++ b/lisp/mail/feedmail.el @@ -628,16 +628,19 @@ address via a command line option, \"-f\". Unfortunately, it also has a widely disliked default behavior of selling you out if you do that by inserting an unattractive warning in the headers. It looks something like this: - X-Authentication-Warning: u1.example.com: niceguy set sender to niceguy@example.com using -f + X-Authentication-Warning: u1.example.com: niceguy set + sender to niceguy@example.com using -f -It is possible to configure sendmail to not do this, but such a reconfiguration -is not an option for many users. As this is the default behavior of most -sendmail installations, one can mostly only wish it were otherwise. If feedmail -believes the sendmail program will sell you out this way, it won't use the \"-f\" -option when calling sendmail. If it doesn't think sendmail will sell you out, -it will use the \"-f\" \(since it is a handy feature). You control what -feedmail thinks with this variable. The default is nil, meaning that feedmail -will believe that sendmail will sell you out." +It is possible to configure sendmail to not do this, but such a +reconfiguration is not an option for many users. As this is the +default behavior of most sendmail installations, one can mostly +only wish it were otherwise. If feedmail believes the sendmail +program will sell you out this way, it won't use the \"-f\" +option when calling sendmail. If it doesn't think sendmail will +sell you out, it will use the \"-f\" \(since it is a handy +feature). You control what feedmail thinks with this variable. +The default is nil, meaning that feedmail will believe that +sendmail will sell you out." :version "24.1" :group 'feedmail-headers :type 'boolean From 62761d423e5b5e5b004ef1ca907ee66935a6f93f Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Mon, 28 Dec 2020 07:31:44 +0100 Subject: [PATCH 016/116] Remove redundant 'function's around lambda in vhdl-mode.el * lisp/progmodes/vhdl-mode.el (fboundp, vhdl-sort-alist, lambda) (vhdl-create-mode-menu, vhdl-set-offset, vhdl-set-style) (vhdl-regress-line, vhdl-align-inline-comment-region-1) (vhdl-resolve-paths, vhdl-generate-makefile-1) (vhdl-submit-bug-report): Remove redundant 'function's around lambda. --- lisp/progmodes/vhdl-mode.el | 95 +++++++++++++++++-------------------- 1 file changed, 44 insertions(+), 51 deletions(-) diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el index 489092f58e6..375ac9eb5ff 100644 --- a/lisp/progmodes/vhdl-mode.el +++ b/lisp/progmodes/vhdl-mode.el @@ -2286,7 +2286,7 @@ Ignore byte-compiler warnings you might see." (setq contents (nconc (if (and (car dirs) (not full)) - (mapcar (function (lambda (name) (concat (car dirs) name))) + (mapcar (lambda (name) (concat (car dirs) name)) this-dir-contents) this-dir-contents) contents)))) @@ -2563,7 +2563,7 @@ conversion." (defun vhdl-sort-alist (alist) "Sort ALIST." - (sort alist (function (lambda (a b) (string< (car a) (car b)))))) + (sort alist (lambda (a b) (string< (car a) (car b))))) (defun vhdl-get-subdirs (directory) "Recursively get subdirectories of DIRECTORY." @@ -2941,10 +2941,9 @@ STRING are replaced by `-' and substrings are converted to lower case." ;; set up electric character functions to work with ;; `delete-selection-mode' (Emacs) and `pending-delete-mode' (XEmacs) (mapc - (function - (lambda (sym) - (put sym 'delete-selection t) ; for `delete-selection-mode' (Emacs) - (put sym 'pending-delete t))) ; for `pending-delete-mode' (XEmacs) + (lambda (sym) + (put sym 'delete-selection t) ; for `delete-selection-mode' (Emacs) + (put sym 'pending-delete t)) ; for `pending-delete-mode' (XEmacs) '(vhdl-electric-space vhdl-electric-tab vhdl-electric-return @@ -3317,7 +3316,7 @@ STRING are replaced by `-' and substrings are converted to lower case." (setq menu-list (if vhdl-project-sort (sort menu-list - (function (lambda (a b) (string< (elt a 0) (elt b 0))))) + (lambda (a b) (string< (elt a 0) (elt b 0)))) (nreverse menu-list))) (vhdl-menu-split menu-list "Project")) '("--" "--" @@ -5566,9 +5565,8 @@ offset for that syntactic element. Optional ADD-P says to add SYMBOL to (if current-prefix-arg " or add" "") ": ") (mapcar - (function - (lambda (langelem) - (cons (format "%s" (car langelem)) nil))) + (lambda (langelem) + (cons (format "%s" (car langelem)) nil)) vhdl-offsets-alist) nil (not current-prefix-arg) ;; initial contents tries to be the last element @@ -5615,26 +5613,24 @@ argument. The styles are chosen from the `vhdl-style-alist' variable." (error "ERROR: Invalid VHDL indentation style `%s'" style)) ;; set all the variables (mapc - (function - (lambda (varentry) - (let ((var (car varentry)) - (val (cdr varentry))) - ;; special case for vhdl-offsets-alist - (if (not (eq var 'vhdl-offsets-alist)) - (set (if local (make-local-variable var) var) val) - ;; reset vhdl-offsets-alist to the default value first - (set (if local (make-local-variable var) var) - (copy-alist vhdl-offsets-alist-default)) - ;; now set the langelems that are different - (mapcar - (function - (lambda (langentry) - (let ((langelem (car langentry)) - (offset (cdr langentry))) - (vhdl-set-offset langelem offset) - ))) - val)) - ))) + (lambda (varentry) + (let ((var (car varentry)) + (val (cdr varentry))) + ;; special case for vhdl-offsets-alist + (if (not (eq var 'vhdl-offsets-alist)) + (set (if local (make-local-variable var) var) val) + ;; reset vhdl-offsets-alist to the default value first + (set (if local (make-local-variable var) var) + (copy-alist vhdl-offsets-alist-default)) + ;; now set the langelems that are different + (mapcar + (lambda (langentry) + (let ((langelem (car langentry)) + (offset (cdr langentry))) + (vhdl-set-offset langelem offset) + )) + val)) + )) vars)) (vhdl-keep-region-active)) @@ -7578,12 +7574,11 @@ ENDPOS is encountered." (expurgated)) ;; remove the library unit symbols (mapc - (function - (lambda (elt) - (if (memq (car elt) '(entity configuration context package - package-body architecture)) - nil - (setq expurgated (append expurgated (list elt)))))) + (lambda (elt) + (if (memq (car elt) '(entity configuration context package + package-body architecture)) + nil + (setq expurgated (append expurgated (list elt))))) actual) (if (and (not arg) expected (listp expected)) (if (not (equal expected expurgated)) @@ -7950,7 +7945,7 @@ the token in MATCH." (push (cons start length) comment-list)) (beginning-of-line 2)) (setq comment-list - (sort comment-list (function (lambda (a b) (> (car a) (car b)))))) + (sort comment-list (lambda (a b) (> (car a) (car b))))) ;; reduce start positions (setq start-list (list (caar comment-list))) (setq comment-list (cdr comment-list)) @@ -15886,8 +15881,7 @@ NO-POSITION non-nil means do not re-position cursor." (setq path-list-1 (append (mapcar - (function - (lambda (var) (concat path-beg var path-end))) + (lambda (var) (concat path-beg var path-end)) (let ((all-list (vhdl-directory-files (match-string 2 dir) t (concat "\\<" (wildcard-to-regexp @@ -17440,8 +17434,8 @@ specified by a target." (setq tmp-list (cdr tmp-list))) (setq rule-alist ; sort by first rule target (sort rule-alist - (function (lambda (a b) - (string< (car (cadr a)) (car (cadr b))))))) + (lambda (a b) + (string< (car (cadr a)) (car (cadr b)))))) ;; open and clear Makefile (set-buffer (find-file-noselect makefile-path-name t t)) (erase-buffer) @@ -17752,16 +17746,15 @@ specified by a target." 'vhdl-word-completion-in-minibuffer 'vhdl-underscore-is-part-of-word 'vhdl-mode-hook) - (function - (lambda () - (insert - (if vhdl-special-indent-hook - (concat "\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" - "vhdl-special-indent-hook is set to '" - (format "%s" vhdl-special-indent-hook) - ".\nPerhaps this is your problem?\n" - "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\n") - "\n")))) + (lambda () + (insert + (if vhdl-special-indent-hook + (concat "\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" + "vhdl-special-indent-hook is set to '" + (format "%s" vhdl-special-indent-hook) + ".\nPerhaps this is your problem?\n" + "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\n") + "\n"))) nil "Hi Reto,")))) From 9d60ce1762b64a734c0a931eaad4c59605527d3a Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Mon, 28 Dec 2020 07:47:59 +0100 Subject: [PATCH 017/116] * lisp/ps-print.el (ps-message-log-max): Remove XEmacs compat code. --- lisp/ps-print.el | 1 - 1 file changed, 1 deletion(-) diff --git a/lisp/ps-print.el b/lisp/ps-print.el index 351c489f487..bb4970cdaba 100644 --- a/lisp/ps-print.el +++ b/lisp/ps-print.el @@ -4114,7 +4114,6 @@ If EXTENSION is any other symbol, it is ignored." (defun ps-message-log-max () (and (not (string= (buffer-name) "*Messages*")) - (boundp 'message-log-max) message-log-max)) From 5e1416fd0a41c4b7d13d3cd6ecedab48ae7b55b5 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Mon, 28 Dec 2020 07:51:05 +0100 Subject: [PATCH 018/116] Minor cleanups in tetris.el * lisp/play/tetris.el: Remove redundant :group args. (tetris-get-tick-period): Drop unnecessary check. (tetris): Stylistic doc fixes. --- lisp/play/tetris.el | 46 ++++++++++++++------------------------------- 1 file changed, 14 insertions(+), 32 deletions(-) diff --git a/lisp/play/tetris.el b/lisp/play/tetris.el index e25cacbb722..6e686338313 100644 --- a/lisp/play/tetris.el +++ b/lisp/play/tetris.el @@ -3,7 +3,7 @@ ;; Copyright (C) 1997, 2001-2020 Free Software Foundation, Inc. ;; Author: Glynn Clements -;; Version: 2.01 +;; Old-Version: 2.01 ;; Created: 1997-08-13 ;; Keywords: games @@ -39,22 +39,18 @@ (defcustom tetris-use-glyphs t "Non-nil means use glyphs when available." - :group 'tetris :type 'boolean) (defcustom tetris-use-color t "Non-nil means use color when available." - :group 'tetris :type 'boolean) (defcustom tetris-draw-border-with-glyphs t "Non-nil means draw a border even when using glyphs." - :group 'tetris :type 'boolean) (defcustom tetris-default-tick-period 0.3 "The default time taken for a shape to drop one row." - :group 'tetris :type 'number) (defcustom tetris-update-speed-function @@ -65,18 +61,15 @@ SHAPES is the number of shapes which have been dropped. ROWS is the number of rows which have been completed. If the return value is a number, it is used as the timer period." - :group 'tetris :type 'function) (defcustom tetris-mode-hook nil "Hook run upon starting Tetris." - :group 'tetris :type 'hook) (defcustom tetris-tty-colors ["blue" "white" "yellow" "magenta" "cyan" "green" "red"] "Vector of colors of the various shapes in text mode." - :group 'tetris :type '(vector (color :tag "Shape 1") (color :tag "Shape 2") (color :tag "Shape 3") @@ -88,7 +81,6 @@ If the return value is a number, it is used as the timer period." (defcustom tetris-x-colors [[0 0 1] [0.7 0 1] [1 1 0] [1 0 1] [0 1 1] [0 1 0] [1 0 0]] "Vector of RGB colors of the various shapes." - :group 'tetris :type '(vector (vector :tag "Shape 1" number number number) (vector :tag "Shape 2" number number number) (vector :tag "Shape 3" number number number) @@ -99,37 +91,30 @@ If the return value is a number, it is used as the timer period." (defcustom tetris-buffer-name "*Tetris*" "Name used for Tetris buffer." - :group 'tetris :type 'string) (defcustom tetris-buffer-width 30 "Width of used portion of buffer." - :group 'tetris :type 'number) (defcustom tetris-buffer-height 22 "Height of used portion of buffer." - :group 'tetris :type 'number) (defcustom tetris-width 10 "Width of playing area." - :group 'tetris :type 'number) (defcustom tetris-height 20 "Height of playing area." - :group 'tetris :type 'number) (defcustom tetris-top-left-x 3 "X position of top left of playing area." - :group 'tetris :type 'number) (defcustom tetris-top-left-y 1 "Y position of top left of playing area." - :group 'tetris :type 'number) (defvar tetris-next-x (+ (* 2 tetris-top-left-x) tetris-width) @@ -335,11 +320,10 @@ each one of its four blocks.") options)) (defun tetris-get-tick-period () - (if (boundp 'tetris-update-speed-function) - (let ((period (apply tetris-update-speed-function - tetris-n-shapes - tetris-n-rows nil))) - (and (numberp period) period)))) + (let ((period (apply tetris-update-speed-function + tetris-n-shapes + tetris-n-rows nil))) + (and (numberp period) period))) (defun tetris-get-shape-cell (block) (aref (aref (aref tetris-shapes @@ -646,17 +630,15 @@ rotate the shape to fit in with those at the bottom of the screen so as to form complete rows. tetris-mode keybindings: - \\ -\\[tetris-start-game] Starts a new game of Tetris -\\[tetris-end-game] Terminates the current game -\\[tetris-pause-game] Pauses (or resumes) the current game -\\[tetris-move-left] Moves the shape one square to the left -\\[tetris-move-right] Moves the shape one square to the right -\\[tetris-rotate-prev] Rotates the shape clockwise -\\[tetris-rotate-next] Rotates the shape anticlockwise -\\[tetris-move-bottom] Drops the shape to the bottom of the playing area - -" +\\ +\\[tetris-start-game] Start a new game of Tetris +\\[tetris-end-game] Terminate the current game +\\[tetris-pause-game] Pause (or resume) the current game +\\[tetris-move-left] Move the shape one square to the left +\\[tetris-move-right] Move the shape one square to the right +\\[tetris-rotate-prev] Rotate the shape clockwise +\\[tetris-rotate-next] Rotate the shape anticlockwise +\\[tetris-move-bottom] Drop the shape to the bottom of the playing area" (interactive) (select-window (or (get-buffer-window tetris-buffer-name) From 16458631d49a19bd496a45517264059383e18c18 Mon Sep 17 00:00:00 2001 From: Alan Third Date: Mon, 28 Dec 2020 15:02:39 +0000 Subject: [PATCH 019/116] Fix crash in NS menu code * src/nsmenu.m (ns_update_menubar): Don't assume that the top level menus are correct when populating the submenus. (free_frame_menubar): Clear the menu. ([EmacsMenu removeAllItems]): Actually remove all menu items. --- src/nsmenu.m | 101 +++++++++++++++++++++++---------------------------- 1 file changed, 46 insertions(+), 55 deletions(-) diff --git a/src/nsmenu.m b/src/nsmenu.m index 3f0cd0c6ed4..23699627b15 100644 --- a/src/nsmenu.m +++ b/src/nsmenu.m @@ -65,11 +65,22 @@ /* Supposed to discard menubar and free storage. Since we share the menubar among frames and update its context for the focused window, - there is nothing to do here. */ + we do not discard the menu. We do, however, want to remove any + existing menu items. */ void free_frame_menubar (struct frame *f) { - return; + id menu = [NSApp mainMenu]; + for (int i = [menu numberOfItems] - 1 ; i >= 0; i--) + { + NSMenuItem *item = [menu itemAtIndex:i]; + NSString *title = [item title]; + + if ([ns_app_name isEqualToString:title]) + continue; + + [menu removeItemAtIndex:i]; + } } @@ -108,7 +119,7 @@ NSTRACE ("ns_update_menubar"); - if (f != SELECTED_FRAME ()) + if (f != SELECTED_FRAME () || FRAME_EXTERNAL_MENU_BAR (f) == 0) return; XSETFRAME (Vmenu_updating_frame, f); /*fprintf (stderr, "ns_update_menubar: frame: %p\tdeep: %d\tsub: %p\n", f, deep_p, submenu); */ @@ -317,57 +328,44 @@ } /* Now, update the NS menu. */ - if (deep_p) - { - /* This path is typically used when a menu has been clicked. I - think Apple expect us to only update that one menu, however - to update one we need to do the hard work of parsing the - whole tree, so we may as well update them all. */ -#ifdef NS_IMPL_COCOA - int i = 1; -#else - int i = 0; -#endif - for (wv = first_wv->contents; wv; wv = wv->next) - { - /* The contents of wv should match the top level menu. */ - EmacsMenu *submenu = (EmacsMenu*)[[menu itemAtIndex:i++] submenu]; + i = 0; - [submenu fillWithWidgetValue: wv->contents]; - } + /* Make sure we skip the "application" menu, which is always the + first entry in our top-level menu. */ + if (i < [menu numberOfItems]) + { + NSString *title = [[menu itemAtIndex:i] title]; + if ([ns_app_name isEqualToString:title]) + i += 1; } - else + + for (wv = first_wv->contents; wv; wv = wv->next) { - /* Make sure we skip the "application" menu, which is always the - first entry in our top-level menu. */ -#ifdef NS_IMPL_COCOA - int i = 1; -#else - int i = 0; -#endif - for (wv = first_wv->contents; wv; wv = wv->next) + EmacsMenu *submenu; + + if (i < [menu numberOfItems]) { - if (i < [menu numberOfItems]) - { - NSString *titleStr = [NSString stringWithUTF8String: wv->name]; - NSMenuItem *item = [menu itemAtIndex:i]; - EmacsMenu *submenu = (EmacsMenu*)[item submenu]; + NSString *titleStr = [NSString stringWithUTF8String: wv->name]; + NSMenuItem *item = [menu itemAtIndex:i]; + submenu = (EmacsMenu*)[item submenu]; - [item setTitle:titleStr]; - [submenu setTitle:titleStr]; - [submenu removeAllItems]; - } - else - [menu addSubmenuWithTitle: wv->name]; - - i += 1; + [item setTitle:titleStr]; + [submenu setTitle:titleStr]; + [submenu removeAllItems]; } + else + submenu = [menu addSubmenuWithTitle: wv->name]; - while (i < [menu numberOfItems]) - { - /* Remove any extra items. */ - [menu removeItemAtIndex:i]; - } + if (deep_p) + [submenu fillWithWidgetValue: wv->contents]; + + i += 1; + } + + while (i < [menu numberOfItems]) + { + /* Remove any extra items. */ + [menu removeItemAtIndex:i]; } @@ -541,14 +539,7 @@ -(void)removeAllItems int n; for (n = [self numberOfItems]-1; n >= 0; n--) - { - NSMenuItem *item = [self itemAtIndex: n]; - NSString *title = [item title]; - if ([ns_app_name isEqualToString: title] - && ![item isSeparatorItem]) - continue; - [self removeItemAtIndex: n]; - } + [self removeItemAtIndex: n]; #endif needsUpdate = YES; From 81969482e23b1c046354d9d860e548259f118b4e Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 28 Dec 2020 11:03:30 -0800 Subject: [PATCH 020/116] Fix package tests for tetris no longer existing as a package * test/lisp/emacs-lisp/package-tests.el (package-test-list-filter-by-name, package-test-list-clear-filter): Use ansi-color instead of tetris, which no longer has a version:. --- test/lisp/emacs-lisp/package-tests.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/lisp/emacs-lisp/package-tests.el b/test/lisp/emacs-lisp/package-tests.el index 23267545f83..92e593328c6 100644 --- a/test/lisp/emacs-lisp/package-tests.el +++ b/test/lisp/emacs-lisp/package-tests.el @@ -405,9 +405,9 @@ Must called from within a `tar-mode' buffer." (ert-deftest package-test-list-filter-by-name () "Ensure package list is filtered correctly by package name." (with-package-menu-test () - (package-menu-filter-by-name "tetris") + (package-menu-filter-by-name "ansi-color") (goto-char (point-min)) - (should (re-search-forward "^\\s-+tetris" nil t)) + (should (re-search-forward "^\\s-+ansi-color" nil t)) (should (= (count-lines (point-min) (point-max)) 1)))) (ert-deftest package-test-list-filter-by-status () @@ -463,7 +463,7 @@ Must called from within a `tar-mode' buffer." "Ensure package list filter is cleared correctly." (with-package-menu-test (let ((num-packages (count-lines (point-min) (point-max)))) - (package-menu-filter-by-name "tetris") + (package-menu-filter-by-name "ansi-color") (should (= (count-lines (point-min) (point-max)) 1)) (package-menu-clear-filter) (should (= (count-lines (point-min) (point-max)) num-packages))))) From c7fdf8688388f137dbfab2f372fa33c24241b83a Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 28 Dec 2020 14:58:39 -0500 Subject: [PATCH 021/116] * lisp/minibuffer.el: Avoid consecutive `any` in completion patterns (completion-pcm--optimize-pattern): Turn multiple consecutive occurrences of `any` into just a single one. Suggested by Dario Gjorgjevski . --- lisp/minibuffer.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 7d05f7704e9..c8c106c336a 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -3159,7 +3159,8 @@ or a symbol, see `completion-pcm--merge-completions'." (let ((n '())) (while p (pcase p - (`(,(or 'any 'any-delim) point . ,rest) (setq p `(point . ,rest))) + (`(,(or 'any 'any-delim) ,(or 'any 'point) . ,rest) + (setq p (cdr p))) ;; This is not just a performance improvement: it turns a ;; terminating `point' into an implicit `any', which affects ;; the final position of point (because `point' gets turned From d180a41dbb8e4e8d94d30a023c2d86d92c73c4f1 Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Mon, 28 Dec 2020 20:42:25 +0000 Subject: [PATCH 022/116] CC Mode: Add newish AWK Mode facilities, as used in gawk-4. * lisp/progmodes/cc-awk.el (c-awk-font-lock-invalid-namespace-separators): New function. (c-awk-context-expand-fl-region): New function. (awk-font-lock-keywords): Enhance handling of function declarations to include :: tokens. Fontify new system variable names FPAT, FUNCTAB, PREC, ROUNDMODE, SYNTAB. Fontify new keywords BEGINFILE and ENDFILE. Fontify new system functions asorti, dcngettext, isarray, patsplit, typeof. Fontify the new directives @include, @load, @namespace. Call c-awk-font-lock-invalid-namespace-separators as a matcher. * lisp/progmodes/cc-fonts.el (top level): No longer require 'cc-awk. * lisp/progmodes/cc-langs.el (c-before-context-fontification-functions): Give AWK the value c-awk-context-expand-fl-region rather than nil. * lisp/progmodes/cc-mode.el (top level): Declare awk-mode-syntax-table as a variable. --- lisp/progmodes/cc-awk.el | 101 ++++++++++++++++++++++++++++++++----- lisp/progmodes/cc-fonts.el | 3 -- lisp/progmodes/cc-langs.el | 2 +- lisp/progmodes/cc-mode.el | 1 + 4 files changed, 89 insertions(+), 18 deletions(-) diff --git a/lisp/progmodes/cc-awk.el b/lisp/progmodes/cc-awk.el index 52e6da6f4ac..841c3a4bb6d 100644 --- a/lisp/progmodes/cc-awk.el +++ b/lisp/progmodes/cc-awk.el @@ -49,9 +49,11 @@ (load "cc-bytecomp" nil t))) (cc-require 'cc-defs) +(cc-require-when-compile 'cc-langs) +(cc-require-when-compile 'cc-fonts) +(cc-require 'cc-engine) ;; Silence the byte compiler. -(cc-bytecomp-defvar font-lock-mode) ; Checked with boundp before use. (cc-bytecomp-defvar c-new-BEG) (cc-bytecomp-defvar c-new-END) @@ -649,6 +651,46 @@ ;; several lines back. The elisp "advice" feature is used on these functions ;; to allow this. +(defun c-awk-font-lock-invalid-namespace-separators (limit) + ;; This function will be called from font-lock for a region bounded by POINT + ;; and LIMIT, as though it were to identify a keyword for + ;; font-lock-keyword-face. It always returns NIL to inhibit this and + ;; prevent a repeat invocation. See elisp/lispref page "Search-based + ;; Fontification". + ;; + ;; This function gives invalid GAWK namepace separators (::) + ;; font-lock-warning-face. "Invalid" here means there are spaces, etc., + ;; around a separator, or there are more than one of them in an identifier. + ;; Invalid separators inside function declaration parentheses are handled + ;; elsewhere. + (while (and + (< (point) limit) + (c-syntactic-re-search-forward + (eval-when-compile + (concat "\\([^" (c-lang-const c-symbol-chars awk) "]::\\)" + "\\|" + ;; "\\(::[^" (c-lang-const c-symbol-start awk) "]\\)" + "\\(::[^" c-alpha "_" "]\\)" + "\\|" + "\\(::[" (c-lang-const c-symbol-chars awk) "]*::\\)")) + limit 'bound)) + (cond + ((match-beginning 1) ; " ::" + (c-put-font-lock-face (1+ (match-beginning 1)) (match-end 1) + 'font-lock-warning-face) + (goto-char (- (match-end 1) 2))) + ((match-beginning 2) ; ":: " + (c-put-font-lock-face (match-beginning 2) (1- (match-end 2)) + 'font-lock-warning-face) + (goto-char (1- (match-end 2)))) + (t ; "::foo::" + (c-put-font-lock-face (match-beginning 3) (+ 2 (match-beginning 3)) + 'font-lock-warning-face) + (c-put-font-lock-face (- (match-end 3) 2) (match-end 3) + 'font-lock-warning-face) + (goto-char (- (match-end 3) 2))))) + nil) + (defun c-awk-beginning-of-logical-line (&optional pos) ;; Go back to the start of the (apparent) current line (or the start of the ;; line containing POS), returning the buffer position of that point. I.e., @@ -900,6 +942,13 @@ (goto-char c-new-BEG) (c-awk-set-syntax-table-properties c-new-END))) +(defun c-awk-context-expand-fl-region (beg end) + ;; Return a cons (NEW-BEG . NEW-END), where NEW-BEG is the beginning of the + ;; logical line BEG is on, and NEW-END is the beginning of the line after + ;; the end of the logical line that END is on. + (cons (save-excursion (c-awk-beginning-of-logical-line beg)) + (c-awk-beyond-logical-line end))) + ;; Awk regexps written with help from Peter Galbraith ;; . ;; Take GNU Emacs's 'words out of the following regexp-opts. They don't work @@ -907,18 +956,34 @@ (defconst awk-font-lock-keywords (eval-when-compile (list - ;; Function names. - '("^\\s *\\(func\\(tion\\)?\\)\\>\\s *\\(\\sw+\\)?" - (1 font-lock-keyword-face) (3 font-lock-function-name-face nil t)) - ;; + ;; Function declarations. + `(,(c-make-font-lock-search-function + "^\\s *\\(func\\(tion\\)?\\)\\s +\\(\\(\\sw+\\(::\\sw+\\)?\\)\\s *\\)?\\(([^()]*)\\)?" + '(1 font-lock-keyword-face t) + ;; We can't use LAXMATCH in `c-make-font-lock-search-function', so.... + '((when (match-beginning 4) + (c-put-font-lock-face + (match-beginning 4) (match-end 4) font-lock-function-name-face) + nil)) + ;; Put warning face on any use of :: inside the parens. + '((when (match-beginning 6) + (goto-char (1+ (match-beginning 6))) + (let ((end (1- (match-end 6)))) + (while (and (< (point) end) + (c-syntactic-re-search-forward "::" end t)) + (c-put-font-lock-face (- (point) 2) (point) + 'font-lock-warning-face))) + nil)))) + ;; Variable names. (cons (concat "\\<" (regexp-opt '("ARGC" "ARGIND" "ARGV" "BINMODE" "CONVFMT" "ENVIRON" - "ERRNO" "FIELDWIDTHS" "FILENAME" "FNR" "FS" "IGNORECASE" - "LINT" "NF" "NR" "OFMT" "OFS" "ORS" "PROCINFO" "RLENGTH" - "RS" "RSTART" "RT" "SUBSEP" "TEXTDOMAIN") t) "\\>") + "ERRNO" "FIELDWIDTHS" "FILENAME" "FNR" "FPAT" "FS" "FUNCTAB" + "IGNORECASE" "LINT" "NF" "NR" "OFMT" "OFS" "ORS" "PREC" + "PROCINFO" "RLENGTH" "ROUNDMODE" "RS" "RSTART" "RT" "SUBSEP" + "SYNTAB" "TEXTDOMAIN") t) "\\>") 'font-lock-variable-name-face) ;; Special file names. (acm, 2002/7/22) @@ -949,7 +1014,8 @@ std\\(err\\|in\\|out\\)\\|user\\)\\)\\>\ ;; Keywords. (concat "\\<" (regexp-opt - '("BEGIN" "END" "break" "case" "continue" "default" "delete" + '("BEGIN" "BEGINFILE" "END" "ENDFILE" + "break" "case" "continue" "default" "delete" "do" "else" "exit" "for" "getline" "if" "in" "next" "nextfile" "return" "switch" "while") t) "\\>") @@ -959,16 +1025,20 @@ std\\(err\\|in\\|out\\)\\|user\\)\\)\\>\ ,(concat "\\<" (regexp-opt - '("adump" "and" "asort" "atan2" "bindtextdomain" "close" - "compl" "cos" "dcgettext" "exp" "extension" "fflush" - "gensub" "gsub" "index" "int" "length" "log" "lshift" - "match" "mktime" "or" "print" "printf" "rand" "rshift" + '("adump" "and" "asort" "asorti" "atan2" "bindtextdomain" "close" + "compl" "cos" "dcgettext" "dcngettext" "exp" "extension" "fflush" + "gensub" "gsub" "index" "int" "isarray" "length" "log" "lshift" + "match" "mktime" "or" "patsplit" "print" "printf" "rand" "rshift" "sin" "split" "sprintf" "sqrt" "srand" "stopme" "strftime" "strtonum" "sub" "substr" "system" - "systime" "tolower" "toupper" "xor") t) + "systime" "tolower" "toupper" "typeof" "xor") + t) "\\>") 0 c-preprocessor-face-name)) + ;; Directives + '("@\\(include\\|load\\|namespace\\)\\>" 0 c-preprocessor-face-name) + ;; gawk debugging keywords. (acm, 2002/7/21) ;; (Removed, 2003/6/6. These functions are now fontified as built-ins) ;; (list (concat "\\<" (regexp-opt '("adump" "stopme") t) "\\>") @@ -980,6 +1050,9 @@ std\\(err\\|in\\|out\\)\\|user\\)\\)\\>\ c-awk-escaped-nls*-with-space* "(") (0 'font-lock-warning-face)) + ;; Double :: tokens, or the same with space(s) around them. + #'c-awk-font-lock-invalid-namespace-separators + ;; Space after \ in what looks like an escaped newline. 2002/5/31 '("\\\\\\s +$" 0 font-lock-warning-face t) diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el index e403c49e398..94e087f38e0 100644 --- a/lisp/progmodes/cc-fonts.el +++ b/lisp/progmodes/cc-fonts.el @@ -76,9 +76,6 @@ (cc-require-when-compile 'cc-langs) (cc-require 'cc-vars) (cc-require 'cc-engine) -(cc-require-when-compile 'cc-awk) ; Change from cc-require, 2003/6/18 to -;; prevent cc-awk being loaded when it's not needed. There is now a (require -;; 'cc-awk) in (defun awk-mode ..). ;; Avoid repeated loading through the eval-after-load directive in ;; cc-mode.el. diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index 4d1aeaa5cb9..9b13cedc988 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el @@ -549,7 +549,7 @@ parameters (point-min), (point-max) and .") (c-lang-defconst c-before-context-fontification-functions t 'c-context-expand-fl-region - awk nil) + awk 'c-awk-context-expand-fl-region) ;; For documentation see the following c-lang-defvar of the same name. ;; The value here may be a list of functions or a single function. (c-lang-defvar c-before-context-fontification-functions diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index f6d36f5670c..2f1885e5b61 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -113,6 +113,7 @@ ;; Silence the compiler. (cc-bytecomp-defvar adaptive-fill-first-line-regexp) ; Emacs (cc-bytecomp-defun run-mode-hooks) ; Emacs 21.1 +(cc-bytecomp-defvar awk-mode-syntax-table) ;; We set this variable during mode init, yet we don't require ;; font-lock. From c6d555564617d187d9e1aacd12da6ace56718f81 Mon Sep 17 00:00:00 2001 From: Amin Bandali Date: Mon, 28 Dec 2020 16:44:58 -0500 Subject: [PATCH 023/116] Display messages sent using ERC's /say * lisp/erc/erc.el (erc-cmd-SAY): Call `erc-display-msg' to display the user's message in the buffer, just like other [non-command] messages. https://lists.gnu.org/r/help-gnu-emacs/2020-12/msg00066.html --- lisp/erc/erc.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index 3033122437a..c32a1d97166 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -2847,7 +2847,9 @@ need this when pasting multiple lines of text." (if (string-match "^\\s-*$" line) nil (string-match "^ ?\\(.*\\)" line) - (erc-process-input-line (match-string 1 line) nil t))) + (let ((msg (match-string 1 line))) + (erc-display-msg msg) + (erc-process-input-line msg nil t)))) (put 'erc-cmd-SAY 'do-not-parse-args t) (defun erc-cmd-SET (line) From d199a4640f53673a3bba79ab82cf819009e65e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Mon, 28 Dec 2020 09:20:17 +0000 Subject: [PATCH 024/116] Robustify completion match scoring for optimized patterns Fixes: bug#42149 The function completion-pcm--hilit-commonality, which propertizes and scores a previously confirmed match, expected its PATTERN argument to match the strings of COMPLETIONS entirely (i.e. up to the string's very end). But sometimes the ending wildcard, represented by the 'any' atom in PATTERN, is optimized away by completion-pcm--optimize-pattern. Although this is mostly benign in terms of highlighting commonality, it leads to incorrect score values. In this change, we ensure that completion-pcm--hilit-commonality is aware of this exception and isn't affected by it. We also document the function a bit better and simplify its workings. Originally reported by Dario Gjorgjevski * lisp/minibuffer.el (completion-pcm--hilit-commonality): Simplify. Add docstring. * lisp/minibuffer.el (completion-pcm--hilit-commonality): Add docstring --- lisp/minibuffer.el | 48 ++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index c8c106c336a..dc37c5f4476 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -3245,6 +3245,13 @@ than the latter (which has two \"holes\" and three one-letter-long matches).") (defun completion-pcm--hilit-commonality (pattern completions) + "Show where and how well PATTERN matches COMPLETIONS. +PATTERN, a list of symbols and strings as seen +`completion-pcm--merge-completions', is assumed to match every +string in COMPLETIONS. Return a deep copy of COMPLETIONS where +each string is propertized with `completion-score', a number +between 0 and 1, and with faces `completions-common-part', +`completions-first-difference' in the relevant segments." (when completions (let* ((re (completion-pcm--pattern->regex pattern 'group)) (point-idx (completion-pcm--pattern-point-idx pattern)) @@ -3256,12 +3263,12 @@ one-letter-long matches).") (unless (string-match re str) (error "Internal error: %s does not match %s" re str)) (let* ((pos (if point-idx (match-beginning point-idx) (match-end 0))) - (md (match-data)) - (start (pop md)) - (end (pop md)) - (len (length str)) - ;; To understand how this works, consider these bad - ;; ascii(tm) diagrams showing how the pattern "foo" + (match-end (match-end 0)) + (md (cddr (match-data))) + (from 0) + (end (length str)) + ;; To understand how this works, consider these simple + ;; ascii diagrams showing how the pattern "foo" ;; flex-matches "fabrobazo", "fbarbazoo" and ;; "barfoobaz": @@ -3297,9 +3304,12 @@ one-letter-long matches).") (score-numerator 0) (score-denominator 0) (last-b 0) - (update-score + (update-score-and-face (lambda (a b) - "Update score variables given match range (A B)." + "Update score and face given match range (A B)." + (add-face-text-property a b + 'completions-common-part + nil str) (setq score-numerator (+ score-numerator (- b a))) (unless (or (= a last-b) @@ -3313,19 +3323,15 @@ one-letter-long matches).") flex-score-match-tightness))))) (setq last-b b)))) - (funcall update-score start start) (while md - (funcall update-score start (car md)) - (add-face-text-property - start (pop md) - 'completions-common-part - nil str) - (setq start (pop md))) - (funcall update-score len len) - (add-face-text-property - start end - 'completions-common-part - nil str) + (funcall update-score-and-face from (pop md)) + (setq from (pop md))) + ;; If `pattern' doesn't have an explicit trailing any, the + ;; regex `re' won't produce match data representing the + ;; region after the match. We need to account to account + ;; for that extra bit of match (bug#42149). + (unless (= from match-end) + (funcall update-score-and-face from match-end)) (if (> (length str) pos) (add-face-text-property pos (1+ pos) @@ -3334,7 +3340,7 @@ one-letter-long matches).") (unless (zerop (length str)) (put-text-property 0 1 'completion-score - (/ score-numerator (* len (1+ score-denominator)) 1.0) str))) + (/ score-numerator (* end (1+ score-denominator)) 1.0) str))) str) completions)))) From 92406b02c6b1ff25102e49f78b0f46a9b143e21b Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Tue, 29 Dec 2020 02:01:57 +0100 Subject: [PATCH 025/116] Allow mixing attributes and comments in the diary file * lisp/calendar/diary-lib.el (diary-face-attrs): The attributes don't have to be at the end of the line -- there may be ##warntime or other comments (bug#19965). --- lisp/calendar/diary-lib.el | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lisp/calendar/diary-lib.el b/lisp/calendar/diary-lib.el index bf1e8ebf9d6..c41f19dd0f3 100644 --- a/lisp/calendar/diary-lib.el +++ b/lisp/calendar/diary-lib.el @@ -73,18 +73,18 @@ are holidays." ;; follows: the first line matching "^# [tag:value]" defines the value ;; for that particular tag. (defcustom diary-face-attrs - '((" *\\[foreground:\\([-a-z]+\\)\\]$" 1 :foreground string) - (" *\\[background:\\([-a-z]+\\)\\]$" 1 :background string) - (" *\\[width:\\([-a-z]+\\)\\]$" 1 :width symbol) - (" *\\[height:\\([.0-9]+\\)\\]$" 1 :height int) - (" *\\[weight:\\([-a-z]+\\)\\]$" 1 :weight symbol) - (" *\\[slant:\\([-a-z]+\\)\\]$" 1 :slant symbol) - (" *\\[underline:\\([-a-z]+\\)\\]$" 1 :underline stringtnil) - (" *\\[overline:\\([-a-z]+\\)\\]$" 1 :overline stringtnil) - (" *\\[strike-through:\\([-a-z]+\\)\\]$" 1 :strike-through stringtnil) - (" *\\[inverse-video:\\([-a-z]+\\)\\]$" 1 :inverse-video tnil) - (" *\\[face:\\([-0-9a-z]+\\)\\]$" 1 :face string) - (" *\\[font:\\([-a-z0-9]+\\)\\]$" 1 :font string) + '((" *\\[foreground:\\([-a-z]+\\)\\] *" 1 :foreground string) + (" *\\[background:\\([-a-z]+\\)\\] *" 1 :background string) + (" *\\[width:\\([-a-z]+\\)\\] *" 1 :width symbol) + (" *\\[height:\\([.0-9]+\\)\\] *" 1 :height int) + (" *\\[weight:\\([-a-z]+\\)\\] *" 1 :weight symbol) + (" *\\[slant:\\([-a-z]+\\)\\] *" 1 :slant symbol) + (" *\\[underline:\\([-a-z]+\\)\\] *" 1 :underline stringtnil) + (" *\\[overline:\\([-a-z]+\\)\\] *" 1 :overline stringtnil) + (" *\\[strike-through:\\([-a-z]+\\)\\] *" 1 :strike-through stringtnil) + (" *\\[inverse-video:\\([-a-z]+\\)\\] *" 1 :inverse-video tnil) + (" *\\[face:\\([-0-9a-z]+\\)\\] *" 1 :face string) + (" *\\[font:\\([-a-z0-9]+\\)\\] *" 1 :font string) ;; Unsupported. ;;; (" *\\[box:\\([-a-z]+\\)\\]$" 1 :box) ;;; (" *\\[stipple:\\([-a-z]+\\)\\]$" 1 :stipple) From b9359d4183a1a6923122d3aa12b922ab89693354 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Tue, 29 Dec 2020 02:19:03 +0100 Subject: [PATCH 026/116] Add a reference between the Strings node and Search/Replace * doc/lispref/strings.texi (Creating Strings): Mention string-replace/replace-regexp-in-string (bug#45516). --- doc/lispref/strings.texi | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi index 1e5f52ddfdd..a31e71d5260 100644 --- a/doc/lispref/strings.texi +++ b/doc/lispref/strings.texi @@ -120,7 +120,10 @@ character (i.e., an integer), @code{nil} otherwise. @cindex string creation The following functions create strings, either from scratch, or by -putting strings together, or by taking them apart. +putting strings together, or by taking them apart. (For functions that +create strings based on searching the contents of other strings (like +@code{string-replace} and @code{replace-regexp-in-string}), see +@ref{Search and Replace}.) @defun make-string count character &optional multibyte This function returns a string made up of @var{count} repetitions of From 3334dd904157e7b3787f5d32f30b3c31585d047c Mon Sep 17 00:00:00 2001 From: "Basil L. Contovounesios" Date: Tue, 29 Dec 2020 01:19:07 +0000 Subject: [PATCH 027/116] Reword a long docstring in cc-langs.el * lisp/progmodes/cc-langs.el (c-vsemi-status-unknown-p-fn): Reword docstring to fit within 80 columns and silence the corresponding byte-compiler warning (bug#44858). --- lisp/progmodes/cc-langs.el | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index 9b13cedc988..b10a085552d 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el @@ -581,12 +581,14 @@ don't have EOL terminated statements. " (c-lang-defvar c-at-vsemi-p-fn (c-lang-const c-at-vsemi-p-fn)) (c-lang-defconst c-vsemi-status-unknown-p-fn - "Contains a function \"are we unsure whether there is a virtual semicolon on this line?\". -The (admittedly kludgy) purpose of such a function is to prevent an infinite -recursion in c-beginning-of-statement-1 when point starts at a `while' token. -The function MUST NOT UNDER ANY CIRCUMSTANCES call c-beginning-of-statement-1, -even indirectly. This variable contains nil for languages which don't have -EOL terminated statements." + "Contains a predicate regarding the presence of virtual semicolons. +More precisely, the function answers the question, \"are we unsure whether a +virtual semicolon exists on this line?\". The (admittedly kludgy) purpose of +such a function is to prevent an infinite recursion in +`c-beginning-of-statement-1' when point starts at a `while' token. The function +MUST NOT UNDER ANY CIRCUMSTANCES call `c-beginning-of-statement-1', even +indirectly. This variable contains nil for languages which don't have EOL +terminated statements." t nil (c c++ objc) 'c-macro-vsemi-status-unknown-p awk 'c-awk-vsemi-status-unknown-p) From 40d16332597d3aa564c9950ae1831faf6867c71a Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Tue, 29 Dec 2020 03:04:51 +0100 Subject: [PATCH 028/116] Add a SPLIT parameter to `format-spec' * doc/lispref/strings.texi (Custom Format Strings): Document it. * lisp/format-spec.el (format-spec): Add an optional parameter to return a list of strings (bug#33740). --- doc/lispref/strings.texi | 12 +++- etc/NEWS | 5 ++ lisp/format-spec.el | 103 +++++++++++++++++++-------------- test/lisp/format-spec-tests.el | 10 ++++ 4 files changed, 85 insertions(+), 45 deletions(-) diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi index a31e71d5260..4ac5057454f 100644 --- a/doc/lispref/strings.texi +++ b/doc/lispref/strings.texi @@ -1216,7 +1216,7 @@ The function @code{format-spec} described in this section performs a similar function to @code{format}, except it operates on format control strings that use arbitrary specification characters. -@defun format-spec template spec-alist &optional ignore-missing +@defun format-spec template spec-alist &optional ignore-missing split This function returns a string produced from the format string @var{template} according to conversions specified in @var{spec-alist}, which is an alist (@pxref{Association Lists}) of the form @@ -1258,6 +1258,16 @@ any; if it is @code{delete}, those format specifications are removed from the output; any other non-@code{nil} value is handled like @code{ignore}, but any occurrences of @samp{%%} are also left verbatim in the output. + +If the optional argument @var{split} is non-@code{nil}, instead of +returning a single string, @code{format-spec} will split the result +into a list of strings, based on where the substitutions were +performed. For instance: + +@example +(format-spec "foo %b bar" '((?b . "zot")) nil t) + @result{} ("foo " "zot" " bar") +@end example @end defun The syntax of format specifications accepted by @code{format-spec} is diff --git a/etc/NEWS b/etc/NEWS index f8282696e46..cd4006170d2 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2179,6 +2179,11 @@ In order for the two functions to behave more consistently, length, and also supports format specifications that include a truncating precision field, such as "%.2a". ++++ +** 'format-spec' now takes an optional SPLIT parameter. +If non-nil, 'format-spec' will split the resulting string into a list +of strings, based on where the format specs (and expansions) were. + --- ** New function 'color-values-from-color-spec'. This can be used to parse RGB color specs in several formats and diff --git a/lisp/format-spec.el b/lisp/format-spec.el index 6af79a44167..3abcd5183a3 100644 --- a/lisp/format-spec.el +++ b/lisp/format-spec.el @@ -25,7 +25,7 @@ ;;; Code: ;;;###autoload -(defun format-spec (format specification &optional ignore-missing) +(defun format-spec (format specification &optional ignore-missing split) "Return a string based on FORMAT and SPECIFICATION. FORMAT is a string containing `format'-like specs like \"su - %u %k\". SPECIFICATION is an alist mapping format specification characters @@ -68,50 +68,65 @@ error; if it is the symbol `ignore', leave those %-specs verbatim in the result, including their text properties, if any; if it is the symbol `delete', remove those %-specs from the result; otherwise do the same as for the symbol `ignore', but also leave -any occurrences of \"%%\" in FORMAT verbatim in the result." +any occurrences of \"%%\" in FORMAT verbatim in the result. + +If SPLIT, instead of returning a single string, a list of strings +is returned, where each format spec is its own element." (with-temp-buffer - (insert format) - (goto-char (point-min)) - (while (search-forward "%" nil t) - (cond - ;; Quoted percent sign. - ((= (following-char) ?%) - (when (memq ignore-missing '(nil ignore delete)) - (delete-char 1))) - ;; Valid format spec. - ((looking-at (rx (? (group (+ (in " 0<>^_-")))) - (? (group (+ digit))) - (? (group ?. (+ digit))) - (group alpha))) - (let* ((beg (point)) - (end (match-end 0)) - (flags (match-string 1)) - (width (match-string 2)) - (trunc (match-string 3)) - (char (string-to-char (match-string 4))) - (text (assq char specification))) - (cond (text - ;; Handle flags. - (setq text (format-spec--do-flags - (format "%s" (cdr text)) - (format-spec--parse-flags flags) - (and width (string-to-number width)) - (and trunc (car (read-from-string trunc 1))))) - ;; Insert first, to preserve text properties. - (insert-and-inherit text) - ;; Delete the specifier body. - (delete-region (point) (+ end (length text))) - ;; Delete the percent sign. - (delete-region (1- beg) beg)) - ((eq ignore-missing 'delete) - ;; Delete the whole format spec. - (delete-region (1- beg) end)) - ((not ignore-missing) - (error "Invalid format character: `%%%c'" char))))) - ;; Signal an error on bogus format strings. - ((not ignore-missing) - (error "Invalid format string")))) - (buffer-string))) + (let ((split-start (point-min)) + (split-result nil)) + (insert format) + (goto-char (point-min)) + (while (search-forward "%" nil t) + (cond + ;; Quoted percent sign. + ((= (following-char) ?%) + (when (memq ignore-missing '(nil ignore delete)) + (delete-char 1))) + ;; Valid format spec. + ((looking-at (rx (? (group (+ (in " 0<>^_-")))) + (? (group (+ digit))) + (? (group ?. (+ digit))) + (group alpha))) + (let* ((beg (point)) + (end (match-end 0)) + (flags (match-string 1)) + (width (match-string 2)) + (trunc (match-string 3)) + (char (string-to-char (match-string 4))) + (text (assq char specification))) + (when (and split + (not (= (1- beg) split-start))) + (push (buffer-substring split-start (1- beg)) split-result)) + (cond (text + ;; Handle flags. + (setq text (format-spec--do-flags + (format "%s" (cdr text)) + (format-spec--parse-flags flags) + (and width (string-to-number width)) + (and trunc (car (read-from-string trunc 1))))) + ;; Insert first, to preserve text properties. + (insert-and-inherit text) + ;; Delete the specifier body. + (delete-region (point) (+ end (length text))) + ;; Delete the percent sign. + (delete-region (1- beg) beg)) + ((eq ignore-missing 'delete) + ;; Delete the whole format spec. + (delete-region (1- beg) end)) + ((not ignore-missing) + (error "Invalid format character: `%%%c'" char))) + (when split + (push (buffer-substring (1- beg) (point)) split-result) + (setq split-start (point))))) + ;; Signal an error on bogus format strings. + ((not ignore-missing) + (error "Invalid format string")))) + (if (not split) + (buffer-string) + (unless (= split-start (point-max)) + (push (buffer-substring split-start (point-max)) split-result)) + (nreverse split-result))))) (defun format-spec--do-flags (str flags width trunc) "Return STR formatted according to FLAGS, WIDTH, and TRUNC. diff --git a/test/lisp/format-spec-tests.el b/test/lisp/format-spec-tests.el index 11882217afb..cced8623330 100644 --- a/test/lisp/format-spec-tests.el +++ b/test/lisp/format-spec-tests.el @@ -178,4 +178,14 @@ (should (equal (format-spec "foo %>4b zot" '((?b . "longbar"))) "foo long zot"))) +(ert-deftest format-spec-split () + (should (equal (format-spec "foo %b bar" '((?b . "zot")) nil t) + '("foo " "zot" " bar"))) + (should (equal (format-spec "%b bar" '((?b . "zot")) nil t) + '("zot" " bar"))) + (should (equal (format-spec "%b" '((?b . "zot")) nil t) + '("zot"))) + (should (equal (format-spec "foo %b" '((?b . "zot")) nil t) + '("foo " "zot")))) + ;;; format-spec-tests.el ends here From 37049ee78c4576d340781179317e6cbaaf73b6c3 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Tue, 29 Dec 2020 03:10:00 +0100 Subject: [PATCH 029/116] Allow the flymake mode line indicator to be customized * doc/misc/flymake.texi (Customizable variables): Mention it. * lisp/progmodes/flymake.el (flymake-mode-line-indicator-format): New variable (bug#33740). (flymake--mode-line-format): Use it. --- doc/misc/flymake.texi | 3 + etc/NEWS | 5 + lisp/progmodes/flymake.el | 197 +++++++++++++++++++------------------- 3 files changed, 109 insertions(+), 96 deletions(-) diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index 8f2954bdf4f..b8744f0323f 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi @@ -213,6 +213,9 @@ This section summarizes customization variables used for the configuration of the Flymake user interface. @vtable @code +@item flymake-mode-line-indicator-format +Format to use for the Flymake mode line indicator. + @item flymake-no-changes-timeout If any changes are made to the buffer, syntax check is automatically started after this many seconds, unless the user makes another change, diff --git a/etc/NEWS b/etc/NEWS index cd4006170d2..6348c1d8eef 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1732,6 +1732,11 @@ height of lines or width of chars. When non-nil, use a new xwidget webkit session after bookmark jump. Otherwise, it will use 'xwidget-webkit-last-session'. +** Flymake mode + ++++ +*** New user option 'flymake-mode-line-indicator-format'. + ** Flyspell mode +++ diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 40bb90d0f15..e78d5d32fff 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -1190,6 +1190,16 @@ default) no filter is applied." (put 'flymake--mode-line-format 'risky-local-variable t) +(defcustom flymake-mode-line-indicator-format " Flymake%s[%e %w %n]" + "Format to use for the Flymake mode line indicator. +The following format characters can be used: + +%s: The status. +%e: The number of errors. +%w: The number of warnings. +%n: The number of notes." + :version "28.1" + :type 'string) (defun flymake--mode-line-format () "Produce a pretty minor mode indicator." @@ -1207,102 +1217,97 @@ default) no filter is applied." diags-by-type))) (flymake--backend-state-diags state))) flymake--backend-state) - `((:propertize " Flymake" - mouse-face mode-line-highlight - help-echo - ,(concat (format "%s known backends\n" (length known)) - (format "%s running\n" (length running)) - (format "%s disabled\n" (length disabled)) - "mouse-1: Display minor mode menu\n" - "mouse-2: Show help for minor mode") - keymap - ,(let ((map (make-sparse-keymap))) - (define-key map [mode-line down-mouse-1] - flymake-menu) - (define-key map [mode-line mouse-2] - (lambda () - (interactive) - (describe-function 'flymake-mode))) - map)) - ,@(pcase-let ((`(,ind ,face ,explain) - (cond ((null known) - '("?" nil "No known backends")) - (some-waiting - `("Wait" compilation-mode-line-run - ,(format "Waiting for %s running backend(s)" - (length some-waiting)))) - (all-disabled - '("!" compilation-mode-line-run - "All backends disabled")) - (t - '(nil nil nil))))) - (when ind - `((":" - (:propertize ,ind - face ,face - help-echo ,explain - keymap - ,(let ((map (make-sparse-keymap))) - (define-key map [mode-line mouse-1] - 'flymake-switch-to-log-buffer) - map)))))) - ,@(unless (or all-disabled - (null known)) - (cl-loop - with types = (hash-table-keys diags-by-type) - with _augmented = (cl-loop for extra in '(:error :warning) - do (cl-pushnew extra types - :key #'flymake--severity)) - for type in (cl-sort types #'> :key #'flymake--severity) - for diags = (gethash type diags-by-type) - for face = (flymake--lookup-type-property type - 'mode-line-face - 'compilation-error) - when (or diags - (cond ((eq flymake-suppress-zero-counters t) - nil) - (flymake-suppress-zero-counters - (>= (flymake--severity type) - (warning-numeric-level - flymake-suppress-zero-counters))) - (t t))) - collect `(:propertize - ,(format "%d" (length diags)) - face ,face - mouse-face mode-line-highlight - keymap - ,(let ((map (make-sparse-keymap)) - (type type)) - (define-key map (vector 'mode-line - mouse-wheel-down-event) - (lambda (event) - (interactive "e") - (with-selected-window (posn-window (event-start event)) - (flymake-goto-prev-error 1 (list type) t)))) - (define-key map (vector 'mode-line - mouse-wheel-up-event) - (lambda (event) - (interactive "e") - (with-selected-window (posn-window (event-start event)) - (flymake-goto-next-error 1 (list type) t)))) - map) - help-echo - ,(concat (format "%s diagnostics of type %s\n" - (propertize (format "%d" - (length diags)) - 'face face) - (propertize (format "%s" type) - 'face face)) - (format "%s/%s: previous/next of this type" - mouse-wheel-down-event - mouse-wheel-up-event))) - into forms - finally return - `((:propertize "[") - ,@(cl-loop for (a . rest) on forms by #'cdr - collect a when rest collect - '(:propertize " ")) - (:propertize "]"))))))) + (format-spec + (propertize + flymake-mode-line-indicator-format + 'mouse-face 'mode-line-highlight + 'help-echo (concat (format "%s known backends\n" (length known)) + (format "%s running\n" (length running)) + (format "%s disabled\n" (length disabled)) + "mouse-1: Display minor mode menu\n" + "mouse-2: Show help for minor mode") + 'keymap (let ((map (make-sparse-keymap))) + (define-key map [mode-line down-mouse-1] + flymake-menu) + (define-key map [mode-line mouse-2] + (lambda () + (interactive) + (describe-function 'flymake-mode))) + map)) + (cons + (cons + ?s (pcase-let ((`(,ind ,face ,explain) + (cond ((null known) + '("?" nil "No known backends")) + (some-waiting + `("Wait" compilation-mode-line-run + ,(format "Waiting for %s running backend(s)" + (length some-waiting)))) + (all-disabled + '("!" compilation-mode-line-run + "All backends disabled")) + (t + '(nil nil nil))))) + (if (not ind) + "" + (concat + ":" (propertize ind + 'face face + 'help-echo explain + 'keymap (let ((map (make-sparse-keymap))) + (define-key map [mode-line mouse-1] + 'flymake-switch-to-log-buffer) + map)))))) + (cl-loop + with types = (hash-table-keys diags-by-type) + with _augmented = (cl-loop for extra in '(:error :warning) + do (cl-pushnew extra types + :key #'flymake--severity)) + for type in (cl-sort types #'> :key #'flymake--severity) + for diags = (gethash type diags-by-type) + for face = (flymake--lookup-type-property + type 'mode-line-face 'compilation-error) + when (or diags + (cond ((eq flymake-suppress-zero-counters t) + nil) + (flymake-suppress-zero-counters + (>= (flymake--severity type) + (warning-numeric-level + flymake-suppress-zero-counters))) + (t t))) + collect (cons + (elt (format "%s" type) 1) + (propertize + (format "%d" (length diags)) + 'face face + 'mouse-face 'mode-line-highlight + 'keymap + (let ((map (make-sparse-keymap)) + (type type)) + (define-key map (vector 'mode-line + mouse-wheel-down-event) + (lambda (event) + (interactive "e") + (with-selected-window (posn-window (event-start event)) + (flymake-goto-prev-error 1 (list type) t)))) + (define-key map (vector 'mode-line + mouse-wheel-up-event) + (lambda (event) + (interactive "e") + (with-selected-window (posn-window (event-start event)) + (flymake-goto-next-error 1 (list type) t)))) + map) + 'help-echo + (concat (format "%s diagnostics of type %s\n" + (propertize (format "%d" + (length diags)) + 'face face) + (propertize (format "%s" type) + 'face face)) + (format "%s/%s: previous/next of this type" + mouse-wheel-down-event + mouse-wheel-up-event)))))) + nil t))) ;;; Diagnostics buffer From a66f0d3bd3486b7253f482b7169b0de2d0d49c79 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Tue, 29 Dec 2020 04:53:03 +0100 Subject: [PATCH 030/116] Introduce new variable mode-line-compact * doc/lispref/modes.texi (Mode Line Basics): Document it (bug#34476). * src/xdisp.c (display_mode_line): Use it. (syms_of_xdisp): New variable mode-line-compact. --- doc/lispref/modes.texi | 9 ++++++++ etc/NEWS | 6 ++++++ src/xdisp.c | 49 +++++++++++++++++++++++++++++++++++++++--- 3 files changed, 61 insertions(+), 3 deletions(-) diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 675aeec8a5f..40edc90a6af 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -1930,6 +1930,15 @@ This function also forces an update of the menu bar and frame title. color using the face @code{mode-line}. Other windows' mode lines appear in the face @code{mode-line-inactive} instead. @xref{Faces}. +@vindex mode-line-compact + Some modes put a lot of data in the mode line, pushing elements at +the end of the mode line off to the right. Emacs can ``compress'' the +mode line if the @code{mode-line-compact} variable is non-@code{nil} +by turning stretches of spaces into a single space. If this variable +is @code{long}, this is only done when the mode line is wider than the +currently selected window. This variable can be buffer-local to only +compress mode-lines in certain buffers. + @node Mode Line Data @subsection The Data Structure of the Mode Line @cindex mode line construct diff --git a/etc/NEWS b/etc/NEWS index 6348c1d8eef..a5247a9aea8 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1614,6 +1614,12 @@ the column number format (when 'column-number-mode' is on), and 'mode-line-position-column-line-format' is the combined format (when both modes are on). ++++ +*** New user option 'mode-line-compact'. +If non-nil, repeating spaces are compressed into a single space. If +'long', this is only done when the mode line is longer than the +current window width (in characters). + +++ *** New command 'submit-emacs-patch'. This works like 'report-emacs-bug', but is more geared towards sending diff --git a/src/xdisp.c b/src/xdisp.c index b5adee51055..6606e49e428 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -25451,14 +25451,49 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format) format_mode_line_unwind_data (NULL, NULL, Qnil, false)); - mode_line_target = MODE_LINE_DISPLAY; - /* Temporarily make frame's keyboard the current kboard so that kboard-local variables in the mode_line_format will get the right values. */ push_kboard (FRAME_KBOARD (it.f)); record_unwind_save_match_data (); - display_mode_element (&it, 0, 0, 0, format, Qnil, false); + + if (NILP (Vmode_line_compact)) + { + mode_line_target = MODE_LINE_DISPLAY; + display_mode_element (&it, 0, 0, 0, format, Qnil, false); + } + else + { + Lisp_Object mode_string = Fformat_mode_line (format, Qnil, Qnil, Qnil); + if (EQ (Vmode_line_compact, Qlong) + && window_body_width (XWINDOW (selected_window), FALSE) >= + SCHARS (mode_string)) + { + display_string (SSDATA (mode_string), Qnil, Qnil, 0, 0, &it, 0, 0, 0, + STRING_MULTIBYTE (mode_string)); + } + else + { + char *string = xmalloc (SBYTES (mode_string) + 1), + *ostring = SSDATA (mode_string); + char *s = string, prev = 0; + + /* Copy over the data from the mode line string, but ignore + repeating spaces. This should be safe even for multibyte + strings, since this is UTF-8. */ + for (int i = 0; i < SBYTES (mode_string); i++) + { + char c = ostring[i]; + if (!(c == ' ' && prev == ' ')) + prev = *s++ = c; + } + *s = 0; + + display_string (string, Qnil, Qnil, 0, 0, &it, 0, 0, 0, + STRING_MULTIBYTE (mode_string)); + xfree (string); + } + } pop_kboard (); unbind_to (count, Qnil); @@ -34805,6 +34840,14 @@ wide as that tab on the display. */); The face used for trailing whitespace is `trailing-whitespace'. */); Vshow_trailing_whitespace = Qnil; + DEFVAR_LISP ("mode-line-compact", Vmode_line_compact, + doc: /* Non-nil means that mode lines should be compact. +This means that repeating spaces will be replaced with a single space. +If this variable is `long', only mode lines that are wider than the +currently selected window are compressed. */); + Vmode_line_compact = Qnil; + DEFSYM (Qlong, "long"); + DEFVAR_LISP ("nobreak-char-display", Vnobreak_char_display, doc: /* Control highlighting of non-ASCII space and hyphen chars. If the value is t, Emacs highlights non-ASCII chars which have the From 03bab768bee56377677b5ff0e49c4cd03972a01a Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Tue, 29 Dec 2020 05:16:25 +0100 Subject: [PATCH 031/116] Add a parameter to display_string to allow not ignoring text props * src/xdisp.c (display_string): Add a parameter to allow not ignoring text properties (bug#45520). Adjust callers throughout xdisp.c. --- src/xdisp.c | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index 6606e49e428..f7b87dcce18 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -1114,7 +1114,8 @@ static ptrdiff_t display_count_lines (ptrdiff_t, ptrdiff_t, ptrdiff_t, static void pint2str (register char *, register int, register ptrdiff_t); static int display_string (const char *, Lisp_Object, Lisp_Object, - ptrdiff_t, ptrdiff_t, struct it *, int, int, int, int); + ptrdiff_t, ptrdiff_t, struct it *, int, int, int, + int, bool); static void compute_line_metrics (struct it *); static void run_redisplay_end_trigger_hook (struct it *); static bool get_overlay_strings (struct it *, ptrdiff_t); @@ -13154,12 +13155,13 @@ display_tab_bar (struct window *w) if (it.current_x < it.last_visible_x) display_string (NULL, string, Qnil, 0, 0, &it, - SCHARS (string), 0, 0, STRING_MULTIBYTE (string)); + SCHARS (string), 0, 0, STRING_MULTIBYTE (string), + TRUE); } /* Fill out the line with spaces. */ if (it.current_x < it.last_visible_x) - display_string ("", Qnil, Qnil, 0, 0, &it, -1, 0, 0, -1); + display_string ("", Qnil, Qnil, 0, 0, &it, -1, 0, 0, -1, TRUE); /* Compute the total height of the lines. */ compute_line_metrics (&it); @@ -25136,12 +25138,13 @@ display_menu_bar (struct window *w) /* Display the item, pad with one space. */ if (it.current_x < it.last_visible_x) display_string (NULL, string, Qnil, 0, 0, &it, - SCHARS (string) + 1, 0, 0, STRING_MULTIBYTE (string)); + SCHARS (string) + 1, 0, 0, STRING_MULTIBYTE (string), + TRUE); } /* Fill out the line with spaces. */ if (it.current_x < it.last_visible_x) - display_string ("", Qnil, Qnil, 0, 0, &it, -1, 0, 0, -1); + display_string ("", Qnil, Qnil, 0, 0, &it, -1, 0, 0, -1, TRUE); /* Compute the total height of the lines. */ compute_line_metrics (&it); @@ -25245,21 +25248,22 @@ display_tty_menu_item (const char *item_text, int width, int face_id, it.paragraph_embedding = L2R; /* Pad with a space on the left. */ - display_string (" ", Qnil, Qnil, 0, 0, &it, 1, 0, FRAME_COLS (f) - 1, -1); + display_string (" ", Qnil, Qnil, 0, 0, &it, 1, 0, FRAME_COLS (f) - 1, -1, + TRUE); width--; /* Display the menu item, pad with spaces to WIDTH. */ if (submenu) { display_string (item_text, Qnil, Qnil, 0, 0, &it, - item_len, 0, FRAME_COLS (f) - 1, -1); + item_len, 0, FRAME_COLS (f) - 1, -1, TRUE); width -= item_len; /* Indicate with " >" that there's a submenu. */ display_string (" >", Qnil, Qnil, 0, 0, &it, width, 0, - FRAME_COLS (f) - 1, -1); + FRAME_COLS (f) - 1, -1, TRUE); } else display_string (item_text, Qnil, Qnil, 0, 0, &it, - width, 0, FRAME_COLS (f) - 1, -1); + width, 0, FRAME_COLS (f) - 1, -1, TRUE); row->used[TEXT_AREA] = max (saved_used, row->used[TEXT_AREA]); row->truncated_on_right_p = saved_truncated; @@ -25469,8 +25473,9 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format) && window_body_width (XWINDOW (selected_window), FALSE) >= SCHARS (mode_string)) { - display_string (SSDATA (mode_string), Qnil, Qnil, 0, 0, &it, 0, 0, 0, - STRING_MULTIBYTE (mode_string)); + display_string (SSDATA (mode_string), mode_string, Qnil, + 0, 0, &it, 0, 0, 0, + STRING_MULTIBYTE (mode_string), FALSE); } else { @@ -25490,7 +25495,7 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format) *s = 0; display_string (string, Qnil, Qnil, 0, 0, &it, 0, 0, 0, - STRING_MULTIBYTE (mode_string)); + STRING_MULTIBYTE (mode_string), TRUE); xfree (string); } } @@ -25499,7 +25504,7 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format) unbind_to (count, Qnil); /* Fill up with spaces. */ - display_string (" ", Qnil, Qnil, 0, 0, &it, 10000, -1, -1, 0); + display_string (" ", Qnil, Qnil, 0, 0, &it, 10000, -1, -1, 0, TRUE); compute_line_metrics (&it); it.glyph_row->full_width_p = true; @@ -25703,7 +25708,7 @@ display_mode_element (struct it *it, int depth, int field_width, int precision, break; case MODE_LINE_DISPLAY: n += display_string (NULL, elt, Qnil, 0, 0, it, - 0, prec, 0, STRING_MULTIBYTE (elt)); + 0, prec, 0, STRING_MULTIBYTE (elt), TRUE); break; } @@ -25765,7 +25770,7 @@ display_mode_element (struct it *it, int depth, int field_width, int precision, nchars = string_byte_to_char (elt, offset) - charpos; n += display_string (NULL, elt, Qnil, 0, charpos, it, 0, nchars, 0, - STRING_MULTIBYTE (elt)); + STRING_MULTIBYTE (elt), TRUE); } break; } @@ -25837,7 +25842,7 @@ display_mode_element (struct it *it, int depth, int field_width, int precision, nwritten = display_string (spec, string, elt, charpos, 0, it, field, prec, 0, - multibyte); + multibyte, TRUE); /* Assign to the glyphs written above the string where the `%x' came from, position @@ -26044,7 +26049,7 @@ display_mode_element (struct it *it, int depth, int field_width, int precision, break; case MODE_LINE_DISPLAY: n += display_string ("", Qnil, Qnil, 0, 0, it, field_width - n, - 0, 0, 0); + 0, 0, 0, TRUE); break; } } @@ -27114,7 +27119,8 @@ display_count_lines (ptrdiff_t start_byte, static int display_string (const char *string, Lisp_Object lisp_string, Lisp_Object face_string, ptrdiff_t face_string_pos, ptrdiff_t start, struct it *it, - int field_width, int precision, int max_x, int multibyte) + int field_width, int precision, int max_x, int multibyte, + bool ignore_text_properties) { int hpos_at_start = it->hpos; int saved_face_id = it->face_id; @@ -27125,7 +27131,8 @@ display_string (const char *string, Lisp_Object lisp_string, Lisp_Object face_st with index START. */ reseat_to_string (it, NILP (lisp_string) ? string : NULL, lisp_string, start, precision, field_width, multibyte); - if (string && STRINGP (lisp_string)) + + if (string && STRINGP (lisp_string) && ignore_text_properties) /* LISP_STRING is the one returned by decode_mode_spec. We should ignore its text properties. */ it->stop_charpos = it->end_charpos; From 88c96962cfd56f213ef88b506b510a42d21a2fe6 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Tue, 29 Dec 2020 05:59:42 +0100 Subject: [PATCH 032/116] Fix compact mode line text properties * src/xdisp.c (display_mode_line): Display the compact mode correctly (with text properties) (bug#45520). --- src/xdisp.c | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index f7b87dcce18..4c4d349ee5a 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -25473,30 +25473,43 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format) && window_body_width (XWINDOW (selected_window), FALSE) >= SCHARS (mode_string)) { + /* The window is wide enough; just display the mode line we + just computed. */ display_string (SSDATA (mode_string), mode_string, Qnil, 0, 0, &it, 0, 0, 0, STRING_MULTIBYTE (mode_string), FALSE); } else { - char *string = xmalloc (SBYTES (mode_string) + 1), - *ostring = SSDATA (mode_string); - char *s = string, prev = 0; + /* Compress the mode line. */ + ptrdiff_t i = 0, i_byte = 0, start = 0; + int prev = 0; - /* Copy over the data from the mode line string, but ignore - repeating spaces. This should be safe even for multibyte - strings, since this is UTF-8. */ - for (int i = 0; i < SBYTES (mode_string); i++) + while (i < SCHARS (mode_string)) { - char c = ostring[i]; - if (!(c == ' ' && prev == ' ')) - prev = *s++ = c; + int c = fetch_string_char_advance (mode_string, &i, &i_byte); + if (c == ' ' && prev == ' ') + { + display_string (NULL, + Fsubstring (mode_string, make_fixnum (start), + make_fixnum (i - 1)), + Qnil, 0, 0, &it, 0, 0, 0, + STRING_MULTIBYTE (mode_string), FALSE); + /* Skip past the rest of the space characters. */ + while (c == ' ' && i < SCHARS (mode_string)) + c = fetch_string_char_advance (mode_string, &i, &i_byte); + start = i - 1; + } + prev = c; } - *s = 0; - display_string (string, Qnil, Qnil, 0, 0, &it, 0, 0, 0, - STRING_MULTIBYTE (mode_string), TRUE); - xfree (string); + /* Display the final bit. */ + if (start < i) + display_string (NULL, + Fsubstring (mode_string, make_fixnum (start), + make_fixnum (i - 1)), + Qnil, 0, 0, &it, 0, 0, 0, + STRING_MULTIBYTE (mode_string), FALSE); } } pop_kboard (); From 6481da6b90bcbccbd334f060ac2a4aafaea83df3 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Tue, 29 Dec 2020 06:07:44 +0100 Subject: [PATCH 033/116] Revert the previous display_string change * src/xdisp.c (display_string): Revert adding the additional ignore_text_properties parameter -- it was already covered by the other mix of parameters. --- src/xdisp.c | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index 4c4d349ee5a..72256cddd30 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -1115,7 +1115,7 @@ static void pint2str (register char *, register int, register ptrdiff_t); static int display_string (const char *, Lisp_Object, Lisp_Object, ptrdiff_t, ptrdiff_t, struct it *, int, int, int, - int, bool); + int); static void compute_line_metrics (struct it *); static void run_redisplay_end_trigger_hook (struct it *); static bool get_overlay_strings (struct it *, ptrdiff_t); @@ -13155,13 +13155,12 @@ display_tab_bar (struct window *w) if (it.current_x < it.last_visible_x) display_string (NULL, string, Qnil, 0, 0, &it, - SCHARS (string), 0, 0, STRING_MULTIBYTE (string), - TRUE); + SCHARS (string), 0, 0, STRING_MULTIBYTE (string)); } /* Fill out the line with spaces. */ if (it.current_x < it.last_visible_x) - display_string ("", Qnil, Qnil, 0, 0, &it, -1, 0, 0, -1, TRUE); + display_string ("", Qnil, Qnil, 0, 0, &it, -1, 0, 0, -1); /* Compute the total height of the lines. */ compute_line_metrics (&it); @@ -25138,13 +25137,12 @@ display_menu_bar (struct window *w) /* Display the item, pad with one space. */ if (it.current_x < it.last_visible_x) display_string (NULL, string, Qnil, 0, 0, &it, - SCHARS (string) + 1, 0, 0, STRING_MULTIBYTE (string), - TRUE); + SCHARS (string) + 1, 0, 0, STRING_MULTIBYTE (string)); } /* Fill out the line with spaces. */ if (it.current_x < it.last_visible_x) - display_string ("", Qnil, Qnil, 0, 0, &it, -1, 0, 0, -1, TRUE); + display_string ("", Qnil, Qnil, 0, 0, &it, -1, 0, 0, -1); /* Compute the total height of the lines. */ compute_line_metrics (&it); @@ -25248,22 +25246,21 @@ display_tty_menu_item (const char *item_text, int width, int face_id, it.paragraph_embedding = L2R; /* Pad with a space on the left. */ - display_string (" ", Qnil, Qnil, 0, 0, &it, 1, 0, FRAME_COLS (f) - 1, -1, - TRUE); + display_string (" ", Qnil, Qnil, 0, 0, &it, 1, 0, FRAME_COLS (f) - 1, -1); width--; /* Display the menu item, pad with spaces to WIDTH. */ if (submenu) { display_string (item_text, Qnil, Qnil, 0, 0, &it, - item_len, 0, FRAME_COLS (f) - 1, -1, TRUE); + item_len, 0, FRAME_COLS (f) - 1, -1); width -= item_len; /* Indicate with " >" that there's a submenu. */ display_string (" >", Qnil, Qnil, 0, 0, &it, width, 0, - FRAME_COLS (f) - 1, -1, TRUE); + FRAME_COLS (f) - 1, -1); } else display_string (item_text, Qnil, Qnil, 0, 0, &it, - width, 0, FRAME_COLS (f) - 1, -1, TRUE); + width, 0, FRAME_COLS (f) - 1, -1); row->used[TEXT_AREA] = max (saved_used, row->used[TEXT_AREA]); row->truncated_on_right_p = saved_truncated; @@ -25475,9 +25472,9 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format) { /* The window is wide enough; just display the mode line we just computed. */ - display_string (SSDATA (mode_string), mode_string, Qnil, + display_string (NULL, mode_string, Qnil, 0, 0, &it, 0, 0, 0, - STRING_MULTIBYTE (mode_string), FALSE); + STRING_MULTIBYTE (mode_string)); } else { @@ -25494,7 +25491,7 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format) Fsubstring (mode_string, make_fixnum (start), make_fixnum (i - 1)), Qnil, 0, 0, &it, 0, 0, 0, - STRING_MULTIBYTE (mode_string), FALSE); + STRING_MULTIBYTE (mode_string)); /* Skip past the rest of the space characters. */ while (c == ' ' && i < SCHARS (mode_string)) c = fetch_string_char_advance (mode_string, &i, &i_byte); @@ -25509,7 +25506,7 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format) Fsubstring (mode_string, make_fixnum (start), make_fixnum (i - 1)), Qnil, 0, 0, &it, 0, 0, 0, - STRING_MULTIBYTE (mode_string), FALSE); + STRING_MULTIBYTE (mode_string)); } } pop_kboard (); @@ -25517,7 +25514,7 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format) unbind_to (count, Qnil); /* Fill up with spaces. */ - display_string (" ", Qnil, Qnil, 0, 0, &it, 10000, -1, -1, 0, TRUE); + display_string (" ", Qnil, Qnil, 0, 0, &it, 10000, -1, -1, 0); compute_line_metrics (&it); it.glyph_row->full_width_p = true; @@ -25721,7 +25718,7 @@ display_mode_element (struct it *it, int depth, int field_width, int precision, break; case MODE_LINE_DISPLAY: n += display_string (NULL, elt, Qnil, 0, 0, it, - 0, prec, 0, STRING_MULTIBYTE (elt), TRUE); + 0, prec, 0, STRING_MULTIBYTE (elt)); break; } @@ -25783,7 +25780,7 @@ display_mode_element (struct it *it, int depth, int field_width, int precision, nchars = string_byte_to_char (elt, offset) - charpos; n += display_string (NULL, elt, Qnil, 0, charpos, it, 0, nchars, 0, - STRING_MULTIBYTE (elt), TRUE); + STRING_MULTIBYTE (elt)); } break; } @@ -25855,7 +25852,7 @@ display_mode_element (struct it *it, int depth, int field_width, int precision, nwritten = display_string (spec, string, elt, charpos, 0, it, field, prec, 0, - multibyte, TRUE); + multibyte); /* Assign to the glyphs written above the string where the `%x' came from, position @@ -26062,7 +26059,7 @@ display_mode_element (struct it *it, int depth, int field_width, int precision, break; case MODE_LINE_DISPLAY: n += display_string ("", Qnil, Qnil, 0, 0, it, field_width - n, - 0, 0, 0, TRUE); + 0, 0, 0); break; } } @@ -27132,8 +27129,7 @@ display_count_lines (ptrdiff_t start_byte, static int display_string (const char *string, Lisp_Object lisp_string, Lisp_Object face_string, ptrdiff_t face_string_pos, ptrdiff_t start, struct it *it, - int field_width, int precision, int max_x, int multibyte, - bool ignore_text_properties) + int field_width, int precision, int max_x, int multibyte) { int hpos_at_start = it->hpos; int saved_face_id = it->face_id; @@ -27145,7 +27141,7 @@ display_string (const char *string, Lisp_Object lisp_string, Lisp_Object face_st reseat_to_string (it, NILP (lisp_string) ? string : NULL, lisp_string, start, precision, field_width, multibyte); - if (string && STRINGP (lisp_string) && ignore_text_properties) + if (string && STRINGP (lisp_string)) /* LISP_STRING is the one returned by decode_mode_spec. We should ignore its text properties. */ it->stop_charpos = it->end_charpos; From 1fc011c07578168ce25f7db2271f58cb02f540a3 Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Mon, 28 Dec 2020 21:36:47 -0800 Subject: [PATCH 034/116] * src/xdisp.c (display_mode_line): I guess FALSE should be false. --- src/xdisp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/xdisp.c b/src/xdisp.c index 72256cddd30..7ad6b1b1892 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -25467,7 +25467,7 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format) { Lisp_Object mode_string = Fformat_mode_line (format, Qnil, Qnil, Qnil); if (EQ (Vmode_line_compact, Qlong) - && window_body_width (XWINDOW (selected_window), FALSE) >= + && window_body_width (XWINDOW (selected_window), false) >= SCHARS (mode_string)) { /* The window is wide enough; just display the mode line we From ee0e259e5d52749999be329afa9c764a8aff0531 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Tue, 29 Dec 2020 08:38:17 +0100 Subject: [PATCH 035/116] Add some tests for align.el --- test/lisp/align-resources/align-post.c | 3 ++ test/lisp/align-resources/align-post.java | 9 +++++ test/lisp/align-resources/align-pre.c | 3 ++ test/lisp/align-resources/align-pre.java | 9 +++++ test/lisp/align-tests.el | 47 +++++++++++++++++++++++ 5 files changed, 71 insertions(+) create mode 100644 test/lisp/align-resources/align-post.c create mode 100644 test/lisp/align-resources/align-post.java create mode 100644 test/lisp/align-resources/align-pre.c create mode 100644 test/lisp/align-resources/align-pre.java create mode 100644 test/lisp/align-tests.el diff --git a/test/lisp/align-resources/align-post.c b/test/lisp/align-resources/align-post.c new file mode 100644 index 00000000000..157e1d6242a --- /dev/null +++ b/test/lisp/align-resources/align-post.c @@ -0,0 +1,3 @@ +int +main (int argc, + char *argv[]); diff --git a/test/lisp/align-resources/align-post.java b/test/lisp/align-resources/align-post.java new file mode 100644 index 00000000000..e0ea8e727f1 --- /dev/null +++ b/test/lisp/align-resources/align-post.java @@ -0,0 +1,9 @@ +class X +{ + String field1; + String[] field2; + int field3; + int[] field4; + X field5; + X[] field6; +} diff --git a/test/lisp/align-resources/align-pre.c b/test/lisp/align-resources/align-pre.c new file mode 100644 index 00000000000..b1774181a40 --- /dev/null +++ b/test/lisp/align-resources/align-pre.c @@ -0,0 +1,3 @@ +int +main (int argc, + char *argv[]); diff --git a/test/lisp/align-resources/align-pre.java b/test/lisp/align-resources/align-pre.java new file mode 100644 index 00000000000..fe7a87a9393 --- /dev/null +++ b/test/lisp/align-resources/align-pre.java @@ -0,0 +1,9 @@ +class X +{ + String field1; + String[] field2; + int field3; + int[] field4; + X field5; + X[] field6; +} diff --git a/test/lisp/align-tests.el b/test/lisp/align-tests.el new file mode 100644 index 00000000000..b66ebb8b84c --- /dev/null +++ b/test/lisp/align-tests.el @@ -0,0 +1,47 @@ +;;; align-tests.el --- Test suite for aligns -*- lexical-binding: t; -*- + +;; Copyright (C) 2015-2020 Free Software Foundation, Inc. + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;;; Code: + +(require 'ert) +(require 'ert-x) +(require 'align) + +(defun test-align-compare (file function) + (should (equal + (with-temp-buffer + (insert-file-contents (ert-resource-file (format file "pre"))) + (funcall function) + (align (point-min) (point-max)) + (buffer-substring-no-properties (point-min) (point-max))) + (with-temp-buffer + (insert-file-contents (ert-resource-file (format file "post"))) + (buffer-string))))) + +(ert-deftest align-java () + (test-align-compare "align-%s.java" #'java-mode)) + +(ert-deftest align-c () + (test-align-compare "align-%s.c" #'c-mode)) + +(provide 'align-tests) + +;;; align-tests.el ends here From 177863b1ce4f1ede76b1921390e50c90136af27d Mon Sep 17 00:00:00 2001 From: Alan Third Date: Tue, 29 Dec 2020 13:45:30 +0000 Subject: [PATCH 036/116] Fix crash in NS menu code * src/nsmenu.m (ns_update_menubar): When the menu generation code was copied from xmenu.c the fix for waiting_for_input was lost. Reinstate it. --- src/nsmenu.m | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/nsmenu.m b/src/nsmenu.m index 23699627b15..201c02bb35d 100644 --- a/src/nsmenu.m +++ b/src/nsmenu.m @@ -104,6 +104,7 @@ NSAutoreleasePool *pool; BOOL needsSet = NO; id menu = [NSApp mainMenu]; + bool owfi; Lisp_Object items; widget_value *wv, *first_wv, *prev_wv = 0; @@ -171,6 +172,13 @@ set_buffer_internal_1 (XBUFFER (buffer)); + /* TODO: for some reason this is not needed in other terms, but + some menu updates call Info-extract-pointer which causes + abort-on-error if waiting-for-input. Needs further + investigation. */ + owfi = waiting_for_input; + waiting_for_input = 0; + /* Run the Lucid hook. */ safe_run_hooks (Qactivate_menubar_hook); @@ -223,6 +231,7 @@ submenu_start[i] = -1; finish_menu_items (); + waiting_for_input = owfi; /* Convert menu_items into widget_value trees to display the menu. This cannot evaluate Lisp code. */ From ecd9264372a61cf35696288d2d0c8afe77dd084f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Tue, 29 Dec 2020 14:07:03 +0000 Subject: [PATCH 037/116] Revert "Allow the flymake mode line indicator to be customized" This reverts commit 37049ee78c4576d340781179317e6cbaaf73b6c3. It's not ready to be used, contains some fundamental errors. See bug#33740. --- doc/misc/flymake.texi | 3 - etc/NEWS | 5 - lisp/progmodes/flymake.el | 197 +++++++++++++++++++------------------- 3 files changed, 96 insertions(+), 109 deletions(-) diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index b8744f0323f..8f2954bdf4f 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi @@ -213,9 +213,6 @@ This section summarizes customization variables used for the configuration of the Flymake user interface. @vtable @code -@item flymake-mode-line-indicator-format -Format to use for the Flymake mode line indicator. - @item flymake-no-changes-timeout If any changes are made to the buffer, syntax check is automatically started after this many seconds, unless the user makes another change, diff --git a/etc/NEWS b/etc/NEWS index a5247a9aea8..0231c167112 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1738,11 +1738,6 @@ height of lines or width of chars. When non-nil, use a new xwidget webkit session after bookmark jump. Otherwise, it will use 'xwidget-webkit-last-session'. -** Flymake mode - -+++ -*** New user option 'flymake-mode-line-indicator-format'. - ** Flyspell mode +++ diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index e78d5d32fff..40bb90d0f15 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -1190,16 +1190,6 @@ default) no filter is applied." (put 'flymake--mode-line-format 'risky-local-variable t) -(defcustom flymake-mode-line-indicator-format " Flymake%s[%e %w %n]" - "Format to use for the Flymake mode line indicator. -The following format characters can be used: - -%s: The status. -%e: The number of errors. -%w: The number of warnings. -%n: The number of notes." - :version "28.1" - :type 'string) (defun flymake--mode-line-format () "Produce a pretty minor mode indicator." @@ -1217,97 +1207,102 @@ The following format characters can be used: diags-by-type))) (flymake--backend-state-diags state))) flymake--backend-state) - (format-spec - (propertize - flymake-mode-line-indicator-format - 'mouse-face 'mode-line-highlight - 'help-echo (concat (format "%s known backends\n" (length known)) - (format "%s running\n" (length running)) - (format "%s disabled\n" (length disabled)) - "mouse-1: Display minor mode menu\n" - "mouse-2: Show help for minor mode") - 'keymap (let ((map (make-sparse-keymap))) - (define-key map [mode-line down-mouse-1] - flymake-menu) - (define-key map [mode-line mouse-2] - (lambda () - (interactive) - (describe-function 'flymake-mode))) - map)) - (cons - (cons - ?s (pcase-let ((`(,ind ,face ,explain) - (cond ((null known) - '("?" nil "No known backends")) - (some-waiting - `("Wait" compilation-mode-line-run - ,(format "Waiting for %s running backend(s)" - (length some-waiting)))) - (all-disabled - '("!" compilation-mode-line-run - "All backends disabled")) - (t - '(nil nil nil))))) - (if (not ind) - "" - (concat - ":" (propertize ind - 'face face - 'help-echo explain - 'keymap (let ((map (make-sparse-keymap))) - (define-key map [mode-line mouse-1] - 'flymake-switch-to-log-buffer) - map)))))) - (cl-loop - with types = (hash-table-keys diags-by-type) - with _augmented = (cl-loop for extra in '(:error :warning) - do (cl-pushnew extra types - :key #'flymake--severity)) - for type in (cl-sort types #'> :key #'flymake--severity) - for diags = (gethash type diags-by-type) - for face = (flymake--lookup-type-property - type 'mode-line-face 'compilation-error) - when (or diags - (cond ((eq flymake-suppress-zero-counters t) - nil) - (flymake-suppress-zero-counters - (>= (flymake--severity type) - (warning-numeric-level - flymake-suppress-zero-counters))) - (t t))) - collect (cons - (elt (format "%s" type) 1) - (propertize - (format "%d" (length diags)) - 'face face - 'mouse-face 'mode-line-highlight - 'keymap - (let ((map (make-sparse-keymap)) - (type type)) - (define-key map (vector 'mode-line - mouse-wheel-down-event) - (lambda (event) - (interactive "e") - (with-selected-window (posn-window (event-start event)) - (flymake-goto-prev-error 1 (list type) t)))) - (define-key map (vector 'mode-line - mouse-wheel-up-event) - (lambda (event) - (interactive "e") - (with-selected-window (posn-window (event-start event)) - (flymake-goto-next-error 1 (list type) t)))) - map) - 'help-echo - (concat (format "%s diagnostics of type %s\n" - (propertize (format "%d" - (length diags)) - 'face face) - (propertize (format "%s" type) - 'face face)) - (format "%s/%s: previous/next of this type" - mouse-wheel-down-event - mouse-wheel-up-event)))))) - nil t))) + `((:propertize " Flymake" + mouse-face mode-line-highlight + help-echo + ,(concat (format "%s known backends\n" (length known)) + (format "%s running\n" (length running)) + (format "%s disabled\n" (length disabled)) + "mouse-1: Display minor mode menu\n" + "mouse-2: Show help for minor mode") + keymap + ,(let ((map (make-sparse-keymap))) + (define-key map [mode-line down-mouse-1] + flymake-menu) + (define-key map [mode-line mouse-2] + (lambda () + (interactive) + (describe-function 'flymake-mode))) + map)) + ,@(pcase-let ((`(,ind ,face ,explain) + (cond ((null known) + '("?" nil "No known backends")) + (some-waiting + `("Wait" compilation-mode-line-run + ,(format "Waiting for %s running backend(s)" + (length some-waiting)))) + (all-disabled + '("!" compilation-mode-line-run + "All backends disabled")) + (t + '(nil nil nil))))) + (when ind + `((":" + (:propertize ,ind + face ,face + help-echo ,explain + keymap + ,(let ((map (make-sparse-keymap))) + (define-key map [mode-line mouse-1] + 'flymake-switch-to-log-buffer) + map)))))) + ,@(unless (or all-disabled + (null known)) + (cl-loop + with types = (hash-table-keys diags-by-type) + with _augmented = (cl-loop for extra in '(:error :warning) + do (cl-pushnew extra types + :key #'flymake--severity)) + for type in (cl-sort types #'> :key #'flymake--severity) + for diags = (gethash type diags-by-type) + for face = (flymake--lookup-type-property type + 'mode-line-face + 'compilation-error) + when (or diags + (cond ((eq flymake-suppress-zero-counters t) + nil) + (flymake-suppress-zero-counters + (>= (flymake--severity type) + (warning-numeric-level + flymake-suppress-zero-counters))) + (t t))) + collect `(:propertize + ,(format "%d" (length diags)) + face ,face + mouse-face mode-line-highlight + keymap + ,(let ((map (make-sparse-keymap)) + (type type)) + (define-key map (vector 'mode-line + mouse-wheel-down-event) + (lambda (event) + (interactive "e") + (with-selected-window (posn-window (event-start event)) + (flymake-goto-prev-error 1 (list type) t)))) + (define-key map (vector 'mode-line + mouse-wheel-up-event) + (lambda (event) + (interactive "e") + (with-selected-window (posn-window (event-start event)) + (flymake-goto-next-error 1 (list type) t)))) + map) + help-echo + ,(concat (format "%s diagnostics of type %s\n" + (propertize (format "%d" + (length diags)) + 'face face) + (propertize (format "%s" type) + 'face face)) + (format "%s/%s: previous/next of this type" + mouse-wheel-down-event + mouse-wheel-up-event))) + into forms + finally return + `((:propertize "[") + ,@(cl-loop for (a . rest) on forms by #'cdr + collect a when rest collect + '(:propertize " ")) + (:propertize "]"))))))) ;;; Diagnostics buffer From 7fbcca29b883e68b7a92d4bc706aa0a0bd19b5a4 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 29 Dec 2020 15:36:38 +0100 Subject: [PATCH 038/116] Sync with Tramp 2.5.0 * doc/misc/trampver.texi: * lisp/net/trampver.el: Change version to "2.5.0". * test/lisp/net/tramp-tests.el (tramp--test--deftest-direct-async-process): Check, that `make-process' supports file name handlers. Suppress `internal-default-process-sentinel'. (tramp--test-async-shell-command): Set `proc' proper. (tramp-test32-shell-command-direct-async): Tag it :unstable. --- doc/misc/trampver.texi | 2 +- lisp/net/tramp-adb.el | 7 ++++++ lisp/net/trampver.el | 6 ++--- test/lisp/net/tramp-tests.el | 48 ++++++++++++++++++++---------------- 4 files changed, 38 insertions(+), 25 deletions(-) diff --git a/doc/misc/trampver.texi b/doc/misc/trampver.texi index dbebbc36812..ba98a7e31fb 100644 --- a/doc/misc/trampver.texi +++ b/doc/misc/trampver.texi @@ -8,7 +8,7 @@ @c In the Tramp GIT, the version numbers are auto-frobbed from @c tramp.el, and the bug report address is auto-frobbed from @c configure.ac. -@set trampver 2.5.0-pre +@set trampver 2.5.0 @set trampurl https://www.gnu.org/software/tramp/ @set tramp-bug-report-address tramp-devel@@gnu.org @set emacsver 25.1 diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index 9ea72668e7b..2d702b6b0af 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -1131,6 +1131,13 @@ This happens for Android >= 4.0." (if (string-match-p "[[:multibyte:]]" command) ;; Multibyte codepoints with four bytes are not supported at ;; least by toybox. + + ;; + ;; mksh uses UTF-8 internally, but is currently limited to the + ;; BMP (basic multilingua plane), which means U+0000 to + ;; U+FFFD. If you want to use SMP codepoints (U-00010000 to + ;; U-0010FFFD) on the input line, you currently have to disable + ;; the UTF-8 mode (sorry). (tramp-adb-execute-adb-command vec "shell" command) (unless neveropen (tramp-adb-maybe-open-connection vec)) diff --git a/lisp/net/trampver.el b/lisp/net/trampver.el index 30e5ba8151b..f4e470e5a8c 100644 --- a/lisp/net/trampver.el +++ b/lisp/net/trampver.el @@ -7,7 +7,7 @@ ;; Maintainer: Michael Albinus ;; Keywords: comm, processes ;; Package: tramp -;; Version: 2.5.0-pre +;; Version: 2.5.0 ;; Package-Requires: ((emacs "25.1")) ;; Package-Type: multi ;; URL: https://www.gnu.org/software/tramp/ @@ -40,7 +40,7 @@ ;; ./configure" to change them. ;;;###tramp-autoload -(defconst tramp-version "2.5.0-pre" +(defconst tramp-version "2.5.0" "This version of Tramp.") ;;;###tramp-autoload @@ -76,7 +76,7 @@ ;; Check for Emacs version. (let ((x (if (not (string-lessp emacs-version "25.1")) "ok" - (format "Tramp 2.5.0-pre is not fit for %s" + (format "Tramp 2.5.0 is not fit for %s" (replace-regexp-in-string "\n" "" (emacs-version)))))) (unless (string-equal "ok" x) (error "%s" x))) diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el index c8756627936..197eed74ee0 100644 --- a/test/lisp/net/tramp-tests.el +++ b/test/lisp/net/tramp-tests.el @@ -4475,23 +4475,30 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'." "Define ert test `TEST-direct-async' for direct async processes. If UNSTABLE is non-nil, the test is tagged as `:unstable'." (declare (indent 1)) - `(ert-deftest ,(intern (concat (symbol-name test) "-direct-async")) () - ,docstring - :tags (if ,unstable '(:expensive-test :unstable) '(:expensive-test)) - (skip-unless (tramp--test-enabled)) - (let ((default-directory tramp-test-temporary-file-directory) - (ert-test (ert-get-test ',test)) - (tramp-connection-properties - (cons '(nil "direct-async-process" t) tramp-connection-properties))) - (skip-unless (tramp-direct-async-process-p)) - ;; For whatever reason, it doesn't cooperate with the "mock" method. - (skip-unless (not (tramp--test-mock-p))) - ;; We do expect an established connection already, - ;; `file-truename' does it by side-effect. Suppress - ;; `tramp--test-enabled', in order to keep the connection. - (cl-letf (((symbol-function #'tramp--test-enabled) (lambda nil t))) - (file-truename tramp-test-temporary-file-directory) - (funcall (ert-test-body ert-test)))))) + ;; `make-process' supports file name handlers since Emacs 27. + (when (let ((file-name-handler-alist '(("" . (lambda (&rest _) t))))) + (ignore-errors (make-process :file-handler t))) + `(ert-deftest ,(intern (concat (symbol-name test) "-direct-async")) () + ,docstring + :tags (if ,unstable '(:expensive-test :unstable) '(:expensive-test)) + (skip-unless (tramp--test-enabled)) + (let ((default-directory tramp-test-temporary-file-directory) + (ert-test (ert-get-test ',test)) + (tramp-connection-properties + (cons '(nil "direct-async-process" t) + tramp-connection-properties))) + (skip-unless (tramp-direct-async-process-p)) + ;; For whatever reason, it doesn't cooperate with the "mock" method. + (skip-unless (not (tramp--test-mock-p))) + ;; We do expect an established connection already, + ;; `file-truename' does it by side-effect. Suppress + ;; `tramp--test-enabled', in order to keep the connection. + ;; Suppress "Process ... finished" messages. + (cl-letf (((symbol-function #'tramp--test-enabled) (lambda nil t)) + ((symbol-function #'internal-default-process-sentinel) + #'ignore)) + (file-truename tramp-test-temporary-file-directory) + (funcall (ert-test-body ert-test))))))) (tramp--test--deftest-direct-async-process tramp-test29-start-file-process "Check direct async `start-file-process'.") @@ -4704,8 +4711,7 @@ If UNSTABLE is non-nil, the test is tagged as `:unstable'." (command output-buffer &optional error-buffer input) "Like `async-shell-command', reading the output. INPUT, if non-nil, is a string sent to the process." - (async-shell-command command output-buffer error-buffer) - (let ((proc (get-buffer-process output-buffer)) + (let ((proc (async-shell-command command output-buffer error-buffer)) (delete-exited-processes t)) (cl-letf (((symbol-function #'shell-command-sentinel) #'ignore)) (when (stringp input) @@ -4818,7 +4824,7 @@ INPUT, if non-nil, is a string sent to the process." (should (= cols async-shell-command-width)))))) (tramp--test--deftest-direct-async-process tramp-test32-shell-command - "Check direct async `shell-command'.") + "Check direct async `shell-command'." 'unstable) ;; This test is inspired by Bug#39067. (ert-deftest tramp-test32-shell-command-dont-erase-buffer () @@ -6452,7 +6458,7 @@ process sentinels. They shall not disturb each other." (ignore-errors (delete-directory tmp-name 'recursive)))))) ;; (tramp--test--deftest-direct-async-process tramp-test43-asynchronous-requests -;; "Check parallel direct asynchronous requests.") +;; "Check parallel direct asynchronous requests." 'unstable) ;; This test is inspired by Bug#29163. (ert-deftest tramp-test44-auto-load () From b5ada7f9afc157cce2d58ad157841b65b2450fb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Engdeg=C3=A5rd?= Date: Mon, 28 Dec 2020 15:24:08 +0100 Subject: [PATCH 039/116] More readable keys in NS menu entries (bug#45502) Each menu entry now has the key binding in a right-aligned column, as an attempt to improve readability. Previously the keys were given in brackets immediately following the menu string. * src/nsmenu.m ([EmacsMenu parseKeyEquiv:]): Remove. (skipspc): New helper function. ([EmacsMenu addItemWithWidgetValue:]): Add attributes argument. Use attributed title string. Don't special-case Super bindings. ([EmacsMenu fillWithWidgetValue:]): Compute maximum width. Prepare attributes for title. --- src/nsmenu.m | 105 +++++++++++++++++++++++++++++---------------------- src/nsterm.h | 5 +-- 2 files changed, 61 insertions(+), 49 deletions(-) diff --git a/src/nsmenu.m b/src/nsmenu.m index 201c02bb35d..d5321dcdc6d 100644 --- a/src/nsmenu.m +++ b/src/nsmenu.m @@ -457,33 +457,16 @@ - (BOOL)performKeyEquivalent: (NSEvent *)theEvent } -/* Parse a widget_value's key rep (examples: 's-p', 's-S', '(C-x C-s)', '') - into an accelerator string. We are only able to display a single character - for an accelerator, together with an optional modifier combination. (Under - Carbon more control was possible, but in Cocoa multi-char strings passed to - NSMenuItem get ignored. For now we try to display a super-single letter - combo, and return the others as strings to be appended to the item title. - (This is signaled by setting keyEquivModMask to 0 for now.) */ --(NSString *)parseKeyEquiv: (const char *)key +static const char * +skipspc (const char *s) { - const char *tpos = key; - keyEquivModMask = NSEventModifierFlagCommand; - - if (!key || !*key) - return @""; - - while (*tpos == ' ' || *tpos == '(') - tpos++; - if ((*tpos == 's') && (*(tpos+1) == '-')) - { - return [NSString stringWithFormat: @"%c", tpos[2]]; - } - keyEquivModMask = 0; /* signal */ - return [NSString stringWithUTF8String: tpos]; + while (*s == ' ') + s++; + return s; } - - (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr + attributes: (NSDictionary *)attributes { NSMenuItem *item; widget_value *wv = (widget_value *)wvptr; @@ -491,36 +474,32 @@ - (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr if (menu_separator_name_p (wv->name)) { item = [NSMenuItem separatorItem]; - [self addItem: item]; } else { - NSString *title, *keyEq; - title = [NSString stringWithUTF8String: wv->name]; + NSString *title = [NSString stringWithUTF8String: wv->name]; if (title == nil) title = @"< ? >"; /* (get out in the open so we know about it) */ - keyEq = [self parseKeyEquiv: wv->key]; -#ifdef NS_IMPL_COCOA - /* macOS mangles modifier strings longer than one character. */ - if (keyEquivModMask == 0) + item = [[NSMenuItem alloc] init]; + if (wv->key) { - title = [title stringByAppendingFormat: @" (%@)", keyEq]; - item = [self addItemWithTitle: (NSString *)title - action: @selector (menuDown:) - keyEquivalent: @""]; - } - else - { -#endif - item = [self addItemWithTitle: (NSString *)title - action: @selector (menuDown:) - keyEquivalent: keyEq]; + NSString *key = [NSString stringWithUTF8String: skipspc (wv->key)]; #ifdef NS_IMPL_COCOA - } + /* Cocoa only permits a single key (with modifiers) as + keyEquivalent, so we put them in the title string + in a tab-separated column. */ + title = [title stringByAppendingFormat: @"\t%@", key]; +#else + [item setKeyEquivalent: key]; #endif - [item setKeyEquivalentModifierMask: keyEquivModMask]; + } + NSAttributedString *atitle = [[NSAttributedString alloc] + initWithString: title + attributes: attributes]; + [item setAction: @selector (menuDown:)]; + [item setAttributedTitle: atitle]; [item setEnabled: wv->enabled]; /* Draw radio buttons and tickboxes. */ @@ -533,6 +512,7 @@ - (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr [item setTag: (NSInteger)wv->call_data]; } + [self addItem: item]; return item; } @@ -557,15 +537,48 @@ -(void)removeAllItems - (void)fillWithWidgetValue: (void *)wvptr { - widget_value *wv = (widget_value *)wvptr; + widget_value *first_wv = (widget_value *)wvptr; + NSFont *menuFont = [NSFont menuFontOfSize:0]; + NSDictionary *font_attribs = @{NSFontAttributeName: menuFont}; + CGFloat maxNameWidth = 0; + CGFloat maxKeyWidth = 0; + + /* Determine the maximum width of all menu items. */ + for (widget_value *wv = first_wv; wv != NULL; wv = wv->next) + if (!menu_separator_name_p (wv->name)) + { + NSString *name = [NSString stringWithUTF8String: wv->name]; + NSSize nameSize = [name sizeWithAttributes: font_attribs]; + maxNameWidth = MAX(maxNameWidth, nameSize.width); + if (wv->key) + { + NSString *key = [NSString stringWithUTF8String: skipspc (wv->key)]; + NSSize keySize = [key sizeWithAttributes: font_attribs]; + maxKeyWidth = MAX(maxKeyWidth, keySize.width); + } + } + + /* Put some space between the names and keys. */ + CGFloat maxWidth = maxNameWidth + maxKeyWidth + 40; + + /* Set a right-aligned tab stop at the maximum width, so that the + key will appear immediately to the left of it. */ + NSTextTab *tab = + [[NSTextTab alloc] initWithTextAlignment: NSTextAlignmentRight + location: maxWidth + options: @{}]; + NSMutableParagraphStyle *pstyle = [[NSMutableParagraphStyle alloc] init]; + [pstyle setTabStops: @[tab]]; + NSDictionary *attributes = @{NSParagraphStyleAttributeName: pstyle}; /* clear existing contents */ [self removeAllItems]; /* add new contents */ - for (; wv != NULL; wv = wv->next) + for (widget_value *wv = first_wv; wv != NULL; wv = wv->next) { - NSMenuItem *item = [self addItemWithWidgetValue: wv]; + NSMenuItem *item = [self addItemWithWidgetValue: wv + attributes: attributes]; if (wv->contents) { diff --git a/src/nsterm.h b/src/nsterm.h index b7b4d3b047c..f1d5acde2e6 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -515,13 +515,12 @@ typedef id instancetype; @interface EmacsMenu : NSMenu { - unsigned long keyEquivModMask; BOOL needsUpdate; } - (void)menuNeedsUpdate: (NSMenu *)menu; /* (delegate method) */ -- (NSString *)parseKeyEquiv: (const char *)key; -- (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr; +- (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr + attributes: (NSDictionary *)attributes; - (void)fillWithWidgetValue: (void *)wvptr; - (EmacsMenu *)addSubmenuWithTitle: (const char *)title; - (void) removeAllItems; From 16bb10889dfb9a4688b8c029038a09292fdba3ef Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Tue, 29 Dec 2020 18:18:28 +0100 Subject: [PATCH 040/116] Add a regression test for Bug#24325. * test/src/process-tests.el (process-tests/fd-setsize-no-crash): New unit test. --- test/src/process-tests.el | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/test/src/process-tests.el b/test/src/process-tests.el index e15ad47f968..daf49759500 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -368,5 +368,40 @@ See Bug#30460." "Check that looking up non-existent domain returns nil" (should (eq nil (network-lookup-address-info "emacs.invalid")))) +(ert-deftest process-tests/fd-setsize-no-crash () + "Check that Emacs doesn't crash when trying to use more than +FD_SETSIZE file descriptors (Bug#24325)." + (let ((sleep (executable-find "sleep")) + ;; FD_SETSIZE is typically 1024 on Unix-like systems. + (fd-setsize 1024) + ;; `make-process' allocates at least four file descriptors per process + ;; when using the pipe communication method. However, it closes two of + ;; them in the parent process, so we end up with only two new + ;; descriptors per process. + (fds-per-process 2) + (processes ())) + (skip-unless sleep) + ;; Start processes until we exhaust the file descriptor set size. + (dotimes (i (1+ (/ fd-setsize fds-per-process))) + (let ((process + ;; Failure to allocate more file descriptors should signal + ;; `file-error', but not crash. Since we don't know the exact + ;; limit, we ignore `file-error'. + (ignore-error 'file-error + (make-process :name (format "test %d" i) + :buffer nil + :command (list sleep "5") + :coding 'no-conversion + :noquery t + :connection-type 'pipe)))) + (when process (push process processes)))) + ;; We should have managed to start at least one process. + (should processes) + (dolist (process processes) + (while (accept-process-output process)) + (should (eq (process-status process) 'exit)) + (should (eql (process-exit-status process) 0)) + (delete-process process)))) + (provide 'process-tests) ;; process-tests.el ends here. From 154d4b856fb9cfbe8b595a7894e7318e29cefdea Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 29 Dec 2020 18:40:23 +0100 Subject: [PATCH 041/116] Instrument process-tests.el for timeouts on emba --- test/src/process-tests.el | 57 ++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/test/src/process-tests.el b/test/src/process-tests.el index daf49759500..464541a9387 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -47,13 +47,15 @@ (ert-deftest process-test-sentinel-accept-process-output () (skip-unless (executable-find "bash")) + (with-timeout (60) (should (process-test-sentinel-wait-function-working-p - #'accept-process-output))) + #'accept-process-output)))) (ert-deftest process-test-sentinel-sit-for () (skip-unless (executable-find "bash")) + (with-timeout (60) (should - (process-test-sentinel-wait-function-working-p (lambda () (sit-for 0.01 t))))) + (process-test-sentinel-wait-function-working-p (lambda () (sit-for 0.01 t)))))) (when (eq system-type 'windows-nt) (ert-deftest process-test-quoted-batfile () @@ -79,6 +81,7 @@ (ert-deftest process-test-stderr-buffer () (skip-unless (executable-find "bash")) + (with-timeout (60) (let* ((stdout-buffer (generate-new-buffer "*stdout*")) (stderr-buffer (generate-new-buffer "*stderr*")) (proc (make-process :name "test" @@ -103,10 +106,11 @@ (looking-at "hello stdout!"))) (should (with-current-buffer stderr-buffer (goto-char (point-min)) - (looking-at "hello stderr!"))))) + (looking-at "hello stderr!")))))) (ert-deftest process-test-stderr-filter () (skip-unless (executable-find "bash")) + (with-timeout (60) (let* ((sentinel-called nil) (stderr-sentinel-called nil) (stdout-output nil) @@ -145,10 +149,11 @@ (should (equal 1 (with-current-buffer stderr-buffer (point-max)))) (should (equal "hello stderr!\n" - (mapconcat #'identity (nreverse stderr-output) ""))))) + (mapconcat #'identity (nreverse stderr-output) "")))))) (ert-deftest set-process-filter-t () "Test setting process filter to t and back." ;; Bug#36591 + (with-timeout (60) (with-temp-buffer (let* ((print-level nil) (print-length nil) @@ -180,11 +185,12 @@ (line-beginning-position) (point-max)) "2> ")) (accept-process-output proc)) ; Read "Two". - (should (equal (buffer-string) "0> one\n1> two\n2> "))))) + (should (equal (buffer-string) "0> one\n1> two\n2> ")))))) (ert-deftest start-process-should-not-modify-arguments () "`start-process' must not modify its arguments in-place." ;; See bug#21831. + (with-timeout (60) (let* ((path (pcase system-type ((or 'windows-nt 'ms-dos) ;; Make sure the file name uses forward slashes. @@ -198,11 +204,12 @@ (should (process-live-p (condition-case nil (start-process "" nil path) (error nil)))) - (should (equal path samepath)))) + (should (equal path samepath))))) (ert-deftest make-process/noquery-stderr () "Checks that Bug#30031 is fixed." (skip-unless (executable-find "sleep")) + (with-timeout (60) (with-temp-buffer (let* ((previous-processes (process-list)) (process (make-process :name "sleep" @@ -217,7 +224,7 @@ (should new-processes) (dolist (process new-processes) (should-not (process-query-on-exit-flag process)))) - (kill-process process))))) + (kill-process process)))))) ;; Return t if OUTPUT could have been generated by merging the INPUTS somehow. (defun process-tests--mixable (output &rest inputs) @@ -233,6 +240,7 @@ (ert-deftest make-process/mix-stderr () "Check that `make-process' mixes the output streams if STDERR is nil." (skip-unless (executable-find "bash")) + (with-timeout (60) ;; Frequent random (?) failures on hydra.nixos.org, with no process output. ;; Maybe this test should be tagged unstable? See bug#31214. (skip-unless (not (getenv "EMACS_HYDRA_CI"))) @@ -251,11 +259,12 @@ (should (eq (process-exit-status process) 0)) (should (process-tests--mixable (string-to-list (buffer-string)) (string-to-list "stdout\n") - (string-to-list "stderr\n")))))) + (string-to-list "stderr\n"))))))) (ert-deftest make-process-w32-debug-spawn-error () "Check that debugger runs on `make-process' failure (Bug#33016)." (skip-unless (eq system-type 'windows-nt)) + (with-timeout (60) (let* ((debug-on-error t) (have-called-debugger nil) (debugger (lambda (&rest _) @@ -271,11 +280,12 @@ ;; code. (make-process :name "test" :command '("c:/No-Such-Command")) (error :got-error)))) - (should have-called-debugger))) + (should have-called-debugger)))) (ert-deftest make-process/file-handler/found () "Check that the ‘:file-handler’ argument of ‘make-process’ works as expected if a file name handler is found." + (with-timeout (60) (let ((file-handler-calls 0)) (cl-flet ((file-handler (&rest args) @@ -292,27 +302,29 @@ works as expected if a file name handler is found." :command '("/some/binary") :file-handler t) 'fake-process)) - (should (= file-handler-calls 1)))))) + (should (= file-handler-calls 1))))))) (ert-deftest make-process/file-handler/not-found () "Check that the ‘:file-handler’ argument of ‘make-process’ works as expected if no file name handler is found." + (with-timeout (60) (let ((file-name-handler-alist ()) (default-directory invocation-directory) (program (expand-file-name invocation-name invocation-directory))) (should (processp (make-process :name "name" :command (list program "--version") - :file-handler t))))) + :file-handler t)))))) (ert-deftest make-process/file-handler/disable () "Check ‘make-process’ works as expected if it shouldn’t use the file name handler." + (with-timeout (60) (let ((file-name-handler-alist (list (cons (rx bos "test-handler:") #'process-tests--file-handler))) (default-directory "test-handler:/dir/") (program (expand-file-name invocation-name invocation-directory))) (should (processp (make-process :name "name" - :command (list program "--version")))))) + :command (list program "--version"))))))) (defun process-tests--file-handler (operation &rest _args) (cl-ecase operation @@ -325,11 +337,12 @@ file name handler." (ert-deftest make-process/stop () "Check that `make-process' doesn't accept a `:stop' key. See Bug#30460." + (with-timeout (60) (should-error (make-process :name "test" :command (list (expand-file-name invocation-name invocation-directory)) - :stop t))) + :stop t)))) ;; All the following tests require working DNS, which appears not to ;; be the case for hydra.nixos.org, so disable them there for now. @@ -337,40 +350,46 @@ See Bug#30460." (ert-deftest lookup-family-specification () "network-lookup-address-info should only accept valid family symbols." (skip-unless (not (getenv "EMACS_HYDRA_CI"))) + (with-timeout (60) (should-error (network-lookup-address-info "google.com" 'both)) (should (network-lookup-address-info "google.com" 'ipv4)) (when (featurep 'make-network-process '(:family ipv6)) - (should (network-lookup-address-info "google.com" 'ipv6)))) + (should (network-lookup-address-info "google.com" 'ipv6))))) (ert-deftest lookup-unicode-domains () "Unicode domains should fail" (skip-unless (not (getenv "EMACS_HYDRA_CI"))) + (with-timeout (60) (should-error (network-lookup-address-info "faß.de")) - (should (network-lookup-address-info (puny-encode-domain "faß.de")))) + (should (network-lookup-address-info (puny-encode-domain "faß.de"))))) (ert-deftest unibyte-domain-name () "Unibyte domain names should work" (skip-unless (not (getenv "EMACS_HYDRA_CI"))) - (should (network-lookup-address-info (string-to-unibyte "google.com")))) + (with-timeout (60) + (should (network-lookup-address-info (string-to-unibyte "google.com"))))) (ert-deftest lookup-google () "Check that we can look up google IP addresses" (skip-unless (not (getenv "EMACS_HYDRA_CI"))) + (with-timeout (60) (let ((addresses-both (network-lookup-address-info "google.com")) (addresses-v4 (network-lookup-address-info "google.com" 'ipv4))) (should addresses-both) (should addresses-v4)) (when (featurep 'make-network-process '(:family ipv6)) - (should (network-lookup-address-info "google.com" 'ipv6)))) + (should (network-lookup-address-info "google.com" 'ipv6))))) (ert-deftest non-existent-lookup-failure () (skip-unless (not (getenv "EMACS_HYDRA_CI"))) + (with-timeout (60) "Check that looking up non-existent domain returns nil" - (should (eq nil (network-lookup-address-info "emacs.invalid")))) + (should (eq nil (network-lookup-address-info "emacs.invalid"))))) (ert-deftest process-tests/fd-setsize-no-crash () "Check that Emacs doesn't crash when trying to use more than FD_SETSIZE file descriptors (Bug#24325)." + (with-timeout (60) (let ((sleep (executable-find "sleep")) ;; FD_SETSIZE is typically 1024 on Unix-like systems. (fd-setsize 1024) @@ -401,7 +420,7 @@ FD_SETSIZE file descriptors (Bug#24325)." (while (accept-process-output process)) (should (eq (process-status process) 'exit)) (should (eql (process-exit-status process) 0)) - (delete-process process)))) + (delete-process process))))) (provide 'process-tests) ;; process-tests.el ends here. From 3e80653d2970872c1b7cbd46cc9c5f7b289ca672 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Tue, 29 Dec 2020 20:24:46 +0200 Subject: [PATCH 042/116] xref-show-definitions-completing-read: Tune up completion * lisp/minibuffer.el (completion-category-defaults) Use 'substring' completion style for 'xref-location' category by default. * lisp/progmodes/xref.el (xref-show-definitions-completing-read): Assign the 'xref-location' category to the completions. Pass REQUIRE-MATCH=t. --- lisp/minibuffer.el | 1 + lisp/progmodes/xref.el | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index dc37c5f4476..441eca214bd 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -956,6 +956,7 @@ styles for specific categories, such as files, buffers, etc." ;; A new style that combines substring and pcm might be better, ;; e.g. one that does not anchor to bos. (project-file (styles . (substring))) + (xref-location (styles . (substring))) (info-menu (styles . (basic substring)))) "Default settings for specific completion categories. Each entry has the shape (CATEGORY . ALIST) where ALIST is diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index b8a5d481190..6f7125670bd 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -1018,9 +1018,17 @@ between them by typing in the minibuffer with completion." (setq xref (if (not (cdr xrefs)) (car xrefs) - (cdr (assoc (completing-read "Jump to definition: " - (reverse xref-alist-with-line-info)) - xref-alist-with-line-info)))) + (let* ((collection (reverse xref-alist-with-line-info)) + (ctable + (lambda (string pred action) + (cond + ((eq action 'metadata) + '(metadata . ((category . xref-location)))) + (t + (complete-with-action action collection string pred)))))) + (cdr (assoc (completing-read "Choose definition: " + ctable nil t) + collection))))) (xref-pop-to-location xref (assoc-default 'display-action alist)))) From 0326cddc7bb2a90924af200057b4e2ef263924c8 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 29 Dec 2020 20:41:46 +0200 Subject: [PATCH 043/116] Fix process-tests on MS-Windows * test/src/process-tests.el (process-tests/fd-setsize-no-crash): Skip this test on windows-nt systems, as we cannot use more than FD_SETSIZE file descriptors there: if we try, we crash. --- test/src/process-tests.el | 1 + 1 file changed, 1 insertion(+) diff --git a/test/src/process-tests.el b/test/src/process-tests.el index 464541a9387..3272044afcc 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -389,6 +389,7 @@ See Bug#30460." (ert-deftest process-tests/fd-setsize-no-crash () "Check that Emacs doesn't crash when trying to use more than FD_SETSIZE file descriptors (Bug#24325)." + (skip-unless (not (eq system-type 'windows-nt))) (with-timeout (60) (let ((sleep (executable-find "sleep")) ;; FD_SETSIZE is typically 1024 on Unix-like systems. From baac3562a669ef4570cc258b5e6fc6472a6c9407 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 29 Dec 2020 21:30:59 +0200 Subject: [PATCH 044/116] A better fix for process-tests on MS-Windows * src/w32.c (pipe2): When forcibly closing pipe handles due to overflow of FD_SETSIZE, set the handles to -1, to avoid assertion violations in emacs_close. * test/src/process-tests.el (process-tests/fd-setsize-no-crash): No need to skip this test anymore. --- src/w32.c | 5 +++++ test/src/process-tests.el | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/w32.c b/src/w32.c index 5ebae324c20..56c78a0d229 100644 --- a/src/w32.c +++ b/src/w32.c @@ -8667,6 +8667,11 @@ pipe2 (int * phandles, int pipe2_flags) { _close (phandles[0]); _close (phandles[1]); + /* Since we close the handles, set them to -1, so as to + avoid an assertion violation if the caller then tries to + close the handle again (emacs_close will abort otherwise + if errno is EBADF). */ + phandles[0] = phandles[1] = -1; errno = EMFILE; rc = -1; } diff --git a/test/src/process-tests.el b/test/src/process-tests.el index 3272044afcc..aeb5b750212 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -389,11 +389,12 @@ See Bug#30460." (ert-deftest process-tests/fd-setsize-no-crash () "Check that Emacs doesn't crash when trying to use more than FD_SETSIZE file descriptors (Bug#24325)." - (skip-unless (not (eq system-type 'windows-nt))) (with-timeout (60) (let ((sleep (executable-find "sleep")) ;; FD_SETSIZE is typically 1024 on Unix-like systems. - (fd-setsize 1024) + ;; On MS-Windows we artificially limit FD_SETSIZE to 64, + ;; see the commentary in w32proc.c. + (fd-setsize (if (eq system-type 'windows-nt) 64 1024)) ;; `make-process' allocates at least four file descriptors per process ;; when using the pipe communication method. However, it closes two of ;; them in the parent process, so we end up with only two new From c13937ccb6c9ebf7a1dd9eaa7eb6bb3768409093 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Tue, 29 Dec 2020 21:37:31 +0200 Subject: [PATCH 045/116] * lisp/x-dnd.el (x-dnd-get-drop-x-y): Add safer check for top/left (bug#45277) --- lisp/x-dnd.el | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lisp/x-dnd.el b/lisp/x-dnd.el index 1d49f462531..5af54903605 100644 --- a/lisp/x-dnd.el +++ b/lisp/x-dnd.el @@ -411,8 +411,10 @@ Coordinates are required to be absolute. FRAME is the frame and W is the window where the drop happened. If W is a window, return its absolute coordinates, otherwise return the frame coordinates." - (let* ((frame-left (frame-parameter frame 'left)) - (frame-top (frame-parameter frame 'top))) + (let* ((frame-left (or (car-safe (cdr-safe (frame-parameter frame 'left))) + (frame-parameter frame 'left))) + (frame-top (or (car-safe (cdr-safe (frame-parameter frame 'top))) + (frame-parameter frame 'top)))) (if (windowp w) (let ((edges (window-inside-pixel-edges w))) (cons From 0a82e66db42a5cb81cf54b904c20410cf9218f8f Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Tue, 29 Dec 2020 21:41:24 +0200 Subject: [PATCH 046/116] Use explicit "--color=auto" in grep mode to support both GNU grep and ripgrep * lisp/progmodes/grep.el (grep-highlight-matches): (grep-compute-defaults, grep-expand-template): Use "--color=auto" instead of "--color" (bug#44983). --- lisp/progmodes/grep.el | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index 5dc99cc7e93..ef73dac4c0a 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -79,7 +79,7 @@ This option sets the environment variable GREP_COLORS to specify markers for highlighting and adds the --color option in front of any explicit grep options before starting the grep. -When this option is `auto', grep uses `--color' to highlight +When this option is `auto', grep uses `--color=auto' to highlight matches only when it outputs to a terminal (when `grep' is the last command in the pipe), thus avoiding the use of any potentially-harmful escape sequences when standard output goes to a file or pipe. @@ -95,7 +95,7 @@ To change the default value, use \\[customize] or call the function :type '(choice (const :tag "Do not highlight matches with grep markers" nil) (const :tag "Highlight matches with grep markers" t) (const :tag "Use --color=always" always) - (const :tag "Use --color" auto) + (const :tag "Use --color=auto" auto) (other :tag "Not Set" auto-detect)) :set #'grep-apply-setting :version "22.1") @@ -743,7 +743,7 @@ The value depends on `grep-command', `grep-template', `(nil nil nil "--color" "x" ,(null-device)) nil 1) (if (eq grep-highlight-matches 'always) - "--color=always" "--color")) + "--color=always" "--color=auto")) "") grep-options))) (unless grep-template @@ -1000,7 +1000,7 @@ these include `opts', `dir', `files', `null-device', `excl' and ((eq grep-highlight-matches 'always) (push "--color=always" opts)) ((eq grep-highlight-matches 'auto) - (push "--color" opts))) + (push "--color=auto" opts))) opts)) (excl . ,excl) (dir . ,dir) From a88f63500e475f842e5fbdd9abba4ce122cdb082 Mon Sep 17 00:00:00 2001 From: Artem Loenko Date: Tue, 29 Dec 2020 20:41:14 +0100 Subject: [PATCH 047/116] * src/Makefile.in (DO_CODESIGN): Fix architecture for Apple Silicon --- src/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile.in b/src/Makefile.in index 19304cca040..39c0f12fe6c 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -338,7 +338,7 @@ HAVE_PDUMPER = @HAVE_PDUMPER@ ## ARM Macs require that all code have a valid signature. Since pump ## invalidates the signature, we must re-sign to fix it. -DO_CODESIGN=$(patsubst arm-apple-darwin%,yes,@configuration@) +DO_CODESIGN=$(patsubst aarch64-apple-darwin%,yes,@configuration@) # 'make' verbosity. AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ From 90bd3b3d69d40339127b4744c459cedb7eb962b0 Mon Sep 17 00:00:00 2001 From: Alan Third Date: Tue, 29 Dec 2020 20:29:00 +0000 Subject: [PATCH 048/116] Don't calculate macOS menu data for GNUstep (bug#45502) * src/nsmenu.m ([EmacsMenu fillWithWidgetValue:]): #ifdef out code that has no effect on GNUstep and autorelease alloc'd objects. --- src/nsmenu.m | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/nsmenu.m b/src/nsmenu.m index d5321dcdc6d..ac36150915a 100644 --- a/src/nsmenu.m +++ b/src/nsmenu.m @@ -539,6 +539,12 @@ - (void)fillWithWidgetValue: (void *)wvptr { widget_value *first_wv = (widget_value *)wvptr; NSFont *menuFont = [NSFont menuFontOfSize:0]; + NSDictionary *attributes = nil; + +#ifdef NS_IMPL_COCOA + /* Cocoa doesn't allow multi-key chording in its menu display, so + work around it by using tabs to split the title into two + columns. */ NSDictionary *font_attribs = @{NSFontAttributeName: menuFont}; CGFloat maxNameWidth = 0; CGFloat maxKeyWidth = 0; @@ -564,12 +570,14 @@ - (void)fillWithWidgetValue: (void *)wvptr /* Set a right-aligned tab stop at the maximum width, so that the key will appear immediately to the left of it. */ NSTextTab *tab = - [[NSTextTab alloc] initWithTextAlignment: NSTextAlignmentRight - location: maxWidth - options: @{}]; - NSMutableParagraphStyle *pstyle = [[NSMutableParagraphStyle alloc] init]; + [[[NSTextTab alloc] initWithTextAlignment: NSTextAlignmentRight + location: maxWidth + options: @{}] autorelease]; + NSMutableParagraphStyle *pstyle = [[[NSMutableParagraphStyle alloc] init] + autorelease]; [pstyle setTabStops: @[tab]]; - NSDictionary *attributes = @{NSParagraphStyleAttributeName: pstyle}; + attributes = @{NSParagraphStyleAttributeName: pstyle}; +#endif /* clear existing contents */ [self removeAllItems]; From fdb725c3847feeccb7396519eea1758428370107 Mon Sep 17 00:00:00 2001 From: Tobias Rittweiler Date: Tue, 8 Dec 2020 09:59:15 +0100 Subject: [PATCH 049/116] Minor refactoring of xref-tests * test/lisp/progmodes/xref-tests.el (xref-tests-data-dir): Rename to 'xref-tests--data-dir'. (xref-tests--matches-in-data-dir, xref-tests--locations-in-data-dir): New functions. Factored out from test cases and updated usage sites to use them. --- test/lisp/progmodes/xref-tests.el | 38 ++++++++++++++++++------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/test/lisp/progmodes/xref-tests.el b/test/lisp/progmodes/xref-tests.el index e220d09dada..e1efbe8a4eb 100644 --- a/test/lisp/progmodes/xref-tests.el +++ b/test/lisp/progmodes/xref-tests.el @@ -27,27 +27,34 @@ (require 'xref) (require 'cl-lib) -(defvar xref-tests-data-dir +(defvar xref-tests--data-dir (expand-file-name "xref-resources/" (file-name-directory (or load-file-name buffer-file-name)))) +(defun xref-tests--matches-in-data-dir (regexp &optional files) + (xref-matches-in-directory regexp (or files "*") xref-tests--data-dir nil)) + +(defun xref-tests--locations-in-data-dir (regexp &optional files) + (let ((matches (xref-tests--matches-in-data-dir regexp files))) + ;; Sort in order to guarantee an order independent from the + ;; filesystem traversal. + (cl-sort (mapcar #'xref-item-location matches) + #'string< + :key #'xref-location-group))) + (ert-deftest xref-matches-in-directory-finds-none-for-some-regexp () - (should (null (xref-matches-in-directory "zzz" "*" xref-tests-data-dir nil)))) + (should (null (xref-tests--matches-in-data-dir "zzz")))) (ert-deftest xref-matches-in-directory-finds-some-for-bar () - (let* ((matches (xref-matches-in-directory "bar" "*" xref-tests-data-dir nil)) - (locs (cl-sort (mapcar #'xref-item-location matches) - #'string< - :key #'xref-location-group))) - (should (= 2 (length matches))) + (let ((locs (xref-tests--locations-in-data-dir "bar"))) + (should (= 2 (length locs))) (should (string-match-p "file1\\.txt\\'" (xref-location-group (nth 0 locs)))) (should (string-match-p "file2\\.txt\\'" (xref-location-group (nth 1 locs)))))) (ert-deftest xref-matches-in-directory-finds-two-matches-on-the-same-line () - (let* ((matches (xref-matches-in-directory "foo" "*" xref-tests-data-dir nil)) - (locs (mapcar #'xref-item-location matches))) - (should (= 2 (length matches))) + (let ((locs (xref-tests--locations-in-data-dir "foo"))) + (should (= 2 (length locs))) (should (string-match-p "file1\\.txt\\'" (xref-location-group (nth 0 locs)))) (should (string-match-p "file1\\.txt\\'" (xref-location-group (nth 1 locs)))) (should (equal 1 (xref-location-line (nth 0 locs)))) @@ -56,15 +63,14 @@ (should (equal 4 (xref-location-column (nth 1 locs)))))) (ert-deftest xref-matches-in-directory-finds-an-empty-line-regexp-match () - (let* ((matches (xref-matches-in-directory "^$" "*" xref-tests-data-dir nil)) - (locs (mapcar #'xref-item-location matches))) - (should (= 1 (length matches))) + (let ((locs (xref-tests--locations-in-data-dir "^$"))) + (should (= 1 (length locs))) (should (string-match-p "file2\\.txt\\'" (xref-location-group (nth 0 locs)))) (should (equal 1 (xref-location-line (nth 0 locs)))) (should (equal 0 (xref-location-column (nth 0 locs)))))) (ert-deftest xref--buf-pairs-iterator-groups-markers-by-buffers-1 () - (let* ((xrefs (xref-matches-in-directory "foo" "*" xref-tests-data-dir nil)) + (let* ((xrefs (xref-tests--matches-in-data-dir "foo")) (iter (xref--buf-pairs-iterator xrefs)) (cons (funcall iter :next))) (should (null (funcall iter :next))) @@ -72,7 +78,7 @@ (should (= 2 (length (cdr cons)))))) (ert-deftest xref--buf-pairs-iterator-groups-markers-by-buffers-2 () - (let* ((xrefs (xref-matches-in-directory "bar" "*" xref-tests-data-dir nil)) + (let* ((xrefs (xref-tests--matches-in-data-dir "bar")) (iter (xref--buf-pairs-iterator xrefs)) (cons1 (funcall iter :next)) (cons2 (funcall iter :next))) @@ -82,7 +88,7 @@ (should (= 1 (length (cdr cons2)))))) (ert-deftest xref--buf-pairs-iterator-cleans-up-markers () - (let* ((xrefs (xref-matches-in-directory "bar" "*" xref-tests-data-dir nil)) + (let* ((xrefs (xref-tests--matches-in-data-dir "bar")) (iter (xref--buf-pairs-iterator xrefs)) (cons1 (funcall iter :next)) (cons2 (funcall iter :next))) From cfb0f1c07ca97536fdc0e472e0f14c38c982df2b Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Wed, 30 Dec 2020 03:30:56 +0100 Subject: [PATCH 050/116] Add caveat about the `long' `mode-line-compact' setting * doc/lispref/modes.texi (Mode Line Basics): Elaborate on the `long' setting. --- doc/lispref/modes.texi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index 40edc90a6af..5ac33691c91 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -1936,8 +1936,10 @@ the end of the mode line off to the right. Emacs can ``compress'' the mode line if the @code{mode-line-compact} variable is non-@code{nil} by turning stretches of spaces into a single space. If this variable is @code{long}, this is only done when the mode line is wider than the -currently selected window. This variable can be buffer-local to only -compress mode-lines in certain buffers. +currently selected window. (This computation is approximate, based on +the number of characters, and not their displayed width.) This +variable can be buffer-local to only compress mode-lines in certain +buffers. @node Mode Line Data @subsection The Data Structure of the Mode Line From dc308c80ee5825d237ac535247f48d0237a24dad Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Wed, 30 Dec 2020 03:34:17 +0100 Subject: [PATCH 051/116] Improve the `long' computation of `mode-line-compact' * src/xdisp.c (display_mode_line): Compute `long' based on total window width, and use the passed-in window instead of the selected window. --- src/xdisp.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/xdisp.c b/src/xdisp.c index 7ad6b1b1892..7b430041f98 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -25467,8 +25467,7 @@ display_mode_line (struct window *w, enum face_id face_id, Lisp_Object format) { Lisp_Object mode_string = Fformat_mode_line (format, Qnil, Qnil, Qnil); if (EQ (Vmode_line_compact, Qlong) - && window_body_width (XWINDOW (selected_window), false) >= - SCHARS (mode_string)) + && WINDOW_TOTAL_COLS (w) >= SCHARS (mode_string)) { /* The window is wide enough; just display the mode line we just computed. */ From b4fd857ead728a06380250c5336c1ab94a7c2f7a Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Wed, 30 Dec 2020 04:48:13 +0100 Subject: [PATCH 052/116] Switch add-to-ordered-list to eql * doc/lispref/lists.texi (List Variables): Update documentation. * lisp/subr.el (add-to-ordered-list): Switch to eql (bug#45539). --- doc/lispref/lists.texi | 2 +- etc/NEWS | 2 ++ lisp/subr.el | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi index ae793d5e15e..2e5b193d840 100644 --- a/doc/lispref/lists.texi +++ b/doc/lispref/lists.texi @@ -812,7 +812,7 @@ This function sets the variable @var{symbol} by inserting @var{element} into the old value, which must be a list, at the position specified by @var{order}. If @var{element} is already a member of the list, its position in the list is adjusted according -to @var{order}. Membership is tested using @code{eq}. +to @var{order}. Membership is tested using @code{eql}. This function returns the resulting list, whether updated or not. The @var{order} is typically a number (integer or float), and the diff --git a/etc/NEWS b/etc/NEWS index 0231c167112..e4189998340 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1861,6 +1861,8 @@ directory instead of the default directory. * Incompatible Lisp Changes in Emacs 28.1 +** 'add-to-ordered-list' now uses 'eql' instead of 'eq'. + ** 'set-process-buffer' now updates the process mark. The mark will be set to point to the end of the new buffer. diff --git a/lisp/subr.el b/lisp/subr.el index 384dbb25cf8..b3f00cc1782 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1973,7 +1973,7 @@ can do the job." (defun add-to-ordered-list (list-var element &optional order) "Add ELEMENT to the value of LIST-VAR if it isn't there yet. -The test for presence of ELEMENT is done with `eq'. +The test for presence of ELEMENT is done with `eql'. The resulting list is reordered so that the elements are in the order given by each element's numeric list order. Elements @@ -1993,7 +1993,7 @@ The return value is the new value of LIST-VAR." (let ((ordering (get list-var 'list-order))) (unless ordering (put list-var 'list-order - (setq ordering (make-hash-table :weakness 'key :test 'eq)))) + (setq ordering (make-hash-table :weakness 'key)))) (when order (puthash element (and (numberp order) order) ordering)) (unless (memq element (symbol-value list-var)) From 2d58e0e803fb5fe397d446d58a0d83f0d35b4fc4 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Wed, 30 Dec 2020 08:29:38 +0100 Subject: [PATCH 053/116] Add some char-table tests * test/src/chartab-tests.el (chartab-test-char-table-p) (chartab-test-char-table-subtype) (chartab-test-char-table-parent) (chartab-test-char-table-extra-slot): New tests. --- test/src/chartab-tests.el | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/src/chartab-tests.el b/test/src/chartab-tests.el index 4d52dc367c8..0a8d8bcdf7d 100644 --- a/test/src/chartab-tests.el +++ b/test/src/chartab-tests.el @@ -49,5 +49,25 @@ (#xe0e00 . #xe0ef6) ))) +(ert-deftest chartab-test-char-table-p () + (should (char-table-p (make-char-table 'foo))) + (should (not (char-table-p (make-hash-table))))) + +(ert-deftest chartab-test-char-table-subtype () + (should (eq (char-table-subtype (make-char-table 'foo)) 'foo))) + +(ert-deftest chartab-test-char-table-parent () + (should (eq (char-table-parent (make-char-table 'foo)) nil)) + (let ((parent (make-char-table 'foo)) + (child (make-char-table 'bar))) + (set-char-table-parent child parent) + (should (eq (char-table-parent child) parent)))) + +(ert-deftest chartab-test-char-table-extra-slot () + ;; Use any type with extra slots, e.g. 'case-table. + (let ((tbl (make-char-table 'case-table))) + (set-char-table-extra-slot tbl 1 'bar) + (char-table-extra-slot tbl 1))) + (provide 'chartab-tests) ;;; chartab-tests.el ends here From 4b6fcb072ab56c472805ecdcdf86f5bada98c1cc Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Wed, 30 Dec 2020 08:36:04 +0100 Subject: [PATCH 054/116] ; Fix my previous commit * test/src/chartab-tests.el (chartab-test-char-table-extra-slot): Fix test. --- test/src/chartab-tests.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/src/chartab-tests.el b/test/src/chartab-tests.el index 0a8d8bcdf7d..98893e55fe2 100644 --- a/test/src/chartab-tests.el +++ b/test/src/chartab-tests.el @@ -67,7 +67,7 @@ ;; Use any type with extra slots, e.g. 'case-table. (let ((tbl (make-char-table 'case-table))) (set-char-table-extra-slot tbl 1 'bar) - (char-table-extra-slot tbl 1))) + (should (eq (char-table-extra-slot tbl 1) 'bar)))) (provide 'chartab-tests) ;;; chartab-tests.el ends here From 3c0c47b3a74c4ea851293d0869f956a4644af062 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Wed, 30 Dec 2020 08:07:27 +0100 Subject: [PATCH 055/116] Revert "Switch add-to-ordered-list to eql" This reverts commit b4fd857ead728a06380250c5336c1ab94a7c2f7a. I misunderstood the purposed of the function. --- doc/lispref/lists.texi | 2 +- etc/NEWS | 2 -- lisp/subr.el | 4 ++-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi index 2e5b193d840..ae793d5e15e 100644 --- a/doc/lispref/lists.texi +++ b/doc/lispref/lists.texi @@ -812,7 +812,7 @@ This function sets the variable @var{symbol} by inserting @var{element} into the old value, which must be a list, at the position specified by @var{order}. If @var{element} is already a member of the list, its position in the list is adjusted according -to @var{order}. Membership is tested using @code{eql}. +to @var{order}. Membership is tested using @code{eq}. This function returns the resulting list, whether updated or not. The @var{order} is typically a number (integer or float), and the diff --git a/etc/NEWS b/etc/NEWS index e4189998340..0231c167112 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1861,8 +1861,6 @@ directory instead of the default directory. * Incompatible Lisp Changes in Emacs 28.1 -** 'add-to-ordered-list' now uses 'eql' instead of 'eq'. - ** 'set-process-buffer' now updates the process mark. The mark will be set to point to the end of the new buffer. diff --git a/lisp/subr.el b/lisp/subr.el index b3f00cc1782..384dbb25cf8 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1973,7 +1973,7 @@ can do the job." (defun add-to-ordered-list (list-var element &optional order) "Add ELEMENT to the value of LIST-VAR if it isn't there yet. -The test for presence of ELEMENT is done with `eql'. +The test for presence of ELEMENT is done with `eq'. The resulting list is reordered so that the elements are in the order given by each element's numeric list order. Elements @@ -1993,7 +1993,7 @@ The return value is the new value of LIST-VAR." (let ((ordering (get list-var 'list-order))) (unless ordering (put list-var 'list-order - (setq ordering (make-hash-table :weakness 'key)))) + (setq ordering (make-hash-table :weakness 'key :test 'eq)))) (when order (puthash element (and (numberp order) order) ordering)) (unless (memq element (symbol-value list-var)) From dc771b6c409c016dec6aea394d574de1cca3c583 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Wed, 30 Dec 2020 08:29:06 +0100 Subject: [PATCH 056/116] Also count symbol plists in memory-report * lisp/emacs-lisp/memory-report.el (memory-report--symbol-plist): New function. (memory-report): Use it. --- lisp/emacs-lisp/memory-report.el | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lisp/emacs-lisp/memory-report.el b/lisp/emacs-lisp/memory-report.el index 332749987c4..1cb9ad15316 100644 --- a/lisp/emacs-lisp/memory-report.el +++ b/lisp/emacs-lisp/memory-report.el @@ -48,6 +48,7 @@ by counted more than once." (message "Gathering data...") (let ((reports (append (memory-report--garbage-collect) (memory-report--image-cache) + (memory-report--symbol-plist) (memory-report--buffers) (memory-report--largest-variables))) (inhibit-read-only t) @@ -159,6 +160,17 @@ by counted more than once." "\n")) (buffer-string))))) +(defun memory-report--symbol-plist () + (let ((counted (make-hash-table :test #'eq)) + (total 0)) + (mapatoms + (lambda (symbol) + (cl-incf total (memory-report--object-size + counted (symbol-plist symbol)))) + obarray) + (list + (cons "Memory Used By Symbol Plists" total)))) + (defun memory-report--object-size (counted value) (if (gethash value counted) 0 From d22fa9eb67925ba341ef5b0da8a432a76cbb6af1 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Wed, 30 Dec 2020 09:43:38 +0100 Subject: [PATCH 057/116] Minor cleanup in keymap.c * src/keymap.c (get_keymap, keymap_parent, Fset_keymap_parent) (store_in_keymap, Fdefine_key, Flookup_key, define_as_prefix) (silly_event_symbol_error, current_minor_maps) (Fcurrent_active_maps, Fkey_binding, Flocal_key_binding) (Fminor_mode_key_binding, Fdefine_prefix_command) (Faccessible_keymaps, Fdescribe_buffer_bindings) (describe_vector, Fwhere_is_internal): Minor cleanup. --- src/keymap.c | 208 ++++++++++++++++++--------------------------------- 1 file changed, 72 insertions(+), 136 deletions(-) diff --git a/src/keymap.c b/src/keymap.c index ca2d33dba47..86ec2388d11 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -218,15 +218,13 @@ when reading a key-sequence to be looked-up in this keymap. */) Lisp_Object get_keymap (Lisp_Object object, bool error_if_not_keymap, bool autoload) { - Lisp_Object tem; - autoload_retry: if (NILP (object)) goto end; if (CONSP (object) && EQ (XCAR (object), Qkeymap)) return object; - tem = indirect_function (object); + Lisp_Object tem = indirect_function (object); if (CONSP (tem)) { if (EQ (XCAR (tem), Qkeymap)) @@ -265,12 +263,10 @@ get_keymap (Lisp_Object object, bool error_if_not_keymap, bool autoload) static Lisp_Object keymap_parent (Lisp_Object keymap, bool autoload) { - Lisp_Object list; - keymap = get_keymap (keymap, 1, autoload); /* Skip past the initial element `keymap'. */ - list = XCDR (keymap); + Lisp_Object list = XCDR (keymap); for (; CONSP (list); list = XCDR (list)) { /* See if there is another `keymap'. */ @@ -306,8 +302,6 @@ DEFUN ("set-keymap-parent", Fset_keymap_parent, Sset_keymap_parent, 2, 2, 0, Return PARENT. PARENT should be nil or another keymap. */) (Lisp_Object keymap, Lisp_Object parent) { - Lisp_Object list, prev; - /* Flush any reverse-map cache. */ where_is_cache = Qnil; where_is_cache_keymaps = Qt; @@ -323,10 +317,10 @@ Return PARENT. PARENT should be nil or another keymap. */) } /* Skip past the initial element `keymap'. */ - prev = keymap; + Lisp_Object prev = keymap; while (1) { - list = XCDR (prev); + Lisp_Object list = XCDR (prev); /* If there is a parent keymap here, replace it. If we came to the end, add the parent in PREV. */ if (!CONSP (list) || KEYMAPP (list)) @@ -805,14 +799,10 @@ store_in_keymap (Lisp_Object keymap, register Lisp_Object idx, Lisp_Object def) towards the front of the alist and character lookups in dense keymaps will remain fast. Otherwise, this just points at the front of the keymap. */ - Lisp_Object insertion_point; - - insertion_point = keymap; + Lisp_Object insertion_point = keymap; for (tail = XCDR (keymap); CONSP (tail); tail = XCDR (tail)) { - Lisp_Object elt; - - elt = XCAR (tail); + Lisp_Object elt = XCAR (tail); if (VECTORP (elt)) { if (FIXNATP (idx) && XFIXNAT (idx) < ASIZE (elt)) @@ -1018,9 +1008,8 @@ copy_keymap_1 (Lisp_Object keymap, int depth) } else if (VECTORP (elt)) { - int i; elt = Fcopy_sequence (elt); - for (i = 0; i < ASIZE (elt); i++) + for (int i = 0; i < ASIZE (elt); i++) ASET (elt, i, copy_keymap_item (AREF (elt, i), depth + 1)); } else if (CONSP (elt)) @@ -1097,24 +1086,19 @@ binding is altered. If there is no binding for KEY, the new pair binding KEY to DEF is added at the front of KEYMAP. */) (Lisp_Object keymap, Lisp_Object key, Lisp_Object def) { - ptrdiff_t idx; - Lisp_Object c; - Lisp_Object cmd; - bool metized = 0; - int meta_bit; - ptrdiff_t length; + bool metized = false; keymap = get_keymap (keymap, 1, 1); - length = CHECK_VECTOR_OR_STRING (key); + ptrdiff_t length = CHECK_VECTOR_OR_STRING (key); if (length == 0) return Qnil; if (SYMBOLP (def) && !EQ (Vdefine_key_rebound_commands, Qt)) Vdefine_key_rebound_commands = Fcons (def, Vdefine_key_rebound_commands); - meta_bit = (VECTORP (key) || (STRINGP (key) && STRING_MULTIBYTE (key)) - ? meta_modifier : 0x80); + int meta_bit = (VECTORP (key) || (STRINGP (key) && STRING_MULTIBYTE (key)) + ? meta_modifier : 0x80); if (VECTORP (def) && ASIZE (def) > 0 && CONSP (AREF (def, 0))) { /* DEF is apparently an XEmacs-style keyboard macro. */ @@ -1130,10 +1114,10 @@ binding KEY to DEF is added at the front of KEYMAP. */) def = tmp; } - idx = 0; + ptrdiff_t idx = 0; while (1) { - c = Faref (key, make_fixnum (idx)); + Lisp_Object c = Faref (key, make_fixnum (idx)); if (CONSP (c)) { @@ -1153,14 +1137,14 @@ binding KEY to DEF is added at the front of KEYMAP. */) && !metized) { c = meta_prefix_char; - metized = 1; + metized = true; } else { if (FIXNUMP (c)) XSETINT (c, XFIXNUM (c) & ~meta_bit); - metized = 0; + metized = false; idx++; } @@ -1173,7 +1157,7 @@ binding KEY to DEF is added at the front of KEYMAP. */) if (idx == length) return store_in_keymap (keymap, c, def); - cmd = access_keymap (keymap, c, 0, 1, 1); + Lisp_Object cmd = access_keymap (keymap, c, 0, 1, 1); /* If this key is undefined, make it a prefix. */ if (NILP (cmd)) @@ -1250,23 +1234,19 @@ third optional argument ACCEPT-DEFAULT is non-nil, `lookup-key' will recognize the default bindings, just as `read-key-sequence' does. */) (Lisp_Object keymap, Lisp_Object key, Lisp_Object accept_default) { - ptrdiff_t idx; - Lisp_Object cmd; - Lisp_Object c; - ptrdiff_t length; bool t_ok = !NILP (accept_default); if (!CONSP (keymap) && !NILP (keymap)) keymap = get_keymap (keymap, true, true); - length = CHECK_VECTOR_OR_STRING (key); + ptrdiff_t length = CHECK_VECTOR_OR_STRING (key); if (length == 0) return keymap; - idx = 0; + ptrdiff_t idx = 0; while (1) { - c = Faref (key, make_fixnum (idx++)); + Lisp_Object c = Faref (key, make_fixnum (idx++)); if (CONSP (c) && lucid_event_type_list_p (c)) c = Fevent_convert_list (c); @@ -1280,7 +1260,7 @@ recognize the default bindings, just as `read-key-sequence' does. */) if (!FIXNUMP (c) && !SYMBOLP (c) && !CONSP (c) && !STRINGP (c)) message_with_string ("Key sequence contains invalid event %s", c, 1); - cmd = access_keymap (keymap, c, t_ok, 0, 1); + Lisp_Object cmd = access_keymap (keymap, c, t_ok, 0, 1); if (idx == length) return cmd; @@ -1299,9 +1279,7 @@ recognize the default bindings, just as `read-key-sequence' does. */) static Lisp_Object define_as_prefix (Lisp_Object keymap, Lisp_Object c) { - Lisp_Object cmd; - - cmd = Fmake_sparse_keymap (Qnil); + Lisp_Object cmd = Fmake_sparse_keymap (Qnil); store_in_keymap (keymap, c, cmd); return cmd; @@ -1322,15 +1300,12 @@ append_key (Lisp_Object key_sequence, Lisp_Object key) static void silly_event_symbol_error (Lisp_Object c) { - Lisp_Object parsed, base, name, assoc; - int modifiers; - - parsed = parse_modifiers (c); - modifiers = XFIXNAT (XCAR (XCDR (parsed))); - base = XCAR (parsed); - name = Fsymbol_name (base); + Lisp_Object parsed = parse_modifiers (c); + int modifiers = XFIXNAT (XCAR (XCDR (parsed))); + Lisp_Object base = XCAR (parsed); + Lisp_Object name = Fsymbol_name (base); /* This alist includes elements such as ("RET" . "\\r"). */ - assoc = Fassoc (name, exclude_keys, Qnil); + Lisp_Object assoc = Fassoc (name, exclude_keys, Qnil); if (! NILP (assoc)) { @@ -1391,16 +1366,14 @@ ptrdiff_t current_minor_maps (Lisp_Object **modeptr, Lisp_Object **mapptr) { ptrdiff_t i = 0; - int list_number = 0; Lisp_Object alist, assoc, var, val; - Lisp_Object emulation_alists; + Lisp_Object emulation_alists = Vemulation_mode_map_alists; Lisp_Object lists[2]; - emulation_alists = Vemulation_mode_map_alists; lists[0] = Vminor_mode_overriding_map_alist; lists[1] = Vminor_mode_map_alist; - for (list_number = 0; list_number < 2; list_number++) + for (int list_number = 0; list_number < 2; list_number++) { if (CONSP (emulation_alists)) { @@ -1526,9 +1499,7 @@ like in the respective argument of `key-binding'. */) if (CONSP (position)) { - Lisp_Object window; - - window = POSN_WINDOW (position); + Lisp_Object window = POSN_WINDOW (position); if (WINDOWP (window) && BUFFERP (XWINDOW (window)->contents) @@ -1557,7 +1528,7 @@ like in the respective argument of `key-binding'. */) if (NILP (XCDR (keymaps))) { Lisp_Object *maps; - int nmaps, i; + int nmaps; ptrdiff_t pt = click_position (position); /* This usually returns the buffer's local map, but that can be overridden by a `local-map' property. */ @@ -1575,9 +1546,7 @@ like in the respective argument of `key-binding'. */) if (POSN_INBUFFER_P (position)) { - Lisp_Object pos; - - pos = POSN_BUFFER_POSN (position); + Lisp_Object pos = POSN_BUFFER_POSN (position); if (FIXNUMP (pos) && XFIXNUM (pos) >= BEG && XFIXNUM (pos) <= Z) { @@ -1597,15 +1566,13 @@ like in the respective argument of `key-binding'. */) if (CONSP (string) && STRINGP (XCAR (string))) { - Lisp_Object pos, map; - - pos = XCDR (string); + Lisp_Object pos = XCDR (string); string = XCAR (string); if (FIXNUMP (pos) && XFIXNUM (pos) >= 0 && XFIXNUM (pos) < SCHARS (string)) { - map = Fget_text_property (pos, Qlocal_map, string); + Lisp_Object map = Fget_text_property (pos, Qlocal_map, string); if (!NILP (map)) local_map = map; @@ -1623,7 +1590,7 @@ like in the respective argument of `key-binding'. */) /* Now put all the minor mode keymaps on the list. */ nmaps = current_minor_maps (0, &maps); - for (i = --nmaps; i >= 0; i--) + for (int i = --nmaps; i >= 0; i--) if (!NILP (maps[i])) keymaps = Fcons (maps[i], keymaps); @@ -1667,18 +1634,15 @@ specified buffer position instead of point are used. */) (Lisp_Object key, Lisp_Object accept_default, Lisp_Object no_remap, Lisp_Object position) { - Lisp_Object value; - if (NILP (position) && VECTORP (key)) { - Lisp_Object event; - if (ASIZE (key) == 0) return Qnil; /* mouse events may have a symbolic prefix indicating the scrollbar or mode line */ - event = AREF (key, SYMBOLP (AREF (key, 0)) && ASIZE (key) > 1 ? 1 : 0); + Lisp_Object event + = AREF (key, SYMBOLP (AREF (key, 0)) && ASIZE (key) > 1 ? 1 : 0); /* We are not interested in locations without event data */ @@ -1690,8 +1654,8 @@ specified buffer position instead of point are used. } } - value = Flookup_key (Fcurrent_active_maps (Qt, position), - key, accept_default); + Lisp_Object value = Flookup_key (Fcurrent_active_maps (Qt, position), + key, accept_default); if (NILP (value) || FIXNUMP (value)) return Qnil; @@ -1720,8 +1684,7 @@ If optional argument ACCEPT-DEFAULT is non-nil, recognize default bindings; see the description of `lookup-key' for more details about this. */) (Lisp_Object keys, Lisp_Object accept_default) { - register Lisp_Object map; - map = BVAR (current_buffer, keymap); + register Lisp_Object map = BVAR (current_buffer, keymap); if (NILP (map)) return Qnil; return Flookup_key (map, keys, accept_default); @@ -1760,15 +1723,11 @@ bindings; see the description of `lookup-key' for more details about this. */) (Lisp_Object key, Lisp_Object accept_default) { Lisp_Object *modes, *maps; - int nmaps; - Lisp_Object binding; - int i, j; + int nmaps = current_minor_maps (&modes, &maps); + Lisp_Object binding = Qnil; - nmaps = current_minor_maps (&modes, &maps); - - binding = Qnil; - - for (i = j = 0; i < nmaps; i++) + int j; + for (int i = j = 0; i < nmaps; i++) if (!NILP (maps[i]) && !NILP (binding = Flookup_key (maps[i], key, accept_default)) && !FIXNUMP (binding)) @@ -1795,8 +1754,7 @@ string for the map. This is required to use the keymap as a menu. This function returns COMMAND. */) (Lisp_Object command, Lisp_Object mapvar, Lisp_Object name) { - Lisp_Object map; - map = Fmake_sparse_keymap (name); + Lisp_Object map = Fmake_sparse_keymap (name); Ffset (command, map); if (!NILP (mapvar)) Fset (mapvar, map); @@ -1942,8 +1900,7 @@ then the value includes only maps for prefixes that start with PREFIX. */) { /* If a prefix was specified, start with the keymap (if any) for that prefix, so we don't waste time considering other prefixes. */ - Lisp_Object tem; - tem = Flookup_key (keymap, prefix, Qt); + Lisp_Object tem = Flookup_key (keymap, prefix, Qt); /* Flookup_key may give us nil, or a number, if the prefix is not defined in this particular map. It might even give us a list that isn't a keymap. */ @@ -2406,7 +2363,6 @@ where_is_internal (Lisp_Object definition, Lisp_Object keymaps, bool noindirect, bool nomenus) { Lisp_Object maps = Qnil; - Lisp_Object found; struct where_is_internal_data data; /* Only important use of caching is for the menubar @@ -2432,7 +2388,7 @@ where_is_internal (Lisp_Object definition, Lisp_Object keymaps, we're filling it up. */ where_is_cache = Qnil; - found = keymaps; + Lisp_Object found = keymaps; while (CONSP (found)) { maps = @@ -2541,8 +2497,7 @@ The optional 5th arg NO-REMAP alters how command remapping is handled: /* Whether or not we're handling remapped sequences. This is needed because remapping is not done recursively by Fcommand_remapping: you can't remap a remapped command. */ - bool remapped = 0; - Lisp_Object tem = Qnil; + bool remapped = false; /* Refresh the C version of the modifier preference. */ where_is_preferred_modifier @@ -2556,7 +2511,7 @@ The optional 5th arg NO-REMAP alters how command remapping is handled: else keymaps = Fcurrent_active_maps (Qnil, Qnil); - tem = Fcommand_remapping (definition, Qnil, keymaps); + Lisp_Object tem = Fcommand_remapping (definition, Qnil, keymaps); /* If `definition' is remapped to `tem', then OT1H no key will run that command (since they will run `tem' instead), so we should return nil; but OTOH all keys bound to `definition' (or to `tem') @@ -2598,7 +2553,7 @@ The optional 5th arg NO-REMAP alters how command remapping is handled: considered remapped sequences yet, copy them over and process them. */ || (!remapped && (sequences = remapped_sequences, - remapped = 1, + remapped = true, CONSP (sequences)))) { Lisp_Object sequence, function; @@ -2744,9 +2699,7 @@ The optional argument MENUS, if non-nil, says to mention menu bindings. \(Ordinarily these are omitted from the output.) */) (Lisp_Object buffer, Lisp_Object prefix, Lisp_Object menus) { - Lisp_Object outbuf, shadow; Lisp_Object nomenu = NILP (menus) ? Qt : Qnil; - Lisp_Object start1; const char *alternate_heading = "\ @@ -2756,17 +2709,16 @@ You type Translation\n\ CHECK_BUFFER (buffer); - shadow = Qnil; - outbuf = Fcurrent_buffer (); + Lisp_Object shadow = Qnil; + Lisp_Object outbuf = Fcurrent_buffer (); /* Report on alternates for keys. */ if (STRINGP (KVAR (current_kboard, Vkeyboard_translate_table)) && !NILP (prefix)) { - int c; const unsigned char *translate = SDATA (KVAR (current_kboard, Vkeyboard_translate_table)); int translate_len = SCHARS (KVAR (current_kboard, Vkeyboard_translate_table)); - for (c = 0; c < translate_len; c++) + for (int c = 0; c < translate_len; c++) if (translate[c] != c) { char buf[KEY_DESCRIPTION_SIZE]; @@ -2803,7 +2755,7 @@ You type Translation\n\ } /* Print the (major mode) local map. */ - start1 = Qnil; + Lisp_Object start1 = Qnil; if (!NILP (KVAR (current_kboard, Voverriding_terminal_local_map))) start1 = KVAR (current_kboard, Voverriding_terminal_local_map); @@ -2832,14 +2784,13 @@ You type Translation\n\ else { /* Print the minor mode and major mode keymaps. */ - int i, nmaps; Lisp_Object *modes, *maps; /* Temporarily switch to `buffer', so that we can get that buffer's minor modes correctly. */ Fset_buffer (buffer); - nmaps = current_minor_maps (&modes, &maps); + int nmaps = current_minor_maps (&modes, &maps); Fset_buffer (outbuf); start1 = get_local_map (BUF_PT (XBUFFER (buffer)), @@ -2855,7 +2806,7 @@ You type Translation\n\ } /* Print the minor mode maps. */ - for (i = 0; i < nmaps; i++) + for (int i = 0; i < nmaps; i++) { /* The title for a minor mode keymap is constructed at run time. @@ -3042,21 +2993,11 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, bool partial, Lisp_Object shadow, Lisp_Object entire_map, bool keymap_p, bool mention_shadow) { - Lisp_Object definition; - Lisp_Object tem2; Lisp_Object elt_prefix = Qnil; - int i; - Lisp_Object suppress; - Lisp_Object kludge; - bool first = 1; + Lisp_Object suppress = Qnil; + bool first = true; /* Range of elements to be handled. */ int from, to, stop; - Lisp_Object character; - int starting_i; - - suppress = Qnil; - - definition = Qnil; if (!keymap_p) { @@ -3071,7 +3012,7 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, /* This vector gets used to present single keys to Flookup_key. Since that is done once per vector element, we don't want to cons up a fresh vector every time. */ - kludge = make_nil_vector (1); + Lisp_Object kludge = make_nil_vector (1); if (partial) suppress = intern ("suppress-keymap"); @@ -3082,12 +3023,12 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, else stop = to = ASIZE (vector); - for (i = from; ; i++) + for (int i = from; ; i++) { - bool this_shadowed = 0; + bool this_shadowed = false; Lisp_Object shadowed_by = Qnil; int range_beg, range_end; - Lisp_Object val; + Lisp_Object val, tem2; maybe_quit (); @@ -3098,7 +3039,7 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, stop = to; } - starting_i = i; + int starting_i = i; if (CHAR_TABLE_P (vector)) { @@ -3108,21 +3049,19 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, } else val = AREF (vector, i); - definition = get_keyelt (val, 0); + Lisp_Object definition = get_keyelt (val, 0); if (NILP (definition)) continue; /* Don't mention suppressed commands. */ if (SYMBOLP (definition) && partial) { - Lisp_Object tem; - - tem = Fget (definition, suppress); + Lisp_Object tem = Fget (definition, suppress); if (!NILP (tem)) continue; } - character = make_fixnum (starting_i); + Lisp_Object character = make_fixnum (starting_i); ASET (kludge, 0, character); /* If this binding is shadowed by some other map, ignore it. */ @@ -3133,7 +3072,7 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, if (!NILP (shadowed_by) && !EQ (shadowed_by, definition)) { if (mention_shadow) - this_shadowed = 1; + this_shadowed = true; else continue; } @@ -3143,9 +3082,7 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, one in the same keymap. */ if (!NILP (entire_map)) { - Lisp_Object tem; - - tem = Flookup_key (entire_map, kludge, Qt); + Lisp_Object tem = Flookup_key (entire_map, kludge, Qt); if (!EQ (tem, definition)) continue; @@ -3154,7 +3091,7 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, if (first) { insert ("\n", 1); - first = 0; + first = false; } /* Output the prefix that applies to every entry in this map. */ @@ -3164,9 +3101,9 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, insert1 (Fkey_description (kludge, prefix)); /* Find all consecutive characters or rows that have the same - definition. But, VECTOR is a char-table, we had better put a - boundary between normal characters (-#x3FFF7F) and 8-bit - characters (#x3FFF80-). */ + definition. But, if VECTOR is a char-table, we had better + put a boundary between normal characters (-#x3FFF7F) and + 8-bit characters (#x3FFF80-). */ if (CHAR_TABLE_P (vector)) { while (i + 1 < stop @@ -3189,12 +3126,11 @@ describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args, if they are, that they are shadowed by the same command. */ if (CHAR_TABLE_P (vector) && i != starting_i) { - Lisp_Object tem; Lisp_Object key = make_nil_vector (1); for (int j = starting_i + 1; j <= i; j++) { ASET (key, 0, make_fixnum (j)); - tem = shadow_lookup (shadow, key, Qt, 0); + Lisp_Object tem = shadow_lookup (shadow, key, Qt, 0); if (NILP (Fequal (tem, shadowed_by))) i = j - 1; } From e5c5a8f959669a03af712447d4dc49e0d99da294 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Wed, 30 Dec 2020 10:06:07 +0100 Subject: [PATCH 058/116] ; * etc/NEWS: Move entry to correct heading. --- etc/NEWS | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 0231c167112..3bfd31fc509 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1915,11 +1915,6 @@ This is no longer supported, and setting this variable has no effect. ** The macro 'with-displayed-buffer-window' is now obsolete. Use macro 'with-current-buffer-window' with action alist entry 'body-function'. -+++ -** 'byte-compile-file' optional argument LOAD is now obsolete. -To load the file after byte-compiling, add a call to 'load' from Lisp -or use 'M-x emacs-lisp-byte-compile-and-load' interactively. - --- ** The metamail.el library is now marked obsolete. @@ -2229,6 +2224,11 @@ By default, it will warn if a documentation string is wider than the largest of 80 characters or 'fill-column'. This is controlled by the new user option 'byte-compile-docstring-max-column'. ++++ +*** 'byte-compile-file' optional argument LOAD is now obsolete. +To load the file after byte-compiling, add a call to 'load' from Lisp +or use 'M-x emacs-lisp-byte-compile-and-load' interactively. + --- ** 'unload-feature' now also tries to undo additions to buffer-local hooks. From 75191b0af20d1e29edb1744bd7574ed77f91f8f6 Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Wed, 30 Dec 2020 11:30:57 +0200 Subject: [PATCH 059/116] In Isearch bind 'C-s M-y' to isearch-yank-pop-only with old code (bug#45483) * lisp/isearch.el (isearch-menu-bar-yank-map, isearch-mode-map): (isearch-forward): Use isearch-yank-pop-only instead of isearch-yank-pop. (isearch-yank-pop): Mention isearch-yank-pop-only. (isearch-yank-pop-only): New command with old body from Emacs 27. --- etc/NEWS | 5 +++-- lisp/isearch.el | 31 ++++++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 3bfd31fc509..10a925972f5 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -232,8 +232,9 @@ forms, but this command has now been changed to work more like ** Standalone 'M-y' uses the minibuffer to complete previous kills. When 'M-y' is typed not after a yank command, it activates the minibuffer where you can browse previous kills using the minibuffer history or -completion. In Isearch 'C-s M-y' uses the minibuffer with completion -on previous kills to read a string and append it to the search string. +completion. In Isearch, you can bind 'C-s M-y' to the command +`isearch-yank-pop' that uses the minibuffer with completion on +previous kills to read a string and append it to the search string. --- ** New user options 'copy-region-blink-delay' and 'delete-pair-blink-delay'. diff --git a/lisp/isearch.el b/lisp/isearch.el index 13173a28579..e4d599f2015 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -519,7 +519,7 @@ This is like `describe-bindings', but displays only Isearch keys." (defvar isearch-menu-bar-yank-map (let ((map (make-sparse-keymap))) (define-key map [isearch-yank-pop] - '(menu-item "Previous kill" isearch-yank-pop + '(menu-item "Previous kill" isearch-yank-pop-only :help "Replace previous yanked kill on search string")) (define-key map [isearch-yank-kill] '(menu-item "Current kill" isearch-yank-kill @@ -734,7 +734,7 @@ This is like `describe-bindings', but displays only Isearch keys." (define-key map "\M-n" 'isearch-ring-advance) (define-key map "\M-p" 'isearch-ring-retreat) - (define-key map "\M-y" 'isearch-yank-pop) + (define-key map "\M-y" 'isearch-yank-pop-only) (define-key map "\M-\t" 'isearch-complete) @@ -1019,7 +1019,7 @@ Type \\[isearch-yank-until-char] to yank from point until the next instance of a Type \\[isearch-yank-line] to yank rest of line onto end of search string\ and search for it. Type \\[isearch-yank-kill] to yank the last string of killed text. -Type \\[isearch-yank-pop] to replace string just yanked into search prompt +Type \\[isearch-yank-pop-only] to replace string just yanked into search prompt with string killed before it. Type \\[isearch-quote-char] to quote control character to search for it. Type \\[isearch-char-by-name] to add a character to search by Unicode name,\ @@ -2491,9 +2491,13 @@ If search string is empty, just beep." (isearch-yank-string (current-kill 0))) (defun isearch-yank-pop () - "Replace just-yanked search string with previously killed string." + "Replace just-yanked search string with previously killed string. +Unlike `isearch-yank-pop-only', when this command is called not immediately +after a `isearch-yank-kill' or a `isearch-yank-pop', it activates the +minibuffer to read a string from the `kill-ring' as `yank-pop' does." (interactive) - (if (not (memq last-command '(isearch-yank-kill isearch-yank-pop))) + (if (not (memq last-command '(isearch-yank-kill + isearch-yank-pop isearch-yank-pop-only))) ;; Yank string from kill-ring-browser. (with-isearch-suspended (let ((string (read-from-kill-ring))) @@ -2509,6 +2513,23 @@ If search string is empty, just beep." (isearch-pop-state) (isearch-yank-string (current-kill 1)))) +(defun isearch-yank-pop-only () + "Replace just-yanked search string with previously killed string. +Unlike `isearch-yank-pop', when this command is called not immediately +after a `isearch-yank-kill' or a `isearch-yank-pop-only', it only pops +the last killed string instead of activating the minibuffer to read +a string from the `kill-ring' as `yank-pop' does." + (interactive) + (if (not (memq last-command '(isearch-yank-kill + isearch-yank-pop isearch-yank-pop-only))) + ;; Fall back on `isearch-yank-kill' for the benefits of people + ;; who are used to the old behavior of `M-y' in isearch mode. + ;; In future, `M-y' could be changed from `isearch-yank-pop-only' + ;; to `isearch-yank-pop' that uses the kill-ring-browser. + (isearch-yank-kill) + (isearch-pop-state) + (isearch-yank-string (current-kill 1)))) + (defun isearch-yank-x-selection () "Pull current X selection into search string." (interactive) From baeb82df8bcb8dd7dd783dbfb5561415da4ea3a9 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Wed, 30 Dec 2020 10:49:48 +0100 Subject: [PATCH 060/116] * src/dbusbind.c (XD_BASIC_DBUS_TYPE): Fix error in declaration. --- src/dbusbind.c | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/src/dbusbind.c b/src/dbusbind.c index dc4db5c8513..dda862d975d 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -132,23 +132,36 @@ static bool xd_in_read_queued_messages = 0; #define XD_BASIC_DBUS_TYPE(type) \ (dbus_type_is_valid (type) && dbus_type_is_basic (type)) #else -#define XD_BASIC_DBUS_TYPE(type) \ - ((type == DBUS_TYPE_BYTE) \ - || (type == DBUS_TYPE_BOOLEAN) \ - || (type == DBUS_TYPE_INT16) \ - || (type == DBUS_TYPE_UINT16) \ - || (type == DBUS_TYPE_INT32) \ - || (type == DBUS_TYPE_UINT32) \ - || (type == DBUS_TYPE_INT64) \ - || (type == DBUS_TYPE_UINT64) \ - || (type == DBUS_TYPE_DOUBLE) \ - || (type == DBUS_TYPE_STRING) \ - || (type == DBUS_TYPE_OBJECT_PATH) \ - || (type == DBUS_TYPE_SIGNATURE) \ #ifdef DBUS_TYPE_UNIX_FD - || (type == DBUS_TYPE_UNIX_FD) \ +#define XD_BASIC_DBUS_TYPE(type) \ + ((type == DBUS_TYPE_BYTE) \ + || (type == DBUS_TYPE_BOOLEAN) \ + || (type == DBUS_TYPE_INT16) \ + || (type == DBUS_TYPE_UINT16) \ + || (type == DBUS_TYPE_INT32) \ + || (type == DBUS_TYPE_UINT32) \ + || (type == DBUS_TYPE_INT64) \ + || (type == DBUS_TYPE_UINT64) \ + || (type == DBUS_TYPE_DOUBLE) \ + || (type == DBUS_TYPE_STRING) \ + || (type == DBUS_TYPE_OBJECT_PATH) \ + || (type == DBUS_TYPE_SIGNATURE) \ + || (type == DBUS_TYPE_UNIX_FD)) +#else +#define XD_BASIC_DBUS_TYPE(type) \ + ((type == DBUS_TYPE_BYTE) \ + || (type == DBUS_TYPE_BOOLEAN) \ + || (type == DBUS_TYPE_INT16) \ + || (type == DBUS_TYPE_UINT16) \ + || (type == DBUS_TYPE_INT32) \ + || (type == DBUS_TYPE_UINT32) \ + || (type == DBUS_TYPE_INT64) \ + || (type == DBUS_TYPE_UINT64) \ + || (type == DBUS_TYPE_DOUBLE) \ + || (type == DBUS_TYPE_STRING) \ + || (type == DBUS_TYPE_OBJECT_PATH) \ + || (type == DBUS_TYPE_SIGNATURE)) #endif - ) #endif /* This was a macro. On Solaris 2.11 it was said to compile for From cd4a51695fddf2a76ae9ed71efa8bfb4a515b32e Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Wed, 30 Dec 2020 11:54:01 +0200 Subject: [PATCH 061/116] Add variables read-char-choice-use-read-key and y-or-n-p-use-read-key * lisp/subr.el (read-char-choice-use-read-key): New variable. (read-char-choice): Use read-char-from-minibuffer when read-char-choice-use-read-key is nil. (y-or-n-p-use-read-key): New variable. (y-or-n-p): Restore old code that calls read-key to use it when y-or-n-p-use-read-key is non-nil. * lisp/dired-aux.el (dired--no-subst-ask, dired-query): * lisp/files.el (files--ask-user-about-large-file) (hack-local-variables-confirm): * lisp/userlock.el (ask-user-about-supersession-threat): * lisp/wid-edit.el (widget-choose): Revert to use read-char-choice instead of read-char-from-minibuffer. https://lists.gnu.org/archive/html/emacs-devel/2020-12/msg01919.html --- etc/NEWS | 5 ++ lisp/dired-aux.el | 4 +- lisp/files.el | 4 +- lisp/subr.el | 121 +++++++++++++++++++++++++++++++--------------- lisp/userlock.el | 2 +- lisp/wid-edit.el | 2 +- 6 files changed, 94 insertions(+), 44 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 10a925972f5..765c032dc47 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2020,6 +2020,11 @@ If you bind 'help-form' to a non-nil value while calling these functions, then pressing 'C-h' ('help-char') causes the function to evaluate 'help-form' and display the result. +--- +** New variables 'read-char-choice-use-read-key' and 'y-or-n-p-use-read-key'. +When non-nil, then functions 'read-char-choice' and 'y-or-n-p' (respectively) +use the function 'read-key' to read a character instead of using the minibuffer. + +++ ** 'set-window-configuration' now takes an optional 'dont-set-frame' parameter which, when non-nil, instructs the function not to select diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index 0f68b470733..f83824a2727 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -145,7 +145,7 @@ substituted, and will be passed through normally to the shell. (defun dired--no-subst-ask (char nb-occur details) (let ((hilit-char (propertize (string char) 'face 'warning)) (choices `(?y ?n ?? ,@(when details '(?^))))) - (read-char-from-minibuffer + (read-char-choice (format-message (ngettext "%d occurrence of `%s' will not be substituted. Proceed? (%s) " @@ -1380,7 +1380,7 @@ return t; if SYM is q or ESC, return nil." (format " [Type yn!q or %s] " (key-description (vector help-char))) " [Type y, n, q or !] "))) - (set sym (setq char (read-char-from-minibuffer prompt char-choices))) + (set sym (setq char (read-char-choice prompt char-choices))) (if (memq char '(?y ?\s ?!)) t))))) diff --git a/lisp/files.el b/lisp/files.el index 70d451cccfa..637aaa130a4 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2141,7 +2141,7 @@ think it does, because \"free\" is pretty hard to define in practice." ("Yes" . ?y) ("No" . ?n) ("Open literally" . ?l))) - (read-char-from-minibuffer + (read-char-choice (concat prompt " (y)es or (n)o or (l)iterally ") '(?y ?Y ?n ?N ?l ?L))))) (cond ((memq choice '(?y ?Y)) nil) @@ -3538,7 +3538,7 @@ n -- to ignore the local variables list.") ", or C-v/M-v to scroll"))) char) (if offer-save (push ?! exit-chars)) - (setq char (read-char-from-minibuffer prompt exit-chars)) + (setq char (read-char-choice prompt exit-chars)) (when (and offer-save (= char ?!) unsafe-vars) (customize-push-and-save 'safe-local-variable-values unsafe-vars)) (prog1 (memq char '(?! ?\s ?y)) diff --git a/lisp/subr.el b/lisp/subr.el index 384dbb25cf8..ed0d6978d03 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2626,6 +2626,10 @@ This function is used by the `interactive' code letter `n'." t))) n)) +(defvar read-char-choice-use-read-key nil + "Prefer `read-key' when reading a character by `read-char-choice'. +Otherwise, use the minibuffer.") + (defun read-char-choice (prompt chars &optional inhibit-keyboard-quit) "Read and return one of CHARS, prompting for PROMPT. Any input that is not one of CHARS is ignored. @@ -2636,44 +2640,46 @@ keyboard-quit events while waiting for a valid input. If you bind the variable `help-form' to a non-nil value while calling this function, then pressing `help-char' causes it to evaluate `help-form' and display the result." - (unless (consp chars) - (error "Called `read-char-choice' without valid char choices")) - (let (char done show-help (helpbuf " *Char Help*")) - (let ((cursor-in-echo-area t) - (executing-kbd-macro executing-kbd-macro) - (esc-flag nil)) - (save-window-excursion ; in case we call help-form-show - (while (not done) - (unless (get-text-property 0 'face prompt) - (setq prompt (propertize prompt 'face 'minibuffer-prompt))) - (setq char (let ((inhibit-quit inhibit-keyboard-quit)) - (read-key prompt))) - (and show-help (buffer-live-p (get-buffer helpbuf)) - (kill-buffer helpbuf)) - (cond - ((not (numberp char))) - ;; If caller has set help-form, that's enough. - ;; They don't explicitly have to add help-char to chars. - ((and help-form - (eq char help-char) - (setq show-help t) - (help-form-show))) - ((memq char chars) - (setq done t)) - ((and executing-kbd-macro (= char -1)) - ;; read-event returns -1 if we are in a kbd macro and - ;; there are no more events in the macro. Attempt to - ;; get an event interactively. - (setq executing-kbd-macro nil)) - ((not inhibit-keyboard-quit) - (cond - ((and (null esc-flag) (eq char ?\e)) - (setq esc-flag t)) - ((memq char '(?\C-g ?\e)) - (keyboard-quit)))))))) - ;; Display the question with the answer. But without cursor-in-echo-area. - (message "%s%s" prompt (char-to-string char)) - char)) + (if (not read-char-choice-use-read-key) + (read-char-from-minibuffer prompt chars) + (unless (consp chars) + (error "Called `read-char-choice' without valid char choices")) + (let (char done show-help (helpbuf " *Char Help*")) + (let ((cursor-in-echo-area t) + (executing-kbd-macro executing-kbd-macro) + (esc-flag nil)) + (save-window-excursion ; in case we call help-form-show + (while (not done) + (unless (get-text-property 0 'face prompt) + (setq prompt (propertize prompt 'face 'minibuffer-prompt))) + (setq char (let ((inhibit-quit inhibit-keyboard-quit)) + (read-key prompt))) + (and show-help (buffer-live-p (get-buffer helpbuf)) + (kill-buffer helpbuf)) + (cond + ((not (numberp char))) + ;; If caller has set help-form, that's enough. + ;; They don't explicitly have to add help-char to chars. + ((and help-form + (eq char help-char) + (setq show-help t) + (help-form-show))) + ((memq char chars) + (setq done t)) + ((and executing-kbd-macro (= char -1)) + ;; read-event returns -1 if we are in a kbd macro and + ;; there are no more events in the macro. Attempt to + ;; get an event interactively. + (setq executing-kbd-macro nil)) + ((not inhibit-keyboard-quit) + (cond + ((and (null esc-flag) (eq char ?\e)) + (setq esc-flag t)) + ((memq char '(?\C-g ?\e)) + (keyboard-quit)))))))) + ;; Display the question with the answer. But without cursor-in-echo-area. + (message "%s%s" prompt (char-to-string char)) + char))) (defun sit-for (seconds &optional nodisp obsolete) "Redisplay, then wait for SECONDS seconds. Stop when input is available. @@ -2920,6 +2926,10 @@ Also discard all previous input in the minibuffer." (minibuffer-message "Please answer y or n") (sit-for 2))) +(defvar y-or-n-p-use-read-key nil + "Prefer `read-key' when answering a \"y or n\" question by `y-or-n-p'. +Otherwise, use the minibuffer.") + (defvar empty-history) (defun y-or-n-p (prompt) @@ -2980,6 +2990,41 @@ is nil and `use-dialog-box' is non-nil." use-dialog-box) (setq prompt (funcall padded prompt t) answer (x-popup-dialog t `(,prompt ("Yes" . act) ("No" . skip))))) + (y-or-n-p-use-read-key + ;; ¡Beware! when I tried to edebug this code, Emacs got into a weird state + ;; where all the keys were unbound (i.e. it somehow got triggered + ;; within read-key, apparently). I had to kill it. + (setq prompt (funcall padded prompt)) + (while + (let* ((scroll-actions '(recenter scroll-up scroll-down + scroll-other-window scroll-other-window-down)) + (key + (let ((cursor-in-echo-area t)) + (when minibuffer-auto-raise + (raise-frame (window-frame (minibuffer-window)))) + (read-key (propertize (if (memq answer scroll-actions) + prompt + (concat "Please answer y or n. " + prompt)) + 'face 'minibuffer-prompt))))) + (setq answer (lookup-key query-replace-map (vector key) t)) + (cond + ((memq answer '(skip act)) nil) + ((eq answer 'recenter) + (recenter) t) + ((eq answer 'scroll-up) + (ignore-errors (scroll-up-command)) t) + ((eq answer 'scroll-down) + (ignore-errors (scroll-down-command)) t) + ((eq answer 'scroll-other-window) + (ignore-errors (scroll-other-window)) t) + ((eq answer 'scroll-other-window-down) + (ignore-errors (scroll-other-window-down)) t) + ((or (memq answer '(exit-prefix quit)) (eq key ?\e)) + (signal 'quit nil) t) + (t t))) + (ding) + (discard-input))) (t (setq prompt (funcall padded prompt)) (let* ((empty-history '()) diff --git a/lisp/userlock.el b/lisp/userlock.el index ec763223379..249f40e9af9 100644 --- a/lisp/userlock.el +++ b/lisp/userlock.el @@ -159,7 +159,7 @@ really edit the buffer? (y, n, r or C-h) " (message "%s" prompt) (error "Cannot resolve conflict in batch mode")) (while (null answer) - (setq answer (read-char-from-minibuffer prompt choices)) + (setq answer (read-char-choice prompt choices)) (cond ((memq answer '(?? ?\C-h)) (ask-user-about-supersession-help) (setq answer nil)) diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el index 8250316bcc7..bb5d26d29e9 100644 --- a/lisp/wid-edit.el +++ b/lisp/wid-edit.el @@ -338,7 +338,7 @@ in the key vector, as in the argument of `define-key'." '(display-buffer-in-direction (direction . bottom) (window-height . fit-window-to-buffer))) - (setq value (read-char-from-minibuffer + (setq value (read-char-choice (format "%s: " title) (mapcar #'car alist))))) (cdr (assoc value alist)))))) From d0a254398609262dc5e6960655a7818f21a24447 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Engdeg=C3=A5rd?= Date: Wed, 30 Dec 2020 11:33:42 +0100 Subject: [PATCH 062/116] Plug NS memory leaks (bug#45502) * src/nsmenu.m ([EmacsMenu addItemWithWidgetValue:attributes:]): Mark allocated and owned objects for autorelease. --- src/nsmenu.m | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/nsmenu.m b/src/nsmenu.m index ac36150915a..de0c61ceb54 100644 --- a/src/nsmenu.m +++ b/src/nsmenu.m @@ -481,7 +481,7 @@ - (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr if (title == nil) title = @"< ? >"; /* (get out in the open so we know about it) */ - item = [[NSMenuItem alloc] init]; + item = [[[NSMenuItem alloc] init] autorelease]; if (wv->key) { NSString *key = [NSString stringWithUTF8String: skipspc (wv->key)]; @@ -495,9 +495,10 @@ - (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr #endif } - NSAttributedString *atitle = [[NSAttributedString alloc] + NSAttributedString *atitle = [[[NSAttributedString alloc] initWithString: title - attributes: attributes]; + attributes: attributes] + autorelease]; [item setAction: @selector (menuDown:)]; [item setAttributedTitle: atitle]; [item setEnabled: wv->enabled]; @@ -542,7 +543,7 @@ - (void)fillWithWidgetValue: (void *)wvptr NSDictionary *attributes = nil; #ifdef NS_IMPL_COCOA - /* Cocoa doesn't allow multi-key chording in its menu display, so + /* Cocoa doesn't allow multi-key sequences in its menu display, so work around it by using tabs to split the title into two columns. */ NSDictionary *font_attribs = @{NSFontAttributeName: menuFont}; @@ -570,8 +571,8 @@ - (void)fillWithWidgetValue: (void *)wvptr /* Set a right-aligned tab stop at the maximum width, so that the key will appear immediately to the left of it. */ NSTextTab *tab = - [[[NSTextTab alloc] initWithTextAlignment: NSTextAlignmentRight - location: maxWidth + [[[NSTextTab alloc] initWithTextAlignment: NSTextAlignmentLeft + location: maxWidth - maxKeyWidth options: @{}] autorelease]; NSMutableParagraphStyle *pstyle = [[[NSMutableParagraphStyle alloc] init] autorelease]; From dd662fc972a75df71cdaa25a2d763d1592df1eb8 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Wed, 30 Dec 2020 12:38:20 +0100 Subject: [PATCH 063/116] Fix some over-wide docstrings * lisp/cedet/semantic/analyze/refs.el (semantic-analyze-refs-proto) (semantic-analyze-refs-impl): * lisp/cedet/semantic/symref.el (semantic-symref-hit-to-tag-via-buffer): * lisp/emacs-lisp/chart.el (chart-axis-draw): * lisp/emacs-lisp/cl-macs.el (cl-defstruct, cl-loop): * lisp/emacs-lisp/eieio-core.el (eieio--add-new-slot): * lisp/eshell/em-unix.el (eshell/info): * lisp/gnus/deuglify.el (gnus-outlook-rearrange-article): * lisp/gnus/gnus-agent.el (gnus-agent-read-article-number): * lisp/gnus/gnus-util.el (gnus-put-overlay-excluding-newlines) (gnus-put-text-property-excluding-newlines): * lisp/gnus/message.el (message-sort-headers): * lisp/gnus/nntp.el (nntp-with-open-group) (nntp-with-open-group-function): * lisp/gnus/nnvirtual.el (nnvirtual-create-mapping): * lisp/mail/feedmail.el (feedmail-fiddle-list-of-fiddle-plexes) (feedmail-queue-reminder, feedmail-mail-send-hook-splitter): * lisp/net/dictionary.el (dictionary-do-matching): * lisp/obsolete/longlines.el (longlines-auto-wrap): * lisp/org/ob-sql.el (org-babel-sql-dbstring-vertica): * lisp/org/ol-bbdb.el (org-bbdb-date-list): * lisp/progmodes/cc-cmds.el (c-mark-function): * lisp/progmodes/cperl-mode.el (cperl-add-tags-recurse) (cperl-add-tags-recurse-noxs-fullpath) (cperl-add-tags-recurse-noxs): * lisp/progmodes/etags.el (tags-search): * lisp/progmodes/verilog-mode.el (verilog-delete-auto-buffer) (verilog-auto-re-search-do, verilog-expand-vector-internal): * lisp/textmodes/reftex-parse.el (reftex-init-section-numbers): * lisp/textmodes/reftex-toc.el (reftex-toc-load-all-files-for-promotion): * lisp/textmodes/sgml-mode.el (html-mode): * lisp/textmodes/table.el (table--transcoord-cache-to-table) (table--transcoord-table-to-cache, table--remove-eol-spaces) (table--region-in-cell-p, table-goto-bottom-right-corner) (table-split-cell-horizontally): * lisp/url/url-handlers.el (url-insert): * lisp/vc/ediff-util.el (ediff-inferior-compare-regions): Fix doc strings to not exceed 80-column limits. (Bug#44858) --- lisp/cedet/semantic/analyze/refs.el | 6 +++-- lisp/cedet/semantic/symref.el | 7 +++--- lisp/emacs-lisp/chart.el | 3 ++- lisp/emacs-lisp/cl-macs.el | 5 +++-- lisp/emacs-lisp/eieio-core.el | 4 ++-- lisp/eshell/em-unix.el | 3 ++- lisp/gnus/deuglify.el | 2 +- lisp/gnus/gnus-agent.el | 3 ++- lisp/gnus/gnus-util.el | 4 ++-- lisp/gnus/message.el | 2 +- lisp/gnus/nntp.el | 4 ++-- lisp/gnus/nnvirtual.el | 2 +- lisp/mail/feedmail.el | 34 ++++++++++++++++------------- lisp/net/dictionary.el | 2 +- lisp/obsolete/longlines.el | 3 ++- lisp/org/ob-sql.el | 3 ++- lisp/org/ol-bbdb.el | 2 +- lisp/progmodes/cc-cmds.el | 2 +- lisp/progmodes/cperl-mode.el | 6 ++--- lisp/progmodes/etags.el | 4 ++-- lisp/progmodes/verilog-mode.el | 7 +++--- lisp/textmodes/reftex-parse.el | 2 +- lisp/textmodes/reftex-toc.el | 3 ++- lisp/textmodes/sgml-mode.el | 4 ++-- lisp/textmodes/table.el | 19 +++++++++------- lisp/url/url-handlers.el | 4 ++-- lisp/vc/ediff-util.el | 4 ++-- 27 files changed, 81 insertions(+), 63 deletions(-) diff --git a/lisp/cedet/semantic/analyze/refs.el b/lisp/cedet/semantic/analyze/refs.el index 585f1a7c754..8f9bbade4d4 100644 --- a/lisp/cedet/semantic/analyze/refs.el +++ b/lisp/cedet/semantic/analyze/refs.el @@ -102,7 +102,8 @@ Use `semantic-analyze-current-tag' to debug this fcn." ;; into the context. (cl-defmethod semantic-analyze-refs-impl ((refs semantic-analyze-references) &optional in-buffer) "Return the implementations derived in the reference analyzer REFS. -Optional argument IN-BUFFER indicates that the returned tag should be in an active buffer." +Optional argument IN-BUFFER indicates that the returned tag +should be in an active buffer." (let ((allhits (oref refs rawsearchdata)) (tag (oref refs tag)) (impl nil) @@ -127,7 +128,8 @@ Optional argument IN-BUFFER indicates that the returned tag should be in an acti (cl-defmethod semantic-analyze-refs-proto ((refs semantic-analyze-references) &optional in-buffer) "Return the prototypes derived in the reference analyzer REFS. -Optional argument IN-BUFFER indicates that the returned tag should be in an active buffer." +Optional argument IN-BUFFER indicates that the returned tag +should be in an active buffer." (let ((allhits (oref refs rawsearchdata)) (tag (oref refs tag)) (proto nil)) diff --git a/lisp/cedet/semantic/symref.el b/lisp/cedet/semantic/symref.el index 6bdec717457..4b095d738e4 100644 --- a/lisp/cedet/semantic/symref.el +++ b/lisp/cedet/semantic/symref.el @@ -511,9 +511,10 @@ Optional OPEN-BUFFERS, when nil will use a faster version of `find-file' when a file needs to be opened. If non-nil, then normal buffer initialization will be used. This function will leave buffers loaded from a file open, but -will add buffers that must be opened to `semantic-symref-recently-opened-buffers'. -Any caller MUST deal with that variable, either clearing it, or deleting the -buffers that were opened." +will add buffers that must be opened to +`semantic-symref-recently-opened-buffers'. +Any caller MUST deal with that variable, either clearing it, or +deleting the buffers that were opened." (let* ((line (car hit)) (file (cdr hit)) (buff (find-buffer-visiting file)) diff --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el index c1c6e3bf0fd..675a23f1dd5 100644 --- a/lisp/emacs-lisp/chart.el +++ b/lisp/emacs-lisp/chart.el @@ -333,7 +333,8 @@ Automatically compensates for direction." (cl-defmethod chart-axis-draw ((a chart-axis-names) &optional dir margin zone _start _end) "Draw axis information based upon A range to be spread along the edge. Optional argument DIR is the direction of the chart. -Optional arguments MARGIN, ZONE, START and END specify boundaries of the drawing." +Optional arguments MARGIN, ZONE, START and END specify boundaries +of the drawing." (cl-call-next-method) ;; We prefer about 5 spaces between each value (let* ((i 0) diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 14b65ef25bf..8ac415704d9 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -900,7 +900,8 @@ This is compatible with Common Lisp, but note that `defun' and "The Common Lisp `loop' macro. Valid clauses include: For clauses: - for VAR from/upfrom/downfrom EXPR1 to/upto/downto/above/below EXPR2 [by EXPR3] + for VAR from/upfrom/downfrom EXPR1 to/upto/downto/above/below EXPR2 + [by EXPR3] for VAR = EXPR1 then EXPR2 for VAR in/on/in-ref LIST [by FUNC] for VAR across/across-ref ARRAY @@ -2698,7 +2699,7 @@ Each SLOT may instead take the form (SNAME SDEFAULT SOPTIONS...), where SDEFAULT is the default value of that slot and SOPTIONS are keyword-value pairs for that slot. Supported keywords for slots are: -- `:read-only': If this has a non-nil value, that slot cannot be set via `setf'. +- `:read-only': If this has a non-nil value, that slot cannot be set via `setf'. - `:documentation': this is a docstring describing the slot. - `:type': the type of the field; currently only used for documentation. diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el index 3bc65d0d4c5..0f4b23c0bac 100644 --- a/lisp/emacs-lisp/eieio-core.el +++ b/lisp/emacs-lisp/eieio-core.el @@ -587,8 +587,8 @@ If SKIPNIL is non-nil, then if default value is nil return t instead." (defun eieio--add-new-slot (newc slot init alloc &optional defaultoverride skipnil) "Add into NEWC attribute SLOT. -If a slot of that name already exists in NEWC, then do nothing. If it doesn't exist, -INIT is the initarg, if any. +If a slot of that name already exists in NEWC, then do nothing. +If it doesn't exist, INIT is the initarg, if any. Argument ALLOC specifies if the slot is allocated per instance, or per class. If optional DEFAULTOVERRIDE is non-nil, then if A exists in NEWC, we must override its value for a default. diff --git a/lisp/eshell/em-unix.el b/lisp/eshell/em-unix.el index 2d6bd32b5a2..2528c28691b 100644 --- a/lisp/eshell/em-unix.el +++ b/lisp/eshell/em-unix.el @@ -169,7 +169,8 @@ Otherwise, Emacs will attempt to use rsh to invoke du on the remote machine." `info' => goes to top info window `info arg1' => IF arg1 is a file, then visits arg1 `info arg1' => OTHERWISE goes to top info window and then menu item arg1 - `info arg1 arg2' => does action for arg1 (either visit-file or menu-item) and then menu item arg2 + `info arg1 arg2' => does action for arg1 (either visit-file or menu-item) and + then menu item arg2 etc." (eval-and-compile (require 'info)) (let ((file (cond diff --git a/lisp/gnus/deuglify.el b/lisp/gnus/deuglify.el index fdc5302a28f..85d71af87e4 100644 --- a/lisp/gnus/deuglify.el +++ b/lisp/gnus/deuglify.el @@ -342,7 +342,7 @@ NODISPLAY is non-nil, don't redisplay the article buffer." (unless nodisplay (gnus-outlook-display-article-buffer))) (defun gnus-outlook-rearrange-article (attr-start) - "Put the text from ATTR-START to the end of buffer at the top of the article buffer." + "Put text from ATTR-START to the end of buffer at the top of the article buffer." ;; FIXME: 1. (*) text/plain ( ) text/html (let ((inhibit-read-only t) (cite-marks gnus-outlook-deuglify-cite-marks)) diff --git a/lisp/gnus/gnus-agent.el b/lisp/gnus/gnus-agent.el index d6802a35d0c..ea9e1257e85 100644 --- a/lisp/gnus/gnus-agent.el +++ b/lisp/gnus/gnus-agent.el @@ -1901,7 +1901,8 @@ article numbers will be returned." articles)) (defsubst gnus-agent-read-article-number () - "Reads the article number at point. Returns nil when a valid article number can not be read." + "Read the article number at point. +Return nil when a valid article number can not be read." (when (looking-at "[0-9]+\t") (read (current-buffer)))) diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el index ef811c65b86..76c6dd6429d 100644 --- a/lisp/gnus/gnus-util.el +++ b/lisp/gnus/gnus-util.el @@ -785,7 +785,7 @@ If there's no subdirectory, delete DIRECTORY as well." string) (defsubst gnus-put-text-property-excluding-newlines (beg end prop val) - "The same as `put-text-property', but don't put this prop on any newlines in the region." + "Like `put-text-property', but don't put this prop on any newlines in the region." (save-match-data (save-excursion (save-restriction @@ -796,7 +796,7 @@ If there's no subdirectory, delete DIRECTORY as well." (put-text-property beg (point) prop val))))) (defsubst gnus-put-overlay-excluding-newlines (beg end prop val) - "The same as `put-text-property', but don't put this prop on any newlines in the region." + "Like `put-text-property', but don't put this prop on any newlines in the region." (save-match-data (save-excursion (save-restriction diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index 86800f28cc4..84bde80b162 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -2669,7 +2669,7 @@ Point is left at the beginning of the narrowed-to region." 10000)))) (defun message-sort-headers () - "Sort the headers of the current message according to `message-header-format-alist'." + "Sort headers of the current message according to `message-header-format-alist'." (interactive) (save-excursion (save-restriction diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el index 887dce3472f..19dbb50da8c 100644 --- a/lisp/gnus/nntp.el +++ b/lisp/gnus/nntp.el @@ -600,7 +600,7 @@ retried once before actually displaying the error report." nil))) (defun nntp-with-open-group-function (group server connectionless bodyfun) - "Protect against servers that don't like clients that keep idle connections opens. + "Protect against servers that don't like clients that keep idle connections open. The problem being that these servers may either close a connection or simply ignore any further requests on a connection. Closed connections are not detected until `accept-process-output' has updated @@ -651,7 +651,7 @@ command whose response triggered the error." nntp-with-open-group-internal)) (defmacro nntp-with-open-group (group server &optional connectionless &rest forms) - "Protect against servers that don't like clients that keep idle connections opens. + "Protect against servers that don't like clients that keep idle connections open. The problem being that these servers may either close a connection or simply ignore any further requests on a connection. Closed connections are not detected until `accept-process-output' has updated diff --git a/lisp/gnus/nnvirtual.el b/lisp/gnus/nnvirtual.el index 3e9e608a099..2d314a8ec2a 100644 --- a/lisp/gnus/nnvirtual.el +++ b/lisp/gnus/nnvirtual.el @@ -667,7 +667,7 @@ the result." (defun nnvirtual-create-mapping (dont-check) - "Build the tables necessary to map between component (group, article) to virtual article. + "Build tables to map between component (group, article) to virtual article. Generate the set of read messages and marks for the virtual group based on the marks on the component groups." (let ((cnt 0) diff --git a/lisp/mail/feedmail.el b/lisp/mail/feedmail.el index ce5a57e2283..2bcbdf4a223 100644 --- a/lisp/mail/feedmail.el +++ b/lisp/mail/feedmail.el @@ -1341,19 +1341,22 @@ variable, but may depend on its value as described here.") (defun feedmail-mail-send-hook-splitter () "Facilitate dividing `mail-send-hook' things into queued and immediate cases. -If you have `mail-send-hook' functions that should only be called for sending/ -queueing messages or only be called for the sending of queued messages, this is -for you. Add this function to `mail-send-hook' with something like this: +If you have `mail-send-hook' functions that should only be called +for sending/ queueing messages or only be called for the sending +of queued messages, this is for you. Add this function to +`mail-send-hook' with something like this: (add-hook \\='mail-send-hook \\='feedmail-mail-send-hook-splitter) -Then add the functions you want called to either `feedmail-mail-send-hook-queued' -or `feedmail-mail-send-hook', as appropriate. The distinction is that -`feedmail-mail-send-hook' will be called when you send mail from a composition -buffer (typically by typing C-c C-c), whether the message is sent immediately -or placed in the queue or drafts directory. `feedmail-mail-send-hook-queued' is -called when messages are being sent from the queue directory, typically via a -call to `feedmail-run-the-queue'." +Then add the functions you want called to either +`feedmail-mail-send-hook-queued' or `feedmail-mail-send-hook', as +appropriate. The distinction is that `feedmail-mail-send-hook' +will be called when you send mail from a composition +buffer (typically by typing C-c C-c), whether the message is sent +immediately or placed in the queue or drafts directory. +`feedmail-mail-send-hook-queued' is called when messages are +being sent from the queue directory, typically via a call to +`feedmail-run-the-queue'." (feedmail-say-debug ">in-> feedmail-mail-send-hook-splitter %s" feedmail-queue-runner-is-active) (if feedmail-queue-runner-is-active (run-hooks 'feedmail-mail-send-hook-queued) @@ -2072,10 +2075,10 @@ internally by feedmail): after-run (the queue has just been run, possibly sending messages) WHAT-EVENT is used as a key into the table `feedmail-queue-reminder-alist'. If -the associated value is a function, it is called without arguments and is expected -to perform the reminder activity. You can supply your own reminder functions -by redefining `feedmail-queue-reminder-alist'. If you don't want any reminders, -you can set `feedmail-queue-reminder-alist' to nil." +the associated value is a function, it is called without arguments and is +expected to perform the reminder activity. You can supply your own reminder +functions by redefining `feedmail-queue-reminder-alist'. If you don't want any +reminders, you can set `feedmail-queue-reminder-alist' to nil." (interactive "p") (feedmail-say-debug ">in-> feedmail-queue-reminder %s" what-event) (let ((key (if (and what-event (symbolp what-event)) what-event 'on-demand)) entry reminder) @@ -2970,7 +2973,8 @@ probably not appropriate for you." (defun feedmail-fiddle-list-of-fiddle-plexes (list-of-fiddle-plexes) - "Fiddling based on a list of fiddle-plexes. Values t, nil, and string are pointless." + "Fiddling based on a list of fiddle-plexes. +Values t, nil, and string are pointless." (feedmail-say-debug ">in-> feedmail-fiddle-list-of-fiddle-plexes") ;; default is to fall off the end of the list and do nothing (let ((lofp list-of-fiddle-plexes) fp) diff --git a/lisp/net/dictionary.el b/lisp/net/dictionary.el index 0df9d8b1423..07f44ba035b 100644 --- a/lisp/net/dictionary.el +++ b/lisp/net/dictionary.el @@ -1029,7 +1029,7 @@ If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"." 'dictionary-display-match-result))) (defun dictionary-do-matching (word dictionary strategy function) - "Find matches for WORD with STRATEGY in DICTIONARY and displays them with FUNCTION." + "Find matches for WORD with STRATEGY in DICTIONARY and display them with FUNCTION." (message "Lookup matching words for %s in %s using %s" word dictionary strategy) diff --git a/lisp/obsolete/longlines.el b/lisp/obsolete/longlines.el index cbe453aa6bf..46f89c2e5a2 100644 --- a/lisp/obsolete/longlines.el +++ b/lisp/obsolete/longlines.el @@ -407,7 +407,8 @@ Hard newlines are left intact." (defun longlines-auto-wrap (&optional arg) "Toggle automatic line wrapping. -With optional argument ARG, turn on line wrapping if and only if ARG is positive. +With optional argument ARG, turn on line wrapping if and only if +ARG is positive. If automatic line wrapping is turned on, wrap the entire buffer." (interactive "P") (setq arg (if arg diff --git a/lisp/org/ob-sql.el b/lisp/org/ob-sql.el index 7c359b988d3..30d352cf494 100644 --- a/lisp/org/ob-sql.el +++ b/lisp/org/ob-sql.el @@ -164,7 +164,8 @@ SQL Server on Windows and Linux platform." " ")) (defun org-babel-sql-dbstring-vertica (host port user password database) - "Make Vertica command line args for database connection. Pass nil to omit that arg." + "Make Vertica command line args for database connection. +Pass nil to omit that arg." (mapconcat #'identity (delq nil (list (when host (format "-h %s" host)) diff --git a/lisp/org/ol-bbdb.el b/lisp/org/ol-bbdb.el index 73627b901fa..444bde37cd8 100644 --- a/lisp/org/ol-bbdb.el +++ b/lisp/org/ol-bbdb.el @@ -431,7 +431,7 @@ variable to be globally bound." ;;; to override the 7-day default. (defun org-bbdb-date-list (d n) - "Return a list of dates in (m d y) format from the given date D to n-1 days hence." + "Return list of dates in (m d y) format from the given date D to n-1 days hence." (let ((abs (calendar-absolute-from-gregorian d))) (mapcar (lambda (i) (calendar-gregorian-from-absolute (+ abs i))) (number-sequence 0 (1- n))))) diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el index 0ce3b3f6edd..7dcdcb11637 100644 --- a/lisp/progmodes/cc-cmds.el +++ b/lisp/progmodes/cc-cmds.el @@ -2357,7 +2357,7 @@ With a prefix arg, push the name onto the kill ring too." (put 'c-display-defun-name 'isearch-scroll t) (defun c-mark-function () - "Put mark at end of the current top-level declaration or macro, point at beginning. + "Put mark at end of current top-level declaration or macro, point at beginning. If point is not inside any then the closest following one is chosen. Each successive call of this command extends the marked region by one function. diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 2fc2d14ee6a..68c3b1b9d15 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -6533,7 +6533,7 @@ Does not move point." (defun cperl-add-tags-recurse-noxs () "Add to TAGS data for \"pure\" Perl files in the current directory and kids. Use as - emacs -batch -q -no-site-file -l emacs/cperl-mode.el \ + emacs -batch -q -no-site-file -l emacs/cperl-mode.el \\ -f cperl-add-tags-recurse-noxs " (cperl-write-tags nil nil t t nil t)) @@ -6542,7 +6542,7 @@ Use as "Add to TAGS data for \"pure\" Perl in the current directory and kids. Writes down fullpath, so TAGS is relocatable (but if the build directory is relocated, the file TAGS inside it breaks). Use as - emacs -batch -q -no-site-file -l emacs/cperl-mode.el \ + emacs -batch -q -no-site-file -l emacs/cperl-mode.el \\ -f cperl-add-tags-recurse-noxs-fullpath " (cperl-write-tags nil nil t t nil t "")) @@ -6550,7 +6550,7 @@ is relocated, the file TAGS inside it breaks). Use as (defun cperl-add-tags-recurse () "Add to TAGS file data for Perl files in the current directory and kids. Use as - emacs -batch -q -no-site-file -l emacs/cperl-mode.el \ + emacs -batch -q -no-site-file -l emacs/cperl-mode.el \\ -f cperl-add-tags-recurse " (cperl-write-tags nil nil t t)) diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el index aadfb8150cf..6c8e6f68b0b 100644 --- a/lisp/progmodes/etags.el +++ b/lisp/progmodes/etags.el @@ -1814,8 +1814,8 @@ argument is passed to `next-file', which see)." Stops when a match is found. To continue searching for next match, use command \\[tags-loop-continue]. -If FILES if non-nil should be a list or an iterator returning the files to search. -The search will be restricted to these files. +If FILES if non-nil should be a list or an iterator returning the +files to search. The search will be restricted to these files. Also see the documentation of the `tags-file-name' variable." (interactive "sTags search (regexp): ") diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el index f6e95b9cb6a..0c908451d32 100644 --- a/lisp/progmodes/verilog-mode.el +++ b/lisp/progmodes/verilog-mode.el @@ -5193,7 +5193,7 @@ Useful for creating tri's and other expanded fields." (verilog-expand-vector-internal "[" "]")) (defun verilog-expand-vector-internal (bra ket) - "Given BRA, the start brace and KET, the end brace, expand one line into many lines." + "Given start brace BRA, and end brace KET, expand one line into many lines." (save-excursion (forward-line 0) (let ((signal-string (buffer-substring (point) @@ -10450,7 +10450,7 @@ if non-nil." ;; (defun verilog-auto-re-search-do (search-for func) - "Search for the given auto text regexp SEARCH-FOR, and perform FUNC where it occurs." + "Search for given auto text regexp SEARCH-FOR, and perform FUNC where it occurs." (goto-char (point-min)) (while (verilog-re-search-forward-quick search-for nil t) (funcall func))) @@ -10862,7 +10862,8 @@ removed." (defun verilog-delete-auto-buffer () "Perform `verilog-delete-auto' on the current buffer. -Intended for internal use inside a `verilog-save-font-no-change-functions' block." +Intended for internal use inside a +`verilog-save-font-no-change-functions' block." ;; Allow user to customize (verilog-run-hooks 'verilog-before-delete-auto-hook) diff --git a/lisp/textmodes/reftex-parse.el b/lisp/textmodes/reftex-parse.el index 4f4afe9d2c6..c394fc31eca 100644 --- a/lisp/textmodes/reftex-parse.el +++ b/lisp/textmodes/reftex-parse.el @@ -1046,7 +1046,7 @@ When point is just after a { or [, limit string to matching parenthesis." ;;;###autoload (defun reftex-init-section-numbers (&optional toc-entry appendix) - "Initialize the section numbers with zeros or with what is found in the TOC-ENTRY." + "Initialize section numbers with zeros or with what is found in the TOC-ENTRY." (let* ((level (or (nth 5 toc-entry) -1)) (numbers (nreverse (split-string (or (nth 6 toc-entry) "") "\\."))) (depth (1- (length reftex-section-numbers))) diff --git a/lisp/textmodes/reftex-toc.el b/lisp/textmodes/reftex-toc.el index eb6ed2ff441..851629598eb 100644 --- a/lisp/textmodes/reftex-toc.el +++ b/lisp/textmodes/reftex-toc.el @@ -851,7 +851,8 @@ if these sets are sorted blocks in the alist." "Make sure all files of the document are being visited by buffers, and that the scanning info is absolutely up to date. We do this by rescanning with `reftex-keep-temporary-buffers' bound to t. -The variable `reftex--pro-or-de' is assumed to be dynamically scoped into this function. +The variable `reftex--pro-or-de' is assumed to be dynamically +scoped into this function. When finished, we exit with an error message." (let ((reftex-keep-temporary-buffers t)) (reftex-toc-Rescan) diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el index f3d8695e248..adeff9b9e59 100644 --- a/lisp/textmodes/sgml-mode.el +++ b/lisp/textmodes/sgml-mode.el @@ -2364,8 +2364,8 @@ have

Very Major Headlines

through
Very Minor Headlines

Paragraphs only need an opening tag. Line breaks and multiple spaces are ignored unless the text is

preformatted.
Text can be marked as -bold, italic or underlined using the normal M-o or -Edit/Text Properties/Face commands. +bold, italic or underlined using the normal M-o +or Edit/Text Properties/Face commands. Pages can have named points and can link other points to them with see also somename. In the same way Date: Wed, 30 Dec 2020 13:48:45 +0200 Subject: [PATCH 064/116] Add 'project-relative' as value for 'xref-file-name-display' * lisp/progmodes/xref.el (xref-file-name-display): Document new value. (xref-location-group ((l xref-file-location))): Handle the new value. (xref--project-root): Extract from the default method of 'xref-backend-references' so it can be used in above's new code. Also fix an old bug in the "backward compat" branch. * lisp/progmodes/xref.el (xref--project-root-memo): New variable. * test/lisp/progmodes/xref-tests.el: Add test cases for the three possible settings of 'xref-file-name-display'. Co-authored-by: Tobias Rittweiler --- etc/NEWS | 5 ++++ lisp/progmodes/xref.el | 48 +++++++++++++++++++++++++------ test/lisp/progmodes/xref-tests.el | 31 ++++++++++++++++++++ 3 files changed, 76 insertions(+), 8 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index 765c032dc47..1b49b015608 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1302,6 +1302,11 @@ have been renamed to have "proper" public names and documented ('xref-show-definitions-buffer' and 'xref-show-definitions-buffer-at-bottom'). +--- +*** New value 'project-relative' for 'xref-file-name-display' +If chosen, file names in *xref* buffers will be displayed relative +to the 'project-root' of the current project, when available. + ** json.el --- diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el index 6f7125670bd..2d458704b57 100644 --- a/lisp/progmodes/xref.el +++ b/lisp/progmodes/xref.el @@ -109,12 +109,20 @@ This is typically the filename.") (defcustom xref-file-name-display 'abs "Style of file name display in *xref* buffers. + If the value is the symbol `abs', the default, show the file names in their full absolute form. + If `nondirectory', show only the nondirectory (a.k.a. \"base name\") -part of the file name." +part of the file name. + +If `project-relative', show only the file name relative to the +current project root. If there is no current project, or if the +file resides outside of its root, show that particular file name +in its full absolute form." :type '(choice (const :tag "absolute file name" abs) - (const :tag "nondirectory file name" nondirectory)) + (const :tag "nondirectory file name" nondirectory) + (const :tag "relative to project root" project-relative)) :version "27.1") ;; FIXME: might be useful to have an optional "hint" i.e. a string to @@ -149,10 +157,31 @@ Line numbers start from 1 and columns from 0.") (forward-char column)) (point-marker)))))) +(defvar xref--project-root-memo nil + "Cons mapping `default-directory' value to the search root.") + (cl-defmethod xref-location-group ((l xref-file-location)) (cl-ecase xref-file-name-display - (abs (oref l file)) - (nondirectory (file-name-nondirectory (oref l file))))) + (abs + (oref l file)) + (nondirectory + (file-name-nondirectory (oref l file))) + (project-relative + (unless (and xref--project-root-memo + (equal (car xref--project-root-memo) + default-directory)) + (setq xref--project-root-memo + (cons default-directory + (let ((root + (let ((pr (project-current))) + (and pr (xref--project-root pr))))) + (and root (expand-file-name root)))))) + (let ((file (oref l file)) + (search-root (cdr xref--project-root-memo))) + (if (and search-root + (string-prefix-p search-root file)) + (substring file (length search-root)) + file))))) (defclass xref-buffer-location (xref-location) ((buffer :type buffer :initarg :buffer) @@ -273,10 +302,7 @@ current project's main and external roots." (xref-references-in-directory identifier dir)) (let ((pr (project-current t))) (cons - (if (fboundp 'project-root) - (project-root pr) - (with-no-warnings - (project-roots pr))) + (xref--project-root pr) (project-external-roots pr))))) (cl-defgeneric xref-backend-apropos (backend pattern) @@ -913,6 +939,12 @@ Return an alist of the form ((FILENAME . (XREF ...)) ...)." (pop-to-buffer (current-buffer)) (current-buffer)))) +(defun xref--project-root (project) + (if (fboundp 'project-root) + (project-root project) + (with-no-warnings + (car (project-roots project))))) + (defun xref--show-common-initialize (xref-alist fetcher alist) (setq buffer-undo-list nil) (let ((inhibit-read-only t) diff --git a/test/lisp/progmodes/xref-tests.el b/test/lisp/progmodes/xref-tests.el index e1efbe8a4eb..ea3cbc81ea7 100644 --- a/test/lisp/progmodes/xref-tests.el +++ b/test/lisp/progmodes/xref-tests.el @@ -97,3 +97,34 @@ (should (null (marker-position (cdr (nth 0 (cdr cons1)))))) (should (null (marker-position (car (nth 0 (cdr cons2)))))) (should (null (marker-position (cdr (nth 0 (cdr cons2)))))))) + +(ert-deftest xref--xref-file-name-display-is-abs () + (let ((xref-file-name-display 'abs)) + (should (equal (delete-dups + (mapcar 'xref-location-group + (xref-tests--locations-in-data-dir "\\(bar\\|foo\\)"))) + (list + (concat xref-tests--data-dir "file1.txt") + (concat xref-tests--data-dir "file2.txt")))))) + +(ert-deftest xref--xref-file-name-display-is-nondirectory () + (let ((xref-file-name-display 'nondirectory)) + (should (equal (delete-dups + (mapcar 'xref-location-group + (xref-tests--locations-in-data-dir "\\(bar\\|foo\\)"))) + (list + "file1.txt" + "file2.txt"))))) + +(ert-deftest xref--xref-file-name-display-is-relative-to-project-root () + (let* ((data-parent-dir + (file-name-directory (directory-file-name xref-tests--data-dir))) + (project-find-functions + #'(lambda (_) (cons 'transient data-parent-dir))) + (xref-file-name-display 'project-relative)) + (should (equal (delete-dups + (mapcar 'xref-location-group + (xref-tests--locations-in-data-dir "\\(bar\\|foo\\)"))) + (list + "xref-resources/file1.txt" + "xref-resources/file2.txt"))))) From fd669fbdeb9055a3f72589810c333ccfb43e96e0 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Wed, 30 Dec 2020 13:06:27 +0100 Subject: [PATCH 065/116] Remove redundant 'function's around lambda in align.el * lisp/align.el (align-rules-list, align-exclude-rules-list) (align-vhdl-rules-list, align-highlight-rule): Remove redundant 'function's around lambda. --- lisp/align.el | 156 ++++++++++++++++++++++---------------------------- 1 file changed, 70 insertions(+), 86 deletions(-) diff --git a/lisp/align.el b/lisp/align.el index 905328b6625..cd872e067f6 100644 --- a/lisp/align.el +++ b/lisp/align.el @@ -397,13 +397,12 @@ The possible settings for `align-region-separate' are: (modes . align-lisp-modes)) (open-comment - (regexp . ,(function - (lambda (end reverse) - (funcall (if reverse 're-search-backward - 're-search-forward) - (concat "[^ \t\n\\]" - (regexp-quote comment-start) - "\\(.+\\)$") end t)))) + (regexp . ,(lambda (end reverse) + (funcall (if reverse 're-search-backward + 're-search-forward) + (concat "[^ \t\n\\]" + (regexp-quote comment-start) + "\\(.+\\)$") end t))) (modes . align-open-comment-modes)) (c-macro-definition @@ -419,17 +418,16 @@ The possible settings for `align-region-separate' are: (modes . align-c++-modes) (justify . t) (valid - . ,(function - (lambda () - (not (or (save-excursion - (goto-char (match-beginning 1)) - (backward-word 1) - (looking-at - "\\(goto\\|return\\|new\\|delete\\|throw\\)")) - (if (and (boundp 'font-lock-mode) font-lock-mode) - (eq (get-text-property (point) 'face) - 'font-lock-comment-face) - (eq (caar (c-guess-basic-syntax)) 'c)))))))) + . ,(lambda () + (not (or (save-excursion + (goto-char (match-beginning 1)) + (backward-word 1) + (looking-at + "\\(goto\\|return\\|new\\|delete\\|throw\\)")) + (if (and (boundp 'font-lock-mode) font-lock-mode) + (eq (get-text-property (point) 'face) + 'font-lock-comment-face) + (eq (caar (c-guess-basic-syntax)) 'c))))))) (c-assignment (regexp . ,(concat "[^-=!^&*+<>/| \t\n]\\(\\s-*[-=!^&*+<>/|]*\\)" @@ -465,12 +463,11 @@ The possible settings for `align-region-separate' are: (modes . align-c++-modes) (run-if . ,(lambda () current-prefix-arg))) ; (valid - ; . ,(function - ; (lambda () + ; . ,(lambda () ; (memq (caar (c-guess-basic-syntax)) ; '(brace-list-intro ; brace-list-entry - ; brace-entry-open)))))) + ; brace-entry-open))))) ;; With a prefix argument, comma delimiter will be aligned. Since ;; perl-mode doesn't give us enough syntactic information (and we @@ -486,71 +483,63 @@ The possible settings for `align-region-separate' are: (regexp . "\\(\\s-*\\)\\(//.*\\|/\\*.*\\*/\\s-*\\)$") (modes . align-c++-modes) (column . comment-column) - (valid . ,(function - (lambda () - (save-excursion - (goto-char (match-beginning 1)) - (not (bolp))))))) + (valid . ,(lambda () + (save-excursion + (goto-char (match-beginning 1)) + (not (bolp)))))) (c-chain-logic (regexp . "\\(\\s-*\\)\\(&&\\|||\\|\\\\|\\\\)") (modes . align-c++-modes) - (valid . ,(function - (lambda () - (save-excursion - (goto-char (match-end 2)) - (looking-at "\\s-*\\(/[*/]\\|$\\)")))))) + (valid . ,(lambda () + (save-excursion + (goto-char (match-end 2)) + (looking-at "\\s-*\\(/[*/]\\|$\\)"))))) (perl-chain-logic (regexp . "\\(\\s-*\\)\\(&&\\|||\\|\\\\|\\\\)") (modes . align-perl-modes) - (valid . ,(function - (lambda () - (save-excursion - (goto-char (match-end 2)) - (looking-at "\\s-*\\(#\\|$\\)")))))) + (valid . ,(lambda () + (save-excursion + (goto-char (match-end 2)) + (looking-at "\\s-*\\(#\\|$\\)"))))) (python-chain-logic (regexp . "\\(\\s-*\\)\\(\\\\|\\\\)") (modes . '(python-mode)) - (valid . ,(function - (lambda () - (save-excursion - (goto-char (match-end 2)) - (looking-at "\\s-*\\(#\\|$\\|\\\\\\)")))))) + (valid . ,(lambda () + (save-excursion + (goto-char (match-end 2)) + (looking-at "\\s-*\\(#\\|$\\|\\\\\\)"))))) (c-macro-line-continuation (regexp . "\\(\\s-*\\)\\\\$") (modes . align-c++-modes) (column . c-backslash-column)) ; (valid - ; . ,(function - ; (lambda () + ; . ,(lambda () ; (memq (caar (c-guess-basic-syntax)) - ; '(cpp-macro cpp-macro-cont)))))) + ; '(cpp-macro cpp-macro-cont))))) (basic-line-continuation (regexp . "\\(\\s-*\\)\\\\$") (modes . '(python-mode makefile-mode))) (tex-record-separator - (regexp . ,(function - (lambda (end reverse) - (align-match-tex-pattern "&" end reverse)))) + (regexp . ,(lambda (end reverse) + (align-match-tex-pattern "&" end reverse))) (group . (1 2)) (modes . align-tex-modes) (repeat . t)) (tex-tabbing-separator - (regexp . ,(function - (lambda (end reverse) - (align-match-tex-pattern "\\\\[=>]" end reverse)))) + (regexp . ,(lambda (end reverse) + (align-match-tex-pattern "\\\\[=>]" end reverse))) (group . (1 2)) (modes . align-tex-modes) (repeat . t) - (run-if . ,(function - (lambda () - (eq major-mode 'latex-mode))))) + (run-if . ,(lambda () + (eq major-mode 'latex-mode)))) (tex-record-break (regexp . "\\(\\s-*\\)\\\\\\\\") @@ -563,10 +552,9 @@ The possible settings for `align-region-separate' are: (group . 2) (modes . align-text-modes) (repeat . t) - (run-if . ,(function - (lambda () - (and current-prefix-arg - (not (eq '- current-prefix-arg))))))) + (run-if . ,(lambda () + (and current-prefix-arg + (not (eq '- current-prefix-arg)))))) ;; With a negative prefix argument, lists of dollar figures will ;; be aligned. @@ -574,9 +562,8 @@ The possible settings for `align-region-separate' are: (regexp . "\\$?\\(\\s-+[0-9]+\\)\\.") (modes . align-text-modes) (justify . t) - (run-if . ,(function - (lambda () - (eq '- current-prefix-arg))))) + (run-if . ,(lambda () + (eq '- current-prefix-arg)))) (css-declaration (regexp . "^\\s-*\\(?:\\w-?\\)+:\\(\\s-*\\).*;") @@ -757,13 +744,12 @@ The following attributes are meaningful: (exc-open-comment (regexp - . ,(function - (lambda (end reverse) - (funcall (if reverse 're-search-backward - 're-search-forward) - (concat "[^ \t\n\\]" - (regexp-quote comment-start) - "\\(.+\\)$") end t)))) + . ,(lambda (end reverse) + (funcall (if reverse 're-search-backward + 're-search-forward) + (concat "[^ \t\n\\]" + (regexp-quote comment-start) + "\\(.+\\)$") end t))) (modes . align-open-comment-modes)) (exc-c-comment @@ -817,10 +803,9 @@ See the variable `align-exclude-rules-list' for more details.") (regexp . "\\(others\\|[^ \t\n=<]\\)\\(\\s-*\\)=>\\(\\s-*\\)\\S-") (group . (2 3)) (valid - . ,(function - (lambda () - (not (string= (downcase (match-string 1)) - "others")))))) + . ,(lambda () + (not (string= (downcase (match-string 1)) + "others"))))) (vhdl-colon (regexp . "[^ \t\n:]\\(\\s-*\\):\\(\\s-*\\)[^=\n]") @@ -1022,21 +1007,20 @@ to be colored." (or align-mode-rules-list align-rules-list))) (unless ex-rule (or exclude-rules align-mode-exclude-rules-list align-exclude-rules-list)) - (function - (lambda (b e mode) - (if (and mode (listp mode)) - (if (equal (symbol-name (car mode)) title) - (setq face (cons align-highlight-change-face - align-highlight-nochange-face)) - (setq face nil)) - (when face - (let ((overlay (make-overlay b e))) - (setq align-highlight-overlays - (cons overlay align-highlight-overlays)) - (overlay-put overlay 'face - (if mode - (car face) - (cdr face))))))))))) + (lambda (b e mode) + (if (and mode (listp mode)) + (if (equal (symbol-name (car mode)) title) + (setq face (cons align-highlight-change-face + align-highlight-nochange-face)) + (setq face nil)) + (when face + (let ((overlay (make-overlay b e))) + (setq align-highlight-overlays + (cons overlay align-highlight-overlays)) + (overlay-put overlay 'face + (if mode + (car face) + (cdr face)))))))))) ;;;###autoload (defun align-unhighlight-rule () From f232715aac07318aaa192da1d73619c10523951b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Engdeg=C3=A5rd?= Date: Wed, 30 Dec 2020 13:04:26 +0100 Subject: [PATCH 066/116] ; * src/nsmenu.m: Undo unintentional change --- src/nsmenu.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nsmenu.m b/src/nsmenu.m index de0c61ceb54..a356cffbea3 100644 --- a/src/nsmenu.m +++ b/src/nsmenu.m @@ -571,8 +571,8 @@ - (void)fillWithWidgetValue: (void *)wvptr /* Set a right-aligned tab stop at the maximum width, so that the key will appear immediately to the left of it. */ NSTextTab *tab = - [[[NSTextTab alloc] initWithTextAlignment: NSTextAlignmentLeft - location: maxWidth - maxKeyWidth + [[[NSTextTab alloc] initWithTextAlignment: NSTextAlignmentRight + location: maxWidth options: @{}] autorelease]; NSMutableParagraphStyle *pstyle = [[[NSMutableParagraphStyle alloc] init] autorelease]; From 26bfaa1f786651725f8829e0b71980e6656dd0c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Engdeg=C3=A5rd?= Date: Wed, 30 Dec 2020 13:06:47 +0100 Subject: [PATCH 067/116] Use standard key symbols in NS menu entries * src/nsmenu.m (skipspc): Remove. (key_symbols, prettify_key): New. ([EmacsMenu fillWithWidgetValue:]): Call prettify_key. --- src/nsmenu.m | 70 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 60 insertions(+), 10 deletions(-) diff --git a/src/nsmenu.m b/src/nsmenu.m index a356cffbea3..12506b9eb66 100644 --- a/src/nsmenu.m +++ b/src/nsmenu.m @@ -457,14 +457,6 @@ - (BOOL)performKeyEquivalent: (NSEvent *)theEvent } -static const char * -skipspc (const char *s) -{ - while (*s == ' ') - s++; - return s; -} - - (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr attributes: (NSDictionary *)attributes { @@ -484,7 +476,7 @@ - (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr item = [[[NSMenuItem alloc] init] autorelease]; if (wv->key) { - NSString *key = [NSString stringWithUTF8String: skipspc (wv->key)]; + NSString *key = [NSString stringWithUTF8String: wv->key]; #ifdef NS_IMPL_COCOA /* Cocoa only permits a single key (with modifiers) as keyEquivalent, so we put them in the title string @@ -536,6 +528,63 @@ -(void)removeAllItems } +typedef struct { + const char *from, *to; +} subst_t; + +/* Standard keyboard symbols used in menus. */ +static const subst_t key_symbols[] = { + {"", "⌫"}, + {"DEL", "⌫"}, + {"", "⌦"}, + {"", "↩"}, + {"RET", "↩"}, + {"", "←"}, + {"", "→"}, + {"", "↑"}, + {"", "↓"}, + {"", "⇞"}, + {"", "⇟"}, + {"", "↖"}, + {"", "↘"}, + {"", "⇥"}, + {"TAB", "⇥"}, + {"", "⇤"}, +}; + +/* Transform the key sequence KEY into something prettier by + substituting keyboard symbols. */ +static char * +prettify_key (const char *key) +{ + while (*key == ' ') key++; + + int len = strlen (key); + char *buf = xmalloc (len + 1); + memcpy (buf, key, len + 1); + for (int i = 0; i < ARRAYELTS (key_symbols); i++) + { + ptrdiff_t fromlen = strlen (key_symbols[i].from); + char *p = buf; + while (p < buf + len) + { + char *match = memmem (buf, len, key_symbols[i].from, fromlen); + if (!match) + break; + ptrdiff_t tolen = strlen (key_symbols[i].to); + eassert (tolen <= fromlen); + memcpy (match, key_symbols[i].to, tolen); + memmove (match + tolen, match + fromlen, + len - (match + fromlen - buf) + 1); + len -= fromlen - tolen; + p = match + tolen; + } + } + Lisp_Object result = build_string (buf); + xfree (buf); + return SSDATA (result); +} + - (void)fillWithWidgetValue: (void *)wvptr { widget_value *first_wv = (widget_value *)wvptr; @@ -559,7 +608,8 @@ - (void)fillWithWidgetValue: (void *)wvptr maxNameWidth = MAX(maxNameWidth, nameSize.width); if (wv->key) { - NSString *key = [NSString stringWithUTF8String: skipspc (wv->key)]; + wv->key = prettify_key (wv->key); + NSString *key = [NSString stringWithUTF8String: wv->key]; NSSize keySize = [key sizeWithAttributes: font_attribs]; maxKeyWidth = MAX(maxKeyWidth, keySize.width); } From c4c8da67e85c92a296426e3fd39a15ffb80b0b41 Mon Sep 17 00:00:00 2001 From: Alan Third Date: Wed, 30 Dec 2020 15:39:26 +0000 Subject: [PATCH 068/116] Fix Help menu on macOS * src/nsmenu.m (ns_update_menubar): Make sure to reset the help menu when we move it to another submenu. --- src/nsmenu.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/nsmenu.m b/src/nsmenu.m index 12506b9eb66..5b0225c8ff1 100644 --- a/src/nsmenu.m +++ b/src/nsmenu.m @@ -365,6 +365,9 @@ else submenu = [menu addSubmenuWithTitle: wv->name]; + if ([[submenu title] isEqualToString:@"Help"]) + [NSApp setHelpMenu:submenu]; + if (deep_p) [submenu fillWithWidgetValue: wv->contents]; From 059f1863a268d6e9bd2c9b8e05e8546d4dd8f50b Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Wed, 30 Dec 2020 18:31:56 +0000 Subject: [PATCH 069/116] CC Mode: correct the handling of empty strings In particular, have the macro cache invalidated after its last use in c-before-change. * lisp/progmodes/cc-langs.el (c-get-state-before-change-functions): Remove c-invalidate-macro-cache from the entries it's in, moving it to.... * lisp/progmodes/cc-mode.el (c-before-change): Call c-invalidate-macro-cache directly from the functions, after the call to c-invalidate-state-cache. --- lisp/progmodes/cc-langs.el | 2 -- lisp/progmodes/cc-mode.el | 6 +++++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index b10a085552d..c3cd81e1e82 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el @@ -457,13 +457,11 @@ so that all identifiers are recognized as words.") c-before-change-check-raw-strings c-before-change-check-<>-operators c-depropertize-CPP - c-invalidate-macro-cache c-truncate-bs-cache c-before-change-check-unbalanced-strings c-parse-quotes-before-change) (c objc) '(c-extend-region-for-CPP c-depropertize-CPP - c-invalidate-macro-cache c-truncate-bs-cache c-before-change-check-unbalanced-strings c-parse-quotes-before-change) diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index 2f1885e5b61..d4c868dd1fc 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -2065,7 +2065,11 @@ Note that this is a strict tail, so won't match, e.g. \"0x....\".") ;; The following must be done here rather than in `c-after-change' ;; because newly inserted parens would foul up the invalidation ;; algorithm. - (c-invalidate-state-cache beg))) + (c-invalidate-state-cache beg) + ;; The following must happen after the previous, which likely alters + ;; the macro cache. + (when c-opt-cpp-symbol + (c-invalidate-macro-cache beg end)))) (defvar c-in-after-change-fontification nil) (make-variable-buffer-local 'c-in-after-change-fontification) From f80eb0d44800c45b534056ae38401a03bed814bc Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Wed, 30 Dec 2020 22:16:26 +0100 Subject: [PATCH 070/116] ; * test/src/process-tests.el: Fix comment style. --- test/src/process-tests.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/src/process-tests.el b/test/src/process-tests.el index aeb5b750212..21a9a964be5 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -425,4 +425,4 @@ FD_SETSIZE file descriptors (Bug#24325)." (delete-process process))))) (provide 'process-tests) -;; process-tests.el ends here. +;;; process-tests.el ends here From 72dc46584cec3652c910b7c414e83353a5b536e9 Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Wed, 30 Dec 2020 22:17:52 +0100 Subject: [PATCH 071/116] * src/nsterm.m (ns_select): Fix off-by-one error, and add assertion --- src/nsterm.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/nsterm.m b/src/nsterm.m index 161677484f9..1a23fc6912c 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -4697,7 +4697,8 @@ in certain situations (rapid incoming events). return -1; } - for (k = 0; k < nfds+1; k++) + eassert (nfds <= FD_SETSIZE); + for (k = 0; k < nfds; k++) { if (readfds && FD_ISSET(k, readfds)) ++nr; if (writefds && FD_ISSET(k, writefds)) ++nr; From 3a6137a498fe065cadbbf9a1f0575623155a9e55 Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Wed, 30 Dec 2020 22:28:06 +0100 Subject: [PATCH 072/116] Extend and overhaul FD_SETSIZE overflow tests. Instead of trying to generate the right number of processes, pre-create lots of unused pipe processes until creation fails. Extend the tests to the 'pty' connection type and other kinds of process objects. * test/src/process-tests.el (process-tests--ignore-EMFILE) (process-tests--with-buffers, process-tests--with-processes) (process-tests--with-many-pipes, process-tests--with-temp-file) (process-tests--with-temp-directory): New helper macros. (process-tests/fd-setsize-no-crash/make-process): Renamed from 'process-tests/fd-setsize-no-crash'. Fail on timeout. Also test the 'pty' connection type. Pre-create lots of pipe processes so we reach the FD_SETSIZE limit faster. Ignore EMFILE more precisely, if possible. (process-tests/fd-setsize-no-crash/make-pipe-process) (process-tests/fd-setsize-no-crash/make-network-process) (process-tests/fd-setsize-no-crash/make-serial-process): New tests that test FD_SETSIZE limits for other kinds of processes. (process-tests--EMFILE-message): New helper function and cache variable. (process-tests--new-pty): New helper function. --- test/src/process-tests.el | 342 ++++++++++++++++++++++++++++++++++---- 1 file changed, 307 insertions(+), 35 deletions(-) diff --git a/test/src/process-tests.el b/test/src/process-tests.el index 21a9a964be5..7d8679e9e1c 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -23,8 +23,11 @@ ;;; Code: +(require 'cl-lib) (require 'ert) (require 'puny) +(require 'rx) +(require 'subr-x) ;; Timeout in seconds; the test fails if the timeout is reached. (defvar process-test-sentinel-wait-timeout 2.0) @@ -386,43 +389,312 @@ See Bug#30460." "Check that looking up non-existent domain returns nil" (should (eq nil (network-lookup-address-info "emacs.invalid"))))) -(ert-deftest process-tests/fd-setsize-no-crash () +(defmacro process-tests--ignore-EMFILE (&rest body) + "Evaluate BODY, ignoring EMFILE errors." + (declare (indent 0) (debug t)) + (let ((err (make-symbol "err")) + (message (make-symbol "message"))) + `(let ((,message (process-tests--EMFILE-message))) + (condition-case ,err + ,(macroexp-progn body) + (file-error + ;; If we couldn't determine the EMFILE message, just ignore + ;; all `file-error' signals. + (and ,message + (not (string-equal (caddr ,err) ,message)) + (signal (car ,err) (cdr ,err)))))))) + +(defmacro process-tests--with-buffers (var &rest body) + "Bind VAR to nil and evaluate BODY. +Afterwards, kill all buffers in the list VAR. BODY should add +some buffer objects to VAR." + (declare (indent 1) (debug (symbolp body))) + (cl-check-type var symbol) + `(let ((,var nil)) + (unwind-protect + ,(macroexp-progn body) + (mapc #'kill-buffer ,var)))) + +(defmacro process-tests--with-processes (var &rest body) + "Bind VAR to nil and evaluate BODY. +Afterwards, delete all processes in the list VAR. BODY should +add some process objects to VAR." + (declare (indent 1) (debug (symbolp body))) + (cl-check-type var symbol) + `(let ((,var nil)) + (unwind-protect + ,(macroexp-progn body) + (mapc #'delete-process ,var)))) + +(defmacro process-tests--with-many-pipes (&rest body) + "Generate lots of pipe processes. +Try to generate pipe processes until we are close to the +FD_SETSIZE limit. Within BODY, only a small number of file +descriptors should still be available." + (declare (indent 0) (debug (symbolp symbolp body))) + (let ((process (make-symbol "process")) + (processes (make-symbol "processes")) + (buffer (make-symbol "buffer")) + (buffers (make-symbol "buffers")) + ;; FD_SETSIZE is typically 1024 on Unix-like systems. On + ;; MS-Windows we artificially limit FD_SETSIZE to 64, see the + ;; commentary in w32proc.c. + (fd-setsize (if (eq system-type 'windows-nt) 64 1024))) + `(process-tests--with-buffers ,buffers + (process-tests--with-processes ,processes + ;; First, allocate enough pipes to definitely exceed the + ;; FD_SETSIZE limit. + (cl-loop for i from 1 to ,(1+ fd-setsize) + for ,buffer = (generate-new-buffer + (format " *pipe %d*" i)) + do (push ,buffer ,buffers) + for ,process = (process-tests--ignore-EMFILE + (make-pipe-process + :name (format "pipe %d" i) + :buffer ,buffer + :coding 'no-conversion + :noquery t)) + while ,process + do (push ,process ,processes)) + (unless (cddr ,processes) + (ert-fail "Couldn't allocate enough pipes")) + ;; Delete two pipes to test more edge cases. + (delete-process (pop ,processes)) + (delete-process (pop ,processes)) + ,@body)))) + +(defmacro process-tests--with-temp-file (var &rest body) + "Bind VAR to the name of a new regular file and evaluate BODY. +Afterwards, delete the file." + (declare (indent 1) (debug (symbolp body))) + (cl-check-type var symbol) + (let ((file (make-symbol "file"))) + `(let ((,file (make-temp-file "emacs-test-"))) + (unwind-protect + (let ((,var ,file)) + ,@body) + (delete-file ,file))))) + +(defmacro process-tests--with-temp-directory (var &rest body) + "Bind VAR to the name of a new directory and evaluate BODY. +Afterwards, delete the directory." + (declare (indent 1) (debug (symbolp body))) + (cl-check-type var symbol) + (let ((dir (make-symbol "dir"))) + `(let ((,dir (make-temp-file "emacs-test-" :dir))) + (unwind-protect + (let ((,var ,dir)) + ,@body) + (delete-directory ,dir :recursive))))) + +;; Tests for FD_SETSIZE overflow (Bug#24325). The following tests +;; generate lots of process objects of the various kinds. Running the +;; tests with assertions enabled should not result in any crashes due +;; to file descriptor set overflow. These tests first generate lots +;; of unused pipe processes to fill up the file descriptor space. +;; Then, they create a few instances of the process type under test. + +(ert-deftest process-tests/fd-setsize-no-crash/make-process () "Check that Emacs doesn't crash when trying to use more than FD_SETSIZE file descriptors (Bug#24325)." - (with-timeout (60) - (let ((sleep (executable-find "sleep")) - ;; FD_SETSIZE is typically 1024 on Unix-like systems. - ;; On MS-Windows we artificially limit FD_SETSIZE to 64, - ;; see the commentary in w32proc.c. - (fd-setsize (if (eq system-type 'windows-nt) 64 1024)) - ;; `make-process' allocates at least four file descriptors per process - ;; when using the pipe communication method. However, it closes two of - ;; them in the parent process, so we end up with only two new - ;; descriptors per process. - (fds-per-process 2) - (processes ())) - (skip-unless sleep) - ;; Start processes until we exhaust the file descriptor set size. - (dotimes (i (1+ (/ fd-setsize fds-per-process))) - (let ((process - ;; Failure to allocate more file descriptors should signal - ;; `file-error', but not crash. Since we don't know the exact - ;; limit, we ignore `file-error'. - (ignore-error 'file-error - (make-process :name (format "test %d" i) - :buffer nil - :command (list sleep "5") - :coding 'no-conversion - :noquery t - :connection-type 'pipe)))) - (when process (push process processes)))) - ;; We should have managed to start at least one process. - (should processes) - (dolist (process processes) - (while (accept-process-output process)) - (should (eq (process-status process) 'exit)) - (should (eql (process-exit-status process) 0)) - (delete-process process))))) + (with-timeout (60 (ert-fail "Test timed out")) + (let ((sleep (executable-find "sleep"))) + (skip-unless sleep) + (dolist (conn-type '(pipe pty)) + (ert-info ((format "Connection type `%s'" conn-type)) + (process-tests--with-many-pipes + (process-tests--with-processes processes + ;; Start processes until we exhaust the file descriptor + ;; set size. We assume that each process requires at + ;; least one file descriptor. + (dotimes (i 10) + (let ((process + ;; Failure to allocate more file descriptors + ;; should signal `file-error', but not crash. + ;; Since we don't know the exact limit, we + ;; ignore `file-error'. + (process-tests--ignore-EMFILE + (make-process :name (format "test %d" i) + :command (list sleep "5") + :connection-type conn-type + :coding 'no-conversion + :noquery t)))) + (when process (push process processes)))) + ;; We should have managed to start at least one process. + (should processes) + (dolist (process processes) + (while (accept-process-output process)) + (should (eq (process-status process) 'exit)) + (should (eql (process-exit-status process) 0)))))))))) + +(ert-deftest process-tests/fd-setsize-no-crash/make-pipe-process () + "Check that Emacs doesn't crash when trying to use more than +FD_SETSIZE file descriptors (Bug#24325)." + (with-timeout (60 (ert-fail "Test timed out")) + (process-tests--with-many-pipes + (process-tests--with-buffers buffers + (process-tests--with-processes processes + ;; Start processes until we exhaust the file descriptor set + ;; size. We assume that each process requires at least one + ;; file descriptor. + (dotimes (i 10) + (let ((buffer (generate-new-buffer (format " *%d*" i)))) + (push buffer buffers) + (let ((process + ;; Failure to allocate more file descriptors + ;; should signal `file-error', but not crash. + ;; Since we don't know the exact limit, we ignore + ;; `file-error'. + (process-tests--ignore-EMFILE + (make-pipe-process :name (format "test %d" i) + :buffer buffer + :coding 'no-conversion + :noquery t)))) + (when process (push process processes))))) + ;; We should have managed to start at least one process. + (should processes)))))) + +(ert-deftest process-tests/fd-setsize-no-crash/make-network-process () + "Check that Emacs doesn't crash when trying to use more than +FD_SETSIZE file descriptors (Bug#24325)." + (skip-unless (featurep 'make-network-process '(:server t))) + (skip-unless (featurep 'make-network-process '(:family local))) + (with-timeout (60 (ert-fail "Test timed out")) + (process-tests--with-temp-directory directory + (process-tests--with-processes processes + (let* ((num-clients 10) + (socket-name (expand-file-name "socket" directory)) + ;; Run a UNIX server to connect to. + (server (make-network-process :name "server" + :server num-clients + :buffer nil + :service socket-name + :family 'local + :coding 'no-conversion + :noquery t))) + (push server processes) + (process-tests--with-many-pipes + ;; Start processes until we exhaust the file descriptor + ;; set size. We assume that each process requires at + ;; least one file descriptor. + (dotimes (i num-clients) + (let ((client + ;; Failure to allocate more file descriptors + ;; should signal `file-error', but not crash. + ;; Since we don't know the exact limit, we ignore + ;; `file-error'. + (process-tests--ignore-EMFILE + (make-network-process + :name (format "client %d" i) + :service socket-name + :family 'local + :coding 'no-conversion + :noquery t)))) + (when client (push client processes)))) + ;; We should have managed to start at least one process. + (should processes))))))) + +(ert-deftest process-tests/fd-setsize-no-crash/make-serial-process () + "Check that Emacs doesn't crash when trying to use more than +FD_SETSIZE file descriptors (Bug#24325)." + (with-timeout (60 (ert-fail "Test timed out")) + (skip-unless (file-executable-p shell-file-name)) + (skip-unless (executable-find "tty")) + (skip-unless (executable-find "sleep")) + ;; `process-tests--new-pty' probably only works with GNU Bash. + (skip-unless (string-equal + (file-name-nondirectory shell-file-name) "bash")) + (process-tests--with-processes processes + ;; In order to use `make-serial-process', we need to create some + ;; pseudoterminals. The easiest way to do that is to start a + ;; normal process using the `pty' connection type. We need to + ;; ensure that the terminal stays around while we connect to it. + ;; Create the host processes before the dummy pipes so we have a + ;; high chance of succeeding here. + (let ((tty-names ())) + (dotimes (_ 10) + (cl-destructuring-bind + (host tty-name) (process-tests--new-pty) + (should (processp host)) + (push host processes) + (should tty-name) + (should (file-exists-p tty-name)) + (push tty-name tty-names))) + (process-tests--with-many-pipes + (process-tests--with-processes processes + (process-tests--with-buffers buffers + (dolist (tty-name tty-names) + (let ((buffer (generate-new-buffer + (format " *%s*" tty-name)))) + (push buffer buffers) + ;; Failure to allocate more file descriptors should + ;; signal `file-error', but not crash. Since we + ;; don't know the exact limit, we ignore + ;; `file-error'. + (let ((process (process-tests--ignore-EMFILE + (make-serial-process + :name (format "test %s" tty-name) + :port tty-name + :speed 9600 + :buffer buffer + :coding 'no-conversion + :noquery t)))) + (when process (push process processes)))))) + ;; We should have managed to start at least one process. + (should processes))))))) + +(defvar process-tests--EMFILE-message :unknown + "Cached result of the function `process-tests--EMFILE-message'.") + +(defun process-tests--EMFILE-message () + "Return the error message for the EMFILE POSIX error. +Return nil if that can't be determined." + (when (eq process-tests--EMFILE-message :unknown) + (setq process-tests--EMFILE-message + (with-temp-buffer + (when (eql (call-process "errno" nil t nil "EMFILE") 0) + (goto-char (point-min)) + (when (looking-at (rx "EMFILE" (+ blank) (+ digit) + (+ blank) (group (+ nonl)))) + (match-string-no-properties 1)))))) + process-tests--EMFILE-message) + +(defun process-tests--new-pty () + "Allocate a new pseudoterminal. +Return a list (PROCESS TTY-NAME)." + ;; The command below will typically only work with GNU Bash. + (should (string-equal (file-name-nondirectory shell-file-name) + "bash")) + (process-tests--with-temp-file temp-file + (should-not (file-remote-p temp-file)) + (let* ((command (list shell-file-name shell-command-switch + (format "tty > %s && sleep 60" + (shell-quote-argument + (file-name-unquote temp-file))))) + (process (make-process :name "tty host" + :command command + :buffer nil + :coding 'utf-8-unix + :connection-type 'pty + :noquery t)) + (tty-name nil) + (coding-system-for-read 'utf-8-unix) + (coding-system-for-write 'utf-8-unix)) + ;; Wait until TTY name has arrived. + (with-timeout (2 (message "Timed out waiting for TTY name")) + (while (and (process-live-p process) (not tty-name)) + (sleep-for 0.1) + (when-let ((attributes (file-attributes temp-file))) + (when (cl-plusp (file-attribute-size attributes)) + (with-temp-buffer + (insert-file-contents temp-file) + (goto-char (point-max)) + ;; `tty' has printed a trailing newline. + (skip-chars-backward "\n") + (unless (bobp) + (setq tty-name (buffer-substring-no-properties + (point-min) (point))))))))) + (list process tty-name)))) (provide 'process-tests) ;;; process-tests.el ends here From 0ea7bb3578998ebdf7c4903e7f38a8abf2e41b68 Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Wed, 30 Dec 2020 22:33:22 +0100 Subject: [PATCH 073/116] Consistently check for FD_SETSIZE overflow. Previously this was only checked in a few places. Now assert that file descriptors are within the expected range whenever we'd otherwise introduce undefined behavior. * src/process.c (add_read_fd, add_process_read_fd, delete_read_fd) (recompute_max_desc, delete_write_fd, compute_input_wait_mask) (compute_non_process_wait_mask, compute_non_keyboard_wait_mask) (compute_write_mask, clear_waiting_thread_info) (update_processes_for_thread_death, Fset_process_thread) (create_process, create_pty, Fmake_pipe_process) (Fprocess_datagram_address, Fset_process_datagram_address) (Fmake_serial_process, finish_after_tls_connection) (connect_network_socket, deactivate_process) (server_accept_connection, wait_reading_process_output) (read_process_output, read_and_dispose_of_process_output) (send_process, Fcontinue_process, Fprocess_send_eof) (Fprocess_filter_multibyte_p, keyboard_bit_set) (add_timer_wait_descriptor, setup_process_coding_systems): Add assertions to document and check that file descriptors are within the expected range when used as file descriptor set elements or array subscripts. --- src/process.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/process.c b/src/process.c index 28ab15c9038..7c56366d8e1 100644 --- a/src/process.c +++ b/src/process.c @@ -465,6 +465,7 @@ add_read_fd (int fd, fd_callback func, void *data) { add_keyboard_wait_descriptor (fd); + eassert (0 <= fd && fd < FD_SETSIZE); fd_callback_info[fd].func = func; fd_callback_info[fd].data = data; } @@ -485,6 +486,7 @@ static void add_process_read_fd (int fd) { add_non_keyboard_read_fd (fd); + eassert (0 <= fd && fd < FD_SETSIZE); fd_callback_info[fd].flags |= PROCESS_FD; } @@ -495,6 +497,7 @@ delete_read_fd (int fd) { delete_keyboard_wait_descriptor (fd); + eassert (0 <= fd && fd < FD_SETSIZE); if (fd_callback_info[fd].flags == 0) { fd_callback_info[fd].func = 0; @@ -534,6 +537,7 @@ recompute_max_desc (void) { int fd; + eassert (max_desc < FD_SETSIZE); for (fd = max_desc; fd >= 0; --fd) { if (fd_callback_info[fd].flags != 0) @@ -542,6 +546,7 @@ recompute_max_desc (void) break; } } + eassert (max_desc < FD_SETSIZE); } /* Stop monitoring file descriptor FD for when write is possible. */ @@ -549,6 +554,7 @@ recompute_max_desc (void) void delete_write_fd (int fd) { + eassert (0 <= fd && fd < FD_SETSIZE); if ((fd_callback_info[fd].flags & NON_BLOCKING_CONNECT_FD) != 0) { if (--num_pending_connects < 0) @@ -571,6 +577,7 @@ compute_input_wait_mask (fd_set *mask) int fd; FD_ZERO (mask); + eassert (max_desc < FD_SETSIZE); for (fd = 0; fd <= max_desc; ++fd) { if (fd_callback_info[fd].thread != NULL @@ -593,6 +600,7 @@ compute_non_process_wait_mask (fd_set *mask) int fd; FD_ZERO (mask); + eassert (max_desc < FD_SETSIZE); for (fd = 0; fd <= max_desc; ++fd) { if (fd_callback_info[fd].thread != NULL @@ -616,6 +624,7 @@ compute_non_keyboard_wait_mask (fd_set *mask) int fd; FD_ZERO (mask); + eassert (max_desc < FD_SETSIZE); for (fd = 0; fd <= max_desc; ++fd) { if (fd_callback_info[fd].thread != NULL @@ -639,6 +648,7 @@ compute_write_mask (fd_set *mask) int fd; FD_ZERO (mask); + eassert (max_desc < FD_SETSIZE); for (fd = 0; fd <= max_desc; ++fd) { if (fd_callback_info[fd].thread != NULL @@ -660,6 +670,7 @@ clear_waiting_thread_info (void) { int fd; + eassert (max_desc < FD_SETSIZE); for (fd = 0; fd <= max_desc; ++fd) { if (fd_callback_info[fd].waiting_thread == current_thread) @@ -936,8 +947,10 @@ update_processes_for_thread_death (Lisp_Object dying_thread) struct Lisp_Process *proc = XPROCESS (process); pset_thread (proc, Qnil); + eassert (proc->infd < FD_SETSIZE); if (proc->infd >= 0) fd_callback_info[proc->infd].thread = NULL; + eassert (proc->outfd < FD_SETSIZE); if (proc->outfd >= 0) fd_callback_info[proc->outfd].thread = NULL; } @@ -1378,8 +1391,10 @@ If THREAD is nil, the process is unlocked. */) proc = XPROCESS (process); pset_thread (proc, thread); + eassert (proc->infd < FD_SETSIZE); if (proc->infd >= 0) fd_callback_info[proc->infd].thread = tstate; + eassert (proc->outfd < FD_SETSIZE); if (proc->outfd >= 0) fd_callback_info[proc->outfd].thread = tstate; @@ -2108,6 +2123,7 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir) fcntl (outchannel, F_SETFL, O_NONBLOCK); /* Record this as an active process, with its channels. */ + eassert (0 <= inchannel && inchannel < FD_SETSIZE); chan_process[inchannel] = process; p->infd = inchannel; p->outfd = outchannel; @@ -2215,6 +2231,7 @@ create_pty (Lisp_Object process) /* Record this as an active process, with its channels. As a result, child_setup will close Emacs's side of the pipes. */ + eassert (0 <= pty_fd && pty_fd < FD_SETSIZE); chan_process[pty_fd] = process; p->infd = pty_fd; p->outfd = pty_fd; @@ -2308,6 +2325,7 @@ usage: (make-pipe-process &rest ARGS) */) #endif /* Record this as an active process, with its channels. */ + eassert (0 <= inchannel && inchannel < FD_SETSIZE); chan_process[inchannel] = proc; p->infd = inchannel; p->outfd = outchannel; @@ -2637,6 +2655,7 @@ set up yet, this function will block until socket setup has completed. */) return Qnil; channel = XPROCESS (process)->infd; + eassert (0 <= channel && channel < FD_SETSIZE); return conv_sockaddr_to_lisp (datagram_address[channel].sa, datagram_address[channel].len); } @@ -2665,6 +2684,7 @@ set up yet, this function will block until socket setup has completed. */) channel = XPROCESS (process)->infd; len = get_lisp_to_sockaddr_size (address, &family); + eassert (0 <= channel && channel < FD_SETSIZE); if (len == 0 || datagram_address[channel].len != len) return Qnil; conv_lisp_to_sockaddr (family, address, datagram_address[channel].sa, len); @@ -3043,6 +3063,7 @@ usage: (make-serial-process &rest ARGS) */) p->outfd = fd; if (fd > max_desc) max_desc = fd; + eassert (0 <= fd && fd < FD_SETSIZE); chan_process[fd] = proc; buffer = Fplist_get (contact, QCbuffer); @@ -3213,6 +3234,7 @@ finish_after_tls_connection (Lisp_Object proc) Fplist_get (contact, QChost), Fplist_get (contact, QCservice)); + eassert (p->outfd < FD_SETSIZE); if (NILP (result)) { pset_status (p, list2 (Qfailed, @@ -3463,6 +3485,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, #ifdef DATAGRAM_SOCKETS if (p->socktype == SOCK_DGRAM) { + eassert (0 <= s && s < FD_SETSIZE); if (datagram_address[s].sa) emacs_abort (); @@ -3527,6 +3550,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, inch = s; outch = s; + eassert (0 <= inch && inch < FD_SETSIZE); chan_process[inch] = proc; fcntl (inch, F_SETFL, O_NONBLOCK); @@ -3553,6 +3577,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, if (! (connecting_status (p->status) && EQ (XCDR (p->status), addrinfos))) pset_status (p, Fcons (Qconnect, addrinfos)); + eassert (0 <= inch && inch < FD_SETSIZE); if ((fd_callback_info[inch].flags & NON_BLOCKING_CONNECT_FD) == 0) add_non_blocking_write_fd (inch); } @@ -4620,6 +4645,7 @@ deactivate_process (Lisp_Object proc) close_process_fd (&p->open_fd[i]); inchannel = p->infd; + eassert (inchannel < FD_SETSIZE); if (inchannel >= 0) { p->infd = -1; @@ -4853,6 +4879,7 @@ server_accept_connection (Lisp_Object server, int channel) Lisp_Object name = Fformat (nargs, args); Lisp_Object proc = make_process (name); + eassert (0 <= s && s < FD_SETSIZE); chan_process[s] = proc; fcntl (s, F_SETFL, O_NONBLOCK); @@ -5132,6 +5159,8 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, if (! NILP (wait_for_cell) && ! NILP (XCAR (wait_for_cell))) break; + eassert (max_desc < FD_SETSIZE); + #if defined HAVE_GETADDRINFO_A || defined HAVE_GNUTLS { Lisp_Object process_list_head, aproc; @@ -5875,6 +5904,7 @@ read_process_output (Lisp_Object proc, int channel) { ssize_t nbytes; struct Lisp_Process *p = XPROCESS (proc); + eassert (0 <= channel && channel < FD_SETSIZE); struct coding_system *coding = proc_decode_coding_system[channel]; int carryover = p->decoding_carryover; ptrdiff_t readmax = clip_to_bounds (1, read_process_output_max, PTRDIFF_MAX); @@ -6039,6 +6069,7 @@ read_and_dispose_of_process_output (struct Lisp_Process *p, char *chars, proc_encode_coding_system[p->outfd] surely points to a valid memory because p->outfd will be changed once EOF is sent to the process. */ + eassert (p->outfd < FD_SETSIZE); if (NILP (p->encode_coding_system) && p->outfd >= 0 && proc_encode_coding_system[p->outfd]) { @@ -6278,6 +6309,7 @@ send_process (Lisp_Object proc, const char *buf, ptrdiff_t len, if (p->outfd < 0) error ("Output file descriptor of %s is closed", SDATA (p->name)); + eassert (p->outfd < FD_SETSIZE); coding = proc_encode_coding_system[p->outfd]; Vlast_coding_system_used = CODING_ID_NAME (coding->id); @@ -6387,6 +6419,7 @@ send_process (Lisp_Object proc, const char *buf, ptrdiff_t len, /* Send this batch, using one or more write calls. */ ptrdiff_t written = 0; int outfd = p->outfd; + eassert (0 <= outfd && outfd < FD_SETSIZE); #ifdef DATAGRAM_SOCKETS if (DATAGRAM_CHAN_P (outfd)) { @@ -6837,6 +6870,7 @@ traffic. */) struct Lisp_Process *p; p = XPROCESS (process); + eassert (p->infd < FD_SETSIZE); if (EQ (p->command, Qt) && p->infd >= 0 && (!EQ (p->filter, Qt) || EQ (p->status, Qlisten))) @@ -6964,6 +6998,7 @@ process has been transmitted to the serial port. */) outfd = XPROCESS (proc)->outfd; + eassert (outfd < FD_SETSIZE); if (outfd >= 0) coding = proc_encode_coding_system[outfd]; @@ -7011,11 +7046,13 @@ process has been transmitted to the serial port. */) p->open_fd[WRITE_TO_SUBPROCESS] = new_outfd; p->outfd = new_outfd; + eassert (0 <= new_outfd && new_outfd < FD_SETSIZE); if (!proc_encode_coding_system[new_outfd]) proc_encode_coding_system[new_outfd] = xmalloc (sizeof (struct coding_system)); if (old_outfd >= 0) { + eassert (old_outfd < FD_SETSIZE); *proc_encode_coding_system[new_outfd] = *proc_encode_coding_system[old_outfd]; memset (proc_encode_coding_system[old_outfd], 0, @@ -7464,6 +7501,7 @@ DEFUN ("process-filter-multibyte-p", Fprocess_filter_multibyte_p, struct Lisp_Process *p = XPROCESS (process); if (p->infd < 0) return Qnil; + eassert (p->infd < FD_SETSIZE); struct coding_system *coding = proc_decode_coding_system[p->infd]; return (CODING_FOR_UNIBYTE (coding) ? Qnil : Qt); } @@ -7497,6 +7535,7 @@ keyboard_bit_set (fd_set *mask) { int fd; + eassert (max_desc < FD_SETSIZE); for (fd = 0; fd <= max_desc; fd++) if (FD_ISSET (fd, mask) && ((fd_callback_info[fd].flags & (FOR_READ | KEYBOARD_FD)) @@ -7744,6 +7783,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, void add_timer_wait_descriptor (int fd) { + eassert (0 <= fd && fd < FD_SETSIZE); add_read_fd (fd, timerfd_callback, NULL); fd_callback_info[fd].flags &= ~KEYBOARD_FD; } @@ -7806,6 +7846,7 @@ setup_process_coding_systems (Lisp_Object process) if (inch < 0 || outch < 0) return; + eassert (0 <= inch && inch < FD_SETSIZE); if (!proc_decode_coding_system[inch]) proc_decode_coding_system[inch] = xmalloc (sizeof (struct coding_system)); coding_system = p->decode_coding_system; @@ -7817,6 +7858,7 @@ setup_process_coding_systems (Lisp_Object process) } setup_coding_system (coding_system, proc_decode_coding_system[inch]); + eassert (0 <= outch && outch < FD_SETSIZE); if (!proc_encode_coding_system[outch]) proc_encode_coding_system[outch] = xmalloc (sizeof (struct coding_system)); setup_coding_system (p->encode_coding_system, From ab5f550bd9ad0bc5d7b6df99093b7eda23218ae6 Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Wed, 30 Dec 2020 23:13:19 +0100 Subject: [PATCH 074/116] Fix an incorrect Edebug specification. * test/src/process-tests.el (process-tests--with-many-pipes): Fix incorrect Edebug specification. --- test/src/process-tests.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/src/process-tests.el b/test/src/process-tests.el index 7d8679e9e1c..3a19b6c6f14 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -431,7 +431,7 @@ add some process objects to VAR." Try to generate pipe processes until we are close to the FD_SETSIZE limit. Within BODY, only a small number of file descriptors should still be available." - (declare (indent 0) (debug (symbolp symbolp body))) + (declare (indent 0) (debug t)) (let ((process (make-symbol "process")) (processes (make-symbol "processes")) (buffer (make-symbol "buffer")) From f43f1e32e92ef341077b4ffdfdd743b1a6d9d284 Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Thu, 31 Dec 2020 00:05:14 +0100 Subject: [PATCH 075/116] Fix a potential unit test breakage on GNU/Linux. * test/src/process-tests.el (process-tests/fd-setsize-no-crash/make-process): Allow special exit codes that can happen if terminal setup fails in the child process. --- test/src/process-tests.el | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/test/src/process-tests.el b/test/src/process-tests.el index 3a19b6c6f14..590f72f9b03 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -525,7 +525,14 @@ FD_SETSIZE file descriptors (Bug#24325)." (dolist (process processes) (while (accept-process-output process)) (should (eq (process-status process) 'exit)) - (should (eql (process-exit-status process) 0)))))))))) + ;; If there's an error between fork and exec, Emacs + ;; will use exit statuses between 125 and 127, see + ;; process.h. This can happen if the child process + ;; tries to set up terminal device but fails due to + ;; file number limits. We don't treat this as an + ;; error. + (should (memql (process-exit-status process) + '(0 125 126 127))))))))))) (ert-deftest process-tests/fd-setsize-no-crash/make-pipe-process () "Check that Emacs doesn't crash when trying to use more than From 8bc85d46cc9214a531f2d2ecb3f5fb48af8105a6 Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Wed, 30 Dec 2020 23:43:07 +0100 Subject: [PATCH 076/116] Manually limit file descriptors that we select on to FD_SETSIZE. This works even if another thread or process resets the resource limit for open file descriptors, e.g., using 'prlimit' on GNU/Linux. * src/process.c (create_process, create_pty, Fmake_pipe_process) (Fmake_serial_process, connect_network_socket) (server_accept_connection): Limit file descriptors to FD_SETSIZE. * test/src/process-tests.el (process-tests--with-raised-rlimit): New helper macro. (process-tests--fd-setsize-test): Rename from 'process-tests--with-many-pipes'. Increase resource limit during test if possible. (process-tests/fd-setsize-no-crash/make-process) (process-tests/fd-setsize-no-crash/make-pipe-process) (process-tests/fd-setsize-no-crash/make-network-process) (process-tests--new-pty): Rename callers. --- src/process.c | 25 ++++++++++ test/src/process-tests.el | 100 +++++++++++++++++++++++++++----------- 2 files changed, 96 insertions(+), 29 deletions(-) diff --git a/src/process.c b/src/process.c index 7c56366d8e1..ba2bb3c9e46 100644 --- a/src/process.c +++ b/src/process.c @@ -2114,6 +2114,9 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir) } } + if (FD_SETSIZE <= inchannel || FD_SETSIZE <= outchannel) + report_file_errno ("Creating pipe", Qnil, EMFILE); + #ifndef WINDOWSNT if (emacs_pipe (p->open_fd + READ_FROM_EXEC_MONITOR) != 0) report_file_error ("Creating pipe", Qnil); @@ -2210,6 +2213,8 @@ create_pty (Lisp_Object process) if (pty_fd >= 0) { p->open_fd[SUBPROCESS_STDIN] = pty_fd; + if (FD_SETSIZE <= pty_fd) + report_file_errno ("Opening pty", Qnil, EMFILE); #if ! defined (USG) || defined (USG_SUBTTY_WORKS) /* On most USG systems it does not work to open the pty's tty here, then close it and reopen it in the child. */ @@ -2317,6 +2322,9 @@ usage: (make-pipe-process &rest ARGS) */) outchannel = p->open_fd[WRITE_TO_SUBPROCESS]; inchannel = p->open_fd[READ_FROM_SUBPROCESS]; + if (FD_SETSIZE <= inchannel || FD_SETSIZE <= outchannel) + report_file_errno ("Creating pipe", Qnil, EMFILE); + fcntl (inchannel, F_SETFL, O_NONBLOCK); fcntl (outchannel, F_SETFL, O_NONBLOCK); @@ -3059,6 +3067,8 @@ usage: (make-serial-process &rest ARGS) */) fd = serial_open (port); p->open_fd[SUBPROCESS_STDIN] = fd; + if (FD_SETSIZE <= fd) + report_file_errno ("Opening serial port", Qnil, EMFILE); p->infd = fd; p->outfd = fd; if (fd > max_desc) @@ -3280,6 +3290,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, if (!NILP (use_external_socket_p)) { socket_to_use = external_sock_fd; + eassert (socket_to_use < FD_SETSIZE); /* Ensure we don't consume the external socket twice. */ external_sock_fd = -1; @@ -3321,6 +3332,13 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, xerrno = errno; continue; } + if (FD_SETSIZE <= s) + { + emacs_close (s); + s = -1; + xerrno = EMFILE; + continue; + } } if (p->is_non_blocking_client && ! (SOCK_NONBLOCK && socket_to_use < 0)) @@ -4782,6 +4800,13 @@ server_accept_connection (Lisp_Object server, int channel) s = accept4 (channel, &saddr.sa, &len, SOCK_CLOEXEC); + if (FD_SETSIZE <= s) + { + emacs_close (s); + s = -1; + errno = EMFILE; + } + if (s < 0) { int code = errno; diff --git a/test/src/process-tests.el b/test/src/process-tests.el index 590f72f9b03..eee8636067c 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -426,11 +426,52 @@ add some process objects to VAR." ,(macroexp-progn body) (mapc #'delete-process ,var)))) -(defmacro process-tests--with-many-pipes (&rest body) - "Generate lots of pipe processes. +(defmacro process-tests--with-raised-rlimit (&rest body) + "Evaluate BODY using a higher limit for the number of open files. +Attempt to set the resource limit for the number of open files +temporarily to the highest possible value." + (declare (indent 0) (debug t)) + (let ((prlimit (make-symbol "prlimit")) + (soft (make-symbol "soft")) + (hard (make-symbol "hard")) + (pid-arg (make-symbol "pid-arg"))) + `(let ((,prlimit (executable-find "prlimit")) + (,pid-arg (format "--pid=%d" (emacs-pid))) + (,soft nil) (,hard nil)) + (cl-flet ((set-limit + (value) + (cl-check-type value natnum) + (when ,prlimit + (call-process ,prlimit nil nil nil + ,pid-arg + (format "--nofile=%d:" value))))) + (when ,prlimit + (with-temp-buffer + (when (eql (call-process ,prlimit nil t nil + ,pid-arg "--nofile" + "--raw" "--noheadings" + "--output=SOFT,HARD") + 0) + (goto-char (point-min)) + (when (looking-at (rx (group (+ digit)) (+ blank) + (group (+ digit)) ?\n)) + (setq ,soft (string-to-number + (match-string-no-properties 1)) + ,hard (string-to-number + (match-string-no-properties 2)))))) + (and ,soft ,hard (< ,soft ,hard) + (set-limit ,hard))) + (unwind-protect + ,(macroexp-progn body) + (when ,soft (set-limit ,soft))))))) + +(defmacro process-tests--fd-setsize-test (&rest body) + "Run BODY as a test for FD_SETSIZE overflow. Try to generate pipe processes until we are close to the FD_SETSIZE limit. Within BODY, only a small number of file -descriptors should still be available." +descriptors should still be available. Furthermore, raise the +maximum number of open files in the Emacs process above +FD_SETSIZE." (declare (indent 0) (debug t)) (let ((process (make-symbol "process")) (processes (make-symbol "processes")) @@ -440,28 +481,29 @@ descriptors should still be available." ;; MS-Windows we artificially limit FD_SETSIZE to 64, see the ;; commentary in w32proc.c. (fd-setsize (if (eq system-type 'windows-nt) 64 1024))) - `(process-tests--with-buffers ,buffers - (process-tests--with-processes ,processes - ;; First, allocate enough pipes to definitely exceed the - ;; FD_SETSIZE limit. - (cl-loop for i from 1 to ,(1+ fd-setsize) - for ,buffer = (generate-new-buffer - (format " *pipe %d*" i)) - do (push ,buffer ,buffers) - for ,process = (process-tests--ignore-EMFILE - (make-pipe-process - :name (format "pipe %d" i) - :buffer ,buffer - :coding 'no-conversion - :noquery t)) - while ,process - do (push ,process ,processes)) - (unless (cddr ,processes) - (ert-fail "Couldn't allocate enough pipes")) - ;; Delete two pipes to test more edge cases. - (delete-process (pop ,processes)) - (delete-process (pop ,processes)) - ,@body)))) + `(process-tests--with-raised-rlimit + (process-tests--with-buffers ,buffers + (process-tests--with-processes ,processes + ;; First, allocate enough pipes to definitely exceed the + ;; FD_SETSIZE limit. + (cl-loop for i from 1 to ,(1+ fd-setsize) + for ,buffer = (generate-new-buffer + (format " *pipe %d*" i)) + do (push ,buffer ,buffers) + for ,process = (process-tests--ignore-EMFILE + (make-pipe-process + :name (format "pipe %d" i) + :buffer ,buffer + :coding 'no-conversion + :noquery t)) + while ,process + do (push ,process ,processes)) + (unless (cddr ,processes) + (ert-fail "Couldn't allocate enough pipes")) + ;; Delete two pipes to test more edge cases. + (delete-process (pop ,processes)) + (delete-process (pop ,processes)) + ,@body))))) (defmacro process-tests--with-temp-file (var &rest body) "Bind VAR to the name of a new regular file and evaluate BODY. @@ -502,7 +544,7 @@ FD_SETSIZE file descriptors (Bug#24325)." (skip-unless sleep) (dolist (conn-type '(pipe pty)) (ert-info ((format "Connection type `%s'" conn-type)) - (process-tests--with-many-pipes + (process-tests--fd-setsize-test (process-tests--with-processes processes ;; Start processes until we exhaust the file descriptor ;; set size. We assume that each process requires at @@ -538,7 +580,7 @@ FD_SETSIZE file descriptors (Bug#24325)." "Check that Emacs doesn't crash when trying to use more than FD_SETSIZE file descriptors (Bug#24325)." (with-timeout (60 (ert-fail "Test timed out")) - (process-tests--with-many-pipes + (process-tests--fd-setsize-test (process-tests--with-buffers buffers (process-tests--with-processes processes ;; Start processes until we exhaust the file descriptor set @@ -580,7 +622,7 @@ FD_SETSIZE file descriptors (Bug#24325)." :coding 'no-conversion :noquery t))) (push server processes) - (process-tests--with-many-pipes + (process-tests--fd-setsize-test ;; Start processes until we exhaust the file descriptor ;; set size. We assume that each process requires at ;; least one file descriptor. @@ -627,7 +669,7 @@ FD_SETSIZE file descriptors (Bug#24325)." (should tty-name) (should (file-exists-p tty-name)) (push tty-name tty-names))) - (process-tests--with-many-pipes + (process-tests--fd-setsize-test (process-tests--with-processes processes (process-tests--with-buffers buffers (dolist (tty-name tty-names) From 0eef70aea892a5b783623a948808b5bc1131c8e0 Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Wed, 30 Dec 2020 22:36:07 +0100 Subject: [PATCH 077/116] Minor improvements to FD_SETSIZE overflow checks. * src/process.c (Fmake_serial_process): Add port to error data. (connect_network_socket): Add an explanatory comment. --- src/process.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/process.c b/src/process.c index ba2bb3c9e46..e845e2055e3 100644 --- a/src/process.c +++ b/src/process.c @@ -3068,7 +3068,7 @@ usage: (make-serial-process &rest ARGS) */) fd = serial_open (port); p->open_fd[SUBPROCESS_STDIN] = fd; if (FD_SETSIZE <= fd) - report_file_errno ("Opening serial port", Qnil, EMFILE); + report_file_errno ("Opening serial port", port, EMFILE); p->infd = fd; p->outfd = fd; if (fd > max_desc) @@ -3332,6 +3332,7 @@ connect_network_socket (Lisp_Object proc, Lisp_Object addrinfos, xerrno = errno; continue; } + /* Reject file descriptors that would be too large. */ if (FD_SETSIZE <= s) { emacs_close (s); From aba77849cd2a7249048d37d988c5659a9209317e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=ADn?= Date: Thu, 31 Dec 2020 04:31:22 +0100 Subject: [PATCH 078/116] Add some tests to find-func.el --- test/lisp/emacs-lisp/find-func-tests.el | 63 +++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/test/lisp/emacs-lisp/find-func-tests.el b/test/lisp/emacs-lisp/find-func-tests.el index 03df4bb9ff4..3960aff2a59 100644 --- a/test/lisp/emacs-lisp/find-func-tests.el +++ b/test/lisp/emacs-lisp/find-func-tests.el @@ -27,6 +27,7 @@ ;;; Code: (require 'ert-x) ;For `ert-run-keys'. +(require 'find-func) (ert-deftest find-func-tests--library-completion () ;bug#43393 ;; FIXME: How can we make this work in batch (see also @@ -43,6 +44,68 @@ (concat data-directory (kbd "n x / TAB RET")) (read-library-name))))) +(ert-deftest find-func-tests--locate-symbols () + (should (cdr + (find-function-search-for-symbol + #'goto-line nil "simple"))) + (should (cdr + (find-function-search-for-symbol + 'minibuffer-history 'defvar "simple"))) + (should (cdr + (find-function-search-for-symbol + 'with-current-buffer nil "subr"))) + (should (cdr + (find-function-search-for-symbol + 'font-lock-warning-face 'defface "font-lock"))) + (should-not (cdr + (find-function-search-for-symbol + 'wrong-variable 'defvar "simple"))) + (should-not (cdr + (find-function-search-for-symbol + 'wrong-function nil "simple"))) + (should (cdr (find-function-noselect #'goto-line))) + (should (cdr (find-function-noselect #'goto-char))) + ;; Setting LISP-ONLY and passing a primitive should error. + (should-error (find-function-noselect #'goto-char t)) + (should-error (find-function-noselect 'wrong-function))) + +(defun test-locate-helper (func &optional expected-result) + "Assert on the result of `find-function-library' for FUNC. +EXPECTED-RESULT is an alist (FUNC . LIBRARY) with the +expected function symbol and function library, respectively." + (cl-destructuring-bind (orig-function . library) + (find-function-library func) + (cl-destructuring-bind (expected-func . expected-library) + expected-result + (should (eq orig-function expected-func)) + (should (and + (not (string-empty-p expected-library)) + (string-match-p expected-library library)))))) + +(ert-deftest find-func-tests--locate-library () + (test-locate-helper #'goto-line '(goto-line . "simple")) + (test-locate-helper #'forward-char '(forward-char . "cmds.c")) + (should-error (test-locate-helper 'wrong-function))) + +(ert-deftest find-func-tests--locate-adviced-symbols () + (defun my-message () + (message "Hello!")) + (advice-add #'mark-sexp :around 'my-message) + (test-locate-helper #'mark-sexp '(mark-sexp . "lisp")) + (advice-remove #'mark-sexp 'my-message)) + +(ert-deftest find-func-tests--find-library-verbose () + (find-function-library #'join-line nil t) + (with-current-buffer "*Messages*" + (save-excursion + (goto-char (point-max)) + (skip-chars-backward "\n") + (should (string-match-p + ".join-line. is an alias for .delete-indentation." + (buffer-substring + (line-beginning-position) + (point))))))) + ;; Avoid a byte-compilation warning that may confuse people reading ;; the result of the following test. (declare-function compilation--message->loc nil "compile") From 3d9f20cfcf647063e62ba12187cf3b4bcd4d9685 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Thu, 31 Dec 2020 05:00:45 +0100 Subject: [PATCH 079/116] Add test for add-to-ordered-list --- test/lisp/subr-tests.el | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/lisp/subr-tests.el b/test/lisp/subr-tests.el index 25da19574a9..3154135ce17 100644 --- a/test/lisp/subr-tests.el +++ b/test/lisp/subr-tests.el @@ -597,6 +597,22 @@ See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=19350." (undo-boundary) (undo) (should (equal (buffer-string) "")))) + +(defvar subr--ordered nil) + +(ert-deftest subr--add-to-ordered-list () + (setq subr--ordered nil) + (add-to-ordered-list 'subr--ordered 'b 2) + (should (equal subr--ordered '(b))) + (add-to-ordered-list 'subr--ordered 'c 3) + (should (equal subr--ordered '(b c))) + (add-to-ordered-list 'subr--ordered 'a 1) + (should (equal subr--ordered '(a b c))) + (add-to-ordered-list 'subr--ordered 'e) + (should (equal subr--ordered '(a b c e))) + (add-to-ordered-list 'subr--ordered 'd 4) + (should (equal subr--ordered '(a b c d e)))) + ;;; Apropos. From b1ac23ebef62d5a185727a4973462828dc6f65f0 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Thu, 31 Dec 2020 05:28:47 +0100 Subject: [PATCH 080/116] Allow add-to-ordered-list to use a test predicate * doc/lispref/lists.texi (List Variables): Update manual. * lisp/subr.el (add-to-ordered-list): Allow using a test predicate, and make slightly more efficient (bug#45539). --- doc/lispref/lists.texi | 9 +++++---- etc/NEWS | 3 +++ lisp/subr.el | 43 +++++++++++++++++++++++++---------------- test/lisp/subr-tests.el | 28 +++++++++++++++++++++++++-- 4 files changed, 60 insertions(+), 23 deletions(-) diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi index ae793d5e15e..21ee386335e 100644 --- a/doc/lispref/lists.texi +++ b/doc/lispref/lists.texi @@ -807,13 +807,14 @@ foo ;; @r{@code{foo} was changed.} (setq @var{var} (cons @var{value} @var{var}))) @end example -@defun add-to-ordered-list symbol element &optional order +@defun add-to-ordered-list symbol element &optional order test-function This function sets the variable @var{symbol} by inserting @var{element} into the old value, which must be a list, at the position specified by @var{order}. If @var{element} is already a -member of the list, its position in the list is adjusted according -to @var{order}. Membership is tested using @code{eq}. -This function returns the resulting list, whether updated or not. +member of the list, its position in the list is adjusted according to +@var{order}. Membership is tested using @var{test-function}, +defaulting to @code{eq} if @var{test-function} isn't present. This +function returns the resulting list, whether updated or not. The @var{order} is typically a number (integer or float), and the elements of the list are sorted in non-decreasing numerical order. diff --git a/etc/NEWS b/etc/NEWS index 1b49b015608..865dbdf516c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1482,6 +1482,9 @@ that makes it a valid button. ** Miscellaneous ++++ +*** 'add-to-ordered-list' can now take a test predicate. + +++ *** New predicate functions 'length<', 'length>' and 'length='. Using these functions may be more efficient than using 'length' (if diff --git a/lisp/subr.el b/lisp/subr.el index ed0d6978d03..77b142c4152 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1971,13 +1971,13 @@ can do the job." (cons element (symbol-value list-var)))))) -(defun add-to-ordered-list (list-var element &optional order) +(defun add-to-ordered-list (list-var element &optional order test-function) "Add ELEMENT to the value of LIST-VAR if it isn't there yet. -The test for presence of ELEMENT is done with `eq'. +TEST-FUNCTION is used to test for the presence of ELEMENT, and +defaults to `eq'. -The resulting list is reordered so that the elements are in the -order given by each element's numeric list order. Elements -without a numeric list order are placed at the end of the list. +The value of LIST-VAR is kept ordered based on the ORDER +parameter. If the third optional argument ORDER is a number (integer or float), set the element's list order to the given value. If @@ -1990,21 +1990,30 @@ The list order for each element is stored in LIST-VAR's LIST-VAR cannot refer to a lexical variable. The return value is the new value of LIST-VAR." - (let ((ordering (get list-var 'list-order))) + (let ((ordering (get list-var 'list-order)) + missing) + ;; Make a hash table for storing the ordering. (unless ordering (put list-var 'list-order - (setq ordering (make-hash-table :weakness 'key :test 'eq)))) - (when order - (puthash element (and (numberp order) order) ordering)) - (unless (memq element (symbol-value list-var)) + (setq ordering (make-hash-table :weakness 'key + :test (or test-function #'eq))))) + (when (and test-function + (not (eq test-function (hash-table-test ordering)))) + (error "Conflicting test functions given")) + ;; Add new values. + (when (setq missing (eq (gethash element ordering 'missing) 'missing)) (set list-var (cons element (symbol-value list-var)))) - (set list-var (sort (symbol-value list-var) - (lambda (a b) - (let ((oa (gethash a ordering)) - (ob (gethash b ordering))) - (if (and oa ob) - (< oa ob) - oa))))))) + ;; Set/change the order. + (when (or order missing) + (setf (gethash element ordering) (and (numberp order) order))) + (set list-var + (sort (symbol-value list-var) + (lambda (a b) + (let ((oa (gethash a ordering)) + (ob (gethash b ordering))) + (if (and oa ob) + (< oa ob) + oa))))))) (defun add-to-history (history-var newelt &optional maxelt keep-all) "Add NEWELT to the history list stored in the variable HISTORY-VAR. diff --git a/test/lisp/subr-tests.el b/test/lisp/subr-tests.el index 3154135ce17..5be3b8915a2 100644 --- a/test/lisp/subr-tests.el +++ b/test/lisp/subr-tests.el @@ -600,7 +600,7 @@ See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=19350." (defvar subr--ordered nil) -(ert-deftest subr--add-to-ordered-list () +(ert-deftest subr--add-to-ordered-list-eq () (setq subr--ordered nil) (add-to-ordered-list 'subr--ordered 'b 2) (should (equal subr--ordered '(b))) @@ -611,7 +611,31 @@ See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=19350." (add-to-ordered-list 'subr--ordered 'e) (should (equal subr--ordered '(a b c e))) (add-to-ordered-list 'subr--ordered 'd 4) - (should (equal subr--ordered '(a b c d e)))) + (should (equal subr--ordered '(a b c d e))) + (add-to-ordered-list 'subr--ordered 'e) + (should (equal subr--ordered '(a b c d e))) + (add-to-ordered-list 'subr--ordered 'b 5) + (should (equal subr--ordered '(a c d b e)))) + +(defvar subr--ordered-s nil) + +(ert-deftest subr--add-to-ordered-list-equal () + (setq subr--ordered-s nil) + (add-to-ordered-list 'subr--ordered-s "b" 2 #'equal) + (should (equal subr--ordered-s '("b"))) + (add-to-ordered-list 'subr--ordered-s "c" 3) + (should (equal subr--ordered-s '("b" "c"))) + (add-to-ordered-list 'subr--ordered-s "a" 1) + (should (equal subr--ordered-s '("a" "b" "c"))) + (add-to-ordered-list 'subr--ordered-s "e") + (should (equal subr--ordered-s '("a" "b" "c" "e"))) + (add-to-ordered-list 'subr--ordered-s "d" 4) + (should (equal subr--ordered-s '("a" "b" "c" "d" "e"))) + (add-to-ordered-list 'subr--ordered-s "e") + (should (equal subr--ordered-s '("a" "b" "c" "d" "e"))) + (add-to-ordered-list 'subr--ordered-s "b" 5) + (should (equal subr--ordered-s '("a" "c" "d" "b" "e"))) + (should-error (add-to-ordered-list 'subr--ordered-s "b" 5 #'eql))) ;;; Apropos. From 144b883eb0d82552d91f509846fce6af410832f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=ADn?= Date: Thu, 31 Dec 2020 06:00:24 +0100 Subject: [PATCH 081/116] Fix duplicated entry in gnus-mime-action-alist * lisp/gnus/gnus-art.el (gnus-mime-action-alist): Remove duplicated "toggle display" entry and call the appropriate function for the "view as charset" action (bug#45561). --- lisp/gnus/gnus-art.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 79d4d9087fb..a8a9092f43a 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -1061,7 +1061,7 @@ used." ("view the part" . gnus-mime-view-part) ("pipe to command" . gnus-mime-pipe-part) ("toggle display" . gnus-article-press-button) - ("toggle display" . gnus-article-view-part-as-charset) + ("view as charset" . gnus-mime-view-part-as-charset) ("view as type" . gnus-mime-view-part-as-type) ("view internally" . gnus-mime-view-part-internally) ("view externally" . gnus-mime-view-part-externally)) From 72b8430fea79cb1ebb8c3652babf42a12569ab8a Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Thu, 31 Dec 2020 06:35:49 +0100 Subject: [PATCH 082/116] Add lexical-binding cookie to autoload files * build-aux/update-subdirs: * lisp/emacs-lisp/autoload.el (autoload-rubric): Add lexical-binding cookie to generated files (bug#44854). --- lisp/emacs-lisp/autoload.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/emacs-lisp/autoload.el b/lisp/emacs-lisp/autoload.el index 07bda537b39..4d0c6c2f682 100644 --- a/lisp/emacs-lisp/autoload.el +++ b/lisp/emacs-lisp/autoload.el @@ -368,7 +368,8 @@ FILE's name." (let ((basename (file-name-nondirectory file)) (lp (if (equal type "package") (setq type "autoloads")))) (concat ";;; " basename - " --- automatically extracted " (or type "autoloads") "\n" + " --- automatically extracted " (or type "autoloads") + " -*- lexical-binding: t -*-\n" ";;\n" ";;; Code:\n\n" (if lp From 46c4bcd3927d47b1d694d80087041ef0c0112477 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Wed, 30 Dec 2020 20:52:43 +0100 Subject: [PATCH 083/116] Minor cleanup in doc.c * src/doc.c (get_doc_string, Fdocumentation) (Fdocumentation_property, store_function_docstring): Minor cleanup. --- src/doc.c | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/src/doc.c b/src/doc.c index 5f23e3d0bba..f7db05254b9 100644 --- a/src/doc.c +++ b/src/doc.c @@ -82,10 +82,7 @@ Lisp_Object get_doc_string (Lisp_Object filepos, bool unibyte, bool definition) { char *from, *to, *name, *p, *p1; - int fd; - int offset; - EMACS_INT position; - Lisp_Object file, tem, pos; + Lisp_Object file, pos; ptrdiff_t count = SPECPDL_INDEX (); USE_SAFE_ALLOCA; @@ -102,7 +99,7 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool definition) else return Qnil; - position = eabs (XFIXNUM (pos)); + EMACS_INT position = eabs (XFIXNUM (pos)); if (!STRINGP (Vdoc_directory)) return Qnil; @@ -113,7 +110,7 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool definition) /* Put the file name in NAME as a C string. If it is relative, combine it with Vdoc_directory. */ - tem = Ffile_name_absolute_p (file); + Lisp_Object tem = Ffile_name_absolute_p (file); file = ENCODE_FILE (file); Lisp_Object docdir = NILP (tem) ? ENCODE_FILE (Vdoc_directory) : empty_unibyte_string; @@ -123,7 +120,7 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool definition) name = SAFE_ALLOCA (docdir_sizemax + SBYTES (file)); lispstpcpy (lispstpcpy (name, docdir), file); - fd = emacs_open (name, O_RDONLY, 0); + int fd = emacs_open (name, O_RDONLY, 0); if (fd < 0) { if (will_dump_p ()) @@ -150,7 +147,7 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool definition) /* Seek only to beginning of disk block. */ /* Make sure we read at least 1024 bytes before `position' so we can check the leading text for consistency. */ - offset = min (position, max (1024, position % (8 * 1024))); + int offset = min (position, max (1024, position % (8 * 1024))); if (TYPE_MAXIMUM (off_t) < position || lseek (fd, position - offset, 0) < 0) error ("Position %"pI"d out of range in doc string file \"%s\"", @@ -164,7 +161,6 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool definition) { ptrdiff_t space_left = (get_doc_string_buffer_size - 1 - (p - get_doc_string_buffer)); - int nread; /* Allocate or grow the buffer if we need to. */ if (space_left <= 0) @@ -182,7 +178,7 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool definition) If we read the same block last time, maybe skip this? */ if (space_left > 1024 * 8) space_left = 1024 * 8; - nread = emacs_read_quit (fd, p, space_left); + int nread = emacs_read_quit (fd, p, space_left); if (nread < 0) report_file_error ("Read error on documentation file", file); p[nread] = 0; @@ -240,10 +236,8 @@ get_doc_string (Lisp_Object filepos, bool unibyte, bool definition) { if (*from == 1) { - int c; - from++; - c = *from++; + int c = *from++; if (c == 1) *to++ = c; else if (c == '0') @@ -313,10 +307,8 @@ Unless a non-nil second argument RAW is given, the string is passed through `substitute-command-keys'. */) (Lisp_Object function, Lisp_Object raw) { - Lisp_Object fun; - Lisp_Object funcar; Lisp_Object doc; - bool try_reload = 1; + bool try_reload = true; documentation: @@ -330,7 +322,7 @@ string is passed through `substitute-command-keys'. */) raw); } - fun = Findirect_function (function, Qnil); + Lisp_Object fun = Findirect_function (function, Qnil); if (NILP (fun)) xsignal1 (Qvoid_function, function); if (CONSP (fun) && EQ (XCAR (fun), Qmacro)) @@ -362,7 +354,7 @@ string is passed through `substitute-command-keys'. */) } else if (CONSP (fun)) { - funcar = XCAR (fun); + Lisp_Object funcar = XCAR (fun); if (!SYMBOLP (funcar)) xsignal1 (Qinvalid_function, fun); else if (EQ (funcar, Qkeymap)) @@ -406,7 +398,7 @@ string is passed through `substitute-command-keys'. */) try_reload = reread_doc_file (Fcar_safe (doc)); if (try_reload) { - try_reload = 0; + try_reload = false; goto documentation; } } @@ -430,7 +422,7 @@ This differs from `get' in that it can refer to strings stored in the aren't strings. */) (Lisp_Object symbol, Lisp_Object prop, Lisp_Object raw) { - bool try_reload = 1; + bool try_reload = true; Lisp_Object tem; documentation_property: @@ -462,7 +454,7 @@ aren't strings. */) try_reload = reread_doc_file (Fcar_safe (doc)); if (try_reload) { - try_reload = 0; + try_reload = false; goto documentation_property; } } @@ -492,9 +484,7 @@ store_function_docstring (Lisp_Object obj, EMACS_INT offset) fun = XCDR (fun); if (CONSP (fun)) { - Lisp_Object tem; - - tem = XCAR (fun); + Lisp_Object tem = XCAR (fun); if (EQ (tem, Qlambda) || EQ (tem, Qautoload) || (EQ (tem, Qclosure) && (fun = XCDR (fun), 1))) { From efe591143f3df326c11eb65f5aeea419405d4b90 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Thu, 31 Dec 2020 12:11:31 +0100 Subject: [PATCH 084/116] Fix some shellcheck linter warnings * admin/diff-tar-files: * admin/merge-gnulib: * admin/merge-pkg-config: * admin/update-copyright: * build-aux/git-hooks/prepare-commit-msg: * make-dist: Fix some shellcheck linter warnings. --- admin/diff-tar-files | 4 +-- admin/merge-gnulib | 4 +-- admin/merge-pkg-config | 2 +- admin/update-copyright | 4 +-- build-aux/git-hooks/prepare-commit-msg | 4 +-- make-dist | 36 +++++++++++++------------- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/admin/diff-tar-files b/admin/diff-tar-files index cbcec862329..52c7a480a4c 100755 --- a/admin/diff-tar-files +++ b/admin/diff-tar-files @@ -35,7 +35,7 @@ old_tmp=/tmp/old.$$ new_tmp=/tmp/new.$$ trap "rm -f $old_tmp $new_tmp; exit 1" 1 2 15 -tar tzf $old_tar | sed -e 's,^[^/]*,,' | sort > $old_tmp -tar tzf $new_tar | sed -e 's,^[^/]*,,' | sort > $new_tmp +tar tzf "$old_tar" | sed -e 's,^[^/]*,,' | sort > $old_tmp +tar tzf "$new_tar" | sed -e 's,^[^/]*,,' | sort > $new_tmp diff -u $old_tmp $new_tmp rm -f $new_tmp $old_tmp diff --git a/admin/merge-gnulib b/admin/merge-gnulib index 880dc5eef53..ed701ce1339 100755 --- a/admin/merge-gnulib +++ b/admin/merge-gnulib @@ -105,8 +105,8 @@ for module in $AVOIDED_MODULES; do avoided_flags="$avoided_flags --avoid=$module" done -"$gnulib_srcdir"/gnulib-tool --dir="$src" $GNULIB_TOOL_FLAGS \ - $avoided_flags $GNULIB_MODULES && +"$gnulib_srcdir"/gnulib-tool --dir="$src" "$GNULIB_TOOL_FLAGS" \ + "$avoided_flags" "$GNULIB_MODULES" && rm -- "$src"lib/gl_openssl.h "$src"m4/fcntl-o.m4 \ "$src"m4/gl-openssl.m4 \ "$src"m4/gnulib-cache.m4 "$src"m4/gnulib-tool.m4 \ diff --git a/admin/merge-pkg-config b/admin/merge-pkg-config index 6ec54ce9edf..ab705ccebfa 100755 --- a/admin/merge-pkg-config +++ b/admin/merge-pkg-config @@ -60,4 +60,4 @@ test -d m4 || { printf >&2 '%s\n' "$0: copying $dir/pkg.m4 to m4/pkg.m4" -cp $dir/pkg.m4 m4 +cp "$dir"/pkg.m4 m4 diff --git a/admin/update-copyright b/admin/update-copyright index a70d7a3ff93..f392b09c10b 100755 --- a/admin/update-copyright +++ b/admin/update-copyright @@ -53,7 +53,7 @@ repo_files=$(git ls-files) && # . They are GMP files, maintained by the GMP project, with their own dates. # . Their format cannot withstand changing the contents of copyright strings. -updatable_files=$(find $repo_files \ +updatable_files=$(find "$repo_files" \ ! -name COPYING \ ! -name doclicense.texi \ ! -name gpl.texi \ @@ -74,4 +74,4 @@ updatable_files=$(find $repo_files \ ! -name 'mini-gmp.[ch]' \ -print) && -build-aux/update-copyright $updatable_files +build-aux/update-copyright "$updatable_files" diff --git a/build-aux/git-hooks/prepare-commit-msg b/build-aux/git-hooks/prepare-commit-msg index dbb1264b495..06e328a1c39 100755 --- a/build-aux/git-hooks/prepare-commit-msg +++ b/build-aux/git-hooks/prepare-commit-msg @@ -24,9 +24,9 @@ SHA1=$3 # Prefer gawk if available, as it handles NUL bytes properly. if type gawk >/dev/null 2>&1; then - awk=gawk + awk="gawk" else - awk=awk + awk="awk" fi exec $awk ' diff --git a/make-dist b/make-dist index de4f343ddd4..cdbc8e96844 100755 --- a/make-dist +++ b/make-dist @@ -190,7 +190,7 @@ if [ ! "${version}" ]; then exit 1 fi -echo Version number is $version +echo Version number is "$version" if [ $update = yes ]; then if ! grep -q "tree holds version *${version}" README; then @@ -257,8 +257,8 @@ if [ $check = yes ]; then bogosities= while read elc; do el=`echo $elc | sed 's/c$//'` - [ -r $el ] || continue - [ $elc -nt $el ] || bogosities="$bogosities $elc" + [ -r "$el" ] || continue + [ "$elc" -nt "$el" ] || bogosities="$bogosities $elc" done < $temp_elc if [ x"${bogosities}" != x"" ]; then @@ -271,7 +271,7 @@ if [ $check = yes ]; then bogosities= for file in $losers; do - grep -q "^;.*no-byte-compile: t" $file && continue + grep -q "^;.*no-byte-compile: t" "$file" && continue case $file in site-init.el | site-load.el | site-start.el | default.el) continue ;; esac @@ -295,8 +295,8 @@ if [ $check = yes ]; then info=`sed -n 's/^@setfilename //p' $texi | sed 's|.*info/||'` [ x"${info}" != x"" ] || continue info=info/$info - [ -r $info ] || continue - [ $info -nt $texi ] || bogosities="$bogosities $info" + [ -r "$info" ] || continue + [ "$info" -nt "$texi" ] || bogosities="$bogosities $info" done < $temp_el rm -f $temp_el @@ -407,7 +407,7 @@ if ( [ $update = yes ] || [ ! -f $manifest ] ) && [ -r .git ]; then else git ls-files | grep -v '^test' >$manifest fi || exit - printf '%s\n' $possibly_non_vc_files $info_files >>$manifest || exit + printf '%s\n' "$possibly_non_vc_files" "$info_files" >>$manifest || exit sort -u -o $manifest $manifest || exit fi @@ -424,7 +424,7 @@ if [ $verbose = yes ] && (mkdir --verbose ${tempdir}) >/dev/null 2>&1; then mkdir_verbose='mkdir --verbose' else mkdir $tempdir || exit - mkdir_verbose=mkdir + mkdir_verbose="mkdir" fi # file_to_skip is normally empty to link every file, @@ -460,14 +460,14 @@ MANIFEST_subdir_sed=' s,^,'$tempdir'/, ' tempsubdirs=$(sed "$MANIFEST_subdir_sed" $manifest | sort -u) -$mkdir_verbose -p $tempsubdirs || exit +$mkdir_verbose -p "$tempsubdirs" || exit echo "Making links to files" while read file; do case $file in MANIFEST) ln $manifest $tempdir/MANIFEST || exit ;; $file_to_skip) continue ;; - *) ln $file $tempdir/$file || exit ;; + *) ln "$file" $tempdir/"$file" || exit ;; esac done <$manifest @@ -476,7 +476,7 @@ if [ "${newer}" ]; then ## We remove .elc files unconditionally, on the theory that anyone picking ## up an incremental distribution already has a running Emacs to byte-compile ## them with. - find ${tempdir} \( -name '*.elc' -o ! -newer ${newer} \) \ + find ${tempdir} \( -name '*.elc' -o ! -newer "${newer}" \) \ -exec rm -f {} \; || exit fi @@ -487,12 +487,12 @@ if [ "${make_tar}" = yes ]; then sed -e 's/^:/.:/' -e 's/::/:.:/g' -e 's/:$/:./' -e 's/:/ /g' ` for dir in ${temppath}; do - [ -x ${dir}/$default_gzip ] || continue + [ -x "${dir}"/$default_gzip ] || continue found=1; break done if [ "$found" = "0" ]; then echo "WARNING: '$default_gzip' not found, will not compress" >&2 - default_gzip=cat + default_gzip="cat" fi case "${default_gzip}" in bzip2) gzip_extension=.bz2 ;; @@ -508,17 +508,17 @@ if [ "${make_tar}" = yes ]; then (cd $tempparent && case $default_gzip in - cat) tar $taropt -cf - $emacsname;; - *) if tar $taropt -cf /dev/null --use-compress-program="$default_gzip" \ + cat) tar "$taropt" -cf - $emacsname;; + *) if tar "$taropt" -cf /dev/null --use-compress-program="$default_gzip" \ $emacsname/src/lisp.h > /dev/null 2>&1 then - tar $taropt -cf - --use-compress-program="$default_gzip" $emacsname + tar "$taropt" -cf - --use-compress-program="$default_gzip" $emacsname else - tar $taropt -cf $emacsname.tar $emacsname && + tar "$taropt" -cf $emacsname.tar $emacsname && $default_gzip <$emacsname.tar fi;; esac - ) >$emacsname.tar$gzip_extension || exit + ) >$emacsname.tar"$gzip_extension" || exit fi ## Why are we deleting the staging directory if clean_up is no? From 57d97bb170e86c77dede5456ab8fd178c3a5bf61 Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Thu, 31 Dec 2020 13:17:11 +0100 Subject: [PATCH 085/116] Unbreak process tests if 'errno' is not installed. * test/src/process-tests.el (process-tests--EMFILE-message): Don't signal an error if the 'errno' binary is unavailable. --- test/src/process-tests.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/src/process-tests.el b/test/src/process-tests.el index eee8636067c..7a83df9eefa 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -701,7 +701,9 @@ Return nil if that can't be determined." (when (eq process-tests--EMFILE-message :unknown) (setq process-tests--EMFILE-message (with-temp-buffer - (when (eql (call-process "errno" nil t nil "EMFILE") 0) + (when (eql (ignore-error 'file-error + (call-process "errno" nil t nil "EMFILE")) + 0) (goto-char (point-min)) (when (looking-at (rx "EMFILE" (+ blank) (+ digit) (+ blank) (group (+ nonl)))) From 2f8a7bcdc8c4b1ef0a5b46fb773fa7e058a20243 Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Thu, 31 Dec 2020 12:14:54 +0000 Subject: [PATCH 086/116] CC Mode. Fix AWK Mode fontification bug, remove some unused variables * lisp/progmodes/cc-awk.el (awk-font-lock-keywords): Replace a hard use of c-preprocessor-face-name by an `eval' expression which evaluates it. * lisp/progmodes/cc-engine.el (c-in-knr-argdecl, c-laomib-put-cache) (c-laomib-fix-elt): Remove unused bound variables. --- lisp/progmodes/cc-awk.el | 2 +- lisp/progmodes/cc-engine.el | 45 ++++++++++++++++++------------------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/lisp/progmodes/cc-awk.el b/lisp/progmodes/cc-awk.el index 841c3a4bb6d..72a4b070490 100644 --- a/lisp/progmodes/cc-awk.el +++ b/lisp/progmodes/cc-awk.el @@ -1037,7 +1037,7 @@ std\\(err\\|in\\|out\\)\\|user\\)\\)\\>\ 0 c-preprocessor-face-name)) ;; Directives - '("@\\(include\\|load\\|namespace\\)\\>" 0 c-preprocessor-face-name) + `(eval . '("@\\(include\\|load\\|namespace\\)\\>" 0 ,c-preprocessor-face-name)) ;; gawk debugging keywords. (acm, 2002/7/21) ;; (Removed, 2003/6/6. These functions are now fontified as built-ins) diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 51f620ea1f0..7444f0f8051 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -10893,7 +10893,7 @@ comment at the start of cc-engine.el for more info." (pp-count-out 20) ; Max number of paren/brace constructs before ; we give up ids ; List of identifiers in the parenthesized list. - id-start after-prec-token decl-or-cast decl-res + id-start after-prec-token decl-or-cast c-last-identifier-range semi-position+1) (narrow-to-region low-lim (or macro-end (point-max))) @@ -11735,7 +11735,7 @@ comment at the start of cc-engine.el for more info." (new-elt (list lim start end result)) big-ptr (cur-ptr c-laomib-cache) - togo togo-ptr (size 0) cur-size + togo (size 0) cur-size ) (if old-elt (setq c-laomib-cache (delq old-elt c-laomib-cache))) @@ -11776,27 +11776,26 @@ comment at the start of cc-engine.el for more info." ((<= lwm (nth 2 elt)) nil) (t - (let (cur-brace) - ;; Search for the last brace in `paren-state' before (car `lim'). This - ;; brace will become our new 2nd element of `elt'. - (while - ;; Search one brace level per iteration. - (and paren-state - (progn - ;; (setq cur-brace (c-laomib-next-BRACE paren-state)) - (while - ;; Go past non-brace levels, one per iteration. - (and paren-state - (not (eq (char-after - (c-state-cache-top-lparen paren-state)) - ?{))) - (setq paren-state (cdr paren-state))) - (cadr paren-state)) - (> (c-state-cache-top-lparen (cdr paren-state)) (car elt))) - (setq paren-state (cdr paren-state))) - (when (cadr paren-state) - (setcar (cdr elt) (c-state-cache-top-lparen paren-state)) - elt))))) + ;; Search for the last brace in `paren-state' before (car `lim'). This + ;; brace will become our new 2nd element of `elt'. + (while + ;; Search one brace level per iteration. + (and paren-state + (progn + ;; (setq cur-brace (c-laomib-next-BRACE paren-state)) + (while + ;; Go past non-brace levels, one per iteration. + (and paren-state + (not (eq (char-after + (c-state-cache-top-lparen paren-state)) + ?{))) + (setq paren-state (cdr paren-state))) + (cadr paren-state)) + (> (c-state-cache-top-lparen (cdr paren-state)) (car elt))) + (setq paren-state (cdr paren-state))) + (when (cadr paren-state) + (setcar (cdr elt) (c-state-cache-top-lparen paren-state)) + elt)))) (defun c-laomib-invalidate-cache (beg _end) ;; Called from late in c-before-change. Amend `c-laomib-cache' to remove From 87a2cfc085c9e3eae3005a0b8a7af8b4eda01eac Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Thu, 31 Dec 2020 15:00:41 +0100 Subject: [PATCH 087/116] * test/src/process-tests.el: Let timeouts fail the tests. Fix some docstrings --- test/src/process-tests.el | 52 +++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/test/src/process-tests.el b/test/src/process-tests.el index 7a83df9eefa..24b09c56e2c 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -50,13 +50,13 @@ (ert-deftest process-test-sentinel-accept-process-output () (skip-unless (executable-find "bash")) - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (should (process-test-sentinel-wait-function-working-p #'accept-process-output)))) (ert-deftest process-test-sentinel-sit-for () (skip-unless (executable-find "bash")) - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (should (process-test-sentinel-wait-function-working-p (lambda () (sit-for 0.01 t)))))) @@ -84,7 +84,7 @@ (ert-deftest process-test-stderr-buffer () (skip-unless (executable-find "bash")) - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (let* ((stdout-buffer (generate-new-buffer "*stdout*")) (stderr-buffer (generate-new-buffer "*stderr*")) (proc (make-process :name "test" @@ -113,7 +113,7 @@ (ert-deftest process-test-stderr-filter () (skip-unless (executable-find "bash")) - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (let* ((sentinel-called nil) (stderr-sentinel-called nil) (stdout-output nil) @@ -156,7 +156,7 @@ (ert-deftest set-process-filter-t () "Test setting process filter to t and back." ;; Bug#36591 - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (with-temp-buffer (let* ((print-level nil) (print-length nil) @@ -193,7 +193,7 @@ (ert-deftest start-process-should-not-modify-arguments () "`start-process' must not modify its arguments in-place." ;; See bug#21831. - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (let* ((path (pcase system-type ((or 'windows-nt 'ms-dos) ;; Make sure the file name uses forward slashes. @@ -212,7 +212,7 @@ (ert-deftest make-process/noquery-stderr () "Checks that Bug#30031 is fixed." (skip-unless (executable-find "sleep")) - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (with-temp-buffer (let* ((previous-processes (process-list)) (process (make-process :name "sleep" @@ -243,7 +243,7 @@ (ert-deftest make-process/mix-stderr () "Check that `make-process' mixes the output streams if STDERR is nil." (skip-unless (executable-find "bash")) - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) ;; Frequent random (?) failures on hydra.nixos.org, with no process output. ;; Maybe this test should be tagged unstable? See bug#31214. (skip-unless (not (getenv "EMACS_HYDRA_CI"))) @@ -267,7 +267,7 @@ (ert-deftest make-process-w32-debug-spawn-error () "Check that debugger runs on `make-process' failure (Bug#33016)." (skip-unless (eq system-type 'windows-nt)) - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (let* ((debug-on-error t) (have-called-debugger nil) (debugger (lambda (&rest _) @@ -286,9 +286,9 @@ (should have-called-debugger)))) (ert-deftest make-process/file-handler/found () - "Check that the ‘:file-handler’ argument of ‘make-process’ + "Check that the `:file-handler’ argument of `make-process’ works as expected if a file name handler is found." - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (let ((file-handler-calls 0)) (cl-flet ((file-handler (&rest args) @@ -308,9 +308,9 @@ works as expected if a file name handler is found." (should (= file-handler-calls 1))))))) (ert-deftest make-process/file-handler/not-found () - "Check that the ‘:file-handler’ argument of ‘make-process’ + "Check that the `:file-handler’ argument of `make-process’ works as expected if no file name handler is found." - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (let ((file-name-handler-alist ()) (default-directory invocation-directory) (program (expand-file-name invocation-name invocation-directory))) @@ -319,9 +319,9 @@ works as expected if no file name handler is found." :file-handler t)))))) (ert-deftest make-process/file-handler/disable () - "Check ‘make-process’ works as expected if it shouldn’t use the + "Check `make-process’ works as expected if it shouldn’t use the file name handler." - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (let ((file-name-handler-alist (list (cons (rx bos "test-handler:") #'process-tests--file-handler))) (default-directory "test-handler:/dir/") @@ -340,7 +340,7 @@ file name handler." (ert-deftest make-process/stop () "Check that `make-process' doesn't accept a `:stop' key. See Bug#30460." - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (should-error (make-process :name "test" :command (list (expand-file-name invocation-name @@ -351,31 +351,31 @@ See Bug#30460." ;; be the case for hydra.nixos.org, so disable them there for now. (ert-deftest lookup-family-specification () - "network-lookup-address-info should only accept valid family symbols." + "`network-lookup-address-info' should only accept valid family symbols." (skip-unless (not (getenv "EMACS_HYDRA_CI"))) - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (should-error (network-lookup-address-info "google.com" 'both)) (should (network-lookup-address-info "google.com" 'ipv4)) (when (featurep 'make-network-process '(:family ipv6)) (should (network-lookup-address-info "google.com" 'ipv6))))) (ert-deftest lookup-unicode-domains () - "Unicode domains should fail" + "Unicode domains should fail." (skip-unless (not (getenv "EMACS_HYDRA_CI"))) - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (should-error (network-lookup-address-info "faß.de")) (should (network-lookup-address-info (puny-encode-domain "faß.de"))))) (ert-deftest unibyte-domain-name () - "Unibyte domain names should work" + "Unibyte domain names should work." (skip-unless (not (getenv "EMACS_HYDRA_CI"))) - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (should (network-lookup-address-info (string-to-unibyte "google.com"))))) (ert-deftest lookup-google () - "Check that we can look up google IP addresses" + "Check that we can look up google IP addresses." (skip-unless (not (getenv "EMACS_HYDRA_CI"))) - (with-timeout (60) + (with-timeout (60 (ert-fail "Test timed out")) (let ((addresses-both (network-lookup-address-info "google.com")) (addresses-v4 (network-lookup-address-info "google.com" 'ipv4))) (should addresses-both) @@ -384,9 +384,9 @@ See Bug#30460." (should (network-lookup-address-info "google.com" 'ipv6))))) (ert-deftest non-existent-lookup-failure () + "Check that looking up non-existent domain returns nil." (skip-unless (not (getenv "EMACS_HYDRA_CI"))) - (with-timeout (60) - "Check that looking up non-existent domain returns nil" + (with-timeout (60 (ert-fail "Test timed out")) (should (eq nil (network-lookup-address-info "emacs.invalid"))))) (defmacro process-tests--ignore-EMFILE (&rest body) From f0d2b92f8b7377678231bec502c0f05b26b3a58e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Thu, 31 Dec 2020 13:24:32 +0000 Subject: [PATCH 088/116] Protect elisp-flymake-checkdoc against boundless diagnostics These would be the kind of "This file needs a ;;Code section" and such. * lisp/progmodes/elisp-mode.el (elisp-flymake-checkdoc): Resist checkdoc diagnostics with no end position. --- lisp/progmodes/elisp-mode.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index 0e515530852..9fbfe03fb63 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1720,7 +1720,8 @@ Calls REPORT-FN directly." collect (flymake-make-diagnostic (current-buffer) - start end :note text))) + (or start 1) (or end (1+ (or start 1))) + :note text))) collected)) (defun elisp-flymake--byte-compile-done (report-fn From 2e6fbb05b6c17a1481fd6b73491cfa9c66c0c84f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Thu, 31 Dec 2020 13:14:26 +0000 Subject: [PATCH 089/116] Make Flymake mode-line indicator customizable (bug#33740) * lisp/progmodes/flymake.el (flymake-mode): Use flymake-mode-line-format. (flymake--mode-line-format): Remove. (flymake-mode-line-counter-format, flymake-mode-line-format): New defcustom. (flymake-mode-line-title, flymake-mode-line-exception) (flymake-mode-line-counters, flymake-error-counter) (flymake-warning-counter, flymake-note-counter): New variables. (flymake--mode-line-title, flymake--mode-line-exception) (flymake--mode-line-counters, flymake--mode-line-counter): New helpers. * doc/misc/flymake.texi (Customizable variables): Mention flymake-mode-line-format and flymake-mode-line-counter-format * etc/NEWS: Mention Flymake's customizable mode-line. --- doc/misc/flymake.texi | 7 ++ etc/NEWS | 13 ++ lisp/progmodes/flymake.el | 242 ++++++++++++++++++++------------------ 3 files changed, 150 insertions(+), 112 deletions(-) diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index 8f2954bdf4f..704e9611c63 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi @@ -213,6 +213,13 @@ This section summarizes customization variables used for the configuration of the Flymake user interface. @vtable @code +@item flymake-mode-line-format +Format to use for the Flymake mode line indicator. + +@item flymake-mode-line-counter-format +Mode-line construct for formatting Flymake diagnostic counters inside +the Flymake mode line indicator. + @item flymake-no-changes-timeout If any changes are made to the buffer, syntax check is automatically started after this many seconds, unless the user makes another change, diff --git a/etc/NEWS b/etc/NEWS index 865dbdf516c..62907a6124e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1747,6 +1747,19 @@ height of lines or width of chars. When non-nil, use a new xwidget webkit session after bookmark jump. Otherwise, it will use 'xwidget-webkit-last-session'. +** Flymake mode + ++++ +*** New user options to customize Flymake's mode-line. + +The new customization variable 'flymake-mode-line-format' is a mix of +strings and symbols like 'flymake-mode-line-title' , +'flymake-mode-line-exception' and 'flymake-mode-line-counters'. The +new customization variable 'flymake-mode-line-counter-format' is a mix +of strings and symbols like 'flymake-mode-line-error-counter', +'flymake-mode-line-warning-counter' and +'flymake-mode-line-note-counter'. + ** Flyspell mode +++ diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 40bb90d0f15..32f4135119b 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -997,7 +997,7 @@ suitable for the current buffer. The commands `flymake-running-backends', `flymake-disabled-backends' and `flymake-reporting-backends' summarize the situation, as does the special *Flymake log* buffer." :group 'flymake :lighter - flymake--mode-line-format :keymap flymake-mode-map + flymake-mode-line-format :keymap flymake-mode-map (cond ;; Turning the mode ON. (flymake-mode @@ -1186,123 +1186,141 @@ default) no filter is applied." [ "Go to log buffer" flymake-switch-to-log-buffer t ] [ "Turn off Flymake" flymake-mode t ])) -(defvar flymake--mode-line-format '(:eval (flymake--mode-line-format))) +(defcustom flymake-mode-line-format + '(" " flymake-mode-line-title flymake-mode-line-exception + flymake-mode-line-counters) + "Mode line construct for customizing Flymake information." + :group 'flymake + :type '(list string symbol)) -(put 'flymake--mode-line-format 'risky-local-variable t) +(defcustom flymake-mode-line-counter-format + '("[" + flymake-mode-line-error-counter + flymake-mode-line-warning-counter + flymake-mode-line-note-counter "]") + "Mode-line construct for formatting Flymake diagnostic counters. +This is a suitable place for placing the `flymake-error-counter', +`flymake-warning-counter' and `flymake-note-counter' constructs. +Separating each of these with space is not necessary." + :group 'flymake + :type '(list string symbol)) +(defvar flymake-mode-line-title '(:eval (flymake--mode-line-title)) + "Mode-line construct to show Flymake's mode name and menu.") -(defun flymake--mode-line-format () - "Produce a pretty minor mode indicator." - (let* ((known (hash-table-keys flymake--backend-state)) - (running (flymake-running-backends)) - (disabled (flymake-disabled-backends)) - (reported (flymake-reporting-backends)) - (diags-by-type (make-hash-table)) - (all-disabled (and disabled (null running))) - (some-waiting (cl-set-difference running reported))) - (maphash (lambda (_b state) - (mapc (lambda (diag) - (push diag - (gethash (flymake--diag-type diag) - diags-by-type))) - (flymake--backend-state-diags state))) - flymake--backend-state) - `((:propertize " Flymake" - mouse-face mode-line-highlight - help-echo - ,(concat (format "%s known backends\n" (length known)) - (format "%s running\n" (length running)) - (format "%s disabled\n" (length disabled)) - "mouse-1: Display minor mode menu\n" - "mouse-2: Show help for minor mode") - keymap - ,(let ((map (make-sparse-keymap))) - (define-key map [mode-line down-mouse-1] - flymake-menu) - (define-key map [mode-line mouse-2] - (lambda () - (interactive) - (describe-function 'flymake-mode))) - map)) - ,@(pcase-let ((`(,ind ,face ,explain) - (cond ((null known) - '("?" nil "No known backends")) - (some-waiting - `("Wait" compilation-mode-line-run - ,(format "Waiting for %s running backend(s)" - (length some-waiting)))) - (all-disabled - '("!" compilation-mode-line-run - "All backends disabled")) - (t - '(nil nil nil))))) - (when ind - `((":" - (:propertize ,ind - face ,face - help-echo ,explain - keymap - ,(let ((map (make-sparse-keymap))) +(defvar flymake-mode-line-exception '(:eval (flymake--mode-line-exception)) + "Mode-line construct to report on exceptional Flymake status.") + +(defvar flymake-mode-line-counters '(:eval (flymake--mode-line-counters)) + "Mode-line construct for counting Flymake diagnostics. +The counters are only placed if some Flymake backend initialized +correctly.") + +(defvar flymake-mode-line-error-counter + `(:eval (flymake--mode-line-counter :error t))) +(defvar flymake-mode-line-warning-counter + `(:eval (flymake--mode-line-counter :warning))) +(defvar flymake-mode-line-note-counter + `(:eval (flymake--mode-line-counter :note))) + +(put 'flymake-mode-line-format 'risky-local-variable t) +(put 'flymake-mode-line-title 'risky-local-variable t) +(put 'flymake-mode-line-exception 'risky-local-variable t) +(put 'flymake-mode-line-counters 'risky-local-variable t) +(put 'flymake-mode-line-error-counter 'risky-local-variable t) +(put 'flymake-mode-line-warning-counter 'risky-local-variable t) +(put 'flymake-mode-line-note-counter 'risky-local-variable t) + +(defun flymake--mode-line-title () + `(:propertize + "Flymake" + mouse-face mode-line-highlight + help-echo + (lambda (&rest whatever) + (concat + (format "%s known backends\n" (hash-table-count flymake--backend-state)) + (format "%s running\n" (length (flymake-running-backends))) + (format "%s disabled\n" (length (flymake-disabled-backends))) + "mouse-1: Display minor mode menu\n" + "mouse-2: Show help for minor mode")) + keymap + ,(let ((map (make-sparse-keymap))) + (define-key map [mode-line down-mouse-1] + flymake-menu) + (define-key map [mode-line mouse-2] + (lambda () + (interactive) + (describe-function 'flymake-mode))) + map))) + +(defun flymake--mode-line-exception () + "Helper for `flymake-mode-line-exception'." + (pcase-let* ((running) (reported) + (`(,ind ,face ,explain) + (cond ((zerop (hash-table-count flymake--backend-state)) + '("?" nil "No known backends")) + ((cl-set-difference + (setq running (flymake-running-backends)) + (setq reported (flymake-reporting-backends))) + `("Wait" compilation-mode-line-run + ,(format "Waiting for %s running backend(s)" + (length (cl-set-difference running reported))))) + ((and (flymake-disabled-backends) (null running)) + '("!" compilation-mode-line-run + "All backends disabled")) + (t + '(nil nil nil))))) + (when ind + `(":" + (:propertize ,ind face ,face + help-echo ,explain + keymap ,(let ((map (make-sparse-keymap))) (define-key map [mode-line mouse-1] 'flymake-switch-to-log-buffer) map)))))) - ,@(unless (or all-disabled - (null known)) - (cl-loop - with types = (hash-table-keys diags-by-type) - with _augmented = (cl-loop for extra in '(:error :warning) - do (cl-pushnew extra types - :key #'flymake--severity)) - for type in (cl-sort types #'> :key #'flymake--severity) - for diags = (gethash type diags-by-type) - for face = (flymake--lookup-type-property type - 'mode-line-face - 'compilation-error) - when (or diags - (cond ((eq flymake-suppress-zero-counters t) - nil) - (flymake-suppress-zero-counters - (>= (flymake--severity type) - (warning-numeric-level - flymake-suppress-zero-counters))) - (t t))) - collect `(:propertize - ,(format "%d" (length diags)) - face ,face - mouse-face mode-line-highlight - keymap - ,(let ((map (make-sparse-keymap)) - (type type)) - (define-key map (vector 'mode-line - mouse-wheel-down-event) - (lambda (event) - (interactive "e") - (with-selected-window (posn-window (event-start event)) - (flymake-goto-prev-error 1 (list type) t)))) - (define-key map (vector 'mode-line - mouse-wheel-up-event) - (lambda (event) - (interactive "e") - (with-selected-window (posn-window (event-start event)) - (flymake-goto-next-error 1 (list type) t)))) - map) - help-echo - ,(concat (format "%s diagnostics of type %s\n" - (propertize (format "%d" - (length diags)) - 'face face) - (propertize (format "%s" type) - 'face face)) - (format "%s/%s: previous/next of this type" - mouse-wheel-down-event - mouse-wheel-up-event))) - into forms - finally return - `((:propertize "[") - ,@(cl-loop for (a . rest) on forms by #'cdr - collect a when rest collect - '(:propertize " ")) - (:propertize "]"))))))) + +(defun flymake--mode-line-counters () + (when (flymake-running-backends) flymake-mode-line-counter-format)) + +(defun flymake--mode-line-counter (type &optional no-space) + (let ((count 0) + (face (flymake--lookup-type-property type + 'mode-line-face + 'compilation-error))) + (maphash (lambda + (_b state) + (dolist (d (flymake--backend-state-diags state)) + (when (eq type (flymake--diag-type d)) + (cl-incf count)))) + flymake--backend-state) + (when (or (cl-plusp count) + (cond ((eq flymake-suppress-zero-counters t) + nil) + (flymake-suppress-zero-counters + (>= (flymake--severity type) + (warning-numeric-level + flymake-suppress-zero-counters))) + (t t))) + `(,(if no-space "" " ") + (:propertize + ,(format "%d" count) + face ,face + mouse-face mode-line-highlight + keymap + ,(let ((map (make-sparse-keymap))) + (define-key map (vector 'mode-line + mouse-wheel-down-event) + (lambda (event) + (interactive "e") + (with-selected-window (posn-window (event-start event)) + (flymake-goto-prev-error 1 (list type) t)))) + (define-key map (vector 'mode-line + mouse-wheel-up-event) + (lambda (event) + (interactive "e") + (with-selected-window (posn-window (event-start event)) + (flymake-goto-next-error 1 (list type) t)))) + map)))))) ;;; Diagnostics buffer From 1b449af5a1c0585da5b1d30c17a1d4b2d8954ddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Thu, 31 Dec 2020 13:40:09 +0000 Subject: [PATCH 090/116] Must explicitly create unpropertized strings in mode-line Otherwise, an innocent string like " " will mysteriously pickup properties from some other minor mode. Making this a separate commit in hopes of raising attention to this possible bug. * lisp/progmodes/flymake.el (flymake--mode-line-counter): Must explicily create a new string unpropertized string --- lisp/progmodes/flymake.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 32f4135119b..8d1797fe3ce 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -1301,7 +1301,7 @@ correctly.") (warning-numeric-level flymake-suppress-zero-counters))) (t t))) - `(,(if no-space "" " ") + `(,(if no-space "" '(:propertize " ")) (:propertize ,(format "%d" count) face ,face From 03608312aee9990fb856ea5f865e3e918050ad21 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 31 Dec 2020 16:50:19 +0200 Subject: [PATCH 091/116] Fix process-tests on MS-Windows * test/src/process-tests.el (process-tests--fd-setsize-test): On MS-Windows start the pipe processes in the "stopped" condition. --- test/src/process-tests.el | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/src/process-tests.el b/test/src/process-tests.el index 24b09c56e2c..8d4516ff3b6 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -493,6 +493,13 @@ FD_SETSIZE." for ,process = (process-tests--ignore-EMFILE (make-pipe-process :name (format "pipe %d" i) + ;; Prevent delete-process from + ;; trying to read from pipe + ;; processes that didn't exit + ;; yet, because no one is + ;; writing to those pipes, and + ;; the read will stall. + :stop (eq system-type 'windows-nt) :buffer ,buffer :coding 'no-conversion :noquery t)) From 66709725622e032f38fbd9cffbf09bb0781de90e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Thu, 31 Dec 2020 16:04:32 +0000 Subject: [PATCH 092/116] Fix type declaration of two Flymake customization variables * lisp/progmodes/flymake.el (flymake-mode-line-format) (flymake-mode-line-counter-format): Fix type declaration. --- lisp/progmodes/flymake.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 8d1797fe3ce..cdee2391642 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -1191,7 +1191,7 @@ default) no filter is applied." flymake-mode-line-counters) "Mode line construct for customizing Flymake information." :group 'flymake - :type '(list string symbol)) + :type '(repeat (choice string symbol))) (defcustom flymake-mode-line-counter-format '("[" @@ -1203,7 +1203,7 @@ This is a suitable place for placing the `flymake-error-counter', `flymake-warning-counter' and `flymake-note-counter' constructs. Separating each of these with space is not necessary." :group 'flymake - :type '(list string symbol)) + :type '(repeat (choice string symbol))) (defvar flymake-mode-line-title '(:eval (flymake--mode-line-title)) "Mode-line construct to show Flymake's mode name and menu.") From b47b98bc4b2b6f901865b7530145766a0f8da142 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Thu, 31 Dec 2020 18:39:22 +0200 Subject: [PATCH 093/116] ruby-mode: Recognize setter symbols * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize): Add a rule for setter symbols (bug#42846). (ruby-font-lock-keywords): Remove dead code, left over from before commit 26f9c507. * lisp/progmodes/ruby-mode.el (ruby-smie--bosp): Handle '=' being part of a symbol (bug#42846). * test/lisp/progmodes/ruby-mode-resources/ruby.rb: Add corresponding indentation examples. --- lisp/progmodes/ruby-mode.el | 18 +++++++++++------- .../lisp/progmodes/ruby-mode-resources/ruby.rb | 8 ++++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 45b0f84e332..7d72a783033 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -401,7 +401,10 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'." (or (and (bolp) ;; Newline is escaped. (not (eq (char-before (1- (point))) ?\\))) - (memq (char-before) '(?\; ?=))))) + (eq (char-before) ?\;) + (and (eq (char-before) ?=) + (eq (syntax-after (1- (point))) + (string-to-syntax ".")))))) (defun ruby-smie--implicit-semi-p () (save-excursion @@ -1865,6 +1868,12 @@ It will be properly highlighted even when the call omits parens.") (3 (unless (nth 8 (syntax-ppss (match-beginning 3))) (goto-char (match-end 0)) (string-to-syntax "_")))) + ;; Symbols ending with '=' (bug#42846). + (":[[:alpha:]][[:alnum:]_]*\\(=\\)" + (1 (unless (or (nth 8 (syntax-ppss)) + (eq (char-before (match-beginning 0)) ?:) + (eq (char-after (match-end 3)) ?>)) + (string-to-syntax "_")))) ;; Part of method name when at the end of it. ("[!?]" (0 (unless (save-excursion @@ -2181,12 +2190,7 @@ It will be properly highlighted even when the call omits parens.") (0 font-lock-builtin-face)) ;; Symbols. ("\\(^\\|[^:]\\)\\(:@\\{0,2\\}\\(?:\\sw\\|\\s_\\)+\\)" - (2 font-lock-constant-face) - (3 (unless (and (eq (char-before (match-end 3)) ?=) - (eq (char-after (match-end 3)) ?>)) - ;; bug#18644 - font-lock-constant-face) - nil t)) + (2 font-lock-constant-face)) ;; Special globals. (,(concat "\\$\\(?:[:\"!@;,/._><\\$?~=*&`'+0-9]\\|-[0adFiIlpvw]\\|" (regexp-opt '("LOAD_PATH" "LOADED_FEATURES" "PROGRAM_NAME" diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby.rb b/test/lisp/progmodes/ruby-mode-resources/ruby.rb index 95928030396..434237cf638 100644 --- a/test/lisp/progmodes/ruby-mode-resources/ruby.rb +++ b/test/lisp/progmodes/ruby-mode-resources/ruby.rb @@ -475,3 +475,11 @@ def qux foo bar, { tee: qux } + +# Bug#42846, bug#18644 + +:foo= +# indent here +2 = 3 +:foo= if true +{:abc=>4} # not indented, and '=' is not highlighted From 0e41e89d7e9787c5ca3446af01b3c3afa433bb9b Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Thu, 31 Dec 2020 19:50:48 +0200 Subject: [PATCH 094/116] ruby-syntax-propertize: Optimize two rules a little * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize): Optimize two rules a little. --- lisp/progmodes/ruby-mode.el | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 7d72a783033..9aebb29333b 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -1864,8 +1864,10 @@ It will be properly highlighted even when the call omits parens.") 'syntax-table (string-to-syntax "_")) (string-to-syntax "'")))) ;; Symbols with special characters. - ("\\(^\\|[^:]\\)\\(:\\([-+~]@?\\|[/%&|^`]\\|\\*\\*?\\|<\\(<\\|=>?\\)?\\|>[>=]?\\|===?\\|=~\\|![~=]?\\|\\[\\]=?\\)\\)" - (3 (unless (nth 8 (syntax-ppss (match-beginning 3))) + (":\\([-+~]@?\\|[/%&|^`]\\|\\*\\*?\\|<\\(<\\|=>?\\)?\\|>[>=]?\\|===?\\|=~\\|![~=]?\\|\\[\\]=?\\)" + (1 (unless (or + (eq (char-before (match-beginning 0)) ?:) + (nth 8 (syntax-ppss (match-beginning 1)))) (goto-char (match-end 0)) (string-to-syntax "_")))) ;; Symbols ending with '=' (bug#42846). @@ -1888,9 +1890,14 @@ It will be properly highlighted even when the call omits parens.") ;; (semi-important for indentation). ("\\(:\\)\\(?:[({]\\|\\[[^]]\\)" (1 (string-to-syntax "."))) - ;; Regular expressions. Start with matching unescaped slash. - ("\\(?:\\=\\|[^\\]\\)\\(?:\\\\\\\\\\)*\\(/\\)" - (1 (let ((state (save-excursion (syntax-ppss (match-beginning 1))))) + ;; Regular expressions. + ("\\(/\\)" + (1 + ;; No unescaped slashes in front. + (when (save-excursion + (forward-char -1) + (cl-evenp (skip-chars-backward "\\\\"))) + (let ((state (save-excursion (syntax-ppss (match-beginning 1))))) (when (or ;; Beginning of a regexp. (and (null (nth 8 state)) @@ -1903,7 +1910,7 @@ It will be properly highlighted even when the call omits parens.") ;; string interpolation inside, or span ;; several lines. (eq ?/ (nth 3 state))) - (string-to-syntax "\"/"))))) + (string-to-syntax "\"/")))))) ;; Expression expansions in strings. We're handling them ;; here, so that the regexp rule never matches inside them. (ruby-expression-expansion-re From 761d3f3cdcfd86248608254a3391405ddbb299e3 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Thu, 31 Dec 2020 20:59:00 +0200 Subject: [PATCH 095/116] ruby-mode: Optimize expression expansion too This speeds up syntax-propertize almost 2x. * lisp/progmodes/ruby-mode.el (ruby-syntax-propertize): Optimize expression expansion too. (ruby-syntax-propertize-expansion, ruby-font-lock-keywords) (ruby-expression-expansion-re): Update to match. --- lisp/progmodes/ruby-mode.el | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 9aebb29333b..08df99ef88b 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -101,7 +101,7 @@ "Regexp to match the beginning of a heredoc.") (defconst ruby-expression-expansion-re - "\\(?:[^\\]\\|\\=\\)\\(\\\\\\\\\\)*\\(#\\({[^}\n\\]*\\(\\\\.[^}\n\\]*\\)*}\\|\\(\\$\\|@\\|@@\\)\\(\\w\\|_\\)+\\|\\$[^a-zA-Z \n]\\)\\)")) + "#\\({[^}\n\\]*\\(\\\\.[^}\n\\]*\\)*}\\|\\(?:\\$\\|@\\|@@\\)\\(\\w\\|_\\)+\\|\\$[^a-zA-Z \n]\\)")) (defun ruby-here-doc-end-match () "Return a regexp to find the end of a heredoc. @@ -1914,7 +1914,13 @@ It will be properly highlighted even when the call omits parens.") ;; Expression expansions in strings. We're handling them ;; here, so that the regexp rule never matches inside them. (ruby-expression-expansion-re - (0 (ignore (ruby-syntax-propertize-expansion)))) + (0 (ignore + (if (save-excursion + (goto-char (match-beginning 0)) + ;; The hash character is not escaped. + (cl-evenp (skip-chars-backward "\\\\"))) + (ruby-syntax-propertize-expansion) + (goto-char (match-beginning 1)))))) ("^=en\\(d\\)\\_>" (1 "!")) ("^\\(=\\)begin\\_>" (1 "!")) ;; Handle here documents. @@ -2004,8 +2010,8 @@ It will be properly highlighted even when the call omits parens.") (defun ruby-syntax-propertize-expansion () ;; Save the match data to a text property, for font-locking later. ;; Set the syntax of all double quotes and backticks to punctuation. - (let* ((beg (match-beginning 2)) - (end (match-end 2)) + (let* ((beg (match-beginning 0)) + (end (match-end 0)) (state (and beg (save-excursion (syntax-ppss beg))))) (when (ruby-syntax-expansion-allowed-p state) (put-text-property beg (1+ beg) 'ruby-expansion-match-data @@ -2232,7 +2238,7 @@ It will be properly highlighted even when the call omits parens.") (1 font-lock-builtin-face)) ;; Expression expansion. (ruby-match-expression-expansion - 2 font-lock-variable-name-face t) + 0 font-lock-variable-name-face t) ;; Negation char. ("\\(?:^\\|[^[:alnum:]_]\\)\\(!+\\)[^=~]" 1 font-lock-negation-char-face) From 74a77ef299f3703b8b9eac7579af6b924de1c3e8 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 31 Dec 2020 22:27:30 +0200 Subject: [PATCH 096/116] Improve documentation of 'network-lookup-address-info' * src/process.c (Fnetwork_lookup_address_info): * doc/lispref/processes.texi (Misc Network): Document the error message emitted by 'network-lookup-address-info' when it fails. --- doc/lispref/processes.texi | 3 ++- src/process.c | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index 6970f718ee0..94818beb4c9 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -3082,7 +3082,8 @@ signaled. Call @code{puny-encode-domain} on @var{name} first if you wish to lookup internationalized hostnames. If successful it returns a list of Lisp representations of network -addresses, otherwise it returns @code{nil}. +addresses, otherwise it returns @code{nil}. In the latter case, it +also displays the error message hopefully explaining what went wrong. By default both IPv4 and IPv6 lookups are attempted. The optional argument @var{family} controls this behavior, specifying the symbol diff --git a/src/process.c b/src/process.c index 91d426103d8..27808848972 100644 --- a/src/process.c +++ b/src/process.c @@ -4664,12 +4664,13 @@ network_lookup_address_info_1 (Lisp_Object host, const char *service, DEFUN ("network-lookup-address-info", Fnetwork_lookup_address_info, Snetwork_lookup_address_info, 1, 2, 0, - doc: /* Look up ip address info of NAME. + doc: /* Look up Internet Protocol (IP) address info of NAME. Optional parameter FAMILY controls whether to look up IPv4 or IPv6 addresses. The default of nil means both, symbol `ipv4' means IPv4 only, symbol `ipv6' means IPv6 only. Returns a list of addresses, or nil if none were found. Each address is a vector of integers, as per -the description of ADDRESS in `make-network-process'. */) +the description of ADDRESS in `make-network-process'. In case of +error displays the error message. */) (Lisp_Object name, Lisp_Object family) { Lisp_Object addresses = Qnil; From 58bdfd7c540c49f3727c517c3599c9d601696caf Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Thu, 31 Dec 2020 20:32:14 +0000 Subject: [PATCH 097/116] CC Mode: increment version numbers to 5.35 due to standalone release * doc/misc/cc-mode.texi. Increment the mode to 5.35, twice. * lisp/progmodes/cc-defs.el. Increment the mode to "5.35.1". --- doc/misc/cc-mode.texi | 4 ++-- lisp/progmodes/cc-defs.el | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi index adc233d99dd..c0d0fc24572 100644 --- a/doc/misc/cc-mode.texi +++ b/doc/misc/cc-mode.texi @@ -197,7 +197,7 @@ modify this GNU manual.'' @titlepage @sp 10 -@center @titlefont{CC Mode 5.34} +@center @titlefont{CC Mode 5.35} @sp 2 @center A GNU Emacs mode for editing C and C-like languages @sp 2 @@ -388,7 +388,7 @@ was added in version 5.30. This manual describes @ccmode{} @comment The following line must appear on its own, so that the -version 5.34. +version 5.35. @comment Release.py script can update the version number automatically @ccmode{} supports the editing of C, C++, Objective-C, diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el index c82b3a34e33..c867894ae01 100644 --- a/lisp/progmodes/cc-defs.el +++ b/lisp/progmodes/cc-defs.el @@ -87,7 +87,7 @@ ;;; Variables also used at compile time. -(defconst c-version "5.34.2" +(defconst c-version "5.35.1" "CC Mode version number.") (defconst c-version-sym (intern c-version)) From d22e74795d8c6aeb3af64e2af8a8f3d96924f6f1 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Fri, 1 Jan 2021 05:48:02 +0100 Subject: [PATCH 098/116] Revert recent add-to-ordered-list changes * doc/lispref/lists.texi (List Variables): Revert. * lisp/subr.el (add-to-ordered-list): Revert recent changes because the semantics are too muddled. --- doc/lispref/lists.texi | 9 ++++----- lisp/subr.el | 38 ++++++++++++++------------------------ test/lisp/subr-tests.el | 20 -------------------- 3 files changed, 18 insertions(+), 49 deletions(-) diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi index 21ee386335e..ae793d5e15e 100644 --- a/doc/lispref/lists.texi +++ b/doc/lispref/lists.texi @@ -807,14 +807,13 @@ foo ;; @r{@code{foo} was changed.} (setq @var{var} (cons @var{value} @var{var}))) @end example -@defun add-to-ordered-list symbol element &optional order test-function +@defun add-to-ordered-list symbol element &optional order This function sets the variable @var{symbol} by inserting @var{element} into the old value, which must be a list, at the position specified by @var{order}. If @var{element} is already a -member of the list, its position in the list is adjusted according to -@var{order}. Membership is tested using @var{test-function}, -defaulting to @code{eq} if @var{test-function} isn't present. This -function returns the resulting list, whether updated or not. +member of the list, its position in the list is adjusted according +to @var{order}. Membership is tested using @code{eq}. +This function returns the resulting list, whether updated or not. The @var{order} is typically a number (integer or float), and the elements of the list are sorted in non-decreasing numerical order. diff --git a/lisp/subr.el b/lisp/subr.el index 77b142c4152..7b796df0112 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1971,10 +1971,9 @@ can do the job." (cons element (symbol-value list-var)))))) -(defun add-to-ordered-list (list-var element &optional order test-function) +(defun add-to-ordered-list (list-var element &optional order) "Add ELEMENT to the value of LIST-VAR if it isn't there yet. -TEST-FUNCTION is used to test for the presence of ELEMENT, and -defaults to `eq'. +The test for presence of ELEMENT is done with `eq'. The value of LIST-VAR is kept ordered based on the ORDER parameter. @@ -1990,30 +1989,21 @@ The list order for each element is stored in LIST-VAR's LIST-VAR cannot refer to a lexical variable. The return value is the new value of LIST-VAR." - (let ((ordering (get list-var 'list-order)) - missing) - ;; Make a hash table for storing the ordering. + (let ((ordering (get list-var 'list-order))) (unless ordering (put list-var 'list-order - (setq ordering (make-hash-table :weakness 'key - :test (or test-function #'eq))))) - (when (and test-function - (not (eq test-function (hash-table-test ordering)))) - (error "Conflicting test functions given")) - ;; Add new values. - (when (setq missing (eq (gethash element ordering 'missing) 'missing)) + (setq ordering (make-hash-table :weakness 'key :test 'eq)))) + (when order + (puthash element (and (numberp order) order) ordering)) + (unless (memq element (symbol-value list-var)) (set list-var (cons element (symbol-value list-var)))) - ;; Set/change the order. - (when (or order missing) - (setf (gethash element ordering) (and (numberp order) order))) - (set list-var - (sort (symbol-value list-var) - (lambda (a b) - (let ((oa (gethash a ordering)) - (ob (gethash b ordering))) - (if (and oa ob) - (< oa ob) - oa))))))) + (set list-var (sort (symbol-value list-var) + (lambda (a b) + (let ((oa (gethash a ordering)) + (ob (gethash b ordering))) + (if (and oa ob) + (< oa ob) + oa))))))) (defun add-to-history (history-var newelt &optional maxelt keep-all) "Add NEWELT to the history list stored in the variable HISTORY-VAR. diff --git a/test/lisp/subr-tests.el b/test/lisp/subr-tests.el index 5be3b8915a2..6677630b2f6 100644 --- a/test/lisp/subr-tests.el +++ b/test/lisp/subr-tests.el @@ -617,26 +617,6 @@ See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=19350." (add-to-ordered-list 'subr--ordered 'b 5) (should (equal subr--ordered '(a c d b e)))) -(defvar subr--ordered-s nil) - -(ert-deftest subr--add-to-ordered-list-equal () - (setq subr--ordered-s nil) - (add-to-ordered-list 'subr--ordered-s "b" 2 #'equal) - (should (equal subr--ordered-s '("b"))) - (add-to-ordered-list 'subr--ordered-s "c" 3) - (should (equal subr--ordered-s '("b" "c"))) - (add-to-ordered-list 'subr--ordered-s "a" 1) - (should (equal subr--ordered-s '("a" "b" "c"))) - (add-to-ordered-list 'subr--ordered-s "e") - (should (equal subr--ordered-s '("a" "b" "c" "e"))) - (add-to-ordered-list 'subr--ordered-s "d" 4) - (should (equal subr--ordered-s '("a" "b" "c" "d" "e"))) - (add-to-ordered-list 'subr--ordered-s "e") - (should (equal subr--ordered-s '("a" "b" "c" "d" "e"))) - (add-to-ordered-list 'subr--ordered-s "b" 5) - (should (equal subr--ordered-s '("a" "c" "d" "b" "e"))) - (should-error (add-to-ordered-list 'subr--ordered-s "b" 5 #'eql))) - ;;; Apropos. From 8c1fe1e5efa2bbaeab2cf141bd31f09abe63d4c4 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 1 Jan 2021 07:48:14 +0000 Subject: [PATCH 099/116] Update copyright year to 2021 Run "TZ=UTC0 admin/update-copyright $(git ls-files)". --- .gitattributes | 2 +- .gitignore | 2 +- .gitlab-ci.yml | 2 +- ChangeLog.1 | 2 +- ChangeLog.2 | 2 +- ChangeLog.3 | 2 +- GNUmakefile | 2 +- INSTALL | 2 +- INSTALL.REPO | 2 +- Makefile.in | 2 +- README | 2 +- admin/ChangeLog.1 | 2 +- admin/README | 2 +- admin/admin.el | 2 +- admin/alloc-colors.c | 2 +- admin/authors.el | 2 +- admin/automerge | 2 +- admin/build-configs | 2 +- admin/charsets/Makefile.in | 2 +- admin/charsets/mapconv | 2 +- admin/charsets/mapfiles/README | 2 +- admin/cus-test.el | 2 +- admin/diff-tar-files | 2 +- admin/find-gc.el | 2 +- admin/gitmerge.el | 2 +- admin/grammars/Makefile.in | 2 +- admin/grammars/c.by | 2 +- admin/grammars/grammar.wy | 2 +- admin/grammars/java-tags.wy | 2 +- admin/grammars/js.wy | 2 +- admin/grammars/make.by | 2 +- admin/grammars/python.wy | 2 +- admin/grammars/scheme.by | 2 +- admin/grammars/srecode-template.wy | 2 +- admin/last-chance.el | 2 +- admin/make-emacs | 2 +- admin/make-manuals | 2 +- admin/merge-gnulib | 2 +- admin/merge-pkg-config | 2 +- admin/notes/copyright | 2 +- admin/notes/emba | 2 +- admin/notes/hydra | 2 +- admin/notes/multi-tty | 2 +- admin/notes/unicode | 2 +- admin/notes/www | 2 +- admin/nt/README-UNDUMP.W32 | 2 +- admin/nt/dist-build/README-windows-binaries | 2 +- admin/nt/dist-build/build-dep-zips.py | 2 +- admin/nt/dist-build/build-zips.sh | 2 +- admin/quick-install-emacs | 2 +- admin/unidata/Makefile.in | 2 +- admin/unidata/blocks.awk | 2 +- admin/unidata/unidata-gen.el | 2 +- admin/unidata/uvs.el | 2 +- admin/update-copyright | 2 +- admin/update_autogen | 2 +- admin/upload-manuals | 2 +- autogen.sh | 2 +- build-aux/config.guess | 2 +- build-aux/config.sub | 2 +- build-aux/git-hooks/commit-msg | 2 +- build-aux/git-hooks/pre-commit | 2 +- build-aux/git-hooks/prepare-commit-msg | 2 +- build-aux/gitlog-to-changelog | 2 +- build-aux/gitlog-to-emacslog | 2 +- build-aux/make-info-dir | 2 +- build-aux/move-if-change | 2 +- build-aux/msys-to-w32 | 2 +- build-aux/update-copyright | 2 +- build-aux/update-subdirs | 2 +- configure.ac | 2 +- doc/emacs/ChangeLog.1 | 2 +- doc/emacs/Makefile.in | 2 +- doc/emacs/abbrevs.texi | 2 +- doc/emacs/ack.texi | 2 +- doc/emacs/anti.texi | 2 +- doc/emacs/arevert-xtra.texi | 2 +- doc/emacs/basic.texi | 2 +- doc/emacs/buffers.texi | 2 +- doc/emacs/building.texi | 2 +- doc/emacs/cal-xtra.texi | 2 +- doc/emacs/calendar.texi | 2 +- doc/emacs/cmdargs.texi | 2 +- doc/emacs/commands.texi | 2 +- doc/emacs/custom.texi | 2 +- doc/emacs/dired-xtra.texi | 2 +- doc/emacs/dired.texi | 2 +- doc/emacs/display.texi | 2 +- doc/emacs/emacs-xtra.texi | 2 +- doc/emacs/emacs.texi | 2 +- doc/emacs/emerge-xtra.texi | 2 +- doc/emacs/entering.texi | 2 +- doc/emacs/files.texi | 2 +- doc/emacs/fixit.texi | 2 +- doc/emacs/fortran-xtra.texi | 2 +- doc/emacs/frames.texi | 2 +- doc/emacs/glossary.texi | 2 +- doc/emacs/gnu.texi | 2 +- doc/emacs/help.texi | 2 +- doc/emacs/indent.texi | 2 +- doc/emacs/killing.texi | 2 +- doc/emacs/kmacro.texi | 2 +- doc/emacs/m-x.texi | 2 +- doc/emacs/macos.texi | 2 +- doc/emacs/maintaining.texi | 2 +- doc/emacs/mark.texi | 2 +- doc/emacs/mini.texi | 2 +- doc/emacs/misc.texi | 2 +- doc/emacs/modes.texi | 2 +- doc/emacs/msdos-xtra.texi | 2 +- doc/emacs/msdos.texi | 2 +- doc/emacs/mule.texi | 2 +- doc/emacs/package.texi | 2 +- doc/emacs/picture-xtra.texi | 2 +- doc/emacs/programs.texi | 2 +- doc/emacs/regs.texi | 2 +- doc/emacs/rmail.texi | 2 +- doc/emacs/screen.texi | 2 +- doc/emacs/search.texi | 2 +- doc/emacs/sending.texi | 2 +- doc/emacs/text.texi | 2 +- doc/emacs/trouble.texi | 2 +- doc/emacs/vc-xtra.texi | 2 +- doc/emacs/vc1-xtra.texi | 2 +- doc/emacs/windows.texi | 2 +- doc/emacs/xresources.texi | 2 +- doc/lispintro/ChangeLog.1 | 2 +- doc/lispintro/Makefile.in | 2 +- doc/lispintro/README | 2 +- doc/lispintro/cons-1.eps | 2 +- doc/lispintro/cons-2.eps | 2 +- doc/lispintro/cons-2a.eps | 2 +- doc/lispintro/cons-3.eps | 2 +- doc/lispintro/cons-4.eps | 2 +- doc/lispintro/cons-5.eps | 2 +- doc/lispintro/drawers.eps | 2 +- doc/lispintro/emacs-lisp-intro.texi | 2 +- doc/lispintro/lambda-1.eps | 2 +- doc/lispintro/lambda-2.eps | 2 +- doc/lispintro/lambda-3.eps | 2 +- doc/lispref/ChangeLog.1 | 2 +- doc/lispref/Makefile.in | 2 +- doc/lispref/README | 2 +- doc/lispref/abbrevs.texi | 2 +- doc/lispref/anti.texi | 2 +- doc/lispref/back.texi | 2 +- doc/lispref/backups.texi | 2 +- doc/lispref/buffers.texi | 2 +- doc/lispref/commands.texi | 2 +- doc/lispref/compile.texi | 2 +- doc/lispref/control.texi | 2 +- doc/lispref/customize.texi | 2 +- doc/lispref/debugging.texi | 2 +- doc/lispref/display.texi | 2 +- doc/lispref/edebug.texi | 2 +- doc/lispref/elisp.texi | 2 +- doc/lispref/errors.texi | 2 +- doc/lispref/eval.texi | 2 +- doc/lispref/files.texi | 2 +- doc/lispref/frames.texi | 2 +- doc/lispref/functions.texi | 2 +- doc/lispref/hash.texi | 2 +- doc/lispref/help.texi | 2 +- doc/lispref/hooks.texi | 2 +- doc/lispref/internals.texi | 2 +- doc/lispref/intro.texi | 2 +- doc/lispref/keymaps.texi | 2 +- doc/lispref/lay-flat.texi | 2 +- doc/lispref/lists.texi | 2 +- doc/lispref/loading.texi | 2 +- doc/lispref/macros.texi | 2 +- doc/lispref/maps.texi | 2 +- doc/lispref/markers.texi | 2 +- doc/lispref/minibuf.texi | 2 +- doc/lispref/modes.texi | 2 +- doc/lispref/nonascii.texi | 2 +- doc/lispref/numbers.texi | 2 +- doc/lispref/objects.texi | 2 +- doc/lispref/os.texi | 2 +- doc/lispref/package.texi | 2 +- doc/lispref/positions.texi | 2 +- doc/lispref/processes.texi | 2 +- doc/lispref/records.texi | 2 +- doc/lispref/searching.texi | 2 +- doc/lispref/sequences.texi | 2 +- doc/lispref/streams.texi | 2 +- doc/lispref/strings.texi | 2 +- doc/lispref/symbols.texi | 2 +- doc/lispref/syntax.texi | 2 +- doc/lispref/text.texi | 2 +- doc/lispref/threads.texi | 2 +- doc/lispref/tips.texi | 2 +- doc/lispref/two-volume-cross-refs.txt | 2 +- doc/lispref/two-volume.make | 2 +- doc/lispref/variables.texi | 2 +- doc/lispref/windows.texi | 2 +- doc/man/ChangeLog.1 | 2 +- doc/man/ebrowse.1 | 2 +- doc/man/emacs.1.in | 2 +- doc/man/etags.1 | 2 +- doc/misc/ChangeLog.1 | 2 +- doc/misc/Makefile.in | 2 +- doc/misc/auth.texi | 2 +- doc/misc/autotype.texi | 2 +- doc/misc/bovine.texi | 2 +- doc/misc/calc.texi | 2 +- doc/misc/cc-mode.texi | 2 +- doc/misc/cl.texi | 2 +- doc/misc/dbus.texi | 2 +- doc/misc/dired-x.texi | 2 +- doc/misc/ebrowse.texi | 2 +- doc/misc/ede.texi | 2 +- doc/misc/ediff.texi | 2 +- doc/misc/edt.texi | 2 +- doc/misc/efaq-w32.texi | 2 +- doc/misc/efaq.texi | 2 +- doc/misc/eieio.texi | 2 +- doc/misc/emacs-gnutls.texi | 2 +- doc/misc/emacs-mime.texi | 2 +- doc/misc/epa.texi | 2 +- doc/misc/erc.texi | 2 +- doc/misc/ert.texi | 2 +- doc/misc/eshell.texi | 2 +- doc/misc/eudc.texi | 2 +- doc/misc/eww.texi | 2 +- doc/misc/flymake.texi | 2 +- doc/misc/forms.texi | 2 +- doc/misc/gnus-coding.texi | 2 +- doc/misc/gnus-faq.texi | 2 +- doc/misc/gnus.texi | 2 +- doc/misc/htmlfontify.texi | 2 +- doc/misc/idlwave.texi | 2 +- doc/misc/ido.texi | 2 +- doc/misc/info.texi | 2 +- doc/misc/mairix-el.texi | 2 +- doc/misc/message.texi | 2 +- doc/misc/mh-e.texi | 2 +- doc/misc/newsticker.texi | 2 +- doc/misc/nxml-mode.texi | 2 +- doc/misc/octave-mode.texi | 2 +- doc/misc/org.texi | 2 +- doc/misc/pcl-cvs.texi | 2 +- doc/misc/pgg.texi | 2 +- doc/misc/rcirc.texi | 2 +- doc/misc/reftex.texi | 2 +- doc/misc/remember.texi | 2 +- doc/misc/sasl.texi | 2 +- doc/misc/sc.texi | 2 +- doc/misc/sem-user.texi | 2 +- doc/misc/semantic.texi | 2 +- doc/misc/ses.texi | 2 +- doc/misc/sieve.texi | 2 +- doc/misc/smtpmail.texi | 2 +- doc/misc/speedbar.texi | 2 +- doc/misc/srecode.texi | 2 +- doc/misc/texinfo.tex | 2 +- doc/misc/todo-mode.texi | 2 +- doc/misc/tramp.texi | 2 +- doc/misc/trampver.texi | 2 +- doc/misc/url.texi | 2 +- doc/misc/vhdl-mode.texi | 2 +- doc/misc/vip.texi | 2 +- doc/misc/viper.texi | 2 +- doc/misc/widget.texi | 2 +- doc/misc/wisent.texi | 2 +- doc/misc/woman.texi | 2 +- etc/CALC-NEWS | 2 +- etc/ChangeLog.1 | 2 +- etc/DEBUG | 2 +- etc/DISTRIB | 2 +- etc/ERC-NEWS | 2 +- etc/ETAGS.EBNF | 2 +- etc/ETAGS.README | 2 +- etc/HELLO | 2 +- etc/MACHINES | 2 +- etc/MH-E-NEWS | 2 +- etc/NEWS | 2 +- etc/NEWS.1-17 | 2 +- etc/NEWS.18 | 2 +- etc/NEWS.19 | 2 +- etc/NEWS.20 | 2 +- etc/NEWS.21 | 2 +- etc/NEWS.22 | 2 +- etc/NEWS.23 | 2 +- etc/NEWS.24 | 2 +- etc/NEWS.25 | 2 +- etc/NEWS.26 | 2 +- etc/NEXTSTEP | 2 +- etc/NXML-NEWS | 2 +- etc/ORG-NEWS | 2 +- etc/PROBLEMS | 2 +- etc/README | 2 +- etc/TERMS | 2 +- etc/TODO | 2 +- etc/charsets/README | 2 +- etc/compilation.txt | 2 +- etc/edt-user.el | 2 +- etc/emacs-buffer.gdb | 2 +- etc/emacs.appdata.xml | 2 +- etc/enriched.txt | 2 +- etc/forms/forms-d2.el | 2 +- etc/gnus-tut.txt | 2 +- etc/grep.txt | 2 +- etc/images/README | 2 +- etc/images/custom/README | 2 +- etc/images/ezimage/README | 2 +- etc/images/gnus/README | 2 +- etc/images/gnus/gnus.svg | 2 +- etc/images/gud/README | 2 +- etc/images/icons/README | 2 +- etc/images/icons/hicolor/scalable/apps/emacs.svg | 2 +- etc/images/icons/hicolor/scalable/apps/emacs23.svg | 2 +- .../icons/hicolor/scalable/mimetypes/emacs-document23.svg | 2 +- etc/images/mpc/README | 2 +- etc/images/newsticker/README | 2 +- etc/images/smilies/README | 2 +- etc/images/smilies/grayscale/README | 2 +- etc/images/smilies/medium/README | 2 +- etc/images/splash.svg | 2 +- etc/images/tabs/README | 2 +- etc/images/tree-widget/default/README | 2 +- etc/images/tree-widget/folder/README | 2 +- etc/org/README | 2 +- etc/ps-prin0.ps | 2 +- etc/ps-prin1.ps | 2 +- etc/refcards/Makefile | 2 +- etc/refcards/README | 2 +- etc/refcards/calccard.tex | 2 +- etc/refcards/cs-dired-ref.tex | 2 +- etc/refcards/cs-refcard.tex | 2 +- etc/refcards/cs-survival.tex | 2 +- etc/refcards/de-refcard.tex | 2 +- etc/refcards/dired-ref.tex | 2 +- etc/refcards/emacsver.tex.in | 2 +- etc/refcards/fr-dired-ref.tex | 2 +- etc/refcards/fr-refcard.tex | 2 +- etc/refcards/fr-survival.tex | 2 +- etc/refcards/gnus-logo.eps | 2 +- etc/refcards/orgcard.tex | 2 +- etc/refcards/pdflayout.sty | 2 +- etc/refcards/pl-refcard.tex | 2 +- etc/refcards/pt-br-refcard.tex | 2 +- etc/refcards/refcard.tex | 2 +- etc/refcards/ru-refcard.tex | 2 +- etc/refcards/sk-dired-ref.tex | 2 +- etc/refcards/sk-refcard.tex | 2 +- etc/refcards/sk-survival.tex | 2 +- etc/refcards/survival.tex | 2 +- etc/refcards/vipcard.tex | 2 +- etc/refcards/viperCard.tex | 2 +- etc/schema/locate.rnc | 2 +- etc/schema/relaxng.rnc | 2 +- etc/schema/schemas.xml | 2 +- etc/ses-example.ses | 2 +- etc/srecode/c.srt | 2 +- etc/srecode/cpp.srt | 2 +- etc/srecode/default.srt | 2 +- etc/srecode/doc-cpp.srt | 2 +- etc/srecode/doc-default.srt | 2 +- etc/srecode/doc-java.srt | 2 +- etc/srecode/ede-autoconf.srt | 2 +- etc/srecode/ede-make.srt | 2 +- etc/srecode/el.srt | 2 +- etc/srecode/getset-cpp.srt | 2 +- etc/srecode/java.srt | 2 +- etc/srecode/make.srt | 2 +- etc/srecode/proj-test.srt | 2 +- etc/srecode/template.srt | 2 +- etc/srecode/test.srt | 2 +- etc/srecode/texi.srt | 2 +- etc/srecode/wisent.srt | 2 +- etc/themes/adwaita-theme.el | 2 +- etc/themes/deeper-blue-theme.el | 2 +- etc/themes/dichromacy-theme.el | 2 +- etc/themes/leuven-theme.el | 2 +- etc/themes/light-blue-theme.el | 2 +- etc/themes/manoj-dark-theme.el | 2 +- etc/themes/misterioso-theme.el | 2 +- etc/themes/tango-dark-theme.el | 2 +- etc/themes/tango-theme.el | 2 +- etc/themes/tsdh-dark-theme.el | 2 +- etc/themes/tsdh-light-theme.el | 2 +- etc/themes/wheatgrass-theme.el | 2 +- etc/themes/whiteboard-theme.el | 2 +- etc/themes/wombat-theme.el | 2 +- etc/tutorials/TUTORIAL | 2 +- etc/tutorials/TUTORIAL.bg | 2 +- etc/tutorials/TUTORIAL.cn | 2 +- etc/tutorials/TUTORIAL.cs | 2 +- etc/tutorials/TUTORIAL.de | 2 +- etc/tutorials/TUTORIAL.eo | 2 +- etc/tutorials/TUTORIAL.es | 2 +- etc/tutorials/TUTORIAL.fr | 2 +- etc/tutorials/TUTORIAL.it | 2 +- etc/tutorials/TUTORIAL.ja | 2 +- etc/tutorials/TUTORIAL.ko | 2 +- etc/tutorials/TUTORIAL.nl | 2 +- etc/tutorials/TUTORIAL.pl | 2 +- etc/tutorials/TUTORIAL.pt_BR | 2 +- etc/tutorials/TUTORIAL.ro | 2 +- etc/tutorials/TUTORIAL.ru | 2 +- etc/tutorials/TUTORIAL.sk | 2 +- etc/tutorials/TUTORIAL.sl | 2 +- etc/tutorials/TUTORIAL.sv | 2 +- etc/tutorials/TUTORIAL.th | 2 +- etc/tutorials/TUTORIAL.zh | 2 +- etc/w32-feature.el | 2 +- leim/ChangeLog.1 | 2 +- leim/Makefile.in | 2 +- leim/README | 2 +- leim/leim-ext.el | 2 +- lib-src/ChangeLog.1 | 2 +- lib-src/Makefile.in | 2 +- lib-src/ebrowse.c | 2 +- lib-src/emacsclient.c | 2 +- lib-src/etags.c | 2 +- lib-src/hexl.c | 2 +- lib-src/make-docfile.c | 2 +- lib-src/make-fingerprint.c | 2 +- lib-src/movemail.c | 2 +- lib-src/ntlib.c | 2 +- lib-src/ntlib.h | 2 +- lib-src/pop.c | 2 +- lib-src/pop.h | 2 +- lib-src/rcs2log | 2 +- lib-src/update-game-score.c | 2 +- lib/Makefile.in | 2 +- lib/_Noreturn.h | 2 +- lib/acl-errno-valid.c | 2 +- lib/acl-internal.c | 2 +- lib/acl-internal.h | 2 +- lib/acl.h | 2 +- lib/acl_entries.c | 2 +- lib/alloca.in.h | 2 +- lib/allocator.h | 2 +- lib/arg-nonnull.h | 2 +- lib/at-func.c | 2 +- lib/binary-io.c | 2 +- lib/binary-io.h | 2 +- lib/byteswap.in.h | 2 +- lib/c++defs.h | 2 +- lib/c-ctype.h | 2 +- lib/c-strcase.h | 2 +- lib/c-strcasecmp.c | 2 +- lib/c-strncasecmp.c | 2 +- lib/canonicalize-lgpl.c | 2 +- lib/careadlinkat.c | 2 +- lib/careadlinkat.h | 2 +- lib/cdefs.h | 2 +- lib/cloexec.c | 2 +- lib/cloexec.h | 2 +- lib/close-stream.c | 2 +- lib/copy-file-range.c | 2 +- lib/count-leading-zeros.h | 2 +- lib/count-one-bits.h | 2 +- lib/count-trailing-zeros.h | 2 +- lib/diffseq.h | 2 +- lib/dirent.in.h | 2 +- lib/dirfd.c | 2 +- lib/dosname.h | 2 +- lib/dtotimespec.c | 2 +- lib/dup2.c | 2 +- lib/errno.in.h | 2 +- lib/euidaccess.c | 2 +- lib/execinfo.in.h | 2 +- lib/explicit_bzero.c | 2 +- lib/faccessat.c | 2 +- lib/fcntl.c | 2 +- lib/fcntl.in.h | 2 +- lib/fdopendir.c | 2 +- lib/filemode.c | 2 +- lib/filemode.h | 2 +- lib/filevercmp.c | 2 +- lib/filevercmp.h | 2 +- lib/fingerprint.c | 2 +- lib/fingerprint.h | 2 +- lib/flexmember.h | 2 +- lib/fpending.c | 2 +- lib/fpending.h | 2 +- lib/fstatat.c | 2 +- lib/fsusage.c | 2 +- lib/fsusage.h | 2 +- lib/fsync.c | 2 +- lib/ftoastr.c | 2 +- lib/ftoastr.h | 2 +- lib/get-permissions.c | 2 +- lib/getdtablesize.c | 2 +- lib/getgroups.c | 2 +- lib/getloadavg.c | 2 +- lib/getopt-cdefs.in.h | 2 +- lib/getopt-core.h | 2 +- lib/getopt-ext.h | 2 +- lib/getopt-pfx-core.h | 2 +- lib/getopt-pfx-ext.h | 2 +- lib/getopt.c | 2 +- lib/getopt.in.h | 2 +- lib/getopt1.c | 2 +- lib/getopt_int.h | 2 +- lib/gettext.h | 2 +- lib/gettime.c | 2 +- lib/gettimeofday.c | 2 +- lib/gnulib.mk.in | 2 +- lib/group-member.c | 2 +- lib/ieee754.in.h | 2 +- lib/ignore-value.h | 2 +- lib/intprops.h | 2 +- lib/inttypes.in.h | 2 +- lib/libc-config.h | 2 +- lib/limits.in.h | 2 +- lib/localtime-buffer.c | 2 +- lib/localtime-buffer.h | 2 +- lib/lstat.c | 2 +- lib/malloca.c | 2 +- lib/malloca.h | 2 +- lib/md5.c | 2 +- lib/md5.h | 2 +- lib/memmem.c | 2 +- lib/mempcpy.c | 2 +- lib/memrchr.c | 2 +- lib/minmax.h | 2 +- lib/mkostemp.c | 2 +- lib/mktime-internal.h | 2 +- lib/mktime.c | 2 +- lib/nstrftime.c | 2 +- lib/open.c | 2 +- lib/openat-priv.h | 2 +- lib/openat-proc.c | 2 +- lib/openat.h | 2 +- lib/pathmax.h | 2 +- lib/pipe2.c | 2 +- lib/pselect.c | 2 +- lib/pthread_sigmask.c | 2 +- lib/putenv.c | 2 +- lib/qcopy-acl.c | 2 +- lib/readlink.c | 2 +- lib/readlinkat.c | 2 +- lib/regcomp.c | 2 +- lib/regex.c | 2 +- lib/regex.h | 2 +- lib/regex_internal.c | 2 +- lib/regex_internal.h | 2 +- lib/regexec.c | 2 +- lib/root-uid.h | 2 +- lib/save-cwd.c | 2 +- lib/save-cwd.h | 2 +- lib/set-permissions.c | 2 +- lib/sha1.c | 2 +- lib/sha1.h | 2 +- lib/sha256.c | 2 +- lib/sha256.h | 2 +- lib/sha512.c | 2 +- lib/sha512.h | 2 +- lib/sig2str.c | 2 +- lib/sig2str.h | 2 +- lib/signal.in.h | 2 +- lib/stat-time.h | 2 +- lib/stdalign.in.h | 2 +- lib/stddef.in.h | 2 +- lib/stdint.in.h | 2 +- lib/stdio-impl.h | 2 +- lib/stdio.in.h | 2 +- lib/stdlib.in.h | 2 +- lib/stpcpy.c | 2 +- lib/str-two-way.h | 2 +- lib/strftime.h | 2 +- lib/string.in.h | 2 +- lib/strnlen.c | 2 +- lib/strtoimax.c | 2 +- lib/strtol.c | 2 +- lib/strtoll.c | 2 +- lib/symlink.c | 2 +- lib/sys_select.in.h | 2 +- lib/sys_stat.in.h | 2 +- lib/sys_time.in.h | 2 +- lib/sys_types.in.h | 2 +- lib/tempname.c | 2 +- lib/tempname.h | 2 +- lib/time-internal.h | 2 +- lib/time.in.h | 2 +- lib/time_r.c | 2 +- lib/time_rz.c | 2 +- lib/timegm.c | 2 +- lib/timespec-add.c | 2 +- lib/timespec-sub.c | 2 +- lib/timespec.h | 2 +- lib/u64.h | 2 +- lib/unistd.in.h | 2 +- lib/unlocked-io.h | 2 +- lib/utimens.c | 2 +- lib/utimens.h | 2 +- lib/verify.h | 2 +- lib/vla.h | 2 +- lib/warn-on-use.h | 2 +- lib/xalloc-oversized.h | 2 +- lisp/ChangeLog.1 | 2 +- lisp/ChangeLog.10 | 2 +- lisp/ChangeLog.11 | 2 +- lisp/ChangeLog.12 | 2 +- lisp/ChangeLog.13 | 2 +- lisp/ChangeLog.14 | 2 +- lisp/ChangeLog.15 | 2 +- lisp/ChangeLog.16 | 2 +- lisp/ChangeLog.17 | 2 +- lisp/ChangeLog.2 | 2 +- lisp/ChangeLog.3 | 2 +- lisp/ChangeLog.4 | 2 +- lisp/ChangeLog.5 | 2 +- lisp/ChangeLog.6 | 2 +- lisp/ChangeLog.7 | 2 +- lisp/ChangeLog.8 | 2 +- lisp/ChangeLog.9 | 2 +- lisp/Makefile.in | 2 +- lisp/abbrev.el | 2 +- lisp/align.el | 2 +- lisp/allout-widgets.el | 2 +- lisp/allout.el | 2 +- lisp/ansi-color.el | 2 +- lisp/apropos.el | 2 +- lisp/arc-mode.el | 2 +- lisp/array.el | 2 +- lisp/auth-source-pass.el | 2 +- lisp/auth-source.el | 2 +- lisp/autoarg.el | 2 +- lisp/autoinsert.el | 2 +- lisp/autorevert.el | 2 +- lisp/avoid.el | 2 +- lisp/battery.el | 2 +- lisp/bindings.el | 2 +- lisp/bookmark.el | 2 +- lisp/bs.el | 2 +- lisp/buff-menu.el | 2 +- lisp/button.el | 2 +- lisp/calc/calc-aent.el | 2 +- lisp/calc/calc-alg.el | 2 +- lisp/calc/calc-arith.el | 2 +- lisp/calc/calc-bin.el | 2 +- lisp/calc/calc-comb.el | 2 +- lisp/calc/calc-cplx.el | 2 +- lisp/calc/calc-embed.el | 2 +- lisp/calc/calc-ext.el | 2 +- lisp/calc/calc-fin.el | 2 +- lisp/calc/calc-forms.el | 2 +- lisp/calc/calc-frac.el | 2 +- lisp/calc/calc-funcs.el | 2 +- lisp/calc/calc-graph.el | 2 +- lisp/calc/calc-help.el | 2 +- lisp/calc/calc-incom.el | 2 +- lisp/calc/calc-keypd.el | 2 +- lisp/calc/calc-lang.el | 2 +- lisp/calc/calc-macs.el | 2 +- lisp/calc/calc-map.el | 2 +- lisp/calc/calc-math.el | 2 +- lisp/calc/calc-menu.el | 2 +- lisp/calc/calc-misc.el | 2 +- lisp/calc/calc-mode.el | 2 +- lisp/calc/calc-mtx.el | 2 +- lisp/calc/calc-nlfit.el | 2 +- lisp/calc/calc-poly.el | 2 +- lisp/calc/calc-prog.el | 2 +- lisp/calc/calc-rewr.el | 2 +- lisp/calc/calc-rules.el | 2 +- lisp/calc/calc-sel.el | 2 +- lisp/calc/calc-stat.el | 2 +- lisp/calc/calc-store.el | 2 +- lisp/calc/calc-stuff.el | 2 +- lisp/calc/calc-trail.el | 2 +- lisp/calc/calc-undo.el | 2 +- lisp/calc/calc-units.el | 2 +- lisp/calc/calc-vec.el | 2 +- lisp/calc/calc-yank.el | 2 +- lisp/calc/calc.el | 2 +- lisp/calc/calcalg2.el | 2 +- lisp/calc/calcalg3.el | 2 +- lisp/calc/calccomp.el | 2 +- lisp/calc/calcsel2.el | 2 +- lisp/calculator.el | 2 +- lisp/calendar/appt.el | 2 +- lisp/calendar/cal-bahai.el | 2 +- lisp/calendar/cal-china.el | 2 +- lisp/calendar/cal-coptic.el | 2 +- lisp/calendar/cal-dst.el | 2 +- lisp/calendar/cal-french.el | 2 +- lisp/calendar/cal-hebrew.el | 2 +- lisp/calendar/cal-html.el | 2 +- lisp/calendar/cal-islam.el | 2 +- lisp/calendar/cal-iso.el | 2 +- lisp/calendar/cal-julian.el | 2 +- lisp/calendar/cal-mayan.el | 2 +- lisp/calendar/cal-menu.el | 2 +- lisp/calendar/cal-move.el | 2 +- lisp/calendar/cal-persia.el | 2 +- lisp/calendar/cal-tex.el | 2 +- lisp/calendar/cal-x.el | 2 +- lisp/calendar/calendar.el | 2 +- lisp/calendar/diary-lib.el | 2 +- lisp/calendar/holidays.el | 2 +- lisp/calendar/icalendar.el | 2 +- lisp/calendar/iso8601.el | 2 +- lisp/calendar/lunar.el | 2 +- lisp/calendar/parse-time.el | 2 +- lisp/calendar/solar.el | 2 +- lisp/calendar/time-date.el | 2 +- lisp/calendar/timeclock.el | 2 +- lisp/calendar/todo-mode.el | 2 +- lisp/case-table.el | 2 +- lisp/cdl.el | 2 +- lisp/cedet/ChangeLog.1 | 2 +- lisp/cedet/cedet-cscope.el | 2 +- lisp/cedet/cedet-files.el | 2 +- lisp/cedet/cedet-global.el | 2 +- lisp/cedet/cedet-idutils.el | 2 +- lisp/cedet/cedet.el | 2 +- lisp/cedet/data-debug.el | 2 +- lisp/cedet/ede.el | 2 +- lisp/cedet/ede/auto.el | 2 +- lisp/cedet/ede/autoconf-edit.el | 2 +- lisp/cedet/ede/base.el | 2 +- lisp/cedet/ede/config.el | 2 +- lisp/cedet/ede/cpp-root.el | 2 +- lisp/cedet/ede/custom.el | 2 +- lisp/cedet/ede/detect.el | 2 +- lisp/cedet/ede/dired.el | 2 +- lisp/cedet/ede/emacs.el | 2 +- lisp/cedet/ede/files.el | 2 +- lisp/cedet/ede/generic.el | 2 +- lisp/cedet/ede/linux.el | 2 +- lisp/cedet/ede/locate.el | 2 +- lisp/cedet/ede/make.el | 2 +- lisp/cedet/ede/makefile-edit.el | 2 +- lisp/cedet/ede/pconf.el | 2 +- lisp/cedet/ede/pmake.el | 2 +- lisp/cedet/ede/proj-archive.el | 2 +- lisp/cedet/ede/proj-aux.el | 2 +- lisp/cedet/ede/proj-comp.el | 2 +- lisp/cedet/ede/proj-elisp.el | 2 +- lisp/cedet/ede/proj-info.el | 2 +- lisp/cedet/ede/proj-misc.el | 2 +- lisp/cedet/ede/proj-obj.el | 2 +- lisp/cedet/ede/proj-prog.el | 2 +- lisp/cedet/ede/proj-scheme.el | 2 +- lisp/cedet/ede/proj-shared.el | 2 +- lisp/cedet/ede/proj.el | 2 +- lisp/cedet/ede/project-am.el | 2 +- lisp/cedet/ede/shell.el | 2 +- lisp/cedet/ede/simple.el | 2 +- lisp/cedet/ede/source.el | 2 +- lisp/cedet/ede/speedbar.el | 2 +- lisp/cedet/ede/srecode.el | 2 +- lisp/cedet/ede/system.el | 2 +- lisp/cedet/ede/util.el | 2 +- lisp/cedet/inversion.el | 2 +- lisp/cedet/mode-local.el | 2 +- lisp/cedet/pulse.el | 2 +- lisp/cedet/semantic.el | 2 +- lisp/cedet/semantic/analyze.el | 2 +- lisp/cedet/semantic/analyze/complete.el | 2 +- lisp/cedet/semantic/analyze/debug.el | 2 +- lisp/cedet/semantic/analyze/fcn.el | 2 +- lisp/cedet/semantic/analyze/refs.el | 2 +- lisp/cedet/semantic/bovine.el | 2 +- lisp/cedet/semantic/bovine/c.el | 2 +- lisp/cedet/semantic/bovine/debug.el | 2 +- lisp/cedet/semantic/bovine/el.el | 2 +- lisp/cedet/semantic/bovine/gcc.el | 2 +- lisp/cedet/semantic/bovine/grammar.el | 2 +- lisp/cedet/semantic/bovine/make.el | 2 +- lisp/cedet/semantic/bovine/scm.el | 2 +- lisp/cedet/semantic/chart.el | 2 +- lisp/cedet/semantic/complete.el | 2 +- lisp/cedet/semantic/ctxt.el | 2 +- lisp/cedet/semantic/db-debug.el | 2 +- lisp/cedet/semantic/db-ebrowse.el | 2 +- lisp/cedet/semantic/db-el.el | 2 +- lisp/cedet/semantic/db-file.el | 2 +- lisp/cedet/semantic/db-find.el | 2 +- lisp/cedet/semantic/db-global.el | 2 +- lisp/cedet/semantic/db-javascript.el | 2 +- lisp/cedet/semantic/db-mode.el | 2 +- lisp/cedet/semantic/db-ref.el | 2 +- lisp/cedet/semantic/db-typecache.el | 2 +- lisp/cedet/semantic/db.el | 2 +- lisp/cedet/semantic/debug.el | 2 +- lisp/cedet/semantic/decorate.el | 2 +- lisp/cedet/semantic/decorate/include.el | 2 +- lisp/cedet/semantic/decorate/mode.el | 2 +- lisp/cedet/semantic/dep.el | 2 +- lisp/cedet/semantic/doc.el | 2 +- lisp/cedet/semantic/ede-grammar.el | 2 +- lisp/cedet/semantic/edit.el | 2 +- lisp/cedet/semantic/find.el | 2 +- lisp/cedet/semantic/format.el | 2 +- lisp/cedet/semantic/fw.el | 2 +- lisp/cedet/semantic/grammar-wy.el | 2 +- lisp/cedet/semantic/grammar.el | 2 +- lisp/cedet/semantic/html.el | 2 +- lisp/cedet/semantic/ia-sb.el | 2 +- lisp/cedet/semantic/ia.el | 2 +- lisp/cedet/semantic/idle.el | 2 +- lisp/cedet/semantic/imenu.el | 2 +- lisp/cedet/semantic/java.el | 2 +- lisp/cedet/semantic/lex-spp.el | 2 +- lisp/cedet/semantic/lex.el | 2 +- lisp/cedet/semantic/mru-bookmark.el | 2 +- lisp/cedet/semantic/sb.el | 2 +- lisp/cedet/semantic/scope.el | 2 +- lisp/cedet/semantic/senator.el | 2 +- lisp/cedet/semantic/sort.el | 2 +- lisp/cedet/semantic/symref.el | 2 +- lisp/cedet/semantic/symref/cscope.el | 2 +- lisp/cedet/semantic/symref/filter.el | 2 +- lisp/cedet/semantic/symref/global.el | 2 +- lisp/cedet/semantic/symref/grep.el | 2 +- lisp/cedet/semantic/symref/idutils.el | 2 +- lisp/cedet/semantic/symref/list.el | 2 +- lisp/cedet/semantic/tag-file.el | 2 +- lisp/cedet/semantic/tag-ls.el | 2 +- lisp/cedet/semantic/tag-write.el | 2 +- lisp/cedet/semantic/tag.el | 2 +- lisp/cedet/semantic/texi.el | 2 +- lisp/cedet/semantic/util-modes.el | 2 +- lisp/cedet/semantic/util.el | 2 +- lisp/cedet/semantic/wisent.el | 2 +- lisp/cedet/semantic/wisent/comp.el | 2 +- lisp/cedet/semantic/wisent/grammar.el | 2 +- lisp/cedet/semantic/wisent/java-tags.el | 2 +- lisp/cedet/semantic/wisent/javascript.el | 2 +- lisp/cedet/semantic/wisent/python.el | 2 +- lisp/cedet/semantic/wisent/wisent.el | 2 +- lisp/cedet/srecode.el | 2 +- lisp/cedet/srecode/args.el | 2 +- lisp/cedet/srecode/compile.el | 2 +- lisp/cedet/srecode/cpp.el | 2 +- lisp/cedet/srecode/ctxt.el | 2 +- lisp/cedet/srecode/dictionary.el | 2 +- lisp/cedet/srecode/document.el | 2 +- lisp/cedet/srecode/el.el | 2 +- lisp/cedet/srecode/expandproto.el | 2 +- lisp/cedet/srecode/extract.el | 2 +- lisp/cedet/srecode/fields.el | 2 +- lisp/cedet/srecode/filters.el | 2 +- lisp/cedet/srecode/find.el | 2 +- lisp/cedet/srecode/getset.el | 2 +- lisp/cedet/srecode/insert.el | 2 +- lisp/cedet/srecode/java.el | 2 +- lisp/cedet/srecode/map.el | 2 +- lisp/cedet/srecode/mode.el | 2 +- lisp/cedet/srecode/semantic.el | 2 +- lisp/cedet/srecode/srt-mode.el | 2 +- lisp/cedet/srecode/srt.el | 2 +- lisp/cedet/srecode/table.el | 2 +- lisp/cedet/srecode/template.el | 2 +- lisp/cedet/srecode/texi.el | 2 +- lisp/char-fold.el | 2 +- lisp/chistory.el | 2 +- lisp/cmuscheme.el | 2 +- lisp/color.el | 2 +- lisp/comint.el | 2 +- lisp/completion.el | 2 +- lisp/composite.el | 2 +- lisp/cus-dep.el | 2 +- lisp/cus-edit.el | 2 +- lisp/cus-face.el | 2 +- lisp/cus-start.el | 2 +- lisp/cus-theme.el | 2 +- lisp/custom.el | 2 +- lisp/dabbrev.el | 2 +- lisp/delim-col.el | 2 +- lisp/delsel.el | 2 +- lisp/descr-text.el | 2 +- lisp/desktop.el | 2 +- lisp/dframe.el | 2 +- lisp/dired-aux.el | 2 +- lisp/dired-x.el | 2 +- lisp/dired.el | 2 +- lisp/dirtrack.el | 2 +- lisp/disp-table.el | 2 +- lisp/display-fill-column-indicator.el | 2 +- lisp/display-line-numbers.el | 2 +- lisp/dnd.el | 2 +- lisp/doc-view.el | 2 +- lisp/dom.el | 2 +- lisp/dos-fns.el | 2 +- lisp/dos-vars.el | 2 +- lisp/dos-w32.el | 2 +- lisp/double.el | 2 +- lisp/dynamic-setting.el | 2 +- lisp/ebuff-menu.el | 2 +- lisp/echistory.el | 2 +- lisp/ecomplete.el | 2 +- lisp/edmacro.el | 2 +- lisp/ehelp.el | 2 +- lisp/elec-pair.el | 2 +- lisp/electric.el | 2 +- lisp/elide-head.el | 2 +- lisp/emacs-lisp/advice.el | 2 +- lisp/emacs-lisp/autoload.el | 2 +- lisp/emacs-lisp/avl-tree.el | 2 +- lisp/emacs-lisp/backquote.el | 2 +- lisp/emacs-lisp/backtrace.el | 2 +- lisp/emacs-lisp/benchmark.el | 2 +- lisp/emacs-lisp/bindat.el | 2 +- lisp/emacs-lisp/byte-opt.el | 2 +- lisp/emacs-lisp/byte-run.el | 2 +- lisp/emacs-lisp/bytecomp.el | 2 +- lisp/emacs-lisp/cconv.el | 2 +- lisp/emacs-lisp/chart.el | 2 +- lisp/emacs-lisp/check-declare.el | 2 +- lisp/emacs-lisp/checkdoc.el | 2 +- lisp/emacs-lisp/cl-extra.el | 2 +- lisp/emacs-lisp/cl-generic.el | 2 +- lisp/emacs-lisp/cl-indent.el | 2 +- lisp/emacs-lisp/cl-lib.el | 2 +- lisp/emacs-lisp/cl-macs.el | 2 +- lisp/emacs-lisp/cl-print.el | 2 +- lisp/emacs-lisp/cl-seq.el | 2 +- lisp/emacs-lisp/copyright.el | 2 +- lisp/emacs-lisp/crm.el | 2 +- lisp/emacs-lisp/cursor-sensor.el | 2 +- lisp/emacs-lisp/debug.el | 2 +- lisp/emacs-lisp/derived.el | 2 +- lisp/emacs-lisp/disass.el | 2 +- lisp/emacs-lisp/easy-mmode.el | 2 +- lisp/emacs-lisp/easymenu.el | 2 +- lisp/emacs-lisp/edebug.el | 2 +- lisp/emacs-lisp/eieio-base.el | 2 +- lisp/emacs-lisp/eieio-compat.el | 2 +- lisp/emacs-lisp/eieio-core.el | 2 +- lisp/emacs-lisp/eieio-custom.el | 2 +- lisp/emacs-lisp/eieio-datadebug.el | 2 +- lisp/emacs-lisp/eieio-opt.el | 2 +- lisp/emacs-lisp/eieio-speedbar.el | 2 +- lisp/emacs-lisp/eieio.el | 2 +- lisp/emacs-lisp/eldoc.el | 2 +- lisp/emacs-lisp/elint.el | 2 +- lisp/emacs-lisp/elp.el | 2 +- lisp/emacs-lisp/ert-x.el | 2 +- lisp/emacs-lisp/ert.el | 2 +- lisp/emacs-lisp/ewoc.el | 2 +- lisp/emacs-lisp/faceup.el | 2 +- lisp/emacs-lisp/find-func.el | 2 +- lisp/emacs-lisp/float-sup.el | 2 +- lisp/emacs-lisp/generator.el | 2 +- lisp/emacs-lisp/generic.el | 2 +- lisp/emacs-lisp/gv.el | 2 +- lisp/emacs-lisp/helper.el | 2 +- lisp/emacs-lisp/inline.el | 2 +- lisp/emacs-lisp/let-alist.el | 2 +- lisp/emacs-lisp/lisp-mnt.el | 2 +- lisp/emacs-lisp/lisp-mode.el | 2 +- lisp/emacs-lisp/lisp.el | 2 +- lisp/emacs-lisp/macroexp.el | 2 +- lisp/emacs-lisp/map-ynp.el | 2 +- lisp/emacs-lisp/map.el | 2 +- lisp/emacs-lisp/nadvice.el | 2 +- lisp/emacs-lisp/package-x.el | 2 +- lisp/emacs-lisp/package.el | 2 +- lisp/emacs-lisp/pcase.el | 2 +- lisp/emacs-lisp/pp.el | 2 +- lisp/emacs-lisp/radix-tree.el | 2 +- lisp/emacs-lisp/re-builder.el | 2 +- lisp/emacs-lisp/regexp-opt.el | 2 +- lisp/emacs-lisp/regi.el | 2 +- lisp/emacs-lisp/ring.el | 2 +- lisp/emacs-lisp/rmc.el | 2 +- lisp/emacs-lisp/rx.el | 2 +- lisp/emacs-lisp/seq.el | 2 +- lisp/emacs-lisp/shadow.el | 2 +- lisp/emacs-lisp/smie.el | 2 +- lisp/emacs-lisp/subr-x.el | 2 +- lisp/emacs-lisp/syntax.el | 2 +- lisp/emacs-lisp/tabulated-list.el | 2 +- lisp/emacs-lisp/tcover-ses.el | 2 +- lisp/emacs-lisp/tcover-unsafep.el | 2 +- lisp/emacs-lisp/testcover.el | 2 +- lisp/emacs-lisp/text-property-search.el | 2 +- lisp/emacs-lisp/thunk.el | 2 +- lisp/emacs-lisp/timer-list.el | 2 +- lisp/emacs-lisp/timer.el | 2 +- lisp/emacs-lisp/tq.el | 2 +- lisp/emacs-lisp/trace.el | 2 +- lisp/emacs-lisp/unsafep.el | 2 +- lisp/emacs-lisp/warnings.el | 2 +- lisp/emacs-lock.el | 2 +- lisp/emulation/cua-base.el | 2 +- lisp/emulation/cua-gmrk.el | 2 +- lisp/emulation/cua-rect.el | 2 +- lisp/emulation/edt-lk201.el | 2 +- lisp/emulation/edt-mapper.el | 2 +- lisp/emulation/edt-pc.el | 2 +- lisp/emulation/edt-vt100.el | 2 +- lisp/emulation/edt.el | 2 +- lisp/emulation/keypad.el | 2 +- lisp/emulation/viper-cmd.el | 2 +- lisp/emulation/viper-ex.el | 2 +- lisp/emulation/viper-init.el | 2 +- lisp/emulation/viper-keym.el | 2 +- lisp/emulation/viper-macs.el | 2 +- lisp/emulation/viper-mous.el | 2 +- lisp/emulation/viper-util.el | 2 +- lisp/emulation/viper.el | 2 +- lisp/env.el | 2 +- lisp/epa-dired.el | 2 +- lisp/epa-file.el | 2 +- lisp/epa-hook.el | 2 +- lisp/epa-mail.el | 2 +- lisp/epa.el | 2 +- lisp/epg-config.el | 2 +- lisp/epg.el | 2 +- lisp/erc/ChangeLog.1 | 2 +- lisp/erc/ChangeLog.2 | 2 +- lisp/erc/erc-autoaway.el | 2 +- lisp/erc/erc-backend.el | 2 +- lisp/erc/erc-button.el | 2 +- lisp/erc/erc-capab.el | 2 +- lisp/erc/erc-compat.el | 2 +- lisp/erc/erc-dcc.el | 2 +- lisp/erc/erc-desktop-notifications.el | 2 +- lisp/erc/erc-ezbounce.el | 2 +- lisp/erc/erc-fill.el | 2 +- lisp/erc/erc-goodies.el | 2 +- lisp/erc/erc-ibuffer.el | 2 +- lisp/erc/erc-identd.el | 2 +- lisp/erc/erc-imenu.el | 2 +- lisp/erc/erc-join.el | 2 +- lisp/erc/erc-lang.el | 2 +- lisp/erc/erc-list.el | 2 +- lisp/erc/erc-log.el | 2 +- lisp/erc/erc-match.el | 2 +- lisp/erc/erc-menu.el | 2 +- lisp/erc/erc-netsplit.el | 2 +- lisp/erc/erc-networks.el | 2 +- lisp/erc/erc-notify.el | 2 +- lisp/erc/erc-page.el | 2 +- lisp/erc/erc-pcomplete.el | 2 +- lisp/erc/erc-replace.el | 2 +- lisp/erc/erc-ring.el | 2 +- lisp/erc/erc-services.el | 2 +- lisp/erc/erc-sound.el | 2 +- lisp/erc/erc-speedbar.el | 2 +- lisp/erc/erc-spelling.el | 2 +- lisp/erc/erc-stamp.el | 2 +- lisp/erc/erc-track.el | 2 +- lisp/erc/erc-truncate.el | 2 +- lisp/erc/erc-xdcc.el | 2 +- lisp/erc/erc.el | 2 +- lisp/eshell/em-alias.el | 2 +- lisp/eshell/em-banner.el | 2 +- lisp/eshell/em-basic.el | 2 +- lisp/eshell/em-cmpl.el | 2 +- lisp/eshell/em-dirs.el | 2 +- lisp/eshell/em-glob.el | 2 +- lisp/eshell/em-hist.el | 2 +- lisp/eshell/em-ls.el | 2 +- lisp/eshell/em-pred.el | 2 +- lisp/eshell/em-prompt.el | 2 +- lisp/eshell/em-rebind.el | 2 +- lisp/eshell/em-script.el | 2 +- lisp/eshell/em-smart.el | 2 +- lisp/eshell/em-term.el | 2 +- lisp/eshell/em-tramp.el | 2 +- lisp/eshell/em-unix.el | 2 +- lisp/eshell/em-xtra.el | 2 +- lisp/eshell/esh-arg.el | 2 +- lisp/eshell/esh-cmd.el | 2 +- lisp/eshell/esh-ext.el | 2 +- lisp/eshell/esh-io.el | 2 +- lisp/eshell/esh-mode.el | 2 +- lisp/eshell/esh-module.el | 2 +- lisp/eshell/esh-opt.el | 2 +- lisp/eshell/esh-proc.el | 2 +- lisp/eshell/esh-util.el | 2 +- lisp/eshell/esh-var.el | 2 +- lisp/eshell/eshell.el | 2 +- lisp/expand.el | 2 +- lisp/ezimage.el | 2 +- lisp/face-remap.el | 2 +- lisp/facemenu.el | 2 +- lisp/faces.el | 2 +- lisp/ffap.el | 2 +- lisp/filecache.el | 2 +- lisp/fileloop.el | 2 +- lisp/filenotify.el | 2 +- lisp/files-x.el | 2 +- lisp/files.el | 2 +- lisp/filesets.el | 2 +- lisp/find-cmd.el | 2 +- lisp/find-dired.el | 2 +- lisp/find-file.el | 2 +- lisp/find-lisp.el | 2 +- lisp/finder.el | 2 +- lisp/flow-ctrl.el | 2 +- lisp/foldout.el | 2 +- lisp/follow.el | 2 +- lisp/font-core.el | 2 +- lisp/font-lock.el | 2 +- lisp/format-spec.el | 2 +- lisp/format.el | 2 +- lisp/forms.el | 2 +- lisp/frame.el | 2 +- lisp/frameset.el | 2 +- lisp/fringe.el | 2 +- lisp/generic-x.el | 2 +- lisp/gnus/ChangeLog.1 | 2 +- lisp/gnus/ChangeLog.2 | 2 +- lisp/gnus/ChangeLog.3 | 2 +- lisp/gnus/canlock.el | 2 +- lisp/gnus/deuglify.el | 2 +- lisp/gnus/gmm-utils.el | 2 +- lisp/gnus/gnus-agent.el | 2 +- lisp/gnus/gnus-art.el | 2 +- lisp/gnus/gnus-async.el | 2 +- lisp/gnus/gnus-bcklg.el | 2 +- lisp/gnus/gnus-bookmark.el | 2 +- lisp/gnus/gnus-cache.el | 2 +- lisp/gnus/gnus-cite.el | 2 +- lisp/gnus/gnus-cloud.el | 2 +- lisp/gnus/gnus-cus.el | 2 +- lisp/gnus/gnus-delay.el | 2 +- lisp/gnus/gnus-demon.el | 2 +- lisp/gnus/gnus-diary.el | 2 +- lisp/gnus/gnus-dired.el | 2 +- lisp/gnus/gnus-draft.el | 2 +- lisp/gnus/gnus-dup.el | 2 +- lisp/gnus/gnus-eform.el | 2 +- lisp/gnus/gnus-fun.el | 2 +- lisp/gnus/gnus-gravatar.el | 2 +- lisp/gnus/gnus-group.el | 2 +- lisp/gnus/gnus-html.el | 2 +- lisp/gnus/gnus-icalendar.el | 2 +- lisp/gnus/gnus-int.el | 2 +- lisp/gnus/gnus-kill.el | 2 +- lisp/gnus/gnus-logic.el | 2 +- lisp/gnus/gnus-mh.el | 2 +- lisp/gnus/gnus-ml.el | 2 +- lisp/gnus/gnus-mlspl.el | 2 +- lisp/gnus/gnus-msg.el | 2 +- lisp/gnus/gnus-notifications.el | 2 +- lisp/gnus/gnus-picon.el | 2 +- lisp/gnus/gnus-range.el | 2 +- lisp/gnus/gnus-registry.el | 2 +- lisp/gnus/gnus-rfc1843.el | 2 +- lisp/gnus/gnus-salt.el | 2 +- lisp/gnus/gnus-score.el | 2 +- lisp/gnus/gnus-sieve.el | 2 +- lisp/gnus/gnus-spec.el | 2 +- lisp/gnus/gnus-srvr.el | 2 +- lisp/gnus/gnus-start.el | 2 +- lisp/gnus/gnus-sum.el | 2 +- lisp/gnus/gnus-topic.el | 2 +- lisp/gnus/gnus-undo.el | 2 +- lisp/gnus/gnus-util.el | 2 +- lisp/gnus/gnus-uu.el | 2 +- lisp/gnus/gnus-vm.el | 2 +- lisp/gnus/gnus-win.el | 2 +- lisp/gnus/gnus.el | 2 +- lisp/gnus/gssapi.el | 2 +- lisp/gnus/legacy-gnus-agent.el | 2 +- lisp/gnus/mail-source.el | 2 +- lisp/gnus/message.el | 2 +- lisp/gnus/mm-archive.el | 2 +- lisp/gnus/mm-bodies.el | 2 +- lisp/gnus/mm-decode.el | 2 +- lisp/gnus/mm-encode.el | 2 +- lisp/gnus/mm-extern.el | 2 +- lisp/gnus/mm-partial.el | 2 +- lisp/gnus/mm-url.el | 2 +- lisp/gnus/mm-util.el | 2 +- lisp/gnus/mm-uu.el | 2 +- lisp/gnus/mm-view.el | 2 +- lisp/gnus/mml-sec.el | 2 +- lisp/gnus/mml-smime.el | 2 +- lisp/gnus/mml.el | 2 +- lisp/gnus/mml1991.el | 2 +- lisp/gnus/mml2015.el | 2 +- lisp/gnus/nnagent.el | 2 +- lisp/gnus/nnbabyl.el | 2 +- lisp/gnus/nndiary.el | 2 +- lisp/gnus/nndir.el | 2 +- lisp/gnus/nndoc.el | 2 +- lisp/gnus/nndraft.el | 2 +- lisp/gnus/nneething.el | 2 +- lisp/gnus/nnfolder.el | 2 +- lisp/gnus/nngateway.el | 2 +- lisp/gnus/nnheader.el | 2 +- lisp/gnus/nnimap.el | 2 +- lisp/gnus/nnir.el | 2 +- lisp/gnus/nnmail.el | 2 +- lisp/gnus/nnmairix.el | 2 +- lisp/gnus/nnmbox.el | 2 +- lisp/gnus/nnmh.el | 2 +- lisp/gnus/nnml.el | 2 +- lisp/gnus/nnoo.el | 2 +- lisp/gnus/nnregistry.el | 2 +- lisp/gnus/nnrss.el | 2 +- lisp/gnus/nnspool.el | 2 +- lisp/gnus/nntp.el | 2 +- lisp/gnus/nnvirtual.el | 2 +- lisp/gnus/nnweb.el | 2 +- lisp/gnus/score-mode.el | 2 +- lisp/gnus/smiley.el | 2 +- lisp/gnus/smime.el | 2 +- lisp/gnus/spam-report.el | 2 +- lisp/gnus/spam-stat.el | 2 +- lisp/gnus/spam-wash.el | 2 +- lisp/gnus/spam.el | 2 +- lisp/help-at-pt.el | 2 +- lisp/help-fns.el | 2 +- lisp/help-macro.el | 2 +- lisp/help-mode.el | 2 +- lisp/help.el | 2 +- lisp/hex-util.el | 2 +- lisp/hexl.el | 2 +- lisp/hfy-cmap.el | 2 +- lisp/hi-lock.el | 2 +- lisp/hilit-chg.el | 2 +- lisp/hippie-exp.el | 2 +- lisp/hl-line.el | 2 +- lisp/htmlfontify.el | 2 +- lisp/ibuf-ext.el | 2 +- lisp/ibuf-macs.el | 2 +- lisp/ibuffer.el | 2 +- lisp/icomplete.el | 2 +- lisp/ido.el | 2 +- lisp/ielm.el | 2 +- lisp/iimage.el | 2 +- lisp/image-dired.el | 2 +- lisp/image-file.el | 2 +- lisp/image-mode.el | 2 +- lisp/image.el | 2 +- lisp/image/compface.el | 2 +- lisp/image/exif.el | 2 +- lisp/image/gravatar.el | 2 +- lisp/image/image-converter.el | 2 +- lisp/imenu.el | 2 +- lisp/indent.el | 2 +- lisp/info-look.el | 2 +- lisp/info-xref.el | 2 +- lisp/info.el | 2 +- lisp/informat.el | 2 +- lisp/international/ccl.el | 2 +- lisp/international/characters.el | 2 +- lisp/international/fontset.el | 2 +- lisp/international/isearch-x.el | 2 +- lisp/international/iso-ascii.el | 2 +- lisp/international/iso-cvt.el | 2 +- lisp/international/iso-transl.el | 2 +- lisp/international/ja-dic-cnv.el | 2 +- lisp/international/kinsoku.el | 2 +- lisp/international/kkc.el | 2 +- lisp/international/latexenc.el | 2 +- lisp/international/latin1-disp.el | 2 +- lisp/international/mule-cmds.el | 2 +- lisp/international/mule-conf.el | 2 +- lisp/international/mule-diag.el | 2 +- lisp/international/mule-util.el | 2 +- lisp/international/mule.el | 2 +- lisp/international/ogonek.el | 2 +- lisp/international/quail.el | 2 +- lisp/international/rfc1843.el | 2 +- lisp/international/titdic-cnv.el | 2 +- lisp/international/ucs-normalize.el | 2 +- lisp/international/utf-7.el | 2 +- lisp/international/utf7.el | 2 +- lisp/isearch.el | 2 +- lisp/isearchb.el | 2 +- lisp/jit-lock.el | 2 +- lisp/jka-cmpr-hook.el | 2 +- lisp/jka-compr.el | 2 +- lisp/json.el | 2 +- lisp/jsonrpc.el | 2 +- lisp/kermit.el | 2 +- lisp/kmacro.el | 2 +- lisp/language/china-util.el | 2 +- lisp/language/chinese.el | 2 +- lisp/language/cyril-util.el | 2 +- lisp/language/cyrillic.el | 2 +- lisp/language/czech.el | 2 +- lisp/language/english.el | 2 +- lisp/language/ethio-util.el | 2 +- lisp/language/ethiopic.el | 2 +- lisp/language/european.el | 2 +- lisp/language/georgian.el | 2 +- lisp/language/greek.el | 2 +- lisp/language/hanja-util.el | 2 +- lisp/language/hebrew.el | 2 +- lisp/language/ind-util.el | 2 +- lisp/language/indian.el | 2 +- lisp/language/japan-util.el | 2 +- lisp/language/japanese.el | 2 +- lisp/language/korea-util.el | 2 +- lisp/language/korean.el | 2 +- lisp/language/lao-util.el | 2 +- lisp/language/lao.el | 2 +- lisp/language/romanian.el | 2 +- lisp/language/slovak.el | 2 +- lisp/language/tai-viet.el | 2 +- lisp/language/thai-util.el | 2 +- lisp/language/thai.el | 2 +- lisp/language/tibet-util.el | 2 +- lisp/language/tibetan.el | 2 +- lisp/language/utf-8-lang.el | 2 +- lisp/language/viet-util.el | 2 +- lisp/language/vietnamese.el | 2 +- lisp/leim/quail/arabic.el | 2 +- lisp/leim/quail/croatian.el | 2 +- lisp/leim/quail/cyril-jis.el | 2 +- lisp/leim/quail/cyrillic.el | 2 +- lisp/leim/quail/czech.el | 2 +- lisp/leim/quail/georgian.el | 2 +- lisp/leim/quail/greek.el | 2 +- lisp/leim/quail/hangul.el | 2 +- lisp/leim/quail/hanja.el | 2 +- lisp/leim/quail/hanja3.el | 2 +- lisp/leim/quail/indian.el | 2 +- lisp/leim/quail/ipa-praat.el | 2 +- lisp/leim/quail/ipa.el | 2 +- lisp/leim/quail/japanese.el | 2 +- lisp/leim/quail/latin-alt.el | 2 +- lisp/leim/quail/latin-ltx.el | 2 +- lisp/leim/quail/latin-post.el | 2 +- lisp/leim/quail/latin-pre.el | 2 +- lisp/leim/quail/lrt.el | 2 +- lisp/leim/quail/persian.el | 2 +- lisp/leim/quail/programmer-dvorak.el | 2 +- lisp/leim/quail/py-punct.el | 2 +- lisp/leim/quail/rfc1345.el | 2 +- lisp/leim/quail/sami.el | 2 +- lisp/leim/quail/sgml-input.el | 2 +- lisp/leim/quail/sisheng.el | 2 +- lisp/leim/quail/slovak.el | 2 +- lisp/leim/quail/symbol-ksc.el | 2 +- lisp/leim/quail/tamil-dvorak.el | 2 +- lisp/leim/quail/tibetan.el | 2 +- lisp/leim/quail/uni-input.el | 2 +- lisp/leim/quail/vntelex.el | 2 +- lisp/leim/quail/vnvni.el | 2 +- lisp/leim/quail/welsh.el | 2 +- lisp/linum.el | 2 +- lisp/loadhist.el | 2 +- lisp/loadup.el | 2 +- lisp/locate.el | 2 +- lisp/lpr.el | 2 +- lisp/ls-lisp.el | 2 +- lisp/macros.el | 2 +- lisp/mail/binhex.el | 2 +- lisp/mail/blessmail.el | 2 +- lisp/mail/emacsbug.el | 2 +- lisp/mail/flow-fill.el | 2 +- lisp/mail/footnote.el | 2 +- lisp/mail/hashcash.el | 2 +- lisp/mail/ietf-drums.el | 2 +- lisp/mail/mail-extr.el | 2 +- lisp/mail/mail-hist.el | 2 +- lisp/mail/mail-parse.el | 2 +- lisp/mail/mail-prsvr.el | 2 +- lisp/mail/mail-utils.el | 2 +- lisp/mail/mailabbrev.el | 2 +- lisp/mail/mailalias.el | 2 +- lisp/mail/mailclient.el | 2 +- lisp/mail/mailheader.el | 2 +- lisp/mail/metamail.el | 2 +- lisp/mail/mspools.el | 2 +- lisp/mail/qp.el | 2 +- lisp/mail/reporter.el | 2 +- lisp/mail/rfc2045.el | 2 +- lisp/mail/rfc2047.el | 2 +- lisp/mail/rfc2231.el | 2 +- lisp/mail/rfc2368.el | 2 +- lisp/mail/rfc822.el | 2 +- lisp/mail/rmail-spam-filter.el | 2 +- lisp/mail/rmail.el | 2 +- lisp/mail/rmailedit.el | 2 +- lisp/mail/rmailkwd.el | 2 +- lisp/mail/rmailmm.el | 2 +- lisp/mail/rmailmsc.el | 2 +- lisp/mail/rmailout.el | 2 +- lisp/mail/rmailsort.el | 2 +- lisp/mail/rmailsum.el | 2 +- lisp/mail/sendmail.el | 2 +- lisp/mail/smtpmail.el | 2 +- lisp/mail/supercite.el | 2 +- lisp/mail/uce.el | 2 +- lisp/mail/undigest.el | 2 +- lisp/mail/unrmail.el | 2 +- lisp/mail/uudecode.el | 2 +- lisp/mail/yenc.el | 2 +- lisp/makesum.el | 2 +- lisp/man.el | 2 +- lisp/master.el | 2 +- lisp/mb-depth.el | 2 +- lisp/md4.el | 2 +- lisp/menu-bar.el | 2 +- lisp/mh-e/ChangeLog.1 | 2 +- lisp/mh-e/ChangeLog.2 | 2 +- lisp/mh-e/mh-acros.el | 2 +- lisp/mh-e/mh-alias.el | 2 +- lisp/mh-e/mh-buffers.el | 2 +- lisp/mh-e/mh-comp.el | 2 +- lisp/mh-e/mh-compat.el | 2 +- lisp/mh-e/mh-e.el | 2 +- lisp/mh-e/mh-folder.el | 2 +- lisp/mh-e/mh-funcs.el | 2 +- lisp/mh-e/mh-gnus.el | 2 +- lisp/mh-e/mh-identity.el | 2 +- lisp/mh-e/mh-inc.el | 2 +- lisp/mh-e/mh-junk.el | 2 +- lisp/mh-e/mh-letter.el | 2 +- lisp/mh-e/mh-limit.el | 2 +- lisp/mh-e/mh-mime.el | 2 +- lisp/mh-e/mh-print.el | 2 +- lisp/mh-e/mh-scan.el | 2 +- lisp/mh-e/mh-search.el | 2 +- lisp/mh-e/mh-seq.el | 2 +- lisp/mh-e/mh-show.el | 2 +- lisp/mh-e/mh-speed.el | 2 +- lisp/mh-e/mh-thread.el | 2 +- lisp/mh-e/mh-tool-bar.el | 2 +- lisp/mh-e/mh-utils.el | 2 +- lisp/mh-e/mh-xface.el | 2 +- lisp/midnight.el | 2 +- lisp/minibuf-eldef.el | 2 +- lisp/minibuffer.el | 2 +- lisp/misc.el | 2 +- lisp/misearch.el | 2 +- lisp/mouse-copy.el | 2 +- lisp/mouse-drag.el | 2 +- lisp/mouse.el | 2 +- lisp/mpc.el | 2 +- lisp/msb.el | 2 +- lisp/mwheel.el | 2 +- lisp/net/ange-ftp.el | 2 +- lisp/net/browse-url.el | 2 +- lisp/net/dbus.el | 2 +- lisp/net/dig.el | 2 +- lisp/net/dns.el | 2 +- lisp/net/eudc-bob.el | 2 +- lisp/net/eudc-export.el | 2 +- lisp/net/eudc-hotlist.el | 2 +- lisp/net/eudc-vars.el | 2 +- lisp/net/eudc.el | 2 +- lisp/net/eudcb-bbdb.el | 2 +- lisp/net/eudcb-ldap.el | 2 +- lisp/net/eudcb-mab.el | 2 +- lisp/net/eww.el | 2 +- lisp/net/gnutls.el | 2 +- lisp/net/goto-addr.el | 2 +- lisp/net/hmac-def.el | 2 +- lisp/net/hmac-md5.el | 2 +- lisp/net/imap.el | 2 +- lisp/net/ldap.el | 2 +- lisp/net/mailcap.el | 2 +- lisp/net/mairix.el | 2 +- lisp/net/net-utils.el | 2 +- lisp/net/netrc.el | 2 +- lisp/net/network-stream.el | 2 +- lisp/net/newst-backend.el | 2 +- lisp/net/newst-plainview.el | 2 +- lisp/net/newst-reader.el | 2 +- lisp/net/newst-ticker.el | 2 +- lisp/net/newst-treeview.el | 2 +- lisp/net/newsticker.el | 2 +- lisp/net/nsm.el | 2 +- lisp/net/ntlm.el | 2 +- lisp/net/pop3.el | 2 +- lisp/net/puny.el | 2 +- lisp/net/quickurl.el | 2 +- lisp/net/rcirc.el | 2 +- lisp/net/rfc2104.el | 2 +- lisp/net/rlogin.el | 2 +- lisp/net/sasl-cram.el | 2 +- lisp/net/sasl-digest.el | 2 +- lisp/net/sasl-ntlm.el | 2 +- lisp/net/sasl-scram-rfc.el | 2 +- lisp/net/sasl.el | 2 +- lisp/net/secrets.el | 2 +- lisp/net/shr-color.el | 2 +- lisp/net/shr.el | 2 +- lisp/net/sieve-manage.el | 2 +- lisp/net/sieve-mode.el | 2 +- lisp/net/sieve.el | 2 +- lisp/net/snmp-mode.el | 2 +- lisp/net/soap-client.el | 2 +- lisp/net/soap-inspect.el | 2 +- lisp/net/socks.el | 2 +- lisp/net/telnet.el | 2 +- lisp/net/tramp-adb.el | 2 +- lisp/net/tramp-archive.el | 2 +- lisp/net/tramp-cache.el | 2 +- lisp/net/tramp-cmds.el | 2 +- lisp/net/tramp-compat.el | 2 +- lisp/net/tramp-ftp.el | 2 +- lisp/net/tramp-gvfs.el | 2 +- lisp/net/tramp-integration.el | 2 +- lisp/net/tramp-rclone.el | 2 +- lisp/net/tramp-sh.el | 2 +- lisp/net/tramp-smb.el | 2 +- lisp/net/tramp-sudoedit.el | 2 +- lisp/net/tramp-uu.el | 2 +- lisp/net/tramp.el | 2 +- lisp/net/trampver.el | 2 +- lisp/net/webjump.el | 2 +- lisp/net/zeroconf.el | 2 +- lisp/newcomment.el | 2 +- lisp/notifications.el | 2 +- lisp/novice.el | 2 +- lisp/nxml/nxml-enc.el | 2 +- lisp/nxml/nxml-maint.el | 2 +- lisp/nxml/nxml-mode.el | 2 +- lisp/nxml/nxml-ns.el | 2 +- lisp/nxml/nxml-outln.el | 2 +- lisp/nxml/nxml-parse.el | 2 +- lisp/nxml/nxml-rap.el | 2 +- lisp/nxml/nxml-util.el | 2 +- lisp/nxml/rng-cmpct.el | 2 +- lisp/nxml/rng-dt.el | 2 +- lisp/nxml/rng-loc.el | 2 +- lisp/nxml/rng-maint.el | 2 +- lisp/nxml/rng-match.el | 2 +- lisp/nxml/rng-nxml.el | 2 +- lisp/nxml/rng-parse.el | 2 +- lisp/nxml/rng-pttrn.el | 2 +- lisp/nxml/rng-uri.el | 2 +- lisp/nxml/rng-util.el | 2 +- lisp/nxml/rng-valid.el | 2 +- lisp/nxml/rng-xsd.el | 2 +- lisp/nxml/xmltok.el | 2 +- lisp/nxml/xsd-regexp.el | 2 +- lisp/obarray.el | 2 +- lisp/obsolete/abbrevlist.el | 2 +- lisp/obsolete/assoc.el | 2 +- lisp/obsolete/bruce.el | 2 +- lisp/obsolete/cc-compat.el | 2 +- lisp/obsolete/cl-compat.el | 2 +- lisp/obsolete/cl.el | 2 +- lisp/obsolete/complete.el | 2 +- lisp/obsolete/crisp.el | 2 +- lisp/obsolete/cust-print.el | 2 +- lisp/obsolete/erc-hecomplete.el | 2 +- lisp/obsolete/eudcb-ph.el | 2 +- lisp/obsolete/fast-lock.el | 2 +- lisp/obsolete/gs.el | 2 +- lisp/obsolete/gulp.el | 2 +- lisp/obsolete/html2text.el | 2 +- lisp/obsolete/info-edit.el | 2 +- lisp/obsolete/iswitchb.el | 2 +- lisp/obsolete/landmark.el | 2 +- lisp/obsolete/lazy-lock.el | 2 +- lisp/obsolete/ledit.el | 2 +- lisp/obsolete/levents.el | 2 +- lisp/obsolete/lmenu.el | 2 +- lisp/obsolete/longlines.el | 2 +- lisp/obsolete/lucid.el | 2 +- lisp/obsolete/mantemp.el | 2 +- lisp/obsolete/messcompat.el | 2 +- lisp/obsolete/mouse-sel.el | 2 +- lisp/obsolete/old-emacs-lock.el | 2 +- lisp/obsolete/old-whitespace.el | 2 +- lisp/obsolete/otodo-mode.el | 2 +- lisp/obsolete/pc-mode.el | 2 +- lisp/obsolete/pc-select.el | 2 +- lisp/obsolete/pgg-def.el | 2 +- lisp/obsolete/pgg-gpg.el | 2 +- lisp/obsolete/pgg-parse.el | 2 +- lisp/obsolete/pgg-pgp.el | 2 +- lisp/obsolete/pgg-pgp5.el | 2 +- lisp/obsolete/pgg.el | 2 +- lisp/obsolete/rcompile.el | 2 +- lisp/obsolete/s-region.el | 2 +- lisp/obsolete/sregex.el | 2 +- lisp/obsolete/starttls.el | 2 +- lisp/obsolete/sup-mouse.el | 2 +- lisp/obsolete/terminal.el | 2 +- lisp/obsolete/tls.el | 2 +- lisp/obsolete/tpu-edt.el | 2 +- lisp/obsolete/tpu-extras.el | 2 +- lisp/obsolete/tpu-mapper.el | 2 +- lisp/obsolete/url-ns.el | 2 +- lisp/obsolete/vc-arch.el | 2 +- lisp/obsolete/vip.el | 2 +- lisp/obsolete/ws-mode.el | 2 +- lisp/obsolete/yow.el | 2 +- lisp/org/ChangeLog.1 | 2 +- lisp/org/ob-C.el | 2 +- lisp/org/ob-J.el | 2 +- lisp/org/ob-R.el | 2 +- lisp/org/ob-abc.el | 2 +- lisp/org/ob-asymptote.el | 2 +- lisp/org/ob-awk.el | 2 +- lisp/org/ob-calc.el | 2 +- lisp/org/ob-clojure.el | 2 +- lisp/org/ob-comint.el | 2 +- lisp/org/ob-coq.el | 2 +- lisp/org/ob-core.el | 2 +- lisp/org/ob-css.el | 2 +- lisp/org/ob-ditaa.el | 2 +- lisp/org/ob-dot.el | 2 +- lisp/org/ob-ebnf.el | 2 +- lisp/org/ob-emacs-lisp.el | 2 +- lisp/org/ob-eshell.el | 2 +- lisp/org/ob-eval.el | 2 +- lisp/org/ob-exp.el | 2 +- lisp/org/ob-forth.el | 2 +- lisp/org/ob-fortran.el | 2 +- lisp/org/ob-gnuplot.el | 2 +- lisp/org/ob-groovy.el | 2 +- lisp/org/ob-haskell.el | 2 +- lisp/org/ob-hledger.el | 2 +- lisp/org/ob-io.el | 2 +- lisp/org/ob-java.el | 2 +- lisp/org/ob-js.el | 2 +- lisp/org/ob-latex.el | 2 +- lisp/org/ob-ledger.el | 2 +- lisp/org/ob-lilypond.el | 2 +- lisp/org/ob-lisp.el | 2 +- lisp/org/ob-lob.el | 2 +- lisp/org/ob-lua.el | 2 +- lisp/org/ob-makefile.el | 2 +- lisp/org/ob-matlab.el | 2 +- lisp/org/ob-maxima.el | 2 +- lisp/org/ob-mscgen.el | 2 +- lisp/org/ob-ocaml.el | 2 +- lisp/org/ob-octave.el | 2 +- lisp/org/ob-org.el | 2 +- lisp/org/ob-perl.el | 2 +- lisp/org/ob-picolisp.el | 2 +- lisp/org/ob-plantuml.el | 2 +- lisp/org/ob-processing.el | 2 +- lisp/org/ob-python.el | 2 +- lisp/org/ob-ref.el | 2 +- lisp/org/ob-ruby.el | 2 +- lisp/org/ob-sass.el | 2 +- lisp/org/ob-scheme.el | 2 +- lisp/org/ob-screen.el | 2 +- lisp/org/ob-sed.el | 2 +- lisp/org/ob-shell.el | 2 +- lisp/org/ob-shen.el | 2 +- lisp/org/ob-sql.el | 2 +- lisp/org/ob-sqlite.el | 2 +- lisp/org/ob-stan.el | 2 +- lisp/org/ob-table.el | 2 +- lisp/org/ob-tangle.el | 2 +- lisp/org/ob-vala.el | 2 +- lisp/org/ob.el | 2 +- lisp/org/ol-bbdb.el | 2 +- lisp/org/ol-bibtex.el | 2 +- lisp/org/ol-docview.el | 2 +- lisp/org/ol-eshell.el | 2 +- lisp/org/ol-eww.el | 2 +- lisp/org/ol-gnus.el | 2 +- lisp/org/ol-info.el | 2 +- lisp/org/ol-irc.el | 2 +- lisp/org/ol-mhe.el | 2 +- lisp/org/ol-rmail.el | 2 +- lisp/org/ol-w3m.el | 2 +- lisp/org/ol.el | 2 +- lisp/org/org-agenda.el | 2 +- lisp/org/org-archive.el | 2 +- lisp/org/org-attach-git.el | 2 +- lisp/org/org-attach.el | 2 +- lisp/org/org-capture.el | 2 +- lisp/org/org-clock.el | 2 +- lisp/org/org-colview.el | 2 +- lisp/org/org-compat.el | 2 +- lisp/org/org-crypt.el | 2 +- lisp/org/org-ctags.el | 2 +- lisp/org/org-datetree.el | 2 +- lisp/org/org-duration.el | 2 +- lisp/org/org-element.el | 2 +- lisp/org/org-entities.el | 2 +- lisp/org/org-faces.el | 2 +- lisp/org/org-feed.el | 2 +- lisp/org/org-footnote.el | 2 +- lisp/org/org-goto.el | 2 +- lisp/org/org-habit.el | 2 +- lisp/org/org-id.el | 2 +- lisp/org/org-indent.el | 2 +- lisp/org/org-inlinetask.el | 2 +- lisp/org/org-keys.el | 2 +- lisp/org/org-lint.el | 2 +- lisp/org/org-list.el | 2 +- lisp/org/org-macro.el | 2 +- lisp/org/org-macs.el | 2 +- lisp/org/org-mobile.el | 2 +- lisp/org/org-mouse.el | 2 +- lisp/org/org-num.el | 2 +- lisp/org/org-pcomplete.el | 2 +- lisp/org/org-plot.el | 2 +- lisp/org/org-protocol.el | 2 +- lisp/org/org-refile.el | 2 +- lisp/org/org-src.el | 2 +- lisp/org/org-table.el | 2 +- lisp/org/org-tempo.el | 2 +- lisp/org/org-timer.el | 2 +- lisp/org/org.el | 2 +- lisp/org/ox-ascii.el | 2 +- lisp/org/ox-beamer.el | 2 +- lisp/org/ox-html.el | 2 +- lisp/org/ox-icalendar.el | 2 +- lisp/org/ox-latex.el | 2 +- lisp/org/ox-man.el | 2 +- lisp/org/ox-md.el | 2 +- lisp/org/ox-odt.el | 2 +- lisp/org/ox-org.el | 2 +- lisp/org/ox-publish.el | 2 +- lisp/org/ox-texinfo.el | 2 +- lisp/org/ox.el | 2 +- lisp/outline.el | 2 +- lisp/paren.el | 2 +- lisp/password-cache.el | 2 +- lisp/pcmpl-cvs.el | 2 +- lisp/pcmpl-gnu.el | 2 +- lisp/pcmpl-linux.el | 2 +- lisp/pcmpl-rpm.el | 2 +- lisp/pcmpl-unix.el | 2 +- lisp/pcmpl-x.el | 2 +- lisp/pcomplete.el | 2 +- lisp/pixel-scroll.el | 2 +- lisp/play/5x5.el | 2 +- lisp/play/animate.el | 2 +- lisp/play/blackbox.el | 2 +- lisp/play/bubbles.el | 2 +- lisp/play/cookie1.el | 2 +- lisp/play/decipher.el | 2 +- lisp/play/dissociate.el | 2 +- lisp/play/doctor.el | 2 +- lisp/play/dunnet.el | 2 +- lisp/play/fortune.el | 2 +- lisp/play/gamegrid.el | 2 +- lisp/play/gametree.el | 2 +- lisp/play/gomoku.el | 2 +- lisp/play/handwrite.el | 2 +- lisp/play/life.el | 2 +- lisp/play/morse.el | 2 +- lisp/play/mpuz.el | 2 +- lisp/play/pong.el | 2 +- lisp/play/snake.el | 2 +- lisp/play/solitaire.el | 2 +- lisp/play/spook.el | 2 +- lisp/play/tetris.el | 2 +- lisp/play/zone.el | 2 +- lisp/plstore.el | 2 +- lisp/printing.el | 2 +- lisp/proced.el | 2 +- lisp/profiler.el | 2 +- lisp/progmodes/antlr-mode.el | 2 +- lisp/progmodes/asm-mode.el | 2 +- lisp/progmodes/autoconf.el | 2 +- lisp/progmodes/bat-mode.el | 2 +- lisp/progmodes/bug-reference.el | 2 +- lisp/progmodes/cc-align.el | 2 +- lisp/progmodes/cc-awk.el | 2 +- lisp/progmodes/cc-bytecomp.el | 2 +- lisp/progmodes/cc-cmds.el | 2 +- lisp/progmodes/cc-defs.el | 2 +- lisp/progmodes/cc-engine.el | 2 +- lisp/progmodes/cc-fonts.el | 2 +- lisp/progmodes/cc-guess.el | 2 +- lisp/progmodes/cc-langs.el | 2 +- lisp/progmodes/cc-menus.el | 2 +- lisp/progmodes/cc-mode.el | 2 +- lisp/progmodes/cc-styles.el | 2 +- lisp/progmodes/cc-vars.el | 2 +- lisp/progmodes/cfengine.el | 2 +- lisp/progmodes/cmacexp.el | 2 +- lisp/progmodes/compile.el | 2 +- lisp/progmodes/cperl-mode.el | 2 +- lisp/progmodes/cpp.el | 2 +- lisp/progmodes/cwarn.el | 2 +- lisp/progmodes/dcl-mode.el | 2 +- lisp/progmodes/ebnf-abn.el | 2 +- lisp/progmodes/ebnf-bnf.el | 2 +- lisp/progmodes/ebnf-dtd.el | 2 +- lisp/progmodes/ebnf-ebx.el | 2 +- lisp/progmodes/ebnf-iso.el | 2 +- lisp/progmodes/ebnf-otz.el | 2 +- lisp/progmodes/ebnf-yac.el | 2 +- lisp/progmodes/ebnf2ps.el | 2 +- lisp/progmodes/ebrowse.el | 2 +- lisp/progmodes/elisp-mode.el | 2 +- lisp/progmodes/etags.el | 2 +- lisp/progmodes/executable.el | 2 +- lisp/progmodes/f90.el | 2 +- lisp/progmodes/flymake-cc.el | 2 +- lisp/progmodes/flymake-proc.el | 2 +- lisp/progmodes/flymake.el | 2 +- lisp/progmodes/fortran.el | 2 +- lisp/progmodes/gdb-mi.el | 2 +- lisp/progmodes/glasses.el | 2 +- lisp/progmodes/grep.el | 2 +- lisp/progmodes/gud.el | 2 +- lisp/progmodes/hideif.el | 2 +- lisp/progmodes/hideshow.el | 2 +- lisp/progmodes/icon.el | 2 +- lisp/progmodes/idlw-complete-structtag.el | 2 +- lisp/progmodes/idlw-help.el | 2 +- lisp/progmodes/idlw-shell.el | 2 +- lisp/progmodes/idlw-toolbar.el | 2 +- lisp/progmodes/idlwave.el | 2 +- lisp/progmodes/inf-lisp.el | 2 +- lisp/progmodes/js.el | 2 +- lisp/progmodes/ld-script.el | 2 +- lisp/progmodes/m4-mode.el | 2 +- lisp/progmodes/make-mode.el | 2 +- lisp/progmodes/meta-mode.el | 2 +- lisp/progmodes/mixal-mode.el | 2 +- lisp/progmodes/octave.el | 2 +- lisp/progmodes/opascal.el | 2 +- lisp/progmodes/pascal.el | 2 +- lisp/progmodes/perl-mode.el | 2 +- lisp/progmodes/prog-mode.el | 2 +- lisp/progmodes/project.el | 2 +- lisp/progmodes/prolog.el | 2 +- lisp/progmodes/ps-mode.el | 2 +- lisp/progmodes/python.el | 2 +- lisp/progmodes/ruby-mode.el | 2 +- lisp/progmodes/scheme.el | 2 +- lisp/progmodes/sh-script.el | 2 +- lisp/progmodes/simula.el | 2 +- lisp/progmodes/sql.el | 2 +- lisp/progmodes/subword.el | 2 +- lisp/progmodes/tcl.el | 2 +- lisp/progmodes/vera-mode.el | 2 +- lisp/progmodes/verilog-mode.el | 2 +- lisp/progmodes/vhdl-mode.el | 2 +- lisp/progmodes/which-func.el | 2 +- lisp/progmodes/xref.el | 2 +- lisp/progmodes/xscheme.el | 2 +- lisp/ps-bdf.el | 2 +- lisp/ps-def.el | 2 +- lisp/ps-mule.el | 2 +- lisp/ps-print.el | 2 +- lisp/ps-samp.el | 2 +- lisp/recentf.el | 2 +- lisp/rect.el | 2 +- lisp/register.el | 2 +- lisp/registry.el | 2 +- lisp/repeat.el | 2 +- lisp/replace.el | 2 +- lisp/reposition.el | 2 +- lisp/reveal.el | 2 +- lisp/rfn-eshadow.el | 2 +- lisp/rot13.el | 2 +- lisp/rtree.el | 2 +- lisp/ruler-mode.el | 2 +- lisp/savehist.el | 2 +- lisp/saveplace.el | 2 +- lisp/sb-image.el | 2 +- lisp/scroll-all.el | 2 +- lisp/scroll-bar.el | 2 +- lisp/scroll-lock.el | 2 +- lisp/select.el | 2 +- lisp/server.el | 2 +- lisp/ses.el | 2 +- lisp/shadowfile.el | 2 +- lisp/shell.el | 2 +- lisp/simple.el | 2 +- lisp/skeleton.el | 2 +- lisp/so-long.el | 2 +- lisp/sort.el | 2 +- lisp/soundex.el | 2 +- lisp/speedbar.el | 2 +- lisp/startup.el | 2 +- lisp/strokes.el | 2 +- lisp/subr.el | 2 +- lisp/svg.el | 2 +- lisp/t-mouse.el | 2 +- lisp/tab-bar.el | 2 +- lisp/tab-line.el | 2 +- lisp/tabify.el | 2 +- lisp/talk.el | 2 +- lisp/tar-mode.el | 2 +- lisp/tempo.el | 2 +- lisp/term.el | 2 +- lisp/term/AT386.el | 2 +- lisp/term/README | 2 +- lisp/term/common-win.el | 2 +- lisp/term/internal.el | 2 +- lisp/term/iris-ansi.el | 2 +- lisp/term/konsole.el | 2 +- lisp/term/news.el | 2 +- lisp/term/ns-win.el | 2 +- lisp/term/pc-win.el | 2 +- lisp/term/rxvt.el | 2 +- lisp/term/screen.el | 2 +- lisp/term/sun.el | 2 +- lisp/term/tmux.el | 2 +- lisp/term/tty-colors.el | 2 +- lisp/term/tvi970.el | 2 +- lisp/term/vt100.el | 2 +- lisp/term/w32-win.el | 2 +- lisp/term/w32console.el | 2 +- lisp/term/wyse50.el | 2 +- lisp/term/x-win.el | 2 +- lisp/term/xterm.el | 2 +- lisp/textmodes/artist.el | 2 +- lisp/textmodes/bib-mode.el | 2 +- lisp/textmodes/bibtex-style.el | 2 +- lisp/textmodes/bibtex.el | 2 +- lisp/textmodes/conf-mode.el | 2 +- lisp/textmodes/css-mode.el | 2 +- lisp/textmodes/dns-mode.el | 2 +- lisp/textmodes/enriched.el | 2 +- lisp/textmodes/fill.el | 2 +- lisp/textmodes/flyspell.el | 2 +- lisp/textmodes/ispell.el | 2 +- lisp/textmodes/less-css-mode.el | 2 +- lisp/textmodes/makeinfo.el | 2 +- lisp/textmodes/mhtml-mode.el | 2 +- lisp/textmodes/nroff-mode.el | 2 +- lisp/textmodes/page-ext.el | 2 +- lisp/textmodes/page.el | 2 +- lisp/textmodes/paragraphs.el | 2 +- lisp/textmodes/picture.el | 2 +- lisp/textmodes/po.el | 2 +- lisp/textmodes/refbib.el | 2 +- lisp/textmodes/refer.el | 2 +- lisp/textmodes/refill.el | 2 +- lisp/textmodes/reftex-auc.el | 2 +- lisp/textmodes/reftex-cite.el | 2 +- lisp/textmodes/reftex-dcr.el | 2 +- lisp/textmodes/reftex-global.el | 2 +- lisp/textmodes/reftex-index.el | 2 +- lisp/textmodes/reftex-parse.el | 2 +- lisp/textmodes/reftex-ref.el | 2 +- lisp/textmodes/reftex-sel.el | 2 +- lisp/textmodes/reftex-toc.el | 2 +- lisp/textmodes/reftex-vars.el | 2 +- lisp/textmodes/reftex.el | 2 +- lisp/textmodes/remember.el | 2 +- lisp/textmodes/rst.el | 2 +- lisp/textmodes/sgml-mode.el | 2 +- lisp/textmodes/table.el | 2 +- lisp/textmodes/tex-mode.el | 2 +- lisp/textmodes/texinfmt.el | 2 +- lisp/textmodes/texinfo.el | 2 +- lisp/textmodes/texnfo-upd.el | 2 +- lisp/textmodes/text-mode.el | 2 +- lisp/textmodes/tildify.el | 2 +- lisp/textmodes/two-column.el | 2 +- lisp/textmodes/underline.el | 2 +- lisp/thingatpt.el | 2 +- lisp/thread.el | 2 +- lisp/thumbs.el | 2 +- lisp/time-stamp.el | 2 +- lisp/time.el | 2 +- lisp/timezone.el | 2 +- lisp/tmm.el | 2 +- lisp/tool-bar.el | 2 +- lisp/tooltip.el | 2 +- lisp/tree-widget.el | 2 +- lisp/tutorial.el | 2 +- lisp/type-break.el | 2 +- lisp/uniquify.el | 2 +- lisp/url/ChangeLog.1 | 2 +- lisp/url/url-about.el | 2 +- lisp/url/url-auth.el | 2 +- lisp/url/url-cache.el | 2 +- lisp/url/url-cid.el | 2 +- lisp/url/url-cookie.el | 2 +- lisp/url/url-dav.el | 2 +- lisp/url/url-dired.el | 2 +- lisp/url/url-domsuf.el | 2 +- lisp/url/url-expand.el | 2 +- lisp/url/url-file.el | 2 +- lisp/url/url-ftp.el | 2 +- lisp/url/url-future.el | 2 +- lisp/url/url-gw.el | 2 +- lisp/url/url-handlers.el | 2 +- lisp/url/url-history.el | 2 +- lisp/url/url-http.el | 2 +- lisp/url/url-imap.el | 2 +- lisp/url/url-irc.el | 2 +- lisp/url/url-ldap.el | 2 +- lisp/url/url-mailto.el | 2 +- lisp/url/url-methods.el | 2 +- lisp/url/url-misc.el | 2 +- lisp/url/url-news.el | 2 +- lisp/url/url-nfs.el | 2 +- lisp/url/url-parse.el | 2 +- lisp/url/url-privacy.el | 2 +- lisp/url/url-proxy.el | 2 +- lisp/url/url-queue.el | 2 +- lisp/url/url-tramp.el | 2 +- lisp/url/url-util.el | 2 +- lisp/url/url-vars.el | 2 +- lisp/url/url.el | 2 +- lisp/userlock.el | 2 +- lisp/vc/add-log.el | 2 +- lisp/vc/compare-w.el | 2 +- lisp/vc/cvs-status.el | 2 +- lisp/vc/diff-mode.el | 2 +- lisp/vc/diff.el | 2 +- lisp/vc/ediff-diff.el | 2 +- lisp/vc/ediff-help.el | 2 +- lisp/vc/ediff-hook.el | 2 +- lisp/vc/ediff-init.el | 2 +- lisp/vc/ediff-merg.el | 2 +- lisp/vc/ediff-mult.el | 2 +- lisp/vc/ediff-ptch.el | 2 +- lisp/vc/ediff-util.el | 2 +- lisp/vc/ediff-vers.el | 2 +- lisp/vc/ediff-wind.el | 2 +- lisp/vc/ediff.el | 2 +- lisp/vc/log-edit.el | 2 +- lisp/vc/log-view.el | 2 +- lisp/vc/pcvs-defs.el | 2 +- lisp/vc/pcvs-info.el | 2 +- lisp/vc/pcvs-parse.el | 2 +- lisp/vc/pcvs-util.el | 2 +- lisp/vc/pcvs.el | 2 +- lisp/vc/smerge-mode.el | 2 +- lisp/vc/vc-annotate.el | 2 +- lisp/vc/vc-bzr.el | 2 +- lisp/vc/vc-cvs.el | 2 +- lisp/vc/vc-dav.el | 2 +- lisp/vc/vc-dir.el | 2 +- lisp/vc/vc-dispatcher.el | 2 +- lisp/vc/vc-filewise.el | 2 +- lisp/vc/vc-git.el | 2 +- lisp/vc/vc-hg.el | 2 +- lisp/vc/vc-hooks.el | 2 +- lisp/vc/vc-mtn.el | 2 +- lisp/vc/vc-rcs.el | 2 +- lisp/vc/vc-sccs.el | 2 +- lisp/vc/vc-src.el | 2 +- lisp/vc/vc-svn.el | 2 +- lisp/vc/vc.el | 2 +- lisp/vcursor.el | 2 +- lisp/version.el | 2 +- lisp/view.el | 2 +- lisp/vt-control.el | 2 +- lisp/vt100-led.el | 2 +- lisp/w32-fns.el | 2 +- lisp/w32-vars.el | 2 +- lisp/wdired.el | 2 +- lisp/whitespace.el | 2 +- lisp/wid-browse.el | 2 +- lisp/wid-edit.el | 2 +- lisp/widget.el | 2 +- lisp/windmove.el | 2 +- lisp/window.el | 2 +- lisp/winner.el | 2 +- lisp/woman.el | 2 +- lisp/x-dnd.el | 2 +- lisp/xdg.el | 2 +- lisp/xml.el | 2 +- lisp/xt-mouse.el | 2 +- lisp/xwidget.el | 2 +- lwlib/ChangeLog.1 | 2 +- lwlib/Makefile.in | 2 +- lwlib/deps.mk | 2 +- lwlib/lwlib-Xaw.c | 2 +- lwlib/lwlib-Xlw.c | 2 +- lwlib/lwlib-Xm.c | 2 +- lwlib/lwlib-int.h | 2 +- lwlib/lwlib-utils.c | 2 +- lwlib/lwlib-widget.h | 2 +- lwlib/lwlib.c | 2 +- lwlib/lwlib.h | 2 +- lwlib/xlwmenu.c | 2 +- lwlib/xlwmenu.h | 2 +- lwlib/xlwmenuP.h | 2 +- m4/00gnulib.m4 | 2 +- m4/__inline.m4 | 2 +- m4/absolute-header.m4 | 2 +- m4/acl.m4 | 2 +- m4/alloca.m4 | 2 +- m4/builtin-expect.m4 | 2 +- m4/byteswap.m4 | 2 +- m4/canonicalize.m4 | 2 +- m4/clock_time.m4 | 2 +- m4/close-stream.m4 | 2 +- m4/copy-file-range.m4 | 2 +- m4/count-leading-zeros.m4 | 2 +- m4/count-one-bits.m4 | 2 +- m4/count-trailing-zeros.m4 | 2 +- m4/d-type.m4 | 2 +- m4/dirent_h.m4 | 2 +- m4/dirfd.m4 | 2 +- m4/double-slash-root.m4 | 2 +- m4/dup2.m4 | 2 +- m4/eealloc.m4 | 2 +- m4/environ.m4 | 2 +- m4/errno_h.m4 | 2 +- m4/euidaccess.m4 | 2 +- m4/execinfo.m4 | 2 +- m4/explicit_bzero.m4 | 2 +- m4/extensions.m4 | 2 +- m4/extern-inline.m4 | 2 +- m4/faccessat.m4 | 2 +- m4/fcntl.m4 | 2 +- m4/fcntl_h.m4 | 2 +- m4/fdopendir.m4 | 2 +- m4/filemode.m4 | 2 +- m4/flexmember.m4 | 2 +- m4/fpending.m4 | 2 +- m4/fpieee.m4 | 2 +- m4/fstatat.m4 | 2 +- m4/fsusage.m4 | 2 +- m4/fsync.m4 | 2 +- m4/getdtablesize.m4 | 2 +- m4/getgroups.m4 | 2 +- m4/getloadavg.m4 | 2 +- m4/getopt.m4 | 2 +- m4/gettime.m4 | 2 +- m4/gettimeofday.m4 | 2 +- m4/glibc21.m4 | 2 +- m4/gnulib-common.m4 | 2 +- m4/gnulib-comp.m4 | 2 +- m4/group-member.m4 | 2 +- m4/ieee754-h.m4 | 2 +- m4/include_next.m4 | 2 +- m4/inttypes.m4 | 2 +- m4/largefile.m4 | 2 +- m4/limits-h.m4 | 2 +- m4/localtime-buffer.m4 | 2 +- m4/longlong.m4 | 2 +- m4/lstat.m4 | 2 +- m4/malloca.m4 | 2 +- m4/manywarnings.m4 | 2 +- m4/mbstate_t.m4 | 2 +- m4/md5.m4 | 2 +- m4/memmem.m4 | 2 +- m4/mempcpy.m4 | 2 +- m4/memrchr.m4 | 2 +- m4/minmax.m4 | 2 +- m4/mkostemp.m4 | 2 +- m4/mktime.m4 | 2 +- m4/mode_t.m4 | 2 +- m4/multiarch.m4 | 2 +- m4/nocrash.m4 | 2 +- m4/nstrftime.m4 | 2 +- m4/off_t.m4 | 2 +- m4/open-cloexec.m4 | 2 +- m4/open-slash.m4 | 2 +- m4/open.m4 | 2 +- m4/pathmax.m4 | 2 +- m4/pipe2.m4 | 2 +- m4/pselect.m4 | 2 +- m4/pthread_sigmask.m4 | 2 +- m4/putenv.m4 | 2 +- m4/readlink.m4 | 2 +- m4/readlinkat.m4 | 2 +- m4/regex.m4 | 2 +- m4/sha1.m4 | 2 +- m4/sha256.m4 | 2 +- m4/sha512.m4 | 2 +- m4/sig2str.m4 | 2 +- m4/signal_h.m4 | 2 +- m4/socklen.m4 | 2 +- m4/ssize_t.m4 | 2 +- m4/st_dm_mode.m4 | 2 +- m4/stat-time.m4 | 2 +- m4/std-gnu11.m4 | 2 +- m4/stdalign.m4 | 2 +- m4/stddef_h.m4 | 2 +- m4/stdint.m4 | 2 +- m4/stdio_h.m4 | 2 +- m4/stdlib_h.m4 | 2 +- m4/stpcpy.m4 | 2 +- m4/string_h.m4 | 2 +- m4/strnlen.m4 | 2 +- m4/strtoimax.m4 | 2 +- m4/strtoll.m4 | 2 +- m4/symlink.m4 | 2 +- m4/sys_select_h.m4 | 2 +- m4/sys_socket_h.m4 | 2 +- m4/sys_stat_h.m4 | 2 +- m4/sys_time_h.m4 | 2 +- m4/sys_types_h.m4 | 2 +- m4/tempname.m4 | 2 +- m4/time_h.m4 | 2 +- m4/time_r.m4 | 2 +- m4/time_rz.m4 | 2 +- m4/timegm.m4 | 2 +- m4/timer_time.m4 | 2 +- m4/timespec.m4 | 2 +- m4/tm_gmtoff.m4 | 2 +- m4/unistd_h.m4 | 2 +- m4/unlocked-io.m4 | 2 +- m4/utimens.m4 | 2 +- m4/utimes.m4 | 2 +- m4/vararrays.m4 | 2 +- m4/warnings.m4 | 2 +- m4/wchar_t.m4 | 2 +- make-dist | 2 +- modules/modhelp.py | 2 +- msdos/ChangeLog.1 | 2 +- msdos/INSTALL | 2 +- msdos/README | 2 +- msdos/autogen/Makefile.in | 2 +- msdos/autogen/config.in | 2 +- msdos/inttypes.h | 2 +- msdos/mainmake.v2 | 2 +- msdos/sed1v2.inp | 2 +- msdos/sed1x.inp | 2 +- msdos/sed2v2.inp | 2 +- msdos/sed2x.inp | 2 +- msdos/sed3v2.inp | 2 +- msdos/sed4.inp | 2 +- msdos/sed5x.inp | 2 +- msdos/sed6.inp | 2 +- msdos/sedadmin.inp | 2 +- msdos/sedalloc.inp | 2 +- msdos/sedleim.inp | 2 +- msdos/sedlibcf.inp | 2 +- msdos/sedlibmk.inp | 2 +- msdos/sedlisp.inp | 2 +- nextstep/ChangeLog.1 | 2 +- nextstep/INSTALL | 2 +- nextstep/Makefile.in | 2 +- nextstep/README | 2 +- nextstep/templates/Info.plist.in | 2 +- nt/ChangeLog.1 | 2 +- nt/INSTALL | 2 +- nt/INSTALL.W64 | 2 +- nt/Makefile.in | 2 +- nt/README | 2 +- nt/README.W32 | 2 +- nt/addpm.c | 2 +- nt/cmdproxy.c | 2 +- nt/ddeclient.c | 2 +- nt/epaths.nt | 2 +- nt/gnulib-cfg.mk | 2 +- nt/icons/README | 2 +- nt/inc/grp.h | 2 +- nt/inc/inttypes.h | 2 +- nt/inc/langinfo.h | 2 +- nt/inc/ms-w32.h | 2 +- nt/inc/nl_types.h | 2 +- nt/inc/stdint.h | 2 +- nt/inc/sys/resource.h | 2 +- nt/inc/sys/socket.h | 2 +- nt/inc/sys/stat.h | 2 +- nt/inc/sys/wait.h | 2 +- nt/preprep.c | 2 +- nt/runemacs.c | 2 +- oldXMenu/Activate.c | 2 +- oldXMenu/ChangeLog.1 | 2 +- oldXMenu/Create.c | 2 +- oldXMenu/FindSel.c | 2 +- oldXMenu/Internal.c | 2 +- oldXMenu/Makefile.in | 2 +- oldXMenu/deps.mk | 2 +- oldXMenu/insque.c | 2 +- src/.gdbinit | 2 +- src/ChangeLog.1 | 2 +- src/ChangeLog.10 | 2 +- src/ChangeLog.11 | 2 +- src/ChangeLog.12 | 2 +- src/ChangeLog.13 | 2 +- src/ChangeLog.2 | 2 +- src/ChangeLog.3 | 2 +- src/ChangeLog.4 | 2 +- src/ChangeLog.5 | 2 +- src/ChangeLog.6 | 2 +- src/ChangeLog.7 | 2 +- src/ChangeLog.8 | 2 +- src/ChangeLog.9 | 2 +- src/Makefile.in | 2 +- src/README | 2 +- src/alloc.c | 2 +- src/atimer.c | 2 +- src/atimer.h | 2 +- src/bidi.c | 2 +- src/bignum.c | 2 +- src/bignum.h | 2 +- src/blockinput.h | 2 +- src/buffer.c | 2 +- src/buffer.h | 2 +- src/bytecode.c | 2 +- src/callint.c | 2 +- src/callproc.c | 2 +- src/casefiddle.c | 2 +- src/casetab.c | 2 +- src/category.c | 2 +- src/ccl.c | 2 +- src/character.c | 2 +- src/charset.c | 2 +- src/charset.h | 2 +- src/cm.c | 2 +- src/cm.h | 2 +- src/cmds.c | 2 +- src/coding.c | 2 +- src/coding.h | 2 +- src/commands.h | 2 +- src/composite.c | 2 +- src/composite.h | 2 +- src/conf_post.h | 2 +- src/cygw32.c | 2 +- src/cygw32.h | 2 +- src/data.c | 2 +- src/dbusbind.c | 2 +- src/decompress.c | 2 +- src/deps.mk | 2 +- src/dired.c | 2 +- src/dispextern.h | 2 +- src/dispnew.c | 2 +- src/disptab.h | 2 +- src/dmpstruct.awk | 2 +- src/doc.c | 2 +- src/doprnt.c | 2 +- src/dosfns.c | 2 +- src/dosfns.h | 2 +- src/dynlib.c | 2 +- src/dynlib.h | 2 +- src/editfns.c | 2 +- src/emacs-icon.h | 2 +- src/emacs-module.c | 2 +- src/emacs-module.h.in | 2 +- src/emacs.c | 2 +- src/emacsgtkfixed.c | 2 +- src/emacsgtkfixed.h | 2 +- src/epaths.in | 2 +- src/eval.c | 2 +- src/fileio.c | 2 +- src/filelock.c | 2 +- src/firstfile.c | 2 +- src/floatfns.c | 2 +- src/fns.c | 2 +- src/font.c | 2 +- src/font.h | 2 +- src/fontset.c | 2 +- src/fontset.h | 2 +- src/frame.c | 2 +- src/frame.h | 2 +- src/fringe.c | 2 +- src/ftcrfont.c | 2 +- src/ftfont.c | 2 +- src/ftxfont.c | 2 +- src/getpagesize.h | 2 +- src/gfilenotify.c | 2 +- src/gmalloc.c | 2 +- src/gnutls.c | 2 +- src/gnutls.h | 2 +- src/gtkutil.c | 2 +- src/gtkutil.h | 2 +- src/hbfont.c | 2 +- src/image.c | 2 +- src/indent.c | 2 +- src/indent.h | 2 +- src/inotify.c | 2 +- src/insdel.c | 2 +- src/intervals.c | 2 +- src/intervals.h | 2 +- src/json.c | 2 +- src/keyboard.c | 2 +- src/keyboard.h | 2 +- src/keymap.c | 2 +- src/keymap.h | 2 +- src/kqueue.c | 2 +- src/lastfile.c | 2 +- src/lcms.c | 2 +- src/lisp.h | 2 +- src/lread.c | 2 +- src/macfont.h | 2 +- src/macfont.m | 2 +- src/macros.c | 2 +- src/macros.h | 2 +- src/marker.c | 2 +- src/menu.c | 2 +- src/menu.h | 2 +- src/mini-gmp-emacs.c | 2 +- src/minibuf.c | 2 +- src/msdos.c | 2 +- src/msdos.h | 2 +- src/nsfns.m | 2 +- src/nsfont.m | 2 +- src/nsgui.h | 2 +- src/nsimage.m | 2 +- src/nsmenu.m | 2 +- src/nsselect.m | 2 +- src/nsterm.h | 2 +- src/nsterm.m | 2 +- src/pdumper.c | 2 +- src/pdumper.h | 2 +- src/print.c | 2 +- src/process.c | 2 +- src/process.h | 2 +- src/profiler.c | 2 +- src/ptr-bounds.h | 2 +- src/puresize.h | 2 +- src/ralloc.c | 2 +- src/regex-emacs.c | 2 +- src/regex-emacs.h | 2 +- src/region-cache.c | 2 +- src/region-cache.h | 2 +- src/scroll.c | 2 +- src/search.c | 2 +- src/sheap.c | 2 +- src/sheap.h | 2 +- src/sound.c | 2 +- src/syntax.c | 2 +- src/syntax.h | 2 +- src/sysdep.c | 2 +- src/sysselect.h | 2 +- src/syssignal.h | 2 +- src/sysstdio.h | 2 +- src/systhread.c | 2 +- src/systhread.h | 2 +- src/systime.h | 2 +- src/systty.h | 2 +- src/syswait.h | 2 +- src/term.c | 2 +- src/termcap.c | 2 +- src/termchar.h | 2 +- src/termhooks.h | 2 +- src/terminal.c | 2 +- src/terminfo.c | 2 +- src/termopts.h | 2 +- src/textprop.c | 2 +- src/thread.c | 2 +- src/thread.h | 2 +- src/timefns.c | 2 +- src/tparam.c | 2 +- src/tparam.h | 2 +- src/undo.c | 2 +- src/unexaix.c | 2 +- src/unexcoff.c | 2 +- src/unexcw.c | 2 +- src/unexelf.c | 2 +- src/unexmacosx.c | 2 +- src/unexw32.c | 2 +- src/vm-limit.c | 2 +- src/w16select.c | 2 +- src/w32.c | 2 +- src/w32.h | 2 +- src/w32common.h | 2 +- src/w32console.c | 2 +- src/w32cygwinx.c | 2 +- src/w32fns.c | 2 +- src/w32font.c | 2 +- src/w32font.h | 2 +- src/w32gui.h | 2 +- src/w32heap.c | 2 +- src/w32heap.h | 2 +- src/w32inevt.c | 2 +- src/w32inevt.h | 2 +- src/w32menu.c | 2 +- src/w32notify.c | 2 +- src/w32proc.c | 2 +- src/w32reg.c | 2 +- src/w32select.c | 2 +- src/w32select.h | 2 +- src/w32term.c | 2 +- src/w32term.h | 2 +- src/w32uniscribe.c | 2 +- src/w32xfns.c | 2 +- src/widget.c | 2 +- src/widget.h | 2 +- src/widgetprv.h | 2 +- src/window.c | 2 +- src/window.h | 2 +- src/xdisp.c | 2 +- src/xfaces.c | 2 +- src/xfns.c | 2 +- src/xfont.c | 2 +- src/xftfont.c | 2 +- src/xgselect.c | 2 +- src/xgselect.h | 2 +- src/xmenu.c | 2 +- src/xml.c | 2 +- src/xrdb.c | 2 +- src/xselect.c | 2 +- src/xsettings.c | 2 +- src/xsettings.h | 2 +- src/xsmfns.c | 2 +- src/xterm.c | 2 +- src/xterm.h | 2 +- src/xwidget.c | 2 +- src/xwidget.h | 2 +- test/ChangeLog.1 | 2 +- test/Makefile.in | 2 +- test/README | 2 +- test/data/emacs-module/mod-test.c | 2 +- test/data/themes/faces-test-dark-theme.el | 2 +- test/data/themes/faces-test-light-theme.el | 2 +- test/lib-src/emacsclient-tests.el | 2 +- test/lisp/abbrev-tests.el | 2 +- test/lisp/arc-mode-tests.el | 2 +- test/lisp/auth-source-pass-tests.el | 2 +- test/lisp/auth-source-tests.el | 2 +- test/lisp/autoinsert-tests.el | 2 +- test/lisp/autorevert-tests.el | 2 +- test/lisp/battery-tests.el | 2 +- test/lisp/bookmark-tests.el | 2 +- test/lisp/buff-menu-tests.el | 2 +- test/lisp/button-tests.el | 2 +- test/lisp/calc/calc-tests.el | 2 +- test/lisp/calendar/icalendar-tests.el | 2 +- test/lisp/calendar/iso8601-tests.el | 2 +- test/lisp/calendar/parse-time-tests.el | 2 +- test/lisp/calendar/time-date-tests.el | 2 +- test/lisp/calendar/todo-mode-tests.el | 2 +- test/lisp/cedet/semantic-utest-c.el | 2 +- test/lisp/cedet/semantic-utest-fmt.el | 2 +- test/lisp/cedet/semantic-utest-ia.el | 2 +- test/lisp/cedet/semantic-utest.el | 2 +- test/lisp/cedet/srecode-utest-template.el | 2 +- test/lisp/char-fold-tests.el | 2 +- test/lisp/color-tests.el | 2 +- test/lisp/comint-tests.el | 2 +- test/lisp/custom-tests.el | 2 +- test/lisp/dabbrev-tests.el | 2 +- test/lisp/delim-col-tests.el | 2 +- test/lisp/descr-text-tests.el | 2 +- test/lisp/dired-aux-tests.el | 2 +- test/lisp/dired-tests.el | 2 +- test/lisp/dired-x-tests.el | 2 +- test/lisp/dom-tests.el | 2 +- test/lisp/electric-tests.el | 2 +- test/lisp/emacs-lisp/backquote-tests.el | 2 +- test/lisp/emacs-lisp/backtrace-tests.el | 2 +- test/lisp/emacs-lisp/benchmark-tests.el | 2 +- test/lisp/emacs-lisp/bindat-tests.el | 2 +- test/lisp/emacs-lisp/bytecomp-tests.el | 2 +- test/lisp/emacs-lisp/cconv-tests.el | 2 +- test/lisp/emacs-lisp/checkdoc-tests.el | 2 +- test/lisp/emacs-lisp/cl-extra-tests.el | 2 +- test/lisp/emacs-lisp/cl-generic-tests.el | 2 +- test/lisp/emacs-lisp/cl-lib-tests.el | 2 +- test/lisp/emacs-lisp/cl-macs-tests.el | 2 +- test/lisp/emacs-lisp/cl-preloaded-tests.el | 2 +- test/lisp/emacs-lisp/cl-print-tests.el | 2 +- test/lisp/emacs-lisp/cl-seq-tests.el | 2 +- test/lisp/emacs-lisp/derived-tests.el | 2 +- test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el | 2 +- test/lisp/emacs-lisp/edebug-tests.el | 2 +- test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el | 2 +- test/lisp/emacs-lisp/eieio-tests/eieio-test-persist.el | 2 +- test/lisp/emacs-lisp/eieio-tests/eieio-tests.el | 2 +- test/lisp/emacs-lisp/ert-tests.el | 2 +- test/lisp/emacs-lisp/ert-x-tests.el | 2 +- test/lisp/emacs-lisp/faceup-resources/faceup-test-mode.el | 2 +- .../faceup-resources/faceup-test-this-file-directory.el | 2 +- test/lisp/emacs-lisp/faceup-tests/faceup-test-basics.el | 2 +- test/lisp/emacs-lisp/faceup-tests/faceup-test-files.el | 2 +- test/lisp/emacs-lisp/generator-tests.el | 2 +- test/lisp/emacs-lisp/gv-tests.el | 2 +- test/lisp/emacs-lisp/let-alist-tests.el | 2 +- test/lisp/emacs-lisp/lisp-mode-tests.el | 2 +- test/lisp/emacs-lisp/lisp-tests.el | 2 +- test/lisp/emacs-lisp/map-tests.el | 2 +- test/lisp/emacs-lisp/nadvice-tests.el | 2 +- test/lisp/emacs-lisp/package-tests.el | 2 +- test/lisp/emacs-lisp/pcase-tests.el | 2 +- test/lisp/emacs-lisp/pp-tests.el | 2 +- test/lisp/emacs-lisp/regexp-opt-tests.el | 2 +- test/lisp/emacs-lisp/ring-tests.el | 2 +- test/lisp/emacs-lisp/rmc-tests.el | 2 +- test/lisp/emacs-lisp/rx-tests.el | 2 +- test/lisp/emacs-lisp/seq-tests.el | 2 +- test/lisp/emacs-lisp/shadow-tests.el | 2 +- test/lisp/emacs-lisp/subr-x-tests.el | 2 +- test/lisp/emacs-lisp/tabulated-list-test.el | 2 +- test/lisp/emacs-lisp/testcover-resources/testcases.el | 2 +- test/lisp/emacs-lisp/testcover-tests.el | 2 +- test/lisp/emacs-lisp/text-property-search-tests.el | 2 +- test/lisp/emacs-lisp/thunk-tests.el | 2 +- test/lisp/emacs-lisp/timer-tests.el | 2 +- test/lisp/emulation/viper-tests.el | 2 +- test/lisp/epg-tests.el | 2 +- test/lisp/erc/erc-track-tests.el | 2 +- test/lisp/eshell/em-hist-tests.el | 2 +- test/lisp/eshell/em-ls-tests.el | 2 +- test/lisp/eshell/esh-opt-tests.el | 2 +- test/lisp/eshell/eshell-tests.el | 2 +- test/lisp/faces-tests.el | 2 +- test/lisp/ffap-tests.el | 2 +- test/lisp/filenotify-tests.el | 2 +- test/lisp/files-tests.el | 2 +- test/lisp/files-x-tests.el | 2 +- test/lisp/font-lock-tests.el | 2 +- test/lisp/format-spec-tests.el | 2 +- test/lisp/gnus/gnus-test-headers.el | 2 +- test/lisp/gnus/gnus-tests.el | 2 +- test/lisp/gnus/message-tests.el | 2 +- test/lisp/gnus/nnrss-tests.el | 2 +- test/lisp/help-fns-tests.el | 2 +- test/lisp/help-tests.el | 2 +- test/lisp/hi-lock-tests.el | 2 +- test/lisp/htmlfontify-tests.el | 2 +- test/lisp/ibuffer-tests.el | 2 +- test/lisp/ido-tests.el | 2 +- test/lisp/image-file-tests.el | 2 +- test/lisp/image-tests.el | 2 +- test/lisp/image/exif-tests.el | 2 +- test/lisp/image/gravatar-tests.el | 2 +- test/lisp/imenu-tests.el | 2 +- test/lisp/info-xref-tests.el | 2 +- test/lisp/international/ccl-tests.el | 2 +- test/lisp/international/mule-tests.el | 2 +- test/lisp/international/mule-util-tests.el | 2 +- test/lisp/international/ucs-normalize-tests.el | 2 +- test/lisp/isearch-tests.el | 2 +- test/lisp/jit-lock-tests.el | 2 +- test/lisp/json-tests.el | 2 +- test/lisp/jsonrpc-tests.el | 2 +- test/lisp/kmacro-tests.el | 2 +- test/lisp/ls-lisp-tests.el | 2 +- test/lisp/mail/flow-fill-tests.el | 2 +- test/lisp/mail/footnote-tests.el | 2 +- test/lisp/mail/rfc2047-tests.el | 2 +- test/lisp/mail/rmail-tests.el | 2 +- test/lisp/mail/uudecode-tests.el | 2 +- test/lisp/makesum-tests.el | 2 +- test/lisp/man-tests.el | 2 +- test/lisp/md4-tests.el | 2 +- test/lisp/minibuffer-tests.el | 2 +- test/lisp/mouse-tests.el | 2 +- test/lisp/net/dbus-tests.el | 2 +- test/lisp/net/gnutls-tests.el | 2 +- test/lisp/net/mailcap-tests.el | 2 +- test/lisp/net/network-stream-tests.el | 2 +- test/lisp/net/newsticker-tests.el | 2 +- test/lisp/net/nsm-tests.el | 2 +- test/lisp/net/puny-tests.el | 2 +- test/lisp/net/rcirc-tests.el | 2 +- test/lisp/net/rfc2104-tests.el | 2 +- test/lisp/net/sasl-scram-rfc-tests.el | 2 +- test/lisp/net/secrets-tests.el | 2 +- test/lisp/net/shr-tests.el | 2 +- test/lisp/net/tramp-archive-tests.el | 2 +- test/lisp/net/tramp-tests.el | 2 +- test/lisp/nxml/nxml-mode-tests.el | 2 +- test/lisp/obarray-tests.el | 2 +- test/lisp/obsolete/cl-tests.el | 2 +- test/lisp/org/org-tests.el | 2 +- test/lisp/paren-tests.el | 2 +- test/lisp/password-cache-tests.el | 2 +- test/lisp/play/morse-tests.el | 2 +- test/lisp/play/studly-tests.el | 2 +- test/lisp/progmodes/asm-mode-tests.el | 2 +- test/lisp/progmodes/bat-mode-tests.el | 2 +- test/lisp/progmodes/cc-mode-tests.el | 2 +- test/lisp/progmodes/compile-tests.el | 2 +- test/lisp/progmodes/elisp-mode-tests.el | 2 +- test/lisp/progmodes/etags-tests.el | 2 +- test/lisp/progmodes/f90-tests.el | 2 +- test/lisp/progmodes/flymake-tests.el | 2 +- test/lisp/progmodes/js-tests.el | 2 +- test/lisp/progmodes/ps-mode-tests.el | 2 +- test/lisp/progmodes/python-tests.el | 2 +- test/lisp/progmodes/ruby-mode-tests.el | 2 +- test/lisp/progmodes/sql-tests.el | 2 +- test/lisp/progmodes/subword-tests.el | 2 +- test/lisp/progmodes/tcl-tests.el | 2 +- test/lisp/progmodes/xref-tests.el | 2 +- test/lisp/ps-print-tests.el | 2 +- test/lisp/register-tests.el | 2 +- test/lisp/replace-tests.el | 2 +- test/lisp/rot13-tests.el | 2 +- test/lisp/scroll-lock-tests.el | 2 +- test/lisp/ses-tests.el | 2 +- test/lisp/shadowfile-tests.el | 2 +- test/lisp/shell-tests.el | 2 +- test/lisp/simple-tests.el | 2 +- test/lisp/so-long-tests/autoload-longlines-mode-tests.el | 2 +- test/lisp/so-long-tests/autoload-major-mode-tests.el | 2 +- test/lisp/so-long-tests/autoload-minor-mode-tests.el | 2 +- test/lisp/so-long-tests/so-long-tests-helpers.el | 2 +- test/lisp/so-long-tests/so-long-tests.el | 2 +- test/lisp/so-long-tests/spelling-tests.el | 2 +- test/lisp/sort-tests.el | 2 +- test/lisp/soundex-tests.el | 2 +- test/lisp/startup-tests.el | 2 +- test/lisp/subr-tests.el | 2 +- test/lisp/tabify-tests.el | 2 +- test/lisp/tar-mode-tests.el | 2 +- test/lisp/tempo-tests.el | 2 +- test/lisp/term-tests.el | 2 +- test/lisp/term/tty-colors-tests.el | 2 +- test/lisp/textmodes/conf-mode-tests.el | 2 +- test/lisp/textmodes/css-mode-tests.el | 2 +- test/lisp/textmodes/dns-mode-tests.el | 2 +- test/lisp/textmodes/fill-tests.el | 2 +- test/lisp/textmodes/mhtml-mode-tests.el | 2 +- test/lisp/textmodes/page-tests.el | 2 +- test/lisp/textmodes/paragraphs-tests.el | 2 +- test/lisp/textmodes/reftex-tests.el | 2 +- test/lisp/textmodes/sgml-mode-tests.el | 2 +- test/lisp/textmodes/tildify-tests.el | 2 +- test/lisp/textmodes/underline-tests.el | 2 +- test/lisp/thingatpt-tests.el | 2 +- test/lisp/thread-tests.el | 2 +- test/lisp/time-stamp-tests.el | 2 +- test/lisp/timezone-tests.el | 2 +- test/lisp/url/url-auth-tests.el | 2 +- test/lisp/url/url-expand-tests.el | 2 +- test/lisp/url/url-file-tests.el | 2 +- test/lisp/url/url-future-tests.el | 2 +- test/lisp/url/url-handlers-test.el | 2 +- test/lisp/url/url-misc-tests.el | 2 +- test/lisp/url/url-parse-tests.el | 2 +- test/lisp/url/url-tramp-tests.el | 2 +- test/lisp/url/url-util-tests.el | 2 +- test/lisp/vc/add-log-tests.el | 2 +- test/lisp/vc/diff-mode-tests.el | 2 +- test/lisp/vc/ediff-diff-tests.el | 2 +- test/lisp/vc/ediff-ptch-tests.el | 2 +- test/lisp/vc/log-edit-tests.el | 2 +- test/lisp/vc/smerge-mode-tests.el | 2 +- test/lisp/vc/vc-bzr-tests.el | 2 +- test/lisp/vc/vc-hg-tests.el | 2 +- test/lisp/vc/vc-tests.el | 2 +- test/lisp/wdired-tests.el | 2 +- test/lisp/whitespace-tests.el | 2 +- test/lisp/wid-edit-tests.el | 2 +- test/lisp/xdg-tests.el | 2 +- test/lisp/xml-tests.el | 2 +- test/lisp/xt-mouse-tests.el | 2 +- test/manual/biditest.el | 2 +- test/manual/cedet/cedet-utests.el | 2 +- test/manual/cedet/ede-tests.el | 2 +- test/manual/cedet/semantic-tests.el | 2 +- test/manual/cedet/srecode-tests.el | 2 +- test/manual/cedet/tests/test-fmt.el | 2 +- test/manual/cedet/tests/test.c | 2 +- test/manual/cedet/tests/test.el | 2 +- test/manual/cedet/tests/test.make | 2 +- test/manual/cedet/tests/test.srt | 2 +- test/manual/cedet/tests/testdoublens.cpp | 2 +- test/manual/cedet/tests/testdoublens.hpp | 2 +- test/manual/cedet/tests/testjavacomp.java | 2 +- test/manual/cedet/tests/testlocalvars.cpp | 2 +- test/manual/cedet/tests/testnsp.cpp | 2 +- test/manual/cedet/tests/testpolymorph.cpp | 2 +- test/manual/cedet/tests/testspp.c | 2 +- test/manual/cedet/tests/testsppcomplete.c | 2 +- test/manual/cedet/tests/testsppreplace.c | 2 +- test/manual/cedet/tests/testsppreplaced.c | 2 +- test/manual/cedet/tests/teststruct.cpp | 2 +- test/manual/cedet/tests/testsubclass.cpp | 2 +- test/manual/cedet/tests/testsubclass.hh | 2 +- test/manual/cedet/tests/testtemplates.cpp | 2 +- test/manual/cedet/tests/testtypedefs.cpp | 2 +- test/manual/cedet/tests/testusing.cpp | 2 +- test/manual/cedet/tests/testusing.hh | 2 +- test/manual/cedet/tests/testvarnames.c | 2 +- test/manual/cedet/tests/testvarnames.java | 2 +- test/manual/cedet/tests/testwisent.wy | 2 +- test/manual/etags/c-src/abbrev.c | 2 +- test/manual/etags/c-src/emacs/src/gmalloc.c | 2 +- test/manual/etags/c-src/emacs/src/keyboard.c | 2 +- test/manual/etags/c-src/emacs/src/lisp.h | 2 +- test/manual/etags/c-src/emacs/src/regex.h | 2 +- test/manual/etags/c-src/etags.c | 2 +- test/manual/etags/c-src/exit.c | 2 +- test/manual/etags/c-src/exit.strange_suffix | 2 +- test/manual/etags/c-src/getopt.h | 2 +- test/manual/etags/c-src/sysdep.h | 2 +- test/manual/etags/el-src/emacs/lisp/progmodes/etags.el | 2 +- test/manual/etags/tex-src/texinfo.tex | 2 +- test/manual/etags/y-src/cccp.c | 2 +- test/manual/etags/y-src/parse.c | 2 +- test/manual/etags/y-src/parse.y | 2 +- test/manual/image-size-tests.el | 2 +- test/manual/image-transforms-tests.el | 2 +- test/manual/indent/pascal.pas | 2 +- test/manual/redisplay-testsuite.el | 2 +- test/manual/rmailmm.el | 2 +- test/manual/scroll-tests.el | 2 +- test/src/alloc-tests.el | 2 +- test/src/buffer-tests.el | 2 +- test/src/callint-tests.el | 2 +- test/src/callproc-tests.el | 2 +- test/src/casefiddle-tests.el | 2 +- test/src/charset-tests.el | 2 +- test/src/chartab-tests.el | 2 +- test/src/cmds-tests.el | 2 +- test/src/coding-tests.el | 2 +- test/src/data-tests.el | 2 +- test/src/decompress-tests.el | 2 +- test/src/doc-tests.el | 2 +- test/src/editfns-tests.el | 2 +- test/src/emacs-module-tests.el | 2 +- test/src/eval-tests.el | 2 +- test/src/fileio-tests.el | 2 +- test/src/floatfns-tests.el | 2 +- test/src/fns-tests.el | 2 +- test/src/font-tests.el | 2 +- test/src/inotify-tests.el | 2 +- test/src/json-tests.el | 2 +- test/src/keyboard-tests.el | 2 +- test/src/keymap-tests.el | 2 +- test/src/lcms-tests.el | 2 +- test/src/lread-tests.el | 2 +- test/src/marker-tests.el | 2 +- test/src/minibuf-tests.el | 2 +- test/src/print-tests.el | 2 +- test/src/process-tests.el | 2 +- test/src/regex-emacs-tests.el | 2 +- test/src/syntax-tests.el | 2 +- test/src/textprop-tests.el | 2 +- test/src/thread-tests.el | 2 +- test/src/timefns-tests.el | 2 +- test/src/undo-tests.el | 2 +- test/src/xml-tests.el | 2 +- 2798 files changed, 2798 insertions(+), 2798 deletions(-) diff --git a/.gitattributes b/.gitattributes index 00f434da7ce..a99cf12af5e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,6 +1,6 @@ # Attributes of Emacs files in the Git repository. -# Copyright 2015-2020 Free Software Foundation, Inc. +# Copyright 2015-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/.gitignore b/.gitignore index 1271dec0df7..4f4f57b65d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # Files that Git should ignore in the Emacs source directory. -# Copyright 2009-2020 Free Software Foundation, Inc. +# Copyright 2009-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9a62137c168..fcc179c1fb1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2017-2020 Free Software Foundation, Inc. +# Copyright (C) 2017-2021 Free Software Foundation, Inc. # # This file is part of GNU Emacs. # diff --git a/ChangeLog.1 b/ChangeLog.1 index 08343f0fd41..a0d570c56fd 100644 --- a/ChangeLog.1 +++ b/ChangeLog.1 @@ -14700,7 +14700,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 1993-1999, 2001-2020 Free Software Foundation, Inc. + Copyright (C) 1993-1999, 2001-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/ChangeLog.2 b/ChangeLog.2 index 9e875c561db..cad0e966518 100644 --- a/ChangeLog.2 +++ b/ChangeLog.2 @@ -35787,7 +35787,7 @@ See ChangeLog.1 for earlier changes. ;; coding: utf-8 ;; End: - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/ChangeLog.3 b/ChangeLog.3 index 0ce1e18b59b..10c2e2d4896 100644 --- a/ChangeLog.3 +++ b/ChangeLog.3 @@ -144125,7 +144125,7 @@ See ChangeLog.2 for earlier changes. ;; coding: utf-8 ;; End: - Copyright (C) 2015-2020 Free Software Foundation, Inc. + Copyright (C) 2015-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/GNUmakefile b/GNUmakefile index c6407d04918..f27163840b7 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -1,6 +1,6 @@ # Build Emacs from a fresh tarball or version-control checkout. -# Copyright (C) 2011-2020 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This file is part of GNU Emacs. # diff --git a/INSTALL b/INSTALL index 8eb5ee2869b..5ecfa508895 100644 --- a/INSTALL +++ b/INSTALL @@ -1,5 +1,5 @@ GNU Emacs Installation Guide -Copyright (C) 1992, 1994, 1996-1997, 2000-2020 Free Software Foundation, +Copyright (C) 1992, 1994, 1996-1997, 2000-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/INSTALL.REPO b/INSTALL.REPO index da0c220c2bd..da56d7611b2 100644 --- a/INSTALL.REPO +++ b/INSTALL.REPO @@ -83,7 +83,7 @@ never platform-specific. -Copyright (C) 2002-2020 Free Software Foundation, Inc. +Copyright (C) 2002-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/Makefile.in b/Makefile.in index 67e15cfecd2..3947987a8a5 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,6 +1,6 @@ ### @configure_input@ -# Copyright (C) 1992-2020 Free Software Foundation, Inc. +# Copyright (C) 1992-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/README b/README index 8f7649ca842..7c4c75cf0ab 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/admin/ChangeLog.1 b/admin/ChangeLog.1 index 3cbc9ebbd44..0b87495fab2 100644 --- a/admin/ChangeLog.1 +++ b/admin/ChangeLog.1 @@ -2577,7 +2577,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/admin/README b/admin/README index 67f51a34133..312f09839ea 100644 --- a/admin/README +++ b/admin/README @@ -1,4 +1,4 @@ -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/admin/admin.el b/admin/admin.el index 22d29673fb5..fa96b7e5cac 100644 --- a/admin/admin.el +++ b/admin/admin.el @@ -1,6 +1,6 @@ ;;; admin.el --- utilities for Emacs administration -;; Copyright (C) 2001-2020 Free Software Foundation, Inc. +;; Copyright (C) 2001-2021 Free Software Foundation, Inc. ;; This file is part of GNU Emacs. diff --git a/admin/alloc-colors.c b/admin/alloc-colors.c index 203605cc58d..ea5b7502363 100644 --- a/admin/alloc-colors.c +++ b/admin/alloc-colors.c @@ -1,6 +1,6 @@ /* Allocate X colors. Used for testing with dense colormaps. -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/admin/authors.el b/admin/authors.el index f06b2129bfe..119cb1890ca 100644 --- a/admin/authors.el +++ b/admin/authors.el @@ -1,6 +1,6 @@ ;;; authors.el --- utility for maintaining Emacs's AUTHORS file -;; Copyright (C) 2000-2020 Free Software Foundation, Inc. +;; Copyright (C) 2000-2021 Free Software Foundation, Inc. ;; Author: Gerd Moellmann ;; Maintainer: emacs-devel@gnu.org diff --git a/admin/automerge b/admin/automerge index f7717026b15..0c7e350a5b1 100755 --- a/admin/automerge +++ b/admin/automerge @@ -1,7 +1,7 @@ #!/bin/bash ### automerge - automatically merge the Emacs release branch to master -## Copyright (C) 2018-2020 Free Software Foundation, Inc. +## Copyright (C) 2018-2021 Free Software Foundation, Inc. ## Author: Glenn Morris diff --git a/admin/build-configs b/admin/build-configs index dfd037cacec..2e04e0008e7 100755 --- a/admin/build-configs +++ b/admin/build-configs @@ -1,7 +1,7 @@ #! /usr/bin/perl # Build Emacs in several different configurations. -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/admin/charsets/Makefile.in b/admin/charsets/Makefile.in index 3af0f028164..0fd130d346e 100644 --- a/admin/charsets/Makefile.in +++ b/admin/charsets/Makefile.in @@ -1,6 +1,6 @@ ### @configure_input@ -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/admin/charsets/mapconv b/admin/charsets/mapconv index ad62f3cb64d..f933c34ffc6 100755 --- a/admin/charsets/mapconv +++ b/admin/charsets/mapconv @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright (C) 2015-2020 Free Software Foundation, Inc. +# Copyright (C) 2015-2021 Free Software Foundation, Inc. # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/admin/charsets/mapfiles/README b/admin/charsets/mapfiles/README index fe1d07f4f98..45122438e54 100644 --- a/admin/charsets/mapfiles/README +++ b/admin/charsets/mapfiles/README @@ -1,4 +1,4 @@ -Copyright (C) 2009-2020 Free Software Foundation, Inc. +Copyright (C) 2009-2021 Free Software Foundation, Inc. Copyright (C) 2009, 2010, 2011 National Institute of Advanced Industrial Science and Technology (AIST) Registration Number H13PRO009 diff --git a/admin/cus-test.el b/admin/cus-test.el index 842240946eb..c03af54a3ad 100644 --- a/admin/cus-test.el +++ b/admin/cus-test.el @@ -1,6 +1,6 @@ ;;; cus-test.el --- tests for custom types and load problems -;; Copyright (C) 1998, 2000, 2002-2020 Free Software Foundation, Inc. +;; Copyright (C) 1998, 2000, 2002-2021 Free Software Foundation, Inc. ;; Author: Markus Rost ;; Created: 13 Sep 1998 diff --git a/admin/diff-tar-files b/admin/diff-tar-files index cbcec862329..a1eb2e1d663 100755 --- a/admin/diff-tar-files +++ b/admin/diff-tar-files @@ -1,6 +1,6 @@ #! /bin/sh -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/admin/find-gc.el b/admin/find-gc.el index 9bab3776a51..12ce2c3c7ad 100644 --- a/admin/find-gc.el +++ b/admin/find-gc.el @@ -1,6 +1,6 @@ ;;; find-gc.el --- detect functions that call the garbage collector -;; Copyright (C) 1992, 2001-2020 Free Software Foundation, Inc. +;; Copyright (C) 1992, 2001-2021 Free Software Foundation, Inc. ;; Maintainer: emacs-devel@gnu.org diff --git a/admin/gitmerge.el b/admin/gitmerge.el index eeef4e3fc59..b21cb3be332 100644 --- a/admin/gitmerge.el +++ b/admin/gitmerge.el @@ -1,6 +1,6 @@ ;;; gitmerge.el --- help merge one Emacs branch into another -;; Copyright (C) 2010-2020 Free Software Foundation, Inc. +;; Copyright (C) 2010-2021 Free Software Foundation, Inc. ;; Authors: David Engster ;; Stefan Monnier diff --git a/admin/grammars/Makefile.in b/admin/grammars/Makefile.in index a170e089246..98c9c623abc 100644 --- a/admin/grammars/Makefile.in +++ b/admin/grammars/Makefile.in @@ -1,6 +1,6 @@ ### @configure_input@ -## Copyright (C) 2013-2020 Free Software Foundation, Inc. +## Copyright (C) 2013-2021 Free Software Foundation, Inc. ## This file is part of GNU Emacs. diff --git a/admin/grammars/c.by b/admin/grammars/c.by index d12e6f95cb4..2d04c999aca 100644 --- a/admin/grammars/c.by +++ b/admin/grammars/c.by @@ -1,5 +1,5 @@ ;;; c.by -- LL grammar for C/C++ language specification -;; Copyright (C) 1999-2020 Free Software Foundation, Inc. +;; Copyright (C) 1999-2021 Free Software Foundation, Inc. ;; ;; Author: Eric M. Ludlam ;; David Ponce diff --git a/admin/grammars/grammar.wy b/admin/grammars/grammar.wy index 1ae2a903bdf..054e85bf70d 100644 --- a/admin/grammars/grammar.wy +++ b/admin/grammars/grammar.wy @@ -1,6 +1,6 @@ ;;; semantic-grammar.wy -- LALR grammar of Semantic input grammars ;; -;; Copyright (C) 2002-2020 Free Software Foundation, Inc. +;; Copyright (C) 2002-2021 Free Software Foundation, Inc. ;; ;; Author: David Ponce ;; Created: 26 Aug 2002 diff --git a/admin/grammars/java-tags.wy b/admin/grammars/java-tags.wy index 678b36cd0ae..486924b7990 100644 --- a/admin/grammars/java-tags.wy +++ b/admin/grammars/java-tags.wy @@ -1,6 +1,6 @@ ;;; java-tags.wy -- Semantic LALR grammar for Java -;; Copyright (C) 2002-2020 Free Software Foundation, Inc. +;; Copyright (C) 2002-2021 Free Software Foundation, Inc. ;; ;; Author: David Ponce ;; Created: 26 Aug 2002 diff --git a/admin/grammars/js.wy b/admin/grammars/js.wy index 94837baf7c2..e85db1572c6 100644 --- a/admin/grammars/js.wy +++ b/admin/grammars/js.wy @@ -1,6 +1,6 @@ ;;; javascript-jv.wy -- LALR grammar for Javascript -;; Copyright (C) 2005-2020 Free Software Foundation, Inc. +;; Copyright (C) 2005-2021 Free Software Foundation, Inc. ;; Copyright (C) 1998-2011 Ecma International. ;; Author: Joakim Verona diff --git a/admin/grammars/make.by b/admin/grammars/make.by index 7573d0cf9ec..f66585e70e9 100644 --- a/admin/grammars/make.by +++ b/admin/grammars/make.by @@ -1,6 +1,6 @@ ;;; make.by -- BY notation for Makefiles. -;; Copyright (C) 1999-2020 Free Software Foundation, Inc. +;; Copyright (C) 1999-2021 Free Software Foundation, Inc. ;; ;; Author: Eric M. Ludlam ;; David Ponce diff --git a/admin/grammars/python.wy b/admin/grammars/python.wy index 5790461c73c..aaa25ced202 100644 --- a/admin/grammars/python.wy +++ b/admin/grammars/python.wy @@ -1,6 +1,6 @@ ;;; python.wy -- LALR grammar for Python -;; Copyright (C) 2002-2020 Free Software Foundation, Inc. +;; Copyright (C) 2002-2021 Free Software Foundation, Inc. ;; Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, ;; 2009, 2010 Python Software Foundation; All Rights Reserved diff --git a/admin/grammars/scheme.by b/admin/grammars/scheme.by index 572cf564d75..c3abb5a28e2 100644 --- a/admin/grammars/scheme.by +++ b/admin/grammars/scheme.by @@ -1,6 +1,6 @@ ;;; scheme.by -- Scheme BNF language specification -;; Copyright (C) 2001-2020 Free Software Foundation, Inc. +;; Copyright (C) 2001-2021 Free Software Foundation, Inc. ;; This file is part of GNU Emacs. diff --git a/admin/grammars/srecode-template.wy b/admin/grammars/srecode-template.wy index c8d1492af23..868a81cf18a 100644 --- a/admin/grammars/srecode-template.wy +++ b/admin/grammars/srecode-template.wy @@ -1,6 +1,6 @@ ;;; srecode-template.wy --- Semantic Recoder Template parser -;; Copyright (C) 2005-2020 Free Software Foundation, Inc. +;; Copyright (C) 2005-2021 Free Software Foundation, Inc. ;; Author: Eric M. Ludlam ;; Keywords: syntax diff --git a/admin/last-chance.el b/admin/last-chance.el index 8ee6af5a66d..fd5b8e9bd7a 100644 --- a/admin/last-chance.el +++ b/admin/last-chance.el @@ -1,6 +1,6 @@ ;;; last-chance.el --- dangling deterrence -*- lexical-binding: t; -*- -;; Copyright (C) 2016-2020 Free Software Foundation, Inc. +;; Copyright (C) 2016-2021 Free Software Foundation, Inc. ;; Author: Thien-Thi Nguyen ;; Maintainer: emacs-devel@gnu.org diff --git a/admin/make-emacs b/admin/make-emacs index 634c226ac84..fa7880b5664 100755 --- a/admin/make-emacs +++ b/admin/make-emacs @@ -2,7 +2,7 @@ # Build Emacs with various options for profiling, debugging, # with and without warnings enabled etc. -# Copyright (C) 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/admin/make-manuals b/admin/make-manuals index 1cb1c514331..91ea52452e9 100755 --- a/admin/make-manuals +++ b/admin/make-manuals @@ -1,7 +1,7 @@ #!/bin/bash ### make-manuals - create the Emacs manuals to upload to the gnu.org website -## Copyright 2018-2020 Free Software Foundation, Inc. +## Copyright 2018-2021 Free Software Foundation, Inc. ## Author: Glenn Morris diff --git a/admin/merge-gnulib b/admin/merge-gnulib index 3dee0b72b32..e7eb471d3df 100755 --- a/admin/merge-gnulib +++ b/admin/merge-gnulib @@ -4,7 +4,7 @@ # # admin/merge-gnulib -# Copyright 2012-2020 Free Software Foundation, Inc. +# Copyright 2012-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/admin/merge-pkg-config b/admin/merge-pkg-config index 6ec54ce9edf..62fe67cd4af 100755 --- a/admin/merge-pkg-config +++ b/admin/merge-pkg-config @@ -4,7 +4,7 @@ # # admin/merge-pkg-config -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/admin/notes/copyright b/admin/notes/copyright index 156eec04cd6..5b00c82ce93 100644 --- a/admin/notes/copyright +++ b/admin/notes/copyright @@ -1,4 +1,4 @@ -Copyright (C) 2007-2020 Free Software Foundation, Inc. +Copyright (C) 2007-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/admin/notes/emba b/admin/notes/emba index 76b0d3c5993..adebcefcf3e 100644 --- a/admin/notes/emba +++ b/admin/notes/emba @@ -1,6 +1,6 @@ -*- mode: outline; coding: utf-8 -*- -Copyright (C) 2019-2020 Free Software Foundation, Inc. +Copyright (C) 2019-2021 Free Software Foundation, Inc. See the end of the file for license conditions. NOTES FOR EMACS CONTINUOUS BUILD ON EMBA diff --git a/admin/notes/hydra b/admin/notes/hydra index 1b7d915c7a3..62ad7ebf9c5 100644 --- a/admin/notes/hydra +++ b/admin/notes/hydra @@ -1,6 +1,6 @@ -*- mode: outline; coding: utf-8 -*- -Copyright (C) 2013-2020 Free Software Foundation, Inc. +Copyright (C) 2013-2021 Free Software Foundation, Inc. See the end of the file for license conditions. NOTES FOR EMACS CONTINUOUS BUILD ON HYDRA diff --git a/admin/notes/multi-tty b/admin/notes/multi-tty index dee816ddb35..1a337b9d799 100644 --- a/admin/notes/multi-tty +++ b/admin/notes/multi-tty @@ -1,6 +1,6 @@ -*- coding: utf-8; mode: text; -*- -Copyright (C) 2007-2020 Free Software Foundation, Inc. +Copyright (C) 2007-2021 Free Software Foundation, Inc. See the end of the file for license conditions. From README.multi-tty in the multi-tty branch. diff --git a/admin/notes/unicode b/admin/notes/unicode index 6cb1b764c51..93cfac124a8 100644 --- a/admin/notes/unicode +++ b/admin/notes/unicode @@ -1,6 +1,6 @@ -*-mode: text; coding: utf-8;-*- -Copyright (C) 2002-2020 Free Software Foundation, Inc. +Copyright (C) 2002-2021 Free Software Foundation, Inc. See the end of the file for license conditions. Importing a new Unicode Standard version into Emacs diff --git a/admin/notes/www b/admin/notes/www index cfc23ace017..524b908d0e7 100644 --- a/admin/notes/www +++ b/admin/notes/www @@ -1,6 +1,6 @@ -*- outline -*- -Copyright (C) 2013-2020 Free Software Foundation, Inc. +Copyright (C) 2013-2021 Free Software Foundation, Inc. See the end of the file for license conditions. NOTES FOR EMACS WWW PAGES diff --git a/admin/nt/README-UNDUMP.W32 b/admin/nt/README-UNDUMP.W32 index 7937d65a51a..aaaea3b91f7 100644 --- a/admin/nt/README-UNDUMP.W32 +++ b/admin/nt/README-UNDUMP.W32 @@ -1,4 +1,4 @@ -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. See the end of the file for license conditions. Emacs for Windows diff --git a/admin/nt/dist-build/README-windows-binaries b/admin/nt/dist-build/README-windows-binaries index c8fb5797de9..09c2d25a7f9 100644 --- a/admin/nt/dist-build/README-windows-binaries +++ b/admin/nt/dist-build/README-windows-binaries @@ -1,4 +1,4 @@ -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. See the end of the file for license conditions. Precompiled Distributions of diff --git a/admin/nt/dist-build/build-dep-zips.py b/admin/nt/dist-build/build-dep-zips.py index 0e5f1ae1dc6..fa2a8d51f30 100755 --- a/admin/nt/dist-build/build-dep-zips.py +++ b/admin/nt/dist-build/build-dep-zips.py @@ -1,6 +1,6 @@ #!/usr/bin/python3 -## Copyright (C) 2017-2020 Free Software Foundation, Inc. +## Copyright (C) 2017-2021 Free Software Foundation, Inc. ## This file is part of GNU Emacs. diff --git a/admin/nt/dist-build/build-zips.sh b/admin/nt/dist-build/build-zips.sh index 8eaa3a909bd..809cbc65cac 100755 --- a/admin/nt/dist-build/build-zips.sh +++ b/admin/nt/dist-build/build-zips.sh @@ -1,6 +1,6 @@ #!/bin/bash -## Copyright (C) 2017-2020 Free Software Foundation, Inc. +## Copyright (C) 2017-2021 Free Software Foundation, Inc. ## This file is part of GNU Emacs. diff --git a/admin/quick-install-emacs b/admin/quick-install-emacs index 0439c77d016..475658ae93e 100755 --- a/admin/quick-install-emacs +++ b/admin/quick-install-emacs @@ -1,7 +1,7 @@ #!/bin/sh ### quick-install-emacs --- do a halfway-decent job of installing emacs quickly -## Copyright (C) 2001-2020 Free Software Foundation, Inc. +## Copyright (C) 2001-2021 Free Software Foundation, Inc. ## Author: Miles Bader diff --git a/admin/unidata/Makefile.in b/admin/unidata/Makefile.in index f3e1c786114..f31e1bb09fd 100644 --- a/admin/unidata/Makefile.in +++ b/admin/unidata/Makefile.in @@ -1,6 +1,6 @@ ### @configure_input@ -# Copyright (C) 2012-2020 Free Software Foundation, Inc. +# Copyright (C) 2012-2021 Free Software Foundation, Inc. # Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 # National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/admin/unidata/blocks.awk b/admin/unidata/blocks.awk index 1e85eecb68f..886f61a3401 100755 --- a/admin/unidata/blocks.awk +++ b/admin/unidata/blocks.awk @@ -1,6 +1,6 @@ #!/usr/bin/awk -f -## Copyright (C) 2015-2020 Free Software Foundation, Inc. +## Copyright (C) 2015-2021 Free Software Foundation, Inc. ## Author: Glenn Morris diff --git a/admin/unidata/unidata-gen.el b/admin/unidata/unidata-gen.el index 71959d633c5..a59f794a033 100644 --- a/admin/unidata/unidata-gen.el +++ b/admin/unidata/unidata-gen.el @@ -1,6 +1,6 @@ ;; unidata-gen.el -- Create files containing character property data. -;; Copyright (C) 2008-2020 Free Software Foundation, Inc. +;; Copyright (C) 2008-2021 Free Software Foundation, Inc. ;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 ;; National Institute of Advanced Industrial Science and Technology (AIST) diff --git a/admin/unidata/uvs.el b/admin/unidata/uvs.el index 6b8909ce66a..0141b638fb2 100644 --- a/admin/unidata/uvs.el +++ b/admin/unidata/uvs.el @@ -1,6 +1,6 @@ ;;; uvs.el --- utility for UVS (format 14) cmap subtables in OpenType fonts -*- lexical-binding:t -*- -;; Copyright (C) 2014-2020 Free Software Foundation, Inc. +;; Copyright (C) 2014-2021 Free Software Foundation, Inc. ;; Author: YAMAMOTO Mitsuharu diff --git a/admin/update-copyright b/admin/update-copyright index a70d7a3ff93..86953838bdd 100755 --- a/admin/update-copyright +++ b/admin/update-copyright @@ -7,7 +7,7 @@ # By default, this script uses the local-time calendar year. # Set the UPDATE_COPYRIGHT_YEAR environment variable to override the default. -# Copyright 2013-2020 Free Software Foundation, Inc. +# Copyright 2013-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/admin/update_autogen b/admin/update_autogen index af339a9e7ec..6e4a91f4e01 100755 --- a/admin/update_autogen +++ b/admin/update_autogen @@ -1,7 +1,7 @@ #!/usr/bin/env bash ### update_autogen - update some auto-generated files in the Emacs tree -## Copyright (C) 2011-2020 Free Software Foundation, Inc. +## Copyright (C) 2011-2021 Free Software Foundation, Inc. ## Author: Glenn Morris diff --git a/admin/upload-manuals b/admin/upload-manuals index af1c8c18704..845b544b64b 100755 --- a/admin/upload-manuals +++ b/admin/upload-manuals @@ -2,7 +2,7 @@ ### upload-manuals - upload the Emacs manuals to the gnu.org website -## Copyright 2018-2020 Free Software Foundation, Inc. +## Copyright 2018-2021 Free Software Foundation, Inc. ## Author: Glenn Morris diff --git a/autogen.sh b/autogen.sh index c5e14900d68..531e5775f96 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,7 +1,7 @@ #!/bin/sh ### autogen.sh - tool to help build Emacs from a repository checkout -## Copyright (C) 2011-2020 Free Software Foundation, Inc. +## Copyright (C) 2011-2021 Free Software Foundation, Inc. ## Author: Glenn Morris ## Maintainer: emacs-devel@gnu.org diff --git a/build-aux/config.guess b/build-aux/config.guess index 4c8498faf3e..28ba5948cc9 100755 --- a/build-aux/config.guess +++ b/build-aux/config.guess @@ -1,6 +1,6 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. timestamp='2019-09-10' diff --git a/build-aux/config.sub b/build-aux/config.sub index df031b3c853..c73682fa2e4 100755 --- a/build-aux/config.sub +++ b/build-aux/config.sub @@ -1,6 +1,6 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2020 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. timestamp='2019-06-30' diff --git a/build-aux/git-hooks/commit-msg b/build-aux/git-hooks/commit-msg index e84be4cbafe..cf0f74c6441 100755 --- a/build-aux/git-hooks/commit-msg +++ b/build-aux/git-hooks/commit-msg @@ -1,7 +1,7 @@ #!/bin/sh # Check the format of GNU Emacs change log entries. -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/build-aux/git-hooks/pre-commit b/build-aux/git-hooks/pre-commit index 59fdaf58c1a..719bfefc50a 100755 --- a/build-aux/git-hooks/pre-commit +++ b/build-aux/git-hooks/pre-commit @@ -1,7 +1,7 @@ #!/bin/sh # Check file names in git commits for GNU Emacs. -# Copyright 2014-2020 Free Software Foundation, Inc. +# Copyright 2014-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/build-aux/git-hooks/prepare-commit-msg b/build-aux/git-hooks/prepare-commit-msg index dbb1264b495..07710b42ba0 100755 --- a/build-aux/git-hooks/prepare-commit-msg +++ b/build-aux/git-hooks/prepare-commit-msg @@ -1,7 +1,7 @@ #!/bin/sh # Check the format of GNU Emacs change log entries. -# Copyright 2019-2020 Free Software Foundation, Inc. +# Copyright 2019-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog index 511276757f5..460e9a91951 100755 --- a/build-aux/gitlog-to-changelog +++ b/build-aux/gitlog-to-changelog @@ -3,7 +3,7 @@ # Convert git log output to ChangeLog format. -# Copyright (C) 2008-2020 Free Software Foundation, Inc. +# Copyright (C) 2008-2021 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/build-aux/gitlog-to-emacslog b/build-aux/gitlog-to-emacslog index 23702807efc..30b2d78659d 100755 --- a/build-aux/gitlog-to-emacslog +++ b/build-aux/gitlog-to-emacslog @@ -2,7 +2,7 @@ # Convert git log output to ChangeLog format for GNU Emacs. -# Copyright (C) 2014-2020 Free Software Foundation, Inc. +# Copyright (C) 2014-2021 Free Software Foundation, Inc. # Author: Paul Eggert diff --git a/build-aux/make-info-dir b/build-aux/make-info-dir index ee2197beb34..ea26479cd96 100755 --- a/build-aux/make-info-dir +++ b/build-aux/make-info-dir @@ -2,7 +2,7 @@ ### make-info-dir - create info/dir, for systems without install-info -## Copyright (C) 2013-2020 Free Software Foundation, Inc. +## Copyright (C) 2013-2021 Free Software Foundation, Inc. ## Author: Glenn Morris ## Maintainer: emacs-devel@gnu.org diff --git a/build-aux/move-if-change b/build-aux/move-if-change index 653dc981599..e85e90af501 100755 --- a/build-aux/move-if-change +++ b/build-aux/move-if-change @@ -8,7 +8,7 @@ VERSION='2018-03-07 03:47'; # UTC # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. -# Copyright (C) 2002-2020 Free Software Foundation, Inc. +# Copyright (C) 2002-2021 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/build-aux/msys-to-w32 b/build-aux/msys-to-w32 index 4e0b2aaebad..e4e5e086415 100755 --- a/build-aux/msys-to-w32 +++ b/build-aux/msys-to-w32 @@ -2,7 +2,7 @@ # Convert a MSYS path list to Windows-native format. # Status is zero if successful, nonzero otherwise. -# Copyright (C) 2013-2020 Free Software Foundation, Inc. +# Copyright (C) 2013-2021 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/build-aux/update-copyright b/build-aux/update-copyright index 4f79b56be78..73e89595333 100755 --- a/build-aux/update-copyright +++ b/build-aux/update-copyright @@ -3,7 +3,7 @@ # Update an FSF copyright year list to include the current year. -# Copyright (C) 2009-2020 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/build-aux/update-subdirs b/build-aux/update-subdirs index 336029fb710..f6dfd0af626 100755 --- a/build-aux/update-subdirs +++ b/build-aux/update-subdirs @@ -1,7 +1,7 @@ #!/bin/sh # Write into $1/subdirs.el a list of subdirs of directory $1. -# Copyright (C) 1994-1995, 1997, 1999, 2001-2020 Free Software +# Copyright (C) 1994-1995, 1997, 1999, 2001-2021 Free Software # Foundation, Inc. # This file is part of GNU Emacs. diff --git a/configure.ac b/configure.ac index c683e31f688..111a6ad6272 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ dnl autoconf dnl in the directory containing this script. dnl If you changed any AC_DEFINES, also run autoheader. dnl -dnl Copyright (C) 1994-1996, 1999-2020 Free Software Foundation, Inc. +dnl Copyright (C) 1994-1996, 1999-2021 Free Software Foundation, Inc. dnl dnl This file is part of GNU Emacs. dnl diff --git a/doc/emacs/ChangeLog.1 b/doc/emacs/ChangeLog.1 index cf641beec1f..bc4dbd47052 100644 --- a/doc/emacs/ChangeLog.1 +++ b/doc/emacs/ChangeLog.1 @@ -10919,7 +10919,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 1993-1999, 2001-2020 Free Software Foundation, Inc. + Copyright (C) 1993-1999, 2001-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/doc/emacs/Makefile.in b/doc/emacs/Makefile.in index 53b7d074512..2a3f53f740d 100644 --- a/doc/emacs/Makefile.in +++ b/doc/emacs/Makefile.in @@ -1,6 +1,6 @@ ### @configure_input@ -# Copyright (C) 1994, 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1994, 1996-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/doc/emacs/abbrevs.texi b/doc/emacs/abbrevs.texi index 21bf8c53325..5d4626096fa 100644 --- a/doc/emacs/abbrevs.texi +++ b/doc/emacs/abbrevs.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Abbrevs diff --git a/doc/emacs/ack.texi b/doc/emacs/ack.texi index c6224885df3..b9c376851ee 100644 --- a/doc/emacs/ack.texi +++ b/doc/emacs/ack.texi @@ -1,6 +1,6 @@ @c -*- coding: utf-8 -*- @c This is part of the Emacs manual. -@c Copyright (C) 1994--1997, 1999--2020 Free Software Foundation, Inc. +@c Copyright (C) 1994--1997, 1999--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @c @node Acknowledgments diff --git a/doc/emacs/anti.texi b/doc/emacs/anti.texi index d1e67e66560..49da473fa51 100644 --- a/doc/emacs/anti.texi +++ b/doc/emacs/anti.texi @@ -1,6 +1,6 @@ @c -*- coding: utf-8 -*- @c This is part of the Emacs manual. -@c Copyright (C) 2005--2020 Free Software Foundation, Inc. +@c Copyright (C) 2005--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @node Antinews diff --git a/doc/emacs/arevert-xtra.texi b/doc/emacs/arevert-xtra.texi index ef42fb2a7c0..5dede6246cc 100644 --- a/doc/emacs/arevert-xtra.texi +++ b/doc/emacs/arevert-xtra.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 2004--2020 Free Software Foundation, Inc. +@c Copyright (C) 2004--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @c @c This file is included either in emacs-xtra.texi (when producing the diff --git a/doc/emacs/basic.texi b/doc/emacs/basic.texi index abb385f53d5..342bec9ce54 100644 --- a/doc/emacs/basic.texi +++ b/doc/emacs/basic.texi @@ -1,6 +1,6 @@ @c -*- coding: utf-8 -*- @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Basic diff --git a/doc/emacs/buffers.texi b/doc/emacs/buffers.texi index 89ed470c055..c0e8c6f3923 100644 --- a/doc/emacs/buffers.texi +++ b/doc/emacs/buffers.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Buffers diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi index fa60ce26621..8148f4e224f 100644 --- a/doc/emacs/building.texi +++ b/doc/emacs/building.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Building diff --git a/doc/emacs/cal-xtra.texi b/doc/emacs/cal-xtra.texi index 3f1198987d9..aec2e6cc5a8 100644 --- a/doc/emacs/cal-xtra.texi +++ b/doc/emacs/cal-xtra.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -*- coding: utf-8 -*- -@c Copyright (C) 2004--2020 Free Software Foundation, Inc. +@c Copyright (C) 2004--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @c @c This file is included either in emacs-xtra.texi (when producing the diff --git a/doc/emacs/calendar.texi b/doc/emacs/calendar.texi index fe51ad35d77..fe1cded7f8f 100644 --- a/doc/emacs/calendar.texi +++ b/doc/emacs/calendar.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -*- coding: utf-8 -*- -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Calendar/Diary diff --git a/doc/emacs/cmdargs.texi b/doc/emacs/cmdargs.texi index 850a802753d..0617c86fd32 100644 --- a/doc/emacs/cmdargs.texi +++ b/doc/emacs/cmdargs.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Emacs Invocation diff --git a/doc/emacs/commands.texi b/doc/emacs/commands.texi index ad0cbc6f659..82a917ce7d1 100644 --- a/doc/emacs/commands.texi +++ b/doc/emacs/commands.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @iftex diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi index 6e2e045dddf..de5d8252484 100644 --- a/doc/emacs/custom.texi +++ b/doc/emacs/custom.texi @@ -1,6 +1,6 @@ @c -*- coding: utf-8 -*- @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Customization diff --git a/doc/emacs/dired-xtra.texi b/doc/emacs/dired-xtra.texi index 25cffe49161..fc8130d8e6f 100644 --- a/doc/emacs/dired-xtra.texi +++ b/doc/emacs/dired-xtra.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 2004--2020 Free Software Foundation, Inc. +@c Copyright (C) 2004--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @c @c This file is included either in emacs-xtra.texi (when producing the diff --git a/doc/emacs/dired.texi b/doc/emacs/dired.texi index 4ff1dc1bd94..75680c86326 100644 --- a/doc/emacs/dired.texi +++ b/doc/emacs/dired.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Dired diff --git a/doc/emacs/display.texi b/doc/emacs/display.texi index ed2fa8bf710..69d5df1b01d 100644 --- a/doc/emacs/display.texi +++ b/doc/emacs/display.texi @@ -1,6 +1,6 @@ @c -*- coding: utf-8 -*- @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. diff --git a/doc/emacs/emacs-xtra.texi b/doc/emacs/emacs-xtra.texi index 544b808c7d4..2d511bffbc6 100644 --- a/doc/emacs/emacs-xtra.texi +++ b/doc/emacs/emacs-xtra.texi @@ -16,7 +16,7 @@ @copying This manual describes specialized features of Emacs. -Copyright @copyright{} 2004--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2004--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/emacs/emacs.texi b/doc/emacs/emacs.texi index a28b16aa39e..22e19aee63c 100644 --- a/doc/emacs/emacs.texi +++ b/doc/emacs/emacs.texi @@ -20,7 +20,7 @@ This is the @cite{GNU Emacs Manual}, @end ifclear updated for Emacs version @value{EMACSVER}. -Copyright @copyright{} 1985--1987, 1993--2020 Free Software Foundation, +Copyright @copyright{} 1985--1987, 1993--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/emacs/emerge-xtra.texi b/doc/emacs/emerge-xtra.texi index d5759650c23..7bf24151e57 100644 --- a/doc/emacs/emerge-xtra.texi +++ b/doc/emacs/emerge-xtra.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 2004--2020 Free Software Foundation, Inc. +@c Copyright (C) 2004--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @c @c This file is included either in emacs-xtra.texi (when producing the diff --git a/doc/emacs/entering.texi b/doc/emacs/entering.texi index 4cd5c65df57..0476466da5d 100644 --- a/doc/emacs/entering.texi +++ b/doc/emacs/entering.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @iftex diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 5998326ffef..88fcdd0f9f6 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Files diff --git a/doc/emacs/fixit.texi b/doc/emacs/fixit.texi index dc643e19a4b..35601708d35 100644 --- a/doc/emacs/fixit.texi +++ b/doc/emacs/fixit.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Fixit diff --git a/doc/emacs/fortran-xtra.texi b/doc/emacs/fortran-xtra.texi index 11222e532eb..c8efd56c37f 100644 --- a/doc/emacs/fortran-xtra.texi +++ b/doc/emacs/fortran-xtra.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 2004--2020 Free Software Foundation, Inc. +@c Copyright (C) 2004--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @c @c This file is included either in emacs-xtra.texi (when producing the diff --git a/doc/emacs/frames.texi b/doc/emacs/frames.texi index e0eabe38d06..544bb6a5134 100644 --- a/doc/emacs/frames.texi +++ b/doc/emacs/frames.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Frames diff --git a/doc/emacs/glossary.texi b/doc/emacs/glossary.texi index 4d622ec0e3f..35df06591eb 100644 --- a/doc/emacs/glossary.texi +++ b/doc/emacs/glossary.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Glossary diff --git a/doc/emacs/gnu.texi b/doc/emacs/gnu.texi index 0028b484c95..4d48dcdb8ed 100644 --- a/doc/emacs/gnu.texi +++ b/doc/emacs/gnu.texi @@ -1,4 +1,4 @@ -@c Copyright (C) 1985--1987, 1993, 1995, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993, 1995, 2001--2021 Free Software @c Foundation, Inc. @c @c Permission is granted to anyone to make or distribute verbatim copies diff --git a/doc/emacs/help.texi b/doc/emacs/help.texi index 06ddc11158b..d3943aeb134 100644 --- a/doc/emacs/help.texi +++ b/doc/emacs/help.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Help diff --git a/doc/emacs/indent.texi b/doc/emacs/indent.texi index d0360ac333b..ceb911bef90 100644 --- a/doc/emacs/indent.texi +++ b/doc/emacs/indent.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Indentation diff --git a/doc/emacs/killing.texi b/doc/emacs/killing.texi index 6b1f35e6158..f20a06d5a5b 100644 --- a/doc/emacs/killing.texi +++ b/doc/emacs/killing.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. diff --git a/doc/emacs/kmacro.texi b/doc/emacs/kmacro.texi index 7b1d365ff04..adb2ab8d561 100644 --- a/doc/emacs/kmacro.texi +++ b/doc/emacs/kmacro.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Keyboard Macros diff --git a/doc/emacs/m-x.texi b/doc/emacs/m-x.texi index fc2d2d8c84d..317346d257e 100644 --- a/doc/emacs/m-x.texi +++ b/doc/emacs/m-x.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node M-x diff --git a/doc/emacs/macos.texi b/doc/emacs/macos.texi index 00daa8b35d3..cd1db1a7bab 100644 --- a/doc/emacs/macos.texi +++ b/doc/emacs/macos.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 2000--2020 Free Software Foundation, Inc. +@c Copyright (C) 2000--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @node Mac OS / GNUstep @appendix Emacs and macOS / GNUstep diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi index e8b5608c62a..14911d30e99 100644 --- a/doc/emacs/maintaining.texi +++ b/doc/emacs/maintaining.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual., Abbrevs, This is part of the Emacs manual., Top -@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Maintaining diff --git a/doc/emacs/mark.texi b/doc/emacs/mark.texi index 97aeed896a0..20cb8ee2c65 100644 --- a/doc/emacs/mark.texi +++ b/doc/emacs/mark.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Mark diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi index 54f046a7e05..4b3f15650c7 100644 --- a/doc/emacs/mini.texi +++ b/doc/emacs/mini.texi @@ -1,6 +1,6 @@ @c -*- coding: utf-8 -*- @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Minibuffer diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index 5f700367ad4..68941727f4a 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @iftex diff --git a/doc/emacs/modes.texi b/doc/emacs/modes.texi index c9c175d51e8..cc25d3e1e33 100644 --- a/doc/emacs/modes.texi +++ b/doc/emacs/modes.texi @@ -1,6 +1,6 @@ @c -*- coding: utf-8 -*- @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Modes diff --git a/doc/emacs/msdos-xtra.texi b/doc/emacs/msdos-xtra.texi index 045ac6c4605..fce6ae46f81 100644 --- a/doc/emacs/msdos-xtra.texi +++ b/doc/emacs/msdos-xtra.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 2004--2020 Free Software Foundation, Inc. +@c Copyright (C) 2004--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @c @c This file is included either in emacs-xtra.texi (when producing the diff --git a/doc/emacs/msdos.texi b/doc/emacs/msdos.texi index 3275fded565..fb593388da8 100644 --- a/doc/emacs/msdos.texi +++ b/doc/emacs/msdos.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Microsoft Windows diff --git a/doc/emacs/mule.texi b/doc/emacs/mule.texi index 3421ce66904..93c5245f6a2 100644 --- a/doc/emacs/mule.texi +++ b/doc/emacs/mule.texi @@ -1,6 +1,6 @@ @c -*- coding: utf-8 -*- @c This is part of the Emacs manual. -@c Copyright (C) 1997, 1999--2020 Free Software Foundation, Inc. +@c Copyright (C) 1997, 1999--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @node International @chapter International Character Set Support diff --git a/doc/emacs/package.texi b/doc/emacs/package.texi index 517d2b75aa2..e1226585a60 100644 --- a/doc/emacs/package.texi +++ b/doc/emacs/package.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Packages diff --git a/doc/emacs/picture-xtra.texi b/doc/emacs/picture-xtra.texi index 9decda30daa..a04b72d38d3 100644 --- a/doc/emacs/picture-xtra.texi +++ b/doc/emacs/picture-xtra.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 2004--2020 Free Software Foundation, Inc. +@c Copyright (C) 2004--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @c @c This file is included either in emacs-xtra.texi (when producing the diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi index b976f2e7b12..51fdb96626d 100644 --- a/doc/emacs/programs.texi +++ b/doc/emacs/programs.texi @@ -1,6 +1,6 @@ @c -*- coding: utf-8 -*- @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 1999--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Programs diff --git a/doc/emacs/regs.texi b/doc/emacs/regs.texi index d1b9ea8f679..59fa0ff0a1c 100644 --- a/doc/emacs/regs.texi +++ b/doc/emacs/regs.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Registers diff --git a/doc/emacs/rmail.texi b/doc/emacs/rmail.texi index 14ee062b6cf..907d109dc1e 100644 --- a/doc/emacs/rmail.texi +++ b/doc/emacs/rmail.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Rmail diff --git a/doc/emacs/screen.texi b/doc/emacs/screen.texi index 5c5a5da5511..2ff808e0400 100644 --- a/doc/emacs/screen.texi +++ b/doc/emacs/screen.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Screen diff --git a/doc/emacs/search.texi b/doc/emacs/search.texi index de7adc08eba..6354dcb19f0 100644 --- a/doc/emacs/search.texi +++ b/doc/emacs/search.texi @@ -1,6 +1,6 @@ @c -*- coding: utf-8 -*- @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Search diff --git a/doc/emacs/sending.texi b/doc/emacs/sending.texi index e3f9fbec071..174e52ac9a8 100644 --- a/doc/emacs/sending.texi +++ b/doc/emacs/sending.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Sending Mail diff --git a/doc/emacs/text.texi b/doc/emacs/text.texi index 281e24421c2..208f8a19a9a 100644 --- a/doc/emacs/text.texi +++ b/doc/emacs/text.texi @@ -1,6 +1,6 @@ @c -*- coding: utf-8 -*- @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Text diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi index 33f67f2b442..5d947bb9fef 100644 --- a/doc/emacs/trouble.texi +++ b/doc/emacs/trouble.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @iftex diff --git a/doc/emacs/vc-xtra.texi b/doc/emacs/vc-xtra.texi index 37804242eaf..51b9d667784 100644 --- a/doc/emacs/vc-xtra.texi +++ b/doc/emacs/vc-xtra.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 2004--2020 Free Software Foundation, Inc. +@c Copyright (C) 2004--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @c @c This file is included in emacs-xtra.texi when producing the printed diff --git a/doc/emacs/vc1-xtra.texi b/doc/emacs/vc1-xtra.texi index 26199924d58..4cd00cba6c3 100644 --- a/doc/emacs/vc1-xtra.texi +++ b/doc/emacs/vc1-xtra.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 2004--2020 Free Software Foundation, Inc. +@c Copyright (C) 2004--2021 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @c @c This file is included either in vc-xtra.texi (when producing the diff --git a/doc/emacs/windows.texi b/doc/emacs/windows.texi index d2bac51a7b2..a00f6b1b042 100644 --- a/doc/emacs/windows.texi +++ b/doc/emacs/windows.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2020 Free Software +@c Copyright (C) 1985--1987, 1993--1995, 1997, 2000--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node Windows diff --git a/doc/emacs/xresources.texi b/doc/emacs/xresources.texi index 730cf304e2b..00fa6c0aa31 100644 --- a/doc/emacs/xresources.texi +++ b/doc/emacs/xresources.texi @@ -1,5 +1,5 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1987, 1993--1995, 1997, 2001--2020 Free Software +@c Copyright (C) 1987, 1993--1995, 1997, 2001--2021 Free Software @c Foundation, Inc. @c See file emacs.texi for copying conditions. @node X Resources diff --git a/doc/lispintro/ChangeLog.1 b/doc/lispintro/ChangeLog.1 index 75f5872dc3c..bb4323a7734 100644 --- a/doc/lispintro/ChangeLog.1 +++ b/doc/lispintro/ChangeLog.1 @@ -782,7 +782,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 2001-2020 Free Software Foundation, Inc. + Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/doc/lispintro/Makefile.in b/doc/lispintro/Makefile.in index 7a2b6f0a580..d8b909c9c10 100644 --- a/doc/lispintro/Makefile.in +++ b/doc/lispintro/Makefile.in @@ -1,6 +1,6 @@ ### @configure_input@ -# Copyright (C) 1994-1999, 2001-2020 Free Software Foundation, Inc. +# Copyright (C) 1994-1999, 2001-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/doc/lispintro/README b/doc/lispintro/README index 6361f5a65ce..eca19c76a42 100644 --- a/doc/lispintro/README +++ b/doc/lispintro/README @@ -1,4 +1,4 @@ -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/doc/lispintro/cons-1.eps b/doc/lispintro/cons-1.eps index c5d414c7589..4877df7135e 100644 --- a/doc/lispintro/cons-1.eps +++ b/doc/lispintro/cons-1.eps @@ -4,7 +4,7 @@ %%CreationDate: Wed Mar 8 14:26:58 1995 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu) -% Copyright (C) 1995, 1997, 2001-2020 Free Software Foundation, Inc. +% Copyright (C) 1995, 1997, 2001-2021 Free Software Foundation, Inc. % % This file is part of GNU Emacs. % diff --git a/doc/lispintro/cons-2.eps b/doc/lispintro/cons-2.eps index f6d97c7cc09..48fdc7e8768 100644 --- a/doc/lispintro/cons-2.eps +++ b/doc/lispintro/cons-2.eps @@ -4,7 +4,7 @@ %%CreationDate: Wed Mar 8 14:26:39 1995 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu) -% Copyright (C) 1995, 1997, 2001-2020 Free Software Foundation, Inc. +% Copyright (C) 1995, 1997, 2001-2021 Free Software Foundation, Inc. % % This file is part of GNU Emacs. % diff --git a/doc/lispintro/cons-2a.eps b/doc/lispintro/cons-2a.eps index 57b96eba163..81053d3f26c 100644 --- a/doc/lispintro/cons-2a.eps +++ b/doc/lispintro/cons-2a.eps @@ -4,7 +4,7 @@ %%CreationDate: Tue Mar 14 15:09:30 1995 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu) -% Copyright (C) 1995, 1997, 2001-2020 Free Software Foundation, Inc. +% Copyright (C) 1995, 1997, 2001-2021 Free Software Foundation, Inc. % % This file is part of GNU Emacs. % diff --git a/doc/lispintro/cons-3.eps b/doc/lispintro/cons-3.eps index e51c2c4008b..e6a80f1c8ba 100644 --- a/doc/lispintro/cons-3.eps +++ b/doc/lispintro/cons-3.eps @@ -4,7 +4,7 @@ %%CreationDate: Wed Mar 8 14:25:41 1995 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu) -% Copyright (C) 1995, 1997, 2001-2020 Free Software Foundation, Inc. +% Copyright (C) 1995, 1997, 2001-2021 Free Software Foundation, Inc. % % This file is part of GNU Emacs. % diff --git a/doc/lispintro/cons-4.eps b/doc/lispintro/cons-4.eps index 1cbf44fab02..c1aac9c09bc 100644 --- a/doc/lispintro/cons-4.eps +++ b/doc/lispintro/cons-4.eps @@ -4,7 +4,7 @@ %%CreationDate: Wed Mar 8 14:25:06 1995 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu) -% Copyright (C) 1995, 1997, 2001-2020 Free Software Foundation, Inc. +% Copyright (C) 1995, 1997, 2001-2021 Free Software Foundation, Inc. % % This file is part of GNU Emacs. % diff --git a/doc/lispintro/cons-5.eps b/doc/lispintro/cons-5.eps index 85a553bcbce..a0918a92c53 100644 --- a/doc/lispintro/cons-5.eps +++ b/doc/lispintro/cons-5.eps @@ -4,7 +4,7 @@ %%CreationDate: Wed Mar 8 14:27:28 1995 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu) -% Copyright (C) 1995, 1997, 2001-2020 Free Software Foundation, Inc. +% Copyright (C) 1995, 1997, 2001-2021 Free Software Foundation, Inc. % % This file is part of GNU Emacs. % diff --git a/doc/lispintro/drawers.eps b/doc/lispintro/drawers.eps index b71bdb82aee..725bd9723ce 100644 --- a/doc/lispintro/drawers.eps +++ b/doc/lispintro/drawers.eps @@ -9,7 +9,7 @@ %%EndComments %%BeginProlog -% Copyright (C) 2001-2020 Free Software Foundation, Inc. +% Copyright (C) 2001-2021 Free Software Foundation, Inc. % % This file is part of GNU Emacs. % diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi index e6c54efba73..6f0b96d16a2 100644 --- a/doc/lispintro/emacs-lisp-intro.texi +++ b/doc/lispintro/emacs-lisp-intro.texi @@ -117,7 +117,7 @@ Edition @value{edition-number}, @value{update-date} @sp 1 Distributed with Emacs version @value{EMACSVER}. @sp 1 -Copyright @copyright{} 1990--1995, 1997, 2001--2020 Free Software +Copyright @copyright{} 1990--1995, 1997, 2001--2021 Free Software Foundation, Inc. @sp 1 diff --git a/doc/lispintro/lambda-1.eps b/doc/lispintro/lambda-1.eps index 08bd6007b79..43b2d08aedc 100644 --- a/doc/lispintro/lambda-1.eps +++ b/doc/lispintro/lambda-1.eps @@ -4,7 +4,7 @@ %%CreationDate: Wed Mar 8 14:31:53 1995 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu) -% Copyright (C) 1995, 1997, 2001-2020 Free Software Foundation, Inc. +% Copyright (C) 1995, 1997, 2001-2021 Free Software Foundation, Inc. % % This file is part of GNU Emacs. % diff --git a/doc/lispintro/lambda-2.eps b/doc/lispintro/lambda-2.eps index 6ccf9993e33..c6c71f2b776 100644 --- a/doc/lispintro/lambda-2.eps +++ b/doc/lispintro/lambda-2.eps @@ -4,7 +4,7 @@ %%CreationDate: Wed Mar 8 14:33:09 1995 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu) -% Copyright (C) 1995, 1997, 2001-2020 Free Software Foundation, Inc. +% Copyright (C) 1995, 1997, 2001-2021 Free Software Foundation, Inc. % % This file is part of GNU Emacs. % diff --git a/doc/lispintro/lambda-3.eps b/doc/lispintro/lambda-3.eps index aac0392c4ba..ae939d537f4 100644 --- a/doc/lispintro/lambda-3.eps +++ b/doc/lispintro/lambda-3.eps @@ -4,7 +4,7 @@ %%CreationDate: Wed Mar 8 14:33:49 1995 %%Creator: Tgif-2.16-p4 by William Chia-Wei Cheng (william@cs.UCLA.edu) -% Copyright (C) 1995, 1997, 2001-2020 Free Software Foundation, Inc. +% Copyright (C) 1995, 1997, 2001-2021 Free Software Foundation, Inc. % % This file is part of GNU Emacs. % diff --git a/doc/lispref/ChangeLog.1 b/doc/lispref/ChangeLog.1 index 8d92a943d57..bd7a9c4e793 100644 --- a/doc/lispref/ChangeLog.1 +++ b/doc/lispref/ChangeLog.1 @@ -13989,7 +13989,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 1998-2020 Free Software Foundation, Inc. + Copyright (C) 1998-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/doc/lispref/Makefile.in b/doc/lispref/Makefile.in index bd650091116..271f06edddc 100644 --- a/doc/lispref/Makefile.in +++ b/doc/lispref/Makefile.in @@ -1,6 +1,6 @@ ### @configure_input@ -# Copyright (C) 1990-1996, 1998-2020 Free Software Foundation, Inc. +# Copyright (C) 1990-1996, 1998-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/doc/lispref/README b/doc/lispref/README index ac0c2b554eb..9b998371303 100644 --- a/doc/lispref/README +++ b/doc/lispref/README @@ -1,4 +1,4 @@ -Copyright (C) 2001-2020 Free Software Foundation, Inc. -*- outline -*- +Copyright (C) 2001-2021 Free Software Foundation, Inc. -*- outline -*- See the end of the file for license conditions. diff --git a/doc/lispref/abbrevs.texi b/doc/lispref/abbrevs.texi index 575be187d3f..71fac1ae3b6 100644 --- a/doc/lispref/abbrevs.texi +++ b/doc/lispref/abbrevs.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1994, 1999, 2001--2020 Free Software Foundation, +@c Copyright (C) 1990--1994, 1999, 2001--2021 Free Software Foundation, @c Inc. @c See the file elisp.texi for copying conditions. @node Abbrevs diff --git a/doc/lispref/anti.texi b/doc/lispref/anti.texi index a134e883588..ced8082f6a4 100644 --- a/doc/lispref/anti.texi +++ b/doc/lispref/anti.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1999, 2002--2020 Free Software Foundation, Inc. +@c Copyright (C) 1999, 2002--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @c This node must have no pointers. diff --git a/doc/lispref/back.texi b/doc/lispref/back.texi index 817249ee01a..c238863833d 100644 --- a/doc/lispref/back.texi +++ b/doc/lispref/back.texi @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 2001--2020 Free Software Foundation, Inc. +@c Copyright (C) 2001--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @c @c %**start of header diff --git a/doc/lispref/backups.texi b/doc/lispref/backups.texi index 4ed1a10fcf6..21b876cf743 100644 --- a/doc/lispref/backups.texi +++ b/doc/lispref/backups.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1999, 2001--2020 Free Software Foundation, +@c Copyright (C) 1990--1995, 1999, 2001--2021 Free Software Foundation, @c Inc. @c See the file elisp.texi for copying conditions. @node Backups and Auto-Saving diff --git a/doc/lispref/buffers.texi b/doc/lispref/buffers.texi index 28603436284..5839046a8ff 100644 --- a/doc/lispref/buffers.texi +++ b/doc/lispref/buffers.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Buffers diff --git a/doc/lispref/commands.texi b/doc/lispref/commands.texi index 744d3e585cf..5385c03790d 100644 --- a/doc/lispref/commands.texi +++ b/doc/lispref/commands.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Command Loop diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi index e979fda41eb..a85657b2492 100644 --- a/doc/lispref/compile.texi +++ b/doc/lispref/compile.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1994, 2001--2020 Free Software Foundation, Inc. +@c Copyright (C) 1990--1994, 2001--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Byte Compilation @chapter Byte Compilation diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi index d2419f415bf..55bcddb31aa 100644 --- a/doc/lispref/control.texi +++ b/doc/lispref/control.texi @@ -1,6 +1,6 @@ @c -*- mode: texinfo; coding: utf-8 -*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Control Structures diff --git a/doc/lispref/customize.texi b/doc/lispref/customize.texi index 2a72276bc56..362064052e6 100644 --- a/doc/lispref/customize.texi +++ b/doc/lispref/customize.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1997--2020 Free Software Foundation, Inc. +@c Copyright (C) 1997--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Customization @chapter Customization Settings diff --git a/doc/lispref/debugging.texi b/doc/lispref/debugging.texi index 3fea604184c..1b28bf7aa5d 100644 --- a/doc/lispref/debugging.texi +++ b/doc/lispref/debugging.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1994, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1994, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Debugging diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi index 39cc270a5fd..a49f08dd2ed 100644 --- a/doc/lispref/display.texi +++ b/doc/lispref/display.texi @@ -1,6 +1,6 @@ @c -*- mode: texinfo; coding: utf-8 -*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--2020 Free Software Foundation, Inc. +@c Copyright (C) 1990--1995, 1998--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Display @chapter Emacs Display diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi index 4dcdc0cbf0a..05a9f5407d1 100644 --- a/doc/lispref/edebug.texi +++ b/doc/lispref/edebug.texi @@ -1,6 +1,6 @@ @comment -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1992--1994, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1992--1994, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. diff --git a/doc/lispref/elisp.texi b/doc/lispref/elisp.texi index 9a6796790c4..fa548b503aa 100644 --- a/doc/lispref/elisp.texi +++ b/doc/lispref/elisp.texi @@ -99,7 +99,7 @@ This is the @cite{GNU Emacs Lisp Reference Manual} @end ifclear corresponding to Emacs version @value{EMACSVER}. -Copyright @copyright{} 1990--1996, 1998--2020 Free Software Foundation, +Copyright @copyright{} 1990--1996, 1998--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/lispref/errors.texi b/doc/lispref/errors.texi index cd8694be8a3..f30e6634a73 100644 --- a/doc/lispref/errors.texi +++ b/doc/lispref/errors.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1993, 1999, 2001--2020 Free Software Foundation, +@c Copyright (C) 1990--1993, 1999, 2001--2021 Free Software Foundation, @c Inc. @c See the file elisp.texi for copying conditions. @node Standard Errors diff --git a/doc/lispref/eval.texi b/doc/lispref/eval.texi index 39f342a798b..80e038c96d9 100644 --- a/doc/lispref/eval.texi +++ b/doc/lispref/eval.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1994, 1998, 2001--2020 Free Software Foundation, +@c Copyright (C) 1990--1994, 1998, 2001--2021 Free Software Foundation, @c Inc. @c See the file elisp.texi for copying conditions. @node Evaluation diff --git a/doc/lispref/files.texi b/doc/lispref/files.texi index 6ca2834fbd4..5310c8837d6 100644 --- a/doc/lispref/files.texi +++ b/doc/lispref/files.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Files diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index ae61b269520..87b94ffafb0 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Frames diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index 8458bebbb5c..617cb9f4fc1 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -1,6 +1,6 @@ @c -*- mode: texinfo; coding: utf-8 -*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Functions diff --git a/doc/lispref/hash.texi b/doc/lispref/hash.texi index 12781c6cb95..8781fad30cd 100644 --- a/doc/lispref/hash.texi +++ b/doc/lispref/hash.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1999, 2001--2020 Free Software Foundation, Inc. +@c Copyright (C) 1999, 2001--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Hash Tables @chapter Hash Tables diff --git a/doc/lispref/help.texi b/doc/lispref/help.texi index 9b3c4fcb23d..5fb1532c409 100644 --- a/doc/lispref/help.texi +++ b/doc/lispref/help.texi @@ -1,6 +1,6 @@ @c -*- mode: texinfo; coding: utf-8 -*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Documentation diff --git a/doc/lispref/hooks.texi b/doc/lispref/hooks.texi index a8b4d5619d3..b1c7e613719 100644 --- a/doc/lispref/hooks.texi +++ b/doc/lispref/hooks.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1993, 1998, 2001--2020 Free Software Foundation, +@c Copyright (C) 1990--1993, 1998, 2001--2021 Free Software Foundation, @c Inc. @c See the file elisp.texi for copying conditions. @node Standard Hooks diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi index e5b535bdab2..afd6c4c8d9f 100644 --- a/doc/lispref/internals.texi +++ b/doc/lispref/internals.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1993, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1993, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node GNU Emacs Internals diff --git a/doc/lispref/intro.texi b/doc/lispref/intro.texi index 0dc7c804e72..79d8e978661 100644 --- a/doc/lispref/intro.texi +++ b/doc/lispref/intro.texi @@ -1,6 +1,6 @@ @c -*-coding: utf-8-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1994, 2001--2020 Free Software Foundation, Inc. +@c Copyright (C) 1990--1994, 2001--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Introduction diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi index 1e81fb1dc52..d6dcc432f84 100644 --- a/doc/lispref/keymaps.texi +++ b/doc/lispref/keymaps.texi @@ -1,6 +1,6 @@ @c -*- mode: texinfo; coding: utf-8 -*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1994, 1998--2020 Free Software Foundation, Inc. +@c Copyright (C) 1990--1994, 1998--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Keymaps @chapter Keymaps diff --git a/doc/lispref/lay-flat.texi b/doc/lispref/lay-flat.texi index 3cca5189b1b..4ea58e61726 100644 --- a/doc/lispref/lay-flat.texi +++ b/doc/lispref/lay-flat.texi @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 2001--2020 Free Software Foundation, Inc. +@c Copyright (C) 2001--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @c @comment %**start of header diff --git a/doc/lispref/lists.texi b/doc/lispref/lists.texi index ae793d5e15e..c54496f6168 100644 --- a/doc/lispref/lists.texi +++ b/doc/lispref/lists.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Lists diff --git a/doc/lispref/loading.texi b/doc/lispref/loading.texi index 2739d10ece9..dd2476a2d59 100644 --- a/doc/lispref/loading.texi +++ b/doc/lispref/loading.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Loading diff --git a/doc/lispref/macros.texi b/doc/lispref/macros.texi index eeb4152a5ba..e56a85c7478 100644 --- a/doc/lispref/macros.texi +++ b/doc/lispref/macros.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998, 2001--2020 Free Software Foundation, +@c Copyright (C) 1990--1995, 1998, 2001--2021 Free Software Foundation, @c Inc. @c See the file elisp.texi for copying conditions. @node Macros diff --git a/doc/lispref/maps.texi b/doc/lispref/maps.texi index 1e84f9b3bb1..aea02424086 100644 --- a/doc/lispref/maps.texi +++ b/doc/lispref/maps.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1993, 1999, 2001--2020 Free Software Foundation, +@c Copyright (C) 1990--1993, 1999, 2001--2021 Free Software Foundation, @c Inc. @c See the file elisp.texi for copying conditions. @node Standard Keymaps diff --git a/doc/lispref/markers.texi b/doc/lispref/markers.texi index 686b87771fd..cdd0938b458 100644 --- a/doc/lispref/markers.texi +++ b/doc/lispref/markers.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Markers diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi index b955355dc0a..726b786905f 100644 --- a/doc/lispref/minibuf.texi +++ b/doc/lispref/minibuf.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Minibuffers diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index de40fa7f963..27ca5441f4a 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Modes diff --git a/doc/lispref/nonascii.texi b/doc/lispref/nonascii.texi index c6c78ec096e..41ef88d86c5 100644 --- a/doc/lispref/nonascii.texi +++ b/doc/lispref/nonascii.texi @@ -1,6 +1,6 @@ @c -*- mode: texinfo; coding: utf-8 -*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1998--1999, 2001--2020 Free Software Foundation, Inc. +@c Copyright (C) 1998--1999, 2001--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Non-ASCII Characters @chapter Non-@acronym{ASCII} Characters diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi index f018ef4c7c0..5c6a98c0e08 100644 --- a/doc/lispref/numbers.texi +++ b/doc/lispref/numbers.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Numbers diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi index 5c5f89eb433..9b443865699 100644 --- a/doc/lispref/objects.texi +++ b/doc/lispref/objects.texi @@ -1,6 +1,6 @@ @c -*- mode: texinfo; coding: utf-8 -*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Lisp Data Types diff --git a/doc/lispref/os.texi b/doc/lispref/os.texi index dad5d9966f6..f632347a3a8 100644 --- a/doc/lispref/os.texi +++ b/doc/lispref/os.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node System Interface diff --git a/doc/lispref/package.texi b/doc/lispref/package.texi index af87479c7d2..e8aaa3ae1d1 100644 --- a/doc/lispref/package.texi +++ b/doc/lispref/package.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 2010--2020 Free Software Foundation, Inc. +@c Copyright (C) 2010--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Packaging @chapter Preparing Lisp code for distribution diff --git a/doc/lispref/positions.texi b/doc/lispref/positions.texi index d7856ce73e3..ffb5911092e 100644 --- a/doc/lispref/positions.texi +++ b/doc/lispref/positions.texi @@ -1,6 +1,6 @@ @c -*- mode: texinfo; coding: utf-8 -*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--2020 Free Software Foundation, Inc. +@c Copyright (C) 1990--1995, 1998--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Positions @chapter Positions diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi index 94818beb4c9..42f436501fd 100644 --- a/doc/lispref/processes.texi +++ b/doc/lispref/processes.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Processes diff --git a/doc/lispref/records.texi b/doc/lispref/records.texi index f7a21a4b8c6..573caf1672d 100644 --- a/doc/lispref/records.texi +++ b/doc/lispref/records.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 2017--2020 Free Software Foundation, Inc. +@c Copyright (C) 2017--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Records @chapter Records diff --git a/doc/lispref/searching.texi b/doc/lispref/searching.texi index c8a12bdd66b..8b900da616f 100644 --- a/doc/lispref/searching.texi +++ b/doc/lispref/searching.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Searching and Matching diff --git a/doc/lispref/sequences.texi b/doc/lispref/sequences.texi index 952834bd4e3..bdf0b95d810 100644 --- a/doc/lispref/sequences.texi +++ b/doc/lispref/sequences.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Sequences Arrays Vectors diff --git a/doc/lispref/streams.texi b/doc/lispref/streams.texi index f27eb0a19a5..7ef3500e359 100644 --- a/doc/lispref/streams.texi +++ b/doc/lispref/streams.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1994, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1994, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Read and Print diff --git a/doc/lispref/strings.texi b/doc/lispref/strings.texi index 0dc47f30c43..0f0ce13dfe4 100644 --- a/doc/lispref/strings.texi +++ b/doc/lispref/strings.texi @@ -1,6 +1,6 @@ @c -*- mode: texinfo; coding: utf-8 -*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Strings and Characters diff --git a/doc/lispref/symbols.texi b/doc/lispref/symbols.texi index d6b0494d1ad..ed36f5139a8 100644 --- a/doc/lispref/symbols.texi +++ b/doc/lispref/symbols.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Symbols diff --git a/doc/lispref/syntax.texi b/doc/lispref/syntax.texi index b99b5de0b31..b4bd48771f0 100644 --- a/doc/lispref/syntax.texi +++ b/doc/lispref/syntax.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Syntax Tables diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index c4e92bdcedb..06975f76706 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--2020 Free Software Foundation, Inc. +@c Copyright (C) 1990--1995, 1998--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Text @chapter Text diff --git a/doc/lispref/threads.texi b/doc/lispref/threads.texi index de19c0604c2..a06bd3e801b 100644 --- a/doc/lispref/threads.texi +++ b/doc/lispref/threads.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 2012--2020 Free Software Foundation, Inc. +@c Copyright (C) 2012--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Threads @chapter Threads diff --git a/doc/lispref/tips.texi b/doc/lispref/tips.texi index 4d6dcb9f834..aac82e8265c 100644 --- a/doc/lispref/tips.texi +++ b/doc/lispref/tips.texi @@ -1,6 +1,6 @@ @c -*- mode: texinfo; coding: utf-8 -*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1993, 1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1993, 1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Tips diff --git a/doc/lispref/two-volume-cross-refs.txt b/doc/lispref/two-volume-cross-refs.txt index 63f55634649..ad13d98dd97 100644 --- a/doc/lispref/two-volume-cross-refs.txt +++ b/doc/lispref/two-volume-cross-refs.txt @@ -1,4 +1,4 @@ -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. See end for copying conditions. Two Volume Cross References diff --git a/doc/lispref/two-volume.make b/doc/lispref/two-volume.make index 133c50be23e..cf612b12573 100644 --- a/doc/lispref/two-volume.make +++ b/doc/lispref/two-volume.make @@ -1,4 +1,4 @@ -# Copyright (C) 2007-2020 Free Software Foundation, Inc. +# Copyright (C) 2007-2021 Free Software Foundation, Inc. # See end for copying conditions. # although it would be nice to use tex rather than pdftex to avoid diff --git a/doc/lispref/variables.texi b/doc/lispref/variables.texi index abcd4bbd0f7..230f0445dda 100644 --- a/doc/lispref/variables.texi +++ b/doc/lispref/variables.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--2020 Free Software Foundation, Inc. +@c Copyright (C) 1990--1995, 1998--2021 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Variables @chapter Variables diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index a19f123c658..38b35e7d5f5 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990--1995, 1998--1999, 2001--2020 Free Software +@c Copyright (C) 1990--1995, 1998--1999, 2001--2021 Free Software @c Foundation, Inc. @c See the file elisp.texi for copying conditions. @node Windows diff --git a/doc/man/ChangeLog.1 b/doc/man/ChangeLog.1 index 5e23bb3e305..9ad144a457a 100644 --- a/doc/man/ChangeLog.1 +++ b/doc/man/ChangeLog.1 @@ -176,7 +176,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 2007-2020 Free Software Foundation, Inc. + Copyright (C) 2007-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/doc/man/ebrowse.1 b/doc/man/ebrowse.1 index 686658b20f8..b56d7a06c91 100644 --- a/doc/man/ebrowse.1 +++ b/doc/man/ebrowse.1 @@ -82,7 +82,7 @@ should give you access to the complete manual. was written by Gerd Moellmann. . .SH COPYING -Copyright 2008-2020 Free Software Foundation, Inc. +Copyright 2008-2021 Free Software Foundation, Inc. .PP Permission is granted to make and distribute verbatim copies of this document provided the copyright notice and this permission notice are diff --git a/doc/man/emacs.1.in b/doc/man/emacs.1.in index 5a164e98cd3..73563aae705 100644 --- a/doc/man/emacs.1.in +++ b/doc/man/emacs.1.in @@ -657,7 +657,7 @@ For detailed credits and acknowledgments, see the GNU Emacs manual. . . .SH COPYING -Copyright 1995, 1999-2020 Free Software Foundation, Inc. +Copyright 1995, 1999-2021 Free Software Foundation, Inc. .PP Permission is granted to make and distribute verbatim copies of this document provided the copyright notice and this permission notice are diff --git a/doc/man/etags.1 b/doc/man/etags.1 index e10fb840caf..a521574aa29 100644 --- a/doc/man/etags.1 +++ b/doc/man/etags.1 @@ -281,7 +281,7 @@ Stallman. .BR vi ( 1 ). .SH COPYING -Copyright 1992, 1999, 2001-2020 Free Software Foundation, Inc. +Copyright 1992, 1999, 2001-2021 Free Software Foundation, Inc. .PP Permission is granted to make and distribute verbatim copies of this document provided the copyright notice and this permission notice are diff --git a/doc/misc/ChangeLog.1 b/doc/misc/ChangeLog.1 index f74e51f400e..c050e5d4cb8 100644 --- a/doc/misc/ChangeLog.1 +++ b/doc/misc/ChangeLog.1 @@ -12116,7 +12116,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 1993-1999, 2001-2020 Free Software Foundation, Inc. + Copyright (C) 1993-1999, 2001-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in index 7f536ad9529..21d6041da51 100644 --- a/doc/misc/Makefile.in +++ b/doc/misc/Makefile.in @@ -1,6 +1,6 @@ ### @configure_input@ -# Copyright (C) 1994, 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1994, 1996-2021 Free Software Foundation, Inc. # This file is part of GNU Emacs. diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi index 61dc62e7711..636755b2a71 100644 --- a/doc/misc/auth.texi +++ b/doc/misc/auth.texi @@ -9,7 +9,7 @@ @copying This file describes the Emacs auth-source library. -Copyright @copyright{} 2008--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2008--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/autotype.texi b/doc/misc/autotype.texi index 7b7f8827a79..72ba73697d3 100644 --- a/doc/misc/autotype.texi +++ b/doc/misc/autotype.texi @@ -11,7 +11,7 @@ @c @cindex autotypist @copying -Copyright @copyright{} 1994--1995, 1999, 2001--2020 Free Software +Copyright @copyright{} 1994--1995, 1999, 2001--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/bovine.texi b/doc/misc/bovine.texi index 8ee985046d9..780f0addb59 100644 --- a/doc/misc/bovine.texi +++ b/doc/misc/bovine.texi @@ -24,7 +24,7 @@ @c %**end of header @copying -Copyright @copyright{} 1999--2004, 2012--2020 Free Software Foundation, +Copyright @copyright{} 1999--2004, 2012--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/calc.texi b/doc/misc/calc.texi index f9196f808e7..fbac2f6ba1b 100644 --- a/doc/misc/calc.texi +++ b/doc/misc/calc.texi @@ -95,7 +95,7 @@ This file documents Calc, the GNU Emacs calculator, included with GNU Emacs @value{EMACSVER}. @end ifnotinfo -Copyright @copyright{} 1990--1991, 2001--2020 Free Software Foundation, +Copyright @copyright{} 1990--1991, 2001--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/cc-mode.texi b/doc/misc/cc-mode.texi index 544ff853351..8e7f46fbc1d 100644 --- a/doc/misc/cc-mode.texi +++ b/doc/misc/cc-mode.texi @@ -167,7 +167,7 @@ CC Mode @copying This manual is for CC Mode in Emacs. -Copyright @copyright{} 1995--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1995--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi index b5f26e004b0..bcec3e4221a 100644 --- a/doc/misc/cl.texi +++ b/doc/misc/cl.texi @@ -7,7 +7,7 @@ @copying This file documents the GNU Emacs Common Lisp emulation package. -Copyright @copyright{} 1993, 2001--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1993, 2001--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/dbus.texi b/doc/misc/dbus.texi index 167d2bd5ac1..fad79d50c14 100644 --- a/doc/misc/dbus.texi +++ b/doc/misc/dbus.texi @@ -10,7 +10,7 @@ @syncodeindex fn cp @copying -Copyright @copyright{} 2007--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2007--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/dired-x.texi b/doc/misc/dired-x.texi index 5965da16bb7..4dad661d459 100644 --- a/doc/misc/dired-x.texi +++ b/doc/misc/dired-x.texi @@ -20,7 +20,7 @@ @comment %**end of header (This is for running Texinfo on a region.) @copying -Copyright @copyright{} 1994--1995, 1999, 2001--2020 Free Software +Copyright @copyright{} 1994--1995, 1999, 2001--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/ebrowse.texi b/doc/misc/ebrowse.texi index 1751a775d71..0f29f58b403 100644 --- a/doc/misc/ebrowse.texi +++ b/doc/misc/ebrowse.texi @@ -11,7 +11,7 @@ @copying This file documents Ebrowse, a C++ class browser for GNU Emacs. -Copyright @copyright{} 2000--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2000--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/ede.texi b/doc/misc/ede.texi index 63e3595a509..a53f879c961 100644 --- a/doc/misc/ede.texi +++ b/doc/misc/ede.texi @@ -6,7 +6,7 @@ @copying This file describes EDE, the Emacs Development Environment. -Copyright @copyright{} 1998--2001, 2004--2005, 2008--2020 Free Software +Copyright @copyright{} 1998--2001, 2004--2005, 2008--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/ediff.texi b/doc/misc/ediff.texi index 99ba89b0d7f..2c1a66c673b 100644 --- a/doc/misc/ediff.texi +++ b/doc/misc/ediff.texi @@ -26,7 +26,7 @@ This file documents Ediff, a comprehensive visual interface to Unix diff and patch utilities. -Copyright @copyright{} 1995--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1995--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/edt.texi b/doc/misc/edt.texi index aeb5a261e49..d4f05dc3d1a 100644 --- a/doc/misc/edt.texi +++ b/doc/misc/edt.texi @@ -6,7 +6,7 @@ @copying This file documents the EDT emulation package for Emacs. -Copyright @copyright{} 1986, 1992, 1994--1995, 1999--2020 Free Software +Copyright @copyright{} 1986, 1992, 1994--1995, 1999--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/efaq-w32.texi b/doc/misc/efaq-w32.texi index bbfc86b111e..8803b857fd0 100644 --- a/doc/misc/efaq-w32.texi +++ b/doc/misc/efaq-w32.texi @@ -15,7 +15,7 @@ Answers to Frequently asked Questions about using Emacs on Microsoft Windows. @include emacsver.texi @copying -Copyright @copyright{} 2008, 2010--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2008, 2010--2021 Free Software Foundation, Inc. @quotation This list of frequently asked questions about GNU Emacs on MS Windows diff --git a/doc/misc/efaq.texi b/doc/misc/efaq.texi index e9703e75197..fdfde96a991 100644 --- a/doc/misc/efaq.texi +++ b/doc/misc/efaq.texi @@ -12,7 +12,7 @@ @c appreciate a notice if you do). @copying -Copyright @copyright{} 2001--2020 Free Software Foundation, Inc.@* +Copyright @copyright{} 2001--2021 Free Software Foundation, Inc.@* Copyright @copyright{} 1994, 1995, 1996, 1997, 1998, 1999, 2000 Reuven M. Lerner@* Copyright @copyright{} 1992, 1993 Steven Byrnes@* diff --git a/doc/misc/eieio.texi b/doc/misc/eieio.texi index aceaff051e3..4e83ea53819 100644 --- a/doc/misc/eieio.texi +++ b/doc/misc/eieio.texi @@ -12,7 +12,7 @@ @copying This manual documents EIEIO, an object framework for Emacs Lisp. -Copyright @copyright{} 2007--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2007--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/emacs-gnutls.texi b/doc/misc/emacs-gnutls.texi index 7c57cc032c7..c459bb018da 100644 --- a/doc/misc/emacs-gnutls.texi +++ b/doc/misc/emacs-gnutls.texi @@ -9,7 +9,7 @@ @copying This file describes the Emacs GnuTLS integration. -Copyright @copyright{} 2012--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2012--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/emacs-mime.texi b/doc/misc/emacs-mime.texi index 42a7750b9ac..8de023daa90 100644 --- a/doc/misc/emacs-mime.texi +++ b/doc/misc/emacs-mime.texi @@ -10,7 +10,7 @@ @copying This file documents the Emacs MIME interface functionality. -Copyright @copyright{} 1998--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1998--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/epa.texi b/doc/misc/epa.texi index fa1833a3da6..cca0d300fa7 100644 --- a/doc/misc/epa.texi +++ b/doc/misc/epa.texi @@ -10,7 +10,7 @@ @copying This file describes EasyPG Assistant @value{VERSION}. -Copyright @copyright{} 2007--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2007--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/erc.texi b/doc/misc/erc.texi index a555b768cce..d39613c11a9 100644 --- a/doc/misc/erc.texi +++ b/doc/misc/erc.texi @@ -10,7 +10,7 @@ @copying This manual is for ERC as distributed with Emacs @value{EMACSVER}. -Copyright @copyright{} 2005--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2005--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/ert.texi b/doc/misc/ert.texi index bc56a4af99f..a4e2cb506a3 100644 --- a/doc/misc/ert.texi +++ b/doc/misc/ert.texi @@ -15,7 +15,7 @@ @end direntry @copying -Copyright @copyright{} 2008, 2010--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2008, 2010--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi index 8e5ec25d253..0d3d3891501 100644 --- a/doc/misc/eshell.texi +++ b/doc/misc/eshell.texi @@ -10,7 +10,7 @@ @copying This manual is for Eshell, the Emacs shell. -Copyright @copyright{} 1999--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1999--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/eudc.texi b/doc/misc/eudc.texi index 701340ed6e2..c794bc3f472 100644 --- a/doc/misc/eudc.texi +++ b/doc/misc/eudc.texi @@ -14,7 +14,7 @@ This file documents EUDC version 1.40.0. EUDC is the Emacs Unified Directory Client, a common interface to directory servers and contact information. -Copyright @copyright{} 1998, 2000--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1998, 2000--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi index faccd96f723..6b4f2d17036 100644 --- a/doc/misc/eww.texi +++ b/doc/misc/eww.texi @@ -8,7 +8,7 @@ @copying This file documents the GNU Emacs Web Wowser (EWW) package. -Copyright @copyright{} 2014--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2014--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/flymake.texi b/doc/misc/flymake.texi index b4757938e99..1cd01c524a4 100644 --- a/doc/misc/flymake.texi +++ b/doc/misc/flymake.texi @@ -14,7 +14,7 @@ This manual is for GNU Flymake (version @value{VERSION}, @value{UPDATED}), which is a universal on-the-fly syntax checker for GNU Emacs. -Copyright @copyright{} 2004--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2004--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/forms.texi b/doc/misc/forms.texi index 1b94bf90f66..04f8741fcd2 100644 --- a/doc/misc/forms.texi +++ b/doc/misc/forms.texi @@ -19,7 +19,7 @@ @copying This file documents Forms mode, a form-editing major mode for GNU Emacs. -Copyright @copyright{} 1989, 1997, 2001--2020 Free Software Foundation, +Copyright @copyright{} 1989, 1997, 2001--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/gnus-coding.texi b/doc/misc/gnus-coding.texi index 55320bf4c32..49adb613514 100644 --- a/doc/misc/gnus-coding.texi +++ b/doc/misc/gnus-coding.texi @@ -8,7 +8,7 @@ @syncodeindex pg cp @copying -Copyright @copyright{} 2004--2005, 2007--2020 Free Software Foundation, +Copyright @copyright{} 2004--2005, 2007--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/gnus-faq.texi b/doc/misc/gnus-faq.texi index 9c1d2d0160a..96503138e56 100644 --- a/doc/misc/gnus-faq.texi +++ b/doc/misc/gnus-faq.texi @@ -1,7 +1,7 @@ @c \input texinfo @c -*-texinfo-*- @c Uncomment 1st line before texing this file alone. @c %**start of header -@c Copyright (C) 1995, 2001--2020 Free Software Foundation, Inc. +@c Copyright (C) 1995, 2001--2021 Free Software Foundation, Inc. @c @c @setfilename gnus-faq.info @c @settitle Frequently Asked Questions diff --git a/doc/misc/gnus.texi b/doc/misc/gnus.texi index a96be30cd61..62b6f435efd 100644 --- a/doc/misc/gnus.texi +++ b/doc/misc/gnus.texi @@ -8,7 +8,7 @@ @syncodeindex pg cp @copying -Copyright @copyright{} 1995--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1995--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/htmlfontify.texi b/doc/misc/htmlfontify.texi index fc4f32020e9..1674565cdac 100644 --- a/doc/misc/htmlfontify.texi +++ b/doc/misc/htmlfontify.texi @@ -10,7 +10,7 @@ This manual documents Htmlfontify, a source code -> crosslinked + formatted + syntax colorized html transformer. -Copyright @copyright{} 2002--2003, 2013--2020 Free Software Foundation, +Copyright @copyright{} 2002--2003, 2013--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/idlwave.texi b/doc/misc/idlwave.texi index 547b16622fc..1693dfe7237 100644 --- a/doc/misc/idlwave.texi +++ b/doc/misc/idlwave.texi @@ -23,7 +23,7 @@ Emacs, and interacting with an IDL shell run as a subprocess. This is edition @value{EDITION} of the IDLWAVE User Manual for IDLWAVE @value{VERSION}. -Copyright @copyright{} 1999--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1999--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/ido.texi b/doc/misc/ido.texi index 74d0bdd29fc..e58b07f6398 100644 --- a/doc/misc/ido.texi +++ b/doc/misc/ido.texi @@ -7,7 +7,7 @@ @copying This file documents the Ido package for GNU Emacs. -Copyright @copyright{} 2013--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2013--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/info.texi b/doc/misc/info.texi index 85e04a99608..27c00f39257 100644 --- a/doc/misc/info.texi +++ b/doc/misc/info.texi @@ -15,7 +15,7 @@ This file describes how to use Info, the menu-driven GNU documentation system. -Copyright @copyright{} 1989, 1992, 1996--2020 Free Software Foundation, +Copyright @copyright{} 1989, 1992, 1996--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/mairix-el.texi b/doc/misc/mairix-el.texi index 30f5f006775..a571c744870 100644 --- a/doc/misc/mairix-el.texi +++ b/doc/misc/mairix-el.texi @@ -5,7 +5,7 @@ @include docstyle.texi @copying -Copyright @copyright{} 2008--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2008--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/message.texi b/doc/misc/message.texi index bdd31b1fe49..286ab72579f 100644 --- a/doc/misc/message.texi +++ b/doc/misc/message.texi @@ -9,7 +9,7 @@ @copying This file documents Message, the Emacs message composition mode. -Copyright @copyright{} 1996--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1996--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/mh-e.texi b/doc/misc/mh-e.texi index 962f22af5d2..308ea3f34c9 100644 --- a/doc/misc/mh-e.texi +++ b/doc/misc/mh-e.texi @@ -25,7 +25,7 @@ This is version @value{VERSION}@value{EDITION} of @cite{The MH-E Manual}, last updated @value{UPDATED}. -Copyright @copyright{} 1995, 2001--2003, 2005--2020 Free Software +Copyright @copyright{} 1995, 2001--2003, 2005--2021 Free Software Foundation, Inc. @c This dual license has been agreed upon by the FSF. diff --git a/doc/misc/newsticker.texi b/doc/misc/newsticker.texi index f144975451c..5d052cc27dc 100644 --- a/doc/misc/newsticker.texi +++ b/doc/misc/newsticker.texi @@ -15,7 +15,7 @@ This manual documents Newsticker, a feed reader for Emacs. It corresponds to Emacs version @value{EMACSVER}. @noindent -Copyright @copyright{} 2004--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2004--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/nxml-mode.texi b/doc/misc/nxml-mode.texi index 1741222d4b0..3671ac8f3d2 100644 --- a/doc/misc/nxml-mode.texi +++ b/doc/misc/nxml-mode.texi @@ -9,7 +9,7 @@ This manual documents nXML mode, an Emacs major mode for editing XML with RELAX NG support. -Copyright @copyright{} 2007--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2007--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/octave-mode.texi b/doc/misc/octave-mode.texi index 2005a8e181d..1adc2689697 100644 --- a/doc/misc/octave-mode.texi +++ b/doc/misc/octave-mode.texi @@ -6,7 +6,7 @@ @c %**end of header @copying -Copyright @copyright{} 1996--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1996--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/org.texi b/doc/misc/org.texi index 7766b300c4f..c127678fd02 100644 --- a/doc/misc/org.texi +++ b/doc/misc/org.texi @@ -15,7 +15,7 @@ @copying This manual is for Org version 9.4. -Copyright @copyright{} 2004--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2004--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/pcl-cvs.texi b/doc/misc/pcl-cvs.texi index c3df33eb9aa..afd82232199 100644 --- a/doc/misc/pcl-cvs.texi +++ b/doc/misc/pcl-cvs.texi @@ -7,7 +7,7 @@ @c %**end of header @copying -Copyright @copyright{} 1991--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1991--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/pgg.texi b/doc/misc/pgg.texi index 5daa16fb27e..7a956ab46a4 100644 --- a/doc/misc/pgg.texi +++ b/doc/misc/pgg.texi @@ -10,7 +10,7 @@ This file describes PGG @value{VERSION}, an Emacs interface to various PGP implementations. -Copyright @copyright{} 2001, 2003--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2001, 2003--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/rcirc.texi b/doc/misc/rcirc.texi index 75f9cc63a2e..85eab4c443e 100644 --- a/doc/misc/rcirc.texi +++ b/doc/misc/rcirc.texi @@ -6,7 +6,7 @@ @c %**end of header @copying -Copyright @copyright{} 2006--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2006--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/reftex.texi b/doc/misc/reftex.texi index 013c5639a1e..94c35e45615 100644 --- a/doc/misc/reftex.texi +++ b/doc/misc/reftex.texi @@ -46,7 +46,7 @@ This manual documents @RefTeX{} (version @value{VERSION}), a package to do labels, references, citations and indices for LaTeX documents with Emacs. -Copyright @copyright{} 1997--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1997--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/remember.texi b/doc/misc/remember.texi index df845372f4d..80065be0a16 100644 --- a/doc/misc/remember.texi +++ b/doc/misc/remember.texi @@ -9,7 +9,7 @@ @copying This manual is for Remember Mode, version 2.0 -Copyright @copyright{} 2001, 2004--2005, 2007--2020 Free Software +Copyright @copyright{} 2001, 2004--2005, 2007--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/sasl.texi b/doc/misc/sasl.texi index a25f98566c7..847ad5ed763 100644 --- a/doc/misc/sasl.texi +++ b/doc/misc/sasl.texi @@ -9,7 +9,7 @@ @copying This file describes the Emacs SASL library, version @value{VERSION}. -Copyright @copyright{} 2000, 2004--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2000, 2004--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/sc.texi b/doc/misc/sc.texi index ccf5b9efb05..3f5b5917a0b 100644 --- a/doc/misc/sc.texi +++ b/doc/misc/sc.texi @@ -15,7 +15,7 @@ This document describes Supercite, an Emacs package for citing and attributing replies to mail and news messages. -Copyright @copyright{} 1993, 2001--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1993, 2001--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/sem-user.texi b/doc/misc/sem-user.texi index c02887d104a..fd4a183c070 100644 --- a/doc/misc/sem-user.texi +++ b/doc/misc/sem-user.texi @@ -1,5 +1,5 @@ @c This is part of the Semantic manual. -@c Copyright (C) 1999--2005, 2007, 2009--2020 Free Software Foundation, +@c Copyright (C) 1999--2005, 2007, 2009--2021 Free Software Foundation, @c Inc. @c See file semantic.texi for copying conditions. diff --git a/doc/misc/semantic.texi b/doc/misc/semantic.texi index c2b2be2282e..3c4f2f0c0e5 100644 --- a/doc/misc/semantic.texi +++ b/doc/misc/semantic.texi @@ -25,7 +25,7 @@ @copying This manual documents the Semantic library and utilities. -Copyright @copyright{} 1999--2005, 2007, 2009--2020 Free Software +Copyright @copyright{} 1999--2005, 2007, 2009--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/ses.texi b/doc/misc/ses.texi index 6edd6a65762..b529f0b836c 100644 --- a/doc/misc/ses.texi +++ b/doc/misc/ses.texi @@ -12,7 +12,7 @@ @copying This file documents @acronym{SES}: the Simple Emacs Spreadsheet. -Copyright @copyright{} 2002--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2002--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/sieve.texi b/doc/misc/sieve.texi index 0813caebd0f..c30409fc32c 100644 --- a/doc/misc/sieve.texi +++ b/doc/misc/sieve.texi @@ -10,7 +10,7 @@ @copying This file documents the Emacs Sieve package, for server-side mail filtering. -Copyright @copyright{} 2001--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2001--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/smtpmail.texi b/doc/misc/smtpmail.texi index 99612d5c8fb..07fb71eaddd 100644 --- a/doc/misc/smtpmail.texi +++ b/doc/misc/smtpmail.texi @@ -4,7 +4,7 @@ @include docstyle.texi @syncodeindex vr fn @copying -Copyright @copyright{} 2003--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2003--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/speedbar.texi b/doc/misc/speedbar.texi index 57ad0220103..1190d3a97ae 100644 --- a/doc/misc/speedbar.texi +++ b/doc/misc/speedbar.texi @@ -5,7 +5,7 @@ @syncodeindex fn cp @copying -Copyright @copyright{} 1999--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1999--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/srecode.texi b/doc/misc/srecode.texi index 79734685e9d..a0e999b6812 100644 --- a/doc/misc/srecode.texi +++ b/doc/misc/srecode.texi @@ -16,7 +16,7 @@ @c %**end of header @copying -Copyright @copyright{} 2007--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2007--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex index 254fab92c86..2a44954de16 100644 --- a/doc/misc/texinfo.tex +++ b/doc/misc/texinfo.tex @@ -5,7 +5,7 @@ % \def\texinfoversion{2019-09-24.13} % -% Copyright 1985--1986, 1988, 1990--2020 Free Software Foundation, Inc. +% Copyright 1985--1986, 1988, 1990--2021 Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as diff --git a/doc/misc/todo-mode.texi b/doc/misc/todo-mode.texi index 428df56f6ea..dbd7f3d02f7 100644 --- a/doc/misc/todo-mode.texi +++ b/doc/misc/todo-mode.texi @@ -9,7 +9,7 @@ @c %**end of header @copying -Copyright @copyright{} 2013--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2013--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index 660237bcc5c..cabbc9d7269 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -12,7 +12,7 @@ @footnotestyle end @copying -Copyright @copyright{} 1999--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1999--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/trampver.texi b/doc/misc/trampver.texi index 137d130aa89..86eed6dcdfe 100644 --- a/doc/misc/trampver.texi +++ b/doc/misc/trampver.texi @@ -2,7 +2,7 @@ @c texi/trampver.texi. Generated from trampver.texi.in by configure. @c This is part of the Emacs manual. -@c Copyright (C) 2003--2020 Free Software Foundation, Inc. +@c Copyright (C) 2003--2021 Free Software Foundation, Inc. @c See file doclicense.texi for copying conditions. @c In the Tramp GIT, the version numbers are auto-frobbed from diff --git a/doc/misc/url.texi b/doc/misc/url.texi index 8d9b1024070..66af77384a0 100644 --- a/doc/misc/url.texi +++ b/doc/misc/url.texi @@ -21,7 +21,7 @@ @copying This is the manual for the @code{url} Emacs Lisp library. -Copyright @copyright{} 1993--1999, 2002, 2004--2020 Free Software +Copyright @copyright{} 1993--1999, 2002, 2004--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/vhdl-mode.texi b/doc/misc/vhdl-mode.texi index 527302e0cb0..fef98a74636 100644 --- a/doc/misc/vhdl-mode.texi +++ b/doc/misc/vhdl-mode.texi @@ -10,7 +10,7 @@ @copying This file documents VHDL Mode, an Emacs mode for editing VHDL code. -Copyright @copyright{} 1995--2008, 2010, 2012, 2015--2020 Free Software +Copyright @copyright{} 1995--2008, 2010, 2012, 2015--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/vip.texi b/doc/misc/vip.texi index fe50309dd90..92c76ad2518 100644 --- a/doc/misc/vip.texi +++ b/doc/misc/vip.texi @@ -4,7 +4,7 @@ @include docstyle.texi @copying -Copyright @copyright{} 1987, 2001--2020 Free Software Foundation, Inc. +Copyright @copyright{} 1987, 2001--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/viper.texi b/doc/misc/viper.texi index 9ce809e7d4d..341becfffb2 100644 --- a/doc/misc/viper.texi +++ b/doc/misc/viper.texi @@ -8,7 +8,7 @@ @include docstyle.texi @copying -Copyright @copyright{} 1995--1997, 2001--2020 Free Software Foundation, +Copyright @copyright{} 1995--1997, 2001--2021 Free Software Foundation, Inc. @quotation diff --git a/doc/misc/widget.texi b/doc/misc/widget.texi index 2dde6ce4d3c..6f0b63e5bf4 100644 --- a/doc/misc/widget.texi +++ b/doc/misc/widget.texi @@ -9,7 +9,7 @@ @c %**end of header @copying -Copyright @copyright{} 2000--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2000--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/doc/misc/wisent.texi b/doc/misc/wisent.texi index 8b6929be273..dc5b8e4d205 100644 --- a/doc/misc/wisent.texi +++ b/doc/misc/wisent.texi @@ -24,7 +24,7 @@ @c %**end of header @copying -Copyright @copyright{} 1988--1993, 1995, 1998--2004, 2007, 2012--2020 +Copyright @copyright{} 1988--1993, 1995, 1998--2004, 2007, 2012--2021 Free Software Foundation, Inc. @c Since we are both GNU manuals, we do not need to ack each other here. diff --git a/doc/misc/woman.texi b/doc/misc/woman.texi index a114415e3a8..4470afcad20 100644 --- a/doc/misc/woman.texi +++ b/doc/misc/woman.texi @@ -15,7 +15,7 @@ This file documents WoMan: A program to browse Unix manual pages ``W.O. (without) man''. -Copyright @copyright{} 2001--2020 Free Software Foundation, Inc. +Copyright @copyright{} 2001--2021 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document diff --git a/etc/CALC-NEWS b/etc/CALC-NEWS index a0b9cdf696e..da9ed66f15d 100644 --- a/etc/CALC-NEWS +++ b/etc/CALC-NEWS @@ -1,4 +1,4 @@ -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. See the end of the file for license conditions. Calc is an advanced desk calculator for GNU Emacs. diff --git a/etc/ChangeLog.1 b/etc/ChangeLog.1 index 1229b8fec15..1df90cb06a7 100644 --- a/etc/ChangeLog.1 +++ b/etc/ChangeLog.1 @@ -6891,7 +6891,7 @@ ;; coding: utf-8 ;; End: - Copyright (C) 1993-1999, 2001-2020 Free Software Foundation, Inc. + Copyright (C) 1993-1999, 2001-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/etc/DEBUG b/etc/DEBUG index 7fb7e447583..fae87261865 100644 --- a/etc/DEBUG +++ b/etc/DEBUG @@ -1,6 +1,6 @@ Debugging GNU Emacs -Copyright (C) 1985, 2000-2020 Free Software Foundation, Inc. +Copyright (C) 1985, 2000-2021 Free Software Foundation, Inc. See the end of the file for license conditions. ** Preliminaries diff --git a/etc/DISTRIB b/etc/DISTRIB index 767dac6a2ff..610c347289e 100644 --- a/etc/DISTRIB +++ b/etc/DISTRIB @@ -1,7 +1,7 @@ -*- text -*- GNU Emacs availability information -Copyright (C) 1986-1993, 1995, 1998, 2000-2020 Free Software Foundation, +Copyright (C) 1986-1993, 1995, 1998, 2000-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/etc/ERC-NEWS b/etc/ERC-NEWS index 78cb5401772..8c9306b5cac 100644 --- a/etc/ERC-NEWS +++ b/etc/ERC-NEWS @@ -1,6 +1,6 @@ ERC NEWS -*- outline -*- -Copyright (C) 2006-2020 Free Software Foundation, Inc. +Copyright (C) 2006-2021 Free Software Foundation, Inc. See the end of the file for license conditions. * For changes after ERC 5.3, see the main Emacs NEWS file diff --git a/etc/ETAGS.EBNF b/etc/ETAGS.EBNF index 04db4e3dc8a..c72ac6f721f 100644 --- a/etc/ETAGS.EBNF +++ b/etc/ETAGS.EBNF @@ -94,7 +94,7 @@ those. ===================== end of discussion of tag names ===================== -Copyright (C) 2002-2020 Free Software Foundation, Inc. +Copyright (C) 2002-2021 Free Software Foundation, Inc. COPYING PERMISSIONS: diff --git a/etc/ETAGS.README b/etc/ETAGS.README index 314e3215ab3..3c56021524f 100644 --- a/etc/ETAGS.README +++ b/etc/ETAGS.README @@ -28,7 +28,7 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2020 Free Software +Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2021 Free Software Foundation, Inc. This file is not considered part of GNU Emacs. diff --git a/etc/HELLO b/etc/HELLO index e0345cb7ab9..80f1f54cbe3 100644 --- a/etc/HELLO +++ b/etc/HELLO @@ -100,7 +100,7 @@ Telugu (తెలుగు) నమస్కారం unicode -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. This file is part of GNU Emacs. diff --git a/etc/MACHINES b/etc/MACHINES index 1bb244b49b0..b12ce644fe3 100644 --- a/etc/MACHINES +++ b/etc/MACHINES @@ -1,6 +1,6 @@ Emacs machines list -Copyright (C) 1989-1990, 1992-1993, 1998, 2001-2020 Free Software +Copyright (C) 1989-1990, 1992-1993, 1998, 2001-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/etc/MH-E-NEWS b/etc/MH-E-NEWS index 420ddd026f4..29c48c72147 100644 --- a/etc/MH-E-NEWS +++ b/etc/MH-E-NEWS @@ -1,6 +1,6 @@ * COPYRIGHT -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. See the end of the file for license conditions. * Changes in MH-E 8.6 diff --git a/etc/NEWS b/etc/NEWS index 4855cd3b61d..9232a308c57 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1,6 +1,6 @@ GNU Emacs NEWS -- history of user-visible changes. -Copyright (C) 2017-2020 Free Software Foundation, Inc. +Copyright (C) 2017-2021 Free Software Foundation, Inc. See the end of the file for license conditions. Please send Emacs bug reports to 'bug-gnu-emacs@gnu.org'. diff --git a/etc/NEWS.1-17 b/etc/NEWS.1-17 index c4ff83bb706..42a3ced1c3a 100644 --- a/etc/NEWS.1-17 +++ b/etc/NEWS.1-17 @@ -1,6 +1,6 @@ GNU Emacs NEWS -- history of user-visible changes. 26-Mar-1986 -Copyright (C) 1985-1986, 2006-2020 Free Software Foundation, Inc. +Copyright (C) 1985-1986, 2006-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/etc/NEWS.18 b/etc/NEWS.18 index e044f663c45..b11a189c30f 100644 --- a/etc/NEWS.18 +++ b/etc/NEWS.18 @@ -1,6 +1,6 @@ GNU Emacs NEWS -- history of user-visible changes. 17-Aug-1988 -Copyright (C) 1988, 2006-2020 Free Software Foundation, Inc. +Copyright (C) 1988, 2006-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/etc/NEWS.19 b/etc/NEWS.19 index d919608d270..43235e0e154 100644 --- a/etc/NEWS.19 +++ b/etc/NEWS.19 @@ -1,6 +1,6 @@ GNU Emacs NEWS -- history of user-visible changes. 1992. -Copyright (C) 1993-1995, 2001, 2006-2020 Free Software Foundation, Inc. +Copyright (C) 1993-1995, 2001, 2006-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/etc/NEWS.20 b/etc/NEWS.20 index 69ce24a301a..efd0e5d5c26 100644 --- a/etc/NEWS.20 +++ b/etc/NEWS.20 @@ -1,6 +1,6 @@ GNU Emacs NEWS -- history of user-visible changes. 2006-05-31 -Copyright (C) 1999-2001, 2006-2020 Free Software Foundation, Inc. +Copyright (C) 1999-2001, 2006-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/etc/NEWS.21 b/etc/NEWS.21 index 1228984fe8c..b9d59594a4f 100644 --- a/etc/NEWS.21 +++ b/etc/NEWS.21 @@ -1,6 +1,6 @@ GNU Emacs NEWS -- history of user-visible changes. 2006-05-31 -Copyright (C) 2000-2020 Free Software Foundation, Inc. +Copyright (C) 2000-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/etc/NEWS.22 b/etc/NEWS.22 index 4df1792fbc7..1f03dc3a134 100644 --- a/etc/NEWS.22 +++ b/etc/NEWS.22 @@ -1,6 +1,6 @@ GNU Emacs NEWS -- history of user-visible changes. -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. See the end of the file for license conditions. Please send Emacs bug reports to bug-gnu-emacs@gnu.org. diff --git a/etc/NEWS.23 b/etc/NEWS.23 index 331ed281a37..8611ba53d2e 100644 --- a/etc/NEWS.23 +++ b/etc/NEWS.23 @@ -1,6 +1,6 @@ GNU Emacs NEWS -- history of user-visible changes. -Copyright (C) 2007-2020 Free Software Foundation, Inc. +Copyright (C) 2007-2021 Free Software Foundation, Inc. See the end of the file for license conditions. Please send Emacs bug reports to bug-gnu-emacs@gnu.org. diff --git a/etc/NEWS.24 b/etc/NEWS.24 index 60c2b4dfc66..acf6219f74f 100644 --- a/etc/NEWS.24 +++ b/etc/NEWS.24 @@ -1,6 +1,6 @@ GNU Emacs NEWS -- history of user-visible changes. -Copyright (C) 2010-2020 Free Software Foundation, Inc. +Copyright (C) 2010-2021 Free Software Foundation, Inc. See the end of the file for license conditions. Please send Emacs bug reports to bug-gnu-emacs@gnu.org. diff --git a/etc/NEWS.25 b/etc/NEWS.25 index 8c04d940907..c533f277091 100644 --- a/etc/NEWS.25 +++ b/etc/NEWS.25 @@ -1,6 +1,6 @@ GNU Emacs NEWS -- history of user-visible changes. -Copyright (C) 2014-2020 Free Software Foundation, Inc. +Copyright (C) 2014-2021 Free Software Foundation, Inc. See the end of the file for license conditions. Please send Emacs bug reports to bug-gnu-emacs@gnu.org. diff --git a/etc/NEWS.26 b/etc/NEWS.26 index c6306a6d45c..05e86726251 100644 --- a/etc/NEWS.26 +++ b/etc/NEWS.26 @@ -1,6 +1,6 @@ GNU Emacs NEWS -- history of user-visible changes. -Copyright (C) 2016-2020 Free Software Foundation, Inc. +Copyright (C) 2016-2021 Free Software Foundation, Inc. See the end of the file for license conditions. Please send Emacs bug reports to 'bug-gnu-emacs@gnu.org'. diff --git a/etc/NEXTSTEP b/etc/NEXTSTEP index 77a1752a4a4..c99adcd6f5f 100644 --- a/etc/NEXTSTEP +++ b/etc/NEXTSTEP @@ -1,4 +1,4 @@ -Copyright (C) 2008-2020 Free Software Foundation, Inc. +Copyright (C) 2008-2021 Free Software Foundation, Inc. See the end of the file for license conditions. This file contains information about GNU Emacs on "Nextstep" platforms. diff --git a/etc/NXML-NEWS b/etc/NXML-NEWS index 5df9790c2f4..cdce6e72bab 100644 --- a/etc/NXML-NEWS +++ b/etc/NXML-NEWS @@ -1,4 +1,4 @@ -Copyright (C) 2007-2020 Free Software Foundation, Inc. +Copyright (C) 2007-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 0c094411ab0..2cae8b92ace 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -5,7 +5,7 @@ ORG NEWS -- history of user-visible changes. -*- mode: org; coding: utf-8 -*- #+LINK: doc https://orgmode.org/worg/doc.html#%s #+LINK: git https://code.orgmode.org/bzg/org-mode/commit/%s -Copyright (C) 2012-2020 Free Software Foundation, Inc. +Copyright (C) 2012-2021 Free Software Foundation, Inc. See the end of the file for license conditions. Please send Org bug reports to mailto:emacs-orgmode@gnu.org. diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 32ac715e621..2ab76e50bd0 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -1,6 +1,6 @@ Known Problems with GNU Emacs -Copyright (C) 1987-1989, 1993-1999, 2001-2020 Free Software Foundation, +Copyright (C) 1987-1989, 1993-1999, 2001-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/etc/README b/etc/README index b9b4bc4f0e7..6d7a15a6f2d 100644 --- a/etc/README +++ b/etc/README @@ -7,5 +7,5 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES File: emacs.icon Author: Sun Microsystems, Inc - Copyright (C) 1999, 2001-2020 Free Software Foundation, Inc. + Copyright (C) 1999, 2001-2021 Free Software Foundation, Inc. License: GNU General Public License version 3 or later (see COPYING) diff --git a/etc/TERMS b/etc/TERMS index 20c0a9a68c4..80b39c80e9f 100644 --- a/etc/TERMS +++ b/etc/TERMS @@ -1,4 +1,4 @@ -Copyright (C) 1999, 2001-2020 Free Software Foundation, Inc. +Copyright (C) 1999, 2001-2021 Free Software Foundation, Inc. See the end of the file for copying permissions. This file describes what you must or might want to do to termcap entries diff --git a/etc/TODO b/etc/TODO index 19f9f79bf42..db60ad7a270 100644 --- a/etc/TODO +++ b/etc/TODO @@ -1,6 +1,6 @@ Emacs TODO List -*-outline-*- -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. See the end of the file for license conditions. diff --git a/etc/charsets/README b/etc/charsets/README index 3312367f29e..0045a0f638e 100644 --- a/etc/charsets/README +++ b/etc/charsets/README @@ -1,6 +1,6 @@ # README file for charset mapping files in this directory. -# Copyright (C) 2003-2020 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # National Institute of Advanced Industrial Science and Technology (AIST) # Registration Number H13PRO009 diff --git a/etc/compilation.txt b/etc/compilation.txt index ebce6a14d06..9e95c810df5 100644 --- a/etc/compilation.txt +++ b/etc/compilation.txt @@ -653,7 +653,7 @@ Compilation segmentation fault at Thu Jul 13 10:55:49 Compilation finished at Thu Jul 21 15:02:15 -Copyright (C) 2004-2020 Free Software Foundation, Inc. +Copyright (C) 2004-2021 Free Software Foundation, Inc. COPYING PERMISSIONS: diff --git a/etc/edt-user.el b/etc/edt-user.el index 0ecd818ec78..d1559b50687 100644 --- a/etc/edt-user.el +++ b/etc/edt-user.el @@ -1,6 +1,6 @@ ;;; edt-user.el --- Sample user customizations for Emacs EDT emulation -;; Copyright (C) 1986, 1992-1993, 2000-2020 Free Software Foundation, +;; Copyright (C) 1986, 1992-1993, 2000-2021 Free Software Foundation, ;; Inc. ;; Author: Kevin Gallagher diff --git a/etc/emacs-buffer.gdb b/etc/emacs-buffer.gdb index e2377424077..41af836599b 100644 --- a/etc/emacs-buffer.gdb +++ b/etc/emacs-buffer.gdb @@ -1,6 +1,6 @@ # emacs-buffer.gdb --- gdb macros for recovering buffers from emacs coredumps -# Copyright (C) 2005-2020 Free Software Foundation, Inc. +# Copyright (C) 2005-2021 Free Software Foundation, Inc. # Author: Noah Friedman # Created: 2005-04-28 diff --git a/etc/emacs.appdata.xml b/etc/emacs.appdata.xml index 1b5d7f9aae9..ca6233a59ae 100644 --- a/etc/emacs.appdata.xml +++ b/etc/emacs.appdata.xml @@ -1,5 +1,5 @@ - + org.gnu.emacs GFDL-1.3+ diff --git a/etc/enriched.txt b/etc/enriched.txt index 1e1dc46c410..dd269e313cb 100644 --- a/etc/enriched.txt +++ b/etc/enriched.txt @@ -253,7 +253,7 @@ it. -Copyright (C) 1995, 1997, 2001-2020 Free Software Foundation, Inc. +Copyright (C) 1995, 1997, 2001-2021 Free Software Foundation, Inc. COPYING PERMISSIONS: diff --git a/etc/forms/forms-d2.el b/etc/forms/forms-d2.el index 67cdb9cd010..e54c5610a3e 100644 --- a/etc/forms/forms-d2.el +++ b/etc/forms/forms-d2.el @@ -1,6 +1,6 @@ ;;; forms-d2.el --- demo forms-mode -;; Copyright (C) 1991, 1994-1997, 2001-2020 Free Software Foundation, +;; Copyright (C) 1991, 1994-1997, 2001-2021 Free Software Foundation, ;; Inc. ;; Author: Johan Vromans diff --git a/etc/gnus-tut.txt b/etc/gnus-tut.txt index 2001b913d24..27e868b79cb 100644 --- a/etc/gnus-tut.txt +++ b/etc/gnus-tut.txt @@ -24,7 +24,7 @@ was done by moi, yours truly, your humble servant, Lars Magne Ingebrigtsen. If you have a WWW browser, you can investigate to your heart's delight at . -;; Copyright (C) 1995, 2001-2020 Free Software Foundation, Inc. +;; Copyright (C) 1995, 2001-2021 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news diff --git a/etc/grep.txt b/etc/grep.txt index 19a3b4b47b7..72f697a28db 100644 --- a/etc/grep.txt +++ b/etc/grep.txt @@ -97,7 +97,7 @@ grep -nH -e "xyzxyz" ../info/* -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. COPYING PERMISSIONS: diff --git a/etc/images/README b/etc/images/README index 2cee207e246..f6e4f69668f 100644 --- a/etc/images/README +++ b/etc/images/README @@ -27,7 +27,7 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES File: mh-logo.xpm Author: Satyaki Das - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Files: gnus.pbm Author: Luis Fernandes diff --git a/etc/images/custom/README b/etc/images/custom/README index 7eb87c44000..fc9cd8d7f12 100644 --- a/etc/images/custom/README +++ b/etc/images/custom/README @@ -6,5 +6,5 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES Files: down.xpm down-pushed.xpm right.xpm right-pushed.xpm Author: Juri Linkov -Copyright (C) 2008-2020 Free Software Foundation, Inc. +Copyright (C) 2008-2021 Free Software Foundation, Inc. License: GNU General Public License version 3 or later (see COPYING) diff --git a/etc/images/ezimage/README b/etc/images/ezimage/README index 2aef056abe6..865ce5b4c07 100644 --- a/etc/images/ezimage/README +++ b/etc/images/ezimage/README @@ -7,5 +7,5 @@ Files: bits.xpm bitsbang.xpm box-minus.xpm box-plus.xpm tag-gt.xpm tag-minus.xpm tag-plus.xpm tag-type.xpm tag-v.xpm tag.xpm unlock.xpm Author: Eric M. Ludlam -Copyright (C) 1999-2020 Free Software Foundation, Inc. +Copyright (C) 1999-2021 Free Software Foundation, Inc. License: GNU General Public License version 3 or later (see COPYING) diff --git a/etc/images/gnus/README b/etc/images/gnus/README index f9c51f02c7b..4ca948ecd73 100644 --- a/etc/images/gnus/README +++ b/etc/images/gnus/README @@ -7,7 +7,7 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES Files: important.xpm, unimportant.xpm Author: Simon Josefsson -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. Files: catchup.pbm catchup.xpm cu-exit.pbm cu-exit.xpm describe-group.pbm describe-group.xpm exit-gnus.pbm exit-gnus.xpm diff --git a/etc/images/gnus/gnus.svg b/etc/images/gnus/gnus.svg index 7514f344631..362dc16cb6f 100644 --- a/etc/images/gnus/gnus.svg +++ b/etc/images/gnus/gnus.svg @@ -1,7 +1,7 @@ + org.gnu.emacs GFDL-1.3+ diff --git a/etc/enriched.txt b/etc/enriched.txt index 1e1dc46c410..dd269e313cb 100644 --- a/etc/enriched.txt +++ b/etc/enriched.txt @@ -253,7 +253,7 @@ it. -Copyright (C) 1995, 1997, 2001-2020 Free Software Foundation, Inc. +Copyright (C) 1995, 1997, 2001-2021 Free Software Foundation, Inc. COPYING PERMISSIONS: diff --git a/etc/forms/forms-d2.el b/etc/forms/forms-d2.el index 1b0d6426e03..cd4231cf2de 100644 --- a/etc/forms/forms-d2.el +++ b/etc/forms/forms-d2.el @@ -1,6 +1,6 @@ ;;; forms-d2.el --- demo forms-mode -*- lexical-binding:t -*- -;; Copyright (C) 1991, 1994-1997, 2001-2020 Free Software Foundation, +;; Copyright (C) 1991, 1994-1997, 2001-2021 Free Software Foundation, ;; Inc. ;; Author: Johan Vromans diff --git a/etc/gnus-tut.txt b/etc/gnus-tut.txt index 2001b913d24..27e868b79cb 100644 --- a/etc/gnus-tut.txt +++ b/etc/gnus-tut.txt @@ -24,7 +24,7 @@ was done by moi, yours truly, your humble servant, Lars Magne Ingebrigtsen. If you have a WWW browser, you can investigate to your heart's delight at . -;; Copyright (C) 1995, 2001-2020 Free Software Foundation, Inc. +;; Copyright (C) 1995, 2001-2021 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news diff --git a/etc/grep.txt b/etc/grep.txt index 3dc4aac3c89..b5b78459b5c 100644 --- a/etc/grep.txt +++ b/etc/grep.txt @@ -103,7 +103,7 @@ grep -nH -e "xyzxyz" ../info/* -Copyright (C) 2005-2020 Free Software Foundation, Inc. +Copyright (C) 2005-2021 Free Software Foundation, Inc. COPYING PERMISSIONS: diff --git a/etc/images/README b/etc/images/README index 2cee207e246..f6e4f69668f 100644 --- a/etc/images/README +++ b/etc/images/README @@ -27,7 +27,7 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES File: mh-logo.xpm Author: Satyaki Das - Copyright (C) 2003-2020 Free Software Foundation, Inc. + Copyright (C) 2003-2021 Free Software Foundation, Inc. Files: gnus.pbm Author: Luis Fernandes diff --git a/etc/images/custom/README b/etc/images/custom/README index 7eb87c44000..fc9cd8d7f12 100644 --- a/etc/images/custom/README +++ b/etc/images/custom/README @@ -6,5 +6,5 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES Files: down.xpm down-pushed.xpm right.xpm right-pushed.xpm Author: Juri Linkov -Copyright (C) 2008-2020 Free Software Foundation, Inc. +Copyright (C) 2008-2021 Free Software Foundation, Inc. License: GNU General Public License version 3 or later (see COPYING) diff --git a/etc/images/ezimage/README b/etc/images/ezimage/README index 2aef056abe6..865ce5b4c07 100644 --- a/etc/images/ezimage/README +++ b/etc/images/ezimage/README @@ -7,5 +7,5 @@ Files: bits.xpm bitsbang.xpm box-minus.xpm box-plus.xpm tag-gt.xpm tag-minus.xpm tag-plus.xpm tag-type.xpm tag-v.xpm tag.xpm unlock.xpm Author: Eric M. Ludlam -Copyright (C) 1999-2020 Free Software Foundation, Inc. +Copyright (C) 1999-2021 Free Software Foundation, Inc. License: GNU General Public License version 3 or later (see COPYING) diff --git a/etc/images/gnus/README b/etc/images/gnus/README index f9c51f02c7b..4ca948ecd73 100644 --- a/etc/images/gnus/README +++ b/etc/images/gnus/README @@ -7,7 +7,7 @@ COPYRIGHT AND LICENSE INFORMATION FOR IMAGE FILES Files: important.xpm, unimportant.xpm Author: Simon Josefsson -Copyright (C) 2001-2020 Free Software Foundation, Inc. +Copyright (C) 2001-2021 Free Software Foundation, Inc. Files: catchup.pbm catchup.xpm cu-exit.pbm cu-exit.xpm describe-group.pbm describe-group.xpm exit-gnus.pbm exit-gnus.xpm diff --git a/etc/images/gnus/gnus.svg b/etc/images/gnus/gnus.svg index 7514f344631..362dc16cb6f 100644 --- a/etc/images/gnus/gnus.svg +++ b/etc/images/gnus/gnus.svg @@ -1,7 +1,7 @@