window configurations no longer (since 21.5) include windows ! ?
16 years, 7 months
Henry S. Thompson
The following code behaves differently in 21.4.21 and 21.5.28:
(let ((w (selected-window))
(c (current-window-configuration)))
(split-window)
(view-buffer-other-window "foo")
(delete-window w)
(set-window-configuration c)
(window-live-p w))
Paste the above into *scratch* and execute it -- value is t in 21.4.21
and nil in 21.5.28. Basically, window identity is not preserved in
configurations, or, therefore, by save-window-excursion. This
causes no end of trouble for ecb.
The following excerpt from the section 38.1 of the Lispref
documentation ("Basic Concepts of Emacs Windows") suggests this is an
unintended regression:
Once removed from the frame, the window is effectively deleted and
should not be used, _even though there may still be references to
it_ from other Lisp objects. Restoring a saved window configuration
is the only way for a window no longer on the screen to come back to
life.
Can anyone involved in replacing the old C implementation of window
configurations (which did save the window objects themselves, along
with their properties) with the new Lisp implementation (which does
_not_ save the window objects) explain the reasoning behind this
incompatible (and as far as I can tell by searching pretty hard,
undocumented) change?
Thanks,
ht
--
Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
Half-time member of W3C Team
2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
Fax: (44) 131 650-4587, e-mail: ht(a)inf.ed.ac.uk
URL: http://www.ltg.ed.ac.uk/~ht/
[mail really from me _always_ has this .sig -- mail without it is forged spam]
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta
[PATCH] package sh-script executable.el (executable-interpret): parameter correction
16 years, 7 months
FKtPp
Dear Reviewers,
Do you think the following changelog and patch are acceptable to be
commited?
ChangeLog addition:
2008-03-15 It's me FKtPp ;) <m_pupil(a)yahoo.com.cn>
* executable.el (executable-interpret): Correct compile-internal's
parameters to avoid error when `C-c C-x'(executable-interpret).
sh-script[Packages] source patch:
Diff command: cvs -q diff -u
Files affected: executable.el
===================================================================
RCS
Index: executable.el
===================================================================
RCS file:
/pack/xemacscvs/XEmacs/packages/xemacs-packages/sh-script/executable.el,v
retrieving revision 1.4
diff -u -r1.4 executable.el
--- executable.el 2005/10/15 21:27:07 1.4
+++ executable.el 2008/03/15 08:26:22
@@ -223,9 +223,12 @@
(save-some-buffers (not compilation-ask-about-save))
(set (make-local-variable 'executable-command) command)
(let ((compilation-error-regexp-alist executable-error-regexp-alist))
- (compile-internal command t (lambda (x) "*interpretation*"))))
-
-
+ (compile-internal command
+ "No More Errors"
+ nil
+ nil
+ nil
+ (lambda (x) "*interpretation*"))))
;;;###autoload
(defun executable-set-magic (interpreter &optional argument
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta
XEmacs 21.5.28 hung on attempt to revert buffer
16 years, 7 months
Josh Glover
[Tried to use M-x report-xemacs-bug, but mailing failed]
================================================================
Dear Bug Team!
I was editing a buffer and appended a line of text to the file it was
displaying outside of XEmacs. I then attempted to revert the buffer
(which was almost certainly clean at that point--meaning I had no
unsaved edits on the XEmacs side), and XEmacs seemed to hang. I gave
it about two minutes to revert the buffer (the file is 148 bytes long
BTW) before killing XEmacs with "pkill xemacs", which produced the
below backtrace.
This bug is certainly non-critical; I'm just reporting it to be a good
beta tester. :)
I recommend assigning this bug to <stephen(a)xemacs.org>, mainly to
irritate him. ;)
Lisp backtrace follows:
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
("next_event_internal()" "[internal]")
# (unwind-protect ...)
# bind (inhibit-quit)
(next-event "[internal]")
next-event()
byte-code("..." [id event next-event eval-event-p event-function
internal-make-dialog-box-exit event-object throw --cl-block-nil--
(nil) dispatch-event] 3)
# (catch --cl-block-nil-- ...)
# bind (id sym)
byte-code("..." [thunk frames id sym eval gensym lambda (did) when
eq quote (did) mapc (quote enable-frame) (enqueue-eval-event (quote
internal-make-dialog-box-exit) did) remove-hook (quote
delete-dialog-box-hook) framep add-hook delete-frame-hook
delete-dialog-box-hook disable-frame --cl-block-nil-- (byte-code "� �
!��� !�a�� a�����\"���� !�)�\\" [id event next-event
eval-event-p event-function internal-make-dialog-box-exit event-object
throw --cl-block-nil-- (nil) dispatch-event] 3)] 11)
# (catch internal-dialog-box-finish ...)
# bind (frames thunk)
dialog-box-modal-loop((make-dialog-box-internal (quote question)
(quote (:question "Revert buffer from file
/home/jglover/docs/anywhere/timekeeping/2008-03-17.txt? " :buttons
(["Yes" (dialog-box-finish t)] ["No" (dialog-box-finish nil)] nil
["Cancel" (dialog-box-cancel)])))))
# bind (cl-modal)
# (unwind-protect ...)
# bind (--letf-save--7060 --letf-bound--7061 cl-keys type)
make-dialog-box(question :question "Revert buffer from file
/home/jglover/docs/anywhere/timekeeping/2008-03-17.txt? " :modal t
:buttons (["Yes" (dialog-box-finish t)] ["No" (dialog-box-finish nil)]
nil ["Cancel" (dialog-box-cancel)]))
# (unwind-protect ...)
# bind (ssf7057 prompt)
yes-or-no-p-dialog-box("Revert buffer from file
/home/jglover/docs/anywhere/timekeeping/2008-03-17.txt? ")
# bind (prompt)
yes-or-no-p("Revert buffer from file
/home/jglover/docs/anywhere/timekeeping/2008-03-17.txt? ")
# bind (file-name auto-save-p delay-prompt found newbuf opoint
preserve-modes noconfirm ignore-auto)
#<compiled-function (&optional ignore-auto noconfirm preserve-modes)
"...(395)" [--dolist-temp--6956 rx found
buffer-file-coding-system-when-loaded auto-save-p file-name nil
recent-auto-save-p file-readable-p y-or-n-p "Buffer has been
auto-saved recently. Revert from auto-save file? " error "Buffer does
not seem to be associated with any file" buffer-modified-p
string-match t yes-or-no-p format "Revert buffer from file %s? "
run-hooks before-revert-hook revert-buffer-internal
verify-visited-file-modtime default-value after-revert-hook
local-variable-p file-exists-p "File %s no longer exists!"
unlock-buffer escape-quoted coding-system-base get-coding-system
insert-file-contents set-buffer-file-coding-system after-find-file
set-default revert-buffer-internal-hook make-local-variable
kill-local-variable set-visited-file-modtime err
(hack-local-variables) ((error (byte-code "����!$�" [err lwarn
local-variables warning "File local-variables error: %s"
error-message-string] 6))) buffer-file-coding-system noconfirm newbuf
delay-prompt buffer-auto-save-file-name buffer-undo-list
should-update-bfcs ...] 7 1171147 (list (not current-prefix-arg))>(t)
call-interactively(revert-buffer)
(dispatch-event "[internal]")
# (condition-case ... . error)
# (catch top-level ...)
================================================================
System Info to help track down your bug:
---------------------------------------
uname -a: Linux jglover.laptop.amazon.com 2.6.8-1acustom #3 Thu Apr 7
13:32:18 PDT 2005 i686 Intel(R) Pentium(R) M processor 1.86GHz
GenuineIntel GNU/Linux
./configure '--prefix=/usr' '--host=i686-pc-linux-gnu'
'--mandir=/usr/share/man' '--infodir=/usr/share/info'
'--datadir=/usr/share' '--sysconfdir=/etc' '--localstatedir=/var/lib'
'--build=i686-pc-linux-gnu' 'build_alias=i686-pc-linux-gnu'
'host_alias=i686-pc-linux-gnu' 'CFLAGS=-O2 -march=pentium-m -pipe
-fomit-frame-pointer'
XEmacs 21.5-b28 "fuki" configured for `i686-pc-linux'.
Compilation Environment and Installation Defaults:
Source code location:
/var/tmp/portage/app-editors/xemacs-21.5.28/work/xemacs-21.5.28
Installation prefix: /usr
Operating system description file: `s/linux.h'
Machine description file: `m/intel386.h'
Compiler version: gcc (GCC) 4.1.1 (Gentoo 4.1.1)
- GCC specs file: specs.
- Compiler command: gcc -Wall -Wno-switch -Wundef
-Wsign-compare -Wno-char-subscripts -Wpacked -Wunused-parameter -g
-O2 -march=pentium-m -pipe -fomit-frame-pointer
libc version: 2.5
Relocating allocator for buffers: no
GNU version of malloc: yes
- Using Doug Lea's new malloc from the GNU C Library.
Window System:
Compiling in support for the X window system:
- X Windows headers location:
- X Windows libraries location:
- Handling WM_COMMAND properly.
Compiling in support for the Athena widget set:
- Athena headers location: X11/Xaw
- Athena library to link: Xaw
Using Lucid menubars.
Using Lucid scrollbars.
Using Athena dialog boxes.
Using Athena native widgets.
TTY:
Compiling in support for ncurses.
Compiling in support for GPM (General Purpose Mouse).
Images:
Compiling in support for GIF images (builtin).
Compiling in support for XPM images.
Compiling in support for PNG images.
Compiling in support for JPEG images.
Compiling in support for TIFF images.
Compiling in support for X-Face message headers.
Sound:
Compiling in support for sound (native).
Compiling in support for ALSA (Advanced Linux Sound Architecture).
Compiling in support for NAS (network audio system).
Databases:
Compiling in support for Berkeley database.
Internationalization:
Mail:
Compiling in support for "file" mail spool file locking method.
Other Features:
Inhibiting IPv6 canonicalization at startup.
Compiling in support for dynamic shared object modules.
Using the new GC mark algorithms (KKCC).
WARNING: ---------------------------------------------------------
WARNING: The new algorithms are experimental. They are enabled by
WARNING: default for this release. Use `--disable-kkcc' to
WARNING: turn it off.
WARNING: ---------------------------------------------------------
Using the new portable dumper.
Dumping into executable.
Compiling in support for extra debugging code.
Compiling in support for runtime error checking.
WARNING: ---------------------------------------------------------
WARNING: XEmacs will run noticeably more slowly as a result.
WARNING: Error checking is on by default for XEmacs beta releases.
WARNING: ---------------------------------------------------------
Load-Path Lisp Shadows:
----------------------
(/usr/lib/xemacs/xemacs-packages/lisp/xemacs-base/regexp-opt
/usr/lib/xemacs-21.5-b28/lisp/regexp-opt
/usr/lib/xemacs/xemacs-packages/lisp/build/build-report
/usr/lib/xemacs-21.5-b28/lisp/build-report
/usr/lib/xemacs/xemacs-packages/lisp/xemacs-base/easy-mmode
/usr/lib/xemacs-21.5-b28/lisp/easy-mmode)
Installed XEmacs Packages:
-------------------------
(zenirc ver: 1.16 upstream: 2.112)
(xwem ver: 1.22 upstream: lg(a)xwem.org--2005/xwem--main--2.1--versionfix-1)
(xslt-process ver: 1.12 upstream: 1.2.1)
(xslide ver: 1.09 upstream: 0.2.2)
(xlib ver: 1.14 upstream: lg(a)xwem.org--2005/xlib--main--2.1--version-0)
(xetla ver: 1.01 upstream: steve(a)eicq.org--2005/xetla--main--1.1--version-0)
(xemacs-devel ver: 1.75 upstream: No-Upstream-Ver)
(xemacs-base ver: 2.08 upstream: No-Upstream-Ver)
(x-symbol ver: 1.1 upstream: 4.5.1)
(w3 ver: 1.33 upstream: 4.0pre47)
(vm ver: 7.22 upstream: 7.17)
(viper ver: 1.53 upstream: 3.09)
(view-process ver: 1.13 upstream: 2.4)
(vhdl ver: 1.22 upstream: 3.33.12)
(vc-cc ver: 1.22 upstream: No-Upstream-Ver)
(vc ver: 1.41 upstream: No-Upstream-Ver)
(tramp ver: 1.34 upstream: 2.0.54)
(tpu ver: 1.14 upstream: 4.2X)
(tooltalk ver: 1.15 upstream: No-Upstream-Ver)
(tm ver: 1.38 upstream: No-Upstream-Ver)
(time ver: 1.14 upstream: 1.17)
(textools ver: 1.15 upstream: No-Upstream-Ver)
(text-modes ver: 1.92 upstream: No-Upstream-Ver)
(texinfo ver: 1.3 upstream: No-Upstream-Ver)
(supercite ver: 1.21 upstream: 3.55x3)
(strokes ver: 1.1 upstream: No-Upstream-Ver)
(speedbar ver: 1.28 upstream: 0.14beta4)
(sounds-wav ver: 1.12 upstream: No-Upstream-Ver)
(sounds-au ver: 1.12 upstream: No-Upstream-Ver)
(sml-mode ver: 0.12 upstream: 3.9.5)
(slider ver: 1.15 upstream: 0.3x1)
(sieve ver: 1.18 upstream: No-Upstream-Ver)
(sh-script ver: 1.21 upstream: 2.0f)
(sgml ver: 1.11 upstream: No-Upstream-Ver)
(semantic ver: 1.2 upstream: 1.4.4)
(scheme ver: 1.14 upstream: No-Upstream-Ver)
(sasl ver: 1.16 upstream: 1.14.4)
(ruby-modes ver: 1.02 upstream: 1.6.8)
(rmail ver: 1.14 upstream: No-Upstream-Ver)
(riece ver: 1.22 upstream: 2.0.2)
(reftex ver: 1.34 upstream: 4.21)
(re-builder ver: 1.05 upstream: 1.20)
(python-modes ver: 1.08 upstream: No-Upstream-Ver)
(psgml-dtds ver: 1.03 upstream: No-Upstream-Ver)
(psgml ver: 1.44 upstream: 1.3.1)
(ps-print ver: 1.11 upstream: 6.5.6)
(prog-modes ver: 2.09 upstream: No-Upstream-Ver)
(pgg ver: 1.06 upstream: 0.1)
(perl-modes ver: 1.09 upstream: No-Upstream-Ver)
(pcomplete ver: 1.04 upstream: 1.1.6)
(pcl-cvs ver: 1.67 upstream: R-2_9_9)
(pc ver: 1.28 upstream: No-Upstream-Ver)
(os-utils ver: 1.39 upstream: No-Upstream-Ver)
(oo-browser ver: 1.04 upstream: 4.08)
(ocaml ver: 0.06 upstream: 3.06)
(net-utils ver: 1.49 upstream: N/A)
(mmm-mode ver: 1.02 upstream: 0.4.7)
(misc-games ver: 1.18 upstream: No-Upstream-Ver)
(mine ver: 1.16 upstream: 1.9)
(mh-e ver: 1.29 upstream: 7.4.2)
(mew ver: 1.19 upstream: 1.94.2)
(mailcrypt ver: 2.14 upstream: 3.5.8)
(mail-lib ver: 1.78 upstream: No-Upstream-Ver)
(jde ver: 1.51 upstream: 2.3.3)
(ispell ver: 1.32 upstream: 3.6)
(ilisp ver: 1.34 upstream: 5.12.0)
(igrep ver: 1.14 upstream: 2.111)
(idlwave ver: 1.32 upstream: 5.1)
(ibuffer ver: 1.09 upstream: No-Upstream-Ver)
(hyperbole ver: 1.16 upstream: 4.18)
(hm--html-menus ver: 1.23 upstream: 5.9)
(haskell-mode ver: 1.1 upstream: 2.1)
(gnus ver: 1.9 upstream: 5.10.7)
(gnats ver: 1.17 upstream: 3.101)
(general-docs ver: 1.04 upstream: No-Upstream-Ver)
(games ver: 1.17 upstream: 1.04)
(fsf-compat ver: 1.15 upstream: No-Upstream-Ver)
(frame-icon ver: 1.11 upstream: No-Upstream-Ver)
(fortran-modes ver: 1.05 upstream: No-Upstream-Ver)
(forms ver: 1.15 upstream: 2.37)
(footnote ver: 1.16 upstream: 0.18x)
(eudc ver: 1.39 upstream: 1.32)
(eterm ver: 1.17 upstream: No-Upstream-Ver)
(eshell ver: 1.1 upstream: 2.4.1)
(escreen ver: 1.01 upstream: 1.16)
(erc ver: 0.21 upstream: Version 5.1.2 Revision: 1.796.2.6)
(emerge ver: 1.11 upstream: No-Upstream-Ver)
(elib ver: 1.11 upstream: 1.0)
(eieio ver: 1.05 upstream: 0.17)
(efs ver: 1.33 upstream: 1.23)
(edt ver: 1.13 upstream: No-Upstream-Ver)
(edit-utils ver: 2.36 upstream: No-Upstream-Ver)
(ediff ver: 1.66 upstream: 2.75)
(edebug ver: 1.22 upstream: No-Upstream-Ver)
(ecrypto ver: 0.2 upstream: 2.0)
(ecb ver: 1.22 upstream: 2.31)
(docbookide ver: 0.07000000000000001 upstream: 0.1)
(dired ver: 1.17 upstream: 7.13)
(dictionary ver: 1.16 upstream: 1.8)
(debug ver: 1.18 upstream: No-Upstream-Ver)
(crisp ver: 1.15 upstream: 1.34)
(cookie ver: 1.15 upstream: No-Upstream-Ver)
(clearcase ver: 1.1 upstream: /main/laptop/165)
(cc-mode ver: 1.45 upstream: 5.30.10)
(calendar ver: 1.3 upstream: No-Upstream-Ver)
(calc ver: 1.26 upstream: 2.02fX3)
(c-support ver: 1.22 upstream: No-Upstream-Ver)
(build ver: 1.14 upstream: 2.02)
(bbdb ver: 1.29 upstream: 2.34)
(auctex ver: 1.46 upstream: 11.55)
(apel ver: 1.32 upstream: 10.6)
(ada ver: 1.14 upstream: 2.27)
(Sun ver: 1.16 upstream: No-Upstream-Ver)
Installed Modules:
-----------------
Features:
--------
(mail-abbrevs xemacsbug shadow sendmail rfc822 tempo psgml-html
sgml-mode psgml cperl-mode efs-cu mwheel mmm-auto mmm-vars mmm-compat
overlay regexp-opt lazy-lock font-lock cus-face gnuserv
zenirc-autoloads xwem-autoloads xslt-process-autoloads
xslide-autoloads xlib-autoloads xetla-autoloads xemacs-devel-autoloads
xemacs-base-autoloads x-symbol-autoloads w3-autoloads vm-autoloads
viper-autoloads view-process-autoloads vhdl-autoloads vc-cc-autoloads
vc-autoloads tramp-autoloads tpu-autoloads tooltalk-autoloads
tm-autoloads time-autoloads textools-autoloads text-modes-autoloads
texinfo-autoloads supercite-autoloads strokes-autoloads
speedbar-autoloads sounds-wav-autoloads sounds-au-autoloads
sml-mode-autoloads slider-autoloads sieve-autoloads
sh-script-autoloads sgml-autoloads semantic-autoloads scheme-autoloads
sasl-autoloads ruby-modes-autoloads rmail-autoloads riece-autoloads
reftex-autoloads re-builder-autoloads python-modes-autoloads
psgml-dtds-autoloads psgml-autoloads ps-print-autoloads
prog-modes-autoloads pgg-autoloads perl-modes-autoloads
pcomplete-autoloads pcl-cvs-autoloads pc-autoloads os-utils-autoloads
oo-browser-autoloads ocaml-autoloads net-utils-autoloads
mmm-mode-autoloads misc-games-autoloads mine-autoloads mh-e-autoloads
mew-autoloads mailcrypt-autoloads mail-lib-autoloads jde-autoloads
ispell-autoloads ilisp-autoloads igrep-autoloads idlwave-autoloads
ibuffer-autoloads hyperbole-autoloads hm--html-menus-autoloads
haskell-mode-autoloads gnus-autoloads gnats-autoloads
general-docs-autoloads games-autoloads fsf-compat-autoloads
frame-icon-autoloads fortran-modes-autoloads forms-autoloads
footnote-autoloads eudc-autoloads eterm-autoloads eshell-autoloads
escreen-autoloads erc-autoloads emerge-autoloads elib-autoloads
eieio-autoloads efs-autoloads edt-autoloads edit-utils-autoloads
ediff-autoloads edebug-autoloads ecrypto-autoloads ecb-autoloads
docbookide-autoloads dired-autoloads dictionary-autoloads
debug-autoloads crisp-autoloads cookie-autoloads clearcase-autoloads
cc-mode-autoloads calendar-autoloads calc-autoloads
c-support-autoloads build-autoloads bbdb-autoloads auctex-autoloads
apel-autoloads ada-autoloads Sun-autoloads modules-autoloads
auto-autoloads auto-show fontl-hooks code-cmds gutter-items
menubar-items x-menubar mode-motion mouse behavior itimer auto-save
lisp-mode easymenu easy-mmode iso8859-1 page buff-menu lib-complete
loadhist cus-file derived newcomment rsz-minibuf env text-props frame
obsolete cus-start custom widget cl-extra cl cl-19 packages backquote
unicode lucid-scrollbars cut-buffer lucid-menubars athena-dialogs x
c-balloon-help tty-frames tty toolbar nas-sound native-sound
alsa-sound scrollbar unix-processes multicast network-streams
subprocesses modules menu-accelerator-support menubar berkeley-db md5
xemacs gutter tiff png gif jpeg xface xpm xbm lisp-float-type
file-coding linux dialog devices window-system base64)
Recent keystrokes:
-----------------
[Elided since XEmacs was killed and restarted before bug report]
Recent messages (most recent first):
-----------------------------------
[Elided since XEmacs was killed and restarted before bug report]
--
Cheers,
Josh
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta
make -jN in packages
16 years, 7 months
Skip Montanaro
Can someone confirm that the Makefile for the XEmacs packages isn't safe for
make -jN (N > 1), right? It looks like multiple xemacs invocations want to
update custome-defines.el at the same time without any sort of locking.
Skip
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta
rsync repository outdated?
16 years, 7 months
Skip Montanaro
I was poking around trying to find the latest packages and tried this:
rsync rsync.xemacs.org::xemacsftp/packages/
The python-mode directory there was last updated in May 2006, the sumo
packages in April 2007. Shouldn't this be more up-to-date? Did I miss
something? Where do I get Norbert's package releases?
Thx,
--
Skip Montanaro - skip(a)pobox.com - http://www.webfast.com/~skip/
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta
Re: building xemacs on aix with system malloc instead of default gnu malloc
16 years, 7 months
Thomas Mittelstädt
Did another measurement, when 2 frames are open and xemacs goes into
"hog"-mode.
Process PID TID Total Kernel User Shared Other
======= === === ===== ====== ==== ====== =====
wait 8196 8197 72,43 72,43 0,00 0,00 0,00
usr/local/bin/xemacs 303342 696425 24,03 1,70 20,21 2,12 0,00
/usr/local/bin/gdb 274524 602237 2,20 0,59 1,16 0,45 0,00
/usr/local/bin/top 221352 631039 0,42 0,36 0,04 0,01 0,00
/usr/sbin/syncd 102464 163921 0,23 0,23 0,00 0,00 0,00
usr/local/bin/xemacs 286896 733359 0,17 0,16 0,01 0,00 0,00
usr/local/bin/xemacs 327716 688307 0,16 0,16 0,00 0,00 0,00
m-aix5.2.0.0/gnuserv 286896 733359 0,10 0,10 0,00 0,00 0,00
/usr/bin/bash 303342 696425 0,04 0,03 0,00 0,01 0,00
/usr/bin/tprof 258278 667747 0,03 0,00 0,00 0,03 0,00
/opt/freeware/bin/ls 327716 688307 0,03 0,03 0,00 0,00 0,00
/usr/sbin/aixmibd 168026 254085 0,01 0,01 0,00 0,00 0,00
/usr/sbin/syncd 102464 151633 0,01 0,01 0,00 0,00 0,00
/usr/sbin/syncd 102464 159823 0,01 0,01 0,00 0,00 0,00
/usr/bin/tprof 274524 602237 0,01 0,01 0,00 0,00 0,00
/usr/bin/trcstop 274526 602239 0,01 0,01 0,00 0,00 0,00
/usr/bin/tprof 274526 602239 0,01 0,01 0,00 0,00 0,00
PID-1 -1 598115 0,01 0,01 0,00 0,00 0,00
gil 40980 53275 0,01 0,01 0,00 0,00 0,00
j2pg 65570 110647 0,01 0,01 0,00 0,00 0,00
nfsd 204900 299155 0,01 0,01 0,00 0,00 0,00
rpc.lockd 213114 344233 0,01 0,01 0,00 0,00 0,00
======= === === ===== ====== ==== ====== =====
Total 100,00 75,95 21,42 2,63 0,00
Total Samples = 6924 Total Elapsed Time = 69,26s
Total % For All Processes (USER) = 21,42
User
Process %
=============
======
/usr/local/bin/xemacs
20,22
/usr/local/bin/gdb
1,16
/usr/local/bin/top
0,04
Profile: /usr/local/bin/xemacs
Total % For All Processes (/usr/local/bin/xemacs) = 20,22
Subroutine %
Source
========== ======
======
.add_ichar_rune_1 1,94
redisplay.c
.create_text_block 1,00
redisplay.c
.display_table_entry 0,94
glyphs.c
.compare_runes 0,71 redisplay-output.c
========================================================================================
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Total % for .add_ichar_rune_1 = 1,94
Line % Source
1079 0,04 {
1080 - struct rune rb, *crb;
1081 - int width, local;
1082 -
1083 0,06 if (data->start_col)
1084 - {
1085 - data->start_col--;
1086 -
1087 - if (data->start_col)
1088 - return NULL;
1089 - }
1090 -
1091 0,03 if (data->byte_start_col_enabled)
1092 - {
1093 - return add_hscroll_rune (data);
1094 - }
1095 -
1096 0,01 if (data->ch == '\n')
1097 - {
1098 - data->font_is_bogus = 0;
1099 - /* Cheesy end-of-line pseudo-character. */
1100 - width = data->blank_width;
1101 - }
1102 - else
1103 - {
1104 - Lisp_Object charset = ichar_charset (data->ch);
1105 0,23 if (!EQ (charset, data->last_charset) ||
1106 - data->findex != data->last_findex)
1107 - {
1108 - /* OK, we need to do things the hard way. */
1109 - struct window *w = XWINDOW (data->window);
1110 - struct face_cachel *cachel = WINDOW_FACE_CACHEL (w,
data->findex);
1111 0,01 Lisp_Object font_instance =
1112 - ensure_face_cachel_contains_charset (cachel,
data->window,
1113 - charset);
1114 - Lisp_Font_Instance *fi;
1115 -
1116 - if (EQ (font_instance, Vthe_null_font_instance))
1117 - {
1118 - font_instance = FACE_CACHEL_FONT (cachel,
Vcharset_ascii);
1119 - data->font_is_bogus = 1;
1120 - }
1121 - else
1122 - data->font_is_bogus = 0;
1123 -
1124 - fi = XFONT_INSTANCE (font_instance);
1125 - if (!fi->proportional_p || data->font_is_bogus)
1126 - {
1127 - Ichar ch = data->font_is_bogus ? '~' : data->ch;
1128 -
1129 - data->last_char_width =
1130 - redisplay_text_width_ichar_string (XWINDOW
(data->window),
1131 - data->findex, &ch, 1);
1132 - }
1133 - else
1134 - data->last_char_width = -1;
1135 -
1136 - if (!no_contribute_to_line_height)
1137 - {
1138 0,01 data->new_ascent = max (data->new_ascent,
(int) fi->ascent);
1139 - data->new_descent = max (data->new_descent,
(int) fi->descent);
1140 - }
1141 -
1142 - data->last_charset = charset;
1143 - data->last_findex = data->findex;
1144 - }
1145 -
1146 - width = data->last_char_width;
1147 0,10 if (width < 0) /* proportional fonts */
1148 - width = redisplay_text_width_ichar_string (XWINDOW
(data->window),
1149 - data->findex,
1150 - &data->ch, 1);
1151 - }
1152 -
1153 0,14 if (data->max_pixpos != -1 && (data->pixpos + width >
data->max_pixpos))
1154 - {
1155 - return ADD_FAILED;
1156 - }
1157 -
1158 0,10 if (Dynarr_length (data->db->runes) < Dynarr_largest
(data->db->runes))
1159 - {
1160 0,17 crb = Dynarr_atp (data->db->runes, Dynarr_length
(data->db->runes));
1161 0,01 local = 0;
1162 - }
1163 - else
1164 - {
1165 - crb = &rb;
1166 - local = 1;
1167 - }
1168 -
1169 0,06 crb->findex = data->findex;
1170 0,04 crb->xpos = data->pixpos;
1171 - crb->width = width;
1172 0,04 if (data->byte_charpos)
1173 - {
1174 0,04 if (NILP (data->string))
1175 0,03 crb->charpos =
1176 - bytebpos_to_charbpos (XBUFFER (WINDOW_BUFFER
1177 - (XWINDOW (data->window))),
1178 - data->byte_charpos);
1179 - else
1180 - crb->charpos =
1181 - string_index_byte_to_char (data->string,
data->byte_charpos);
1182 - }
1183 0,01 else if (data->is_modeline)
1184 0,01 crb->charpos = data->modeline_charpos;
1185 - else
1186 - /* Text but not in buffer */
1187 - crb->charpos = 0;
1188 0,03 crb->type = RUNE_CHAR;
1189 0,17 crb->object.chr.ch = data->font_is_bogus ? '~' : data->ch;
1190 0,01 crb->endpos = 0;
1191 -
1192 0,10 if (data->cursor_type == CURSOR_ON)
1193 - {
1194 0,03 if (data->byte_charpos == data->byte_cursor_charpos)
1195 - {
1196 - crb->cursor_type = CURSOR_ON;
1197 - data->cursor_x = Dynarr_length (data->db->runes);
1198 - }
1199 - else
1200 0,03 crb->cursor_type = CURSOR_OFF;
1201 - }
1202 - else if (data->cursor_type == NEXT_CURSOR)
1203 - {
1204 - crb->cursor_type = CURSOR_ON;
1205 - data->cursor_x = Dynarr_length (data->db->runes);
1206 - data->cursor_type = NO_CURSOR;
1207 - }
1208 - else if (data->cursor_type == IGNORE_CURSOR)
1209 - crb->cursor_type = IGNORE_CURSOR;
1210 - else
1211 - crb->cursor_type = CURSOR_OFF;
1212 -
1213 - if (local)
1214 0,01 Dynarr_add (data->db->runes, *crb);
1215 - else
1216 0,12 Dynarr_increment (data->db->runes);
1217 -
1218 0,07 data->pixpos += width;
1219 -
1220 - return NULL;
1221 0,17 }
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Total % for .create_text_block = 1,00
Line % Source
2121 - {
2122 - struct frame *f = XFRAME (w->frame);
2123 - struct buffer *b = XBUFFER (w->buffer);
2124 - struct device *d = XDEVICE (f->device);
2125 -
2126 - pos_data data;
2127 -
2128 - /* Don't display anything in the minibuffer if this
window is not on
2129 - a selected frame. We consider all other windows to
be active
2130 - minibuffers as it simplifies the coding. */
2131 - int active_minibuffer = (!MINI_WINDOW_P (w) ||
2132 - (f == device_selected_frame (d)) ||
2133 - is_surrogate_for_selected_frame (f));
2134 -
2135 - int truncate_win = window_truncation_on (w);
2136 -
2137 - /* If the buffer's value of selective_display is an
integer then
2138 - only lines that start with less than
selective_display columns of
2139 - space will be displayed. If selective_display is t
then all text
2140 - after a ^M is invisible. */
2141 - int selective = (INTP (b->selective_display)
2142 - ? XINT (b->selective_display)
2143 - : (!NILP (b->selective_display) ? -1 : 0));
2144 -
2145 - /* The variable ctl-arrow allows the user to specify
what characters
2146 - can actually be displayed and which octal should be
used for.
2147 - #### This variable should probably have some
rethought done to
2148 - it.
2149 -
2150 - See also
2151 -
2152 - (Info-goto-node "(internals)Future Work -- Display
Tables")
2153 -
2154 - */
2155 - Ichar printable_min = (CHAR_OR_CHAR_INTP (b->ctl_arrow)
2156 - ? XCHAR_OR_CHAR_INT (b->ctl_arrow)
2157 - : ((EQ (b->ctl_arrow, Qt) || EQ
(b->ctl_arrow, Qnil))
2158 - ? 255 : 160));
2159 -
2160 - Lisp_Object face_dt, window_dt;
2161 -
2162 - /* The text display block for this display line. */
2163 - struct display_block *db = get_display_block_from_line
(dl, TEXT);
2164 -
2165 - /* The first time through the main loop we need to force
the glyph
2166 - data to be updated. */
2167 - int initial = 1;
2168 -
2169 - /* Apparently the new extent_fragment_update returns an
end position
2170 - equal to the position passed in if there are no more
runs to be
2171 - displayed. */
2172 - int no_more_frags = 0;
2173 -
2174 - Lisp_Object synch_minibuffers_value =
2175 - symbol_value_in_buffer (Qsynchronize_minibuffers,
w->buffer);
2176 -
2177 - dl->used_prop_data = 0;
2178 - dl->num_chars = 0;
2179 - dl->line_continuation = 0;
2180 -
2181 - xzero (data);
2182 - data.ef = extent_fragment_new (w->buffer, f);
2183 -
2184 - /* These values are used by all of the rune addition
routines. We add
2185 - them to this structure for ease of passing. */
2186 - data.d = d;
2187 - data.window = wrap_window (w);
2188 - data.string = Qnil;
2189 - data.db = db;
2190 - data.dl = dl;
2191 -
2192 - data.byte_charpos = byte_start_pos;
2193 - data.pixpos = dl->bounds.left_in;
2194 - data.last_charset = Qunbound;
2195 - data.last_findex = DEFAULT_INDEX;
2196 - data.result_str = Qnil;
2197 -
2198 - /* Set the right boundary adjusting it to take into
account any end
2199 - glyph. Save the width of the end glyph for later use. */
2200 - data.max_pixpos = dl->bounds.right_in;
2201 - if (truncate_win)
2202 - data.end_glyph_width = GLYPH_CACHEL_WIDTH (w,
TRUN_GLYPH_INDEX);
2203 - else
2204 - data.end_glyph_width = GLYPH_CACHEL_WIDTH (w,
CONT_GLYPH_INDEX);
2205 0,01 data.max_pixpos -= data.end_glyph_width;
2206 -
2207 - if (cursor_in_echo_area && MINI_WINDOW_P (w) &&
echo_area_active (f))
2208 - {
2209 - data.byte_cursor_charpos = BYTE_BUF_ZV (b);
2210 - data.cursor_type = CURSOR_ON;
2211 - }
2212 - else if (MINI_WINDOW_P (w) && !active_minibuffer)
2213 - data.cursor_type = NO_CURSOR;
2214 - else if (w == XWINDOW (FRAME_SELECTED_WINDOW (f)) &&
2215 - EQ(DEVICE_CONSOLE(d), Vselected_console) &&
2216 - d ==
XDEVICE(CONSOLE_SELECTED_DEVICE(XCONSOLE(DEVICE_CONSOLE(d))))&&
2217 - f == XFRAME(DEVICE_SELECTED_FRAME(d)))
2218 - {
2219 - data.byte_cursor_charpos = BYTE_BUF_PT (b);
2220 - data.cursor_type = CURSOR_ON;
2221 - }
2222 - else if (w == XWINDOW (FRAME_SELECTED_WINDOW (f)))
2223 - {
2224 - data.byte_cursor_charpos = byte_marker_position
(w->pointm[type]);
2225 - data.cursor_type = CURSOR_ON;
2226 - }
2227 - else
2228 - data.cursor_type = NO_CURSOR;
2229 - data.cursor_x = -1;
2230 -
2231 - data.start_col = w->hscroll;
2232 - data.start_col_xoffset = w->left_xoffset;
2233 0,01 data.byte_start_col_enabled = (w->hscroll ?
byte_start_pos: 0);
2234 - data.hscroll_glyph_width_adjust = 0;
2235 -
2236 - /* We regenerate the line from the very beginning. */
2237 - Dynarr_reset (db->runes);
2238 -
2239 - /* Why is this less than or equal and not just less
than? If the
2240 - starting position is already equal to the maximum we
can't add
2241 - anything else, right? Wrong. We might still have a
newline to
2242 - add. A newline can use the room allocated for an end
glyph since
2243 - if we add it we know we aren't going to be adding any end
2244 - glyph. */
2245 -
2246 - /* #### Chuck -- I think this condition should be while (1).
2247 - Otherwise if (e.g.) there is one begin-glyph and one
end-glyph
2248 - and the begin-glyph ends exactly at the end of the
window, the
2249 - end-glyph and text might not be displayed. while (1)
ensures
2250 - that the loop terminates only when either (a) there is
2251 - propagation data or (b) the end-of-line or
end-of-buffer is hit.
2252 -
2253 - #### Also I think you need to ensure that the operation
2254 - "add begin glyphs; add end glyphs; add text" is
atomic and
2255 - can't get interrupted in the middle. If you run off
the end
2256 - of the line during that operation, then you keep
accumulating
2257 - propagation data until you're done. Otherwise, if
the (e.g.)
2258 - there's a begin glyph at a particular position and
attempting
2259 - to display that glyph results in window-end being hit and
2260 - propagation data being generated, then the character
at that
2261 - position won't be displayed.
2262 -
2263 - #### See also the comment after the end of this loop,
below.
2264 - */
2265 0,04 while (data.pixpos <= data.max_pixpos
2266 - && (active_minibuffer || !NILP
(synch_minibuffers_value)))
2267 - {
2268 - /* #### This check probably should not be necessary. */
2269 0,07 if (data.byte_charpos > BYTE_BUF_ZV (b))
2270 - {
2271 - /* #### urk! More of this lossage! */
2272 - data.byte_charpos--;
2273 - goto done;
2274 - }
2275 -
2276 - /* If selective display was an integer and we aren't
working on
2277 - a continuation line then find the next line we are
actually
2278 - supposed to display. */
2279 - if (selective > 0
2280 - && (data.byte_charpos == BYTE_BUF_BEGV (b)
2281 - || BUF_FETCH_CHAR (b, prev_bytebpos (b,
data.byte_charpos)) == '\n'))
2282 - {
2283 - while (byte_spaces_at_point (b, data.byte_charpos)
>= selective)
2284 - {
2285 - data.byte_charpos =
2286 - byte_find_next_newline_no_quit (b,
data.byte_charpos, 1);
2287 - if (data.byte_charpos >= BYTE_BUF_ZV (b))
2288 - {
2289 - data.byte_charpos = BYTE_BUF_ZV (b);
2290 - goto done;
2291 - }
2292 - }
2293 - }
2294 -
2295 - /* Check for face changes. */
2296 0,04 if (initial || (!no_more_frags && data.byte_charpos
== data.ef->end))
2297 - {
2298 0,01 Lisp_Object last_glyph = Qnil;
2299 -
2300 - /* Deal with glyphs that we have already displayed. The
2301 - theory is that if we end up with a PROP_GLYPH in the
2302 - propagation data then we are clipping the glyph
and there
2303 - can be no propagation data before that point. The
theory
2304 - works because we always recalculate the
extent-fragments
2305 - for propagated data, we never actually propagate the
2306 - fragments that still need to be displayed. */
2307 - if (*prop && Dynarr_atp (*prop, 0)->type == PROP_GLYPH)
2308 - {
2309 - last_glyph = Dynarr_atp (*prop,
0)->data.p_glyph.glyph;
2310 - Dynarr_free (*prop);
2311 - *prop = 0;
2312 - }
2313 - /* Now compute the face and begin/end-glyph
information. */
2314 0,01 data.findex =
2315 - /* Remember that the extent-fragment routines deal
in Bytebpos's. */
2316 - extent_fragment_update (w, data.ef,
data.byte_charpos, last_glyph);
2317 -
2318 - get_display_tables (w, data.findex, &face_dt,
&window_dt);
2319 -
2320 - if (data.byte_charpos == data.ef->end)
2321 - no_more_frags = 1;
2322 - }
2323 0,01 initial = 0;
2324 -
2325 - /* Determine what is next to be displayed. We first
handle any
2326 - glyphs returned by glyphs_at_charbpos. If there are
no glyphs to
2327 - display then we determine what to do based on the
character at the
2328 - current buffer position. */
2329 -
2330 - /* If the current position is covered by an
invisible extent, do
2331 - nothing (except maybe add some ellipses).
2332 -
2333 - #### The behavior of begin and end-glyphs at the edge
of an
2334 - invisible extent should be investigated further. This is
2335 - fairly low priority though. */
2336 0,01 if (data.ef->invisible)
2337 - {
2338 - /* #### Chuck, perhaps you could look at this code?
I don't
2339 - really know what I'm doing. */
2340 - if (*prop)
2341 - {
2342 - Dynarr_free (*prop);
2343 - *prop = 0;
2344 - }
2345 -
2346 - /* The extent fragment code only sets this when we
should
2347 - really display the ellipses. It makes sure the
ellipses
2348 - don't get displayed more than once in a row. */
2349 - if (data.ef->invisible_ellipses)
2350 - {
2351 - struct glyph_block gb;
2352 -
2353 - data.ef->invisible_ellipses_already_displayed = 1;
2354 - data.ef->invisible_ellipses = 0;
2355 - gb.extent = Qnil;
2356 - gb.glyph = Vinvisible_text_glyph;
2357 - *prop = add_glyph_rune (&data, &gb, BEGIN_GLYPHS, 0,
2358 - GLYPH_CACHEL (w, INVIS_GLYPH_INDEX));
2359 - /* Perhaps they shouldn't propagate if the very
next thing
2360 - is to display a newline (for compatibility with
2361 - selective-display-ellipses)? Maybe that's too
2362 - abstruse. */
2363 - if (*prop)
2364 - goto done;
2365 - }
2366 -
2367 - /* If point is in an invisible region we place it on the
2368 - next visible character. */
2369 - if (data.cursor_type == CURSOR_ON
2370 - && data.byte_charpos == data.byte_cursor_charpos)
2371 - {
2372 - data.cursor_type = NEXT_CURSOR;
2373 - }
2374 -
2375 - /* #### What if we we're dealing with a display
table? */
2376 - if (data.start_col)
2377 - data.start_col--;
2378 -
2379 - if (data.byte_charpos == BYTE_BUF_ZV (b))
2380 - goto done;
2381 - else
2382 - INC_BYTEBPOS (b, data.byte_charpos);
2383 - }
2384 -
2385 - /* If there is propagation data, then it represents
the current
2386 - buffer position being displayed. Add them and
advance the
2387 - position counter. This might also add the minibuffer
2388 - prompt. */
2389 - else if (*prop)
2390 - {
2391 - dl->used_prop_data = 1;
2392 - *prop = add_propagation_runes (prop, &data);
2393 -
2394 - if (*prop)
2395 - goto done; /* gee, a really narrow window */
2396 - else if (data.byte_charpos == BYTE_BUF_ZV (b))
2397 - goto done;
2398 - else if (data.byte_charpos < BYTE_BUF_BEGV (b))
2399 - /* #### urk urk urk! Aborts are not very fun! Fix
this please! */
2400 - data.byte_charpos = BYTE_BUF_BEGV (b);
2401 - else
2402 - INC_BYTEBPOS (b, data.byte_charpos);
2403 - }
2404 -
2405 - /* If there are end glyphs, add them to the line.
These are
2406 - the end glyphs for the previous run of text. We add them
2407 - here rather than doing them at the end of handling the
2408 - previous run so that glyphs at the beginning and end of
2409 - a line are handled correctly. */
2410 0,07 else if (Dynarr_length (data.ef->end_glyphs) > 0
2411 - || Dynarr_length (data.ef->begin_glyphs) > 0)
2412 - {
2413 - glyph_block_dynarr* tmpglyphs = 0;
2414 - /* #### I think this is safe, but could be wrong. */
2415 - data.ch = BYTE_BUF_FETCH_CHAR (b, data.byte_charpos);
2416 -
2417 - if (Dynarr_length (data.ef->end_glyphs) > 0)
2418 - {
2419 - *prop = add_glyph_runes (&data, END_GLYPHS);
2420 - tmpglyphs = data.ef->end_glyphs;
2421 - }
2422 -
2423 - /* If there are begin glyphs, add them to the line. */
2424 - if (!*prop && Dynarr_length (data.ef->begin_glyphs) > 0)
2425 - {
2426 - *prop = add_glyph_runes (&data, BEGIN_GLYPHS);
2427 - tmpglyphs = data.ef->begin_glyphs;
2428 - }
2429 -
2430 - if (*prop)
2431 - {
2432 - /* If we just clipped a glyph and we are at the
end of a
2433 - line and there are more glyphs to display then do
2434 - appropriate processing to not get a continuation
2435 - glyph. */
2436 - if (*prop != ADD_FAILED
2437 - && Dynarr_atp (*prop, 0)->type == PROP_GLYPH
2438 - && data.ch == '\n')
2439 - {
2440 - /* If there are no more glyphs then do the normal
2441 - processing.
2442 -
2443 - #### This doesn't actually work if the same
glyph is
2444 - present more than once in the block. To solve
2445 - this we would have to carry the index around
2446 - which might be problematic since the fragment is
2447 - recalculated for each line. */
2448 - if (EQ (Dynarr_end (tmpglyphs)->glyph,
2449 - Dynarr_atp (*prop, 0)->data.p_glyph.glyph))
2450 - {
2451 - Dynarr_free (*prop);
2452 - *prop = 0;
2453 - }
2454 - else {
2455 - data.blank_width = DEVMETH (d,
eol_cursor_width, ());
2456 - add_ichar_rune (&data); /* discard prop data. */
2457 - goto done;
2458 - }
2459 - }
2460 - else
2461 - goto done;
2462 - }
2463 - }
2464 -
2465 - /* If at end-of-buffer, we've already processed
begin and
2466 - end-glyphs at this point and there's no text to process,
2467 - so we're done. */
2468 - else if (data.byte_charpos == BYTE_BUF_ZV (b))
2469 - goto done;
2470 -
2471 - else
2472 - {
2473 0,04 Lisp_Object entry = Qnil;
2474 - /* Get the character at the current buffer position. */
2475 0,09 data.ch = BYTE_BUF_FETCH_CHAR (b, data.byte_charpos);
2476 0,09 if (!NILP (face_dt) || !NILP (window_dt))
2477 0,12 entry = display_table_entry (data.ch, face_dt,
window_dt);
2478 -
2479 - /* If there is a display table entry for it, hand it
off to
2480 - add_disp_table_entry_runes and let it worry about
it. */
2481 0,04 if (!NILP (entry) && !EQ (entry, make_char (data.ch)))
2482 - {
2483 - *prop = add_disp_table_entry_runes (&data, entry);
2484 -
2485 - if (*prop)
2486 - goto done;
2487 - }
2488 -
2489 - /* Check if we have hit a newline character. If so,
add a marker
2490 - to the line and end this loop. */
2491 0,03 else if (data.ch == '\n')
2492 - {
2493 - /* We aren't going to be adding an end glyph so
give its
2494 - space back in order to make sure that the cursor can
2495 - fit. */
2496 - data.max_pixpos += data.end_glyph_width;
2497 -
2498 - if (selective > 0
2499 - && (byte_spaces_at_point
2500 - (b, next_bytebpos (b, data.byte_charpos))
2501 - >= selective))
2502 - {
2503 - if (!NILP (b->selective_display_ellipses))
2504 - {
2505 - struct glyph_block gb;
2506 -
2507 - gb.extent = Qnil;
2508 - gb.glyph = Vinvisible_text_glyph;
2509 - add_glyph_rune (&data, &gb, BEGIN_GLYPHS, 0,
2510 - GLYPH_CACHEL (w, INVIS_GLYPH_INDEX));
2511 - }
2512 - else
2513 - {
2514 - /* Cheesy, cheesy, cheesy. We mark the end
of the
2515 - line with a special "character rune" whose width
2516 - is the EOL cursor width and whose character is
2517 - the non-printing character '\n'. */
2518 - data.blank_width = DEVMETH (d,
eol_cursor_width, ());
2519 - *prop = add_ichar_rune (&data);
2520 - }
2521 -
2522 - /* We need to set data.byte_charpos to the start
of the
2523 - next visible region in order to make this line
2524 - appear to contain all of the invisible area.
2525 - Otherwise, the line cache won't work
2526 - correctly. */
2527 - INC_BYTEBPOS (b, data.byte_charpos);
2528 - while (byte_spaces_at_point (b,
data.byte_charpos) >= selective)
2529 - {
2530 - data.byte_charpos =
2531 - byte_find_next_newline_no_quit (b,
data.byte_charpos, 1);
2532 - if (data.byte_charpos >= BYTE_BUF_ZV (b))
2533 - {
2534 - data.byte_charpos = BYTE_BUF_ZV (b);
2535 - break;
2536 - }
2537 - }
2538 - if (BYTE_BUF_FETCH_CHAR
2539 - (b, prev_bytebpos (b, data.byte_charpos)) ==
'\n')
2540 - DEC_BYTEBPOS (b, data.byte_charpos);
2541 - }
2542 - else
2543 - {
2544 - data.blank_width = DEVMETH (d, eol_cursor_width,
());
2545 - *prop = add_ichar_rune (&data);
2546 - }
2547 -
2548 - goto done;
2549 - }
2550 -
2551 - /* If the current character is ^M, and selective
display is
2552 - enabled, then add the invisible-text-glyph if
2553 - selective-display-ellipses is set. In any case, this
2554 - line is done. */
2555 - else if (data.ch == (('M' & 037)) && selective == -1)
2556 - {
2557 - Bytebpos byte_next_charpos;
2558 -
2559 - /* Find the buffer position at the end of the
line. */
2560 - byte_next_charpos =
2561 - byte_find_next_newline_no_quit (b,
data.byte_charpos, 1);
2562 - if (BYTE_BUF_FETCH_CHAR (b, prev_bytebpos (b,
byte_next_charpos))
2563 - == '\n')
2564 - DEC_BYTEBPOS (b, byte_next_charpos);
2565 -
2566 - /* If the cursor is somewhere in the elided text
make
2567 - sure that the cursor gets drawn appropriately. */
2568 - if (data.cursor_type == CURSOR_ON
2569 - && (data.byte_cursor_charpos >= data.byte_charpos &&
2570 - data.byte_cursor_charpos < byte_next_charpos))
2571 - {
2572 - data.cursor_type = NEXT_CURSOR;
2573 - }
2574 -
2575 - /* We won't be adding a truncation or
continuation glyph
2576 - so give up the room allocated for them. */
2577 - data.max_pixpos += data.end_glyph_width;
2578 -
2579 - if (!NILP (b->selective_display_ellipses))
2580 - {
2581 - /* We don't propagate anything from the invisible
2582 - text glyph if it fails to fit. This is
2583 - intentional. */
2584 - struct glyph_block gb;
2585 -
2586 - gb.extent = Qnil;
2587 - gb.glyph = Vinvisible_text_glyph;
2588 - add_glyph_rune (&data, &gb, BEGIN_GLYPHS, 1,
2589 - GLYPH_CACHEL (w, INVIS_GLYPH_INDEX));
2590 - }
2591 -
2592 - /* Set the buffer position to the end of the
line. We
2593 - need to do this before potentially adding a newline
2594 - so that the cursor flag will get set correctly (if
2595 - needed). */
2596 - data.byte_charpos = byte_next_charpos;
2597 -
2598 - if (NILP (b->selective_display_ellipses)
2599 - || data.byte_cursor_charpos == byte_next_charpos)
2600 - {
2601 - /* We have to at least add a newline character so
2602 - that the cursor shows up properly. */
2603 - data.ch = '\n';
2604 - data.blank_width = DEVMETH (d, eol_cursor_width,
());
2605 - data.findex = DEFAULT_INDEX;
2606 - data.start_col = 0;
2607 - data.start_col_xoffset = 0;
2608 - data.byte_start_col_enabled = 0;
2609 -
2610 - add_ichar_rune (&data);
2611 - }
2612 -
2613 - /* This had better be a newline but doing it
this way
2614 - we'll see obvious incorrect results if it isn't. No
2615 - need to abort here. */
2616 - data.ch = BYTE_BUF_FETCH_CHAR (b,
data.byte_charpos);
2617 -
2618 - goto done;
2619 - }
2620 -
2621 - /* If the current character is considered to be
printable, then
2622 - just add it. */
2623 0,01 else if (data.ch >= printable_min)
2624 - {
2625 - *prop = add_ichar_rune (&data);
2626 - if (*prop)
2627 - goto done;
2628 - }
2629 -
2630 - /* If the current character is a tab, determine the
next tab
2631 - starting position and add a blank rune which
extends from the
2632 - current pixel position to that starting position. */
2633 - else if (data.ch == '\t')
2634 - {
2635 - int tab_start_pixpos = data.pixpos;
2636 - int next_tab_start;
2637 - int char_tab_width;
2638 - int prop_width = 0;
2639 -
2640 - if (data.start_col > 1)
2641 - tab_start_pixpos -= (space_width (w) *
(data.start_col - 1))
2642 - + data.start_col_xoffset;
2643 -
2644 - next_tab_start =
2645 - next_tab_position (w, tab_start_pixpos,
2646 - dl->bounds.left_in +
2647 - data.hscroll_glyph_width_adjust);
2648 - if (next_tab_start > data.max_pixpos)
2649 - {
2650 - prop_width = next_tab_start - data.max_pixpos;
2651 - next_tab_start = data.max_pixpos;
2652 - }
2653 - data.blank_width = next_tab_start - data.pixpos;
2654 - char_tab_width =
2655 - (next_tab_start - tab_start_pixpos) / space_width (w);
2656 -
2657 - *prop = add_blank_rune (&data, w, char_tab_width);
2658 -
2659 - /* add_blank_rune is only supposed to be called with
2660 - sizes guaranteed to fit in the available space. */
2661 - assert (!(*prop));
2662 -
2663 - if (prop_width)
2664 - {
2665 - struct prop_block pb;
2666 - *prop = Dynarr_new (prop_block);
2667 -
2668 - pb.type = PROP_BLANK;
2669 - pb.data.p_blank.width = prop_width;
2670 - pb.data.p_blank.findex = data.findex;
2671 - Dynarr_add (*prop, pb);
2672 -
2673 - goto done;
2674 - }
2675 - }
2676 -
2677 - /* If character is a control character, pass it off to
2678 - add_control_char_runes.
2679 -
2680 - The is_*() routines have undefined results on
2681 - arguments outside of the range [-1, 255]. (This
2682 - often bites people who carelessly use `char' instead
2683 - of `unsigned char'.)
2684 - */
2685 0,04 else if (data.ch < 0x100 && iscntrl ((Ibyte) data.ch))
2686 - {
2687 - *prop = add_control_char_runes (&data, b);
2688 -
2689 - if (*prop)
2690 - goto done;
2691 - }
2692 -
2693 - /* If the character is above the ASCII range and we
have not
2694 - already handled it, then print it as an octal
number. */
2695 - else if (data.ch >= 0200)
2696 - {
2697 - *prop = add_octal_runes (&data);
2698 -
2699 - if (*prop)
2700 - goto done;
2701 - }
2702 -
2703 - /* Assume the current character is considered to be
printable,
2704 - then just add it. */
2705 - else
2706 - {
2707 0,03 *prop = add_ichar_rune (&data);
2708 0,03 if (*prop)
2709 - goto done;
2710 - }
2711 -
2712 - INC_BYTEBPOS (b, data.byte_charpos);
2713 - }
2714 - }
2715 -
2716 - done:
2717 -
2718 - /* Determine the starting point of the next line if we
did not hit the
2719 - end of the buffer. */
2720 - if (data.byte_charpos < BYTE_BUF_ZV (b)
2721 - && (active_minibuffer || !NILP
(synch_minibuffers_value)))
2722 - {
2723 - /* #### This check is not correct. If the line
terminated
2724 - due to a begin-glyph or end-glyph hitting window-end,
then
2725 - data.ch will not point to the character at
data.byte_charpos. If
2726 - you make the two changes mentioned at the top of this
loop,
2727 - you should be able to say '(if (*prop))'. That
should also
2728 - make it possible to eliminate the data.byte_charpos <
BYTE_BUF_ZV (b)
2729 - check. */
2730 -
2731 - /* The common case is that the line ended because we
hit a newline.
2732 - In that case, the next character is just the next buffer
2733 - position. */
2734 - if (data.ch == '\n')
2735 - {
2736 - /* If data.start_col_enabled is still true, then the
window is
2737 - scrolled far enough so that nothing on this line
is visible.
2738 - We need to stick a truncation glyph at the
beginning of the
2739 - line in that case unless the line is completely
blank. */
2740 - if (data.byte_start_col_enabled)
2741 - {
2742 - if (data.cursor_type == CURSOR_ON)
2743 - {
2744 - if (data.byte_cursor_charpos >= byte_start_pos
2745 - && data.byte_cursor_charpos <=
data.byte_charpos)
2746 - data.byte_cursor_charpos = data.byte_charpos;
2747 - }
2748 - data.findex = DEFAULT_INDEX;
2749 - data.start_col = 0;
2750 - data.byte_start_col_enabled = 0;
2751 -
2752 - if (data.byte_charpos != byte_start_pos)
2753 - {
2754 - struct glyph_block gb;
2755 -
2756 - gb.extent = Qnil;
2757 - gb.glyph = Vhscroll_glyph;
2758 - add_glyph_rune (&data, &gb, BEGIN_GLYPHS, 0,
2759 - GLYPH_CACHEL (w, HSCROLL_GLYPH_INDEX));
2760 - }
2761 - else
2762 - {
2763 - /* This duplicates code down below to add a
newline to
2764 - the end of an otherwise empty line.*/
2765 - data.ch = '\n';
2766 - data.blank_width = DEVMETH (d, eol_cursor_width,
());
2767 -
2768 - add_ichar_rune (&data);
2769 - }
2770 - }
2771 -
2772 - INC_BYTEBPOS (b, data.byte_charpos);
2773 - }
2774 -
2775 - /* Otherwise we have a buffer line which cannot fit
on one display
2776 - line. */
2777 - else
2778 - {
2779 - struct glyph_block gb;
2780 - struct glyph_cachel *cachel;
2781 -
2782 - /* If the line is to be truncated then we actually
have to look
2783 - for the next newline. We also add the
end-of-line glyph which
2784 - we know will fit because we adjusted the right
border before
2785 - we starting laying out the line. */
2786 - data.max_pixpos += data.end_glyph_width;
2787 - data.findex = DEFAULT_INDEX;
2788 - gb.extent = Qnil;
2789 -
2790 - if (truncate_win)
2791 - {
2792 - Bytebpos byte_pos;
2793 -
2794 - /* Now find the start of the next line. */
2795 - byte_pos = byte_find_next_newline_no_quit (b,
data.byte_charpos, 1);
2796 -
2797 - /* If the cursor is past the truncation line then we
2798 - make it appear on the truncation glyph. If we've hit
2799 - the end of the buffer then we also make the cursor
2800 - appear unless eob is immediately preceded by a
2801 - newline. In that case the cursor should actually
2802 - appear on the next line. */
2803 - if (data.cursor_type == CURSOR_ON
2804 - && data.byte_cursor_charpos >= data.byte_charpos
2805 - && (data.byte_cursor_charpos < byte_pos ||
2806 - (byte_pos == BYTE_BUF_ZV (b)
2807 - && (byte_pos == BYTE_BUF_BEGV (b)
2808 - || (BYTE_BUF_FETCH_CHAR (b, prev_bytebpos
(b, byte_pos))
2809 - != '\n')))))
2810 - data.byte_cursor_charpos = byte_pos;
2811 - else
2812 - data.cursor_type = NO_CURSOR;
2813 -
2814 - data.byte_charpos = byte_pos;
2815 - gb.glyph = Vtruncation_glyph;
2816 - cachel = GLYPH_CACHEL (w, TRUN_GLYPH_INDEX);
2817 - }
2818 - else
2819 - {
2820 - /* The cursor can never be on the continuation
glyph. */
2821 - data.cursor_type = NO_CURSOR;
2822 -
2823 - /* data.byte_charpos is already at the start of
the next line. */
2824 -
2825 - dl->line_continuation = 1;
2826 - gb.glyph = Vcontinuation_glyph;
2827 - cachel = GLYPH_CACHEL (w, CONT_GLYPH_INDEX);
2828 - }
2829 -
2830 - add_glyph_rune (&data, &gb, BEGIN_GLYPHS, 0, cachel);
2831 -
2832 - if (truncate_win && data.byte_charpos == BYTE_BUF_ZV (b)
2833 - && BYTE_BUF_FETCH_CHAR (b, prev_bytebpos (b,
BYTE_BUF_ZV (b))) != '\n')
2834 - /* #### Damn this losing shit. */
2835 - data.byte_charpos++;
2836 - }
2837 - }
2838 - else if ((active_minibuffer || !NILP
(synch_minibuffers_value))
2839 - && (!echo_area_active (f) || data.byte_charpos ==
BYTE_BUF_ZV (b)))
2840 - {
2841 - /* We need to add a marker to the end of the line
since there is no
2842 - newline character in order for the cursor to get
drawn. We label
2843 - it as a newline so that it gets handled correctly by the
2844 - whitespace routines below. */
2845 -
2846 - data.ch = '\n';
2847 - data.blank_width = DEVMETH (d, eol_cursor_width, ());
2848 - data.findex = DEFAULT_INDEX;
2849 - data.start_col = 0;
2850 - data.start_col_xoffset = 0;
2851 - data.byte_start_col_enabled = 0;
2852 -
2853 - data.max_pixpos += data.blank_width;
2854 - add_ichar_rune (&data);
2855 - data.max_pixpos -= data.blank_width;
2856 -
2857 - /* #### urk! Chuck, this shit is bad news. Going
around
2858 - manipulating invalid positions is guaranteed to result in
2859 - trouble sooner or later. */
2860 - data.byte_charpos = BYTE_BUF_ZV (b) + 1;
2861 - }
2862 -
2863 - /* Calculate left whitespace boundary. */
2864 - {
2865 - int elt = 0;
2866 -
2867 - /* Whitespace past a newline is considered right
whitespace. */
2868 - while (elt < Dynarr_length (db->runes))
2869 - {
2870 - struct rune *rb = Dynarr_atp (db->runes, elt);
2871 -
2872 - if ((rb->type == RUNE_CHAR && rb->object.chr.ch == ' ')
2873 - || rb->type == RUNE_BLANK)
2874 - {
2875 - dl->bounds.left_white += rb->width;
2876 - elt++;
2877 - }
2878 - else
2879 - elt = Dynarr_length (db->runes);
2880 - }
2881 - }
2882 -
2883 - /* Calculate right whitespace boundary. */
2884 - {
2885 - int elt = Dynarr_length (db->runes) - 1;
2886 - int done = 0;
2887 -
2888 0,01 while (!done && elt >= 0)
2889 - {
2890 0,03 struct rune *rb = Dynarr_atp (db->runes, elt);
2891 -
2892 0,09 if (!(rb->type == RUNE_CHAR && rb->object.chr.ch < 0x100
2893 - && isspace (rb->object.chr.ch))
2894 - && !rb->type == RUNE_BLANK)
2895 - {
2896 - dl->bounds.right_white = rb->xpos + rb->width;
2897 - done = 1;
2898 - }
2899 -
2900 0,01 elt--;
2901 -
2902 - }
2903 -
2904 - /* The line is blank so everything is considered to be
right
2905 - whitespace. */
2906 - if (!done)
2907 - dl->bounds.right_white = dl->bounds.left_in;
2908 - }
2909 -
2910 - /* Set the display blocks bounds. */
2911 - db->start_pos = dl->bounds.left_in;
2912 - if (Dynarr_length (db->runes))
2913 - {
2914 - struct rune *rb = Dynarr_atp (db->runes,
Dynarr_length (db->runes) - 1);
2915 -
2916 - db->end_pos = rb->xpos + rb->width;
2917 - }
2918 - else
2919 - db->end_pos = dl->bounds.right_white;
2920 -
2921 - calculate_baseline (&data);
2922 -
2923 - dl->ascent = data.new_ascent;
2924 - dl->descent = data.new_descent;
2925 -
2926 - {
2927 - unsigned short ascent = (unsigned short) XINT
(w->minimum_line_ascent);
2928 -
2929 - if (dl->ascent < ascent)
2930 - dl->ascent = ascent;
2931 - }
2932 - {
2933 - unsigned short descent = (unsigned short) XINT
(w->minimum_line_descent);
2934 -
2935 0,01 if (dl->descent < descent)
2936 - dl->descent = descent;
2937 - }
2938 -
2939 - calculate_yoffset (dl, db);
2940 -
2941 - dl->cursor_elt = data.cursor_x;
2942 - /* #### lossage lossage lossage! Fix this shit! */
2943 - if (data.byte_charpos > BYTE_BUF_ZV (b))
2944 - dl->end_charpos = BUF_ZV (b);
2945 - else
2946 - dl->end_charpos = bytebpos_to_charbpos (b,
data.byte_charpos) - 1;
2947 - if (truncate_win)
2948 - data.dl->num_chars = column_at_point (b,
dl->end_charpos, 0);
2949 - else
2950 - /* This doesn't correctly take into account tabs and
control
2951 - characters but if the window isn't being truncated
then this
2952 - value isn't going to end up being used anyhow. */
2953 - data.dl->num_chars = dl->end_charpos - dl->charpos;
2954 -
2955 - /* #### handle horizontally scrolled line with text none
of which
2956 - was actually laid out. */
2957 -
2958 - /* #### handle any remainder of overlay arrow */
2959 -
2960 - if (*prop == ADD_FAILED)
2961 - *prop = NULL;
2962 -
2963 - if (truncate_win && *prop)
2964 - {
2965 - Dynarr_free (*prop);
2966 - *prop = NULL;
2967 - }
2968 -
2969 - extent_fragment_delete (data.ef);
2970 -
2971 - /* #### If we started at EOB, then make sure we return a
value past
2972 - it so that regenerate_window will exit properly.
This is bogus.
2973 - The main loop should get fixed so that it isn't
necessary to call
2974 - this function if we are already at EOB. */
2975 -
2976 - if (data.byte_charpos == BYTE_BUF_ZV (b) &&
byte_start_pos == BYTE_BUF_ZV (b))
2977 - return data.byte_charpos + 1; /* Yuck! */
2978 - else
2979 - return data.byte_charpos;
2980 - }
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Total % for .add_ichar_rune = 0,29
Line % Source
1225 0,10 {
1226 0,12 return add_ichar_rune_1 (data, 0);
1227 0,07 }
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Total % for .display_table_entry = 0,94
Line % Source
5022 0,01 {
5023 - Lisp_Object tail;
5024 -
5025 - /* Loop over FACE_TABLE, and then over WINDOW_TABLE. */
5026 0,25 for (tail = face_table; 1; tail = XCDR (tail))
5027 - {
5028 - Lisp_Object table;
5029 0,13 if (NILP (tail))
5030 - {
5031 0,04 if (!NILP (window_table))
5032 - {
5033 - tail = window_table;
5034 0,04 window_table = Qnil;
5035 - }
5036 - else
5037 0,03 return Qnil;
5038 - }
5039 0,10 table = XCAR (tail);
5040 -
5041 0,12 if (VECTORP (table))
5042 - {
5043 0,03 if (ch < XVECTOR_LENGTH (table) && !NILP
(XVECTOR_DATA (table)[ch]))
5044 - return XVECTOR_DATA (table)[ch];
5045 - else
5046 - continue;
5047 - }
5048 - else if (CHAR_TABLEP (table)
5049 - && XCHAR_TABLE_TYPE (table) ==
CHAR_TABLE_TYPE_CHAR)
5050 - {
5051 - return get_char_table (ch, table);
5052 - }
5053 - else if (CHAR_TABLEP (table)
5054 - && XCHAR_TABLE_TYPE (table) ==
CHAR_TABLE_TYPE_GENERIC)
5055 - {
5056 - Lisp_Object gotit = get_char_table (ch, table);
5057 - if (!NILP (gotit))
5058 - return gotit;
5059 - else
5060 - continue;
5061 - }
5062 - else if (RANGE_TABLEP (table))
5063 - {
5064 - Lisp_Object gotit = Fget_range_table (make_char
(ch), table, Qnil);
5065 - if (!NILP (gotit))
5066 - return gotit;
5067 - else
5068 - continue;
5069 - }
5070 - else
5071 - ABORT ();
5072 - }
5073 0,19 }
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Total % for .compare_runes = 0,71
Line % Source
198 0,04 {
199 - /* Do not compare the values of charbpos and endpos.
They do not
200 - affect the display characteristics. */
201 -
202 - /* Note: (hanoi 6) spends 95% of its time in redisplay,
and about
203 - 30% here. Not using bitfields for rune.type alone
gives a redisplay
204 - speed up of 10%.
205 -
206 - #### In profile arcs run of a normal Gnus session
this function
207 - is run 6.76 million times, only to return 1 in 6.73
million of
208 - those.
209 -
210 - In addition a quick look GCC sparc assembly shows
that GCC is not
211 - doing a good job here.
212 - 1. The function is not inlined (too complicated?)
213 - 2. It seems to be reloading the crb and drb variables
all the
214 - time.
215 - 3. It doesn't seem to notice that the second half of
these if's
216 - are really a switch statement.
217 -
218 - So I (JV) conjecture
219 -
220 - #### It would really be worth it to arrange for this
function to
221 - be (almost) a single call to memcmp. */
222 -
223 0,23 if (crb->xpos != drb->xpos)
224 - return 0;
225 - else if (crb->width != drb->width)
226 - return 0;
227 0,07 else if (crb->cursor_type != drb->cursor_type)
228 - return 0;
229 0,03 else if (crb->type != drb->type)
230 - return 0;
231 0,03 else if (crb->type == RUNE_CHAR &&
232 - (crb->object.chr.ch != drb->object.chr.ch))
233 - return 0;
234 0,01 else if (crb->type == RUNE_HLINE &&
235 - (crb->object.hline.thickness !=
drb->object.hline.thickness ||
236 - crb->object.hline.yoffset !=
drb->object.hline.yoffset))
237 - return 0;
238 0,01 else if (crb->type == RUNE_DGLYPH &&
239 - (!EQ (crb->object.dglyph.glyph,
drb->object.dglyph.glyph) ||
240 - !EQ (crb->object.dglyph.extent,
drb->object.dglyph.extent) ||
241 - crb->object.dglyph.xoffset !=
drb->object.dglyph.xoffset ||
242 - crb->object.dglyph.yoffset !=
drb->object.dglyph.yoffset ||
243 - crb->object.dglyph.ascent !=
drb->object.dglyph.ascent ||
244 - crb->object.dglyph.descent !=
drb->object.dglyph.descent))
245 - return 0;
246 - /* Only check dirtiness if we know something has changed. */
247 0,04 else if (crb->type == RUNE_DGLYPH &&
248 - (XGLYPH_DIRTYP (crb->object.dglyph.glyph) ||
249 - crb->findex != drb->findex))
250 - {
251 - /* We need some way of telling
redisplay_output_layout () that the
252 - only reason we are outputting it is because something has
253 - changed internally. That way we can optimize whether
we need
254 - to clear the layout first and also only output the
components
255 - that have changed. The image_instance dirty flag and
256 - display_hash are no good to us because these will
invariably
257 - have been set anyway if the layout has changed. So it
looks
258 - like we need yet another change flag that we can set
here and
259 - then clear in redisplay_output_layout (). */
260 - Lisp_Object window, image;
261 - Lisp_Image_Instance* ii;
262 - window = wrap_window (w);
263 - image = glyph_image_instance (crb->object.dglyph.glyph,
264 - window, ERROR_ME_DEBUG_WARN, 1);
265 -
266 - if (!IMAGE_INSTANCEP (image))
267 - return 0;
268 - ii = XIMAGE_INSTANCE (image);
269 -
270 - if (TEXT_IMAGE_INSTANCEP (image) &&
271 - (crb->findex != drb->findex ||
272 - WINDOW_FACE_CACHEL_DIRTY (w, drb->findex)))
273 - return 0;
274 -
275 - /* It is quite common for the two glyphs to be EQ
since in many
276 - cases they will actually be the same object. This
does not
277 - mean, however, that nothing has changed. We therefore
need to
278 - check the current hash of the glyph against the last
recorded
279 - display hash and the pending display items. See
280 - update_subwindow (). */
281 - if (image_instance_changed (image) ||
282 - crb->findex != drb->findex ||
283 - WINDOW_FACE_CACHEL_DIRTY (w, drb->findex))
284 - {
285 - /* Now we are going to re-output the glyph, but since
286 - this is for some internal reason not related to
geometry
287 - changes, send a hint to the output routines that
they can
288 - take some short cuts. This is most useful for
289 - layouts. This flag should get reset by the output
290 - routines.
291 -
292 - #### It is possible for us to get here when the
293 - face_cachel is dirty. I do not know what the
implications
294 - of this are.*/
295 - IMAGE_INSTANCE_OPTIMIZE_OUTPUT (ii) = 1;
296 - return 0;
297 - }
298 - else
299 - return 1;
300 - }
301 - /* We now do this last so that glyph checks can do their
own thing
302 - for face changes. Face changes quite often happen
when we are
303 - trying to output something in the gutter, this would
normally
304 - lead to a lot of flashing. The indices can quite often be
305 - different and yet the faces are the same, we do not
want to
306 - re-output in this instance. */
307 0,13 else if (crb->findex != drb->findex ||
308 - WINDOW_FACE_CACHEL_DIRTY (w, drb->findex))
309 - return 0;
310 - else
311 - return 1;
312 0,10 }
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Thomas Mittelstaedt schrieb:
> Jerry James schrieb:
>
>> On Mon, Mar 17, 2008 at 10:06 AM, Thomas Mittelstaedt
>> <T.Mittelstaedt(a)cadenas.de> wrote:
>>
>>
>>> Hallo,
>>>
>>> FYI
>>> I successfully built xemacs with system malloc instead of the built-in
>>> gnu malloc via the following configure:
>>>
>>> export LDR_CNTRL=MAXDATA=0x80000000
>>> cd /localbuild/xemacs-21.5.28-latest/
>>> ./config.status --version
>>> XEmacs config.status 21.5
>>> configured by ./configure, generated by GNU Autoconf 2.61,
>>> with options "'--with-system-malloc' '--without-error-checking'
>>> '--with-late-packages=/usr/local/lib/xemacs' '--without-kkcc'
>>> '--with-pdump' '-C' 'CC=/opt/gcc-3.3.2/bin/gcc'
>>> 'LDFLAGS=-Wl,-bmaxdata:0x80000000'"
>>>
>>>
>>> I had to use pdump since otherwise the dumped xemacs would be about 280M
>>> in size and would not load.
>>>
>>> thomas
>>>
>>> P.S.: and it runs...
>>>
>>>
>> How does the CPU load on this build compare to the others?
>>
>>
> As long as I use only one frame, performance is reasonable. When I
> scroll a file, cpu goes up beyond 20 or even 30%,
> but there is no sensible delay yet.
> As soon as I open a second frame, though, xemacs hogs. cpu percentage
> shoots up to 70-80% and interactive use, e.g.
> selecting things with the mouse becomes a nuisance.
> I have attached a tar archive with the profile data from tprof. Look
> first into gdb.prof and then the respective .mprof files.
>
>>
>>
>>> I also had to omit the build of ldap, since that module failed.
>>>
>>>
>> Can you post the compile failure messages? I'd like to get that
>> fixed. Thanks for all the information, Thomas.
>>
>>
>
> cd ./modules/ldap && make all
> make[1]: Entering directory `/localbuild/xemacs-21.5.28-latest/modules/ldap'
> ../../lib-src/ellcc --mode=link --mode=verbose --mod-output=eldap.ell \
> eldap.o eldap_i.o -Wl,-bmaxdata:0x80000000 -L/usr/ccs/lib
> -L/usr/X11R6/lib -lldap
> ellcc driver version 21.5-b28 for EMODULES version 1.1.0 (1010)
> /opt/gcc-3.3.2/bin/gcc -Wl,-bmaxdata:0x80000000 -shared -o eldap.ell
> eldap.o eldap_i.o -Wl,-bmaxdata:0x80000000 -L/usr/ccs/lib
> -L/usr/X11R6/lib -lldap
> ld: 0711-317 ERROR: Undefined symbol: Qnative
> ld: 0711-317 ERROR: Undefined symbol: print_readably
> ld: 0711-317 ERROR: Undefined symbol: Qnil
> ld: 0711-317 ERROR: Undefined symbol: Qt
> ld: 0711-317 ERROR: Undefined symbol: Qstringp
> ld: 0711-317 ERROR: Undefined symbol: Qintegerp
> ld: 0711-317 ERROR: Undefined symbol: Qsimple
> ld: 0711-317 ERROR: Undefined symbol: __temp_alloca_size__
> ld: 0711-317 ERROR: Undefined symbol: need_to_check_c_alloca
> ld: 0711-317 ERROR: Undefined symbol: Qsearch
> ld: 0711-317 ERROR: Undefined symbol: Qprocess_error
> ld: 0711-317 ERROR: Undefined symbol: specpdl_depth_counter
> ld: 0711-317 ERROR: Undefined symbol: gcprolist
> ld: 0711-317 ERROR: Undefined symbol: Qconsp
> ld: 0711-317 ERROR: Undefined symbol: Qsymbolp
> ld: 0711-317 ERROR: Undefined symbol: something_happened
> ld: 0711-317 ERROR: Undefined symbol: Vquit_flag
> ld: 0711-317 ERROR: Undefined symbol: Vinhibit_quit
> ld: 0711-317 ERROR: Undefined symbol: Qcritical
> ld: 0711-317 ERROR: Undefined symbol: dont_check_for_quit
> ld: 0711-317 ERROR: Undefined symbol: Qdelete
> ld: 0711-317 ERROR: Undefined symbol: lrecord_implementations_table
> ld: 0711-317 ERROR: Undefined symbol: lrecord_markers
> ld: 0711-317 ERROR: Undefined symbol: .build_ext_string
> ld: 0711-317 ERROR: Undefined symbol: .invalid_operation
> ld: 0711-317 ERROR: Undefined symbol: .printing_unreadable_object
> ld: 0711-317 ERROR: Undefined symbol: .write_fmt_string_lisp
> ld: 0711-317 ERROR: Undefined symbol: .write_c_string
> ld: 0711-317 ERROR: Undefined symbol: .write_fmt_string
> ld: 0711-317 ERROR: Undefined symbol: .alloc_automanaged_lcrecord
> ld: 0711-317 ERROR: Undefined symbol: .dead_wrong_type_argument
> ld: 0711-317 ERROR: Undefined symbol: .signal_malformed_property_list_error
> ld: 0711-317 ERROR: Undefined symbol: .invalid_constant
> ld: 0711-317 ERROR: Undefined symbol: .dfc_convert_to_external_format
> ld: 0711-317 ERROR: Undefined symbol: .xemacs_c_alloca
> ld: 0711-317 ERROR: Undefined symbol: .signal_circular_property_list_error
> ld: 0711-317 ERROR: Undefined symbol: .slow_down_interrupts
> ld: 0711-317 ERROR: Undefined symbol: .new_dfc_convert_size
> ld: 0711-317 ERROR: Undefined symbol: .new_dfc_convert_copy_data
> ld: 0711-317 ERROR: Undefined symbol: .speed_up_interrupts
> ld: 0711-317 ERROR: Undefined symbol: .report_process_error
> ld: 0711-317 ERROR: Undefined symbol: .signal_error
> ld: 0711-317 ERROR: Undefined symbol: .Flength
> ld: 0711-317 ERROR: Undefined symbol: .signal_malformed_list_error
> ld: 0711-317 ERROR: Undefined symbol: .signal_circular_list_error
> ld: 0711-317 ERROR: Undefined symbol: .make_opaque_ptr
> ld: 0711-317 ERROR: Undefined symbol: .record_unwind_protect
> ld: 0711-317 ERROR: Undefined symbol: .check_what_happened
> ld: 0711-317 ERROR: Undefined symbol: .signal_quit
> ld: 0711-317 ERROR: Undefined symbol: .message
> ld: 0711-317 ERROR: Undefined symbol: .Fcons
> ld: 0711-317 ERROR: Undefined symbol: .make_ext_string
> ld: 0711-317 ERROR: Undefined symbol: .Fnreverse
> ld: 0711-317 ERROR: Undefined symbol: .unbind_to_1
> ld: 0711-317 ERROR: Undefined symbol: .defsymbol_massage_name_nodump
> ld: 0711-317 ERROR: Undefined symbol: .defsubr
> ld: 0711-317 ERROR: Undefined symbol: .Fprovide
> ld: 0711-317 ERROR: Undefined symbol: .defvar_magic
> ld: 0711-317 ERROR: Undefined symbol: .staticpro_nodump_1
> ld: 0711-317 ERROR: Undefined symbol: .unstaticpro_nodump_1
> ld: 0711-317 ERROR: Undefined symbol: .emodules_doc_subr
> ld: 0711-317 ERROR: Undefined symbol: .emodules_doc_sym
> ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more
> information.
> collect2: ld returned 8 exit status
> make[1]: *** [eldap.ell] Error 1
> make[1]: Leaving directory `/localbuild/xemacs-21.5.28-latest/modules/ldap'
> make: *** [modules/ldap] Fehler 2
>
> Compilation exited abnormally with code 2 at Tue Mar 18 13:30:13
>
>
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta
Re: building xemacs on aix with system malloc instead of default gnu malloc
16 years, 7 months
Jerry James
On Tue, Mar 18, 2008 at 6:37 AM, Thomas Mittelstaedt
<T.Mittelstaedt(a)cadenas.de> wrote:
> cd ./modules/ldap && make all
> make[1]: Entering directory `/localbuild/xemacs-21.5.28-latest/modules/ldap'
> ../../lib-src/ellcc --mode=link --mode=verbose --mod-output=eldap.ell \
> eldap.o eldap_i.o -Wl,-bmaxdata:0x80000000 -L/usr/ccs/lib
> -L/usr/X11R6/lib -lldap
> ellcc driver version 21.5-b28 for EMODULES version 1.1.0 (1010)
> /opt/gcc-3.3.2/bin/gcc -Wl,-bmaxdata:0x80000000 -shared -o eldap.ell
> eldap.o eldap_i.o -Wl,-bmaxdata:0x80000000 -L/usr/ccs/lib
> -L/usr/X11R6/lib -lldap
> ld: 0711-317 ERROR: Undefined symbol: Qnative
> ld: 0711-317 ERROR: Undefined symbol: print_readably
etc. Aha, so the tricks we use to link modules against the main
executable don't work on AIX. If you really want LDAP support, you
can work around this for now by configuring --without-modules. I'll
have to do some research on AIX to see if I can figure out how we need
to set the linking up. Would you be open to doing some tests for me?
--
Jerry James
http://loganjerry.googlepages.com/
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta
building xemacs on aix with system malloc instead of default gnu malloc
16 years, 7 months
Thomas Mittelstädt
Hallo,
FYI
I successfully built xemacs with system malloc instead of the built-in
gnu malloc via the following configure:
export LDR_CNTRL=MAXDATA=0x80000000
cd /localbuild/xemacs-21.5.28-latest/
./config.status --version
XEmacs config.status 21.5
configured by ./configure, generated by GNU Autoconf 2.61,
with options "'--with-system-malloc' '--without-error-checking'
'--with-late-packages=/usr/local/lib/xemacs' '--without-kkcc'
'--with-pdump' '-C' 'CC=/opt/gcc-3.3.2/bin/gcc'
'LDFLAGS=-Wl,-bmaxdata:0x80000000'"
I had to use pdump since otherwise the dumped xemacs would be about 280M
in size and would not load.
thomas
P.S.: and it runs...
I also had to omit the build of ldap, since that module failed.
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta
Error when entering a group the first time in Gnus with 21.4.21
16 years, 7 months
Dr. Volker Zell
Hi
This happens on XEmacs 21.4 (patch 21) "Educational Television" [Lucid]
(i686-pc-cygwin, Mule) of Tue Dec 4 2007 on vzell-de the first time I
enter a group in Gnus for the group buffer. Afterwards there are no more
errors. Any hint ?
Debugger entered--Lisp error: (wrong-type-argument listp ignore)
gnus-group-category("nnimap+localhost:imap/helpj2ee")
gnus-agent-find-parameter("nnimap+localhost:imap/helpj2ee" agent-enable-undownloaded-faces)
gnus-select-newsgroup("nnimap+localhost:imap/helpj2ee" nil nil)
gnus-summary-read-group-1("nnimap+localhost:imap/helpj2ee" nil t nil nil nil)
gnus-summary-read-group("nnimap+localhost:imap/helpj2ee" nil t nil nil nil nil)
gnus-group-read-group(nil t)
gnus-group-select-group(nil)
gnus-topic-select-group(nil)
call-interactively(gnus-topic-select-group)
recursive-edit()
byte-code("..." [buffer-read-only noninteractive debugger-buffer middlestart debugger-args debugger-batch-max-lines pop-to-buffer debugger-mode debugger-setup-buffer count-lines 2 "...\n" message buffer-string kill-emacs debug backtrace-debug 3 t debugger-reenable "" nil recursive-edit standard-output] 3)
debug(error (wrong-type-argument sequencep quote))
imap-mailbox-lsub(quote nil nil " *nnimap* localhost")
nnimap-request-newgroups("Sat, 08 Mar 2008 15:00:03 +0100" "localhost")
gnus-request-newgroups("Sat, 08 Mar 2008 15:00:03 +0100" (nnimap "localhost" (nnimap-list-pattern (quote ...)) (nnimap-address "localhost") (nnimap-authenticator login)))
gnus-ask-server-for-new-groups()
gnus-find-new-newsgroups()
gnus-setup-news(nil nil nil)
byte-code("..." [gnus-slave gnus-current-startup-file gnus-startup-file did-connect level dont-connect gnus-group-quit gnus-run-hooks gnus-startup-hook gnus-make-newsrc-file gnus-dribble-read-file bbb-login add-hook gnus-summary-mode-hook gnus-grouplens-mode gnus-request-create-group "queue" (nndraft "") "drafts" (nndraft "") gnus-setup-news nil gnus-setup-news-hook gnus-start-draft-setup gnus-group-list-groups gnus-group-first-unread-group gnus-configure-windows group gnus-group-set-mode-line gnus-started-hook gnus-use-dribble-file gnus-use-grouplens gnus-agent] 4)
gnus-1(nil nil nil)
gnus(nil)
call-interactively(gnus)
command-execute(gnus t)
execute-extended-command(nil)
call-interactively(execute-extended-command)
Ciao
Volker
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta