;ELC ;;; Compiled ;;; in Emacs version 28.0.50 ;;; with all optimizations. (byte-code "\300\301!\210\300\302!\210\300\303!\210\300\304!\210\300\305!\210\300\306!\207" [require comint compile overlay ring ess-custom ess-utils] 2) #@12 [autoload] (autoload 'text-scale-mode "face-remap" '(#$ . 241) nil) (custom-declare-group 'ess-tracebug nil "Error navigation and debugging for ESS.\nCurrently only R is supported." :link '(emacs-library-link :tag "Source Lisp File" "ess-tracebug.el") :group 'ess) #@112 String to be displayed in mode-line alongside the process name. Indicates that ess-tracebug-mode is turned on. (defvar ess-tracebug-indicator " TB" (#$ . 513)) #@57 Keymap for the *R watch* buffer. \{ess-watch-mode-map} (defvar ess-watch-mode-map (byte-code "\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\304\323\324#\210\304\325\326#\210\304\327\326#\210\304\330\331#\210\304\332\333#\210\304\334\335#\210\304\336\337#\210\304\340\341#\210)\207" [map special-mode-map make-sparse-keymap set-keymap-parent define-key "?" ess-watch-help "k" ess-watch-kill "a" ess-watch-add "i" ess-watch-insert "e" ess-watch-edit-expression "r" ess-watch-rename "q" ess-watch-quit "u" ess-watch-move-up "U" ess-watch-move-down "d" "n" ess-watch-next-block "p" ess-watch-previous-block "" ess-watch-switch-process "" ess-switch-to-ESS "" ess-switch-to-end-of-ESS] 4) (#$ . 679)) (byte-code "\300\301\302\303\304\305\306\307&\210\300\310\302\311\304\312\306\313&\207" [custom-declare-variable ess-tracebug-prefix nil "*Key to be used as prefix for all `ess-tracebug' commands.\nSet this to a key cominbation you don't use often, like:\n\n (setq ess-tracebug-prefix \"\\M-t\")\n\nThe postfix keys are defined in `ess-tracebug-map':\n\\{ess-tracebug-map}" :type (choice (const nil) (string)) :group ess-tracebug ess-tracebug-search-path "List of directories to search for source files.\nElements should be directory names, not file names of directories." (choice (const :tag "Unset" nil) (repeat :tag "Directory list" (string :tag "Directory"))) ess-debug] 8) #@27 Name of the watch buffer. (defvar ess-watch-buffer "*R watch*" (#$ . 2176)) (byte-code "\300\301\302\303\304\305\306\307&\210\300\310\302\311\304\305\306\312&\210\300\313\314\315\304\305\306\316&\207" [custom-declare-variable ess-watch-height-threshold nil "Minimum height for splitting *R* window sensibly to make space for watch window.\nSee `split-height-threshold' for a detailed description.\n\nIf nil, the value of `split-height-threshold' is used." :group ess-debug :type (choice (const nil) (integer)) ess-watch-width-threshold "Minimum width for splitting *R* window sensibly to make space for watch window.\nSee `split-width-threshold' for a detailed description.\n\nIf nil, the value of `split-width-threshold' is used." (choice (const nil) (integer)) ess-watch-scale-amount -1 "The number of steps to scale the watch font down (up).\nEach step scales the height of the default face in the watch\nwindow by the variable `text-scale-mode-step' (a negative number\nof steps decreases the height by the same amount)" integer] 8) #@66 The overlay for currently selected block in the R watch buffer . (defvar ess-watch-current-block-overlay nil (#$ . 3222)) (byte-code "\300\301!\210\302\303\304\305\306\307\310\311&\210\302\312\313\314\306\307\310\315&\210\302\316\313\317\306\307\310\315&\210\320\321\322\"\207" [make-variable-buffer-local ess-watch-current-block-overlay custom-declare-variable ess-inject-source 'function-and-buffer "Control the source injection into evaluated code.\n\nIf t, always inject source reference.\nIf function, inject only for functions,\nIf function-and-buffer, inject for functions and whole buffer (the default),\nIf nil, never inject.\n\nWhen tracebug is active (the default), ESS instructs the\nsubprocess to keep the source code references.\n\nIf this variable is t, you won't be able to execute blocks which\ndon't form a valid R expression. That is, if your expression\nspreads multiple paragraphs, and you call\n\\[ess-eval-region-or-function-or-paragraph-and-step] on first\nparagraph, R will report an error." :group ess-tracebug :type (choice (const nil) (const function) (const function-and-buffer) (const t)) ess-tracebug-enter-hook nil "List of functions to call on entry to `ess-tracebug' mode.\nUse `add-hook' to insert append your functions to this list." hook ess-tracebug-exit-hook "List of functions to call on exit of `ess-tracebug' mode.\nUse `add-hook' to insert append your functions to this list." defvaralias ess-tracebug-map ess-dev-map] 8) #@278 This is used by to track source references in evaluation with source. For example, each time `ess-eval-function' is called the evaluated region is marked. When debugger enteres the code it desplayes this reference number. Ess-debug finds this number in the referenced buffer. (defvar ess--tracebug-eval-index 0 (#$ . 4699)) (defvar org-edit-src-beg-marker nil) #@277 Marker pointing to the src block currently being executed. This may also point to a call line or an inline code block. If multiple blocks are being executed (e.g., in chained execution through use of the :var header argument) this marker points to the outer-most code block. (defvar org-babel-current-src-block-location nil (#$ . 5068)) (defvar ess--srcrefs (make-hash-table :test 'equal :size 100)) #@277 Marker pointing to the beginning of original source code. If non-nil, tracebug will insert the source references based on this location instead of the current buffer. This is useful for applications, like org-babel, that call ess evaluation functions from temporary buffers. (defvar ess-tracebug-original-buffer-marker nil (#$ . 5476)) #@40 Return non-nil if tracebug is running. (defalias 'ess-tracebug-p #[nil "\300\301!\207" [ess-process-get tracebug] 2 (#$ . 5819)]) #@226 Saves a region to a temporary file in order to add source references. BEG and END delimit the region. Returns a string containing an inferior process command for loading the temporary file. This command conforms to VISIBLY. (defalias 'ess-make-source-refd-command #[(beg end visibly process) "\306\307!\310\n!\205\311\312!\210\313\n!\f\206 \20667\31489T9:b\210\315\314w\210`:;b\210\315\314x\210`;:8\316\317!\204\202\320\321\322\323 \316\324!\"!W\203\202\316\325!\314<\211=\203|=@<\326\"?\330\325?\316\325!B\"\210 \203\203\313?!\211@\242A>\204\330\342\343\344@D\"\210@A@B@\242A>\204\357\342\343\344@D\"\210\345@8C@\242A>\204\342\343\344@D\"\210\346@8D@\242A>\204\342\343\344@D\"\210\347@8E@\242A>\2044\342\343\344@D\"\210\350@8F@\242A>\204K\342\343\344@D\"\210\351@8G@\242A>\204b\342\343\344@D\"\210\352@8HB\210C\210D\210E\210F\210G\210H\210G.? \204\226\353?\3149\314EI#\210\202\314\353? 98EI#\210\353\336?! 98EI#\210\354 J\355\211KL\355M\356\216\357:;\3609$\210-\361N:;#O\362OP\355?$\206\364\363:;?\314\364%\210\365?P\355#.\207" [buffer-file-name filename proc-dir remote ess-tracebug-original-buffer-marker org-edit-src-beg-marker ess-get-process-variable default-directory file-remote-p require tramp tramp-dissect-file-name nil " \n" ess-process-get busy 1 float-time time-subtract current-time last-eval temp-source-files file-exists-p delete-file ess-process-put markerp marker-buffer marker-position expand-file-name make-temp-name file-name-nondirectory "unknown" "!" tramp-get-remote-tmpdir signal wrong-type-argument tramp-file-name 2 3 4 5 6 7 puthash buffer-modified-p t #[nil "?\205\301\302!\207" [#1=#:modified restore-buffer-modified-p nil] 2] put-text-property tb-index ess-process-buffer-substring ess-build-eval-command write-region silent ess-build-load-command org-babel-current-src-block-location orig-marker orig-beg ess--tracebug-eval-index beg end f --dolist-tail-- temporary-file-directory tmpfile v cl-struct-tramp-file-name-tags method user domain host port localname hop ess--srcrefs #1# buffer-undo-list inhibit-read-only inhibit-modification-hooks process string visibly] 7 (#$ . 5956)]) (defalias 'ess-process-buffer-substring #[(process start end) "\303\304 \n\"\"\207" [process start end ess--run-presend-hooks buffer-substring-no-properties] 5]) #@95 Send region to process adding source references as specified by `ess-inject-source' variable. (defalias 'ess-tracebug-send-region #[(process start end &optional visibly message type) "\306\267\202 \202 \307=\206 \310=\202 \307=\206\311 \211?\205% \n\2035\312\f $\202;\313\f #\314!\203L!\202N\307\315\316#\210\n?\205b\317$-\207" [type ess-inject-source inject-p ess--dbg-del-empty-p start end #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (function 6 buffer 10)) t function-and-buffer ess-r-get-evaluation-env ess-make-source-refd-command ess-process-buffer-substring fboundp process-put :eval-visibly ess-send-string visibly process string ess-build-eval-message-function message ess--inhibit-presend-hooks] 6 (#$ . 8523)]) #@64 Like `ess-tracebug-send-region' but with tweaks for functions. (defalias 'ess-tracebug-send-function #[(proc start end &optional visibly message) "\305 \n \f\306&\207" [proc start end visibly message ess-tracebug-send-region function] 7 (#$ . 9347)]) #@1697 ess-dev-map prefix: \[ess-dev-map] * Breakpoints (`ess-dev-map'): b . Set BP (repeat to cycle BP type) . `ess-bp-set' B . Set conditional BP . `ess-bp-set-conditional' k . Kill BP . `ess-bp-kil' K . Kill all BPs . `ess-bp-kill-all' o . Toggle BP state . `ess-bp-toggle-state' l . Set logger BP . `ess-bp-set-logger' n . Goto next BP . `ess-bp-next' p . Goto previous BP . `ess-bp-previous' (C- prefixed equivalents are also defined) * Debugging (`ess-dev-map'): ` . Show traceback . `ess-show-traceback' (also on C-c `) ~ . Show callstack . `ess-show-call-stack' (also on C-c ~) e . Toggle error action (repeat to cycle). `ess-debug-toggle-error-action' d . Flag for debugging . `ess-debug-flag-for-debugging' u . Unflag for debugging . `ess-debug-unflag-for-debugging' w . Watch window . `ess-watch' (C- prefixed equivalents are also defined) * Interactive Debugging (`ess-debug-minor-mode-map'): M-C . Continue . `ess-debug-command-continue' M-C-C . Continue multi . `ess-debug-command-continue-multi' M-N . Next step . `ess-debug-command-next' M-C-N . Next step multi . `ess-debug-command-next-multi' M-U . Up frame . `ess-debug-command-up' M-Q . Quit debugging . `ess-debug-command-quit' * Navigation to errors (general emacs functionality): C-x `, M-g n . `next-error' M-g p . `previous-error' (defvar ess-tracebug-help nil (#$ . 9608)) #@31 Show help for `ess-tracebug'. (defalias 'ess-tracebug-show-help #[(&optional ev) "\300\301!\207" [describe-variable ess-tracebug-help] 2 (#$ . 11353) nil]) #@132 If `window-system' propertize DUMMY with fringe BITMAP and FACE. Otherwise, propertize line-prefix and margin with STRING and FACE (defalias 'ess-tracebug--propertize #[(dummy bitmap face &optional string) "\204 \n\203\305 \306\307 \fE#\207\305 \306\310\305\311\f\304\f%D#\207" [string dummy window-system bitmap face propertize display left-fringe (margin left-margin) font-lock-face] 10 (#$ . 11516)]) #@599 Toggle `ess-tracebug' mode. With ARG, turn `ess-tracebug' mode on if and only if ARG is positive. This mode adds to ESS the interactive debugging, breakpoint and error navigation functionality. Strictly speaking `ess-tracebug' is not a minor mode. It integrates globally into ESS and iESS. Note: Currently, `ess-tracebug' does not detect some of R's debug related messages in non-English locales. To set your R messages to English add the following line to your .Rprofile init file: Sys.setlocale("LC_MESSAGES", "C") See `ess-tracebug-help' for the overview of ess-tracebug functionality. (defalias 'ess-tracebug #[(&optional arg) "\306\307!\210r\310\311!!q\210 \312\232\205\236\n\203\313\n!\202'\314\315!\203&\316\202'\317\211\320V\203t\314\315!?\205\236\321 \210\322 \210 \203e\323 !\324\f!\203O\325 \f#\210\325! #\210\325\" #\210\325# #\210)\326\327!\210\330\315\331\"\210\332\333!\202\236\314\315!\205\236\330\315\334\"\210 \203\221\325! \334#\210\325\" \334#\210\335 \210\336 \210\326\337!\210\332\340!)\207" [ess-local-process-name ess-dialect arg ess-tracebug-prefix comm ess-tracebug-map ess-force-buffer-current "R process to activate tracebug in: " process-buffer get-process "R" prefix-numeric-value ess-process-get tracebug -1 1 0 ess--tb-start ess-debug-start key-binding commandp define-key run-hooks ess-tracebug-enter-hook ess-process-put t message "ess-tracebug mode enabled" nil ess--tb-stop ess-debug-stop ess-tracebug-exit-hook "ess-tracebug mode disabled" ess-mode-map inferior-ess-mode-map ess-watch-mode-map] 5 (#$ . 11934) "P"]) (byte-code "\300\301\302\"\210\303\304\305\306\307\302%\210\310\311!\203\311\312\313\314\211\315%\210\314\207" [defalias ess-toggle-tracebug ess-tracebug custom-declare-face ess-tracebug-last-input-fringe-face ((((background light) (min-colors 88)) (:foreground "medium blue" :overline "medium blue")) (((background dark) (min-colors 88)) (:foreground "deep sky blue" :overline "deep sky blue")) (((background light) (min-colors 8)) (:foreground "blue")) (((background dark) (min-colors 8)) (:foreground "syan"))) "Face for fringe bitmap for last-input position." :group fboundp define-fringe-bitmap last-input-arrow [31 16 16 16 16 16 16 16 16 16 215 124 56 16] nil top] 6) #@184 Marker pointing to the last user input position in iESS buffer. This is the place where `ess--tb-last-input-overlay' is moved. Local in iESS buffers with `ess-tracebug' mode enabled. (defvar ess--tb-last-input (make-marker) (#$ . 14205)) #@88 Overlay to highlight the position of last input in iESS buffer. Local in iESS buffers. (defvar ess--tb-last-input-overlay nil (#$ . 14449)) #@37 Used to compute the busy indicator. (defvar ess--busy-count 0 (#$ . 14595)) (make-variable-buffer-local 'ess--busy-count) (defvar ess--busy-slash '(" " " - " " \\ " " / ")) (defvar ess--busy-B '(" " " B " " ")) (defvar ess--busy-stars '(" " " " " * " " ** " " *** " " **** ")) (defvar ess--busy-vbars '(" " " " " | " " || " " ||| " " |||| ")) #@260 List of strings to replace in turn for busy indication. The first element of the list is used as an indicator of the process being ready (i.e. not busy). Implemented lists that you can use `ess--busy-slash', `ess--busy-B',`ess--busy-stars', `ess--busy-vbars' (custom-declare-variable 'ess-busy-strings 'ess--busy-slash '(#$ . 14983) :group 'ess :type '(repeat string)) #@41 Timer used for busy process indication. (defvar ess--busy-timer nil (#$ . 15358)) #@193 Determines if ESS replaces long + sequences in output. If 'strip, remove all such instances. Otherwise, if non-nil, '+ + + + ' containing more than 4 + is replaced by `ess-long+replacement'. (custom-declare-variable 'inferior-ess-replace-long+ t '(#$ . 15447) :group 'ess-tracebug :type '(choice (const nil :tag "No replacement") (const 'strip :tag "Replace all") (const t :tag "Replace 4 or more +"))) #@145 Replacement used for long + prompt. Please don't customize this or other prompt related variables. ESS internal code assumes default R prompts. (defvar ess-long+replacement ". + " (#$ . 15858)) (defalias 'ess-copy-key '(macro . #[(from-map to-map fun) "\303\304\305 \nED F\207" [to-map fun from-map define-key car where-is-internal] 6])) #@56 Create an overlay to indicate the last input position. (defalias 'ess--tb-make-last-input-overlay #[(beg end) "\303 \"\304\n\305\306\307\310\311##\210\304\n\312\313#\210\n)\207" [beg end ove make-overlay overlay-put before-string ess-tracebug--propertize "!" last-input-arrow ess-tracebug-last-input-fringe-face evaporate t] 7 (#$ . 16203)]) #@26 Start traceback session. (defalias 'ess--tb-start #[nil "r\306\307!!q\210 \204\310\311\n\"\210\312\303!\210 \313\314\315!\210)\316\312\317!\210\312\320!\210\312\321!\210*\322 \210\212+b\210`\323\324 \325 \")\326\327!@\330D,\312\331!\210\332\333\334\335\336p!!#\337\340\341\"\210\337\342\343\313\344$\210\345\346!?\205y\347\346\350K\"\210\347\350\351K\")\207" [ess-local-process-name ess-error-regexp-alist ess-dialect compilation-error-regexp-alist compilation-mode-font-lock-keywords next-error-function process-buffer get-process error "Can not activate the traceback for %s dialect" make-local-variable nil compilation-setup t ess-tracebug-next-error-function ess--tb-last-input ess--tb-last-input-overlay compilation-search-path ess-tracebug--set-left-margin ess--tb-make-last-input-overlay point-at-bol point-at-eol propertized-buffer-identification "%3b" (:eval (nth ess--busy-count ess-busy-strings)) ess--busy-timer run-with-timer 2 0.5 ess--make-busy-timer-function get-buffer-process add-hook kill-buffer-hook #[nil "\205\301!\207" [ess--busy-timer cancel-timer] 2] comint-input-filter-functions ess-tracebug-set-last-input local fboundp orig-ess-parse-errors defalias ess-parse-errors next-error ess-tracebug-search-path comint-last-input-start mode-line-buffer-identification] 6 (#$ . 16553)]) #@56 Stop ess traceback session in the current ess process. (defalias 'ess--tb-stop #[nil "r\305\306!!q\210 \307\232\203\310\311!\203\312\313\311K\"\210\314\311!\210\315\302!\203(\316\n!\210\317\302!\210\317\320!\210\321\322\323 \"\210\324 \210\317\325!\210\317\326!\210\327 !\210\330\331\332\333#\210\334\335!\211)\207" [ess-current-process-name ess-dialect ess--tb-last-input-overlay ess--busy-timer mode-line-buffer-identification process-buffer get-process "R" fboundp orig-ess-parse-errors defalias ess-parse-errors fmakunbound local-variable-p delete-overlay kill-local-variable ess--tb-last-input font-lock-remove-keywords nil compilation-mode-font-lock-keywords font-lock-ensure compilation-error-regexp-alist compilation-search-path cancel-timer remove-hook comint-input-filter-functions ess-tracebug-set-last-input local propertized-buffer-identification "%12b"] 4 (#$ . 17887)]) #@145 Ring of markers to the positions of user inputs when the debugger or traceback events are initiated. It is used in `ess--dbg-goto-input-point'. (defvar ess--dbg-forward-ring (make-ring 10) (#$ . 18786)) #@125 Ring of markers to the positions from which `ess--dbg-goto-input-point' is called. See the also `ess--dbg-goto-debug-point' (defvar ess--dbg-backward-ring (make-ring 10) (#$ . 18996)) #@415 Display R traceback and last error message. Pop up a compilation/grep/occur like buffer. Usual global key bindings are available (\[next-error] and \[previous-error]) for `next-error' and `previous-error' respectively. You can bind 'no-select' versions of this commands: (define-key compilation-minor-mode-map [(?n)] 'next-error-no-select) (define-key compilation-minor-mode-map [(?p)] 'previous-error-no-select) (defalias 'ess-show-traceback #[nil "\204 \306\307 \"\207\310\n\311 \"\210\312\313!\210\314\315! \f'(\211)*r)q\210\316+(\317 )\"\210eb\210\320\321\316\322#\203E\323\321!\202\207\324 \210\323\316!\210\325\326!\210\327\330!\203Z\325\331!\210,\332'!\210\333 \210\334\335!\210\336-\337\340\341\"\210\337\342\343\"\210\337\344\345\"\210\322+\346)!-\207" [ess-traceback-command ess-dialect ess--dbg-forward-ring ess-local-process-name ess-mode-editing-alist cmd error "Not implemented for dialect %s" ring-insert point-marker ess-force-buffer-current "R process to use: " get-buffer-create "*ess-traceback*" nil ess-command re-search-forward "No traceback available" t message ess-dirs make-local-variable compilation-error-regexp-alist boundp ess-r-error-regexp-alist compilation-search-path ess-setq-vars-local font-lock-refresh-defaults compilation-minor-mode 1 ess-tracebug-next-error-function local-set-key "" ess-watch-switch-process "" ess-switch-to-ESS "" ess-switch-to-end-of-ESS pop-to-buffer alist lproc-name trbuf next-error-last-buffer buffer-read-only ess-tracebug-search-path next-error-function] 5 (#$ . 19187) nil]) (defvar ess-call-stack-command nil) #@59 Display current call stack. Also see `ess-show-traceback' (defalias 'ess-show-call-stack #[nil "\302 )\207" [ess-call-stack-command ess-traceback-command ess-show-traceback] 1 (#$ . 20803) nil]) (defalias 'ess-show-R-traceback 'ess-show-traceback) (defalias 'ess--tb-next-error-goto-process-marker #[nil "\300 \210\301\302 `\"\207" [comint-goto-process-mark set-window-point get-buffer-window] 3]) #@116 Advance to the next error message and visits the file. This is the value of `next-error-function' in iESS buffers. (defalias 'ess-tracebug-next-error-function #[(n &optional reset) "\203db\210 \306p!\307 \206\307\310\" \203, \311Y\203,\312 \203,#\202-`$\313%\3141@\315 \310$#0\202_& \203I\316 \210 \311W\203V\317\320!\210\202Z\317\321!\210\310\211%)' \203r \311=\204r`#V\203w'\202\202\316 \210\317\322!\210\310\211%'\323 (\310\211)*%\205$\323 +n\203\240+\202\244\324\325 !,\326\327!\203\305\330'!->\204\276\331\332\333'D\"\210'\307H\202\310'@)\326\334!\203\351\330'!->\204\342\331\332\333'D\"\210'\335H\202\355\336'8*\336)8@@.)@/)A@0\337.0/#\2111\203\340(1@1A@#\202#\317\341.\",.\f\207" [reset compilation-error-screen-columns columns pbuff-p last n get-buffer-process 1 nil 0 comint-after-pmark-p t (error) compilation-next-error ess--tb-next-error-goto-process-marker message "Before first reference" "Beyond last reference" "Beyond last-input marker" point-marker copy-marker line-beginning-position fboundp compilation--message->loc type-of signal wrong-type-argument compilation--message compilation--message->end-loc 3 2 ess--dbg-create-ref-marker compilation-goto-locus "Reference to '%s' not found" timestamp ess--tb-last-input beg-pos at-error err msg marker loc end-loc compilation-current-error overlay-arrow-position cl-struct-compilation--message-tags file col line mkrs] 5 (#$ . 21210) "p"]) #@32 Move the overlay to the point. (defalias 'inferior-ess-move-last-input-overlay #[nil "\302 \303 `\304Z\304\\]#)\207" [pbol ess--tb-last-input-overlay point-at-bol move-overlay 2] 6 (#$ . 22701)]) (byte-code "\300\301\302\303\304\305\306\307\310\311& \210\312\313\314\315\316\317\306\301&\207" [custom-declare-group ess-debug nil "Debugging for ESS" :link (emacs-library-link :tag "Source Lisp File" "ess-tracebug.el") :group ess-tracebug :prefix "ess-debug-" custom-declare-variable ess-debug-error-action-alist '(("" "NONE" "NULL") (" r" "RECOVER" "utils::recover") (" t" "TRACEBACK" "base::traceback")) "Alist of 'on-error' actions.\nToggled with `ess-debug-toggle-error-action'. Each element must\nhave the form (DISP SYMB ACTION) where DISP is the string to be\ndisplayed in the mode line when the action is in place. SYMB is\nthe symbolic name of an action. ACTION is the string giving the\nactual expression to be assigned to 'error' user option. See R's\nhelp ?options for more details." :type (alist :key-type string :value-type (group string string))] 10) #@66 The prefix of the buffer name the R debug output is directed to. (defvar ess--dbg-output-buf-prefix " *ess.dbg" (#$ . 23777)) #@58 Current debug reference in *ess.dbg* buffers (a marker). (defvar ess--dbg-current-ref (make-marker) (#$ . 23909)) (make-variable-buffer-local 'ess--dbg-current-ref) #@54 Last debug reference in *ess.dbg* buffer (a marker). (defvar ess--dbg-last-ref-marker (make-marker) (#$ . 24080)) (make-variable-buffer-local 'ess--dbg-last-ref-marker) #@31 This is t in ess.dbg buffers. (defvar ess--dbg-buf-p nil (#$ . 24255)) (make-variable-buffer-local 'ess--dbg-buf-p) #@203 Marker to the current debugged line. It always point to the beginning of the currently debugged line and is used by overlay-arrow. In no-windowed Emacs an `overlay-arrow' is displayed at this position. (defvar ess--dbg-current-debug-position (make-marker) (#$ . 24378)) (byte-code "\204 \301\302\303\"\210\304\305\306\307\310\311%\207" [window-system add-to-list overlay-arrow-variable-list ess--dbg-current-debug-position custom-declare-face ess-debug-current-debug-line-face ((default (:inherit highlight))) "Face used to highlight currently debugged line." :group ess-debug] 6) #@42 The overlay for currently debugged line. (defvar ess--dbg-current-debug-overlay (byte-code "\301``\"\302\303\304#\210\302\305\306#\210)\207" [overlay make-overlay overlay-put face ess-debug-current-debug-line-face evaporate t] 4) (#$ . 24967)) (byte-code "\300\301\302\303\304\305\306\307&\210\310\311\312\313\304\305%\210\310\314\315\316\304\305%\210\300\317\320\321\304\305\306\322&\210\300\323\324\325\304\305\306\322&\207" [custom-declare-variable ess-debug-blink-interval 0.2 "Time in seconds to blink the background of the debug line.\nCurrently two events are defined 'ref-not-found' and 'same-ref'.\nBlinking colors for these events can be customized by\ncorresponding faces." :group ess-debug :type float custom-declare-face ess-debug-blink-ref-not-found-face ((((class grayscale) (background light)) (:background "DimGray")) (((class grayscale) (background dark)) (:background "LightGray")) (((class color) (background light) (min-colors 88)) (:background "IndianRed4")) (((class color) (background dark) (min-colors 88)) (:background "dark red")) (((background light) (min-colors 8)) (:foreground "red")) (((background dark) (min-colors 8)) (:foreground "red"))) "Face used to blink currently debugged line's background\n when the reference file is not found. See also `ess-debug-ask-for-file'" ess-debug-blink-same-ref-face ((((class grayscale) (background light)) (:background "DimGray")) (((class grayscale) (background dark)) (:background "LightGray")) (((class color) (background light) (min-colors 88)) (:background "steel blue")) (((class color) (background dark) (min-colors 88)) (:background "midnight blue")) (((background light) (min-colors 8)) (:foreground "blue")) (((background dark) (min-colors 8)) (:foreground "cyan"))) "Face used to highlight currently debugged line when new debug\nreference is the same as the preceding one. It is highlighted for\n`ess-debug-blink-interval' seconds." ess-debug-ask-for-file nil "If non nil, ask for file if the current debug reference is not found.\n\nIf nil, the currently debugged line is highlighted for\n`ess-debug-blink-interval' seconds." boolean ess-debug-skip-first-call t "If non-nil, skip first debugger call.\n\nIn R first call doesn't contain source references and is skipped\nby default."] 8) #@148 Keymap used to define commands for single key input mode. This commands are triggered by `ess-electric-selection' . \{ess-electric-selection-map} (defvar ess-electric-selection-map (byte-code "\301\302\300!\210\303\304\305#\210\303\306\305#\210\303\307\310#\210\303\311\312#\210\303\313\312#\210\303\314\312#\210\303\315\312#\210\303\316\312#\210\303\317\312#\210\303\320\312#\210\303\321\312#\210\303\322\312#\210\303\323\312#\210\303\324\325#\210)\207" [ess-electric-selection-map nil define-prefix-command define-key "\316" ess-debug-command-continue "\303" "\321" ess-debug-command-quit "0" ess-debug-command-digit "1" "2" "3" "4" "5" "6" "7" "8" "9" "?" ess-tracebug-show-help] 4) (#$ . 27252)) (ess-if-verbose-write "\n<- debug-vars done") #@102 Set the on-error action. The SPEC should be one of the components of `ess-debug-error-action-alist'. (defalias 'ess-debug-set-error-action #[(spec) "\303!\n\203!r\304 !q\210\305 \306\n@#\210\307\310\311\312\n8\"!)\202$\313\314!)\207" [ess-local-process-name proc spec get-process process-buffer process-put on-error-action ess-command format "options(error= %s )\n" 2 error "Unknown action"] 5 (#$ . 28022)]) #@85 Toggle the 'on-error' action. The action list is in `ess-debug-error-action-alist'. (defalias 'ess-debug-toggle-error-action #[nil "\306 \210\n\307 !\310\311!\206\312\313\211\314 \"\235A\211\204)\211A\242\315!\210\316\317\320A@\321\322#\"\210\307\323 \211!\f=\203v\204V\211A\242\315!\210\324 \210\316\317\320A@\321\322#\"\210\202C B\211.\207" [ess-debug-error-action-alist alist last-command-event ev com-char cur-action ess-force-buffer-current event-basic-type ess-process-get on-error-action "" nil assoc ess-debug-set-error-action message "On-error action set to: %s" propertize face font-lock-function-name-face read-event force-mode-line-update actions act unread-command-events] 7 (#$ . 28441) nil]) #@40 Initialize active debug line overlays. (defalias 'ess--dbg-activate-overlays #[nil "\302\303 \304 Tp$\210 \303 \305\223\207" [ess--dbg-current-debug-overlay ess--dbg-current-debug-position move-overlay point-at-bol point-at-eol nil] 5 (#$ . 29207)]) #@90 Deletes markers and overlays. Overlay arrow remains to indicate the last debug position. (defalias 'ess--dbg-deactivate-overlays #[nil "\302!\210 \303\211\223\207" [ess--dbg-current-debug-overlay ess--dbg-current-debug-position delete-overlay nil] 3 (#$ . 29464)]) #@668 Jump to the point where the last debugger/traceback etc event occurred. Mainly useful during/after debugging, to jump to the place from where the code was initialy executed. This is an electric-command, which means that after the command is triggered a single key event is enough to navigate through the input-event-S-ring. If the key-event which triggered the command is Shift modified the input-event-S-ring is traversed backwards. The input-event-S-ring is a virtual object which consists of two rings `ess--dbg-forward-ring' and `ess--dbg-backward-ring' which are joint at their tops. See the more info at https://code.google.com/p/ess-tracebug/#Work-Flow (defalias 'ess-debug-goto-input-event-marker #[nil "\306 !\307\310\311\312 !>\203\313 \307\"\202&\314 \315 \"\210\313\307\"\316\f!\203=\317\316\f!!\210\320\f!\203=\320\f!b\210\306\211\321 \211!!\n=\203\212\311\312 !>\203X S\202[ T \307W\203j\313 [\"\202p\313 \"\316\f!\203=\317\316\f!!\210\320\f!\203=\320\f!b\210\202= B\211,\207" [last-command-event ev com-char ring-el input-point ess--dbg-backward-ring event-basic-type 0 nil shift event-modifiers ring-ref ring-insert point-marker marker-buffer switch-to-buffer marker-position read-event ess--dbg-forward-ring unread-command-events] 4 (#$ . 29737) nil]) #@229 Return to the debugging position. Jump to markers stored in `ess--dbg-backward-ring'. If debug session is active, first jump to current debug line. This is an electric-command. Shift triggers the opposite traverse of the ring. (defalias 'ess-debug-goto-debug-point #[nil "\306\307\"\n\310 !\307\311 \203%\312\313!!\210\314!b\210\315 \210\2020\312\313 !!\210\314 !b\210\310\316 \211!\f=\203k\317\320 !>\203I S\202L T\306 \"\313 !\2030\312\313 !!\210\314 !\2030\314 !b\210\2020 B\211,\207" [ess--dbg-backward-ring debug-point last-command-event ev com-char ring-el ring-ref 0 event-basic-type ess--dbg-is-active-p switch-to-buffer marker-buffer marker-position back-to-indentation read-event shift event-modifiers ess--dbg-current-debug-position unread-command-events] 3 (#$ . 31054) nil]) #@46 Insert `point-marker' into the forward-ring. (defalias 'ess-debug-insert-in-forward-ring #[nil "\301\302 \"\210\303\304!\207" [ess--dbg-forward-ring ring-insert point-marker message "Point inserted into the forward-ring"] 3 (#$ . 31875) nil]) #@198 String to be displayed in mode-line alongside the process name. Indicates that ess-debug-mode is turned on. When the debugger is in active state this string is shown in upper case and highlighted. (defvar ess-debug-indicator " DB" (#$ . 32126)) (defvar ess--dbg-mode-line-debug '(:eval (let ((proc (get-process ess-local-process-name))) (if (and proc (process-get proc 'dbg-active)) (let ((str ess-debug-indicator)) (ess-debug-minor-mode 1) (put-text-property 1 (length str) 'face '(:foreground "white" :background "red") str) str) (ess-debug-minor-mode -1) ""))) nil) (byte-code "\300\301!\210\302\301\303\304#\207" [make-variable-buffer-local ess--dbg-mode-line-debug put risky-local-variable t] 4) (defvar ess--dbg-mode-line-error-action '(:eval (or (and (ess-process-live-p) (ess-process-get 'on-error-action)) "")) nil) (byte-code "\300\301!\210\302\301\303\304#\207" [make-variable-buffer-local ess--dbg-mode-line-error-action put risky-local-variable t] 4) #@134 Remove empty lines from STRING (which interfere with evals) during debug. This function is placed in `ess-presend-filter-functions'. (defalias 'ess--dbg-remove-empty-lines #[(string) "\203\302\303!\203\304\305\306 #\207 \207" [ess--dbg-del-empty-p string ess-process-get dbg-active replace-regexp-in-string "\n\\s *$" ""] 4 (#$ . 33097)]) #@261 Start the debug session. Add to ESS the interactive debugging functionality, breakpoints, watch and loggers. Integrates into ESS and iESS modes by binding `ess-tracebug-map' to `ess-tracebug-prefix' in `ess-mode-map' and `inferior-ess-mode-map' respectively. (defalias 'ess-debug-start #[nil "\306\307 \310R!\311\n!\n\312\f\313 #\210\312\f\314\315#\210\316\f\317\"\210r\320\f!q\210!\321\232\2042\322\323!\"\210\324\325\326\327#\210\324\325\330\327#\210\331\332\333\315\334$\210)r q\210 \335 \210\336\337!\210db\210\327\"\340 #\340 \211$,\207" [ess--dbg-output-buf-prefix ess-current-process-name ess-local-process-name lpn proc dbuff get-buffer-create "." "*" ess-get-process process-put dbg-buffer dbg-active nil set-process-filter inferior-ess-tracebug-output-filter process-buffer "R" error "Can not activate the debugger for %s dialect" add-to-list ess--mode-line-process-indicator ess--dbg-mode-line-debug t ess--dbg-mode-line-error-action add-hook ess-presend-filter-functions ess--dbg-remove-empty-lines local buffer-disable-undo make-local-variable overlay-arrow-position point-marker ess-dialect ess--dbg-buf-p ess--dbg-current-ref ess--dbg-last-ref-marker] 5 (#$ . 33448) nil]) #@60 End the debug session. Kill the *ess.dbg.[R_name]* buffer. (defalias 'ess-debug-stop #[nil "\304!r\305 !q\210\n\306\235\203\307\310\n\"\210\311\312 \"\210\311\313 \"\210\314\315\316\317#\210)\320 \321\"\210\322\323 \324\"!\210\325 \324\326#\210\325 \327\326#)\207" [ess-current-process-name proc ess-dialect ess--mode-line-process-indicator get-process process-buffer ("XLS" "SAS" "STA") error "Can not deactivate the debugger for %s dialect" delq ess--dbg-mode-line-debug ess--dbg-mode-line-error-action remove-hook ess-presend-filter-functions ess--dbg-remove-empty-lines local set-process-filter inferior-ess-output-filter kill-buffer process-get dbg-buffer process-put nil dbg-active] 4 (#$ . 34654) nil]) #@50 Display the spiner of prompt if PROCESS is busy. (defalias 'ess--make-busy-timer-function #[(process) "\301\302\303\304DC\305BBE\207" [process lambda nil let pb ((when (eq (process-status pb) 'run) (with-current-buffer (process-buffer pb) (if (not (process-get pb 'busy)) (when (> ess--busy-count 0) (setq ess--busy-count 0) (force-mode-line-update) (redisplay)) (setq ess--busy-count (1+ (mod ess--busy-count (1- (length ess-busy-strings))))) (force-mode-line-update) (redisplay)))))] 5 (#$ . 35374)]) #@65 Return t if the current R process is in active debugging state. (defalias 'ess--dbg-is-active-p #[nil "\300 \205\301\302!\207" [ess-process-live-p ess-process-get dbg-active] 2 (#$ . 35884)]) #@65 Return t if the current R process is in active debugging state. (defalias 'ess--dbg-is-recover-p #[nil "\300 \205\301\302!\207" [ess-process-live-p ess-process-get is-recover] 2 (#$ . 36084)]) (defalias 'ess-debug-active-p #[nil "\300 \205\301\302!\206\301\303!\207" [ess-process-live-p ess-process-get dbg-active is-recover] 2]) (defvar ess--dbg-regexp-reference "debug \\w+ +\\(.+\\)#\\([0-9]+\\):") (defvar ess--dbg-regexp-jump "debug \\w+ ") (defvar ess--dbg-regexp-skip "\\(\\(?:Called from: \\)\\|\\(?:#[0-9]*: +recover()\\)\\)") (defvar ess--dbg-regexp-no-skip "debug_pipe") (defvar ess--dbg-regexp-debug "\\(\\(?:Browse[][0-9]+\\)\\|\\(?:debug: \\)\\)") (defvar ess--dbg-regexp-selection "\\(Selection: \\'\\)") (defvar ess--dbg-regexp-input (concat ess--dbg-regexp-debug "\\|" ess--dbg-regexp-selection)) (defvar ess--suppress-next-output\? nil) (defvar ess-mpi-control-regexp "\\([^]+\\)\\([^]+\\)") (defvar ess-mpi-alist '(("message" . message) ("error" . ess-mpi:error) ("eval" . ess-mpi:eval) ("y-or-n" . ess-mpi:y-or-n))) (defalias 'ess-mpi:error #[(msg) "\301\302\303\"!\207" [msg message format "Error in inferior: %s"] 4]) #@157 Evaluate EXP as Emacs expression. If present, the CALLBACK string is passed through `format' with returned value from EXPR and then sent to the subprocess. (defalias 'ess-mpi:eval #[(expr &optional callback) "\303\304!!\n\205\305\306 \307\n \"\")\207" [expr result callback eval read ess-send-string ess-get-process format] 5 (#$ . 37243)]) #@139 Ask `y-or-n-p' with PROMPT. The CALLBACK string is passed through `format' with returned value from EXPR and then sent to the subprocess. (defalias 'ess-mpi:y-or-n #[(prompt callback) "\303!\n\205\304\305 \306\n \"\")\207" [prompt result callback y-or-n-p ess-send-string ess-get-process format] 5 (#$ . 37595)]) #@49 Handle all mpi messages in BUF and delete them. (defalias 'ess-mpi-handle-messages #[(buf) "pr q\210eb\210\306\n\307\310#\205d\311\224\311\225\312\313!\314\312\315!\316\"\317 \"A\211\203T\3201Crq\210\321\")0\210\202Y\322\323\324 \"\325!\")\210\202Y\322\326 \"\210 b\210 \f|\210-\202 *\207" [obuf buf ess-mpi-control-regexp mbeg mend head re-search-forward nil t 0 match-string 1 split-string 2 "" assoc (debug error) apply message format "Error in mpi `%s' handler: %%s" error-message-string "Now handler defined for MPI message '%s" payload ess-mpi-alist handler err] 5 (#$ . 37918)]) #@244 Replace long + + + in PROMPT based on `inferior-ess-replace-long+' value. If IS-FINAL means that PROMPT occurs at the end of the process chunk. If non-nil, special care is taken not to drop last '+' value as it might be a continuation prompt. (defalias 'ess--replace-long+-in-prompt #[(prompt is-final) "G\n\203 \306W\203\202O \306Z\234\307=\n\310\267\202K \203+\f\203+\311\202N\312\202N\313\314 #G \203F\f\204F\312P\202G*\202N\315\316!))\207" [prompt len inferior-ess-replace-long+ last+ is-final ess-long+replacement 2 43 #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (strip 31 t 47)) "+ " "> " replace-regexp-in-string "\\(\\+ \\)\\{2\\}\\(\\+ \\)+" error "Invalid values of `inferior-ess-replace-long+'"] 4 (#$ . 38537)]) #@61 Add suitable offset to STR given the preceding PREV-PROMPT. (defalias 'ess--offset-output #[(prev-prompt str) "\203(G \303Z\234\304=\203\305\nP\202&\n\306\234\307=\203#\n\202&\310\nP)\207\n\207" [prev-prompt len str 2 43 "> \n" 0 10 "\n"] 3 (#$ . 39333)]) #@133 Flush accumulated output of PROC into its output buffer. Insertion happens chunk by chunk. A chunk is a region between two prompts. (defalias 'ess--flush-accumulated-output #[(proc) "\306!\307!\310\311\"\211\304=\310\305\"\312 !\313V\205H\314 !\203(\315 !\210\316\317\n\"\320=\203>\321\305\322\323\324\325$#\202H\326 !\210r q\210eb\210\324-\327\330\324\331#\203Z\332\307!!\210)eb\210\f\203u\333\334!\203u\313\225b\210`d=\203u\335u\210 \331=?``\324\211\f\203\205\336\202\206\337\310\340\"\341 . /01234\327/\324\331#\203\313\2242\f\203\267\342\225\206\271\343\225\202\271\313\225123V\203\32532{5\344\345 5\"\"\210)1323{04\203\360\34603d=\"\202\3620)0r\nq\210\3476\3440\"\210*4\205\n0 32\202\2342d=\204/\3502d\"5\344\345 5\"\"\210\324 )\321\340 #\210\321\351\310\352\"\205B\353 #\210\354 . -\207" [proc abuf pbuf visibly nowait flush-timer ess--accumulation-buffer process-buffer process-get :eval-visibly buffer-size 0 timerp cancel-timer buffer-local-value major-mode fundamental-mode process-put run-at-time 0.02 nil ess--flush-accumulated-output ess-mpi-handle-messages re-search-forward "Error\\(:\\| +in\\)" t ess-show-buffer looking-at "\\([+>] \\)\\{2,\\}\n?" -2 "\\(^\\([+>] \\)\\{2,\\}\\)\\|\\(> \\) +" "^\\([+>] \\)+" prev-prompt point-at-eol 1 3 comint-output-filter ess--offset-output ess--replace-long+-in-prompt "^$" buffer-substring-no-properties flush-time busy float-time erase-buffer case-fold-search eol regexp prompt tpos pos1 pos2 do-clean str comint-prompt-regexp] 10 (#$ . 39606)]) #@293 Standard output filter for the inferior ESS process when `ess-debug' is active. Call `inferior-ess-output-filter'. Check for debug reg-expressions (see `ess--dbg-regexp-debug',...), when found puts iESS in the debugging state. If in debugging state, mirrors the output into *ess.dbg* buffer. (defalias 'inferior-ess-tracebug-output-filter #[(proc string) "\306\307D\235\310\n!\311\n!\312\n\313\"\3144!5\312\n\315\"6\312\n\316\"7\317 8\3209:\";\320<:\"\211=\205B\321\322:\">?\205Y\320@:\"\205Y\320A:\"?\211B\206g=\205g>?C\323\n:\"?D\324 E\312\n\325\"F\312\n\326\"\327\n:\"\210\330\n:\"\210\331\n\316>#\210\312\n\332\"\204\240G\203\251\331\n\332\333#\210\202'r\fq\210db\210:c\210)\334!\203\307\335!\210\331\n\326\333#\210F\204\327EF\331\n\325E#\210D\206\340\312\n\336\"\211H\204EFZ\337V\204\340\341!\203\373!\204\340\342!\203 \"\203 \343\n!\210\202&H\203\344\202\345I\331\n\326\346I\333\343\n$#\210))D\20365\2036\3475!\210;\203Or q\210db\210\350:\351Qc\210)\352 \"\210B\203^7\204^\353\n\354\"\2106\203\212;\204\212C\204\212D\204w>\203\212\355 \210\331\n\315\333#\2105\203\212\3475!\2106\204\275>\204\275;\204\236C\203\275 \204\251\356J8\"\210\331\n\315\357#\210\360\361 !\210;\204\275\362 !\210>\205\305\363\357!.\207" [major-mode is-iess proc pbuf abuf dbuff inferior-ess-mode ess-watch-mode process-buffer ess--accumulation-buffer process-get dbg-buffer get-buffer dbg-active is-recover point-marker string-match match-string 2 inferior-ess-set-status float-time flush-time flush-timer ess--if-verbose-write-process-state inferior-ess-run-callback process-put suppress-next-output\? nil timerp cancel-timer sec-prompt 0.5 boundp edebug-mode org-babel-current-src-block-location ess--flush-accumulated-output 0.01 0.2 run-at-time ess-watch-refresh-buffer-visibly "|-" "-|" ess--dbg-goto-last-ref-and-mark process-send-string "n\n" ess--dbg-deactivate-overlays ring-insert t message ess--debug-keys-message-string ess-show-buffer ess-electric-selection ess-watch-buffer wbuff was-in-dbg was-in-recover input-point ess--dbg-regexp-jump string match-jump ess--dbg-regexp-input match-input match-selection ess-debug-skip-first-call ess--dbg-regexp-skip ess--dbg-regexp-no-skip match-skip match-dbg is-ready new-time last-time ess--suppress-next-output\? fast-flush timeout ess--dbg-forward-ring] 9 (#$ . 41200)]) #@83 Keymap active when ESS process is in debugging state. \{ess-debug-minor-mode-map} (defvar ess-debug-minor-mode-map (byte-code "\301 \302\303\304#\210\302\305\306#\210\302\307\310#\210\302\311\312#\210\302\313\314#\210\302\315\316#\210)\207" [map make-sparse-keymap define-key [134217795] ess-debug-command-continue [(control meta 67)] ess-debug-command-continue-multi [134217806] ess-debug-command-next [(control meta 78)] ess-debug-command-next-multi [134217809] ess-debug-command-quit [134217813] ess-debug-command-up] 4) (#$ . 43636)) #@109 Non-nil if Ess-Debug minor mode is enabled. Use the command `ess-debug-minor-mode' to change this variable. (defvar ess-debug-minor-mode nil (#$ . 44189)) (make-variable-buffer-local 'ess-debug-minor-mode) #@606 Minor mode activated when ESS process is in debugging state. This is a minor mode. If called interactively, toggle the `Ess-Debug minor mode' mode. If the prefix argument is positive, enable the mode, and if it is zero or negative, disable the mode. If called from Lisp, toggle the mode if ARG is `toggle'. Enable the mode if ARG is nil, omitted, or is a positive number. Disable the mode if ARG is a negative number. To check whether the minor mode is enabled in the current buffer, evaluate `ess-debug-minor-mode'. The mode's hook is called both when the mode is enabled and when it is disabled. (defalias 'ess-debug-minor-mode #[(&optional arg) "\305  \306=\203\n?\202 \247\203 \307W\203\310\202\311\312\303!\2032\313\302 \"\n\2032\302 B\314\315\n\203<\316\202=\317\"\210\320\321!\203b\305 \203Q\305 \232\203b\322\323\324\n\203]\325\202^\326\f#\210))\327 \210\n\207" [#1=#:last-message arg ess-debug-minor-mode local-minor-modes local current-message toggle 1 nil t boundp delq run-hooks ess-debug-minor-mode-hook ess-debug-minor-mode-on-hook ess-debug-minor-mode-off-hook called-interactively-p any " in current buffer" message "Ess-Debug minor mode %sabled%s" "en" "dis" force-mode-line-update] 4 (#$ . 44402) (list (if current-prefix-arg (prefix-numeric-value current-prefix-arg) 'toggle))]) (defvar ess-debug-minor-mode-hook nil) (byte-code "\301\302N\204\f\303\301\302\304#\210\303\301\305\306#\210\303\301\307\310C#\210\311\312\310\310\211%\207" [ess-debug-minor-mode-map ess-debug-minor-mode-hook variable-documentation put "Hook run after entering or leaving `ess-debug-minor-mode'.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it. (This is true for all hook variables.)" custom-type hook standard-value nil add-minor-mode ess-debug-minor-mode] 6) #@285 Open the most recent debug reference, and set all the necessary marks and overlays. It's called from `inferior-ess-tracebug-output-filter'. DBUFF must be the *ess.dbg* buffer associated with the process. If OTHER-WINDOW is non nil, attempt to open the location in a different window. (defalias 'ess--dbg-goto-last-ref-and-mark #[(dbuff &optional other-window) "\306\211r\nq\210\307\310d \f$\211\203 \311 \306\223\210 \306\223\210)\205j\312\313#\211\203Vrq\210\314\315 !\211\232\203P\316\317\320#\210\321\306\322#\202R\323 )\202i\316\317\324#\210\321\306\325#\210\326\327@\")*\207" [ref t-debug-position dbuff ess--dbg-last-ref-marker ess--dbg-regexp-reference ess--dbg-current-ref nil ess--dbg-get-next-ref -1 point-at-eol apply ess--dbg-goto-ref copy-marker point-at-bol overlay-put face ess--dbg-blink-same-ref-face run-with-timer #[nil "\301\302\303#\207" [ess--dbg-current-debug-overlay overlay-put face ess-debug-current-debug-line-face] 4] ess--dbg-activate-overlays ess--dbg-blink-ref-not-found-face #[nil "\301\302\303#\207" [ess--dbg-current-debug-overlay overlay-put face ess-debug-current-debug-line-face] 4] message "Reference %s not found" other-window buf ess--dbg-current-debug-position ess--dbg-current-debug-overlay ess-debug-blink-interval] 6 (#$ . 46241) nil]) #@271 Opens the reference given by FILE, LINE and COL. Try to open in a different window if OTHER-WINDOW is nil. Return the buffer if found, or nil otherwise be found. `ess--dbg-find-buffer' is used to find the FILE and open the associated buffer. If FILE is nil return nil. (defalias 'ess--dbg-goto-ref #[(other-window file line &optional col) "\306 \n#@ \211\205T\307 !\204\310!\210\202>\311\312p!!\313!\210\311\312\314\"!=\204=\315!\210)rq\210\f b\210\316\312! \"\210))*\207" [file line col ess-local-process-name lpn mrk ess--dbg-create-ref-marker marker-buffer switch-to-buffer window-frame get-buffer-window display-buffer t ess-select-frame-set-input-focus set-window-point buf other-window this-frame] 6 (#$ . 47561)]) (defvar org-babel-tangled-file nil) #@295 Create markers to the reference given by FILE, LINE and COL. Return list of two markers MK-start and MK-end. MK-start is the position of error. Mk-end is the end of the line where error occurred. If buffer associated with FILE is not found, or line is nil, or TB-INDEX is not found return nil. (defalias 'ess--dbg-create-ref-marker #[(file line &optional col) ";\203 \306! ;\203\306 !\307\n \"\310\311\312\f@\206 \n#\fA@\313\n!\314\205\234\205\234\212rq\210\214~\210\315b\210` \203_ \316\305\"=\204_\317\305\"\211\204J\204i\320\f8\205\233b\210Sy\210 \203\203\321 \\b\210\202\206\322 \210\323\324!\203\224\203\224\325 \210\326 \327\330 !D+-\207" [line col file ess--srcrefs srcref tb-index string-to-number gethash replace-regexp-in-string "^\n" "" ess--dbg-find-buffer nil 1 get-text-property next-single-property-change 2 point-at-bol back-to-indentation boundp org-babel-tangled-file org-babel-tangle-jump-to-org point-marker copy-marker point-at-eol buffer pos] 4 (#$ . 48357)]) #@191 Find a buffer for file FILENAME. If FILENAME is not found at all, ask the user where to find it if `ess--dbg-ask-for-file' is non-nil. Search the directories in `ess-tracebug-search-path'. (defalias 'ess--dbg-find-buffer #[(filename) "\306\307 \310\211 :\203 @\311\312\n!! \244 A\211\202\n \237+\"\310\211\211\211\211\"#$%&%B%\3132\213\314 \310'\211(\205\211(@'r'q\210)\203~\315*!\203k\316\317\320*\")\"\204u*\321)!\232\203~'#\322\313\310\"\210)(A\211(\204I\310*0\210#\204\257\315*!\203\257\323\324*!!*\325*!%B%\321*!*#\204\330%\203\330%\211A%\242+\324*+\"\326 !\205\322\327 !#)\202\257#\2045,\2035\212\330-\331\317\332*\"\310*\330\310%\211.\326 !\204 \333\334 \"\210\335 \210\336\337!\210\2024\340 !\203/\326\324* \"\211!\204/\333\341*.#\210\335 \210\336\337!\210\2024\327 !#,#.\207" [ess-tracebug-search-path #1=#:--cl-var-- d #2=#:--cl-var-- buffername name append ess-r-package-source-dirs nil reverse ess-r-package--all-source-dirs --cl-block-nil-- buffer-list file-name-absolute-p string-match format "%s\\'" file-name-nondirectory throw abbreviate-file-name expand-file-name file-name-directory file-exists-p find-file-noselect t read-file-name "Find next line in (default %s): " message "Cannot find file `%s'" ding sit-for 2 file-directory-p "No `%s' in directory %s" fmts buffer buffsym dirs default-directory bf --dolist-tail-- buffer-file-name filename thisdir ess-debug-ask-for-file pop-up-windows origname] 7 (#$ . 49397)]) #@643 Move point to the next reference in the *ess.dbg* buffer. Must be called from *ess.dbg* buffer. It returns the reference in the form (file line col) /all strings/ , or NIL if not found . Prefix arg N says how many error messages to move forwards (or backwards, if negative). Optional arg PT, if non-nil, specifies the value of point to start looking for the next message, default to (point). BOUND is the limiting position of the search. REG is the regular expression to search with. nF - sub-expression of REG giving the 'file'; defaults to 1. nL - giving the 'line'; defaults to 2. nC - sub-expr giving the 'column'; defaults to 3. (defalias 'ess--dbg-get-next-ref #[(n &optional pt BOUND REG nF nL nC) "\204\306\307!\210 \206 \310\n\206\311 \206\312\f\204 `\fb\210\313 \314$\2058\315 !\316\n!\316 !E\207" [ess--dbg-buf-p nF nL nC pt REG error "Not in *ess.dbg* buffer" 1 2 3 search-forward-regexp t match-string match-string-no-properties BOUND n] 5 (#$ . 50929) "p"]) #@143 Advance to the next reference and visit the location given by the reference. This is the value of `next-error-function' in *ess.dbg* buffers. (defalias 'ess--dbg-next-ref-function #[(n &optional reset) "\203 \n\306\223\210\307 \306 #\306\211\203C \310 \306\223\210\311 \306\223\210\312 @!\313\f!\210\214~\210\314b\210 ASy\210)\311 \306\223\210\315 \202V\316 \206I\314Y\203S\317\320!\202V\317\321!*\207" [reset ess--dbg-current-ref ess--dbg-last-ref-marker n dbuff loc nil ess--dbg-get-next-ref line-end-position line-beginning-position ess--dbg-find-buffer switch-to-buffer 1 back-to-indentation 0 error "Moved past first debug line" "Moved past last debug line" overlay-arrow-position ess--dbg-current-debug-position] 5 (#$ . 51934) "p"]) #@139 Keymap used to define commands for single key input mode. This commands are triggered by `ess-electric-debug' . \{ess-electric-debug-map} (defvar ess-electric-debug-map (byte-code "\301 \302\303\304#\210\302\305\306#\210\302\307\310#\210\302\311\312#\210\302\313\314#\210\302\315\316#\210)\207" [map make-sparse-keymap define-key "c" ess-debug-command-continue "C" ess-debug-command-continue-multi "n" ess-debug-command-next "N" ess-debug-command-next-multi "q" ess-debug-command-quit "u" ess-debug-command-up] 4) (#$ . 52696)) (make-obsolete-variable 'ess-electric-debug-map nil "ESS 13.05") (defalias 'ess--debug-keys-message-string #[(&optional map) "\206 \303\304\305\306\307#!)\207" [map ess-debug-minor-mode-map overriding-local-map substitute-command-keys mapconcat identity ("(\\[ess-debug-command-continue])cont" "(\\[ess-debug-command-continue-multi])cont-multi" "(\\[ess-debug-command-next])next" "(\\[ess-debug-command-next-multi])next-multi" "(\\[ess-debug-command-up])up" "(\\[ess-debug-command-quit])quit") " "] 5]) #@598 Call commands defined in `ess-electric-debug-map'. Single-key input commands are those that once invoked do not requre the prefix command for subsequent invocation. For example, if the prefix key is 'C-c C-t' and `ess-debug-command-next' is bound to 'n' and `ess-debug-command-continue' is bound to 'c' then 'C-c C-t n n c' executes `ess-debug-command-next' twice and `ess-debug-command-continue' once. Any other input not defined in `ess-electric-debug-map' will cause the exit from single-key input mode. If WAIT is t, wait for next input and ignore the keystroke which triggered the command. (defalias 'ess-electric-debug #[(&optional wait) "\306!\n\307\310 !\"\311\211\204%\f\204%\312\313\314\315 !\"\202d\2042\f\2051\f !\204X\307\310\316 !\211!\"\211\203X\f !\317\320!\210\321\322!?\211\2037\204c B -\207" [ess-electric-debug-map help-mess last-command-event ev command out ess--debug-keys-message-string lookup-key vector nil message "%s is undefined" key-description this-command-keys read-event sleep-for 0.01 ess-process-get dbg-active exit wait unread-command-events] 6 (#$ . 53746) nil]) (byte-code "\300\301\302\303#\210\304\301\302\305#\210\304\302\303\305#\207" [defalias ess-singlekey-debug ess-electric-debug nil make-obsolete "ESS 13.05"] 4) #@297 Call commands defined in `ess-electric-selection-map'. Single-key input commands are those, which once executed do not requre the prefix command for subsequent invocation. See `ess-electric-debug' for more. If WAIT is t, wait for next input and ignore the keystroke which triggered the command. (defalias 'ess-electric-selection #[(&optional wait) "\306\n\307 !\"\310\211\204 \204 \311\312\313\314 !\"\202\\\204- \205, ! \204Q\306\n\307\315\316!\211!\"\211\203Q !\317\320!\210\321\322!?\211\2031 \204[ B\f,\207" [last-command-event ev ess-electric-selection-map command out exit lookup-key vector nil message "%s is undefined" key-description this-command-keys read-event "Selection: " sleep-for 0.01 ess-process-get is-recover wait unread-command-events] 6 (#$ . 55050) nil]) (make-obsolete 'ess-singlekey-selection 'ess-electric-selection "ESS 13.05") #@114 Digit commands in selection mode. If supplied, EV must be a proper key event or a string representing the digit. (defalias 'ess-debug-command-digit #[(&optional ev) "\306 \210\307 \204\f\310\311!\210\204 ;\203\202 \312\313!!\314 !\315\316\f!!\317\211$%\317&r\320\f!q\210 b\210\212\321\322'\323#\203f\324\325\326!!\211&\327V\203f\330\331\332\333\334&\335\336#\"\317\323\n\317&)\337\340 \"\211%\n\341Qc\210\342\f\n\"\210\316\f!\343 \317\223.\207" [ev last-command-event ev-char ess-current-process-name proc mark-pos ess-force-buffer-current ess--dbg-is-recover-p error "Recover is not active" char-to-string event-basic-type get-process marker-position process-mark nil process-buffer re-search-backward "\\(?: \\|^\\)\\([0-9]+\\):[^ ]+Selection:" t string-to-number match-string 1 9 ess-completing-read "Selection" mapcar number-to-string number-sequence 0 -1 delete-and-extract-region point-at-bol "\n" ess-send-string max-char comint-prompt-read-only prompt depth ess--tb-last-input] 9 (#$ . 55942) nil]) #@61 Step next in debug mode. Equivalent to 'n' at the R prompt. (defalias 'ess-debug-command-next #[(&optional ev) "\300 \210\301 \204\f\302\303!\210\304 \203\305\306 \307\"\207\305\306 \310\"\207" [ess-force-buffer-current ess--dbg-is-active-p error "Debugger is not active" ess--dbg-is-recover-p ess-send-string ess-get-process "0" "n"] 3 (#$ . 56982) nil]) #@47 Ask for N and step (n) N times in debug mode. (defalias 'ess-debug-command-next-multi #[(&optional ev N) "\302 \210\303 \204\f\304\305!\210\206\306\307\310\"\311\303 \203.\312V\203.\313 \210\314 \210S\202*\313 \207" [N ess--suppress-next-output\? ess-force-buffer-current ess--dbg-is-active-p error "Debugger is not active" read-number "Number of steps: " 10 t 0 ess-debug-command-next ess-wait-for-process] 3 (#$ . 57347) nil]) #@52 Ask for N, and continue (c) N times in debug mode. (defalias 'ess-debug-command-continue-multi #[(&optional ev N) "\302 \210\303 \204\f\304\305!\210\206\306\307\310\"\311\303 \203.\312V\203.\313 \210\314 \210S\202*\313 \207" [N ess--suppress-next-output\? ess-force-buffer-current ess--dbg-is-active-p error "Debugger is not active" read-number "Number of continuations: " 10 t 1 ess-debug-command-continue ess-wait-for-process] 3 (#$ . 57795) nil]) #@60 Step up one call frame. Equivalent to 'n' at the R prompt. (defalias 'ess-debug-command-up #[(&optional ev) "\301 \210\302 \204\f\303\304!\210\305\306\307 \")\207" [up-cmd ess-force-buffer-current ess--dbg-is-active-p error "Debugger is not active" "try(browserSetDebug(), silent=T)\nc\n" ess-send-string ess-get-process] 3 (#$ . 58264) nil]) #@74 Quits the browser/debug in R process. Equivalent of `Q' at the R prompt. (defalias 'ess-debug-command-quit #[(&optional ev) "\300 \210\301 \203\302\303 \304\305#\207\306 \203\302\303 \307\305#\207\310\311!\207" [ess-force-buffer-current ess--dbg-is-recover-p ess-send-string ess-get-process "0" t ess--dbg-is-active-p "Q" error "Debugger is not active"] 4 (#$ . 58616) nil]) #@65 Continue the code execution. Equivalent of `c' at the R prompt. (defalias 'ess-debug-command-continue #[(&optional ev) "\300 \210\301 \203\302\303 \304\"\207\305 \203\302\303 \306\"\207\307\310!\207" [ess-force-buffer-current ess--dbg-is-recover-p ess-send-string ess-get-process "0" ess--dbg-is-active-p "c" error "Debugger is not active"] 3 (#$ . 59001) nil]) #@119 Move `ess--tb-last-input' marker to the process mark. ARGS are ignored to allow using this function in process hooks. (defalias 'ess-tracebug-set-last-input #[(&rest ARGS) "\304!\305\306 !!r\307 !q\210\310\303!\205\212\n\nb\210\311 )+\207" [ess-local-process-name last-input-process last-input-mark ess--tb-last-input get-process copy-marker process-mark process-buffer local-variable-p inferior-ess-move-last-input-overlay] 3 (#$ . 59374)]) (byte-code "\300\301\302\303\304\305%\210\300\306\307\310\304\305%\210\300\311\312\313\304\305%\210\300\314\315\316\304\305%\207" [custom-declare-face ess-bp-fringe-inactive-face ((((class color) (background light) (min-colors 88)) (:foreground "DimGray")) (((class color) (background dark) (min-colors 88)) (:foreground "LightGray")) (((background light) (min-colors 8)) (:foreground "blue")) (((background dark) (min-colors 8)) (:foreground "cyan"))) "Face used to highlight inactive breakpoints." :group ess-debug ess-bp-fringe-logger-face ((((class color) (background light) (min-colors 88)) (:foreground "dark red")) (((class color) (background dark) (min-colors 88)) (:foreground "tomato1")) (((background light) (min-colors 8)) (:foreground "blue")) (((background dark) (min-colors 8)) (:foreground "cyan"))) "Face used to highlight loggers." ess-bp-fringe-browser-face ((((class color) (background light) (min-colors 88)) (:foreground "medium blue")) (((class color) (background dark) (min-colors 88)) (:foreground "deep sky blue")) (((background light) (min-colors 8)) (:foreground "blue")) (((background dark) (min-colors 8)) (:foreground "cyan"))) "Face used to highlight 'browser' breakpoints." ess-bp-fringe-recover-face ((((class color) (background light) (min-colors 88)) (:foreground "dark magenta")) (((class color) (background dark) (min-colors 88)) (:foreground "magenta")) (((background light) (min-colors 8)) (:foreground "magenta")) (((background dark) (min-colors 8)) (:foreground "magenta"))) "Face used to highlight 'recover' breakpoints fringe."] 6) (defalias 'ess--bp-pipe-block-p #[nil "\212\302\211\303y\210\304\210\305\306\307 \"+\207" [inhibit-field-text-motion inhibit-point-motion-hooks t -1 nil looking-back "\\%>\\%[ ]*" point-at-bol] 3]) (defvar ess--bp-identifier 1) (byte-code "\300\301\302\303\304\305\306\307&\210\300\310\311\312\304\305\306\313&\210\300\314\315\316\304\305\306\313&\210\300\317\320\321\304\305\306\313&\207" [custom-declare-variable ess-bp-type-spec-alist '((pipe ".ess_pipe_browser() %%>%%" "B %>%\n" filled-square ess-bp-fringe-browser-face ess--bp-pipe-block-p) (browser "browser(expr=is.null(.ESSBP.[[%s]]));" "B>\n" filled-square ess-bp-fringe-browser-face) (recover "recover()" "R>\n" filled-square ess-bp-fringe-recover-face)) "List of lists of breakpoint types.\nEach sublist has five elements:\n1- symbol giving the name of specification\n2- R expression to be inserted (%s is substituted with unique identifier).\n3- string to be displayed instead of the expression\n4- fringe bitmap to use\n5- face for fringe and displayed string\n6- optional, a function which should return nil if this BP doesn't apply to current context." :group ess-debug :type (alist :key-type symbol :value-type (group string string symbol face)) ess-bp-inactive-spec '(inactive "##" filled-square ess-bp-fringe-inactive-face) "List giving the inactive breakpoint specifications." list ess-bp-conditional-spec '(conditional "browser(expr={%s})" "CB[ %s ]>\n" question-mark ess-bp-fringe-browser-face) "List giving the conditional breakpoint specifications.\nList format is identical to that of the elements of\n`ess-bp-type-spec-alist'. User is asked for the conditional\nexpression to be replaced instead of %s in the second and third\nelements of the specifications." ess-bp-logger-spec '(logger ".ess_log_eval('%s')" "L[ \"%s\" ]>\n" hollow-square ess-bp-fringe-logger-face) "List giving the loggers specifications.\nList format is identical to that of `ess-bp-type-spec-alist'."] 8) #@21 Get specs for TYPE. (defalias 'ess-bp-get-bp-specs #[(type &optional condition no-error) "\306\267\202X\307 ! G\310=\203\311\nA\312\nA@ \"\240\210\nAA\312\nAA@ \"\240\210\n)C\202[\307\f! G\310=\203<\313\nA\312\nA@ \"\240\210\nAA\312\nAA@ \"\240\210\n)C\202[\307 !\314\"\206o?\205o\315\316\")\207" [type ess-bp-conditional-spec tl condition ess-bp-logger-spec ess-bp-type-spec-alist #s(hash-table size 2 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (conditional 6 logger 47)) copy-sequence 0 "TRUE" format "watchLog" assoc error "Undefined breakpoint type %s" spec-alist no-error] 4 (#$ . 63367)]) #@89 Set breakpoint for the current line. Returns the beginning position of the hidden text. (defalias 'ess-bp-create #[(type &optional condition no-error) "\306 \n#\307 \310 8\311 8$\312 8%\313\314&T\211&\"\313 A@\"\315P\211'G(\313\316 @ #\211)G*\317+ \205\235\f\211T\317\223\210\320%\321$\322$%%\320'\323\324\325\326\324\327\323\330\331\332\333\334\335%&'\320\336) $\337$\323\324\327\323\332\333\340& )\341 \210\342 \210`+)'Pc\210\343 \210\fSb\210+. \207" [type condition no-error bp-specs init-pos fringe-bitmap ess-bp-get-bp-specs point-marker 3 4 2 format "\"@%s@\"" "##:ess-bp-end:##\n" "##:ess-bp-start::%s@%s:##\n" nil propertize face font-lock-face ess-bp t bp-id bp-active intangible rear-nonsticky (intangible ess-bp bp-type) bp-type bp-substring command display ess-tracebug--propertize "*" dummy ess-tracebug--set-left-margin back-to-indentation indent-for-tab-command fringe-face displ-string ess--bp-identifier bp-command bp-length dummy-string dummy-length insertion-pos] 19 (#$ . 64010)]) #@39 Internal function to recreate all bp. (defalias 'ess-bp-recreate-all #[nil "\212\214\306 \307\211\307\310\216~\210eb\210\311\312\313\307#\205\353\314\224\314\225\315\224\315\225\316\317!\316\315!\313\211\211)*+,-.\320\321*\"\203P\316\317*\"\316\314*\"*\320\322)\"\203`\316\323)\"\202f/T\211/\324*!*\325*\f\307#0\317081\326082\3150830\203\346\3271\3302\3312%1\332,+\333\307\334\335\333\336\337\340*\341\342\3431\257#\2104\203\303\343\34432ED\202\320\343\345\327\346\3312\3302%DD\332.-\347 \333\307\335\333\340*\341\350\257\"#\210. \202.\207" [#1=#:modified buffer-undo-list inhibit-read-only inhibit-modification-hooks condition dum-props buffer-modified-p t #[nil "?\205\301\302!\207" [#1# restore-buffer-modified-p nil] 2] re-search-forward "\\(##:ess-bp-start::\\(.*\\):##\n\\)\\(.+##:ess-bp-end:##\n\\)" nil 1 3 match-string 2 string-match "^\\(\\w+\\)@\\(.*\\)\\'" "\"@[0-9]+@\"" 0 intern ess-bp-get-bp-specs 4 propertize face font-lock-face add-text-properties ess-bp bp-id intangible rear-nonsticky (intangible ess-bp bp-type) bp-type bp-substring command display left-fringe (margin left-margin) "dummy" append dummy bp-command type comm-end comm-beg dum-end dum-beg ess--bp-identifier bp-specs displ-string fringe-face fringe-bitmap window-system] 18 (#$ . 65054)]) (add-hook 'R-mode-hook 'ess-bp-recreate-all) #@318 Get nearby break points. Return the cons (beg . end) of breakpoint limit points closest to the current position. Only currently visible region of the buffer is searched. This command is intended for use in interactive commands like `ess-bp-toggle-state' and `ess-bp-kill'. Use `ess-bp-previous-position' in programs. (defalias 'ess-bp-get-bp-position-nearby #[nil "\305`S\306\"\203\f`\202\307`\306\310\311 $\305`\306\"\203`\202&\312`\306\310\313 $\310\211\310\311 =\204<\314`!\314!Z \313 =\204K\314 !\314`!Z \203q\f\203q \fW\203e\307\306\310\311 $B\202\216 \312 \306\310\313 $B\202\216 \203\201\307\306\310\311 $B\202\216\f\205\216 \312 \306\310\313 $B-\207" [pos-end pos-start pos dist-up dist-down get-char-property ess-bp previous-single-property-change nil window-start next-single-property-change window-end line-number-at-pos] 7 (#$ . 66450) nil]) #@133 Get previous breakpoints. Return the cons (beg . end) of breakpoint limit points closest to the current position, nil if not found. (defalias 'ess-bp-previous-position #[nil "\301`S\302\"\203\f`\202\303`\302\"\211\205\303\302\"B)\207" [pos-end get-char-property ess-bp previous-single-property-change] 4 (#$ . 67340)]) #@19 Set a breakpoint. (defalias 'ess-bp-set #[nil "\306 \211\205\307 AX\205\310 @Y\n\f\311 !\312\f \203?\313@\314\"\211\f \236 \235A\211\2049\n\315 \210\316 \210\317 @8\203V\317 @8 \204V \210 A\202? \211A\242\f\320\f@!\210\311\321\322\323\"!\211!=\203\247 \204z\n\315 \210\317 @8\203\224\317 @8 \204\224 \210 A\202} \211A\242\f\320\f@!\210\316 \210\202c B\211.\207" [pos same-line ess-bp-type-spec-alist types last-command-event ev ess-bp-get-bp-position-nearby point-at-bol point-at-eol event-basic-type nil get-text-property bp-type ess-bp-kill indent-for-tab-command 5 ess-bp-create read-event format "'%c' to cycle" com-char unread-command-events] 6 (#$ . 67673) nil]) (defalias 'ess-bp-set-conditional #[(condition) "\301\302\"\210\303 \207" [condition ess-bp-create conditional indent-for-tab-command] 3 nil "sBreakpoint condition: "]) (defalias 'ess-bp-set-logger #[(name) "\301\302\"\210\303 \207" [name ess-bp-create logger indent-for-tab-command] 3 nil "sLogger name : "]) #@31 Remove the breakpoint nearby. (defalias 'ess-bp-kill #[(&optional interactive\?) "\303 \304 \211\204\n\205=\305\306!\202=`\307 =\203`Sb\210`\310\223\210 @b\210 @ A|\210\311 \210b\210`\307 =\205=\310u*\207" [init-pos pos interactive\? ess-bp-get-bp-position-nearby make-marker message "No breakpoints nearby" point-at-eol nil indent-for-tab-command] 4 (#$ . 68707) "p"]) #@43 Delete all breakpoints in current buffer. (defalias 'ess-bp-kill-all #[nil "\303\304 \305 `T\305\223\210\212db\210\306 \211\203+@b\210@A|\210\307 \210\nT\202\n\310=\2038\311\312!\210\202=\311\313\n\"\210) Sb+\207" [pos init-pos count 0 make-marker nil ess-bp-previous-position indent-for-tab-command 1 message "Killed 1 breakpoint" "Killed %d breakpoint(s)"] 3 (#$ . 69094) nil]) #@395 Toggle the breakpoint between active and inactive states. For standard breakpoints, the effect of this command is immediate, that is you don't need to source your code and it works even in the process of debugging. For loggers, recover and conditional breakpoints this command just comments the breakpoint in the source file. If there is no active R session, this command triggers an error. (defalias 'ess-bp-toggle-state #[nil "\203\n\306!\204\307\310!\210\212\311 \312 8\313\314\211\211\211\211 !\211\"\2040\315\316!\202\233\"@b\210\317\"A\320\314\"@$\321\n\322\"\nb\210\321\n\323\"\203r\324\"@\n\325\326\327 8!E$\210\324\n\"A\323\314$\210\330\331\332\"!\202\233\333\334`\335\"#\"\324\n\"A\323\313$\210\324\"@\n\325\326\312 8\336 8E$\210\330\331\337\"!. \207" [ess-local-process-name ess-bp-inactive-spec beg-pos-command bp-specs end-pos-comment beg-pos-dummy get-process error "No R session in this buffer" ess-bp-get-bp-position-nearby 3 t nil message "No breakpoints in the visible region" previous-single-property-change bp-substring get-char-property bp-id bp-active put-text-property display left-fringe 2 ess-command format ".ESSBP.[[%s]] <- TRUE\n" assoc get-text-property bp-type 4 ".ESSBP.[[%s]] <- NULL\n" inhibit-point-motion-hooks fringe-face pos ess-bp-type-spec-alist] 9 (#$ . 69494) nil]) #@23 Make bp text visible. (defalias 'ess-bp-make-visible #[nil "\301 \302@A\303\304D#)\207" [pos ess-bp-get-bp-position-nearby set-text-properties display nil] 5 (#$ . 70845) nil]) #@23 Goto next breakpoint. (defalias 'ess-bp-next #[nil "`\302`\303\"\203\212b\210\304`S\303\"\203\302\303\")\203&b\202)\305\306!*\207" [bp-pos cur-pos next-single-property-change ess-bp get-text-property message "No breakpoints found"] 4 (#$ . 71031) nil]) #@27 Goto previous breakpoint. (defalias 'ess-bp-previous #[nil "`\302`\303\"\203\302\303\"\206b\202\304\305!*\207" [bp-pos cur-pos previous-single-property-change ess-bp message "No breakpoints before the point found"] 4 (#$ . 71304) nil]) (defvar ess-watch-command ".ess_watch_eval()\n") (byte-code "\300\301!\203\301\302\303\304\211\305%\210\304\207" [fboundp define-fringe-bitmap current-watch-bar [12] nil (top t)] 6) #@35 Set the margin on non-X displays. (defalias 'ess-tracebug--set-left-margin #[nil "?\205 \302U\205\303\304\305 p\"\207" [window-system left-margin-width 0 1 set-window-buffer selected-window] 3 (#$ . 71741)]) #@57 Major mode in `ess-watch' window. \{ess-watch-mode-map} (defalias 'ess-watch-mode #[nil "\306\307 ]\310\311\312\313#\314 \210\315 \210\316\302!\210\317\320 !\210\321\322 P\323 \210\324ed\" \325 \326#\210\325 \327\330#\210\331 !\210\332\333\334\335#\205L!\"\336\306!*\207" [dummy-string cur-block revert-buffer-function ess-watch-mode-map major-mode ess-current-process-name 1 ess-watch-block-at-point ess-tracebug--propertize "|" current-watch-bar font-lock-keyword-face kill-all-local-variables ess-tracebug--set-left-margin make-local-variable ess-watch-revert-buffer use-local-map ess-watch-mode "watch " turn-on-font-lock make-overlay overlay-put line-prefix face ess-watch-current-block-face ess-watch-set-current require face-remap nil t text-scale-mode mode-name ess-watch-current-block-overlay ess-watch-scale-amount text-scale-mode-amount] 5 (#$ . 71961)]) #@150 Run `ess-watch' mode on R objects. This is the trigger function. See documentation of `ess-watch-mode' for more information. \{ess-watch-mode-map} (defalias 'ess-watch #[nil "\306 \210\307! \nJ\211q\210\310 !\210\f\311 \210\312 !\210\313 !\210\314\315 \316\"+\207" [ess-watch-buffer ess-local-process-name ess-local-customize-alist alist pname wbuf ess-force-buffer-current get-buffer-create ess-setq-vars-local ess-watch-mode ess-watch-refresh-buffer-visibly pop-to-buffer set-window-dedicated-p selected-window 1] 4 (#$ . 72847) nil]) #@235 Eval `ess-watch-command' and direct the output into the WBUF. Call `ess-watch-buffer-show' to make the buffer visible, without selecting it. This function is used for refreshing the watch window after each step during the debugging. (defalias 'ess-watch-refresh-buffer-visibly #[(wbuf &optional sleep no-prompt-check) "\306!\210 rq\210\307\310 ]\311\n\203\n\312 $\210eb\210\313 \314 T|\210\315 !\210\316\317!`\"\210\320\211+\207" [wbuf ess-local-process-name pname curr-block buffer-read-only ess-watch-command ess-watch-buffer-show 1 ess-watch-block-at-point nil ess-command point-at-bol point-at-eol ess-watch-set-current set-window-point get-buffer-window t sleep no-prompt-check] 5 (#$ . 73398) nil]) #@402 Make watch buffer BUFFER-OR-NAME visible, and position acordingly. If already visible, do nothing. Currently the only positioning rule implemented is to split the R process window in half. The behavior is controlled by `split-window-sensibly' with parameters `split-height-threshold' and `split-width-threshold' replaced by `ess-watch-height-threshold' and `ess-watch-width-threshold' respectively. (defalias 'ess-watch-buffer-show #[(buffer-or-name) "\306\307\"?\2057\310 r\311\216\312\313!\210\n\206 \f\206 \314\315 !\211\2031\316\"\2025\317!.\207" [ess-watch-buffer save-selected-window--state ess-watch-width-threshold split-width-threshold ess-watch-height-threshold split-height-threshold get-buffer-window visible internal--before-save-selected-window #[nil "\301!\207" [save-selected-window--state internal--after-save-selected-window] 2] ess-switch-to-ESS t split-window-sensibly selected-window set-window-buffer display-buffer win buffer-or-name] 4 (#$ . 74126) nil]) #@77 Update the watch buffer. Arguments IGNORE and NOCONFIRM currently not used. (defalias 'ess-watch-revert-buffer #[(ignore noconfirm) "\300 \210\301\302!\207" [ess-watch message "Watch reverted"] 2 (#$ . 75134)]) (custom-declare-face 'ess-watch-current-block-face '((default (:inherit highlight))) "Face used to highlight current watch block." :group 'ess-debug) #@61 String indicating the beginning of a block in watch buffer. (defvar ess-watch-start-block "@----" (#$ . 75501)) #@69 String indicating the beginning of an R expression in watch buffer. (defvar ess-watch-start-expression "@---:" (#$ . 75619)) #@57 Keymap for the *R watch* buffer. \{ess-watch-mode-map} (defvar ess-watch-help nil (#$ . 75750)) #@22 Help on `ess-watch'. (defalias 'ess-watch-help #[nil "\300\301!\207" [describe-variable ess-watch-help] 2 (#$ . 75853) nil]) #@52 Return start and end positions of the watch block. (defalias 'ess-watch-block-limits-at-point #[nil "\212`\304\211\304\210\305 \304\306#\203`\202e\nb\210\307 \210\310 \304\306#\203+\311\224\202,d ,D\207" [end-pos start-pos curr ess-watch-start-block nil re-search-backward t beginning-of-line re-search-forward 0] 4 (#$ . 75984) nil]) #@66 Return the current block's order count, 0 if no block was found. (defalias 'ess-watch-block-at-point #[nil "\212`\303eb\210\304\n \305#\203T\202+\207" [count cur-point ess-watch-start-block 0 re-search-forward t] 4 (#$ . 76338)]) #@72 Move the overlay over the block with count NR in current watch buffer. (defalias 'ess-watch-set-current #[(nr) "eb\210\303\304\305 $\210\306\225b\210\307\310\n\311 #\207" [ess-watch-start-expression nr ess-watch-current-block-overlay re-search-forward nil t 0 apply move-overlay ess-watch-block-limits-at-point] 5 (#$ . 76583)]) #@293 Create an alist of expressions from the current watch buffer. Each element of assoc list is of the form (pos name expr) where pos is an unique integer identifying watch blocks by position, name is a string giving the name of expression block, expr is a string giving the actual R expression. (defalias 'ess-watch--make-alist #[nil "\212\306\307Q\306\n\310Q\311 \312 \313\260\314\315\211\315eb\210\316\f\315\317#\203R T\320\321!\320\322!\323!\314=\204B\324\325 EC\"\202!.\207" [ess-watch-start-block reg-name ess-watch-start-expression reg-expr reg-all pos "^" " *\\(\\S-*\\).*$" "\\s-*\\(.*\\)$" "\\(" "\\)\n\\(" "\\)" 0 nil re-search-forward t match-string-no-properties 2 4 string-to-number "" append wal name expr] 6 (#$ . 76920) nil]) #@221 Return a string of the form 'assign(".ess_watch_expressions", list(a = parse(expr_a), b= parse(expr_b)), envir = .GlobalEnv)' ready to be send to R process. AL is an association list as return by `ess-watch--make-alist' (defalias 'ess-watch--parse-assoc #[(al) "\301\302\303\304#\305Q\207" [al ".ess_watch_assign_expressions(list(" mapconcat #[(el) "A@G\301V\203\302A@\303AA@\304\260\207\305AA@\304Q\207" [el 0 "`" "` = parse(text = '" "')" "parse(text = '"] 5] ", " "))\n"] 5 (#$ . 77701)]) (defalias 'ess-watch--install-\.ess_watch_expressions #[nil "\301\302!\303\304 !\"\210\305\306!\207" [ess-current-process-name process-send-string ess-get-process ess-watch--parse-assoc ess-watch--make-alist sleep-for 0.05] 4 nil nil]) #@155 Quit (kill) the watch buffer. If watch buffer exists, it is displayed during the debug process. The only way to avoid the display, is to kill the buffer. (defalias 'ess-watch-quit #[nil "\300 \207" [kill-buffer] 1 (#$ . 78445) nil]) #@113 Move the overlay over the next block. Optional N if supplied gives the number of steps forward `backward-char'. (defalias 'ess-watch-next-block #[(&optional n) "\303!\304 !b\210\305\n\306\307$\204eb\210\305\n\306\307\310$\210\311\312 \313 #\207" [n ess-watch-current-block-overlay ess-watch-start-expression prefix-numeric-value overlay-end re-search-forward nil t 1 apply move-overlay ess-watch-block-limits-at-point] 5 (#$ . 78685) "P"]) #@102 Move the overlay over the previous block. Optional N if supplied gives the number of backward steps. (defalias 'ess-watch-previous-block #[(&optional n) "\303!\304 !b\210\305\n\306\307$\204db\210\305\n\306\307\310$\210\311\225b\210\312\313 \314 #\207" [n ess-watch-current-block-overlay ess-watch-start-expression prefix-numeric-value overlay-start re-search-backward nil t 1 0 apply move-overlay ess-watch-block-limits-at-point] 5 (#$ . 79137) "P"]) #@44 Rename the currently selected watch block. (defalias 'ess-watch-rename #[nil "\306\210\307\306\310#\204\311\312!\210\313P\306\211\211\314\f\315 \310#\204&\311\316!\210\317\320!\320\224\320\225\nb\210\321\322 \323Q\306\211 $\306\n |\210 c\210\310\324 \210\325p!,\207" [ess-watch-start-block end start name reg-name buffer-read-only nil re-search-backward t error "Can not find a watch block" " *\\(\\S-*\\).*$" re-search-forward point-at-eol "Can not find the name substring in the current watch block " match-string-no-properties 1 read-string "New name (" "): " ess-watch--install-\.ess_watch_expressions ess-watch-refresh-buffer-visibly] 5 (#$ . 79599) nil]) #@71 Edit in the minibuffer the R expression from the current watch block. (defalias 'ess-watch-edit-expression #[nil "\306\210\307\306\310#\204\311\312!\210 \313P\306\211\211\314 \306\315#\204%\311\316!\210\317\310!\310\224\310\225 b\210\320\321\f\306\f$\306 \n|\210\fc\210\315\322 \210\323p!,\207" [ess-watch-start-block ess-watch-start-expression end start expr reg-expr nil re-search-backward 1 error "Can not find a watch block" " *\\(.*\\)$" re-search-forward t "Can not find an expression string in the watch block" match-string-no-properties read-string "New expression: " ess-watch--install-\.ess_watch_expressions ess-watch-refresh-buffer-visibly buffer-read-only] 5 (#$ . 80282) nil]) #@94 Ask for new R expression and name and append it to the end of the list of watch expressions. (defalias 'ess-watch-add #[nil "\306\211\211db\210\307\310 T!\211\311\312\306\211\313$\306\314\f\315\316 \315 \314\260 c\210\317\320 +\207" [name expr nr buffer-read-only ess-watch-start-block ess-watch-start-expression nil number-to-string ess-watch-block-at-point read-string "New expression: " "\"Empty watch!\"" "\n" " " " -@\n" t ess-watch--install-\.ess_watch_expressions] 10 (#$ . 80996) nil]) #@82 Ask for new R expression and name and insert it in front of current watch block. (defalias 'ess-watch-insert #[nil "\306\211\211\307\310 !\211\311\312\306\211\313$\314 \306\315#\210\306\316 \317\320 \317 \316\260 c\210\321\322 +\207" [name expr nr ess-watch-start-block buffer-read-only ess-watch-start-expression nil number-to-string ess-watch-block-at-point read-string "New expression: " "\"Empty watch!\"" re-search-backward 1 "\n" " " " -@\n" t ess-watch--install-\.ess_watch_expressions] 10 (#$ . 81505) nil]) #@28 Move the current block up. (defalias 'ess-watch-move-up #[nil "\304 \305\211\306V\205#\305\307\310\311 \"\312 \305\313\306$\210c\210\314 \210\313\211*\207" [wbl nr buffer-read-only ess-watch-start-block ess-watch-block-at-point nil 1 apply delete-and-extract-region ess-watch-block-limits-at-point re-search-backward t ess-watch--install-\.ess_watch_expressions] 6 (#$ . 82036) nil]) #@30 Move the current block down. (defalias 'ess-watch-move-down #[nil "\305 \212db\210\305 )\306\211 W\2054\306\307\310\311 \"\306\210\312\f\306\313\314$\203+\315\224b\210c\210\316 \210\313\211+\207" [wbl nr-all nr buffer-read-only ess-watch-start-block ess-watch-block-at-point nil apply delete-and-extract-region ess-watch-block-limits-at-point re-search-forward t 1 0 ess-watch--install-\.ess_watch_expressions] 6 (#$ . 82433) nil]) #@25 Kill the current block. (defalias 'ess-watch-kill #[nil "\301\302\303\304 \"\210\305 \207" [buffer-read-only nil apply delete-region ess-watch-block-limits-at-point ess-watch--install-\.ess_watch_expressions] 3 (#$ . 82881) nil]) #@39 Get signatures for the method METHOD. (defalias 'ess--dbg-get-signatures #[(method) "\306\307!\310\211\212\311\312\313 \"!\210\314\315 \316Q\n\"\210\317\f!\210\317 !\210\311\320!\210\nq\210eb\210\321\322\310\323#\204>\311\324!\210\325\326 !\210\202O\321\327\310\323#\203O\330\331! B\202>) +\207" [curr-point signatures tbuffer method ess-local-process-name ess-current-process-name get-buffer-create " *ess-command-output*" nil ess-if-verbose-write format "ess-get-signatures*(%s).. " ess-command "showMethods(\"" "\")\n" message " [ok] ..\n" re-search-forward "Function:" t "not seeing \"Function:\".. \n" error buffer-string "^.+$" match-string-no-properties 0] 4 (#$ . 83118)]) #@150 Set the debugging flag on a function. Ask the user for a function and if it turns to be generic, ask for signature and trace it with browser tracer. (defalias 'ess-debug-flag-for-debugging #[nil "\306\307!\210\310\311!\312 \313 \203\314\315 \"\202\316!\317 \211\205Y\320 !\n\321\211*+ :\203L @*\322\f*\"\203E*+B+ A\211\202.+\237+,\323,\324\"@*-\325\326\n\321\211\211\211-\206h &.\321\211/0\3211\327\314\330.\"!\203\276\212\325\331.\332Q\333.!\321\334\321\211\335&\211/\335\232\203\245\336\314\337.\"\"\210\202\260\336\314\340./#\"\210rq\210\341\342ed\"!*\202\356\327\314\343.\"!\203\347\313\314\344.\"!\345\321\346\347\n\"\"\325\314\350.\".\nB\321\334$.\336\314\351.\"!. \207" [tbuffer pkg all-functions obj-at-point reg #1=#:--cl-var-- ess-force-buffer-current "Process to use: " get-buffer-create " *ess-command-output*" ess-r-package-name ess-get-words-from-vector format ".ess_all_functions(c('%s'))\n" ".ess_all_functions()\n" ess-helpobjs-at-point--read-obj regexp-quote nil string-match sort #[(a b) "G GW\207" [a b] 2] ess-completing-read "Debug" ess-boolean-command "as.character(isGeneric('%s'))\n" "Method for generic '" "'" ess--dbg-get-signatures t "*default*" ess-command "trace('%s', tracer = browser)\n" "trace('%s', tracer = browser, signature = c('%s'))\n" message buffer-substring-no-properties "as.character(.knownS3Generics['%s'])\n" "local({gens<-methods('%s');as.character(gens[attr(gens, 'info')$visible])})\n" delq mapcar #[(el) "\301\302\211GSH\"?\205 \207" [el char-equal 42] 4] "Method for S3 generic '%s'" ".ess_dbg_flag_for_debuging('%s')\n" el #2=#:--cl-var-- matches default ufunc signature default-string out-message] 9 (#$ . 83814) nil]) #@75 Prompt for the debugged/traced function or method and undebug/untrace it. (defalias 'ess-debug-unflag-for-debugging #[nil "\305\306!\307\310!\311\211\211 G\312=\203\313\202h G\314=\203& @\202'\315\316\317 \311\320\311\211&\211\315\232\203H\321\322\323\324 \325#\326Q\f\"\210\202P\321\327\330 \"\f\"\210r\fq\210d\314U\203b\327\331 \"\202g\332ed\")\333\n!-\207" [def-val fun out-message debugged tbuffer get-buffer-create " *ess-command-output*" ess-get-words-from-vector ".ess_dbg_getTracedAndDebugged()\n" nil 0 "No debugged or traced functions/methods found" 1 "*ALL*" ess-completing-read "Undebug" t ess-command ".ess_dbg_UndebugALL(c(\"" mapconcat identity "\", \"" "\"))\n" format ".ess_dbg_UntraceOrUndebug(\"%s\")\n" "Undebugged '%s' " buffer-substring-no-properties message] 9 (#$ . 85553) nil]) (byte-code "\300\301\302\303\304$\210\305\301\304\"\210\300\306\307\303\304$\210\305\306\304\"\210\310\311\312\313#\210\310\314\315\313#\210\310\316\317\313#\210\310\320\304\313#\210\310\321\322\313#\210\310\323\324\313#\210\310\325\326\313#\210\310\327\330\313#\210\331\332\333\313#\210\331\334\335\313#\210\331\336\337\313#\210\331\340\341\313#\210\331\342\343\313#\210\331\344\345\313#\210\331\346\347\313#\210\331\350\351\313#\210\331\352\353\313#\210\331\354\355\313#\210\331\356\357\313#\210\331\360\361\313#\210\331\362\363\313#\210\310\364\365\313#\210\310\366\367\313#\210\370\371!\210\372\373!\207" [ad-add-advice delete-char (ess-delete-backward-char-intangible nil t (advice lambda nil "When deleting an intangible char, delete the whole intangible region.\nOnly do this when #chars is 1" (if (and (eq major-mode 'ess-mode) (= (ad-get-arg 0) 1) (get-text-property (point) 'intangible)) (progn (kill-region (point) (or (next-single-property-change (point) 'intangible) (point-max))) (indent-for-tab-command)) ad-do-it))) around nil ad-activate delete-backward-char (ess-delete-backward-char-intangible nil t (advice lambda nil "When deleting an intangible char, delete the whole intangible region.\nOnly do this when called interactively and #chars is 1" (if (and (eq major-mode 'ess-mode) (= (ad-get-arg 0) 1) (> (point) (point-min)) (get-text-property (1- (point)) 'intangible)) (progn (let ((beg (or (previous-single-property-change (point) 'intangible) (point-min)))) (kill-region beg (point)))) ad-do-it))) make-obsolete-variable ess-dbg-blink-ref-not-found-face ess-debug-blink-ref-not-found-face "ESS 13.05" ess-dbg-blink-same-ref-face ess-debug-blink-same-ref-face ess-dbg-current-debug-line-face ess-debug-current-debug-line-face ess-dbg-error-action ess-dbg-error-action-alist ess-debug-error-action-alist ess-dbg-blink-interval ess-debug-blink-interval ess-dbg-indicator ess-debug-indicator ess-dbg-ask-for-file ess-debug-ask-for-file make-obsolete ess-dbg-set-error-action ess-debug-set-error-action ess-dbg-toggle-error-action ess-debug-toggle-error-action ess-dbg-goto-input-event-marker ess-debug-goto-input-event-marker ess-dbg-goto-debug-point ess-debug-goto-debug-point ess-dbg-insert-in-forward-ring ess-debug-insert-in-forward-ring ess-dbg-start ess-debug-start ess-dbg-stop ess-debug-stop ess-dbg-command-digit ess-debug-command-digit ess-dbg-command-n ess-debug-command-next ess-dbg-command-Q ess-debug-command-quit ess-dbg-command-c ess-debug-command-continue ess-dbg-flag-for-debugging ess-debug-flag-for-debugging ess-dbg-unflag-for-debugging ess-debug-unflag-for-debugging ess-tb-last-input-fringe-face ess-tracebug-last-input-fringe-face ess-tb-next-error-function ess-tracebug-next-error-function ess-if-verbose-write "\n<- debug done" provide ess-tracebug] 5)