+ 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);
+ Fset_buffer (outbuf);
+
+ start1 = get_local_map (BUF_PT (XBUFFER (buffer)),
+ XBUFFER (buffer), Qkeymap);
+ if (!NILP (start1))
+ {
+ describe_map_tree (start1, 1, shadow, prefix,
+ "\f\n`keymap' Property Bindings", nomenu, 0, 0);
+ shadow = Fcons (start1, shadow);
+ }
+
+ /* Print the minor mode maps. */
+ for (i = 0; i < nmaps; i++)
+ {
+ /* The title for a minor mode keymap
+ is constructed at run time.
+ We let describe_map_tree do the actual insertion
+ because it takes care of other features when doing so. */
+ char *title, *p;
+
+ if (!SYMBOLP (modes[i]))
+ abort();
+
+ p = title = (char *) alloca (42 + XSYMBOL (modes[i])->name->size);
+ *p++ = '\f';
+ *p++ = '\n';
+ *p++ = '`';
+ bcopy (XSYMBOL (modes[i])->name->data, p,
+ XSYMBOL (modes[i])->name->size);
+ p += XSYMBOL (modes[i])->name->size;
+ *p++ = '\'';
+ bcopy (" Minor Mode Bindings", p, sizeof (" Minor Mode Bindings") - 1);
+ p += sizeof (" Minor Mode Bindings") - 1;
+ *p = 0;
+
+ describe_map_tree (maps[i], 1, shadow, prefix, title, nomenu, 0, 0);
+ shadow = Fcons (maps[i], shadow);
+ }
+
+ start1 = get_local_map (BUF_PT (XBUFFER (buffer)),
+ XBUFFER (buffer), Qlocal_map);
+ if (!NILP (start1))
+ {
+ if (EQ (start1, XBUFFER (buffer)->keymap))
+ describe_map_tree (start1, 1, shadow, prefix,
+ "\f\nMajor Mode Bindings", nomenu, 0, 0);
+ else
+ describe_map_tree (start1, 1, shadow, prefix,
+ "\f\n`local-map' Property Bindings",
+ nomenu, 0, 0);
+
+ shadow = Fcons (start1, shadow);
+ }
+ }