Experiment in highlighting the current symbol
This commit is contained in:
		
							parent
							
								
									15b9d4f519
								
							
						
					
					
						commit
						c7ed6c03f7
					
				
					 1 changed files with 96 additions and 0 deletions
				
			
		| 
						 | 
					@ -105,6 +105,102 @@ We need to make sure we keep the [[https://github.com/Fuco1/smartparens][smartpa
 | 
				
			||||||
    :hook
 | 
					    :hook
 | 
				
			||||||
    (prog-mode . smartparens-strict-mode))
 | 
					    (prog-mode . smartparens-strict-mode))
 | 
				
			||||||
#+end_src
 | 
					#+end_src
 | 
				
			||||||
 | 
					** Symbol Highlighting
 | 
				
			||||||
 | 
					I appreciate calling =hi-lock-face-symbol-at-point= (or =highlight-symbol-at-point=) to highlight all instances of a variable or other symbol.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#+begin_src emacs-lisp
 | 
				
			||||||
 | 
					  (use-package auto-highlight-symbol
 | 
				
			||||||
 | 
					    :config
 | 
				
			||||||
 | 
					    (setq ahs-idle-interval 0.1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    (set-face-attribute ahs-face nil :foreground nil :background nil
 | 
				
			||||||
 | 
					                        :weight 'ultra-bold :slant 'italic)
 | 
				
			||||||
 | 
					    (set-face-attribute ahs-plugin-default-face nil :foreground nil
 | 
				
			||||||
 | 
					                        :background nil :weight 'bold :slant 'normal))
 | 
				
			||||||
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Instead of calling =global-auto-highlight-symbol-mode=, we should just hook it to the =prog-mode=:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#+begin_src emacs-lisp
 | 
				
			||||||
 | 
					  (use-package auto-highlight-symbol
 | 
				
			||||||
 | 
					    :hook ((prog-mode . auto-highlight-symbol-mode)))
 | 
				
			||||||
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Similarly, the [[https://github.com/wolray/symbol-overlay][symbol-overlay]] project highlights instances of symbols, but like =iedit= creates a keymap allowing manipulation of the symbols. The workflow is:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  1. ~SPC t s s~ to highlight the symbol at point.
 | 
				
			||||||
 | 
					  2. ~n~ and ~p~ to move from symbol to symbol.
 | 
				
			||||||
 | 
					  3. Quitting the menu involves one of these:
 | 
				
			||||||
 | 
					       - ~q~ to leave point at spot
 | 
				
			||||||
 | 
					       - ~e~ to return to previous cursor placement
 | 
				
			||||||
 | 
					       - ~x~ to un-highlight all symbols
 | 
				
			||||||
 | 
					  4. ~SPC t s s~ to highlight another symbol at point.
 | 
				
			||||||
 | 
					  5. ~N~ and ~P~ to move to a /different symbol/.
 | 
				
			||||||
 | 
					  6. ~r~ to rename symbol (like =iedit=)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#+begin_src emacs-lisp
 | 
				
			||||||
 | 
					  (use-package symbol-overlay
 | 
				
			||||||
 | 
					    :config
 | 
				
			||||||
 | 
					    (pretty-hydra-define symbol-overlay (:color pink :quit-key "q")
 | 
				
			||||||
 | 
					      ("Show"
 | 
				
			||||||
 | 
					       (("s" symbol-overlay-put "highlight")
 | 
				
			||||||
 | 
					        ("t" symbol-overlay-toggle-in-scope "in scope"))
 | 
				
			||||||
 | 
					       "Navigate"
 | 
				
			||||||
 | 
					       (("n" symbol-overlay-jump-next "next")      ; j?
 | 
				
			||||||
 | 
					        ("p" symbol-overlay-jump-prev "previous")  ; k?
 | 
				
			||||||
 | 
					        ("<" symbol-overlay-jump-first "first")
 | 
				
			||||||
 | 
					        (">" symbol-overlay-jump-last "last"))
 | 
				
			||||||
 | 
					       "Switch"
 | 
				
			||||||
 | 
					       (("N" symbol-overlay-switch-forward "next")
 | 
				
			||||||
 | 
					        ("P" symbol-overlay-switch-backward "previous")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ("d" symbol-overlay-jump-to-definition "definition"))
 | 
				
			||||||
 | 
					       "Edit"
 | 
				
			||||||
 | 
					       (("r" symbol-overlay-rename "replace" :color blue)
 | 
				
			||||||
 | 
					        ("R" symbol-overlay-query-replace "query replace" :color blue))
 | 
				
			||||||
 | 
					       "Misc"
 | 
				
			||||||
 | 
					       (("w" symbol-overlay-save-symbol "to clipboard")   ; y?
 | 
				
			||||||
 | 
					        ("C-s" symbol-overlay-isearch-literally "search all" :color blue))
 | 
				
			||||||
 | 
					       "Exit"
 | 
				
			||||||
 | 
					       (("e" symbol-overlay-echo-mark "return" :color blue)
 | 
				
			||||||
 | 
					        ("x" symbol-overlay-remove-all "hide all" :color blue)
 | 
				
			||||||
 | 
					        ("q" nil "leave" :color blue))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    (ha-leader "t s" '("symbols" . symbol-overlay/body)))
 | 
				
			||||||
 | 
					#+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					While I created a Hydra for the commands,
 | 
				
			||||||
 | 
					this project includes a keymap available only when the cursor (point) is on a highlighted symbol. These keybindings include:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - ~n~ :: next matching symbol
 | 
				
			||||||
 | 
					    - ~p~ :: previous matching symbol
 | 
				
			||||||
 | 
					    - <  :: jump first
 | 
				
			||||||
 | 
					    - > :: jump last
 | 
				
			||||||
 | 
					    - ~d~ :: jump to definition
 | 
				
			||||||
 | 
					    - ~e~ :: return to original point position
 | 
				
			||||||
 | 
					    - ~h~ :: help
 | 
				
			||||||
 | 
					    - ~i~ :: unhighlight symbol
 | 
				
			||||||
 | 
					    - ~q~ :: query replace
 | 
				
			||||||
 | 
					    - ~r~ :: rename
 | 
				
			||||||
 | 
					    - ~s~ :: isearch
 | 
				
			||||||
 | 
					    - ~t~ :: toggle in scope
 | 
				
			||||||
 | 
					    - ~w~ :: save symbol to clipboard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					After reading [[https://lmno.lol/alvaro/its-all-up-for-grabs-and-it-compounds][this essay]] by Álvaro Ramírez, I’ve been thinking of ways to connect services together. In my case, I am not sure I need [[https://github.com/magnars/multiple-cursors.el][multiple cursors]] (as symbol-overlay can rename the symbol which would be 90% of my use case), but I would like to highlight a symbol without actually moving to it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#+begin_src emacs-lisp
 | 
				
			||||||
 | 
					  (use-package symbol-overlay
 | 
				
			||||||
 | 
					    :after avy
 | 
				
			||||||
 | 
					    :config
 | 
				
			||||||
 | 
					    (defun avy-action-highlight-symbol (pt foobar)
 | 
				
			||||||
 | 
					      "Highlight symbol starting at PT at the current point."
 | 
				
			||||||
 | 
					      (save-excursion
 | 
				
			||||||
 | 
					        (avy-action-goto pt foobar)
 | 
				
			||||||
 | 
					        (symbol-overlay-put))
 | 
				
			||||||
 | 
					      t)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    (add-to-list 'avy-dispatch-alist '(?S . avy-action-highlight-symbol)))
 | 
				
			||||||
 | 
					#+end_src
 | 
				
			||||||
** Spell Checking Comments
 | 
					** Spell Checking Comments
 | 
				
			||||||
The [[https://www.emacswiki.org/emacs/FlySpell#h5o-2][flyspell-prog-mode]] checks for misspellings in comments.
 | 
					The [[https://www.emacswiki.org/emacs/FlySpell#h5o-2][flyspell-prog-mode]] checks for misspellings in comments.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue