Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-6
Merge from emacs--cvs-trunk--0 Patches applied: * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-48 - miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-51 Update from CVS
This commit is contained in:
commit
87795686a9
20 changed files with 440 additions and 250 deletions
7
etc/NEWS
7
etc/NEWS
|
@ -2562,6 +2562,13 @@ the command `undefined'. (In earlier Emacs versions, it used
|
|||
|
||||
* Lisp Changes in Emacs 21.4
|
||||
|
||||
+++
|
||||
** The line-move, scroll-up, and scroll-down functions will now
|
||||
modify the window vscroll to scroll through display rows that are
|
||||
taller that the height of the window, for example in the presense of
|
||||
large images. To disable this feature, Lisp code may bind the new
|
||||
variable `auto-window-vscroll' to nil.
|
||||
|
||||
+++
|
||||
** If a buffer sets buffer-save-without-query to non-nil,
|
||||
save-some-buffers will always save that buffer without asking
|
||||
|
|
|
@ -1,3 +1,49 @@
|
|||
2005-01-24 Jay Belanger <belanger@truman.edu>
|
||||
|
||||
* calc/calc-store.el (calc-declare-variable): Use calc-var-name to
|
||||
display variable name.
|
||||
|
||||
2005-01-24 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* international/encoded-kb.el (encoded-kbd-iso2022-single-shift):
|
||||
Fix setting of the element of encoded-kbd-iso2022-invocations.
|
||||
|
||||
2005-01-24 Nick Roberts <nickrob@snap.net.nz>
|
||||
|
||||
* progmodes/gdb-ui.el (gdb-goto-breakpoint, gdb-frames-select)
|
||||
(gdb-threads-select): Change to also accept mouse events.
|
||||
(gdb-mouse-goto-breakpoint, gdb-frames-mouse-select)
|
||||
(gdb-threads-mouse-select): Delete.
|
||||
|
||||
2005-01-23 Luc Teirlinck <teirllm@auburn.edu>
|
||||
|
||||
* files.el (insert-directory): Take care of empty directory,
|
||||
listed without -a switch.
|
||||
|
||||
2005-01-23 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* textmodes/refill.el (refill-post-command-function):
|
||||
Add `indent-new-comment-line' and `reindent-then-newline-and-indent'
|
||||
to the list of functions that we should be careful not to undo.
|
||||
(refill-late-fill-paragraph-function): Remove.
|
||||
(refill-saved-state): New var.
|
||||
(refill-mode): Use it to save fill-paragraph-function.
|
||||
Save also the value of auto-fill-function.
|
||||
|
||||
* term/w32-win.el: Simplify code.
|
||||
|
||||
2005-01-23 Kim F. Storm <storm@cua.dk>
|
||||
|
||||
* simple.el (line-move): Adapt to new return value from
|
||||
pos-visible-in-window-p.
|
||||
|
||||
* simple.el (line-move): Fix last change. Check partial
|
||||
visibility at point rather than at window-start.
|
||||
|
||||
2005-01-22 Jason Rumney <jasonr@gnu.org>
|
||||
|
||||
* term/w32-win.el (xw-defined-colors): Remove debug-message.
|
||||
|
||||
2005-01-22 David Kastrup <dak@gnu.org>
|
||||
|
||||
* progmodes/grep.el: Add alias `find-grep' for `grep-find'.
|
||||
|
|
|
@ -482,7 +482,7 @@
|
|||
(setq rp nil)))
|
||||
(not rp)))))
|
||||
(calc-unread-command ?\C-a)
|
||||
(setq decl (read-string (format "Declare: %s to be: " var)
|
||||
(setq decl (read-string (format "Declare: %s to be: " (calc-var-name var))
|
||||
(and rp
|
||||
(math-format-flat-expr (nth 2 (car dp)) 0))))
|
||||
(setq decl (and (string-match "[^ \t]" decl)
|
||||
|
|
|
@ -4550,45 +4550,54 @@ normally equivalent short `-D' option is just passed on to
|
|||
(when (if (stringp switches)
|
||||
(string-match "--dired\\>" switches)
|
||||
(member "--dired" switches))
|
||||
;; The following overshoots by one line for an empty
|
||||
;; directory listed with "--dired", but without "-a"
|
||||
;; switch, where the ls output contains a
|
||||
;; "//DIRED-OPTIONS//" line, but no "//DIRED//" line.
|
||||
;; We take care of that case later.
|
||||
(forward-line -2)
|
||||
(when (looking-at "//SUBDIRED//")
|
||||
(delete-region (point) (progn (forward-line 1) (point)))
|
||||
(forward-line -1))
|
||||
(when (looking-at "//DIRED//")
|
||||
(let ((end (line-end-position))
|
||||
(linebeg (point))
|
||||
error-lines)
|
||||
;; Find all the lines that are error messages,
|
||||
;; and record the bounds of each one.
|
||||
(goto-char beg)
|
||||
(while (< (point) linebeg)
|
||||
(or (eql (following-char) ?\s)
|
||||
(push (list (point) (line-end-position)) error-lines))
|
||||
(forward-line 1))
|
||||
(setq error-lines (nreverse error-lines))
|
||||
;; Now read the numeric positions of file names.
|
||||
(goto-char linebeg)
|
||||
(forward-word 1)
|
||||
(forward-char 3)
|
||||
(while (< (point) end)
|
||||
(let ((start (insert-directory-adj-pos
|
||||
(if (looking-at "//DIRED//")
|
||||
(let ((end (line-end-position))
|
||||
(linebeg (point))
|
||||
error-lines)
|
||||
;; Find all the lines that are error messages,
|
||||
;; and record the bounds of each one.
|
||||
(goto-char beg)
|
||||
(while (< (point) linebeg)
|
||||
(or (eql (following-char) ?\s)
|
||||
(push (list (point) (line-end-position)) error-lines))
|
||||
(forward-line 1))
|
||||
(setq error-lines (nreverse error-lines))
|
||||
;; Now read the numeric positions of file names.
|
||||
(goto-char linebeg)
|
||||
(forward-word 1)
|
||||
(forward-char 3)
|
||||
(while (< (point) end)
|
||||
(let ((start (insert-directory-adj-pos
|
||||
(+ beg (read (current-buffer)))
|
||||
error-lines))
|
||||
(end (insert-directory-adj-pos
|
||||
(+ beg (read (current-buffer)))
|
||||
error-lines))
|
||||
(end (insert-directory-adj-pos
|
||||
(+ beg (read (current-buffer)))
|
||||
error-lines)))
|
||||
(if (memq (char-after end) '(?\n ?\ ))
|
||||
;; End is followed by \n or by " -> ".
|
||||
(put-text-property start end 'dired-filename t)
|
||||
;; It seems that we can't trust ls's output as to
|
||||
;; byte positions of filenames.
|
||||
(put-text-property beg (point) 'dired-filename nil)
|
||||
(end-of-line))))
|
||||
(goto-char end)
|
||||
(beginning-of-line)
|
||||
(delete-region (point) (progn (forward-line 1) (point))))
|
||||
(if (looking-at "//DIRED-OPTIONS//")
|
||||
(delete-region (point) (progn (forward-line 1) (point))))))
|
||||
error-lines)))
|
||||
(if (memq (char-after end) '(?\n ?\ ))
|
||||
;; End is followed by \n or by " -> ".
|
||||
(put-text-property start end 'dired-filename t)
|
||||
;; It seems that we can't trust ls's output as to
|
||||
;; byte positions of filenames.
|
||||
(put-text-property beg (point) 'dired-filename nil)
|
||||
(end-of-line))))
|
||||
(goto-char end)
|
||||
(beginning-of-line)
|
||||
(delete-region (point) (progn (forward-line 1) (point))))
|
||||
;; Take care of the case where the ls output contains a
|
||||
;; "//DIRED-OPTIONS//"-line, but no "//DIRED//"-line
|
||||
;; and we went one line too far back (see above).
|
||||
(forward-line 1))
|
||||
(if (looking-at "//DIRED-OPTIONS//")
|
||||
(delete-region (point) (progn (forward-line 1) (point)))))
|
||||
|
||||
;; Now decode what read if necessary.
|
||||
(let ((coding (or coding-system-for-read
|
||||
|
|
|
@ -130,9 +130,7 @@ The following key sequence may cause multilingual text insertion."
|
|||
|
||||
(defun encoded-kbd-iso2022-single-shift (ignore)
|
||||
(let ((char (encoded-kbd-last-key)))
|
||||
(aset encoded-kbd-iso2022-invocations 2
|
||||
(aref encoded-kbd-iso2022-designations
|
||||
(if (= char ?\216) 2 3))))
|
||||
(aset encoded-kbd-iso2022-invocations 2 (if (= char ?\216) 2 3)))
|
||||
"")
|
||||
|
||||
(defun encoded-kbd-self-insert-iso2022-7bit (ignore)
|
||||
|
|
|
@ -1243,7 +1243,7 @@ static char *magick[] = {
|
|||
(define-key map "d" 'gdb-delete-breakpoint)
|
||||
(define-key map "q" 'kill-this-buffer)
|
||||
(define-key map "\r" 'gdb-goto-breakpoint)
|
||||
(define-key map [mouse-2] 'gdb-mouse-goto-breakpoint)
|
||||
(define-key map [mouse-2] 'gdb-goto-breakpoint)
|
||||
map))
|
||||
|
||||
(defun gdb-breakpoints-mode ()
|
||||
|
@ -1291,9 +1291,10 @@ static char *magick[] = {
|
|||
(concat gdb-server-prefix "delete " (match-string 1) "\n") 'ignore))
|
||||
(error "Not recognized as break/watchpoint line")))
|
||||
|
||||
(defun gdb-goto-breakpoint ()
|
||||
(defun gdb-goto-breakpoint (&optional event)
|
||||
"Display the breakpoint location specified at current line."
|
||||
(interactive)
|
||||
(interactive (list last-input-event))
|
||||
(if event (mouse-set-point event))
|
||||
(save-excursion
|
||||
(beginning-of-line 1)
|
||||
(if (if (with-current-buffer gud-comint-buffer (eq gud-minor-mode 'gdba))
|
||||
|
@ -1311,14 +1312,8 @@ static char *magick[] = {
|
|||
(goto-line (string-to-number line))
|
||||
(set-window-point window (point))))))
|
||||
(error "Not recognized as break/watchpoint line"))))
|
||||
|
||||
(defun gdb-mouse-goto-breakpoint (event)
|
||||
"Display the breakpoint location that you click on."
|
||||
(interactive "e")
|
||||
(mouse-set-point event)
|
||||
(gdb-goto-breakpoint))
|
||||
|
||||
;;
|
||||
|
||||
;; Frames buffer. This displays a perpetually correct bactracktrace
|
||||
;; (from the command `where').
|
||||
;;
|
||||
|
@ -1372,7 +1367,7 @@ static char *magick[] = {
|
|||
(suppress-keymap map)
|
||||
(define-key map "q" 'kill-this-buffer)
|
||||
(define-key map "\r" 'gdb-frames-select)
|
||||
(define-key map [mouse-2] 'gdb-frames-mouse-select)
|
||||
(define-key map [mouse-2] 'gdb-frames-select)
|
||||
map))
|
||||
|
||||
(defun gdb-frames-mode ()
|
||||
|
@ -1396,20 +1391,15 @@ static char *magick[] = {
|
|||
(n (or (and pos (match-string-no-properties 1)) "0")))
|
||||
n)))
|
||||
|
||||
(defun gdb-frames-select ()
|
||||
(defun gdb-frames-select (&optional event)
|
||||
"Select the frame and display the relevant source."
|
||||
(interactive)
|
||||
(interactive (list last-input-event))
|
||||
(if event (mouse-set-point event))
|
||||
(gdb-enqueue-input
|
||||
(list (concat gdb-server-prefix "frame " (gdb-get-frame-number) "\n") 'ignore))
|
||||
(gud-display-frame))
|
||||
|
||||
(defun gdb-frames-mouse-select (event)
|
||||
"Select the frame you click on and display the relevant source."
|
||||
(interactive "e")
|
||||
(mouse-set-point event)
|
||||
(gdb-frames-select))
|
||||
|
||||
;;
|
||||
|
||||
;; Threads buffer. This displays a selectable thread list.
|
||||
;;
|
||||
(gdb-set-buffer-rules 'gdb-threads-buffer
|
||||
|
@ -1454,7 +1444,7 @@ static char *magick[] = {
|
|||
(suppress-keymap map)
|
||||
(define-key map "q" 'kill-this-buffer)
|
||||
(define-key map "\r" 'gdb-threads-select)
|
||||
(define-key map [mouse-2] 'gdb-threads-mouse-select)
|
||||
(define-key map [mouse-2] 'gdb-threads-select)
|
||||
map))
|
||||
|
||||
(defun gdb-threads-mode ()
|
||||
|
@ -1474,20 +1464,15 @@ static char *magick[] = {
|
|||
(re-search-backward "^\\s-*\\([0-9]*\\)" nil t)
|
||||
(match-string-no-properties 1)))
|
||||
|
||||
(defun gdb-threads-select ()
|
||||
(defun gdb-threads-select (&optional event)
|
||||
"Select the thread and display the relevant source."
|
||||
(interactive)
|
||||
(interactive (list last-input-event))
|
||||
(if event (mouse-set-point event))
|
||||
(gdb-enqueue-input
|
||||
(list (concat "thread " (gdb-get-thread-number) "\n") 'ignore))
|
||||
(gud-display-frame))
|
||||
|
||||
(defun gdb-threads-mouse-select (event)
|
||||
"Select the thread you click on and display the relevant source."
|
||||
(interactive "e")
|
||||
(mouse-set-point event)
|
||||
(gdb-threads-select))
|
||||
|
||||
;;
|
||||
|
||||
;; Registers buffer.
|
||||
;;
|
||||
(gdb-set-buffer-rules 'gdb-registers-buffer
|
||||
|
|
|
@ -3183,17 +3183,17 @@ Outline mode sets this."
|
|||
(defun line-move (arg &optional noerror to-end)
|
||||
(if auto-window-vscroll
|
||||
(let ((forward (> arg 0))
|
||||
(pvis (pos-visible-in-window-p (window-start) nil t)))
|
||||
(if (and pvis (null (nth 2 pvis))
|
||||
(> (nth (if forward 4 3) pvis) 0))
|
||||
(part (nth 2 (pos-visible-in-window-p (point) nil t))))
|
||||
(if (and (consp part)
|
||||
(> (setq part (if forward (cdr part) (car part))) 0))
|
||||
(set-window-vscroll nil
|
||||
(if forward
|
||||
(+ (window-vscroll nil t)
|
||||
(min (nth 4 pvis)
|
||||
(min part
|
||||
(* (frame-char-height) arg)))
|
||||
(max 0
|
||||
(- (window-vscroll nil t)
|
||||
(min (nth 3 pvis)
|
||||
(min part
|
||||
(* (frame-char-height) (- arg))))))
|
||||
t)
|
||||
(set-window-vscroll nil 0)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;;; w32-win.el --- parse switches controlling interface with W32 window system
|
||||
|
||||
;; Copyright (C) 1993, 1994, 2003, 2004 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 1993, 1994, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Kevin Gallo
|
||||
;; Keywords: terminals
|
||||
|
@ -139,50 +139,26 @@ the last file dropped is selected."
|
|||
"Handle SWITCH of the form \"-switch value\" or \"-switch\"."
|
||||
(let ((aelt (assoc switch command-line-x-option-alist)))
|
||||
(if aelt
|
||||
(let ((param (nth 3 aelt))
|
||||
(value (nth 4 aelt)))
|
||||
(if value
|
||||
(setq default-frame-alist
|
||||
(cons (cons param value)
|
||||
default-frame-alist))
|
||||
(setq default-frame-alist
|
||||
(cons (cons param
|
||||
(car x-invocation-args))
|
||||
default-frame-alist)
|
||||
x-invocation-args (cdr x-invocation-args)))))))
|
||||
(push (cons (nth 3 aelt) (or (nth 4 aelt) (pop x-invocation-args)))
|
||||
default-frame-alist))))
|
||||
|
||||
(defun x-handle-numeric-switch (switch)
|
||||
"Handle SWITCH of the form \"-switch n\"."
|
||||
(let ((aelt (assoc switch command-line-x-option-alist)))
|
||||
(if aelt
|
||||
(let ((param (nth 3 aelt)))
|
||||
(setq default-frame-alist
|
||||
(cons (cons param
|
||||
(string-to-int (car x-invocation-args)))
|
||||
default-frame-alist)
|
||||
x-invocation-args
|
||||
(cdr x-invocation-args))))))
|
||||
(push (cons (nth 3 aelt) (string-to-int (pop x-invocation-args)))
|
||||
default-frame-alist))))
|
||||
|
||||
;; Handle options that apply to initial frame only
|
||||
(defun x-handle-initial-switch (switch)
|
||||
(let ((aelt (assoc switch command-line-x-option-alist)))
|
||||
(if aelt
|
||||
(let ((param (nth 3 aelt))
|
||||
(value (nth 4 aelt)))
|
||||
(if value
|
||||
(setq initial-frame-alist
|
||||
(cons (cons param value)
|
||||
initial-frame-alist))
|
||||
(setq initial-frame-alist
|
||||
(cons (cons param
|
||||
(car x-invocation-args))
|
||||
initial-frame-alist)
|
||||
x-invocation-args (cdr x-invocation-args)))))))
|
||||
(push (cons (nth 3 aelt) (or (nth 4 aelt) (pop x-invocation-args)))
|
||||
initial-frame-alist))))
|
||||
|
||||
(defun x-handle-iconic (switch)
|
||||
"Make \"-iconic\" SWITCH apply only to the initial frame."
|
||||
(setq initial-frame-alist
|
||||
(cons '(visibility . icon) initial-frame-alist)))
|
||||
(push '(visibility . icon) initial-frame-alist))
|
||||
|
||||
(defun x-handle-xrm-switch (switch)
|
||||
"Handle the \"-xrm\" SWITCH."
|
||||
|
@ -226,18 +202,15 @@ the last file dropped is selected."
|
|||
;; to the option's operand; set the name of the initial frame, too.
|
||||
(or (consp x-invocation-args)
|
||||
(error "%s: missing argument to `%s' option" (invocation-name) switch))
|
||||
(setq x-resource-name (car x-invocation-args)
|
||||
x-invocation-args (cdr x-invocation-args))
|
||||
(setq initial-frame-alist (cons (cons 'name x-resource-name)
|
||||
initial-frame-alist)))
|
||||
(setq x-resource-name (pop x-invocation-args))
|
||||
(push (cons 'name x-resource-name) initial-frame-alist))
|
||||
|
||||
(defvar x-display-name nil
|
||||
"The display name specifying server and frame.")
|
||||
|
||||
(defun x-handle-display (switch)
|
||||
"Handle the \"-display\" SWITCH."
|
||||
(setq x-display-name (car x-invocation-args)
|
||||
x-invocation-args (cdr x-invocation-args)))
|
||||
(setq x-display-name (pop x-invocation-args)))
|
||||
|
||||
(defun x-handle-args (args)
|
||||
"Process the X-related command line options in ARGS.
|
||||
|
@ -281,7 +254,7 @@ This returns ARGS with the arguments that have been processed removed."
|
|||
(cons argval x-invocation-args)))
|
||||
(funcall handler this-switch))
|
||||
(funcall handler this-switch))
|
||||
(setq args (cons orig-this-switch args)))))
|
||||
(push orig-this-switch args))))
|
||||
(nconc (nreverse args) x-invocation-args))
|
||||
|
||||
;;
|
||||
|
@ -1046,16 +1019,10 @@ XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp")
|
|||
(defun xw-defined-colors (&optional frame)
|
||||
"Internal function called by `defined-colors', which see."
|
||||
(or frame (setq frame (selected-frame)))
|
||||
(let* ((color-map-colors (mapcar (lambda (clr) (car clr)) w32-color-map))
|
||||
(all-colors (or color-map-colors x-colors))
|
||||
(this-color nil)
|
||||
(defined-colors nil))
|
||||
(message "Defining colors...")
|
||||
(while all-colors
|
||||
(setq this-color (car all-colors)
|
||||
all-colors (cdr all-colors))
|
||||
(let ((defined-colors nil))
|
||||
(dolist (this-color (or (mapcar 'car w32-color-map) x-colors))
|
||||
(and (color-supported-p this-color frame t)
|
||||
(setq defined-colors (cons this-color defined-colors))))
|
||||
(push this-color defined-colors)))
|
||||
defined-colors))
|
||||
|
||||
|
||||
|
@ -1077,13 +1044,10 @@ XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp")
|
|||
|
||||
;;; Make sure we have a valid resource name.
|
||||
(or (stringp x-resource-name)
|
||||
(let (i)
|
||||
(setq x-resource-name (invocation-name))
|
||||
|
||||
;; Change any . or * characters in x-resource-name to hyphens,
|
||||
;; so as not to choke when we use it in X resource queries.
|
||||
(while (setq i (string-match "[.*]" x-resource-name))
|
||||
(aset x-resource-name i ?-))))
|
||||
(setq x-resource-name
|
||||
;; Change any . or * characters in x-resource-name to hyphens,
|
||||
;; so as not to choke when we use it in X resource queries.
|
||||
(replace-regexp-in-string "[.*]" "-" (invocation-name))))
|
||||
|
||||
;; For the benefit of older Emacses (19.27 and earlier) that are sharing
|
||||
;; the same lisp directory, don't pass the third argument unless we seem
|
||||
|
@ -1167,21 +1131,17 @@ See the documentation of `create-fontset-from-fontset-spec for the format.")
|
|||
(setq initial-frame-alist (append initial-frame-alist parsed))
|
||||
;; The size parms apply to all frames.
|
||||
(if (assq 'height parsed)
|
||||
(setq default-frame-alist
|
||||
(cons (cons 'height (cdr (assq 'height parsed)))
|
||||
default-frame-alist)))
|
||||
(push (cons 'height (cdr (assq 'height parsed)))
|
||||
default-frame-alist))
|
||||
(if (assq 'width parsed)
|
||||
(setq default-frame-alist
|
||||
(cons (cons 'width (cdr (assq 'width parsed)))
|
||||
default-frame-alist))))))
|
||||
(push (cons 'width (cdr (assq 'width parsed)))
|
||||
default-frame-alist)))))
|
||||
|
||||
;; Check the reverseVideo resource.
|
||||
(let ((case-fold-search t))
|
||||
(let ((rv (x-get-resource "reverseVideo" "ReverseVideo")))
|
||||
(if (and rv
|
||||
(string-match "^\\(true\\|yes\\|on\\)$" rv))
|
||||
(setq default-frame-alist
|
||||
(cons '(reverse . t) default-frame-alist)))))
|
||||
(if (and rv (string-match "^\\(true\\|yes\\|on\\)$" rv))
|
||||
(push '(reverse . t) default-frame-alist))))
|
||||
|
||||
(defun x-win-suspend-error ()
|
||||
"Report an error when a suspend is attempted."
|
||||
|
@ -1245,7 +1205,7 @@ font dialog to get the matching FONTS. Otherwise use a pop-up menu
|
|||
(and chosen-font (list chosen-font)))
|
||||
(x-popup-menu
|
||||
last-nonmenu-event
|
||||
;; Append list of fontsets currently defined.
|
||||
;; Append list of fontsets currently defined.
|
||||
;; Conditional on new-fontset so bootstrapping works on non-GUI compiles
|
||||
(if (fboundp 'new-fontset)
|
||||
(append w32-fixed-font-alist (list (generate-fontset-menu)))))))
|
||||
|
@ -1269,5 +1229,5 @@ font dialog to get the matching FONTS. Otherwise use a pop-up menu
|
|||
(tiff "libtiff3.dll" "libtiff.dll")
|
||||
(gif "libungif.dll")))
|
||||
|
||||
;;; arch-tag: 69fb1701-28c2-4890-b351-3d1fe4b4f166
|
||||
;; arch-tag: 69fb1701-28c2-4890-b351-3d1fe4b4f166
|
||||
;;; w32-win.el ends here
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
;;; refill.el --- `auto-fill' by refilling paragraphs on changes
|
||||
|
||||
;; Copyright (C) 2000, 2003 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 2000, 2003, 2005 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Dave Love <fx@gnu.org>
|
||||
;; Maintainer: Miles Bader <miles@gnu.org>
|
||||
|
@ -85,6 +85,8 @@
|
|||
|
||||
;;; Code:
|
||||
|
||||
(eval-when-compile (require 'cl))
|
||||
|
||||
(defgroup refill nil
|
||||
"Refilling paragraphs on changes."
|
||||
:group 'fill)
|
||||
|
@ -169,40 +171,36 @@ complex processing.")
|
|||
"Post-command function to do refilling (conditionally)."
|
||||
(when refill-doit ; there was a change
|
||||
;; There's probably scope for more special cases here...
|
||||
(if (eq this-command 'self-insert-command)
|
||||
;; Treat self-insertion commands specially, since they don't
|
||||
;; always reset `refill-doit' -- for self-insertion commands that
|
||||
;; *don't* cause a refill, we want to leave it turned on so that
|
||||
;; any subsequent non-modification command will cause a refill.
|
||||
(when (aref auto-fill-chars (char-before))
|
||||
;; Respond to the same characters as auto-fill (other than
|
||||
;; newline, covered below).
|
||||
(refill-fill-paragraph-at refill-doit)
|
||||
(setq refill-doit nil))
|
||||
(cond
|
||||
((or (eq this-command 'quoted-insert)
|
||||
(eq this-command 'fill-paragraph)
|
||||
(eq this-command 'fill-region))
|
||||
nil)
|
||||
((or (eq this-command 'newline)
|
||||
(eq this-command 'newline-and-indent)
|
||||
(eq this-command 'open-line))
|
||||
;; Don't zap what was just inserted.
|
||||
(save-excursion
|
||||
(beginning-of-line) ; for newline-and-indent
|
||||
(skip-chars-backward "\n")
|
||||
(save-restriction
|
||||
(narrow-to-region (point-min) (point))
|
||||
(refill-fill-paragraph-at refill-doit)))
|
||||
(widen)
|
||||
(save-excursion
|
||||
(skip-chars-forward "\n")
|
||||
(save-restriction
|
||||
(narrow-to-region (line-beginning-position) (point-max))
|
||||
(refill-fill-paragraph-at refill-doit))))
|
||||
(t
|
||||
(refill-fill-paragraph-at refill-doit)))
|
||||
(setq refill-doit nil))))
|
||||
(case this-command
|
||||
(self-insert-command
|
||||
;; Treat self-insertion commands specially, since they don't
|
||||
;; always reset `refill-doit' -- for self-insertion commands that
|
||||
;; *don't* cause a refill, we want to leave it turned on so that
|
||||
;; any subsequent non-modification command will cause a refill.
|
||||
(when (aref auto-fill-chars (char-before))
|
||||
;; Respond to the same characters as auto-fill (other than
|
||||
;; newline, covered below).
|
||||
(refill-fill-paragraph-at refill-doit)
|
||||
(setq refill-doit nil)))
|
||||
((quoted-insert fill-paragraph fill-region) nil)
|
||||
((newline newline-and-indent open-line indent-new-comment-line
|
||||
reindent-then-newline-and-indent)
|
||||
;; Don't zap what was just inserted.
|
||||
(save-excursion
|
||||
(beginning-of-line) ; for newline-and-indent
|
||||
(skip-chars-backward "\n")
|
||||
(save-restriction
|
||||
(narrow-to-region (point-min) (point))
|
||||
(refill-fill-paragraph-at refill-doit)))
|
||||
(widen)
|
||||
(save-excursion
|
||||
(skip-chars-forward "\n")
|
||||
(save-restriction
|
||||
(narrow-to-region (line-beginning-position) (point-max))
|
||||
(refill-fill-paragraph-at refill-doit))))
|
||||
(t
|
||||
(refill-fill-paragraph-at refill-doit)))
|
||||
(setq refill-doit nil)))
|
||||
|
||||
(defun refill-pre-command-function ()
|
||||
"Pre-command function to do refilling (conditionally)."
|
||||
|
@ -213,7 +211,7 @@ complex processing.")
|
|||
(refill-fill-paragraph-at refill-doit)
|
||||
(setq refill-doit nil)))
|
||||
|
||||
(defvar refill-late-fill-paragraph-function nil)
|
||||
(defvar refill-saved-state nil)
|
||||
|
||||
;;;###autoload
|
||||
(define-minor-mode refill-mode
|
||||
|
@ -228,16 +226,18 @@ refilling if they would cause auto-filling."
|
|||
(when refill-ignorable-overlay
|
||||
(delete-overlay refill-ignorable-overlay)
|
||||
(kill-local-variable 'refill-ignorable-overlay))
|
||||
(when (local-variable-p 'refill-late-fill-paragraph-function)
|
||||
(setq fill-paragraph-function refill-late-fill-paragraph-function)
|
||||
(kill-local-variable 'refill-late-fill-paragraph-function))
|
||||
(when (local-variable-p 'refill-saved-state)
|
||||
(dolist (x refill-saved-state)
|
||||
(set (make-local-variable (car x)) (cdr x)))
|
||||
(kill-local-variable 'refill-saved-state))
|
||||
(if refill-mode
|
||||
(progn
|
||||
(add-hook 'after-change-functions 'refill-after-change-function nil t)
|
||||
(add-hook 'post-command-hook 'refill-post-command-function nil t)
|
||||
(add-hook 'pre-command-hook 'refill-pre-command-function nil t)
|
||||
(set (make-local-variable 'refill-late-fill-paragraph-function)
|
||||
fill-paragraph-function)
|
||||
(set (make-local-variable 'refill-saved-state)
|
||||
(mapcar (lambda (s) (cons s (symbol-value s)))
|
||||
'(fill-paragraph-function auto-fill-function)))
|
||||
;; This provides the test for recursive paragraph filling.
|
||||
(set (make-local-variable 'fill-paragraph-function)
|
||||
'refill-fill-paragraph)
|
||||
|
@ -257,5 +257,5 @@ refilling if they would cause auto-filling."
|
|||
|
||||
(provide 'refill)
|
||||
|
||||
;;; arch-tag: 2c4ce9e8-1daa-4a3b-b6f8-fd6ac5bf6138
|
||||
;; arch-tag: 2c4ce9e8-1daa-4a3b-b6f8-fd6ac5bf6138
|
||||
;;; refill.el ends here
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2005-01-23 Kim F. Storm <storm@cua.dk>
|
||||
|
||||
* windows.texi (Window Start): Fix `pos-visible-in-window-p'
|
||||
return value. Third element FULLY replaced by PARTIAL which
|
||||
specifies number of invisible pixels if row is only partially visible.
|
||||
(Textual Scrolling): Mention auto-window-vscroll.
|
||||
(Vertical Scrolling): New defvar auto-window-vscroll.
|
||||
|
||||
2005-01-16 Luc Teirlinck <teirllm@auburn.edu>
|
||||
|
||||
* keymaps.texi (Changing Key Bindings): `suppress-keymap' now uses
|
||||
|
|
|
@ -1345,10 +1345,12 @@ non-@code{nil} anyway. @xref{Horizontal Scrolling}.
|
|||
If @var{position} is visible, @code{pos-visible-in-window-p} returns
|
||||
@code{t} if @var{partially} is @code{nil}; if @var{partially} is
|
||||
non-@code{nil}, it returns a list of the form @code{(@var{x} @var{y}
|
||||
@var{fully})}, where @var{x} and @var{y} are the pixel coordinates
|
||||
relative to the top left corner of the window, and @var{fully} is
|
||||
@code{t} if the character after @var{position} is fully visible and
|
||||
@code{nil} otherwise.
|
||||
@var{partial})}, where @var{x} and @var{y} are the pixel coordinates
|
||||
relative to the top left corner of the window, and @var{partial} is
|
||||
@code{nil} if the character after @var{position} is fully visible;
|
||||
otherwise it is a cons @code{(@var{rtop} . @var{rbot})} where the
|
||||
@var{rtop} and @var{rbot} specify the number of invisible pixels at
|
||||
the top and bottom of the row at @var{position}.
|
||||
|
||||
Here is an example:
|
||||
|
||||
|
@ -1397,6 +1399,12 @@ names that fit the user's point of view.
|
|||
buffer is different from the buffer that is displayed in the selected
|
||||
window. @xref{Current Buffer}.
|
||||
|
||||
If the window contains a row which is taller than the height of the
|
||||
window (for example in the presense of a large image), the scroll
|
||||
functions will adjust the window vscroll to scroll the partially
|
||||
visible row. To disable this feature, Lisp code may bind the variable
|
||||
`auto-window-vscroll' to @code{nil} (@pxref{Vertical Scrolling}).
|
||||
|
||||
@deffn Command scroll-up &optional count
|
||||
This function scrolls the text in the selected window upward
|
||||
@var{count} lines. If @var{count} is negative, scrolling is actually
|
||||
|
@ -1622,6 +1630,13 @@ If @var{pixels-p} is non-@code{nil}, @var{lines} specifies a number of
|
|||
pixels. In this case, the return value is @var{lines}.
|
||||
@end defun
|
||||
|
||||
@defvar auto-window-vscroll
|
||||
If this variable is non-@code{nil}, the line-move, scroll-up, and
|
||||
scroll-down functions will automatically modify the window vscroll to
|
||||
scroll through display rows that are taller that the height of the
|
||||
window, for example in the presense of large images.
|
||||
@end defvar
|
||||
|
||||
@node Horizontal Scrolling
|
||||
@section Horizontal Scrolling
|
||||
@cindex horizontal scrolling
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2005-01-24 David Kastrup <dak@gnu.org>
|
||||
|
||||
* faq.texi: Update AUCTeX version info.
|
||||
|
||||
2005-01-16 Xavier Maillard <zedek@gnu-rox.org> (tiny change)
|
||||
|
||||
* gnus-faq.texi ([4.1]): Typo.
|
||||
|
|
|
@ -4000,7 +4000,7 @@ User Manual}, and
|
|||
@email{dak@@gnu.org, David Kastrup}
|
||||
|
||||
@item Latest version
|
||||
11.52
|
||||
11.54
|
||||
|
||||
@item Distribution
|
||||
@uref{ftp://ftp.gnu.org/pub/gnu/auctex/}
|
||||
|
|
|
@ -1,3 +1,53 @@
|
|||
2005-01-24 Kim F. Storm <storm@cua.dk>
|
||||
|
||||
* xdisp.c (move_it_by_lines): If we move forward after going too
|
||||
far back, cancel move if end position is same as start position.
|
||||
|
||||
2005-01-24 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
|
||||
|
||||
* dispextern.h (struct glyph_string): New members clip_head and
|
||||
clip_tail.
|
||||
|
||||
* xdisp.c (get_glyph_string_clip_rect): Restrict horizontal clip
|
||||
region to the area between clip_head and clip_tail.
|
||||
(draw_glyphs): Record the area that need to be actually redrawn to
|
||||
the new variables clip_head and clip_tail when there are
|
||||
overhangs. Set values of these variables to the corresponding
|
||||
members in struct glyph_string. Refine x coordinates for
|
||||
notice_overwritten_cursor using clip_head and clip_tail.
|
||||
|
||||
* macgui.h (STORE_XCHARSETSTRUCT): New macro.
|
||||
|
||||
* macterm.c (mac_compute_glyph_string_overhangs): Implement with
|
||||
QDTextBounds.
|
||||
(x_draw_glyph_string): Don't fill the background of the successor
|
||||
of a glyph with a right overhang if the successor will draw a cursor.
|
||||
(XLoadQueryFont): Obtain font metrics using QDTextBounds.
|
||||
(x_redisplay_interface): Add entry for compute_glyph_string_overhangs.
|
||||
|
||||
2005-01-24 Kim F. Storm <storm@cua.dk>
|
||||
|
||||
* window.c (window_scroll_pixel_based): Fix scrolling in the wrong
|
||||
direction if window height was smaller than next-screen-context-lines.
|
||||
Now always scroll at least one line in the requested direction.
|
||||
Ensure that we actually do scroll backwards when requested to do so.
|
||||
|
||||
* xdisp.c (redisplay_window): Only try to make cursor line fully
|
||||
visible once (to avoid redisplay loop).
|
||||
|
||||
2005-01-23 Kim F. Storm <storm@cua.dk>
|
||||
|
||||
* window.c (Fpos_visible_in_window_p): Simplify return value for
|
||||
partially visible rows.
|
||||
(window_scroll_pixel_based): Adapt to that change.
|
||||
|
||||
* window.c (window_scroll_pixel_based): Force moving to next line
|
||||
if scrolling doesn't move start point, e.g. if looking at tall image.
|
||||
|
||||
* xdisp.c (pos_visible_p): Return 0 if non-interactive.
|
||||
Clear last_height before calling line_bottom_y to get real height.
|
||||
Fix calculation of y.
|
||||
|
||||
2005-01-22 Steven Tamm <steventamm@mac.com>
|
||||
|
||||
* s/darwin.h: Removed PTY_ITERATION from here.
|
||||
|
|
|
@ -1193,6 +1193,11 @@ struct glyph_string
|
|||
/* Slice */
|
||||
struct glyph_slice slice;
|
||||
|
||||
/* Non-null means the horizontal clipping region starts from the
|
||||
left edge of *clip_head, and ends with the right edge of
|
||||
*clip_tail, not including their overhangs. */
|
||||
struct glyph_string *clip_head, *clip_tail;
|
||||
|
||||
struct glyph_string *next, *prev;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Indentation functions.
|
||||
Copyright (C) 1985,86,87,88,93,94,95,98,2000,01,02,03,2004
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1998, 2000, 2001,
|
||||
2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Emacs.
|
||||
|
||||
|
@ -340,7 +340,9 @@ will have a variable width)
|
|||
Ignores finite width of frame, which means that this function may return
|
||||
values greater than (frame-width).
|
||||
Whether the line is visible (if `selective-display' is t) has no effect;
|
||||
however, ^M is treated as end of line when `selective-display' is t. */)
|
||||
however, ^M is treated as end of line when `selective-display' is t.
|
||||
Text that has an invisible property is considered as having width 0, unless
|
||||
`buffer-invisibility-spec' specifies that it is replaced by an ellipsis. */)
|
||||
()
|
||||
{
|
||||
Lisp_Object temp;
|
||||
|
|
|
@ -92,6 +92,13 @@ typedef struct _XCharStruct
|
|||
int descent;
|
||||
} XCharStruct;
|
||||
|
||||
#define STORE_XCHARSTRUCT(xcs, w, bds) \
|
||||
((xcs).width = (w), \
|
||||
(xcs).lbearing = (bds).left, \
|
||||
(xcs).rbearing = (bds).right, \
|
||||
(xcs).ascent = -(bds).top, \
|
||||
(xcs).descent = (bds).bottom)
|
||||
|
||||
struct MacFontStruct {
|
||||
char *fontname;
|
||||
|
||||
|
|
105
src/macterm.c
105
src/macterm.c
|
@ -1997,20 +1997,33 @@ static void
|
|||
mac_compute_glyph_string_overhangs (s)
|
||||
struct glyph_string *s;
|
||||
{
|
||||
#if 0
|
||||
/* MAC_TODO: XTextExtents16 does nothing yet... */
|
||||
Rect r;
|
||||
MacFontStruct *font = s->font;
|
||||
|
||||
if (s->cmp == NULL
|
||||
&& s->first_glyph->type == CHAR_GLYPH)
|
||||
TextFont (font->mac_fontnum);
|
||||
TextSize (font->mac_fontsize);
|
||||
TextFace (font->mac_fontface);
|
||||
|
||||
if (s->two_byte_p)
|
||||
QDTextBounds (s->nchars * 2, (char *)s->char2b, &r);
|
||||
else
|
||||
{
|
||||
XCharStruct cs;
|
||||
int direction, font_ascent, font_descent;
|
||||
XTextExtents16 (s->font, s->char2b, s->nchars, &direction,
|
||||
&font_ascent, &font_descent, &cs);
|
||||
s->right_overhang = cs.rbearing > cs.width ? cs.rbearing - cs.width : 0;
|
||||
s->left_overhang = cs.lbearing < 0 ? -cs.lbearing : 0;
|
||||
int i;
|
||||
char *buf = xmalloc (s->nchars);
|
||||
|
||||
if (buf == NULL)
|
||||
SetRect (&r, 0, 0, 0, 0);
|
||||
else
|
||||
{
|
||||
for (i = 0; i < s->nchars; ++i)
|
||||
buf[i] = s->char2b[i].byte2;
|
||||
QDTextBounds (s->nchars, buf, &r);
|
||||
xfree (buf);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
s->right_overhang = r.right > s->width ? r.right - s->width : 0;
|
||||
s->left_overhang = r.left < 0 ? -r.left : 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -3078,10 +3091,12 @@ x_draw_glyph_string (s)
|
|||
{
|
||||
int relief_drawn_p = 0;
|
||||
|
||||
/* If S draws into the background of its successor, draw the
|
||||
background of the successor first so that S can draw into it.
|
||||
This makes S->next use XDrawString instead of XDrawImageString. */
|
||||
if (s->next && s->right_overhang && !s->for_overlaps_p)
|
||||
/* If S draws into the background of its successor that does not
|
||||
draw a cursor, draw the background of the successor first so that
|
||||
S can draw into it. This makes S->next use XDrawString instead
|
||||
of XDrawImageString. */
|
||||
if (s->next && s->right_overhang && !s->for_overlaps_p
|
||||
&& s->next->hl != DRAW_CURSOR)
|
||||
{
|
||||
xassert (s->next->img == NULL);
|
||||
x_set_glyph_string_gc (s->next);
|
||||
|
@ -6780,30 +6795,40 @@ XLoadQueryFont (Display *dpy, char *fontname)
|
|||
returns 15 for 12-point Monaco! */
|
||||
char_width = CharWidth ('m');
|
||||
|
||||
font->max_bounds.rbearing = char_width;
|
||||
font->max_bounds.lbearing = 0;
|
||||
font->max_bounds.width = char_width;
|
||||
font->max_bounds.ascent = the_fontinfo.ascent;
|
||||
font->max_bounds.descent = the_fontinfo.descent;
|
||||
if (is_two_byte_font)
|
||||
{
|
||||
font->per_char = NULL;
|
||||
|
||||
font->min_bounds = font->max_bounds;
|
||||
if (fontface & italic)
|
||||
font->max_bounds.rbearing = char_width + 1;
|
||||
else
|
||||
font->max_bounds.rbearing = char_width;
|
||||
font->max_bounds.lbearing = 0;
|
||||
font->max_bounds.width = char_width;
|
||||
font->max_bounds.ascent = the_fontinfo.ascent;
|
||||
font->max_bounds.descent = the_fontinfo.descent;
|
||||
|
||||
if (is_two_byte_font || CharWidth ('m') == CharWidth ('i'))
|
||||
font->per_char = NULL;
|
||||
font->min_bounds = font->max_bounds;
|
||||
}
|
||||
else
|
||||
{
|
||||
font->per_char = (XCharStruct *)
|
||||
xmalloc (sizeof (XCharStruct) * (0xff - 0x20 + 1));
|
||||
{
|
||||
int c, min_width, max_width;
|
||||
int c, min_width, max_width;
|
||||
Rect char_bounds, min_bounds, max_bounds;
|
||||
char ch;
|
||||
|
||||
min_width = max_width = char_width;
|
||||
SetRect (&min_bounds, -32767, -32767, 32767, 32767);
|
||||
SetRect (&max_bounds, 0, 0, 0, 0);
|
||||
for (c = 0x20; c <= 0xff; c++)
|
||||
{
|
||||
font->per_char[c - 0x20] = font->max_bounds;
|
||||
char_width = CharWidth (c);
|
||||
font->per_char[c - 0x20].width = char_width;
|
||||
font->per_char[c - 0x20].rbearing = char_width;
|
||||
ch = c;
|
||||
char_width = CharWidth (ch);
|
||||
QDTextBounds (1, &ch, &char_bounds);
|
||||
STORE_XCHARSTRUCT (font->per_char[c - 0x20],
|
||||
char_width, char_bounds);
|
||||
/* Some Japanese fonts (in SJIS encoding) return 0 as the
|
||||
character width of 0x7f. */
|
||||
if (char_width > 0)
|
||||
|
@ -6811,9 +6836,25 @@ XLoadQueryFont (Display *dpy, char *fontname)
|
|||
min_width = min (min_width, char_width);
|
||||
max_width = max (max_width, char_width);
|
||||
}
|
||||
}
|
||||
font->min_bounds.width = min_width;
|
||||
font->max_bounds.width = max_width;
|
||||
if (!EmptyRect (&char_bounds))
|
||||
{
|
||||
SetRect (&min_bounds,
|
||||
max (min_bounds.left, char_bounds.left),
|
||||
max (min_bounds.top, char_bounds.top),
|
||||
min (min_bounds.right, char_bounds.right),
|
||||
min (min_bounds.bottom, char_bounds.bottom));
|
||||
UnionRect (&max_bounds, &char_bounds, &max_bounds);
|
||||
}
|
||||
}
|
||||
STORE_XCHARSTRUCT (font->min_bounds, min_width, min_bounds);
|
||||
STORE_XCHARSTRUCT (font->max_bounds, max_width, max_bounds);
|
||||
if (min_width == max_width
|
||||
&& max_bounds.left >= 0 && max_bounds.right <= max_width)
|
||||
{
|
||||
/* Fixed width and no overhangs. */
|
||||
xfree (font->per_char);
|
||||
font->per_char = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9719,7 +9760,7 @@ static struct redisplay_interface x_redisplay_interface =
|
|||
0, /* destroy_fringe_bitmap */
|
||||
mac_per_char_metric,
|
||||
mac_encode_char,
|
||||
NULL, /* mac_compute_glyph_string_overhangs */
|
||||
mac_compute_glyph_string_overhangs,
|
||||
x_draw_glyph_string,
|
||||
mac_define_frame_cursor,
|
||||
mac_clear_frame_area,
|
||||
|
|
57
src/window.c
57
src/window.c
|
@ -333,11 +333,10 @@ If POS is only out of view because of horizontal scrolling, return non-nil.
|
|||
POS defaults to point in WINDOW; WINDOW defaults to the selected window.
|
||||
|
||||
If POS is visible, return t if PARTIALLY is nil; if PARTIALLY is non-nil,
|
||||
return value is a list (X Y FULLY [RTOP RBOT]) where X and Y are the pixel
|
||||
coordinates relative to the top left corner of the window, and FULLY is t if the
|
||||
character after POS is fully visible and nil otherwise. If FULLY is nil,
|
||||
RTOP and RBOT are the number of pixels invisible at the top and bottom row
|
||||
of the window. */)
|
||||
return value is a list (X Y PARTIAL) where X and Y are the pixel coordinates
|
||||
relative to the top left corner of the window. PARTIAL is nil if the character
|
||||
after POS is fully visible; otherwise it is a cons (RTOP . RBOT) where RTOP
|
||||
and RBOT are the number of pixels invisible at the top and bottom of the row. */)
|
||||
(pos, window, partially)
|
||||
Lisp_Object pos, window, partially;
|
||||
{
|
||||
|
@ -376,12 +375,10 @@ of the window. */)
|
|||
if (!NILP (in_window) && !NILP (partially))
|
||||
in_window = Fcons (make_number (x),
|
||||
Fcons (make_number (y),
|
||||
Fcons (fully_p ? Qt : Qnil,
|
||||
(fully_p
|
||||
? Qnil
|
||||
: Fcons (make_number (rtop),
|
||||
Fcons (make_number (rbot),
|
||||
Qnil))))));
|
||||
Fcons ((fully_p ? Qnil
|
||||
: Fcons (make_number (rtop),
|
||||
make_number (rbot))),
|
||||
Qnil)));
|
||||
return in_window;
|
||||
}
|
||||
|
||||
|
@ -4578,21 +4575,23 @@ window_scroll_pixel_based (window, n, whole, noerror)
|
|||
}
|
||||
else if (auto_window_vscroll_p)
|
||||
{
|
||||
if (NILP (XCAR (XCDR (XCDR (tem)))))
|
||||
if (tem = XCAR (XCDR (XCDR (tem))), CONSP (tem))
|
||||
{
|
||||
int px;
|
||||
int dy = WINDOW_FRAME_LINE_HEIGHT (w);
|
||||
if (whole)
|
||||
dy = window_box_height (w) - next_screen_context_lines * dy;
|
||||
dy = max ((window_box_height (w)
|
||||
- next_screen_context_lines * dy),
|
||||
dy);
|
||||
dy *= n;
|
||||
|
||||
if (n < 0 && (px = XINT (Fnth (make_number (3), tem))) > 0)
|
||||
if (n < 0 && (px = XINT (XCAR (tem))) > 0)
|
||||
{
|
||||
px = max (0, -w->vscroll - min (px, -dy));
|
||||
Fset_window_vscroll (window, make_number (px), Qt);
|
||||
return;
|
||||
}
|
||||
if (n > 0 && (px = XINT (Fnth (make_number (4), tem))) > 0)
|
||||
if (n > 0 && (px = XINT (XCDR (tem))) > 0)
|
||||
{
|
||||
px = max (0, -w->vscroll + min (px, dy));
|
||||
Fset_window_vscroll (window, make_number (px), Qt);
|
||||
|
@ -4618,18 +4617,34 @@ window_scroll_pixel_based (window, n, whole, noerror)
|
|||
start_display (&it, w, start);
|
||||
if (whole)
|
||||
{
|
||||
int screen_full = (window_box_height (w)
|
||||
- next_screen_context_lines * FRAME_LINE_HEIGHT (it.f));
|
||||
int dy = n * screen_full;
|
||||
int start_pos = IT_CHARPOS (it);
|
||||
int dy = WINDOW_FRAME_LINE_HEIGHT (w);
|
||||
dy = max ((window_box_height (w)
|
||||
- next_screen_context_lines * dy),
|
||||
dy) * n;
|
||||
|
||||
/* Note that move_it_vertically always moves the iterator to the
|
||||
start of a line. So, if the last line doesn't have a newline,
|
||||
we would end up at the start of the line ending at ZV. */
|
||||
if (dy <= 0)
|
||||
move_it_vertically_backward (&it, -dy);
|
||||
{
|
||||
move_it_vertically_backward (&it, -dy);
|
||||
/* Ensure we actually does move, e.g. in case we are currently
|
||||
looking at an image that is taller that the window height. */
|
||||
while (start_pos == IT_CHARPOS (it)
|
||||
&& start_pos > BEGV)
|
||||
move_it_by_lines (&it, -1, 1);
|
||||
}
|
||||
else if (dy > 0)
|
||||
move_it_to (&it, ZV, -1, it.current_y + dy, -1,
|
||||
MOVE_TO_POS | MOVE_TO_Y);
|
||||
{
|
||||
move_it_to (&it, ZV, -1, it.current_y + dy, -1,
|
||||
MOVE_TO_POS | MOVE_TO_Y);
|
||||
/* Ensure we actually does move, e.g. in case we are currently
|
||||
looking at an image that is taller that the window height. */
|
||||
while (start_pos == IT_CHARPOS (it)
|
||||
&& start_pos < ZV)
|
||||
move_it_by_lines (&it, 1, 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
move_it_by_lines (&it, n, 1);
|
||||
|
|
52
src/xdisp.c
52
src/xdisp.c
|
@ -1259,16 +1259,18 @@ pos_visible_p (w, charpos, x, y, rtop, rbot, exact_mode_line_heights_p)
|
|||
{
|
||||
struct it it;
|
||||
struct text_pos top;
|
||||
int visible_p;
|
||||
int visible_p = 0;
|
||||
struct buffer *old_buffer = NULL;
|
||||
|
||||
if (noninteractive)
|
||||
return visible_p;
|
||||
|
||||
if (XBUFFER (w->buffer) != current_buffer)
|
||||
{
|
||||
old_buffer = current_buffer;
|
||||
set_buffer_internal_1 (XBUFFER (w->buffer));
|
||||
}
|
||||
|
||||
visible_p = 0;
|
||||
SET_TEXT_POS_FROM_MARKER (top, w->start);
|
||||
|
||||
/* Compute exact mode line heights, if requested. */
|
||||
|
@ -1293,7 +1295,7 @@ pos_visible_p (w, charpos, x, y, rtop, rbot, exact_mode_line_heights_p)
|
|||
if (IT_CHARPOS (it) >= charpos)
|
||||
{
|
||||
int top_y = it.current_y;
|
||||
int bottom_y = line_bottom_y (&it);
|
||||
int bottom_y = (last_height = 0, line_bottom_y (&it));
|
||||
int window_top_y = WINDOW_HEADER_LINE_HEIGHT (w);
|
||||
|
||||
if (top_y < window_top_y)
|
||||
|
@ -1303,7 +1305,7 @@ pos_visible_p (w, charpos, x, y, rtop, rbot, exact_mode_line_heights_p)
|
|||
if (visible_p && x)
|
||||
{
|
||||
*x = it.current_x;
|
||||
*y = max (top_y + it.max_ascent - it.ascent, window_top_y);
|
||||
*y = max (top_y + max (0, it.max_ascent - it.ascent), window_top_y);
|
||||
if (rtop)
|
||||
{
|
||||
*rtop = max (0, window_top_y - top_y);
|
||||
|
@ -1787,6 +1789,24 @@ get_glyph_string_clip_rect (s, nr)
|
|||
r.height = s->row->visible_height;
|
||||
}
|
||||
|
||||
if (s->clip_head)
|
||||
if (r.x < s->clip_head->x)
|
||||
{
|
||||
if (r.width >= s->clip_head->x - r.x)
|
||||
r.width -= s->clip_head->x - r.x;
|
||||
else
|
||||
r.width = 0;
|
||||
r.x = s->clip_head->x;
|
||||
}
|
||||
if (s->clip_tail)
|
||||
if (r.x + r.width > s->clip_tail->x + s->clip_tail->background_width)
|
||||
{
|
||||
if (s->clip_tail->x + s->clip_tail->background_width >= r.x)
|
||||
r.width = s->clip_tail->x + s->clip_tail->background_width - r.x;
|
||||
else
|
||||
r.width = 0;
|
||||
}
|
||||
|
||||
/* If S draws overlapping rows, it's sufficient to use the top and
|
||||
bottom of the window for clipping because this glyph string
|
||||
intentionally draws over other lines. */
|
||||
|
@ -6505,11 +6525,15 @@ move_it_by_lines (it, dvpos, need_y_p)
|
|||
it->current_y -= it2.current_y;
|
||||
it->current_x = it->hpos = 0;
|
||||
|
||||
/* If we moved too far, move IT some lines forward. */
|
||||
/* If we moved too far back, move IT some lines forward. */
|
||||
if (it2.vpos > -dvpos)
|
||||
{
|
||||
int delta = it2.vpos + dvpos;
|
||||
it2 = *it;
|
||||
move_it_to (it, -1, -1, -1, it->vpos + delta, MOVE_TO_VPOS);
|
||||
/* Move back again if we got too far ahead. */
|
||||
if (IT_CHARPOS (*it) >= start_charpos)
|
||||
*it = it2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12332,6 +12356,8 @@ redisplay_window (window, just_this_one_p)
|
|||
/* If centering point failed to make the whole line visible,
|
||||
put point at the top instead. That has to make the whole line
|
||||
visible, if it can be done. */
|
||||
if (centering_position == 0)
|
||||
goto done;
|
||||
clear_glyph_matrix (w->desired_matrix);
|
||||
centering_position = 0;
|
||||
goto point_at_top;
|
||||
|
@ -18338,6 +18364,7 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps_p)
|
|||
{
|
||||
struct glyph_string *head, *tail;
|
||||
struct glyph_string *s;
|
||||
struct glyph_string *clip_head = NULL, *clip_tail = NULL;
|
||||
int last_x, area_width;
|
||||
int x_reached;
|
||||
int i, j;
|
||||
|
@ -18406,6 +18433,7 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps_p)
|
|||
start = i;
|
||||
compute_overhangs_and_x (t, head->x, 1);
|
||||
prepend_glyph_string_lists (&head, &tail, h, t);
|
||||
clip_head = head;
|
||||
}
|
||||
|
||||
/* Prepend glyph strings for glyphs in front of the first glyph
|
||||
|
@ -18418,6 +18446,7 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps_p)
|
|||
i = left_overwriting (head);
|
||||
if (i >= 0)
|
||||
{
|
||||
clip_head = head;
|
||||
BUILD_GLYPH_STRINGS (i, start, h, t,
|
||||
DRAW_NORMAL_TEXT, dummy_x, last_x);
|
||||
for (s = h; s; s = s->next)
|
||||
|
@ -18437,6 +18466,7 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps_p)
|
|||
DRAW_NORMAL_TEXT, x, last_x);
|
||||
compute_overhangs_and_x (h, tail->x + tail->width, 0);
|
||||
append_glyph_string_lists (&head, &tail, h, t);
|
||||
clip_tail = tail;
|
||||
}
|
||||
|
||||
/* Append glyph strings for glyphs following the last glyph
|
||||
|
@ -18447,6 +18477,7 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps_p)
|
|||
i = right_overwriting (tail);
|
||||
if (i >= 0)
|
||||
{
|
||||
clip_tail = tail;
|
||||
BUILD_GLYPH_STRINGS (end, i, h, t,
|
||||
DRAW_NORMAL_TEXT, x, last_x);
|
||||
for (s = h; s; s = s->next)
|
||||
|
@ -18454,6 +18485,12 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps_p)
|
|||
compute_overhangs_and_x (h, tail->x + tail->width, 0);
|
||||
append_glyph_string_lists (&head, &tail, h, t);
|
||||
}
|
||||
if (clip_head || clip_tail)
|
||||
for (s = head; s; s = s->next)
|
||||
{
|
||||
s->clip_head = clip_head;
|
||||
s->clip_tail = clip_tail;
|
||||
}
|
||||
}
|
||||
|
||||
/* Draw all strings. */
|
||||
|
@ -18467,8 +18504,9 @@ draw_glyphs (w, x, row, area, start, end, hl, overlaps_p)
|
|||
completely. */
|
||||
&& !overlaps_p)
|
||||
{
|
||||
int x0 = head ? head->x : x;
|
||||
int x1 = tail ? tail->x + tail->background_width : x;
|
||||
int x0 = clip_head ? clip_head->x : (head ? head->x : x);
|
||||
int x1 = (clip_tail ? clip_tail->x + clip_tail->background_width
|
||||
: (tail ? tail->x + tail->background_width : x));
|
||||
|
||||
int text_left = window_box_left (w, TEXT_AREA);
|
||||
x0 -= text_left;
|
||||
|
|
Loading…
Add table
Reference in a new issue