;; ;; Some functions which will be used ;; in initialization of EMACS ;; (defun iterate-on-list (list action) (when list (let ((dir (car list))) (let ((val (funcall action dir))) (if val val (iterate-on-list (cdr list) action)))))) (defun which (prog) (let ((app (executable-find prog))) (if app (file-truename app) (iterate-on-list (split-string (getenv "PATH") ":") #'(lambda (dir) (let ((filename (concat dir "/" prog))) (if (file-executable-p filename) filename nil))))))) (defun partition-list (lis separator-p sublis acc) (if (null lis) (if (null sublis) acc (append acc (list sublis))) (let ((item (car lis))) (if (funcall separator-p item) (partition-list (cdr lis) separator-p () (if (null sublis) acc (append acc (list sublis)))) (partition-list (cdr lis) separator-p (append sublis (list item)) acc))))) (defun nth-op (n op arg) (if (= n 0) arg (nth-op (- n 1) op (funcall op arg)))) (defun compose (f g &rest args) (apply f (apply g args))) (defun my-reduce (acc lis op) (cond ((and (not (null acc)) (not (null lis))) (cons (funcall op (car acc) (car lis)) (my-reduce (cdr acc) (cdr lis) op))) ((null lis) acc) ((null acc) lis) (t nil))) (defun merge-xlist (lis op acc) (if (null lis) acc (merge-xlist (cdr lis) op (my-reduce acc (car lis) op)))) (defun sudo-shell-command (command) (let ((proc (start-process-shell-command "*sudo*" "*sudo*" (concat "sudo bash -c " (shell-quote-argument command))))) (process-send-string proc (read-passwd "Your Password:")) (process-send-string proc "\r") (process-send-eof proc))) (defun find-file-by-search-dir (dir name) (let ((find-cmd (concat "find " dir " -name \"" name "\"" " -print | head -n 1"))) (let ((data (shell-command-to-string find-cmd))) (if (> (length data) 0) (substring data 0 -1) nil)))) (defun my-fold-left (op acc lst) (if lst (my-fold-left op (funcall op acc (car lst)) (cdr lst)) acc)) (defun my-replace-string (s old new) (replace-regexp-in-string (regexp-quote old) new s t t)) (defun my-zap-multiple-empty-lines () (while (re-search-forward "^\\([ ]*\n?\\)*\n") (replace-match "\n"))) (defun first-n-elem (list n action) (if (or (= n 0) (not list)) nil (let ((ele (car list)) (rem (cdr list))) (if (funcall action ele) (cons ele (first-n-elem rem (- n 1) action)) (first-n-elem rem n action))))) ;; define key bindings ;;