mirror of
				https://github.com/larstvei/Focus.git
				synced 2025-11-04 02:00:11 +00:00 
			
		
		
		
	Provide an example to make Focus with tree-sitter for python
This commit is contained in:
		
							parent
							
								
									17c471544f
								
							
						
					
					
						commit
						350e711fa7
					
				
							
								
								
									
										59
									
								
								README.org
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								README.org
									
									
									
									
									
								
							@ -79,6 +79,65 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
   According to [[https://www.reddit.com/r/emacs/comments/b1vrar/lsp_support_for_focusel_using_lspmode/][this reddit post]], Focus plays nice with ~lsp-mode~.
 | 
					   According to [[https://www.reddit.com/r/emacs/comments/b1vrar/lsp_support_for_focusel_using_lspmode/][this reddit post]], Focus plays nice with ~lsp-mode~.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   Focus also works well with the built-in tree-sitter library which comes with
 | 
				
			||||||
 | 
					   Emacs 29 or above. Below is an example configuration of using Focus with
 | 
				
			||||||
 | 
					 ~pyton-ts-mode~:
 | 
				
			||||||
 | 
					   #+begin_src emacs-lisp
 | 
				
			||||||
 | 
					     (use-package focus
 | 
				
			||||||
 | 
					       :config
 | 
				
			||||||
 | 
					       (add-to-list 'focus-mode-to-thing '(python-ts-mode . py-thing))
 | 
				
			||||||
 | 
					       )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     (use-package treesit
 | 
				
			||||||
 | 
					       ;; Remember to run `treesit-install-language-grammar' to install the grammar
 | 
				
			||||||
 | 
					       ;; for each designated language.
 | 
				
			||||||
 | 
					       :when
 | 
				
			||||||
 | 
					       (and (fboundp 'treesit-available-p) (treesit-available-p))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       :custom
 | 
				
			||||||
 | 
					       (major-mode-remap-alist
 | 
				
			||||||
 | 
					          (python-mode . python-ts-mode)
 | 
				
			||||||
 | 
					          ))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       :config
 | 
				
			||||||
 | 
					       ;; define `py-thing' for `thing-at-point' so that the `focus-mode' can focus
 | 
				
			||||||
 | 
					       ;; on such python things.
 | 
				
			||||||
 | 
					       (defvar py-thing--thing nil
 | 
				
			||||||
 | 
					         "Store the thing at point. `thing-at-point' moves to the end of
 | 
				
			||||||
 | 
					     the thing first. We should not re-run `py-thing' after that."
 | 
				
			||||||
 | 
					         )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       (defvar py-things-to-focus
 | 
				
			||||||
 | 
					         '("class_definition"
 | 
				
			||||||
 | 
					           "function_definition"
 | 
				
			||||||
 | 
					           "try_statement"
 | 
				
			||||||
 | 
					           "except_clause"
 | 
				
			||||||
 | 
					           "if_statement"
 | 
				
			||||||
 | 
					           "else_clause"
 | 
				
			||||||
 | 
					           "for_statement"
 | 
				
			||||||
 | 
					           "while_statement"
 | 
				
			||||||
 | 
					           "module")
 | 
				
			||||||
 | 
					         "Node types considered as python thing.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       (defun py-thing-begin ()
 | 
				
			||||||
 | 
					         (when-let ((thing (or py-thing--thing (py-thing))))
 | 
				
			||||||
 | 
					           (goto-char (treesit-node-start thing))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       (defun py-thing-end ()
 | 
				
			||||||
 | 
					         (when-let ((thing (py-thing)))
 | 
				
			||||||
 | 
					           (setq py-thing--thing thing)
 | 
				
			||||||
 | 
					           (goto-char (treesit-node-end thing))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       (defun py-thing ()
 | 
				
			||||||
 | 
					         (treesit-parent-until
 | 
				
			||||||
 | 
					          (treesit-node-at (point))
 | 
				
			||||||
 | 
					          (lambda (parent) (member (treesit-node-type parent) py-things-to-focus))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       (put 'py-thing 'beginning-op 'py-thing-begin)
 | 
				
			||||||
 | 
					       (put 'py-thing 'end-op 'py-thing-end)
 | 
				
			||||||
 | 
					       )
 | 
				
			||||||
 | 
					   #+end_src
 | 
				
			||||||
 | 
					
 | 
				
			||||||
** Faces
 | 
					** Faces
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   Focus offers two faces, one for the focused- and unfocused area. By default,
 | 
					   Focus offers two faces, one for the focused- and unfocused area. By default,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user