Mercurial > dotfiles
annotate .elisp/textmate.el @ 146:9fdb82e108de
I really always need opendiff-w.
| author | Augie Fackler <durin42@gmail.com> |
|---|---|
| date | Fri, 25 Sep 2009 22:46:01 -0400 |
| parents | e30655eb7050 |
| children | a24d5587386f 95b7dc384677 |
| rev | line source |
|---|---|
| 22 | 1 ;; textmate.el --- TextMate minor mode for Emacs |
| 2 | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
3 ;; Copyright (C) 2008 Chris Wanstrath <chris@ozmm.org> and others |
| 22 | 4 |
| 5 ;; Licensed under the same terms as Emacs. | |
| 6 | |
| 7 ;; Version: 0.1.0 | |
| 8 ;; Keywords: textmate osx mac | |
| 9 ;; Created: 22 Nov 2008 | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
10 ;; Author: Chris Wanstrath <chris@ozmm.org> and others |
| 22 | 11 |
| 12 ;; This file is NOT part of GNU Emacs. | |
| 13 | |
| 14 ;;; Commentary: | |
| 15 | |
| 16 ;; This minor mode exists to mimick TextMate's awesome | |
| 17 ;; features. | |
| 18 | |
| 19 ;; ⌘T - Go to File | |
| 20 ;; ⇧⌘T - Go to Symbol | |
| 21 ;; ⌘L - Go to Line | |
| 22 ;; ⌘/ - Comment Line (or Selection/Region) | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
23 ;; ⌘] - Shift Right |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
24 ;; ⌘[ - Shift Left |
| 22 | 25 ;; ⌥⌘] - Align Assignments |
| 26 ;; ⌥⌘[ - Indent Line | |
| 27 ;; ⌘RET - Insert Newline at Line's End | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
28 ;; ⌥⌘T - Reset File Cache (for Go to File, cache unused if using git/hg root, |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
29 ;; but resets cached root location, useful if roots |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
30 ;; are nested) |
| 22 | 31 |
| 32 ;; A "project" in textmate-mode is determined by the presence of | |
| 33 ;; a .git directory. If no .git directory is found in your current | |
| 34 ;; directory, textmate-mode will traverse upwards until one (or none) | |
| 35 ;; is found. The directory housing the .git directory is presumed | |
| 36 ;; to be the project's root. | |
| 37 | |
| 38 ;; In other words, calling Go to File from | |
| 39 ;; ~/Projects/fieldrunners/app/views/towers/show.html.erb will use | |
| 40 ;; ~/Projects/fieldrunners/ as the root if ~/Projects/fieldrunners/.git | |
| 41 ;; exists. | |
| 42 | |
| 43 ;;; Installation | |
| 44 | |
| 45 ;; $ cd ~/.emacs.d/vendor | |
| 46 ;; $ git clone git://github.com/defunkt/textmate.el.git | |
| 47 ;; | |
| 48 ;; In your emacs config: | |
| 49 ;; | |
| 50 ;; (add-to-list 'load-path "~/.emacs.d/vendor/textmate.el") | |
| 51 ;; (require 'textmate) | |
| 52 ;; (textmate-mode) | |
| 53 | |
| 54 ;;; Depends on imenu | |
| 55 (require 'imenu) | |
| 56 | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
57 ;;; Needed for flet |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
58 (eval-when-compile |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
59 (require 'cl)) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
60 |
| 22 | 61 ;;; Minor mode |
| 62 | |
| 63 (defvar textmate-use-file-cache t | |
| 64 "* Should `textmate-goto-file' keep a local cache of files?") | |
| 65 | |
| 66 (defvar textmate-completing-library 'ido | |
| 67 "The library `textmade-goto-symbol' and `textmate-goto-file' should use for completing filenames and symbols (`ido' by default)") | |
| 68 | |
| 69 (defvar *textmate-completing-function-alist* '((ido ido-completing-read) | |
| 70 (icicles icicle-completing-read) | |
| 71 (none completing-read)) | |
| 72 "The function to call to read file names and symbols from the user") | |
| 73 | |
| 74 (defvar *textmate-completing-minor-mode-alist* | |
| 75 `((ido ,(lambda (a) (progn (ido-mode a) (setq ido-enable-flex-matching t)))) | |
| 76 (icicles ,(lambda (a) (icy-mode a))) | |
| 77 (none ,(lambda (a) ()))) | |
| 78 "The list of functions to enable and disable completing minor modes") | |
| 79 | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
80 (defvar *textmate-mode-map* |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
81 (let ((map (make-sparse-keymap))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
82 (cond ((featurep 'aquamacs) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
83 (define-key map [A-return] 'textmate-next-line) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
84 (define-key map (kbd "A-M-t") 'textmate-clear-cache) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
85 (define-key map (kbd "A-M-]") 'align) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
86 (define-key map (kbd "A-M-[") 'indent-according-to-mode) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
87 (define-key map (kbd "A-]") 'textmate-shift-right) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
88 (define-key map (kbd "A-[") 'textmate-shift-left) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
89 (define-key map (kbd "A-/") 'comment-or-uncomment-region-or-line) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
90 (define-key map (kbd "A-t") 'textmate-goto-file) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
91 (define-key map (kbd "A-T") 'textmate-goto-symbol)) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
92 ((and (featurep 'mac-carbon) (eq window-system 'mac) mac-key-mode) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
93 (define-key map [(alt meta return)] 'textmate-next-line) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
94 (define-key map [(alt meta t)] 'textmate-clear-cache) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
95 (define-key map [(alt meta \])] 'align) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
96 (define-key map [(alt meta \[)] 'indent-according-to-mode) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
97 (define-key map [(alt \])] 'textmate-shift-right) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
98 (define-key map [(alt \[)] 'textmate-shift-left) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
99 (define-key map [(meta /)] 'comment-or-uncomment-region-or-line) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
100 (define-key map [(alt t)] 'textmate-goto-file) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
101 (define-key map [(alt shift t)] 'textmate-goto-symbol)) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
102 ((featurep 'ns) ;; Emacs.app |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
103 (define-key map [(super meta return)] 'textmate-next-line) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
104 (define-key map [(super meta t)] 'textmate-clear-cache) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
105 (define-key map [(super meta \])] 'align) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
106 (define-key map [(super meta \[)] 'indent-according-to-mode) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
107 (define-key map [(super \])] 'textmate-shift-right) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
108 (define-key map [(super \[)] 'textmate-shift-left) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
109 (define-key map [(super /)] 'comment-or-uncomment-region-or-line) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
110 (define-key map [(super t)] 'textmate-goto-file) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
111 (define-key map [(super shift t)] 'textmate-goto-symbol)) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
112 (t ;; Any other version |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
113 (define-key map [(meta return)] 'textmate-next-line) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
114 (define-key map [(control c)(control t)] 'textmate-clear-cache) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
115 (define-key map [(control c)(control a)] 'align) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
116 (define-key map [(control tab)] 'textmate-shift-right) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
117 (define-key map [(control shift tab)] 'textmate-shift-left) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
118 (define-key map [(control c)(control k)] 'comment-or-uncomment-region-or-line) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
119 (define-key map [(meta t)] 'textmate-goto-file) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
120 (define-key map [(meta shift t)] 'textmate-goto-symbol))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
121 map)) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
122 |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
123 |
| 22 | 124 (defvar *textmate-project-root* nil) |
| 125 (defvar *textmate-project-files* '()) | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
126 |
| 22 | 127 (defvar *textmate-gf-exclude* |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
128 "/\\.|vendor|fixtures|tmp|log|build|\\.xcodeproj|\\.nib|\\.framework|\\.app|\\.pbproj|\\.pbxproj|\\.xcode|\\.xcodeproj|\\.bundle|\\.pyc") |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
129 |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
130 (defvar *textmate-project-roots* |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
131 '(".git" ".hg" "Rakefile" "Makefile" "README" "build.xml")) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
132 |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
133 (defvar *textmate-vcs-exclude* nil |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
134 "string to give to grep -V to exclude some VCS paths from being grepped." |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
135 ) |
| 22 | 136 |
|
28
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
137 (defvar *textmate-find-in-project-default* nil) |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
138 |
|
28
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
139 (defvar *textmate-find-in-project-type-default* nil) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
140 |
| 22 | 141 ;;; Bindings |
| 142 | |
| 143 (defun textmate-ido-fix () | |
| 144 "Add up/down keybindings for ido." | |
| 145 (define-key ido-completion-map [up] 'ido-prev-match) | |
| 146 (define-key ido-completion-map [down] 'ido-next-match)) | |
| 147 | |
| 148 (defun textmate-completing-read (&rest args) | |
| 149 (let ((reading-fn (cadr (assoc textmate-completing-library *textmate-completing-function-alist*)))) | |
| 150 (apply (symbol-function reading-fn) args))) | |
| 151 | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
152 ;;; allow-line-as-region-for-function adds an "-or-line" version of |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
153 ;;; the given comment function which (un)comments the current line is |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
154 ;;; the mark is not active. This code comes from Aquamac's osxkeys.el |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
155 ;;; and is licensed under the GPL |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
156 |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
157 (defmacro allow-line-as-region-for-function (orig-function) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
158 `(defun ,(intern (concat (symbol-name orig-function) "-or-line")) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
159 () |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
160 ,(format "Like `%s', but acts on the current line if mark is not active." orig-function) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
161 (interactive) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
162 (if mark-active |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
163 (call-interactively (function ,orig-function)) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
164 (save-excursion |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
165 ;; define a region (temporarily) -- so any C-u prefixes etc. are preserved. |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
166 (beginning-of-line) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
167 (set-mark (point)) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
168 (end-of-line) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
169 (call-interactively (function ,orig-function)))))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
170 |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
171 (defun textmate-define-comment-line () |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
172 "Add or-line (un)comment function if not already defined" |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
173 (unless (fboundp 'comment-or-uncomment-region-or-line) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
174 (allow-line-as-region-for-function comment-or-uncomment-region))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
175 |
| 22 | 176 ;;; Commands |
| 177 | |
| 178 (defun textmate-next-line () | |
| 179 (interactive) | |
| 180 (end-of-line) | |
| 181 (newline-and-indent)) | |
| 182 | |
| 183 ;; http://chopmo.blogspot.com/2008/09/quickly-jumping-to-symbols.html | |
| 184 (defun textmate-goto-symbol () | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
185 "Update the imenu index and then use ido to select a symbol to navigate to. |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
186 Symbols matching the text at point are put first in the completion list." |
| 22 | 187 (interactive) |
| 188 (imenu--make-index-alist) | |
| 189 (let ((name-and-pos '()) | |
| 190 (symbol-names '())) | |
| 191 (flet ((addsymbols (symbol-list) | |
| 192 (when (listp symbol-list) | |
| 193 (dolist (symbol symbol-list) | |
| 194 (let ((name nil) (position nil)) | |
| 195 (cond | |
| 196 ((and (listp symbol) (imenu--subalist-p symbol)) | |
| 197 (addsymbols symbol)) | |
| 198 | |
| 199 ((listp symbol) | |
| 200 (setq name (car symbol)) | |
| 201 (setq position (cdr symbol))) | |
| 202 | |
| 203 ((stringp symbol) | |
| 204 (setq name symbol) | |
| 205 (setq position (get-text-property 1 'org-imenu-marker symbol)))) | |
| 206 | |
| 207 (unless (or (null position) (null name)) | |
| 208 (add-to-list 'symbol-names name) | |
| 209 (add-to-list 'name-and-pos (cons name position)))))))) | |
| 210 (addsymbols imenu--index-alist)) | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
211 ;; If there are matching symbols at point, put them at the beginning of `symbol-names'. |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
212 (let ((symbol-at-point (thing-at-point 'symbol))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
213 (when symbol-at-point |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
214 (let* ((regexp (concat (regexp-quote symbol-at-point) "$")) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
215 (matching-symbols (delq nil (mapcar (lambda (symbol) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
216 (if (string-match regexp symbol) symbol)) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
217 symbol-names)))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
218 (when matching-symbols |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
219 (sort matching-symbols (lambda (a b) (> (length a) (length b)))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
220 (mapc (lambda (symbol) (setq symbol-names (cons symbol (delete symbol symbol-names)))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
221 matching-symbols))))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
222 (let* ((selected-symbol (ido-completing-read "Symbol? " symbol-names)) |
| 22 | 223 (position (cdr (assoc selected-symbol name-and-pos)))) |
| 224 (goto-char position)))) | |
| 225 | |
| 226 (defun textmate-goto-file () | |
| 227 (interactive) | |
| 228 (let ((root (textmate-project-root))) | |
| 229 (when (null root) | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
230 (error |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
231 (concat |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
232 "Can't find a sutiable project root (" |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
233 (string-join " " *textmate-project-roots* ) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
234 ")"))) |
| 22 | 235 (find-file |
| 236 (concat | |
| 237 (expand-file-name root) "/" | |
| 238 (textmate-completing-read | |
| 239 "Find file: " | |
|
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
240 (textmate-project-files root)))))) |
| 22 | 241 |
|
28
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
242 (defun textmate-find-in-project-type () |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
243 (interactive) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
244 (let ((pat (read-string (concat "Suffix" |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
245 (if *textmate-find-in-project-type-default* |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
246 (format " [\"%s\"]" *textmate-find-in-project-type-default*) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
247 "") |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
248 ": " |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
249 ) nil nil *textmate-find-in-project-type-default*))) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
250 (setq *textmate-find-in-project-type-default* pat) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
251 (textmate-find-in-project (concat "*." pat)))) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
252 |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
253 (defun textmate-find-in-project (&optional pattern) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
254 (interactive) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
255 (let ((root (textmate-project-root)) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
256 (default *textmate-find-in-project-default*) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
257 ) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
258 (when (null root) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
259 (error "Not in a project area.")) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
260 (let ((re (read-string (concat "Search for " |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
261 (if (and default (> (length default) 0)) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
262 (format "[\"%s\"]" default)) ": ") |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
263 nil 'textmate-find-in-project-history default) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
264 ) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
265 (incpat (if pattern pattern "*"))) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
266 (append textmate-find-in-project-history (list re)) |
|
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
267 (setq *textmate-find-in-project-default* re) |
|
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
268 (let ((type (textmate-project-root-type root))) |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
269 (let ((command |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
270 (cond ((not (string= type "unknown")) |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
271 (concat "cd " |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
272 root |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
273 " ; " |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
274 (cond ((string= type "git") "git ls-files") |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
275 ((string= type "hg") "hg manifest")) |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
276 (if *textmate-vcs-exclude* |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
277 (concat " | grep -v " (shell-quote-argument *textmate-vcs-exclude*)) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
278 "") |
|
30
43e751bdedeb
Latest textmate.el - fixed a bug in find in type.
Augie Fackler <durin42@gmail.com>
parents:
29
diff
changeset
|
279 " | xargs grep -nR " |
|
43e751bdedeb
Latest textmate.el - fixed a bug in find in type.
Augie Fackler <durin42@gmail.com>
parents:
29
diff
changeset
|
280 (if pattern (concat " --include='" pattern "' ") "") |
| 99 | 281 " -- " |
|
49
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
282 (shell-quote-argument re))) |
|
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
283 (t (concat "cd " root "; egrep -nR --exclude='" |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
284 *textmate-gf-exclude* |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
285 "' --include='" |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
286 incpat |
| 99 | 287 "' -- " |
|
49
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
288 (shell-quote-argument re) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
289 " . | grep -vE '" |
|
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
290 *textmate-gf-exclude* |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
291 "' | sed s:./::" |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
292 ))))) |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
293 (compilation-start command 'grep-mode))) |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
294 ))) |
|
28
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
295 |
| 22 | 296 (defun textmate-clear-cache () |
| 297 (interactive) | |
| 298 (setq *textmate-project-root* nil) | |
| 299 (setq *textmate-project-files* nil) | |
| 300 (message "textmate-mode cache cleared.")) | |
| 301 | |
|
24
d6fd2964258c
New version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
22
diff
changeset
|
302 (defun textmate-toggle-camel-case () |
|
d6fd2964258c
New version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
22
diff
changeset
|
303 "Toggle current sexp between camelCase and snake_case, like TextMate C-_." |
|
d6fd2964258c
New version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
22
diff
changeset
|
304 (interactive) |
|
d6fd2964258c
New version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
22
diff
changeset
|
305 (if (thing-at-point 'word) |
|
d6fd2964258c
New version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
22
diff
changeset
|
306 (progn |
|
49
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
307 (unless (looking-at "\\<") (backward-sexp)) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
308 (let ((case-fold-search nil) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
309 (start (point)) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
310 (end (save-excursion (forward-sexp) (point)))) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
311 (if (and (looking-at "[a-z0-9_]+") (= end (match-end 0))) ; snake-case |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
312 (progn |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
313 (goto-char start) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
314 (while (re-search-forward "_[a-z]" end t) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
315 (goto-char (1- (point))) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
316 (delete-char -1) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
317 (upcase-region (point) (1+ (point))) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
318 (setq end (1- end)))) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
319 (downcase-region (point) (1+ (point))) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
320 (while (re-search-forward "[A-Z][a-z]" end t) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
321 (forward-char -2) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
322 (insert "_") |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
323 (downcase-region (point) (1+ (point))) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
324 (forward-char 1) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
325 (setq end (1+ end))) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
326 (downcase-region start end) |
|
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
327 ))))) |
|
24
d6fd2964258c
New version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
22
diff
changeset
|
328 |
| 22 | 329 ;;; Utilities |
| 330 | |
|
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
331 (defun textmate-project-root-type (root) |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
332 (cond ((member ".git" (directory-files root)) "git") |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
333 ((member ".hg" (directory-files root)) "hg") |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
334 (t "unknown") |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
335 )) |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
336 |
| 22 | 337 (defun textmate-project-files (root) |
|
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
338 (let ((type (textmate-project-root-type root))) |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
339 (cond ((string= type "git") (split-string |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
340 (shell-command-to-string |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
341 (concat "cd " root " && git ls-files")) "\n" t)) |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
342 ((string= type "hg") (split-string |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
343 (shell-command-to-string |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
344 (concat "cd " root " && hg manifest")) "\n" t)) |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
345 ((string= type "unknown") (textmate-cached-project-files-find root)) |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
346 ))) |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
347 |
|
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
348 (defun textmate-project-files-find (root) |
| 22 | 349 (split-string |
| 350 (shell-command-to-string | |
| 351 (concat | |
| 352 "find " | |
| 353 root | |
| 354 " -type f | grep -vE '" | |
| 355 *textmate-gf-exclude* | |
| 356 "' | sed 's:" | |
| 357 *textmate-project-root* | |
| 358 "/::'")) "\n" t)) | |
| 359 | |
|
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
360 (defun textmate-cached-project-files-find (&optional root) |
| 22 | 361 (cond |
| 362 ((null textmate-use-file-cache) (textmate-project-files root)) | |
| 363 ((equal (textmate-project-root) (car *textmate-project-files*)) | |
| 364 (cdr *textmate-project-files*)) | |
| 365 (t (cdr (setq *textmate-project-files* | |
|
134
fe9d358b9fe8
textmate.el: Fix an infinite recursion bug when not using a supported VCS
Augie Fackler <durin42@gmail.com>
parents:
99
diff
changeset
|
366 `(,root . ,(textmate-project-files-find root))))))) |
| 22 | 367 |
| 368 (defun textmate-project-root () | |
| 369 (when (or | |
| 370 (null *textmate-project-root*) | |
| 371 (not (string-match *textmate-project-root* default-directory))) | |
| 372 (let ((root (textmate-find-project-root))) | |
| 373 (if root | |
| 374 (setq *textmate-project-root* (expand-file-name (concat root "/"))) | |
| 375 (setq *textmate-project-root* nil)))) | |
| 376 *textmate-project-root*) | |
| 377 | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
378 (defun root-match(root names) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
379 (member (car names) (directory-files root))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
380 |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
381 (defun root-matches(root names) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
382 (if (root-match root names) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
383 (root-match root names) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
384 (if (eq (length (cdr names)) 0) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
385 'nil |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
386 (root-matches root (cdr names)) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
387 ))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
388 |
| 22 | 389 (defun textmate-find-project-root (&optional root) |
| 390 (when (null root) (setq root default-directory)) | |
| 391 (cond | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
392 ((root-matches root *textmate-project-roots*) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
393 (expand-file-name root)) |
| 22 | 394 ((equal (expand-file-name root) "/") nil) |
| 395 (t (textmate-find-project-root (concat (file-name-as-directory root) ".."))))) | |
| 396 | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
397 (defun textmate-shift-right (&optional arg) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
398 "Shift the line or region to the ARG places to the right. |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
399 |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
400 A place is considered `tab-width' character columns." |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
401 (interactive) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
402 (let ((deactivate-mark nil) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
403 (beg (or (and mark-active (region-beginning)) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
404 (line-beginning-position))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
405 (end (or (and mark-active (region-end)) (line-end-position)))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
406 (indent-rigidly beg end (* (or arg 1) tab-width)))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
407 |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
408 (defun textmate-shift-left (&optional arg) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
409 "Shift the line or region to the ARG places to the left." |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
410 (interactive) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
411 (textmate-shift-right (* -1 (or arg 1)))) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
412 |
| 22 | 413 ;;;###autoload |
| 414 (define-minor-mode textmate-mode "TextMate Emulation Minor Mode" | |
| 415 :lighter " mate" :global t :keymap *textmate-mode-map* | |
|
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
416 (add-hook 'ido-setup-hook 'textmate-ido-fix) |
|
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
417 (textmate-define-comment-line) |
| 22 | 418 ; activate preferred completion library |
| 419 (dolist (mode *textmate-completing-minor-mode-alist*) | |
| 420 (if (eq (car mode) textmate-completing-library) | |
| 421 (funcall (cadr mode) t) | |
| 422 (when (fboundp | |
| 423 (cadr (assoc (car mode) *textmate-completing-function-alist*))) | |
| 424 (funcall (cadr mode) -1))))) | |
| 425 | |
| 426 (provide 'textmate) | |
| 427 ;;; textmate.el ends here |
