1;; missing functions in Emacs 24. 2 3(eval-after-load "\\(\\`\\|/\\)ruby-mode\\.elc?\\(\\.gz\\)?\\'" 4 (progn 5 (define-key ruby-mode-map "\C-c\C-e" 'ruby-insert-end) 6 (define-key ruby-mode-map "\C-c{" 'ruby-toggle-block) 7 8 (defun ruby-insert-end () 9 (interactive) 10 (if (eq (char-syntax (char-before)) ?w) 11 (insert " ")) 12 (insert "end") 13 (save-excursion 14 (if (eq (char-syntax (char-after)) ?w) 15 (insert " ")) 16 (ruby-indent-line t) 17 (end-of-line))) 18 19 (defun ruby-brace-to-do-end () 20 (when (looking-at "{") 21 (let ((orig (point)) (end (progn (ruby-forward-sexp) (point)))) 22 (when (eq (char-before) ?\}) 23 (delete-char -1) 24 (if (eq (char-syntax (char-before)) ?w) 25 (insert " ")) 26 (insert "end") 27 (if (eq (char-syntax (char-after)) ?w) 28 (insert " ")) 29 (goto-char orig) 30 (delete-char 1) 31 (if (eq (char-syntax (char-before)) ?w) 32 (insert " ")) 33 (insert "do") 34 (when (looking-at "\\sw\\||") 35 (insert " ") 36 (backward-char)) 37 t)))) 38 39 (defun ruby-do-end-to-brace () 40 (when (and (or (bolp) 41 (not (memq (char-syntax (char-before)) '(?w ?_)))) 42 (looking-at "\\<do\\(\\s \\|$\\)")) 43 (let ((orig (point)) (end (progn (ruby-forward-sexp) (point)))) 44 (backward-char 3) 45 (when (looking-at ruby-block-end-re) 46 (delete-char 3) 47 (insert "}") 48 (goto-char orig) 49 (delete-char 2) 50 (insert "{") 51 (if (looking-at "\\s +|") 52 (delete-char (- (match-end 0) (match-beginning 0) 1))) 53 t)))) 54 55 (defun ruby-toggle-block () 56 (interactive) 57 (or (ruby-brace-to-do-end) 58 (ruby-do-end-to-brace))) 59 60 (defun ruby-mode-set-encoding () 61 "Insert a magic comment header with the proper encoding always. 62Now encoding needs to be set always explicitly actually." 63 (save-excursion 64 (let ((coding-system)) 65 (widen) 66 (goto-char (point-min)) 67 (if (re-search-forward "[^\0-\177]" nil t) 68 (progn 69 (goto-char (point-min)) 70 (setq coding-system 71 (or coding-system-for-write 72 buffer-file-coding-system)) 73 (if coding-system 74 (setq coding-system 75 (or (coding-system-get coding-system 'mime-charset) 76 (coding-system-change-eol-conversion coding-system nil)))) 77 (setq coding-system 78 (if coding-system 79 (symbol-name 80 (or (and ruby-use-encoding-map 81 (cdr (assq coding-system ruby-encoding-map))) 82 coding-system)) 83 "ascii-8bit"))) 84 (setq coding-system "us-ascii")) 85 (if (looking-at "^#!") (beginning-of-line 2)) 86 (cond ((looking-at "\\s *#.*-\*-\\s *\\(en\\)?coding\\s *:\\s *\\([-a-z0-9_]*\\)\\s *\\(;\\|-\*-\\)") 87 (unless (string= (match-string 2) coding-system) 88 (goto-char (match-beginning 2)) 89 (delete-region (point) (match-end 2)) 90 (and (looking-at "-\*-") 91 (let ((n (skip-chars-backward " "))) 92 (cond ((= n 0) (insert " ") (backward-char)) 93 ((= n -1) (insert " ")) 94 ((forward-char))))) 95 (insert coding-system))) 96 ((looking-at "\\s *#.*coding\\s *[:=]")) 97 (t (when ruby-insert-encoding-magic-comment 98 (insert "# -*- coding: " coding-system " -*-\n"))))))) 99 100 )) 101