@@ -581,6 +581,23 @@ stopped thread is already selected."
581581 :group 'gdb-buffers
582582 :version " 23.2" )
583583
584+ (defcustom gdb-registers-enable-filter nil
585+ " If non-nil, enable register name filter in register buffer.
586+ Use `gdb-registers-filter-pattern-list' to control what register to
587+ filter."
588+ :type 'boolean
589+ :group 'gdb-buffers
590+ :version " 28.1" )
591+
592+ (defcustom gdb-registers-filter-pattern-list nil
593+ " Patterns for names that are displayed in register buffer.
594+ Each pattern is a regular expression. GDB displays registers
595+ whose name matches any pattern in the list. Refresh the register
596+ buffer for the change to take effect."
597+ :type 'list
598+ :group 'gdb-buffers
599+ :version " 28.1" )
600+
584601(defvar gdb-debug-log nil
585602 " List of commands sent to and replies received from GDB.
586603Most recent commands are listed first. This list stores only the last
@@ -4393,6 +4410,26 @@ member."
43934410 'gdb-registers-mode
43944411 'gdb-invalidate-registers )
43954412
4413+ (defun gdb-header-click-event-handler (function )
4414+ " Return a function that handles clicking event on gdb header buttons.
4415+
4416+ This function switches to the window where the header locates and
4417+ executes FUNCTION."
4418+ (lambda (event )
4419+ (interactive " e" )
4420+ (save-selected-window
4421+ ; ; Make sure we are in the right buffer.
4422+ (select-window (posn-window (event-start event)))
4423+ (funcall function))))
4424+
4425+ (defun gdb-registers-toggle-filter ()
4426+ " Toggle register filter."
4427+ (interactive )
4428+ (setq gdb-registers-enable-filter
4429+ (not gdb-registers-enable-filter))
4430+ ; ; Update the register buffer.
4431+ (gdb-invalidate-registers 'update ))
4432+
43964433(defun gdb-registers-handler-custom ()
43974434 (when gdb-register-names
43984435 (let ((register-values
@@ -4403,17 +4440,27 @@ member."
44034440 (value (gdb-mi--field register 'value ))
44044441 (register-name (nth (string-to-number register-number)
44054442 gdb-register-names)))
4406- (gdb-table-add-row
4407- table
4408- (list
4409- (propertize register-name
4410- 'font-lock-face font-lock-variable-name-face )
4411- (if (member register-number gdb-changed-registers)
4412- (propertize value 'font-lock-face font-lock-warning-face )
4413- value))
4414- `(mouse-face highlight
4415- help-echo " mouse-2: edit value"
4416- gdb-register-name ,register-name ))))
4443+ ; ; Add register if `gdb-registers-filter-pattern-list' is nil;
4444+ ; ; or any pattern that `gdb-registers-filter-pattern-list'
4445+ ; ; matches.
4446+ (when (or (null gdb-registers-enable-filter)
4447+ ; ; Return t if any register name matches a pattern.
4448+ (cl-loop for pattern
4449+ in gdb-registers-filter-pattern-list
4450+ if (string-match pattern register-name)
4451+ return t
4452+ finally return nil ))
4453+ (gdb-table-add-row
4454+ table
4455+ (list
4456+ (propertize register-name
4457+ 'font-lock-face font-lock-variable-name-face )
4458+ (if (member register-number gdb-changed-registers)
4459+ (propertize value 'font-lock-face font-lock-warning-face )
4460+ value))
4461+ `(mouse-face highlight
4462+ help-echo " mouse-2: edit value"
4463+ gdb-register-name ,register-name )))))
44174464 (insert (gdb-table-string table " " )))
44184465 (setq mode-name
44194466 (gdb-current-context-mode-name " Registers" ))))
@@ -4441,6 +4488,7 @@ member."
44414488 (gdb-get-buffer-create
44424489 'gdb-locals-buffer
44434490 gdb-thread-number) t )))
4491+ (define-key map " f" #'gdb-registers-toggle-filter )
44444492 map))
44454493
44464494(defvar gdb-registers-header
@@ -4450,7 +4498,31 @@ member."
44504498 mode-line-inactive )
44514499 " "
44524500 (gdb-propertize-header " Registers" gdb-registers-buffer
4453- nil nil mode-line )))
4501+ nil nil mode-line )
4502+ " "
4503+ '(:eval
4504+ (format
4505+ " [filter %s %s]"
4506+ (propertize
4507+ (if gdb-registers-enable-filter " [on]" " [off]" )
4508+ 'face (if gdb-registers-enable-filter
4509+ '(:weight bold :inherit success )
4510+ 'shadow )
4511+ 'help-echo " mouse-1: toggle filter"
4512+ 'mouse-face 'mode-line-highlight
4513+ 'local-map (gdb-make-header-line-mouse-map
4514+ 'mouse-1 (gdb-header-click-event-handler
4515+ #'gdb-registers-toggle-filter )))
4516+ (propertize
4517+ " [set]"
4518+ 'face 'mode-line
4519+ 'help-echo " mouse-1: Customize filter patterns"
4520+ 'mouse-face 'mode-line-highlight
4521+ 'local-map (gdb-make-header-line-mouse-map
4522+ 'mouse-1 (lambda ()
4523+ (interactive )
4524+ (customize-variable-other-window
4525+ 'gdb-registers-filter-pattern-list ))))))))
44544526
44554527(define-derived-mode gdb-registers-mode gdb-parent-mode " Registers"
44564528 " Major mode for gdb registers."
0 commit comments