;;; -*- lexical-binding: t -*- ;;; Register filter (defvar gdb-display-these-registers t "Registers that are displayed in register buffer. Can be a list, a function or t/nil. If a list, registers which names can be found in the list are displayed. If a function, it is passed with a register name and should return t to display and nil to not display. If t/nil, display all registers / none of the registers.") (defun gdb-registers-add-to-display (register) "Add REGISTER to display in register buffer. REGISTER is a string representing the name of the register. By default the register buffer displays all the registers. REGISTER can also be 'all, which configures gdb to display all registers. Also see `gdb-registers-remove-from-display'. " (interactive (list (completing-read "Register: " (append gdb-register-names '("all"))))) (if (equal register "all") (setq gdb-display-these-registers t) (if (listp gdb-display-these-registers) (add-to-list 'gdb-display-these-registers register) (setq gdb-display-these-registers (list register))))) (defun gdb-registers-remove-from-display (register) "Remove REGISTER from display in register buffer. REGISTER is a string representing the name of the register. By default the register buffer displays all the registers. REGISTER can also be 'all, which configures gdb to hide all registers. Also see `gdb-registers-add-to-display'." (interactive (list (completing-read "Register: " (append gdb-register-names '("all"))))) (if (equal register "all") (setq gdb-display-these-registers nil) (if (listp gdb-display-these-registers) (setq gdb-display-these-registers (remove register gdb-display-these-registers)) (user-error "gdb-display-these-registers is not a list, can’t remove anything from it")))) (defun gdb-registers-handler-custom () (when gdb-register-names (let ((register-values (bindat-get-field (gdb-json-partial-output) 'register-values)) (table (make-gdb-table))) (dolist (register register-values) (let* ((register-number (bindat-get-field register 'number)) (value (bindat-get-field register 'value)) (register-name (nth (string-to-number register-number) gdb-register-names))) (when (cond ((and (listp gdb-display-these-registers) gdb-display-these-registers) ; not nil (message register-name) (member register-name gdb-display-these-registers)) ((functionp gdb-display-these-registers) (funcall gdb-display-these-registers register-name)) (t gdb-display-these-registers)) (gdb-table-add-row table (list (propertize register-name 'font-lock-face font-lock-variable-name-face) (if (member register-number gdb-changed-registers) (propertize value 'font-lock-face font-lock-warning-face) value)) `(mouse-face highlight help-echo "mouse-2: edit value" gdb-register-name ,register-name))))) (insert (gdb-table-string table " "))) (setq mode-name (gdb-current-context-mode-name "Registers")))) ;;; dynamic memory watch