Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
;; From a posting by Rubikitch at the eev mailing list: ;; <http://lists.gnu.org/archive/html/eev/2005-06/msg00006.html> ;; <http://article.gmane.org/gmane.emacs.eev.devel/15> ;; Note that Rubikitch hasn't signed the FSF papers yet -- this file ;; cannot be included in Emacs until he signs the transfer of ;; copyright, but it isn't part of the "kernel" of eev that is ready ;; for inclusion... ;; To do (for Edrx): reorder; make the `global-set-key's less global; ;; understand why this uses view-mode; understand the defadvices, ;; think about creating hooks in `find-elinks', `find-estring' and ;; `find-sh' to make the defadvice unnecessary; see if I can get rid ;; of the other defadvices; add comments and examples with eesteps. ;; --snip--snip-- ;; I once created escript-mode. ;; This major-mode highlights sexp in comment and so on. ;; But I *failed* to highlights sexp in comment in emacs-lisp-mode... ;;;; [2003/07/27] ;;;; escript-mode by rubikitch <address@hidden> ;;;; escript-mode (defface ee-link-underline '((t (:foreground "blue" :underline t))) t) (setq ee-link-underline (make-face 'ee-link-underline)) (define-derived-mode escript-mode text-mode "ES" "major-mode for e-scripts" ;; sexp search (define-key escript-mode-map "\M-p" 'ee-prev-sexp-in-comment) (define-key escript-mode-map "\M-n" 'ee-next-sexp-in-comment) (define-key escript-mode-map "\C-c\C-t" 'escript-goto-top-page) (define-key escript-mode-map "\C-c\C-c" 'ee-save-sexp-eol) (make-local-variable 'font-lock-defaults) (make-local-variable 'font-lock-keywords) (make-local-variable 'truncate-lines) (setq truncate-lines t) ;; (make-local-variable 'font-lock-comment-face) (setq font-lock-comment-face 'eev-glyph-face-red) ;; (setq font-lock-keywords '(("^ *#[^\(]+\\((.*)\\)$" 1 ee-link-underline) ("^ *\\(#[^\(]+\\)\\((.*)\\)$" 1 font-lock-comment-face))) (setq font-lock-defaults '((font-lock-keywords) t nil)) (font-lock-mode)) (add-to-alist 'auto-mode-alist '("\\.e$" . escript-mode)) (make-variable-buffer-local 'escript-top-page) (defun escript-goto-top-page () (interactive) (when (boundp 'escript-top-page) (find-file escript-top-page))) ;;; ;;; sexp search ;;; (defun ee-next-sexp-sub (re) (interactive) (let ((pt (point))) (forward-line 1) (unless (re-search-forward re nil t) (goto-char pt) (error "sexp not found"))) (beginning-of-line) (search-forward "(")) (defun ee-prev-sexp-sub (re) (interactive) (when (eq (char-before) ?\) ) (forward-char -1)) (if (re-search-backward re nil t) (goto-char (match-end 0)) (error "sexp not found")) (beginning-of-line) (search-forward "(")) (defun ee-next-sexp () (interactive) (ee-next-sexp-sub ")$")) (defun ee-prev-sexp () (interactive) (ee-prev-sexp-sub ")$")) ;;; ;;; sexp search in comment ;;; (defun ee-sexp-in-comment-regexp () (let ((c (if comment-start (substring comment-start 0 1) ""))) (format "[%s;#].*([A-Za-z].+)$" c))) (defun ee-next-sexp-in-comment () (interactive) (ee-next-sexp-sub (ee-sexp-in-comment-regexp))) (defun ee-prev-sexp-in-comment () (interactive) (ee-prev-sexp-sub (ee-sexp-in-comment-regexp))) (global-set-key "\M-F" 'ee-next-sexp-in-comment) (global-set-key "\M-B" 'ee-prev-sexp-in-comment) (global-set-key "\M-p" 'ee-prev-sexp-in-comment) (global-set-key "\M-n" 'ee-next-sexp-in-comment) ;;;; anchor movement ;;;; [2005/06/12] revised (defun ee-next-anchor () (interactive) (let ((pt (point))) (forward-line 1) (unless (re-search-forward (format ee-anchor-format ".+") nil t) (goto-char pt) (error "anchor not found")))) (defun ee-prev-anchor () (interactive) (let ((p (point))) (when (eq (char-before) (string-to-char (substring ee-anchor-format -1)) ) (beginning-of-line)) (if (re-search-backward (format ee-anchor-format ".+") nil t) (goto-char (match-end 0)) (goto-char p) (error "anchor not found")))) ;;[2003/08/10] ;; eev anchor (global-set-key "\M-P" 'ee-prev-anchor) (global-set-key "\M-N" 'ee-next-anchor) ;; save-sexp (defvar ee-saved-sexp nil) (defun ee-save-sexp-eol () (interactive) (setq ee-saved-sexp (buffer-substring-no-properties (+ (length ee-hyperlink-prefix) (ee-bol)) (ee-eol))) (bury-buffer)) (defun ee-comment-prefix () (concat (replace-regexp-in-string " +$" "" (or comment-start "#")) " ")) ;; replace yank (defun ee-yank3 (arg) (interactive "P") (when ee-saved-sexp (kill-new (concat (ee-comment-prefix) ee-saved-sexp "\n")) (setq ee-saved-sexp nil)) (yank arg)) (global-set-key "\C-y" 'ee-yank3) ;;;; [2005/06/02] set escript-mode in *Elisp hyperlinks* (defadvice find-elinks (after escript-mode activate) (escript-mode) (view-mode-writable)) ;;;; [2005/05/23] set view-mode ;; (find-efile "view.el") (defun view-mode-writable () (interactive) (view-mode 1) (setq buffer-read-only nil)) (defmacro ee-view-mode-writable-advice (f) `(defadvice ,f (after read-only activate) (view-mode-writable))) (ee-view-mode-writable-advice find-estring) (ee-view-mode-writable-advice find-sh) ;; Local Variables: ;; coding: raw-text-unix ;; ee-anchor-format: "%s" ;; modes: (fundamental-mode emacs-lisp-mode escript-mode) ;; End: