(let ((echo-len (- comint-last-input-end
comint-last-input-start)))
;; Wait for all input to be echoed:
+
(while (and (> (+ comint-last-input-end echo-len)
(point-max))
(accept-process-output proc)
;; (+ comint-last-input-start
;; (- (point-max) comint-last-input-end))
nil comint-last-input-end (point-max)))))
+
(if (and
(<= (+ comint-last-input-end echo-len)
(point-max))
;; Certain parts of the text to be deleted may have
;; been mistaken for prompts. We have to prevent
;; problems when `comint-prompt-read-only' is non-nil.
+
(let ((inhibit-read-only t))
(delete-region comint-last-input-end
(+ comint-last-input-end echo-len))
(goto-char comint-last-input-end)
(comint-update-fence)))))))
+
;; This used to call comint-output-filter-functions,
;; but that scrolled the buffer in undesirable ways.
(run-hook-with-args 'comint-output-filter-functions "")))))
(set-marker comint-insert-previous-argument-last-start-pos (point))
;; Insert the argument.
(let ((input-string (comint-previous-input-string 0)))
- (when (string-match "[ \t\n]*&" input-string)
+ (when (string-match "[ \t\n]*&[ \t\n]*$" input-string)
;; strip terminating '&'
(setq input-string (substring input-string 0 (match-beginning 0))))
(insert (comint-arguments input-string index index)))
'((depth . -100)))
function)
+;;;###autoload
+;; (defun debug-on-set (symbol)
+;; "Request FUNCTION to invoke debugger each time it is called.
+
+;; When called interactively, prompt for FUNCTION in the minibuffer.
+
+;; This works by modifying the definition of FUNCTION. If you tell the
+;; debugger to continue, FUNCTION's execution proceeds. If FUNCTION is a
+;; normal function or a macro written in Lisp, you can also step through
+;; its execution. FUNCTION can also be a primitive that is not a special
+;; form, in which case stepping is not possible. Break-on-entry for
+;; primitive functions only works when that function is called from Lisp.
+
+;; Use \\[cancel-debug-on-entry] to cancel the effect of this command.
+;; Redefining FUNCTION also cancels it."
+;; (interactive
+;; (let ((v (variable-at-point))
+;; (enable-recursive-minibuffers t)
+;; (orig-buffer (current-buffer))
+;; val)
+;; (setq val (completing-read
+;; (if (symbolp v)
+;; (format
+;; "Debug on set to symbol (default %s): " v)
+;; "Debug on set to symbol: ")
+;; #'help--symbol-completion-table
+;; (lambda (vv)
+;; ;; In case the variable only exists in the buffer
+;; ;; the command we switch back to that buffer before
+;; ;; we examine the variable.
+;; (with-current-buffer orig-buffer
+;; (or (get vv 'variable-documentation)
+;; (and (boundp vv) (not (keywordp vv))))))
+;; t nil nil
+;; (if (symbolp v) (symbol-name v))))
+;; (list (if (equal val "")
+;; v (intern val)))))
+
+
+
+;; (interactive
+;; (let* ((var-default (variable-at-point))
+;; (var (completing-read
+;; (if var-default
+;; (format "Debug on set to symbol (default %s): " var-default)
+;; "Debug on set to symbol: ")
+;; nil
+;; #'boundp
+;; t nil nil (symbol-name var-default))))
+;; (list (if (equal var "") var-default (intern var)))))
+;; (advice-add function :before #'debug--implement-debug-on-entry
+;; '((depth . -100)))
+;; function)
+
(defun debug--function-list ()
"List of functions currently set for debug on entry."
(let ((funs '()))
(let ((pt (point))
(regexp
(concat
+ ;; comint-process-echoes is the thing that breaks the
+ ;; throbber
(if comint-process-echoes
;; Skip command echo if the process echoes
(concat "\\(" (regexp-quote shell-dirstack-query) "\n\\)")
default: emacs_abort ();
}
+
+ const char* symname = SDATA(sym->name);
+
+ if( EQ(Vwatch_object, symbol) )
+ {
+ static int nest_level = 0;
+ if(nest_level++ == 0)
+ {
+ switch(sym->redirect)
+ {
+ case SYMBOL_PLAINVAL:
+ {
+ AUTO_STRING (format, "Setting symbol '%s'; redirect: SYMBOL_PLAINVAL");
+ CALLN (Fmessage, format, SYMBOL_NAME (symbol));
+ break;
+ }
+ case SYMBOL_VARALIAS:
+ {
+ AUTO_STRING (format, "Setting symbol '%s'; redirect: SYMBOL_VARALIAS");
+ CALLN (Fmessage, format, SYMBOL_NAME (symbol));
+ break;
+ }
+ case SYMBOL_LOCALIZED:
+ {
+ AUTO_STRING (format, "Setting symbol '%s'; redirect: SYMBOL_LOCALIZED");
+ CALLN (Fmessage, format, SYMBOL_NAME (symbol));
+ break;
+ }
+ case SYMBOL_FORWARDED:
+ {
+ AUTO_STRING (format, "Setting symbol '%s'; redirect: SYMBOL_FORWARDED");
+ CALLN (Fmessage, format, SYMBOL_NAME (symbol));
+ break;
+ }
+
+ default:
+ {
+ AUTO_STRING (format, "Setting symbol '%s'; redirect: UNKNOWN");
+ CALLN (Fmessage, format, SYMBOL_NAME (symbol));
+ break;
+ }
+ }
+ }
+ nest_level--;
+ }
+
+
+
+
+
start:
switch (sym->redirect)
{
non-nil. */);
use_dialog_box = 1;
+ DEFVAR_LISP("watch-object", Vwatch_object,
+ doc: /* Symbol to watch. */);
+ Vwatch_object = Qnil;
+
DEFVAR_BOOL ("use-file-dialog", use_file_dialog,
doc: /* Non-nil means mouse commands use a file dialog to ask for files.
This applies to commands from menus and tool bar buttons even when