ambevar-dotfiles/.emacs.d/lisp/mode-awk.el

69 lines
1.8 KiB
EmacsLisp

;;==============================================================================
;; AWK
;;==============================================================================
(add-hook-and-eval
'awk-mode-hook
(lambda ()
(local-set-key (kbd "C-c C-f") 'awk-fori)
(local-set-key (kbd "C-c f") 'awk-forin)
(local-set-key (kbd "C-c C-i") 'awk-if)
(local-set-key (kbd "C-c (") 'awk-function)
(local-set-key (kbd "C-c C-p") 'awk-printf)
(set (make-local-variable 'compile-command) (concat "awk " (shell-quote-argument buffer-file-name)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-skeleton awk-fori
"for i loop."
nil
> "for (" @ (skeleton-read "" "i = 0") "; " @ (skeleton-read "" "i < N") "; " @ (skeleton-read "" "i++") ") {" \n
@ _ \n
"}" > )
(define-skeleton awk-forin
"for in loop."
nil
> "for (" @ (skeleton-read "" "var") " in " @ (skeleton-read "" "array") ") {" \n
@ _ \n
"}" > )
(define-skeleton awk-function
"Insert struction for function"
nil
"function " @ (skeleton-read "Name: ") " (" @ (skeleton-read "Args: ") ") {" \n
> _ \n
"}" > \n)
(define-skeleton awk-if
"Insert an if statement."
"Condition: "
> "if (" @ str ") {" \n
> @ _ \n
("Other condition, %s: "
"} else if (" > @ str ") {" \n
@ \n)
"} else {" > \n
@ \n
resume:
"}" > \n)
(define-skeleton awk-printf
"fprintf/printf snippet.
If no file descriptor is provided, switch do printf. The format
string is properly parsed (%% are not taken into account).\n
Requires `count-percents'."
nil
'(require 'functions)
"printf ("
"\"" (setq v1 (skeleton-read "Format string: " "%s\\n")) "\""
'(setq v2 (count-percents v1))
'(setq v1 0)
'(while (< v1 v2)
(setq v1 (1+ v1))
(skeleton-insert '(nil (concat ", " (skeleton-read "Value: ")))))
@ ")")
(provide 'mode-awk)