ERPM?AppleApple_partition_map?PM@°disk imageApple_HFS°@3goonPMðApple_FreeH+10.0¼V¿$¼W7Œ¼W/¤vˆ0&>èÍsß»€€€€ ÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿð €€øøx&€Ïðøøxÿ  ra-retrieve.1»èÚÍ»èÚͼW/ó¼W/òõc¤(ŠREADME"¼W5O¼W5r¼W5Á¼W6ðõc¤FÇ#6remem-2.12-source.tar.gz¼W$V¼W&z¼W0"¼W0"õc¤t98â8remem.el»èÚÍ»èÚͼW/ò¼W/òõc¤òp remem.elc¼W( ¼W( ¼W/ò¼W/òõc¤ÛÏb0HFS+ Private Data¼W/¤¼W/¤¼W/¤¼W/¤@PW¼W¼HFS+ Private Data.Trashes 501¼W/±¼W/±¼W/±¼W/±õcAÀ@501 remem.elcremem.el ra-retrieve.1 ra-index.1 jimminy.el ra-retrievera-indexremem-2.12-source.tar.gz Desktop DB Desktop DF!NEWS"README#COPYING$INSTALL% .DS_StoreètN Þ úÚºœ‚\6ôÒª„^2ìÔnL†td4(ÿ  Remem 2.12¼W/¤¼W7v¼W7v¼W7võõAÀ Remem 2.12 .DS_Store%¼W7v¼W7Œ¼W7Œ¼W7võc€@00.Trashes¼W/¯¼W/±¼W/±¼W/¯õcBÛ@COPYING#»èÚÍ»èÚͼW5˼W5Ëõc¤FH) Desktop DB¼W0ɼW7Œ¼W7Œ¼W0Éõc¤BTFLDMGR@" Desktop DF¼W0ɼW0ؼW0ؼW0Éõc¤DTFLDMGR@!INSTALL$¼W4æ¼W5޼W5˼W5Ëõc¤Ð. jimminy.el»èÚÍ»èÚͼW/ô¼W/òõc¤C ŽNEWS!¼W5@¼W5@¼W5Á¼W5Áõc¤ý(ra-index¼W'ò¼W'ò¼W0¼W0õcíR &¼& ra-index.1»èÚÍ»èÚͼW/ó¼W/òõc¤-Œ ra-retrieve¼W(¼W(¼W0¼W0õcí†h)“) Ä ® šŠ‚n`L8*º¨‚ Remem 2.12  ra-retrieve.1T.;ELC ;;; Compiled by finagler@Vagabond.local on Mon Feb 16 18:08:07 2004 ;;; from file /Users/finagler/Projects/RA/src/remem-2.12/other/elc.14701/remem.el ;;; in Emacs version 21.2.1 ;;; with bytecomp version 1.1.1.4 ;;; with all optimizations. ;;; This file uses dynamic docstrings, first added in Emacs 19.29. (if (and (boundp 'emacs-version) (< (aref emacs-version (1- (length emacs-version))) ?A) (or (and (boundp 'epoch::version) epoch::version) (string-lessp emacs-version "19.29"))) (error "`remem.el' was compiled for Emacs 19.29 or later")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (provide 'remem) #@64 This is the directory where savant is located (fully expanded) (defvar remem-prog-dir (expand-file-name "/usr/local/bin") (#$ . 655)) #@88 This is the base directory containing all of the database directories (fully expanded) (defvar remem-database-dir (expand-file-name "~/RA-indexes") (#$ . 795)) #@82 The list of scopes, where each scope is (DIRN NUM-LINES UPDATE-TIME QUERY-RANGE) (defvar remem-scopes-list '(("mail" 6 5 500) ("notes" 2 5 500)) (#$ . 961)) #@74 When seeing an entire suggestion, just go to the file rather than a copy (defvar remem-load-original-suggestion nil (#$ . 1124)) #@58 If t, log when suggestions are followed to remem-logfile (defvar remem-log-p t (#$ . 1259)) #@47 File where remembrance agent info gets logged (defvar remem-logfile (expand-file-name "~/.remem-log-file") (#$ . 1357)) #@56 If t, send major-mode info to Savant to help templates (defvar remem-use-major-mode-templates t (#$ . 1483)) #@90 If t, set C-c1 through C-c9 to bring up suggestions just like C-cr1 through C-cr9 do now (defvar remem-non-r-number-keys nil (#$ . 1598)) #@65 Set to t if you want keywords shown. Not implemented right now. (defvar remem-terminal-mode t (#$ . 1742)) (byte-code "\301B\306\301!\204\f\307\302B\306\302!\204\307\303B\306\303!\204$\310\304B\306\304!\2040\311\305B\306\305!\204<\312\313B\306\313!\204I\314 \315 \316P\317\"\210\315 \320P\321\"\210\322B\306\322!\204f\307\323B\306\323!\204s\307\324B\306\324!\204\200\307\325\326!\210\325\327!\210\325\330!\210\325\331!\210\325\332!\210\325\333!\210\306\334!\203\306\335\232\203\306\336\326\337\"\210\336\327\340\"\210\336\332\341\"\210\336\333\342\"\210\336\331\343\"\210\336\330\344\"\210\202\344\336\326\345\"\210\336\327\346\"\210\336\332\347\"\210\336\333\350\"\210\336\331\351\"\210\336\330\351\"\210\352B\306\352!\204\365\353\354@\"**\203\355\356!\210\357\360M\210\361\362M\210\363\364M\210\365\366M\210\367\370M\210\371\372M\210\355\373!\210\202W\355\374!\210\375B\376B\377B\363\201AM\210\371\201BM\210\201C\201DM\210\357\201EM\210\201F\201GM\210\201H\201IM\210\307\207" [current-load-list remem-print-exact-relevance-p remem-print-even-bad-relevance-p remem-relevance-plus-plus-threshold remem-relevance-plus-threshold remem-relevance-normal-threshold boundp nil 40 30 10 remem-command-prefix "r" global-set-key "t" remem-toggle "h" remem-create-help-page remem-mode-aware-changing remem-buffname-db-alist remem-mode-db-alist make-empty-face remem-odd remem-even remem-hilite remem-hilite2 remem-odd-scope remem-even-scope hilit-background-mode dark set-face-foreground "Thistle" "MediumSeaGreen" "Goldenrod" "CornflowerBlue" "OrangeRed" "Aquamarine" "Black" "MediumBlue" "Blue" "DarkSlateGray" "Red" running-xemacs string-match "XEmacs\\|Lucid" require itimer event-x-y #[(event) "\301!\302!B\207" [event event-x event-y] 3] run-at-time #[(time repeat function &rest args) "\304\305\306 \n\307\310 &\207" [function time repeat args apply start-itimer "remem-timer" nil t] 9] remem-cancel-timer #[(timer) "\205\301!\207" [timer delete-itimer] 2] x-popup-menu #[(event list) "\302 \"\207" [list event popup-menu] 3] frame-first-window #[(&rest args) "\301!\207" [args frame-highest-window] 2] marker-position-nonil #[(marker) "\302!\211\203\f \202 \303)\207" [marker mark marker-position 0] 3] overlay timer scrollbar-width scrollbar-height mouse-track-click-hook emacs-version #[(timer) "\301!\207" [timer cancel-timer] 2] #[(marker) "\302!\211\203\f \202 \303)\207" [marker mark marker-position 0] 3] window-displayed-height #[(&optional window) "\301!S\207" [window window-height] 2] #[(event) "\3028:\203 \302\202\3038)\302 8)\207" [event position 2 1] 2] event-window #[(event) "\3028:\203 \302\202\3038)\211@)\207" [event position 2 1] 3] event-point #[(event) "\3028:\203 \302\202\3038)\211A@:\203 A@@\202# A@)\207" [event position 2 1] 3]] 3) #@68 If t, don't display the remem window (but keep updating it anyway) (defvar remem-hide-display nil (#$ . 4625)) (byte-code "\301\301\207" [remem-hide-display nil] 1) #@65 If a value, jump automatically to that lineno when it's updated (defvar remem-autojump-suggestion nil (#$ . 4797)) (byte-code "\301\301\207" [remem-autojump-suggestion nil] 1) #@45 Field where most relevant keywords are kept (defvar remem-keyword-field-start-number 28 (#$ . 4980)) #@48 Field where field similarity breakdown is kept (defvar remem-sim-breakdown-field-start-number 29 (#$ . 5087)) #@147 String that gets catenated before every Savant query command. Change this to give special commands like setting biases and using hand-set biases. (defvar remem-query-preamble-string "" (#$ . 5204)) #@91 Previous value of remem-query-preamble-string, used to keep track of when a query changes (defvar remem-query-preamble-string-previous "" (#$ . 5408)) #@89 Like remem-query-preamble-string, but gets reset to the empty string after every query. (defvar remem-query-oneshot-preamble-string "" (#$ . 5565)) #@82 String that gets catenated just before the query text (after the query command). (defvar remem-query-extra-text-string "" (#$ . 5719)) #@93 Previous value of remem-query-extra-text-string, used to keep track of when a query changes (defvar remem-query-extra-text-string-previous "" (#$ . 5860)) #@91 Like remem-query-extra-text-string, but gets reset to the empty string after every query. (defvar remem-query-oneshot-extra-text-string "" (#$ . 6021)) (byte-code "\301B\306\301!\204\f\307\302B\306\302!\204\310\303B\306\303!\204$\311\304B\306\304!\2040\312\305B\306\305!\204< \313B\306\313!\204I  \314B\306\314!\204V\315\f\316B\306\316!\204c\317\320B\306\320!\204p\321\322B\306\322!\204}\323\324B\306\324!\204\212\325\326B\306\326!\204\227\327\330B\306\330!\204\244\331\332B\306\332!\204\261\333\334B\306\334!\204\276\335\336B\306\336!\204\313\337\340B\306\340!\204\330\341 \342B\306\342!\204\345\343\"\344B\306\344!\204\362\315$\345B\306\345!\204\377\315%\346B\306\346!\204\f\315&\347B\306\347!\204\350'\351B\306\351!\204&\315)\315\207" [current-load-list remem-format-default remem-format-nokeys remem-format-inspec remem-format-jimminy remem-format boundp ((0 2 (field 0 mouse-face remem-hilite2) nil) (1 2 (face remem-even field 1) nil) (9 12 (face remem-odd field 9 mouse-face remem-hilite) nil) (8 30 (face remem-even field 8 mouse-face remem-hilite) nil) (5 8 (face remem-odd field 5 mouse-face remem-hilite) remem-date-print-filter) (27 13 (face remem-even field 4 mouse-face remem-hilite) nil) (28 50 (face remem-odd field 28 mouse-face remem-hilite) nil)) ((0 2 (field 0 mouse-face remem-hilite2) nil) (1 2 (face remem-even field 1) nil) (9 12 (face remem-odd field 9 mouse-face remem-hilite) nil) (8 30 (face remem-even field 8 mouse-face remem-hilite) nil) (5 8 (face remem-odd field 5 mouse-face remem-hilite) remem-date-print-filter) (4 50 (face remem-even field 4 mouse-face remem-hilite) nil)) ((0 2 (field 0 mouse-face remem-hilite2) nil) (1 2 (face remem-even field 1) nil) (9 12 (face remem-odd field 9 mouse-face remem-hilite) nil) (5 12 (face remem-even field 5 mouse-face remem-hilite) remem-date-print-filter) (8 50 (face remem-odd field 8 mouse-face remem-hilite) nil) (28 50 (face remem-even field 28 mouse-face remem-hilite) nil)) ((0 2 (field 0 mouse-face remem-hilite2) nil) (1 2 (face remem-even field 1) nil) (9 12 (face remem-odd field 9 mouse-face remem-hilite) nil) (8 24 (face remem-even field 8 mouse-face remem-hilite) nil) (5 8 (face remem-odd field 5 mouse-face remem-hilite) remem-date-print-filter) (28 50 (face remem-even field 28 mouse-face remem-hilite) nil)) remem-format-mail remem-format-alist nil remem-keyword-field (28 40 (face remem-even field 28)) remem-savant-field-names (lineno num-relevance docnum "!BODY: " "!LOCATION: " "!DATE: " "!TIME: " "!DAY" "!SUBJECT: " "!PERSON: " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "!BODY:") remem-field-array (("Body" . 3) ("Location" . 4) ("Date" . 5) ("Subject" . 8) ("Person" . 9) ("body" . 3) ("location" . 4) ("date" . 5) ("subject" . 8) ("person" . 9)) remem-total-scope-lines 0 remem-display-buffer-height 4 remem-docnum-field 2 remem-relevance-field 1 remem-waiting-for-query-return-timeout 10 remem-document-buffer-name "*remem-document-output*" remem-query-buffer-name "*remem-query*" remem-help-buffer-name "*remem-help*" remem-old-C-x1 remem-old-C-xo remem-kind-of-query remem-versionstring-temp "" remem-working-scope] 2) #@45 The name of the remembrance display buffer. (defvar remem-buffer-name "*remem-display*" (#$ . 9267)) #@39 is the remem-display already running? (defvar remem-display-running nil (#$ . 9374)) (byte-code "\301B\306\301!\204\f\307\310\301!\210\302B\306\302!\204\307\303B\306\303!\204(\307\304B\306\304!\2044\307\305B\306\305!\204@\307\310\305!\210\311B\306\311!\204Q\312 \310\311!\210\313B\306\313!\204b\307 \310\313!\210\314B\306\314!\204s\307\f\310\314!\210\315B\306\315!\204\204\307 \310\315!\210\316B\306\316!\204\225\307\307\207" [current-load-list remem-scopes remem-scope-percentages remem-global-timer remem-buffers remem-selection-line boundp nil make-variable-buffer-local remem-selection-line-contents "" remem-selection-field remem-selection-line-overlay remem-selection-field-overlay remem-last-followed-docnum] 2) (defalias 'remem-scope-directory #[(scope) "\301H\207" [scope 0] 2]) (defalias 'remem-scope-number-lines #[(scope) "\301H\207" [scope 1] 2]) (defalias 'remem-scope-update-time #[(scope) "\302H\211\303=\203\304\202 )\207" [scope ut 2 0 nil] 3]) (defalias 'remem-scope-range #[(scope) "\301H\207" [scope 3] 2]) (defalias 'remem-scope-proc #[(scope) "\301H\207" [scope 4] 2]) (defalias 'remem-scope-history #[(scope) "\301H\207" [scope 5] 2]) (defalias 'remem-scope-query #[(scope) "\301H\207" [scope 6] 2]) (defalias 'remem-scope-processed #[(scope) "\301H\207" [scope 7] 2]) (defalias 'remem-scope-in-progress #[(scope) "\301H\207" [scope 8] 2]) (defalias 'remem-scope-timer #[(scope) "\301H\207" [scope 9] 2]) (defalias 'remem-scope-raw #[(scope) "\301H\207" [scope 10] 2]) (defalias 'remem-scope-buffer #[(scope) "\301H\207" [scope 11] 2]) (defalias 'remem-scope-querycounter #[(scope) "\301H\207" [scope 12] 2]) (defalias 'remem-scope-dbinfo #[(scope) "\301H\207" [scope 13] 2]) (defalias 'remem-scope-dbmodtime #[(scope) "\301H\207" [scope 14] 2]) (defalias 'remem-set-scope-directory #[(scope value) "\302 I\207" [scope value 0] 3]) (defalias 'remem-set-scope-number-lines #[(scope value) "\302 I\207" [scope value 1] 3]) (defalias 'remem-set-scope-update-time #[(scope value) "\302 I\207" [scope value 2] 3]) (defalias 'remem-set-scope-range #[(scope value) "\302 I\207" [scope value 3] 3]) (defalias 'remem-set-scope-proc #[(scope value) "\302 I\207" [scope value 4] 3]) (defalias 'remem-set-scope-history #[(scope value) "\302 I\207" [scope value 5] 3]) (defalias 'remem-set-scope-query #[(scope value) "\302 I\207" [scope value 6] 3]) (defalias 'remem-set-scope-processed #[(scope value) "\302 I\207" [scope value 7] 3]) (defalias 'remem-set-scope-in-progress #[(scope value) "\302 I\207" [scope value 8] 3]) (defalias 'remem-set-scope-timer #[(scope value) "\302 I\207" [scope value 9] 3]) (defalias 'remem-set-scope-raw #[(scope value) "\302 I\207" [scope value 10] 3]) (defalias 'remem-set-scope-buffer #[(scope value) "\302 I\207" [scope value 11] 3]) (defalias 'remem-set-scope-querycounter #[(scope value) "\302 I\207" [scope value 12] 3]) (defalias 'remem-set-scope-dbinfo #[(scope value) "\302 I\207" [scope value 13] 3]) (defalias 'remem-set-scope-dbmodtime #[(scope) "\302 I\207" [scope value 14] 3]) (defalias 'remem-decrement-scope-in-progress #[(scope) "\301\301H\205\301H\302V\205\301HSI\207" [scope 8 0] 4]) (defalias 'remem-initiate-query-nonverbose #[(scope &optional query use-modep use-preambles use-extra-text) "\306!\206\226 \203\307 \"\210\n\f$\f\310\311\312\313!\314_\315\\\"\316%\205/\317\311\320&\"\316Q'\2056()\205<\n\321!\316\322\260 *\311\320&\"+\323\324*G\325*$\210\326\327!\203d\330*\326\327!\"\210\331\332!T\"\210\332!\333Y\203y\334\335\"\210\336\337!\340\"\210\341\337!*\"\210\342,\"\210)\343$\343\211(\207" [scope query remem-query-extra-text-string remem-query-extra-text-string-previous remem-query-preamble-string remem-query-preamble-string-previous remem-restart-on-outdated-index remem-set-scope-query "query " format "%d" remem-scope-number-lines 2 6 "\n" "EMACS REMEMBRANCE QUERY MODE: " "%s" remem-scope-query "" set-text-properties 0 nil get-buffer "*remem-log*" print remem-set-scope-querycounter remem-scope-querycounter 25 remem-log-checkpoint-scope at-25 set-process-filter remem-scope-proc remem-process-filter process-send-string remem-set-scope-in-progress "" remem-query-oneshot-preamble-string use-modep major-mode use-preambles remem-query-oneshot-extra-text-string use-extra-text query-text remem-last-query-mode remem-waiting-for-query-return-timeout] 11]) #@75 Returns the remem-scopes for the remem buffer that is currently defaulted (defalias 'remem-default-scope-list #[nil "\206 \205\302 @!\205\212 @q\210)\207" [remem-scopes remem-buffers buffer-live-p] 2 (#$ . 13842)]) #@47 Returns the scope that is currently defaulted (defalias 'remem-default-scope #[nil "\301 \211\205 @)\207" [default-scopes remem-default-scope-list] 2 (#$ . 14071)]) #@40 Return all scopes in all remem buffers (defalias 'remem-all-scopes #[nil "\301\302\303\304\"\"\207" [remem-buffers apply append mapcar #[(buf) "\302!\203 q\210 \207\303\207" [buf remem-scopes buffer-live-p nil] 2]] 5 (#$ . 14245)]) #@66 String from count words back to current point. (word = 5 chars) (defalias 'remem-last-several-words #[(count) "\306p!\307\211\211\211\212\310\311\312p!\"\203%\312p!\313\310\311\312p!\"O\202H\310\314\312p!\"\203=\312p!\313\310\314\312p!\"O\202H\310\315\312p!\"\203H\316\203X\306!\203X\317\306!!\210` \320_Z\211eW\203fe\n \320_\\\211dV\203td\321\n {P)\317\f!\210  -\207" [realbufname retval beg end orig-window count get-buffer-window nil string-match "-summary" buffer-name 0 " Summary" "*Summary " "*Article*" select-window 5 " " remem-debug-retval] 7 (#$ . 14487)]) #@71 Updates the results shown by running a query NOW. Bypasses the timer (defalias 'remem-query-now #[nil "\300\301\302 \"\207" [mapcar #[(scope) "\306!?\206P\307\310\311p!\"\206P\312 \313\"\203E\307\311p!\n\"\203+\314\315 \316\"\210\317\202-\320\321\312 \313\"!\322\f!\210\323\324\325!! \313\211%)\207\323\324\325!! \313\211%\207" [scope remem-buffer-name remem-query-buffer-name remem-kind-of-query exheight remem-use-major-mode-templates remem-scope-proc string-match "^Minibuf" buffer-name get-buffer-window t remem-log-checkpoint remem-default-scope-list manual-page-query manual-page now window-displayed-height remem-redistribute-scopes remem-initiate-query-nonverbose remem-last-several-words remem-scope-range] 6] remem-default-scope-list] 3 (#$ . 15088) nil]) (defalias 'remem-query-on-keywords #[(keywords) "\300\301\302 \"\207" [mapcar #[(scope) "\304!?\206R\305\306\307p!\"\206R\310 \311\"\203;\312\310 \311\"!\313\n!\210\314 \315#\210\316\317!!\210\320\321\322\323!\324$\")\207\314 \315#\210\316\317!!\210\320\321\322\323!\324$\"\207" [scope remem-buffer-name exheight keywords remem-scope-proc string-match "^Minibuf" buffer-name get-buffer-window t window-displayed-height remem-redistribute-scopes remem-initiate-query-nonverbose nil remem-cancel-timer remem-scope-timer remem-set-scope-timer run-at-time 10 remem-scope-update-time remem-around-point] 7] remem-default-scope-list] 3]) (defalias 'remem-query-on-field #[(field field-text query-type) "\306 \234\nQ\f\307\310 \311\f!\312P\"\210\313\314\310 \")\207" [remem-savant-field-names field field-text query query-type remem-kind-of-query "EMACS REMEMBRANCE FIELD QUERY:\n" remem-log-checkpoint remem-default-scope-list symbol-name "-query" mapcar #[(scope) "\304!?\206R\305\306\307p!\"\206R\310 \311\"\203;\312\310 \311\"!\313\n!\210\314 \315#\210\316\317!!\210\320\321\322\323!\324$\")\207\314 \315#\210\316\317!!\210\320\321\322\323!\324$\"\207" [scope remem-buffer-name exheight query remem-scope-proc string-match "^Minibuf" buffer-name get-buffer-window t window-displayed-height remem-redistribute-scopes remem-initiate-query-nonverbose nil remem-cancel-timer remem-scope-timer remem-set-scope-timer run-at-time 10 remem-scope-update-time remem-around-point] 7]] 4]) #@30 Run a query on a given field (defalias 'remem-grab-query #[(fieldname field-text) "\303 \304#\210\305\n!\207" [fieldname field-text remem-buffer-name remem-query-on-field manual-field pop-to-buffer] 4 (#$ . 17382) (list (let (val) (setq val (completing-read "Which Field? (Body Location Date Subject Person): " remem-field-array 'consp t)) (cdr (assoc val remem-field-array))) (read-string "Enter Text: "))]) #@85 Insert a string as the next field for a query page, with appropriate read-only font (defalias 'remem-insert-query-page-text #[(fieldstring) "G\n\204\304\305 \306$\210\304 S \307$\210c\202N\310`c\210`\"\311 \312\"\210\313 \314\315#\210e`U\203B\313 \316\317#\210\313 \320\315#\202M\313 \316\315#\210\313 \320\315#))\207" [fieldstring len running-xemacs extent add-text-properties 0 (read-only t face remem-odd-scope) (rear-nonsticky t) make-extent set-extent-face remem-odd-scope set-extent-property read-only t start-open nil end-open] 5 (#$ . 17798)]) #@64 Create a nice form-like buffer to fill in a manual remem query (defalias 'remem-create-query-page #[nil "\302\303 \304\"\210\305!\203\306!\210\307\310!!\210\311\312ed\"\210\313\314!\210\313\315!\210\313\316!\210\313\317!\210\313\320!\210eb\210\321\207" [remem-query-buffer-name major-mode remem-log-checkpoint remem-default-scope-list new-query-page get-buffer kill-buffer pop-to-buffer get-buffer-create remem-query-mode kill-region remem-insert-query-page-text "Remem Query Form:\nEnter one or more fields below and hit C-crv to view the results\n\nSubject: " "\nPerson: " "\nLocation: " "\nDate: " "\nBody: " 4] 3 (#$ . 18368) nil]) #@34 Display the help page for the RA (defalias 'remem-create-help-page #[nil "\303\232\203\n\304\202\305\306\307\310\311\312\313\314\260\315\316\n!!\210\317ed\"\210 c\210eb)\207" [remem-command-prefix help-string remem-help-buffer-name "r" "Remembrance Agent Commands:\n\nC-c r t (Control-c r t): Toggle Remem\nC-c r v (Control-c r v): View updated results\nC-c r # (Control-c r ): Show Suggestion\nC-c r r # (Control-c r r ): Rate this document\nC-c r f (Control-c r f): Field Search\nC-c r q (Control-c r q): Query\nC-c r d (Control-c r d): Database change\nLeft mouse-click on lineno: Show Suggestion\nLeft mouse-click on a field: Search field\nMiddle or Right mouse-click: Keywords\nResize window: Resize\n" "Remembrance Agent Commands:\n\n" "t: Toggle Remem\n" "v: View updated results\n" "#: Show Suggestion number #\n" "r#: Rate document number #\n" "f: Field Search\n" "q: Query\n" "d: Database change\nLeft mouse-click on lineno: Show Suggestion\nLeft mouse-click on a field: Search field\nMiddle or Right mouse-click: Keywords\nResize window: Resize\n" pop-to-buffer get-buffer-create kill-region] 15 (#$ . 19017) nil]) #@61 Switch database to the one specified in remem-mode-db-alist (defalias 'remem-switch-to-mode-specific-db #[nil "\305\306p!\"A\206\305 \n\"A\211\205\f \232?\205 \307 )\207" [remem-buffname-db-alist major-mode remem-mode-db-alist new-remem-scopes-list remem-scopes-list assoc buffer-name remem] 4 (#$ . 20383)]) (defalias 'remem-around-point #[(scope) "\306!\210\307!?\206\257\310!\206\257\311\312\313p!\"\206\257\311\314\313p!\"\206\257 \203,\315 \206\257\316\n\317\"\203w\320\316\n\317\"!\321\322!!\323\f!\210 \324!\230\203j \325\232\203j\325\232\203j\230\203j\230?\205u\326\327 \317\211%*\207\321\322!!\211\324!\230\203\243 \325\232\203\243\325\232\203\243\230\203\243\230?\205\256\326\327 \317\211%)\207" [scope remem-mode-aware-changing remem-buffer-name query exheight remem-query-oneshot-preamble-string remem-decrement-scope-in-progress remem-scope-proc remem-scope-in-progress string-match "^*remem-" buffer-name "*Minibuf" remem-switch-to-mode-specific-db get-buffer-window t window-displayed-height remem-last-several-words remem-scope-range remem-redistribute-scopes remem-scope-query "" auto remem-initiate-query-nonverbose remem-query-oneshot-extra-text-string remem-query-preamble-string remem-query-preamble-string-previous remem-query-extra-text-string remem-query-extra-text-string-previous remem-kind-of-query remem-use-major-mode-templates remem-query-extra-string-previous] 7]) #@191 This function changes the number of display lines shown by each scope so that the remem window is filled. Makes use of the percentage property to retain the same proportions across scopes. (defalias 'remem-redistribute-scopes #[(newtotal) "\304\305!!\205#\306\212q\210\307\n!\210 =?\205\"\310\n\311\"\210\312\313\n\")\207" [remem-buffer-name remem-total-scope-lines remem-scopes newtotal buffer-live-p get-buffer 0 remem-add-scope-lines remem-log-checkpoint resizing mapcar #[(x) "\303\304 \305!\n\236A_!\"\207" [x newtotal remem-scope-percentages remem-set-scope-number-lines round remem-scope-proc] 6]] 3 (#$ . 21852)]) (defalias 'remem-add-scope-lines #[(scope-list) "@?\206\302@! \\\303A!\207" [scope-list remem-total-scope-lines remem-scope-number-lines remem-add-scope-lines] 2]) (defalias 'remem-column-format #[(n) " \234\207" [remem-format n] 2]) (defalias 'remem-column-field #[(n) "\301!\302\234\207" [n remem-column-format 0] 2]) (defalias 'remem-column-width #[(n) "\301!\302\234\207" [n remem-column-format 1] 2]) (defalias 'remem-column-props #[(n) "\301!\302\234\207" [n remem-column-format 2] 2]) (defalias 'remem-column-printfilter #[(n) "\301!\302\234\207" [n remem-column-format 3] 2]) (defalias 'remem-field-column #[(n) "\303\303 GW\203\304!\nU\204T\211\202)\207" [i remem-format n 0 remem-column-field] 3]) (defalias 'remem-enlarge-remem-display #[(num-lines) "\303p!\304\303 !!\210\305\n!\210\304!)\207" [current-window remem-buffer-name num-lines get-buffer-window select-window enlarge-window] 3 nil "nNumber Lines to enlarge (negative to shrink): "]) (defalias 'remem-enlarge-remem-display-by-1 #[nil "\300\301!\207" [remem-enlarge-remem-display 1] 2]) (defalias 'remem-shrink-remem-display-by-1 #[nil "\300\301!\207" [remem-enlarge-remem-display -1] 2]) (defalias 'remem-substring-equal #[(str1 start1 end1 str2 start2 end2 &optional ignore-case) " \nO \f O\203\227\227\230*\207" [str1 start1 end1 str2 start2 end2 compstr2 compstr1 ignore-case] 4]) (defalias 'remem-date-print-filter #[(datestring) "\305\211\211\211\306\307\f\"\203'\f\310\224\310\225O\f\311\224\311\225O\f\312\224\312\225O\202f\306\313\f\"\203H\f\310\224\310\225O\f\311\224\311\225O\f\312\224\311\\\312\225O\202f\306\314\f\"\203f\f\310\224\310\225O\f\311\224\311\225O\f\312\224\311\\\312\225O \203?\315 \316\311\317\316\311\320&\203|\321\202?\315 \316\311\322\316\311\320&\203\216\323\202?\315 \316\311\324\316\311\320&\203\240\325\202?\315 \316\311\326\316\311\320&\203\262\327\202?\315 \316\311\330\316\311\320&\203\304\331\202?\315 \316\311\332\316\311\320&\203\326\333\202?\315 \316\311\334\316\311\320&\203\350\335\202?\315 \316\311\336\316\311\320&\203\372\337\202?\315 \316\311\340\316\311\320&\203\f\341\202?\315 \316\311\342\316\311\320&\203\343\202?\315 \316\311\344\316\311\320&\2030\345\202?\315 \316\311\346\316\311\320&\203?\347 \203w\n\203w\203wG\350U\203W\311\350O G\311W\203b\351 P\nG\311W\203m\351\nP\n\352 \352\260\202x\f,\207" [year day month monthname datestring nil string-match "\\([0-9]+\\) +\\([A-Z][a-z][a-z]\\) +\\([0-9][0-9][0-9]?[0-9]?\\)" 1 2 3 "[A-Z][a-z][a-z] +\\([A-Z][a-z][a-z]\\) +\\([0-9]+\\) +[0-9][0-9]?:[0-9][0-9]:[0-9][0-9] +[-0-9]* *\\([0-9][0-9][0-9][0-9]\\)" "\\([A-Z][a-z][a-z]\\)[a-z]* +\\([0-9]+\\) *, *\\([0-9][0-9][0-9][0-9]\\)" remem-substring-equal 0 "Jan" t "01" "Feb" "02" "Mar" "03" "Apr" "04" "May" "05" "Jun" "06" "Jul" "07" "Aug" "08" "Sep" "09" "Oct" "10" "Nov" "11" "Dec" "12" 4 "0" "/"] 8]) #@200 takes a list of fields, extracts the desired ones (specified in format-list), and inserts them into the current buffer with the desired spacing. The point should be at the beginning of a line. (defalias 'remem-format-line #[(line format-list scope &optional extra-format) "@AA@\305\211;\203 c\210\202\306\307\f\"\210\310\311\312\313#+\207" [line remem-relevance-score scope-marker fields format-list 100 mapcar #[(format) " \306\234\234 \307\234 \310\234\311\302\n\312\313 \234!\314\f\234\315 \234\316#\234\317 \306\234\234\257\f \320\234\"`$%&'( \306\234\306U\203_)\306U\203S\311\321\322D%\"%\202\266\311\321\323D%\"%\202\266 \306\234\307U\203\266\324\325(\"\203v(\307\326O((\327\326O(\330(!*+\204\266*,V\204\227*\306U\203\233\331\202\264*-V\203\247\332\202\264*.V\203\263\333\202\264\334(/\204\3210\335=\203\321*\306U\204\321*.V\203&\203\337\336&(D!('(GW\203\363(\306'Oc\210\202(\203\374(c\210\337\340'(GZ\"\210\341$`%#\210\337\340\307\"\202 \306\234\307U\205\342c-\207" [fields format scope remem-docnum-field remem-relevance-field remem-keyword-field-start-number 0 1 3 append docnum string-to-int relevance keywords sims-breakdown orig-source 2 face remem-even-scope remem-odd-scope string-match "\n" nil 6 string-to-number "++" "+ " " " "- " auto eval insert-char 32 add-text-properties "- No suggestion" remem-sim-breakdown-field-start-number old-point props printfilter width string scope-marker remem-relevance-score remem-print-exact-relevance-p remem-relevance-plus-plus-threshold remem-relevance-plus-threshold remem-relevance-normal-threshold remem-print-even-bad-relevance-p remem-kind-of-query] 18] insert-char 10 1 t] 5 (#$ . 25442)]) (defalias 'remem-render-processed #[nil "\305\306 \210\307\310\211\311\312\f\"\210\311\313\314 !\"\210+\307\211\207" [inhibit-read-only scope-marker overall unique-lines remem-scopes t erase-buffer nil 0 mapcar #[(scope) "\306\211\307!\310!G\310!\306=\203\311\202!\306\f W\205\210 \nY\203F\fTT\312\313\"EB\202! \234;\203S T\202! \234S\234\314\315\"\235\204\202\fTT\316! \234BEB T\202! T\202!-\207" [scope processed available allotted used i 0 remem-scope-number-lines remem-scope-processed 1 format "%d No suggestion." mapcar #[(e) "@;\203\303\207\304 !\304\305\234!\232\204\303\207@\n\234\207" [e scope remem-docnum-field nil remem-scope-directory 1] 4] int-to-string scope-marker overall unique-lines remem-docnum-field] 6] #[(line) "\304\305A@! \"\211\204 \202\nA@\306\n\307\234#)\207" [line remem-format-alist format-for-line remem-format-default assoc remem-scope-directory remem-format-line 1] 6] reverse] 4]) #@128 looks for a double newline. Used to be used for finding end of a query result but now use remem-period-on-line-by-itself. (defalias 'remem-double-newline #[(string) "\304 GS\211\211\305V\2036 SH\306U\204 \307Z\211\202 H\306U\203/\310\305\211\202 S\211\202 +\207" [dn string len i nil 0 10 2 t] 3 (#$ . 28198)]) #@79 looks for a period on a line by itself. used to delimit end of query result. (defalias 'remem-period-on-line-by-itself #[(string) "\301\302\"\206 \301\303\"\207" [string string-match "\n\\.\n" "^.\n"] 3 (#$ . 28539)]) #@91 splits a delimited string into a list of fields eats the delimiter if eat (defalias 'remem-split-string #[(string split-char eat) "\306\307\310\211 GW\203/ \n\234\f=\203( \203\n\202!\nTOB\nT\nT\211\202 \310OB\311!+\207" [fields last-match i string split-char eat 1 0 nil reverse] 4 (#$ . 28767)]) #@45 Splits into lines and pipe-delimited fields (defalias 'remem-split-savant-output #[(string) "\301\302\303\304\305\306\307#\"\"\207" [string delete nil mapcar #[(s) "\301\230\206\302\230\206\303\230?\205\304\305\306#\207" [s "" "\n" "." remem-split-string 124 t] 4] remem-split-string 10 t] 8 (#$ . 29106)]) (defalias 'remem-sort-scope #[(&optional field scope) "\204 \n\204 @\306\n\307\310\n!\311\"\"\210\312 \210\f\205Ieb\210 \313\230\203.\314\315!\210\202G\316\317 \320Q\321\322#\203C\314\323\324`\"!\210\202G\314\315!\210\325 \207" [field remem-selection-field scope remem-scopes remem-selection-line remem-selection-line-contents remem-set-scope-processed sort remem-scope-processed #[(a b) " \234\n \234\231\207" [a field b] 3] remem-render-processed "" remem-selection-line-overlay-update 0 re-search-forward "^" "$" nil t count-lines 1 recenter] 5 nil nil]) (defalias 'remem-process-filter #[(process string) "\212\305\306 \307\n\203( \203( \310 @!=\203\" @\307\211\202 A\202\n?\205d\f\203=\311\312!\fP\"\210\202D\313\314\315!\"\210\316\312!!\205d\317\320\312!!\"\210\311\321\"\210\322 \210\323\307\"\210\324 ,\207" [scope scopes flag process string t remem-all-scopes nil remem-scope-proc remem-set-scope-raw remem-scope-raw message "Savant returned a nil response to query %s" remem-scope-query remem-period-on-line-by-itself remem-set-scope-processed remem-split-savant-output "" remem-render-processed remem-set-scope-in-progress force-mode-line-update] 6]) #@41 Local keymap for remem display buffers. (defvar remem-mode-map nil (#$ . 30630)) (byte-code "\2043\303 \304 !\210\n\203\305 \306\307#\210\305 \310\307#\210\2020\305 \311\312#\210\305 \313\307#\210\305 \314\307#\210 )\303\207" [remem-mode-map map running-xemacs make-keymap suppress-keymap define-key [button2] remem-mouse-popup [button3] [mouse-1] remem-mouse-select [down-mouse-2] [down-mouse-3]] 4) #@65 Local keymap for remem output buffer (*remem-document-output*). (defvar remem-output-mode-map nil (#$ . 31044)) (defalias 'remem-kill-output-buffer #[nil "\301!\207" [remem-document-buffer-name kill-buffer] 2]) (byte-code "\2048\302 \303 !\210\304 \305\306#\210\304 \307\310#\210\304 \311\312#\210\304 \313\314#\210\304 \315\316#\210\304 \317\320#\210\304 \321\322#\210 )\302\207" [remem-output-mode-map map make-keymap suppress-keymap define-key "1" remem-log-rating-1 "2" remem-log-rating-2 "3" remem-log-rating-3 "4" remem-log-rating-4 "5" remem-log-rating-5 " " scroll-up "d" remem-kill-output-buffer] 4) #@192 Leave the remem-display window if you're there. This is especially for XEmacs, 'cause I can't figure out how to keep it from putting the cursor in that buffer. Good sanity check too. (defalias 'remem-leave-remem-window #[nil "\302p!\211 \232\205\303\304 !)\207" [buf remem-buffer-name buffer-name select-window frame-first-window] 3 (#$ . 31665) nil]) (defalias 'remem-selection-line-overlay-update #[(&optional n) "\203 \203\305 !\207`\306\210 \204+\307\n`\"\310 \311\312#\210\310 \313\314#\210\2021\315 \n`#\210\n`{)\316 \207" [n remem-selection-line start remem-selection-line-overlay remem-selection-line-contents goto-line nil make-overlay overlay-put priority 2 face remem-hilite move-overlay remem-selection-field-overlay-update] 4]) (defalias 'remem-selection-field-overlay-update #[(&optional n) "\203\n\203q \203q\306V\203q\307\n!\210`\310\210\311 `\312 $\211\205o\313\f\312\"\211\2045\310\202n\204\\\314\f \"\315\316\317#\210\315\320\321#\210\322\323\f\312\"\323\f\324\"\325#\202n\326\f #\210\322\323\f\312\"\323\f\324\"\325#)*\207\n\205\207 \205\207\327U\205\207\330\331!\nT\"\207" [n remem-selection-field remem-selection-line start new-start new-end 2 goto-line nil text-property-any field next-single-property-change make-overlay overlay-put priority 1 face remem-hilite2 remem-query-on-field get-text-property orig-source mouse move-overlay 0 remem-retrieve-lineno get-buffer remem-selection-field-overlay remem-buffer-name] 6]) (defalias 'remem-selection-next-field #[nil "\205\302\303!\304\"\211\205\305\306\307 T\"!\210\310\311 \304\"!)\207" [remem-selection-field-overlay new-start next-single-property-change overlay-start field remem-selection-line-overlay-update count-lines 1 remem-selection-field-overlay-update get-text-property] 5 nil nil]) (defalias 'remem-selection-prev-field #[nil "\205\212\302\303!\304\"\211\205\305\306\307 \"!\210\310\311 S\304\"!*\207" [remem-selection-field-overlay new-end previous-single-property-change overlay-end field remem-selection-line-overlay-update count-lines 1 remem-selection-field-overlay-update get-text-property] 5 nil nil]) (defalias 'remem-mouse-select #[(event &optional clickcount) "\303!\211\203\304 !\202\305\211\2056\212\nq\210\306\307\310\311!\"!\210\312\311!\313\"\2033\314\312\311!\313\"!\210\315 )*\207" [event moused-window moused-buffer event-window window-buffer nil remem-selection-line-overlay-update count-lines 1 event-point get-text-property field remem-selection-field-overlay-update remem-leave-remem-window] 6 nil "e"]) (defalias 'remem-mouse-popup #[(event &optional clickcount) "\306!\211\203\307 !\202\310\211\205K\nq\210\311\312!\305\"\313!\310\2030\314 D\2028\315\316 \310BDD\f\211@\317\\\240\210\f\211A\320Z\241\210\321 \"+*\207" [event moused-window moused-buffer nice-list x-y keywords event-window window-buffer nil get-text-property event-point event-x-y "Keywords" "KEYWORDS" "BLAH" 20 50 x-popup-menu running-xemacs] 5 nil "e"]) (defalias 'remem-start-scope #[(directory number-lines update-time range) "\306 \n \307\211\211\310\307\211\310p\311\310\312\313\314\f!\315\316R!8&\317\320\307\314 !\321P\314\f!\315Q$\322!\210\323\324\"\210\325\"\210\n\311V\203S\326\327\330\n\331$\"\210Bp\235\204gpB*\207" [directory number-lines update-time range remem-database-dir remem-prog-dir vector nil "" 0 5 file-attributes expand-file-name "/" "/doclocs" start-process "remem" "/ra-retrieve" process-kill-without-query set-process-filter remem-process-filter remem-set-scope-proc remem-set-scope-timer run-at-time 1 remem-around-point savant new-scope remem-scopes remem-buffers] 21]) #@61 maps the add-scope-to-buffer function to the list of scopes (defalias 'map-start-scopes #[(scopes-list) "@\204 \303\202!\304\n @ A@ AA@ AAA@%\210\305A!)\207" [scopes-list current-scope remem-buffer-name nil remem-add-scope-to-buffer map-start-scopes] 6 (#$ . 35389)]) (defalias 'map-scope-percentages #[(scopes-list) "@\204 \304\202!\305 !\306\211\307 !!\306\n!\245!B B\310A!)\207" [scopes-list current-scope remem-total-scope-lines remem-scope-percentages nil remem-scope-proc float remem-scope-number-lines map-scope-percentages] 5]) (defalias 'remem-setup-buffer #[(buffer-name) "\306!\212 q\210\307\302!\210\310\311\312\310!\210\f\2037\313\305!\2037\313\314!\2037\315 \316\317\320!#\2037\315\f\316\317\320!#\210\316\321\316\211*\207" [buffer-name buffer truncate-lines mode-name running-xemacs scrollbar-width get-buffer-create make-local-variable t "Remembrance Agent" toggle-read-only boundp scrollbar-height set-specifier 0 get-buffer "*remem-display*" "" remem-selection-line remem-selection-line-contents remem-selection-field] 5]) (defalias 'remem-add-scope-to-buffer #[(buffer directory number-lines update-time range) "\306\307!!\2053\212\307!q\210\310 \n \f$\210\311\312!\210\n \\\211\313W\203'\313\202) T\314\315!\210\311\316!)\207" [buffer directory number-lines update-time range remem-total-scope-lines buffer-live-p get-buffer remem-start-scope toggle-read-only -1 4 insert-string "Reading Database...\n" t remem-display-buffer-height] 6]) (defalias 'remem-display-buffer #[(buffer-name) "p\306p!\212\n\203\307 \202\310\311\312 \313Z\"\314 !\315 !\316 \f\"\210\317 !\210\320\321 Z\311Z!\210\322 \323\"\210+\317!*\207" [orig-window orig-buffer running-xemacs buffer-name buffer w get-buffer-window frame-lowest-window window-at 1 frame-height 3 get-buffer-create split-window set-window-buffer select-window enlarge-window window-displayed-height set-window-dedicated-p t remem-display-buffer-height] 4]) (defalias 'remem-kill-scope #[(scope) "\306!\203\f\307\306!!\210 \203\307 !\210\310\311\312!!\313=\203'\314\312!\315\"\210\311\312!!\313=\2037\316\312!!\210\317\320!!\205o\212\320!q\210\321\310\"\210\322\n\" \323!Z\211\324W\203_\324\202` \n?\205n\322\320! \"\211)\207" [scope remem-global-timer remem-scopes remem-total-scope-lines remem-display-buffer-height remem-buffers remem-scope-timer remem-cancel-timer nil process-status remem-scope-proc run process-send-string "quit\n" delete-process buffer-live-p remem-scope-buffer remem-set-scope-in-progress delete remem-scope-number-lines 4] 4]) (defalias 'remem-map-kill #[(some-list) "\204\301\207\302@!\210\303A!\207" [some-list nil remem-kill-scope remem-map-kill] 2]) #@72 kills all the scopes by mapping remem-kill-scope on the list of scopes (defalias 'remem-kill-all-scopes #[nil "\302\303!!\205\212\303!q\210\304 \305\"\210\306 !)\207" [remem-buffer-name remem-scopes buffer-live-p get-buffer remem-log-checkpoint remem-killed remem-map-kill] 3 (#$ . 38118)]) (defalias 'remem-kill-buffer #[(buffer-name) "\302!\211\205 \212\303 !))\207" [buffer-name buffer get-buffer kill-buffer] 3]) #@68 Change the remembrance agent database to one of the preset indexes (defalias 'remem-change-database #[(scopename scopenum) "S \233@\n\240\210\305\306p! \"\204 \307 !\310 \306p!\fBC\")\311 \207" [scopenum remem-scopes-list scopename remem-buffname-db-alist new-scopes-list assoc buffer-name copy-alist append remem] 4 (#$ . 38548) (list (let* ((dirlist (directory-files remem-database-dir nil "[^.].*")) (scope-name-list (mapcar '(lambda (filename) (cons filename filename)) dirlist)) (dirprompt (mapconcat 'eval dirlist " ")) (val)) (setq val (completing-read (concat "Change to what database (" dirprompt "): ") scope-name-list 'consp t)) (cdr (assoc val scope-name-list))) (let ((rsl-len (length remem-scopes-list)) (val)) (cond ((> rsl-len 1) (setq val (string-to-number (read-string (concat "Enter scope number (1-" rsl-len "): "))))) (t (setq val 1))) val))]) (defalias 'remem-database-info-filter #[(proc string) "\302\303! P\"\207" [remem-working-scope string remem-set-scope-dbinfo remem-scope-dbinfo] 4]) #@40 Display version info for a given scope (defalias 'remem-display-database-info #[(scope) "\305!\306\307\310!\203\311\312!\210\310!\203\313\314!\210\202\315\307\"\210\212\316\n\317\"\210\320\n\321\"\210\322!G\323W\203A\313\324!\210\2021\325\321\322!\"\203V\315\326\307\327\211\322!$\"\210\325\330\322!\"\205n\315\326\307\327\211\322!$\"\210\202V+\207" [scope linestart proc remem-versionstring-temp remem-working-scope remem-scope-proc nil "" remem-scope-in-progress message "Waiting for previous query to finish... (hit ^G to abort)" sleep-for 0.2 remem-set-scope-dbinfo set-process-filter remem-database-info-filter process-send-string "info\n" remem-scope-dbinfo 22 0.05 string-match replace-match t "\n"] 8 (#$ . 39574)]) (defalias 'remem-set-database-info-for-scopes #[(all-scopes) "\205 \301@!\210\302A!\207" [all-scopes remem-display-database-info remem-set-database-info-for-scopes] 2]) (defalias 'remem-display-filter #[(proc string) "\212\303!q\210\304\305 !!b\210\306\307!\210\nc\210\305 !`\310\223\210\306\311!)\207" [remem-document-buffer-name proc string get-buffer-create marker-position-nonil process-mark toggle-read-only -1 nil t] 3]) #@74 Display the output for the relevant document displayed in the given line (defalias 'remem-display-line-copy #[(scope docnum &optional lineno) "\306!\307!\203\310\311!\210\307!\203\312\313!\210\202\310\314\n\"\210\n\203*\n\315W\2030\310\316!\202\341\204:\310\317!\202\341\320\321 !\210\322 !\210\323\324!\210\325 \210\323\326!\210\327 !`\330 !\223\210\331 \332\"\210\333 \334\335\n!\336Q\"\210eb\210\337\327 !!\340W\203z\312\341!\210\202i\342\210\343e`{!\342u\210\323\324!\210e`|\210\342\210e`{\342u\210e`|\210\337\327 !!\fW\203\255\312\344!\210\202\234\fb\210\345 \210\346\347!\210\n-\310\350!\210\351.!\210\337\327 !!/\312\352!\210/\337\327 !!W)\204\303\353\354!\210\323\326!)\207" [scope proc docnum remem-document-buffer-name doc-pos remem-last-followed-doctype remem-scope-proc remem-scope-in-progress message "Waiting for previous query to finish... (hit ^G to abort)" sleep-for 0.2 "Retrieving docnum %d" 1 "Improper docnum." "Improper scope." select-window frame-first-window switch-to-buffer toggle-read-only -1 erase-buffer t process-mark get-buffer set-process-filter remem-display-filter process-send-string "retrieve " int-to-string "\n" marker-position-nonil 22 0.05 nil string-to-int 0.001 beginning-of-line recenter 0 "Type number 1-5 to rate document: 1 = [Bad suggestion], 5 = [Great suggestion]" use-local-map 0.05 run-hooks remem-gotdoc-hook remem-last-followed-docnum remem-output-mode-map old-pos] 5 (#$ . 40763)]) #@69 Load the file for the relevant document displayed in the given line (defalias 'remem-display-line-original #[(scope docnum &optional lineno) "\306!\307!\203\310\311!\210\307!\203\312\313!\210\202\310\314\n\"\210\n\203*\n\315W\2030\310\316!\202\204:\310\317!\202\320\321 !\210\322 !\210\323\324!\210\325 \210\323\326!\210\327 !`\330 !\223\210\331 \332\"\210\333 \334\335\n!\336Q\"\210eb\210\337\327 !!\340W\203z\312\341!\210\202i\342\210\343e`{!\342u\210\323\324!\210e`|\210\342\210\343e`{!\342u\210e`|\210\342\210e`{5\342u\210e`|\210\342\210e`{6\344\345\fP\330\346!\"\210\344\347 P\330\346!\"\210\344\3505P\330\346!\"\210\351 !\210\3525!\2107\353\230\203\352\354\f\355\\!\210\202\355\fb\210\356 \210\357\360!\210\n8\310\3619\362Q!\210\363\364!\210\323\326!)\207" [scope proc docnum remem-document-buffer-name doc-pos-start doc-pos-end remem-scope-proc remem-scope-in-progress message "Waiting for previous query to finish... (hit ^G to abort)" sleep-for 0.2 "Retrieving docnum %d" 1 "Improper docnum." "Improper scope." select-window frame-first-window switch-to-buffer toggle-read-only -1 erase-buffer t process-mark get-buffer set-process-filter remem-display-filter process-send-string "loc-retrieve " int-to-string "\n" marker-position-nonil 22 0.05 nil string-to-int print "doc-pos-start: " "*remem-log*" "doc-pos-end: " "doc-loc: " bury-buffer find-file "rmail-mode" remem-rmail-goto-char 2 beginning-of-line recenter 0 "Rate document: " "r , where is from 1 [Bad suggestion] to 5 [Great suggestion]" run-hooks remem-gotdoc-hook doc-loc remem-last-followed-doctype major-mode remem-last-followed-docnum remem-command-prefix] 5 (#$ . 42234)]) (defalias 'remem-retrieve #[(&optional scop docn) "\212\206!\306`\302\"\206! \205!\307 @!\205! @q\205!\306`\302\" \206*\306`\304\"\306`\305\"\310\311`\" \n\203P\203I\312\n\f #\210\202P\313\n\f #\210-\314 \207" [scop remem-buffers scope docn docnum relevance get-text-property buffer-live-p count-lines 1 remem-display-line-original remem-display-line-copy remem-leave-remem-window lineno remem-load-original-suggestion] 4 nil nil]) (defalias 'remem-retrieve-lineno #[(buffer lineno) "\306!\205E\212q\210\307 !\210\310`\305\"\310`\304\"\310`\303\"\310`\302\"\211\205D\f\205D\n\205D \205D\311 \312\"\210\313 \f\n %\210\314 \f\"-\207" [buffer lineno relevance sims-breakdown docnum scope buffer-live-p goto-line get-text-property remem-log-checkpoint retrieval remem-log-suggestion-followed remem-retrieve remem-scopes] 7]) (defalias 'remem-display-line-1 #[(&optional args) "\301\302!\303\"\207" [remem-buffer-name remem-retrieve-lineno get-buffer 1] 3 nil "P"]) (defalias 'remem-display-line-2 #[(&optional args) "\301\302!\303\"\207" [remem-buffer-name remem-retrieve-lineno get-buffer 2] 3 nil "P"]) (defalias 'remem-display-line-3 #[(&optional args) "\301\302!\303\"\207" [remem-buffer-name remem-retrieve-lineno get-buffer 3] 3 nil "P"]) (defalias 'remem-display-line-4 #[(&optional args) "\301\302!\303\"\207" [remem-buffer-name remem-retrieve-lineno get-buffer 4] 3 nil "P"]) (defalias 'remem-display-line-5 #[(&optional args) "\301\302!\303\"\207" [remem-buffer-name remem-retrieve-lineno get-buffer 5] 3 nil "P"]) (defalias 'remem-display-line-6 #[(&optional args) "\301\302!\303\"\207" [remem-buffer-name remem-retrieve-lineno get-buffer 6] 3 nil "P"]) (defalias 'remem-display-line-7 #[(&optional args) "\301\302!\303\"\207" [remem-buffer-name remem-retrieve-lineno get-buffer 7] 3 nil "P"]) (defalias 'remem-display-line-8 #[(&optional args) "\301\302!\303\"\207" [remem-buffer-name remem-retrieve-lineno get-buffer 8] 3 nil "P"]) (defalias 'remem-display-line-9 #[(&optional args) "\301\302!\303\"\207" [remem-buffer-name remem-retrieve-lineno get-buffer 9] 3 nil "P"]) (defalias 'remem-display-other #[(lineno) "\302\303! \"\207" [remem-buffer-name lineno remem-retrieve-lineno get-buffer] 3 nil "nLine Number:"]) (defalias 'remem-log-rating-1 #[(&optional args) "\300\301!\207" [remem-log-rating 1] 2 nil "P"]) (defalias 'remem-log-rating-2 #[(&optional args) "\300\301!\207" [remem-log-rating 2] 2 nil "P"]) (defalias 'remem-log-rating-3 #[(&optional args) "\300\301!\207" [remem-log-rating 3] 2 nil "P"]) (defalias 'remem-log-rating-4 #[(&optional args) "\300\301!\207" [remem-log-rating 4] 2 nil "P"]) (defalias 'remem-log-rating-5 #[(&optional args) "\300\301!\207" [remem-log-rating 5] 2 nil "P"]) #@151 Makes sure that Remem dies when the buffer is gone, and respawns when window is no longer visible. This is because of that stupid resize-windows bug (defalias 'remem-fix-window-loss #[nil "\302\303\304\"!?\205\305!\203\306!\207\307 !\210\310 \207" [remem-buffer-name remem-global-timer window-live-p get-buffer-window t get-buffer remem-display-buffer remem-cancel-timer kill-remem] 4 (#$ . 46698)]) #@126 If any of the index files we're looking at are newer than they were when we started up their processes, restart ra-retrieve. (defalias 'remem-restart-on-outdated-index #[(scope) "\306\307\310!\311\312 !\313R!8\314 !\n  \n\232\204'\315 \210\316\317!\210\320\202(\321*\207" [remem-database-dir scope old-modtime new-modtime remem-debug-old-modtime remem-debug-new-modtime 5 file-attributes expand-file-name "/" remem-scope-directory "/doclocs" remem-scope-dbmodtime remem message "Remem index files have been updated... restarting." t nil] 6 (#$ . 47113)]) #@56 starts the processes. essentially a bundling function (defalias 'start-remem #[nil "\212\203 \306\307!\202\245\310\311 !\312P!\204 \306\313\311 !\312Q!\202\245\310\311\n!\314P!\2044\306\315\311\n!P!\202\245\316\317\320\f\"\210 )\206\245\321\322 !\210\323\324\f!!\210\212\325 !q\210\326@!\210\327@\330\"\210\331@!\210\332@!\210A\203s\333\334!\210\335\336B!\210)\337 !\210\316C\340\341\342\343#D\344\345!E\346\345\347\"\210\346F\350P\351\"\210\346F\352P\353\"\210\346F\354P\355\"\210\346F\356P\357\"\210\346F\360P\361\"\210\346F\362P\363\"\210\346F\364P\365\"\210\346F\366P\367\"\210\346F\370P\371\"\210\346F\372P\373\"\210\346F\374P\375\"\210\346F\376P\377\"\210\346F\201HP\201I\"\210\346F\201JP\201K\"\210G\203Q\346\201L\363\"\210\346\201M\365\"\210\346\201N\367\"\210\346\201O\371\"\210\346\201P\373\"\210\346\201Q\375\"\210\346\201R\377\"\210\346\201S\201I\"\210\346\201T\201K\"\210\201UF\201VP!\210\346F\201WP\201X\"\210\346F\201YP\201Z\"\210\346F\201[P\201\\\"\210\346F\201]P\201^\"\210\346F\201_P\201`\"\210\201a\201b!\210\306\201c!)\207" [remem-display-running remem-prog-dir remem-database-dir notfound remem-scopes-list remem-buffer-name message "Remembrance Agent already running" file-exists-p expand-file-name "/ra-retrieve" "Cannot find program file: " "/" "Cannot find index directory: " nil mapcar #[(scopeinfo) "\303\304!\305 @Q!?\205\306\307\304!\305 @R!\210\310\211\207" [remem-database-dir scopeinfo notfound file-exists-p expand-file-name "/" message "Cannot find index-file subdirectory: " t] 5] t remem-setup-buffer map-start-scopes reverse get-buffer-create map-scope-percentages remem-log-checkpoint remem-started remem-set-database-info-for-scopes remem-log-dbinfo make-local-hook mouse-track-click-hook remem-mouse-select use-local-map remem-display-buffer run-at-time 5 3 remem-fix-window-loss global-key-binding "1" global-set-key remem-delete-other-windows "v" remem-query-now "n" remem-display-other "f" remem-grab-query "d" remem-change-database "q" remem-create-query-page "1" remem-display-line-1 "2" remem-display-line-2 "3" remem-display-line-3 "4" remem-display-line-4 "5" remem-display-line-5 "6" remem-display-line-6 "7" remem-display-line-7 remem-scopes running-xemacs remem-mode-map remem-hide-display remem-global-timer remem-old-C-x1 remem-command-prefix remem-non-r-number-keys "8" remem-display-line-8 "9" remem-display-line-9 "1" "2" "3" "4" "5" "6" "7" "8" "9" global-unset-key "r" "r1" remem-log-rating-1 "r2" remem-log-rating-2 "r3" remem-log-rating-3 "r4" remem-log-rating-4 "r5" remem-log-rating-5 run-hooks remem-start-hook "Remembrance Agent started"] 4 (#$ . 47681)]) #@50 kills all the processes, closes the remem-buffer (defalias 'kill-remem #[nil "\212\205\310\306\307 \210\310\310 \204\311\f\312\"\306=\204\313\f!\210\314\f!\210\315\316 \"\210\317+\320P!\210\317+\321P!\210\317+\322P!\210\317+\323P!\210\317+\324P!\210\317+\322P!\210\317+\320P!\210\317+\325P!\210\317+\326P!\210\317+\327P!\210\317+\330P!\210\317+\331P!\210\317+\332P!\210\317+\333P!\210\317+\334P!\210\317+\335P!\210,\203\301\317\336!\210\317\337!\210\317\340!\210\317\341!\210\317\342!\210\317\343!\210\317\344!\210\317\345!\210\317\346!\210\347\350!\210\351\352!)\207" [remem-display-running remem-display-buffer-height remem-total-scope-lines remem-hide-display remem-buffer-name remem-old-C-x1 nil remem-kill-all-scopes 0 get-buffer-window t remem-delete-window remem-kill-buffer global-set-key "1" global-unset-key "v" "n" "f" "d" "q" "1" "2" "3" "4" "5" "6" "7" "8" "9" "1" "2" "3" "4" "5" "6" "7" "8" "9" run-hooks remem-start-hook message "Remembrance Agent stopped" remem-command-prefix remem-non-r-number-keys] 3 (#$ . 50397)]) (defalias 'remem-hide-display #[nil "\212\203 \203\303\304!\202!\305\306\307\310\n!!!\210\311 \202!\303\312!)\207" [remem-display-running remem-hide-display remem-buffer-name message "Remembrance display already hidden" t select-window get-buffer-window get-buffer delete-window "Remembrance Agent not running"] 4]) (defalias 'remem-show-display #[nil "\212\203 \203\303\n!\210\304\211\202\305\306!\202\305\307!)\207" [remem-display-running remem-hide-display remem-buffer-name remem-display-buffer nil message "Remembrance display not hidden" "Remembrance Agent not running"] 2]) (defalias 'remem-toggle #[nil "\302 \212 \203\303 \210\202 \204\304 \210)\305!)\207" [w remem-display-running selected-window kill-remem start-remem select-window] 2 nil nil]) #@75 Start the remembrance agent. If already running, kill it and restart it. (defalias 'remem #[nil "\302 \212 \203\303 \210\304\305!\210\306 \210\202 \204\306 \210)\307!)\207" [w remem-display-running selected-window kill-remem sleep-for 1 start-remem select-window] 2 (#$ . 52259) nil]) #@85 Replacement for the C-xo key binding that takes the cursor remem-display window (defalias 'remem-other-window #[(&rest args) "\305 \306\307\"\310\305 \311\"\312\n =\203\313\314!\202\313\311!,\207" [remem-buffer-name w nw rw sw selected-window get-buffer-window t next-window 1 nil other-window 2] 5 (#$ . 52559) nil]) (defalias 'remem-delete-window #[(buffer-name) "\302!\212\303\304 \305\"!\210\306 *\207" [buffer-name buffer get-buffer select-window get-buffer-window t delete-window] 4]) #@84 Replacement for delete-other-windows that won't delete the *remem-buffer* window. (defalias 'remem-delete-other-windows #[(&rest args) "\306 \307!\310\306 \311\"\312 \203O\f =\203&\313\311!\210\306 \310\306 \311\"\n\f=\204F\n\310\n\311\" =\204& \f=\204&\314 !\210\202&\315\316 \317Q!\202Q\320 ,\207" [remem-buffer-name w nw rw sw remem-command-prefix selected-window get-buffer-window next-window 1 nil other-window delete-window message "Use " "t to quit the Remembrance Agent" delete-other-windows] 5 (#$ . 53071) nil]) (defalias 'remem-rmail-what-message-at-point #[(n) "\306 \211\307\245 \fZ\306V\203, \310\n!Y\203\n\202!\n\f \fZ\307\245\\\202\n \310 !Y\2038 \2029\f,\207" [n rmail-total-messages mid high low where 1 2 rmail-msgbeg] 5]) #@56 Jump to a given global char number in an rmail message (defalias 'remem-rmail-goto-char #[(n) "\301\302!!\210b\207" [n rmail-show-message remem-rmail-what-message-at-point] 3 (#$ . 53852) "nChar: "]) #@30 Append string to the logfile (defalias 'remem-log-string #[(string) "\205\303\304 \305 Q\306\n\307\310%\207" [remem-log-p string remem-logfile write-region current-time-string " -- " nil t 1] 6 (#$ . 54060)]) (defalias 'remem-log-suggestion-followed #[(scope docnum relevance-and-line lineno sims-breakdown) "\306!\307! \310\311O\312 \313\314O!\315\316\317 \f\n &!,\207" [scope relevance-and-line scopeline relevance scopename numlines remem-scope-number-lines remem-scope-directory 4 8 string-to-number 0 3 remem-log-string format "Followed: %d, %s, %s, %d, %d, %s, %s\n" docnum remem-kind-of-query sims-breakdown] 10]) (defalias 'remem-log-checkpoint-scope #[(scope why-check) "\306!\307!\310!\311!\312\313\314\f\n &!\210\315\316\",\207" [scope numlines scopename update-period num-queries why-check remem-scope-querycounter remem-scope-update-time remem-scope-directory remem-scope-number-lines remem-log-string format "Checkpoint: %d, %s, %d, %d, %s\n" remem-set-scope-querycounter 0] 8]) (defalias 'remem-log-checkpoint #[(scopes-left why-check) "\205\302@ \"\210\303A \"\207" [scopes-left why-check remem-log-checkpoint-scope remem-log-checkpoint] 3]) (defalias 'remem-log-dbinfo-scope #[(scope) "\303!\304!\305\306\307 \n#!*\207" [scope dbinfo scopename remem-scope-directory remem-scope-dbinfo remem-log-string format "%s, %s\n"] 5]) (defalias 'remem-log-dbinfo #[(scopes-left) "\205 \301@!\210\302A!\207" [scopes-left remem-log-dbinfo-scope remem-log-dbinfo] 2]) (defalias 'remem-log-rating #[(rating) "\203Y\304\305\306 \n %!\210 \307=\203\310\305\311!!\210\202` \312=\203,\310\305\313!!\210\202` \314=\203;\310\305\315!!\210\202` \316=\203J\310\305\317!!\210\202` \320=\203`\310\305\321!!\210\202`\310\305\322 \"!\210\323\323\323\211\207" [remem-last-followed-docnum rating remem-last-followed-doctype remem-last-query-mode remem-log-string format "Rating: %d, %d, %s, %s\n" 1 message "Document rated: 1 [Bad suggestion]" 2 "Document rated: 2 [So-so suggestion]" 3 "Document rated: 3 [OK suggestion]" 4 "Document rated: 4 [Good suggestion]" 5 "Document rated: 5 [Great suggestion]" "No document to rate or document already rated" nil] 7]) ;remem.el -- implements emacs front-end for the remembrance agent ; ;All code included in versions up to and including 2.09: ; Copyright (C) 2001 Massachusetts Institute of Technology. ; ;All modifications subsequent to version 2.09 are copyright Bradley ;Rhodes or their respective authors. ; ;Developed by Bradley Rhodes at the Media Laboratory, MIT, Cambridge, ;Massachusetts, with support from British Telecom and Merrill Lynch. ; ;This program is free software; you can redistribute it and/or modify ;it under the terms of the GNU General Public License as published by ;the Free Software Foundation; either version 2 of the License, or (at ;your option) any later version. For commercial licensing under other ;terms, please consult the MIT Technology Licensing Office. ; ;This program may be subject to the following US and/or foreign ;patents (pending): "Method and Apparatus for Automated, ;Context-Dependent Retrieval of Information," MIT Case No. 7870TS. If ;any of these patents are granted, royalty-free license to use this ;and derivative programs under the GNU General Public License are ;hereby granted. ; ;This program is distributed in the hope that it will be useful, but ;WITHOUT ANY WARRANTY; without even the implied warranty of ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;General Public License for more details. ; ;You should have received a copy of the GNU General Public License ;along with this program; if not, write to the Free Software ;Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ;USA. ;; Version info: ;; Num Date Who Comments ;; ------ -------- ----------------------- ----------------- ;; 2.10 3/15/01 rhodes@alum.mit.edu Fixed clobbering of C-xo bug that I introduced in ;; 2.09, plus fixed remem-query-extra-string-previous ;; bug (should be remem-query-extra-text-string-previous) ;; Thanks to Keith Amidon for these fixes. ;; 2.09 1/15/01 rhodes@alum.mit.edu Added stuff that lets other programs customize remem ;; (e.g. jimminy). This includes remem-start-hook, remem-stop-hook, ;; remem-query-oneshot-preamble-string, remem-query-preamble-string ;; Added check for whether scrollbar-width is defined in XEmacs. ;; Changed to GPL licence. ;; 2.08 2/29/00 rhodes@media.mit.edu Made *remem-document-output* read-only, added ;; major-mode and retrieved document type to rating log. ;; Toggling remem off and on while banging on the keys ;; used to cause emacs to wedge, presubably because of sit-for ;; instead of sleep-for. Fixed that (I think). ;; Finally, it now defaults to printing hash marks for how ;; relevant a hit is, rather than the numbers. Also can set it ;; to not show hits below a certain threshold. Added the ;; remem-mode-db-alist change database based on major mode. ;; Added better multi-frame support (only put *remem-display* in ;; one of them). Moved "C-cr" prefix to a customizable parameter. ;; 2.07 9/25/99 rhodes@media.mit.edu Added help function C-crh, fixed(?) it so getting rid of ;; remem window respawns it, while getting rid of buffer kills it. ;; Pop to *remem-display* after a field-query, so it won't update ;; on you while you're looking. Also added check for updated ;; index files -- restart ra-retrieve if the index files ;; have been modified. ;; 2.06 9/2/99 rhodes@media.mit.edu Sanity check for database subdir existing ;; Added remem-change-database, fixed remem-grab-query ;; for xemacs, added timestamping for logs, ;; added a full-page query mode, changed all the quick-keys ;; to start in C-cr, fixed "not leaving remem buffer" bug ;; 2.05 7/19/99 rhodes@media.mit.edu Fixed mouse left-click for Xemacs, added template type ;; output for savant, made a better date print format, ;; added the filename to the default output format, and ;; now allow a per-scope formatting through remem-format-alist ;; 2.04 6/16/99 rhodes@media.mit.edu Added a "require timer" and "remem-grab-query" (C-cf) ;; 2.03 5/20/99 rhodes@media.mit.edu Added some sanity checks ;; 2.02 4/8/99 rhodes@media.mit.edu Added logging ;; 2.01 3/10/99 rhodes@media.mit.edu Got rid of stupid "require jimminy" that broke it, ;; fixed it for xemacs, and got rid of remem-mouse.el ;; 2.00 3/6/99 rhodes@media.mit.edu Release 2.00 (provide 'remem) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; CUSTOMIZATIONS ;; These variables can (and probably should) be overridden for each user ;; in their own .emacs file, or in a remem-custom.el file which gets loaded ;; after remem.el does. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Required Customizations: ;; You must set remem-prog-dir, remem-database-dir, and remem-scopes-list. ;; The defaults given are probably not correct for your individual databases ;; and scopes. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;; ;; This is the directory where savant is located (fully expanded) (defvar remem-prog-dir (expand-file-name "/usr/local/bin") "This is the directory where savant is located (fully expanded)") ;;;;;;;;;;;;;;;; ;; This is the base directory containing all of the database directories (fully expanded) ;; NOTE: This is a directory containing *directories*, which in turn contain index files. (defvar remem-database-dir (expand-file-name "~/RA-indexes") "This is the base directory containing all of the database directories (fully expanded)") ;;;;;;;;;;;;;;;; ;; The scopes list... This is a list in the form: ;; ;; (scope1 scope2 scope3 ...) ;; ;; Where scope is of the form: ;; ;; (DIRN NUM-LINES UPDATE-TIME QUERY-RANGE) ;; ;; DIRN is the subdirectory of remem-database-dir with the desired database ;; This is the name of a sub-directory in remem-database-dir ;; NUM-LINES is the number of lines that you want the scope to return (initially) ;; UPDATE-TIME is the time between scope updates (in seconds) ;; QUERY-RANGE number of lines around point that you want the scope to query on (defvar remem-scopes-list '(("mail" 6 5 500) ("notes" 2 5 500)) "The list of scopes, where each scope is (DIRN NUM-LINES UPDATE-TIME QUERY-RANGE)") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Optional Customizations: ;; remem-log-original-suggestion, remem-terminal-mode, remem-logging-p, ;; remem-use-major-mode-templates, remem-non-r-number-keys and the font ;; customizations are set to reasonable defaults but can be overridden to fit ;; your tastes. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;; ;; Whether or not to retrieve the original document or to make a copy for viewing ;; Useful for email-style files (narrowed), and when you want to subsequently edit ;; the suggested file (defvar remem-load-original-suggestion nil "When seeing an entire suggestion, just go to the file rather than a copy") ;;;;;;;;;;;;;;;; ;; Turns on logging. The default log-file is ~/.remem-log-file (defvar remem-log-p t "If t, log when suggestions are followed to remem-logfile") (defvar remem-logfile (expand-file-name "~/.remem-log-file") "File where remembrance agent info gets logged") ;;;;;;;;;;;;;;;; ;; Set to t if you want to use the major-mode variable to automatically parse ;; fields from your document, based on the template structure defined in ;; Savant. (defvar remem-use-major-mode-templates t "If t, send major-mode info to Savant to help templates") ;;;;;;;;;;;;;;;; ;; Set remem-non-r-number-keys to t if you want C-c1 through C-c9 to bring up ;; a suggestion. These keys are already set to C-cr1 through C-cr9, but this ;; saves a keystroke. (defvar remem-non-r-number-keys nil "If t, set C-c1 through C-c9 to bring up suggestions just like C-cr1 through C-cr9 do now") ;;;;;;;;;;;;;;;; ;; Set remem-terminal-mode to t if you want the keywords to show up on the ;; screen rather than on mouse-click. Otherwise, set to nil. ;; Actually, I take it back. This option is like the "close door" button on ;; the elevator. You can play with it, but in reality it doesn't do a darned thing. (defvar remem-terminal-mode t "Set to t if you want keywords shown. Not implemented right now.") ;;;;;;;;;;;;;;;; ;; Set remem-print-exact-relevance-p to t if you want numbers instead of plus signs ;; for the relevance score. (defvar remem-print-exact-relevance-p nil) ;;;;;;;;;;;;;;;; ;; Set remem-print-even-bad-relevance-p to t if you want all suggestions shown, ;; regardless of how bad the relevance. (defvar remem-print-even-bad-relevance-p nil) ;;;;;;;;;;;;;;;; ;; Set remem-print-exact-relevance-p to t if you want numbers instead of plus signs ;; for the relevance score. (defvar remem-relevance-plus-plus-threshold 40) ;; Relevance score to get a "++" rating (defvar remem-relevance-plus-threshold 30) ;; Relevance score to get a "+" rating (defvar remem-relevance-normal-threshold 10) ;; Relevance score minimum before getting a "-" rating, ;; or no suggestion if remem-print-even-bad-relevance-p = nil ;;The Prefix used for RA commands. Default is control-c r (defvar remem-command-prefix "\C-cr") ;;;;;;;;;;;;;;;; ;; Keys We want to start with before running the RA (global-set-key (concat remem-command-prefix "t") 'remem-toggle) (global-set-key (concat remem-command-prefix "h") 'remem-create-help-page) ;;;;;;;;;;;;;;;; ;; Mode aware changing ;; These three variables let you automatically change mode based on the *major-mode* ;; variable. For example, you could set them to these values: ;; (setq remem-mode-aware-changing t) ;; (setq remem-mode-db-alist (list (cons 'mail-mode (("mail" 5 10 500))) ;; (cons 'rmail-mode (("mail" 5 10 500))) ;; (cons 'latex-mode (("inspec" 5 10 500))))) ;; (setq remem-buffname-db-alist (list (cons "my-diary" (("daily-notes" 5 10 500))) ;; (cons "my-homework" (("code" 5 10 500))))) ;; ;; The first value turns on mode-aware database selection. ;; The second specifies that when you visit a mail-mode or rmail-mode buffer, switch to the ;; "mail" database with the specified number of lines, seconds between updates and ;; number of words looked at. In latex-mode it switches to the "inspec" database. ;; Any other mode doesn't change. ;; The third line is for buffer-specific changes. Here, the buffer named "my-dairy" gets ;; "daily-notes" regardless of mode, and "my-homework" gets the database named "code". ;; If you change databases in a specific buffer, your new selection becomes sticky for ;; the rest of the session. ;; ;; Now that wasn't so bad, was it? (defvar remem-mode-aware-changing nil) (defvar remem-buffname-db-alist nil) ;;; Set in user customization if used (defvar remem-mode-db-alist nil) ;;; Set in user customization if used ;;;;;;;;;;;;;;;; ;; Font customizations. ;; Every odd column ;; Fonts ;; ;; These are the colour customizations ;; colour for every alternating column (make-empty-face 'remem-odd) (make-empty-face 'remem-even) (make-empty-face 'remem-hilite) ;; current line (make-empty-face 'remem-hilite2) ;; current field (make-empty-face 'remem-odd-scope) (make-empty-face 'remem-even-scope) (cond ((and (boundp 'hilit-background-mode) (equal hilit-background-mode 'dark)) (set-face-foreground 'remem-odd "Thistle") (set-face-foreground 'remem-even "MediumSeaGreen") ;; Every even column (set-face-foreground 'remem-odd-scope "Goldenrod") ;; Every odd scope (numbers) (set-face-foreground 'remem-even-scope "CornflowerBlue") ;; Every even scope (numbers) (set-face-foreground 'remem-hilite2 "OrangeRed") ;; Selected line (set-face-foreground 'remem-hilite "Aquamarine") ;; Current line (on mouse-over) ;; (set-face-font 'remem-hilite "-misc-fixed-bold-r-normal--15-140-75-75-c-90-iso8859-1") ) (t ; (set-face-foreground 'remem-odd "ForestGreen") (set-face-foreground 'remem-odd "Black") (set-face-foreground 'remem-even "MediumBlue") ;; Every even column (set-face-foreground 'remem-odd-scope "Blue") ;; Every odd scope (numbers) (set-face-foreground 'remem-even-scope "DarkSlateGray") ;; Every even scope (numbers) (set-face-foreground 'remem-hilite2 "Red") ;; Selected line (set-face-foreground 'remem-hilite "Red") ;; Current line (on mouse-over) )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; END OF CUSTOMIZATIONS ;; Beyond this point you're in the bowels of the ;; code and you're on your own :) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)) ;; xemacs hacks (cond (running-xemacs (require 'itimer) (defun event-x-y (event) (cons (event-x event) (event-y event))) (defun run-at-time (time repeat function &rest args) (apply 'start-itimer "remem-timer" function time repeat nil t args)) (defun remem-cancel-timer (timer) (cond (timer (delete-itimer timer)))) (defun x-popup-menu (event list) (popup-menu list event)) (defun frame-first-window (&rest args) (frame-highest-window args)) ; (defun sit-for-nodist (seconds) ; (sit-for seconds t)) (defun marker-position-nonil (marker) (let ((mark (marker-position marker))) (cond (mark mark) (t 0)))) (require 'overlay)) (t (require 'timer) (defvar scrollbar-width) ;; To shut the compiler up (defvar scrollbar-height) ;; To shut the compiler up (defvar mouse-track-click-hook) ;; To shut the compiler up (defun remem-cancel-timer (timer) (cancel-timer timer)) (defun marker-position-nonil (marker) (let ((mark (marker-position marker))) (cond (mark mark) (t 0)))) (defun window-displayed-height (&optional window) (- (window-height window) 1)) ; (defun sit-for-nodist (seconds) ; (sit-for seconds 0 t)) (defun event-x-y (event) (posn-x-y (event-end event))) (defun event-window (event) (posn-window (event-end event))) (defun event-point (event) (posn-point (event-end event))))) ;;; -------------- ;;; GLOBAL OPTIONS ;;; -------------- ;; Other customizations ;; I've not tested remem-hide-display in awhile -- It might not work. (defvar remem-hide-display nil "If t, don't display the remem window (but keep updating it anyway)") (setq remem-hide-display nil) ;; I've not tested remem-autojump-suggestion in awhile -- It might not work. (defvar remem-autojump-suggestion nil "If a value, jump automatically to that lineno when it's updated") (setq remem-autojump-suggestion nil) (defvar remem-keyword-field-start-number 28 "Field where most relevant keywords are kept") (defvar remem-sim-breakdown-field-start-number 29 "Field where field similarity breakdown is kept") (defvar remem-query-preamble-string "" "String that gets catenated before every Savant query command. Change this to give special commands like setting biases and using hand-set biases.") (defvar remem-query-preamble-string-previous "" "Previous value of remem-query-preamble-string, used to keep track of when a query changes") (defvar remem-query-oneshot-preamble-string "" "Like remem-query-preamble-string, but gets reset to the empty string after every query.") (defvar remem-query-extra-text-string "" "String that gets catenated just before the query text (after the query command).") (defvar remem-query-extra-text-string-previous "" "Previous value of remem-query-extra-text-string, used to keep track of when a query changes") (defvar remem-query-oneshot-extra-text-string "" "Like remem-query-extra-text-string, but gets reset to the empty string after every query.") ;;; --------------------- ;;; DEFAULT LOCAL OPTIONS ;;; --------------------- (defvar remem-format-default '((0 2 (field 0 mouse-face remem-hilite2) nil) ; Number (1 2 (face remem-even field 1) nil) ; sim (9 12 (face remem-odd field 9 mouse-face remem-hilite) nil) ; person (8 30 (face remem-even field 8 mouse-face remem-hilite) nil) ; subject (5 8 (face remem-odd field 5 mouse-face remem-hilite) remem-date-print-filter) ; date (27 13 (face remem-even field 4 mouse-face remem-hilite) nil) ; filename ; (4 10 (face remem-even field 4 mouse-face remem-hilite) nil) ; location (28 50 (face remem-odd field 28 mouse-face remem-hilite) nil))); keywords (defvar remem-format-nokeys ;field-number field-width field-text-properties print-filter-function '((0 2 (field 0 mouse-face remem-hilite2) nil) ; Number (1 2 (face remem-even field 1) nil) ; sim (9 12 (face remem-odd field 9 mouse-face remem-hilite) nil) ; person (8 30 (face remem-even field 8 mouse-face remem-hilite) nil) ; subject (5 8 (face remem-odd field 5 mouse-face remem-hilite) remem-date-print-filter) ; date (4 50 (face remem-even field 4 mouse-face remem-hilite) nil))) ; location (defvar remem-format-inspec '((0 2 (field 0 mouse-face remem-hilite2) nil) ; Number (1 2 (face remem-even field 1) nil) ; sim (9 12 (face remem-odd field 9 mouse-face remem-hilite) nil) ; person (5 12 (face remem-even field 5 mouse-face remem-hilite) remem-date-print-filter) ; date (8 50 (face remem-odd field 8 mouse-face remem-hilite) nil) ; subject (28 50 (face remem-even field 28 mouse-face remem-hilite) nil))); keywords (defvar remem-format-jimminy '((0 2 (field 0 mouse-face remem-hilite2) nil) ; Number (1 2 (face remem-even field 1) nil) ; sim (9 12 (face remem-odd field 9 mouse-face remem-hilite) nil) ; person (8 24 (face remem-even field 8 mouse-face remem-hilite) nil) ; subject (5 8 (face remem-odd field 5 mouse-face remem-hilite) remem-date-print-filter) ; date (28 50 (face remem-even field 28 mouse-face remem-hilite) nil))); keywords (defvar remem-format remem-format-default) (defvar remem-format-mail remem-format-default) (defvar remem-format-alist nil) ;;; Set in user customization if used ;;format list for the keyword field (defvar remem-keyword-field '(28 40 (face remem-even field 28))) ;;If remem-mode-db-alist is t: ;; if buffname is in remem-buffname-db-alist, switch to scopes lists ;; elseif major-mode is in remem-mode-db-alist, switch to scopes lists ;; else don't change databases. ;; ;; current buffer is automatically added to remem-buffname-db-alist if remem-change-database is called. ;;; --------- ;;; INTERNALS ;;; --------- ;; Note: these are the fields that savant returns, with one exception: ;; since the line number that savant returns may not correspond with ;; the line number in the remem display (duplicate lines, multiple scopes ;; in the same buffer), lineno is tacked on by remem-render-processed ;; num-relevance contains the savant line number (as well as the relevance) ;; Also, we're labeling keywords as in the body for search purposes. ;; These are all used for doing searches on fields when they're clicked. (defvar remem-savant-field-names '(lineno num-relevance docnum "!BODY: " "!LOCATION: " "!DATE: " "!TIME: " "!DAY" "!SUBJECT: " "!PERSON: " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "!BODY:" )) ;; This is another helper list... to ensure that the interactive call asking for 1-5 returns a 1-5 in ;; the field choice (defvar remem-field-array '(("Body" . 3) ("Location" . 4) ("Date" . 5) ("Subject" . 8) ("Person" . 9) ("body" . 3) ("location" . 4) ("date" . 5) ("subject" . 8) ("person" . 9))) (defvar remem-total-scope-lines 0) (defvar remem-display-buffer-height 4) (defvar remem-docnum-field 2) ; the third (defvar remem-relevance-field 1) ; the second (defvar remem-waiting-for-query-return-timeout 10) (defvar remem-document-buffer-name "*remem-document-output*") (defvar remem-query-buffer-name "*remem-query*") (defvar remem-help-buffer-name "*remem-help*") (defvar remem-old-C-x1 nil) ; holds function bound to C-x-1 (defvar remem-old-C-xo nil) ; holds function bound to C-x-0 (defvar remem-kind-of-query nil) ; one of 'auto, 'mouse, 'manual-text, 'manual-page, 'manual-field, ; or 'bypass for what the last query was (defvar remem-versionstring-temp "") ; Temporary global storage for versionstring info (defvar remem-working-scope nil) ; Global storage for scope being worked on right now ;; Program Variables (defvar remem-buffer-name "*remem-display*" "The name of the remembrance display buffer.") (defvar remem-display-running nil "is the remem-display already running?") (defvar remem-scopes nil) (make-variable-buffer-local 'remem-scopes) ; each buffer has its own set of scopes (defvar remem-scope-percentages nil) (defvar remem-global-timer nil) (defvar remem-buffers nil) ; a list of all buffers containing remem scopes ;; this is necessary for the process filter ;; selection related (defvar remem-selection-line nil) (make-variable-buffer-local 'remem-selection-line) (defvar remem-selection-line-contents "") (make-variable-buffer-local 'remem-selection-line-contents) (defvar remem-selection-field nil) (make-variable-buffer-local 'remem-selection-field) (defvar remem-selection-line-overlay nil) (make-variable-buffer-local 'remem-selection-line-overlay) (defvar remem-selection-field-overlay nil) (make-variable-buffer-local 'remem-selection-field-overlay) (defvar remem-last-followed-docnum nil) ;; Docnum of document followed last ;;; ---------- ;;; SCOPE DATA ;;; ---------- ;; We keep the data about a remembrance agent together in ;; the scope data structure ; [dir, lines, update time, range, proc, history, query, processed, in progress?, ; timer, raw, buffer, querycounter, Database info, Database modtime] (defun remem-scope-directory (scope) (aref scope 0)) ; subdir of remem-database-dir (defun remem-scope-number-lines (scope) (aref scope 1)) ; number of lines to display for this scope (defun remem-scope-update-time (scope) ; how often to update (0 = never) (let ((ut (aref scope 2))) (cond ((eq ut 0) nil) (t ut)))) (defun remem-scope-range (scope) (aref scope 3)) ; how many words to look at (defun remem-scope-proc (scope) (aref scope 4)) ; the process running this agent (defun remem-scope-history (scope) (aref scope 5)) ; a list of past queries -- currently disabled since it grows without bound. (defun remem-scope-query (scope) (aref scope 6)) ; the current query -- also used to only initiate new queries (i.e. don't do anything when idle) (defun remem-scope-processed (scope) (aref scope 7)) ; the results of the last query (defun remem-scope-in-progress (scope) (aref scope 8)) ; is there a query in progress? How long until it times out? (defun remem-scope-timer (scope) (aref scope 9)) ; timer object for this scope (defun remem-scope-raw (scope) (aref scope 10)) ; the unprocessed results of the last query (defun remem-scope-buffer (scope) (aref scope 11)) ; the buffer which contains this scope (defun remem-scope-querycounter (scope) (aref scope 12)) ; number queries done in this scope since the last log checkpoint (defun remem-scope-dbinfo (scope) (aref scope 13)) ; info on the database queried in this scope (version # and num docs) (defun remem-scope-dbmodtime (scope) (aref scope 14)) ; modtime of the database queried in this scope (so we know to reset if it's been changed out from under us) (defun remem-set-scope-directory (scope value) (aset scope 0 value)) ; subdir of remem-database-dir (defun remem-set-scope-number-lines (scope value) (aset scope 1 value)) ; number of lines to display for this scope (defun remem-set-scope-update-time (scope value) (aset scope 2 value)) ; how often to update (0 = never) (defun remem-set-scope-range (scope value) (aset scope 3 value)) ; how many words to look at (defun remem-set-scope-proc (scope value) (aset scope 4 value)) ; the process running this agent (defun remem-set-scope-history (scope value) (aset scope 5 value)) ; a list of past queries -- currently disabled since it grows without bound. (defun remem-set-scope-query (scope value) (aset scope 6 value)) ; the current query -- also used to only initiate new queries (i.e. don't do anything when idle) (defun remem-set-scope-processed (scope value) (aset scope 7 value)) ; the results of the last query (defun remem-set-scope-in-progress (scope value) (aset scope 8 value)) ; is there a query in progress? How long until it times out? (defun remem-set-scope-timer (scope value) (aset scope 9 value)) ; timer object for this scope (defun remem-set-scope-raw (scope value) (aset scope 10 value)) ; the unprocessed results of the last query (defun remem-set-scope-buffer (scope value) (aset scope 11 value)) ; the buffer which contains this scope (defun remem-set-scope-querycounter (scope value) (aset scope 12 value)) ; number queries done in this scope since the last log checkpoint (defun remem-set-scope-dbinfo (scope value) (aset scope 13 value)) ; info on the database queried in this scope (version # and num docs) (defun remem-set-scope-dbmodtime (scope) (aset scope 14 value)) ; modtime of the database queried in this scope (so we know to reset if it's been changed out from under us) (defun remem-decrement-scope-in-progress (scope) (aset scope 8 (and (aref scope 8) (> (aref scope 8) 0) (- (aref scope 8) 1)))) ; if not nil or zero, subtract 1, else nil ;;; Debugging function ;;; (defun remem-break-here () nil) ;;; -------- ;;; QUERYING ;;; -------- ;;; all query functions should call this ; (defun remem-initiate-query (scope &optional query nomodep) ; (cond ((and (remem-scope-in-progress scope) ; (not (y-or-n-p ; "There is already a query in progress. Use this one instead? ")))) ; (t ;This was originally giving me the problem of destroying all minibuffer messages, so I ; ;blocked it out. ; ;(message nil) ; don't leave the y-or-n question hanging around ; (cond (query ; is there a new query here? then make a note of it ; (remem-set-scope-query scope query) ; ;;; (remem-set-scope-history scope (cons query (remem-scope-history scope))) ; )) ; (let ((query-text ; (concat ; "query " (format "%d" (+ 6 (* 2 (remem-scope-number-lines scope)))) "\n" ; (cond ((not nomodep) ; (concat "EMACS REMEMBRANCE QUERY MODE: " (format "%s" major-mode) "\n")) ; (t nil)) ; (remem-scope-query scope) "\n" ; "\004"))) ; (set-text-properties 0 (length query-text) nil query-text) ;; Get rid of emacsisms ; (if (get-buffer "*remem-log*") ; (print query-text (get-buffer "*remem-log*"))) ; (set-process-filter (remem-scope-proc scope) 'remem-process-filter) ; ; we may have set this to the display filter elsewhere ; (process-send-string (remem-scope-proc scope) ; query-text) ; (remem-set-scope-in-progress scope remem-waiting-for-query-return-timeout))))) ;;;Same thing as above without the yes or no questions and progress check (defun remem-initiate-query-nonverbose (scope &optional query use-modep use-preambles use-extra-text) (cond ((remem-restart-on-outdated-index scope)) (t (cond (query ; is there a new query here? then make a note of it (remem-set-scope-query scope query) (setq remem-query-extra-text-string-previous remem-query-extra-text-string) (setq remem-query-preamble-string-previous remem-query-preamble-string) ;; (remem-set-scope-history scope (cons query (remem-scope-history scope))) )) (let ((query-text (concat remem-query-oneshot-preamble-string remem-query-preamble-string "query " (format "%d" (+ 6 (* 2 (remem-scope-number-lines scope)))) "\n" (cond (use-modep (concat "EMACS REMEMBRANCE QUERY MODE: " (format "%s" major-mode) "\n"))) (cond (use-preambles remem-query-oneshot-extra-text-string)) (cond (use-extra-text remem-query-extra-text-string)) (remem-scope-query scope) "\n" "\004"))) (setq remem-last-query-mode (format "%s" major-mode)) (set-text-properties 0 (length query-text) nil query-text) ;; Get rid of emacsisms (if (get-buffer "*remem-log*") (print query-text (get-buffer "*remem-log*"))) (remem-set-scope-querycounter scope (+ (remem-scope-querycounter scope) 1)) ;; Count queries for logs (cond ((>= (remem-scope-querycounter scope) 25) (remem-log-checkpoint-scope scope 'at-25))) (set-process-filter (remem-scope-proc scope) 'remem-process-filter) ; we may have set this to the display filter elsewhere (process-send-string (remem-scope-proc scope) query-text) (remem-set-scope-in-progress scope remem-waiting-for-query-return-timeout)) (setq remem-query-oneshot-preamble-string "") (setq remem-query-oneshot-extra-text-string "")))) (defun remem-default-scope-list () "Returns the remem-scopes for the remem buffer that is currently defaulted" (or remem-scopes ; first one in the active buffer (and remem-buffers (buffer-live-p (car remem-buffers)) (save-excursion (set-buffer (car remem-buffers)) remem-scopes)))) (defun remem-default-scope () "Returns the scope that is currently defaulted" (let ((default-scopes (remem-default-scope-list))) (cond (default-scopes (car default-scopes)) nil))) (defun remem-all-scopes () "Return all scopes in all remem buffers" (apply 'append (mapcar '(lambda (buf) (cond ((buffer-live-p buf) (set-buffer buf) remem-scopes) ; a buffer local variable (t nil))) remem-buffers))) ;; run a query in the default scope ; (defun remem-query (query) ; (interactive "sQuery on text:") ;