Posts

Showing posts with the label elisp

Map on lines in Emacs

;;;-------------------------------------------------------------------- (defun u:map-lines (beg end func) "Call given FUNC in the form (LAMBDA (LBEG LEND LSTR LCOUNT)...) for every line in the region. By default just print them." (interactive "r\nXMap Function ((LAMBDA (LSTR LBEG LEND LCOUNT) ...)): ") (let ((count 1) (inhibit-field-text-motion t)) (when (stringp func) (setq func (car (read (eval (concat "(" func ")")))))) (unless func (setq func #'(lambda (s b e c) (princ (format "%4d:%s" c s))))) (save-excursion (save-match-data (goto-char beg) (let (lbeg lend lstr (delta (- (point-max) end))) (while ( (setq lbeg (line-beginning-position 1)) (setq lend (line-beginning-position 2)) (setq lstr (buffer-substring-no-properties lbeg lend)) (funcall...

Loop on lines in emacs (version 1)

(defmacro do-lines (args &rest body) (let ((line (gensym "line-")) (beg (gensym "beg-")) (end (gensym "end-"))) `(let (,@args) (save-excursion (save-match-data (goto-char (point-min)) (while ( (setq ,beg (point)) (forward-line 1) (setq ,end (point)) (setq ,line (buffer-substring-no-properties ,beg ,end)) (setq ,(car args) ,line) (when ',(cdr args) (setq ,(cadr args) ,beg)) (when ',(cddr args) (setq ,(caddr args) ,end)) (progn ,@body))))))) (let (lines) (do-lines (l b e) (push (cons l e) lines)) (reverse lines))