7 Mar 2003 07:10
Re: Appending bbdb queries
Stefan Reichör <xsteve <at> riic.at>
2003-03-07 06:10:47 GMT
2003-03-07 06:10:47 GMT
Please change the Subject header to a concise bug description.
In this report, remember to cover the basics, that is, what you expected to
happen and what in fact did happen. Please remove these
instructions from your message.
Hi,
I use the latest emacs from CVS under windows.
I use bbdb and I found out, that the bbdb append feature does not
work with my emacs.
I tried the same feature on my debian box with the latest debian
emacs packages. It works on debian.
Here is the recipe for the test (in a bbdb buffer):
I type:
b search-string1 <RET>
+ b search-string2 <RET>
But the second search always clears the first one and I get only the
results of the second search.
On linux (emacs21.2.2) I get the correct result:
records with search-string1 and search-string2 are shown.
I started to debug the bbdb query.
Here is, what I found out:
* In the function bbdb-display-records-1, there is a call to
with-output-to-temp-buffer.
* Before the call to this function, the variable bbdb-records
contains the already visible bbdb-entries.
* After the call to with-output-to-temp-buffer, the variable
bbdb-records is nil
+ On linux this variable has still the same value as before
+ I fixed the problem with the new variable xbbdb-records
* My question is now, is this a bug of with-output-to-temp-buffer?
I sent the things I found out to the emacs developers, here is the
response from RMS:
RMS> You need to report this to the bbdb maintainers. We don't
RMS> know the code of bbdb. It could be that this is an Emacs bug,
RMS> but we cannot afford to study the code of bbdb to investigate it.
RMS>
RMS> If the bbdb maintainers find that the bug seems to be in Emacs,
RMS> they need to provide us with a precise test case that doesn't
RMS> involve using bbdb. Then we can take it the rest of the way.
My changed function looks like this:
(defun bbdb-display-records-1 (records &optional append layout)
(setq append (or append (bbdb-append-records-p)))
(if (or (null records)
(consp (car records)))
nil
;; add layout and a marker to the local list of records
(setq layout (or layout bbdb-display-layout))
(setq records (mapcar (lambda (x)
(list x layout (make-marker)))
records)))
(let ((b (current-buffer))
(temp-buffer-setup-hook nil)
(temp-buffer-show-hook nil)
(xbbdb-records (copy-alist bbdb-records))
(first (car (car records))))
;;(message "xbbdb-records: %S" xbbdb-records)
;;(message "bbdb-records: %S" bbdb-records)
;;05.03.2003, XSteve, with-output-to-temp-buffer seems to
;; destroy the binding of bbdb-records on windows emacs, cvs version...
;; so use xbbdb-records - this works
(with-output-to-temp-buffer bbdb-buffer-name
(set-buffer bbdb-buffer-name)
;;(message "xbbdb-records: %S" xbbdb-records)
;;(message "bbdb-records: %S" bbdb-records)
;; If append is unset, clear the buffer.
(unless append
(bbdb-undisplay-records))
;; If we're appending these records to the ones already displayed,
;; then first remove any duplicates, and then sort them.
(if append
(let ((rest records))
(while rest
(if (assq (car (car rest)) xbbdb-records)
(setq records (delq (car rest) records)))
(setq rest (cdr rest)))
(setq records (append xbbdb-records records))
(setq records
(sort records
(lambda (x y) (bbdb-record-lessp (car x) (car y)))))))
(make-local-variable 'mode-line-buffer-identification)
(make-local-variable 'mode-line-modified)
(set (make-local-variable 'bbdb-showing-changed-ones) nil)
(let ((done nil)
(rest records)
(changed (bbdb-changed-records)))
(while (and rest (not done))
(setq done (memq (car (car rest)) changed)
rest (cdr rest)))
(setq bbdb-showing-changed-ones done))
(bbdb-frob-mode-line (length records))
(and (not bbdb-gag-messages)
(not bbdb-silent-running)
(message "Formatting..."))
(bbdb-mode)
;; this in in the *BBDB* buffer, remember, not the .bbdb buffer.
(set (make-local-variable 'bbdb-records) nil)
(setq bbdb-records records)
(let ((buffer-read-only nil)
prs)
(bbdb-debug (setq prs (bbdb-records)))
(setq truncate-lines t)
(while records
(bbdb-debug (if (not (memq (car (car records)) prs))
(error "record doubleplus unpresent!")))
(set-marker (nth 2 (car records)) (point))
(bbdb-format-record (nth 0 (car records))
(nth 1 (car records)))
(setq records (cdr records))))
(and (not bbdb-gag-messages)
(not bbdb-silent-running)
(message "Formatting...done."))
)
(set-buffer bbdb-buffer-name)
(if (and append first)
(let ((cons (assq first bbdb-records))
(window (get-buffer-window (current-buffer))))
(if window (set-window-start window (nth 2 cons)))))
(bbdbq)
;; this doesn't really belong here, but it's convenient ... and when
;; using electric display it would not be called otherwise.
(save-excursion (run-hooks 'bbdb-list-hook))
(if bbdb-gui (bbdb-fontify-buffer))
(set-buffer-modified-p nil)
(setq buffer-read-only t)
(set-buffer b)))
Emacs : GNU Emacs 21.3.50.1 (i386-msvc-nt5.0.2195)
of 2003-02-19 on HEIDI
Package: BBDB 2.35
current state:
==============
(setq
emacs-version "21.3.50.1"
bbdb-version-date "$Date: 2002/12/25 15:06:00 $"
bbdb-file-format 6
bbdb-no-duplicates-p nil
bbdb-address-editing-function 'bbdb-address-edit-default
bbdb-address-formatting-alist '((bbdb-address-is-continental . bbdb-format-address-continental)
(nil . bbdb-format-address-default))
bbdb-addresses-label-list '("Home" "Office" "Mobile")
bbdb-after-change-hook '(bbdb/gnus-score-invalidate-alist)
bbdb-after-read-db-hook nil
bbdb-always-add-addresses nil
bbdb-auto-revert-p nil
bbdb-canonicalize-net-hook nil
bbdb-canonicalize-redundant-nets-p t
bbdb-case-fold-search t
bbdb-change-hook 'bbdb-timestamp-hook
bbdb-check-zip-codes-p t
bbdb-complete-name-allow-cycling t
bbdb-complete-name-hooks '(ding)
bbdb-completion-display-record t
bbdb-completion-type 'primary-or-name
bbdb-continental-zip-regexp "^\\s *[A-Z][A-Z]?\\s *-\\s *[0-9][0-9][0-9]"
bbdb-create-hook 'bbdb-creation-date-hook
bbdb-default-area-code nil
bbdb-default-country nil
bbdb-default-domain nil
bbdb-default-label-list '("Home" "Office" "Mobile" "Other")
bbdb-define-all-aliases-field 'mail-alias
bbdb-define-all-aliases-mode 'all
bbdb-dial-local-prefix nil
bbdb-dial-local-prefix-alist '(((if (integerp bbdb-default-area-code)
(format "(%03d)" bbdb-default-area-code)
(or bbdb-default-area-code ""))
"")
)
bbdb-dial-long-distance-prefix nil
bbdb-display-layout 'multi-line
bbdb-display-layout-alist '((one-line (order phones mail-alias net notes) (name-end . 24)
(toggle . t))
(multi-line (omit creation-date timestamp) (toggle . t))
(pop-up-multi-line) (full-multi-line))
bbdb-dwim-net-address-allow-redundancy t
bbdb-electric-p nil
bbdb-expand-mail-aliases t
bbdb-extract-address-component-handler 'message
bbdb-extract-address-component-ignore-regexp
"\\(\\(undisclosed\\|unlisted\\)[^,]*recipients\\)\\|no To-header on input"
bbdb-extract-address-components-func 'bbdb-rfc822-addresses
bbdb-file "~/.bbdb"
bbdb-file-remote nil
bbdb-file-remote-save-always t
bbdb-finger-buffer-name "*finger*"
bbdb-finger-host-field 'finger-host
bbdb-get-addresses-headers '((authors "From" "Resent-From" "Reply-To")
(recipients "Resent-To" "Resent-CC" "To" "CC" "BCC"))
bbdb-get-only-first-address-p t
bbdb-gui t
bbdb-hashtable-size 200003
bbdb-info-file nil
bbdb-initialize-hook nil
bbdb-legal-zip-codes '("^$" "^[ \n]*[0-9][0-9]?[0-9]?[0-9]?[0-9]?[0-9]?[ \n]*$"
"^[ \n]*\\([0-9][0-9][0-9][0-9][0-9]\\)[ \n]*-?[ \n]*\\([0-9][0-9][0-9][0-9]?\\)[ \n]*$"
"^[ \n]*\\([A-Za-z0-9]+\\)[ \n]+\\([A-Za-z0-9]+\\)[ \n]*$" "^[ \n]*\\([A-Z]+\\)[ \n]*-?[
\n]*\\([0-9]+ ?[A-Z]*\\)[ \n]*$" "^[ \n]*\\([A-Z]+\\)[ \n]*-?[ \n]*\\([0-9]+\\)[
\n]+\\([0-9]+\\)[ \n]*$")
bbdb-list-hook nil
bbdb-load-hook nil
bbdb-message-caching-enabled t
bbdb-message-marker-field 'mark-char
bbdb-mode-hook nil
bbdb-modem-device "/dev/modem"
bbdb-modem-dial nil
bbdb-new-nets-always-primary nil
bbdb-north-american-phone-numbers-p nil
bbdb-notes-default-separator ", "
bbdb-notes-sort-order '((notes . 0) (www . 1) (ftp . 2) (gopher . 3) (telnet . 4)
(mail-alias . 5) (mail-folder . 6) (lpr . 7) (creation-date . 1000)
(timestamp . 1001))
bbdb-notice-auto-save-file nil
bbdb-notice-hook nil
bbdb-offer-save t
bbdb-phones-label-list '("Home" "Office")
bbdb-pop-up-display-layout 'pop-up-multi-line
bbdb-pop-up-target-lines 5
bbdb-print-alist '((omit-area-code . "^(000) ") (phone-on-first-line . "^[ ]*$") (ps-fonts)
(font-size . 6) (quad-hsize . "3.15in") (quad-vsize . "4.5in"))
bbdb-print-brief-alist '((columns . 1) (separator . 1) (n-phones . 2) (n-addresses . 1)
(include-files "bbdb-print-brief" "bbdb-cols"))
bbdb-print-epilog "\\endaddresses\n\\bye\n"
bbdb-print-file-name "c:/temp/bbdb.tex"
bbdb-print-full-alist '((columns . 3) (separator . 2) (include-files "bbdb-print" "bbdb-cols"))
bbdb-print-net 'primary
bbdb-print-omit-fields '(omit tex-name aka mail-alias)
bbdb-print-prolog "%%%% ====== Phone/Address list in -*-TeX-*- Format =====\n%%%% produced by
bbdb-print, version 3.0\n\n\\input texnansi\n\n"
bbdb-print-require t
bbdb-quiet-about-name-mismatches nil
bbdb-readonly-p nil
bbdb-refile-notes-default-merge-function 'bbdb-refile-notes-default-merge-function
bbdb-refile-notes-generate-alist '((creation-date . bbdb-refile-notes-string-least)
(timestamp . bbdb-refile-notes-string-most))
bbdb-save-db-timeout nil
bbdb-send-mail-style 'compose-mail
bbdb-silent-running nil
bbdb-snarf-web-prop 'www
bbdb-sound-files ["/usr/demo/SOUND/sounds/touchtone.0.au"
"/usr/demo/SOUND/sounds/touchtone.1.au" "/usr/demo/SOUND/sounds/touchtone.2.au"
"/usr/demo/SOUND/sounds/touchtone.3.au" "/usr/demo/SOUND/sounds/touchtone.4.au"
"/usr/demo/SOUND/sounds/touchtone.5.au" "/usr/demo/SOUND/sounds/touchtone.6.au"
"/usr/demo/SOUND/sounds/touchtone.7.au" "/usr/demo/SOUND/sounds/touchtone.8.au"
"/usr/demo/SOUND/sounds/touchtone.9.au" "/usr/demo/SOUND/sounds/touchtone.pound.au" "/usr/demo/SOUND/sounds/touchtone.star.au"]
bbdb-sound-player nil
bbdb-sound-volume 50
bbdb-time-display-format "%d %b %Y"
bbdb-update-records-mode 'annotating
bbdb-use-alternate-names t
bbdb-use-pop-up t
bbdb-user-mail-names nil
bbdb-write-file-hooks '(bbdb-write-file-hook-fn)
bbdb/gnus-lines-and-from-length 18
bbdb/gnus-score-default nil
bbdb/gnus-score-field 'gnus-score
bbdb/gnus-split-crosspost-default nil
bbdb/gnus-split-default-group "mail.misc"
bbdb/gnus-split-myaddr-regexp "^reichoer$\\|^reichoer <at> \\([-a-z0-9]+\\.\\)*riic.at$"
bbdb/gnus-split-nomatch-function nil
bbdb/gnus-split-private-field 'gnus-private
bbdb/gnus-split-public-field 'gnus-public
bbdb/gnus-summary-in-bbdb-format-letter "b"
bbdb/gnus-summary-known-poster-mark "+"
bbdb/gnus-summary-mark-known-posters t
bbdb/gnus-summary-prefer-bbdb-data t
bbdb/gnus-summary-prefer-real-names t
bbdb/gnus-summary-show-bbdb-names t
bbdb/gnus-summary-user-format-letter "B"
bbdb/gnus-update-records-mode 'annotating
bbdb/mail-auto-create-p t
bbdb/news-auto-create-p nil
bbdb/vm-set-auto-folder-alist-field 'vm-folder
features '(apropos smtpmail holidays diary-lib rx em-smart em-rebind em-xtra em-unix term em-term
em-script em-prompt em-ls em-pred em-hist em-glob em-dirs em-cmpl esh-opt em-basic
em-banner em-alias esh-var esh-io esh-ext esh-proc esh-arg esh-cmd esh-mode eshell
psvn cl-specs flow-fill w3m-form w3m ccl w3m-hist w3m-e21 w3m-fsf w3m-image w3m-proc
w3m-util edebug sort gnus-cite smiley gnus-bcklg gnus-async gnus-dup gnus-ml
gnus-topic url-http url-gw url-handlers nnrss mm-url pop3 nnml nnfolder bbdb-gnus
bbdb-snarf mail-extr spam spam-stat gnus-uu gnus-delay gnus-draft gnus-agent gnus-srvr
gnus-score score-mode nnvirtual gnus-cache nndraft nnmh gnus-pers gnus-dired gnus-msg
gnus-art mm-uu nnir nnimap imap gnus-sum gnus-group gnus-undo gnus-demon nnmail
mail-source nntp nnoo gnus-start gnus-spec gnus-int gnus-range gnus-win log-edit
tramp-vc vc-rcs vc add-log pcvs pcvs-parse pcvs-info pcvs-defs pcvs-util ewoc mwheel
thingatpt ede-dired wisent-python wisent-bovine wisent eieio-opt dabbrev find-file
semantic-c filladapt tempo w3-cus xml-parse doxymacs vhdl-mode mmm-mode mmm-univ
mmm-class mmm-region mmm-utils semantic-bovine semanticdb-file semantic-edit eldoc
semantic-el find-func loadhist todoo reftex-vcr reftex-dcr reftex-auc noutline outline
font-latex xref filecache rfn-eshadow preview prv-emacs desktop latex tex-buf tex
google xml soap url-cache url-auth url url-proxy url-privacy url-expand url-methods
url-auto url-history url-cookie url-util url-parse url-vars printing cus-edit
cus-start cus-load mh-identity mh-comp mh-e gnus gnus-ems mh-utils mm-view
mh-customize mh-loaddefs rmail ps-print lpr student-list-mode xsteve-pymacs pymacs
midnight work-log mailalias ecb-layout-defs progr-align grabbox remind-mode diminish
babel bbdb-autoloads bbdb-query bbdb-print bbdb-com bbdb sendmail message rfc822 mml
mml-sec mml-smime smime dig mml1991 mml2015 pgg pgg-parse pgg-def mm-decode mm-bodies
mm-encode mailcap mail-parse rfc2045 rfc2231 rfc2047 gnus-util netrc qp ietf-drums
time-date parse-time mailabbrev nnheader mm-util mail-prsvr mailheader canlock
mail-utils timezone webjump browse-url w3-auto xref-hks mkback jka-compr tramp shell
format-spec mmm-auto mmm-vars mmm-compat tmmofl mouse-embrace window-ring saveplace
live-mode defaultcontent clipper toc hippie-exp align boxes ffap findr findstr igrep
tempbuf keep-buffers scroll-in-place minibuffer-complete-cycle icomplete
browse-kill-ring generic-dl generic-menu misc newcomment emacs-wiki executable
pcomplete timeclock find-recursive ido bubble-buffer ibuffer ecb ecb-autogen autoload
ecb-tod ecb-upgrade ecb-face ecb-cycle ecb-eshell ecb-navigate ecb-help ecb-jde
ecb-layout compile ecb-create-layout ecb-mode-line ecb-compilation ecb-util
tree-buffer avoid silentcomp ede-speedbar ede vc-cvs ede-source sb-rmail sb-html
sb-texinfo sb-info info semantic-ia-sb semantic-analyze semantic-cb eieio-speedbar
eieio-custom semantic-sb speedbar ange-ftp sb-image dframe cedet semantic-load
semanticdb-el semanticdb-search semanticdb eieio-base eieio senator which-func
semantic-imenu imenu semantic-ctxt semantic-util-modes semantic-util semantic
semantic-lex semantic-fw semantic-token assoc working inversion escreen power-macros
find-library read-library calendar cal-menu pp esh-util esh-module esh-toggle dired-dd
dired-dd-b3-menu wdired dired-x dired-aux pydoc python-mode comint ring vsim-nav cwarn
cc-mode cc-cmds cc-styles cc-align cc-engine cc-langs cc-vars cc-menus cc-defs derived
latex-doc latex-doc-var help-fns help-mode view button cl cl-19 reftex reftex-vars
tex-font tex-site edmacro screen-lines byte-opt bytecomp byte-compile hideshow msb
mouse-copy cua-base paren stig-paren reporter emacs-functions dired diff-mode
easy-mmode advice advice-preload uniquify autorevert ehelp electric recentf wid-edit
easymenu generic-x skeleton jit-lock font-lock regexp-opt syntax generic gnuserv
tooltip image tool-bar fontset ediff-hook vc-hooks lisp-float-type dos-w32 disp-table
ls-lisp lisp-mode page menu-bar timer select scroll-bar mldrag mouse facemenu
font-core frame ucs-tables georgian utf-8-lang misc-lang vietnamese tibetan thai lao
korean japanese hebrew greek romanian slovak czech european ethiopic tamil malayalam
devanagari indian cyrillic chinese case-table help simple faces cus-face
text-properties overlay md5 base64 format mule env custom widget backquote
make-network-process)
)
-------------------------------------------------------
This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger
for complex code. Debugging C/C++ programs can leave you feeling lost and
disoriented. TotalView can help you find your way. Available on major UNIX
and Linux platforms. Try it free. www.etnus.com
_______________________________________________
bbdb-info <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bbdb-info
BBDB Home Page: http://bbdb.sourceforge.net/
RSS Feed