feat(wpcarro/emacs): Package symbol.el
Not sure how useful this package is, *but* I'm packaging everything I have now, and then in a separate CL I can refactor and remove various libs. Change-Id: Id106539b19244ea1586198992c7ce0d65a0a242b Reviewed-on: https://cl.tvl.fyi/c/depot/+/6014 Reviewed-by: wpcarro <wpcarro@gmail.com> Autosubmit: wpcarro <wpcarro@gmail.com> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									77aeb57c64
								
							
						
					
					
						commit
						a004be56b3
					
				
					 4 changed files with 61 additions and 24 deletions
				
			
		|  | @ -32,6 +32,7 @@ let | |||
|       set | ||||
|       string | ||||
|       struct | ||||
|       symbol | ||||
|       zle | ||||
|     ]) ++ | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										24
									
								
								users/wpcarro/emacs/pkgs/symbol/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								users/wpcarro/emacs/pkgs/symbol/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | |||
| { pkgs, depot, ... }: | ||||
| 
 | ||||
| let | ||||
|   symbol = pkgs.callPackage | ||||
|     ({ emacsPackages }: | ||||
|       emacsPackages.trivialBuild { | ||||
|         pname = "symbol"; | ||||
|         version = "1.0.0"; | ||||
|         src = ./symbol.el; | ||||
|         packageRequires = [ ]; | ||||
|       }) | ||||
|     { }; | ||||
| 
 | ||||
|   emacs = (pkgs.emacsPackagesFor pkgs.emacs28).emacsWithPackages (epkgs: [ | ||||
|     symbol | ||||
|   ]); | ||||
| in | ||||
| symbol.overrideAttrs (_old: { | ||||
|   doCheck = true; | ||||
|   checkPhase = '' | ||||
|     ${emacs}/bin/emacs -batch \ | ||||
|       -l ert -l ${./tests.el} -f ert-run-tests-batch-and-exit | ||||
|   ''; | ||||
| }) | ||||
|  | @ -9,36 +9,26 @@ | |||
| 
 | ||||
| ;;; Code: | ||||
| 
 | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| ;; Dependencies | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| 
 | ||||
| (require 'string) | ||||
| 
 | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| ;; Library | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| 
 | ||||
| ;; Symbols | ||||
| (defun symbol-as-string (callback x) | ||||
|   "Treat the symbol, X, as a string while applying CALLBACK to it. | ||||
| (defun symbol-to-string (symbol) | ||||
|   "Map `SYMBOL' into a string." | ||||
|   (symbol-name symbol)) | ||||
| 
 | ||||
| (defun symbol-from-string (string) | ||||
|   "Map `STRING' into a symbol." | ||||
|   (intern string)) | ||||
| 
 | ||||
| (defun symbol-as-string (f x) | ||||
|   "Treat the symbol, X, as a string while applying F to it. | ||||
| Coerce back to a symbol on the way out." | ||||
|   (->> x | ||||
|        #'symbol-name | ||||
|        callback | ||||
|        #'intern)) | ||||
|   (symbol-from-string (funcall f (symbol-to-string x)))) | ||||
| 
 | ||||
| (defun symbol-to-string (x) | ||||
|   "Map `X' into a string." | ||||
|   (string-<-symbol x)) | ||||
| 
 | ||||
| (defun symbol-hookify (x) | ||||
|   "Append \"-hook\" to X when X is a symbol." | ||||
|   (symbol-as-string #'string-hookify x)) | ||||
| 
 | ||||
| (defun symbol-ensure-hookified (x) | ||||
|   "Ensure that X has \"-hook\" appended to it when X is a symbol." | ||||
|   (symbol-as-string #'string-ensure-hookified x)) | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| ;; Predicates | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| 
 | ||||
| (defun symbol-instance? (x) | ||||
|   "Return t if X is a symbol." | ||||
							
								
								
									
										22
									
								
								users/wpcarro/emacs/pkgs/symbol/tests.el
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								users/wpcarro/emacs/pkgs/symbol/tests.el
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| ;; Dependencies | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| 
 | ||||
| (require 'ert) | ||||
| (require 'symbol) | ||||
| 
 | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| ;; Tests | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| 
 | ||||
| (ert-deftest symbol-to-string () | ||||
|   (should (string= "foo" (symbol-to-string 'foo)))) | ||||
| 
 | ||||
| (ert-deftest symbol-from-string () | ||||
|   (should (eq 'foo (symbol-from-string "foo")))) | ||||
| 
 | ||||
| (ert-deftest symbol-as-string () | ||||
|   (should (eq 'foo-hook | ||||
|               (symbol-as-string | ||||
|                (lambda (x) (format "%s-hook" x)) | ||||
|                'foo)))) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue