]> git.eshelyaron.com Git - emacs.git/commitdiff
(switch_to_buffer_1): New subroutine, taken out from Fswitch_to_buffer.
authorRichard M. Stallman <rms@gnu.org>
Fri, 6 Aug 1999 11:45:48 +0000 (11:45 +0000)
committerRichard M. Stallman <rms@gnu.org>
Fri, 6 Aug 1999 11:45:48 +0000 (11:45 +0000)
(no_switch_buffer): New function.
(Fswitch_to_buffer): Call them.  Don't get confused
by "same-window" buffers in a dedicated frame.

src/buffer.c

index 5bd83ceb53f9afc9b4af2c62652b9446fc41c930..8a373979eeb29c9245eba383d5589bc0e284d26e 100644 (file)
@@ -2007,7 +2007,8 @@ swap_out_buffer_local_variables (b)
    Store in *NEXT_PTR the next position after POS where an overlay starts,
      or ZV if there are no more overlays.
    Store in *PREV_PTR the previous position before POS where an overlay ends,
-     or BEGV if there are no previous overlays.
+     or where an overlay starts which ends at or after POS;
+     or BEGV if there are no such overlays.
    NEXT_PTR and/or PREV_PTR may be 0, meaning don't store that info.
 
    *VEC_PTR and *LEN_PTR should contain a valid vector and size
@@ -2052,9 +2053,13 @@ overlays_at (pos, extend, vec_ptr, len_ptr, next_ptr, prev_ptr)
            prev = endpos;
          break;
        }
+      startpos = OVERLAY_POSITION (start);
+      /* This one ends at or after POS
+        so its start counts for NEXT_PTR if it's before POS.  */
+      if (prev < startpos && startpos < pos)
+       prev = startpos;
       if (endpos == pos)
        continue;
-      startpos = OVERLAY_POSITION (start);
       if (startpos <= pos)
        {
          if (idx == len)
@@ -2121,9 +2126,14 @@ overlays_at (pos, extend, vec_ptr, len_ptr, next_ptr, prev_ptr)
          if (!inhibit_storing)
            vec[idx] = overlay;
          idx++;
+
+         if (startpos < pos && startpos > prev)
+           prev = startpos;
        }
       else if (endpos < pos && endpos > prev)
        prev = endpos;
+      else if (endpos == pos && startpos > prev)
+       prev = startpos;
     }
 
   if (next_ptr)