[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Search]

bug: ediff args out of range after r8421



Steps to reproduce:
1. new buffer "a", type "a" enter
2. new buffer "b", type "b" enter
3. start ediff for these 2 buffers - I do it using M-` t 1 T enter enter
Result: error "args out of range: 1, 3"

Could be that changes in emacspeak-personality-prepend are the moment from which the problem reproduces, but I haven't verified it yet.

Shall I dig deeper?

BTW: Thank you, Raman, for quick application of all the patches.

Below comes the backtrace, with extremely long lines. Seems like optional argument "object" to emacspeak-personality-prepend is nil.

Jarek

Debugger entered--Lisp error: (args-out-of-range 1 3)
  ad-Orig-put-text-property(1 3 personality emacspeak-ediff-odd-diff-A-voice nil)
  put-text-property(1 3 personality emacspeak-ediff-odd-diff-A-voice nil)
  (cond ((null orig) (put-text-property start extent (quote personality) v object) (if (< extent end) (progn (emacspeak-personality-prepend extent end v object)))) (t (if (or (equal v orig) (listp orig) (and (listp orig) (memq v orig))) nil (setq new (delete-duplicates (nconc (if (listp v) v (list v)) (if (listp orig) orig (list orig))))) (put-text-property start extent (quote personality) new object)) (if (< extent end) (progn (emacspeak-personality-prepend extent end v object)))))
  (let ((v (if (listp personality) (delete-duplicates personality :test (function eq)) personality)) (orig (get-text-property start (quote personality) object)) (new nil) (extent (next-single-property-change start (quote personality) object end))) (cond ((null orig) (put-text-property start extent (quote personality) v object) (if (< extent end) (progn (emacspeak-personality-prepend extent end v object)))) (t (if (or (equal v orig) (listp orig) (and (listp orig) (memq v orig))) nil (setq new (delete-duplicates (nconc (if ... v ...) (if ... orig ...)))) (put-text-property start extent (quote personality) new object)) (if (< extent end) (progn (emacspeak-personality-prepend extent end v object))))))
  (unwind-protect (let ((v (if (listp personality) (delete-duplicates personality :test (function eq)) personality)) (orig (get-text-property start (quote personality) object)) (new nil) (extent (next-single-property-change start (quote personality) object end))) (cond ((null orig) (put-text-property start extent (quote personality) v object) (if (< extent end) (progn (emacspeak-personality-prepend extent end v object)))) (t (if (or (equal v orig) (listp orig) (and (listp orig) (memq v orig))) nil (setq new (delete-duplicates (nconc ... ...))) (put-text-property start extent (quote personality) new object)) (if (< extent end) (progn (emacspeak-personality-prepend extent end v object)))))) (setq buffer-read-only save-read-only inhibit-read-only save-inhibit-read-only inhibit-point-motion-hooks save-inhibit-point-motion-hooks) (set-buffer-modified-p modification-flag))
  (let ((save-read-only buffer-read-only) (buffer-read-only nil) (save-inhibit-read-only inhibit-read-only) (inhibit-read-only t) (deactivate-mark nil) (save-inhibit-point-motion-hooks inhibit-point-motion-hooks) (inhibit-point-motion-hooks t) (modification-flag (buffer-modified-p))) (unwind-protect (let ((v (if (listp personality) (delete-duplicates personality :test (function eq)) personality)) (orig (get-text-property start (quote personality) object)) (new nil) (extent (next-single-property-change start (quote personality) object end))) (cond ((null orig) (put-text-property start extent (quote personality) v object) (if (< extent end) (progn (emacspeak-personality-prepend extent end v object)))) (t (if (or (equal v orig) (listp orig) (and ... ...)) nil (setq new (delete-duplicates ...)) (put-text-property start extent (quote personality) new object)) (if (< extent end) (progn (emacspeak-personality-prepend extent end v object)))))) (setq buffer-read-only save-read-only inhibit-read-only save-inhibit-read-only inhibit-point-motion-hooks save-inhibit-point-motion-hooks) (set-buffer-modified-p modification-flag)))
  (progn nil (let ((save-read-only buffer-read-only) (buffer-read-only nil) (save-inhibit-read-only inhibit-read-only) (inhibit-read-only t) (deactivate-mark nil) (save-inhibit-point-motion-hooks inhibit-point-motion-hooks) (inhibit-point-motion-hooks t) (modification-flag (buffer-modified-p))) (unwind-protect (let ((v (if (listp personality) (delete-duplicates personality :test ...) personality)) (orig (get-text-property start (quote personality) object)) (new nil) (extent (next-single-property-change start (quote personality) object end))) (cond ((null orig) (put-text-property start extent (quote personality) v object) (if (< extent end) (progn ...))) (t (if (or ... ... ...) nil (setq new ...) (put-text-property start extent ... new object)) (if (< extent end) (progn ...))))) (setq buffer-read-only save-read-only inhibit-read-only save-inhibit-read-only inhibit-point-motion-hooks save-inhibit-point-motion-hooks) (set-buffer-modified-p modification-flag))))
  (progn (progn nil (let ((save-read-only buffer-read-only) (buffer-read-only nil) (save-inhibit-read-only inhibit-read-only) (inhibit-read-only t) (deactivate-mark nil) (save-inhibit-point-motion-hooks inhibit-point-motion-hooks) (inhibit-point-motion-hooks t) (modification-flag (buffer-modified-p))) (unwind-protect (let ((v (if ... ... personality)) (orig (get-text-property start ... object)) (new nil) (extent (next-single-property-change start ... object end))) (cond ((null orig) (put-text-property start extent ... v object) (if ... ...)) (t (if ... nil ... ...) (if ... ...)))) (setq buffer-read-only save-read-only inhibit-read-only save-inhibit-read-only inhibit-point-motion-hooks save-inhibit-point-motion-hooks) (set-buffer-modified-p modification-flag)))))
  (if (and personality (integer-or-marker-p start) (integer-or-marker-p end) (not (= start end))) (progn (progn nil (let ((save-read-only buffer-read-only) (buffer-read-only nil) (save-inhibit-read-only inhibit-read-only) (inhibit-read-only t) (deactivate-mark nil) (save-inhibit-point-motion-hooks inhibit-point-motion-hooks) (inhibit-point-motion-hooks t) (modification-flag (buffer-modified-p))) (unwind-protect (let ((v ...) (orig ...) (new nil) (extent ...)) (cond (... ... ...) (t ... ...))) (setq buffer-read-only save-read-only inhibit-read-only save-inhibit-read-only inhibit-point-motion-hooks save-inhibit-point-motion-hooks) (set-buffer-modified-p modification-flag))))))
  emacspeak-personality-prepend(1 3 emacspeak-ediff-odd-diff-A-voice)
  overlay-put(#<overlay from 1 to 3 in b> face ediff-odd-diff-A)
  ediff-overlay-put(#<overlay from 1 to 3 in b> face ediff-odd-diff-A)
  ediff-set-overlay-face(#<overlay from 1 to 3 in b> ediff-odd-diff-A)
  ediff-set-diff-overlays-in-one-buffer(A (points [1 3 1 3 nil nil nil nil nil nil nil]))
  ediff-convert-diffs-to-overlays((points [1 3 1 3 nil nil nil nil nil nil nil]))
  ediff-setup-diff-regions("d:\\temp\\win\\b" "d:\\temp\\win\\a" nil)
  ediff-setup(#<buffer b> "d:/temp/win/b" #<buffer a> "d:/temp/win/a" nil nil ((lambda nil (delete-file "d:/temp/win/b") (delete-file "d:/temp/win/a") (if (stringp nil) (delete-file nil)))) ((ediff-job-name . ediff-buffers)) nil)
  ediff-buffers-internal("b" "a" nil nil ediff-buffers)
  ediff-buffers("b" "a")
  call-interactively(ediff-buffers)
  tmm-prompt((keymap (ediff-files menu-item "Two Files..." ediff-files :help "Compare two files simultaneously") (ediff-buffers menu-item "Two Buffers..." ediff-buffers :help "Compare two buffers simultaneously") (ediff-files3 menu-item "Three Files..." ediff-files3 :help "Compare three files simultaneously") (ediff-buffers3 menu-item "Three Buffers..." ediff-buffers3 :help "Compare three buffers simultaneously") (separator-ediff-files "--") (ediff-directories menu-item "Two Directories..." ediff-directories :help "Compare files common to two directories simultaneously") (ediff-directories3 menu-item "Three Directories..." ediff-directories3 :help "Compare files common to three directories simultaneously") (separator-ediff-directories "--") (ediff-revision menu-item "File with Revision..." ediff-revision :help "Compare file with its older versions") (ediff-dir-revision menu-item "Directory Revisions..." ediff-directory-revisions :help "Compare directory files with their older versions") (separator-ediff-regions "--") (ediff-regions-wordwise menu-item "Regions Word-by-word..." ediff-regions-wordwise :help "Compare regions word-wise") (ediff-regions-linewise menu-item "Regions Line-by-line..." ediff-regions-linewise :help "Compare regions line-wise") (separator-ediff-windows "--") (ediff-windows-wordwise menu-item "Windows Word-by-word..." ediff-windows-wordwise :help "Compare windows word-wise") (ediff-windows-linewise menu-item "Windows Line-by-line..." ediff-windows-linewise :help "Compare windows line-wise") (window menu-item "This Window and Next Window" compare-windows :help "Compare the current window and the next window") (separator-ediff-misc "--") (ediff-misc menu-item "Ediff Miscellanea" menu-bar-ediff-misc-menu) "Compare"))
  tmm-prompt((keymap (grep menu-item "Search Files (Grep)..." grep :help "Search files for strings or regexps (with Grep)") (compile menu-item "Compile..." compile :help "Invoke compiler or Make, view compilation errors") (shell menu-item "Shell Command..." shell-command :help "Invoke a shell command and catch its output") (shell-on-region menu-item "Shell Command on Region..." shell-command-on-region :enable mark-active :help "Pass marked region to a shell command") (gdb menu-item "Debugger (GDB)..." gdb :help "Debug a program from within Emacs with GDB") (ede menu-item "Project support (EDE)" global-ede-mode :help "Toggle the Emacs Development Environment (Global EDE mode)" :button (:toggle bound-and-true-p global-ede-mode)) (semantic menu-item "Source Code Parsers (Semantic)" semantic-mode :help "Toggle automatic parsing in source code buffers (Semantic mode)" :button (:toggle bound-and-true-p semantic-mode)) (separator-prog "--") (spell menu-item "Spell Checking" ispell-menu-map) (separator-spell "--") (compare menu-item "Compare (Ediff)" menu-bar-ediff-menu) (ediff-merge menu-item "Merge" menu-bar-ediff-merge-menu) (epatch menu-item "Apply Patch" menu-bar-epatch-menu) (separator-compare "--") (vc menu-item "Version Control" vc-menu-map :filter vc-menu-map-filter) (separator-vc "--") (gnus menu-item "Read Net News (Gnus)" gnus :help "Read network news groups") (rmail menu-item (format "Read Mail (with %s)" (read-mail-item-name)) menu-bar-read-mail :visible (and read-mail-command (not (eq read-mail-command (quote ignore)))) :help "Read your mail and reply to it") (compose-mail menu-item (format "Send Mail (with %s)" (send-mail-item-name)) compose-mail :visible (and mail-user-agent (not (eq mail-user-agent (quote ignore)))) :help "Send a mail message") (directory-search menu-item "Directory Search" eudc-tools-menu) (separator-net "--") (calendar menu-item "Calendar" calendar :help "Invoke the Emacs built-in calendar") (calc menu-item "Programmable Calculator" calc :help "Invoke the Emacs built-in full scientific calculator") (simple-calculator menu-item "Simple Calculator" calculator :help "Invoke the Emacs built-in quick calculator") (separator-encryption-decryption "--") (encryption-decryption menu-item "Encryption/Decryption" (keymap (decrypt-file menu-item "Decrypt File..." epa-decrypt-file :help "Decrypt a file") (encrypt-file menu-item "Encrypt File..." epa-encrypt-file :help "Encrypt a file") (verify-file menu-item "Verify File..." epa-verify-file :help "Verify digital signature of a file") (sign-file menu-item "Sign File..." epa-sign-file :help "Create digital signature of a file") (separator-file "--") (decrypt-region menu-item "Decrypt Region" epa-decrypt-region :help "Decrypt the current region") (encrypt-region menu-item "Encrypt Region" epa-encrypt-region :help "Encrypt the current region") (verify-region menu-item "Verify Region" epa-verify-region :help "Verify digital signature of the current region") (sign-region menu-item "Sign Region" epa-sign-region :help "Create digital signature of the current region") (separator-keys "--") (list-keys menu-item "List Keys" epa-list-keys :help "Browse your public keyring") (import-keys menu-item "Import Keys from File..." epa-import-keys :help "Import public keys from a file") (import-keys-region menu-item "Import Keys from Region" epa-import-keys-region :help "Import public keys from the current region") (export-keys menu-item "Export Keys" epa-export-keys :help "Export public keys to a file") (insert-keys menu-item "Insert Keys" epa-insert-keys :help "Insert public keys after the current point") "Encryption/Decryption")) (separator-games "--") (games menu-item "Games" (keymap (5x5 menu-item "5x5" 5x5 :help "Fill in all the squares on a 5x5 board") (adventure menu-item "Adventure" dunnet :help "Dunnet, a text Adventure game for Emacs") (black-box menu-item "Blackbox" blackbox :help "Find balls in a black box by shooting rays") (bubbles menu-item "Bubbles" bubbles :help "Remove all bubbles using the fewest moves") (gomoku menu-item "Gomoku" gomoku :help "Mark 5 contiguous squares (like tic-tac-toe)") (hanoi menu-item "Towers of Hanoi" hanoi :help "Watch Towers-of-Hanoi puzzle solved by Emacs") (land menu-item "Landmark" landmark :help "Watch a neural-network robot learn landmarks") (life menu-item "Life" life :help "Watch how John Conway's cellular automaton evolves") (mult menu-item "Multiplication Puzzle" mpuz :help "Exercise brain with multiplication") (pong menu-item "Pong" pong :help "Bounce the ball to your opponent") (snake menu-item "Snake" snake :help "Move snake around avoiding collisions") (solitaire menu-item "Solitaire" solitaire :help "Get rid of all the stones") (tetris menu-item "Tetris" tetris :help "Falling blocks game") (zone menu-item "Zone Out" zone :help "Play tricks with Emacs display when Emacs is idle") "Games")) "Tools"))
  tmm-prompt((keymap (file "File" keymap (new-file menu-item "Visit New File..." find-file :enable (menu-bar-non-minibuffer-window-p) :help "Specify a new file's name, to edit the file") (open-file menu-item "Open File..." menu-find-file-existing :enable (menu-bar-non-minibuffer-window-p) :help "Read an existing file into an Emacs buffer") (dired menu-item "Open Directory..." dired :enable (menu-bar-non-minibuffer-window-p) :help "Read a directory, to operate on its files") (insert-file menu-item "Insert File..." insert-file :enable (menu-bar-non-minibuffer-window-p) :help "Insert another file into current buffer") (kill-buffer menu-item "Close" kill-this-buffer :enable (kill-this-buffer-enabled-p) :help "Discard (kill) current buffer") (separator-save "--") (save-buffer menu-item "Save" save-buffer :enable (and (buffer-modified-p) (buffer-file-name) (menu-bar-non-minibuffer-window-p)) :help "Save current buffer to its file") (write-file menu-item "Save As..." write-file :enable (and (menu-bar-menu-frame-live-and-visible-p) (menu-bar-non-minibuffer-window-p)) :help "Write current buffer to another file") (revert-buffer menu-item "Revert Buffer" revert-buffer :enable (or revert-buffer-function revert-buffer-insert-file-contents-function (and buffer-file-number (or (buffer-modified-p) (not (verify-visited-file-modtime ...))))) :help "Re-read current buffer from its file") (recover-session menu-item "Recover Crashed Session" recover-session :enable (and auto-save-list-file-prefix (file-directory-p (file-name-directory auto-save-list-file-prefix)) (directory-files (file-name-directory auto-save-list-file-prefix) nil (concat "\\`" (regexp-quote (file-name-nondirectory auto-save-list-file-prefix))) t)) :help "Recover edits from a crashed session") (separator-print "--") (print-buffer menu-item "Print Buffer" print-buffer :enable (menu-bar-menu-frame-live-and-visible-p) :help "Print current buffer with page headings") (print-region menu-item "Print Region" print-region :enable mark-active :help "Print region between mark and current position") (ps-print-buffer-faces menu-item "PostScript Print Buffer" ps-print-buffer-with-faces :enable (menu-bar-menu-frame-live-and-visible-p) :help "Pretty-print current buffer to PostScript printer") (ps-print-region-faces menu-item "PostScript Print Region" ps-print-region-with-faces :enable mark-active :help "Pretty-print marked region to PostScript printer") (ps-print-buffer menu-item "PostScript Print Buffer (B+W)" ps-print-buffer :enable (menu-bar-menu-frame-live-and-visible-p) :help "Pretty-print current buffer in black and white to PostScript printer") (ps-print-region menu-item "PostScript Print Region (B+W)" ps-print-region :enable mark-active :help "Pretty-print marked region in black and white to PostScript printer") (separator-window "--") (new-window-below menu-item "New Window Below" split-window-below :enable (and (menu-bar-menu-frame-live-and-visible-p) (menu-bar-non-minibuffer-window-p)) :help "Make new window below selected one") (new-window-on-right menu-item "New Window on Right" split-window-right :enable (and (menu-bar-menu-frame-live-and-visible-p) (menu-bar-non-minibuffer-window-p)) :help "Make new window on right of selected one") (one-window menu-item "Remove Other Windows" delete-other-windows :enable (not (one-window-p t nil)) :help "Make selected window fill whole frame") (separator-frame "--") (make-frame menu-item "New Frame" make-frame-command :visible (fboundp (quote make-frame-command)) :help "Open a new frame") (make-frame-on-display menu-item "New Frame on Display..." make-frame-on-display :visible (fboundp (quote make-frame-on-display)) :help "Open a new frame on another display") (delete-this-frame menu-item "Delete Frame" delete-frame :visible (fboundp (quote delete-frame)) :enable (delete-frame-enabled-p) :help "Delete currently selected frame") (separator-exit "--") (exit-emacs menu-item "Quit" save-buffers-kill-terminal :help "Save unsaved buffers, then exit") "File") (edit "Edit" keymap (undo menu-item "Undo" undo :enable (and (not buffer-read-only) (not (eq t buffer-undo-list)) (if (eq last-command (quote undo)) (listp pending-undo-list) (consp buffer-undo-list))) :help "Undo last operation") (cut menu-item "Cut" kill-region :enable (and mark-active (not buffer-read-only)) :help "Cut (kill) text in region between mark and current position") (copy menu-item "Copy" kill-ring-save :enable mark-active :help "Copy text in region between mark and current position" :keys "\\[kill-ring-save]") (paste menu-item "Paste" yank :enable (and (or (and (fboundp (quote x-selection-exists-p)) (x-selection-exists-p (quote CLIPBOARD))) (if (featurep (quote ns)) (cdr yank-menu) kill-ring)) (not buffer-read-only)) :help "Paste (yank) text most recently cut/copied") (paste-from-menu menu-item "Paste from Kill Menu" yank-menu :enable (and (cdr yank-menu) (not buffer-read-only)) :help "Choose a string from the kill ring and paste it") (clear menu-item "Clear" delete-region :enable (and mark-active (not buffer-read-only)) :help "Delete the text in region between mark and current position") (mark-whole-buffer menu-item "Select All" mark-whole-buffer :help "Mark the whole buffer for a subsequent cut/copy") (separator-search "--") (search menu-item "Search" (keymap (search-forward menu-item "String Forward..." nonincremental-search-forward :help "Search forward for a string") (search-backward menu-item "String Backwards..." nonincremental-search-backward :help "Search backwards for a string") (re-search-forward menu-item "Regexp Forward..." nonincremental-re-search-forward :help "Search forward for a regular expression") (re-search-backward menu-item "Regexp Backwards..." nonincremental-re-search-backward :help "Search backwards for a regular expression") (separator-repeat-search "--") (repeat-search-fwd menu-item "Repeat Forward" nonincremental-repeat-search-forward :enable (or (and (eq menu-bar-last-search-type ...) search-ring) (and (eq menu-bar-last-search-type ...) regexp-search-ring)) :help "Repeat last search forward") (repeat-search-back menu-item "Repeat Backwards" nonincremental-repeat-search-backward :enable (or (and (eq menu-bar-last-search-type ...) search-ring) (and (eq menu-bar-last-search-type ...) regexp-search-ring)) :help "Repeat last search backwards") (separator-tag-search "--") (tags-srch menu-item "Search Tagged Files..." tags-search :help "Search for a regexp in all tagged files") (tags-continue menu-item "Continue Tags Search" tags-loop-continue :help "Continue last tags search operation") (separator-tag-isearch "--") (i-search menu-item "Incremental Search" (keymap (isearch-forward menu-item "Forward String..." isearch-forward :help "Search forward for a string as you type it") (isearch-backward menu-item "Backward String..." isearch-backward :help "Search backwards for a string as you type it") (isearch-forward-regexp menu-item "Forward Regexp..." isearch-forward-regexp :help "Search forward for a regular expression as you type it") (isearch-backward-regexp menu-item "Backward Regexp..." isearch-backward-regexp :help "Search backwards for a regular expression as you type it") "Incremental Search")) "Search")) (replace menu-item "Replace" (keymap (query-replace menu-item "Replace String..." query-replace :enable (not buffer-read-only) :help "Replace string interactively, ask about each occurrence") (query-replace-regexp menu-item "Replace Regexp..." query-replace-regexp :enable (not buffer-read-only) :help "Replace regular expression interactively, ask about each occurrence") (separator-replace-tags "--") (tags-repl menu-item "Replace in Tagged Files..." tags-query-replace :help "Interactively replace a regexp in all tagged files") (tags-repl-continue menu-item "Continue Replace" tags-loop-continue :help "Continue last tags replace operation") "Replace")) (goto menu-item "Go To" (keymap (go-to-line menu-item "Goto Line..." goto-line :help "Read a line number and go to that line") (go-to-pos menu-item "Goto Buffer Position..." goto-char :help "Read a number N and go to buffer position N") (beg-of-buf menu-item "Goto Beginning of Buffer" beginning-of-buffer) (end-of-buf menu-item "Goto End of Buffer" end-of-buffer) (separator-tags "--") (find-tag menu-item "Find Tag..." find-tag :help "Find definition of function or variable") (find-tag-otherw menu-item "Find Tag in Other Window..." find-tag-other-window :help "Find function/variable definition in another window") (next-tag menu-item "Find Next Tag" menu-bar-next-tag :enable (and (boundp (quote tags-location-ring)) (not (ring-empty-p tags-location-ring))) :help "Find next function/variable matching last tag name") (next-tag-otherw menu-item "Next Tag in Other Window" menu-bar-next-tag-other-window :enable (and (boundp (quote tags-location-ring)) (not (ring-empty-p tags-location-ring))) :help "Find next function/variable matching last tag name in another window") (apropos-tags menu-item "Tags Apropos..." tags-apropos :help "Find function/variables whose names match regexp") (separator-tag-file "--") (set-tags-name menu-item "Set Tags File Name..." visit-tags-table :help "Tell Tags commands which tag table file to use") "Go To")) (bookmark menu-item "Bookmarks" menu-bar-bookmark-map) (separator-bookmark "--") (fill menu-item "Fill" fill-region :enable (and mark-active (not buffer-read-only)) :help "Fill text in region to fit between left and right margin") (props menu-item "Text Properties" facemenu-menu) "Edit") (options "Options" keymap (transient-mark-mode menu-item "Highlight Active Region" transient-mark-mode :enable (not cua-mode) :help "Make text in active region stand out in color (Transient Mark mode)" :button (:toggle and (default-boundp (quote transient-mark-mode)) (default-value (quote transient-mark-mode)))) (highlight-paren-mode menu-item "Highlight Matching Parentheses" show-paren-mode :help "Highlight matching/mismatched parentheses at cursor (Show Paren mode)" :button (:toggle and (default-boundp (quote show-paren-mode)) (default-value (quote show-paren-mode)))) (highlight-separator "--") (line-wrapping menu-item "Line Wrapping in This Buffer" (keymap (window-wrap menu-item "Wrap at Window Edge" #[nil "\203



-----------------------------------------------------------------------------
To unsubscribe from the emacspeak list or change your address on the
emacspeak list send mail to "emacspeak-request@xxxxxxxxxxx" with a
subject of "unsubscribe" or "help".



If you have questions about this archive or had problems using it, please send mail to:

priestdo@xxxxxxxxxxx No Soliciting!

Emacspeak List Archive | 2010 | 2009 | 2008 | 2007 | 2006 | 2005 | 2004 | 2003 | 2002 | 2001 | 2000 | 1999 | 1998 | Pre 1998

Emacspeak Files | Emacspeak Blog