1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-08 15:35:02 +00:00
This commit is contained in:
Dima Kogan 2016-12-05 21:42:20 -08:00
parent 3c941b9000
commit f3c77d11af
5 changed files with 115 additions and 1 deletions

View File

@ -1879,6 +1879,7 @@ Similarly for Soar, Scheme, etc."
(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)
@ -1890,6 +1891,7 @@ Similarly for Soar, Scheme, etc."
;; (+ 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))
@ -1901,6 +1903,7 @@ Similarly for Soar, Scheme, etc."
;; 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))
@ -1909,6 +1912,7 @@ Similarly for Soar, Scheme, etc."
(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 "")))))
@ -2666,7 +2670,7 @@ This command is like `M-.' in bash."
(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)))

View File

@ -816,6 +816,60 @@ Redefining FUNCTION also cancels it."
'((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 '()))

View File

@ -1000,6 +1000,8 @@ command again."
(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\\)")

View File

@ -1304,6 +1304,56 @@ set_internal (Lisp_Object symbol, Lisp_Object newval, Lisp_Object where,
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)
{

View File

@ -5120,6 +5120,10 @@ On some platforms, file selection dialogs are also enabled if this is
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