Mercurial > dotfiles
annotate .elisp/textmate.el @ 336:ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
I've been toting around this package.el from 2009 or so, and something
in the package format seems to have changed that broke me. Thanks to
some related diagnostics by Lucas, I've grabbed the last package.el
that worked with emacs 23 and stashed it here. This seems to work,
modulo some things (notably js2-mode and smex) now seem to require
emacs 24 if you install them using package.el, so this will end up
being brittle on my last couple of emacs23 machines.
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Thu, 29 May 2014 14:30:42 -0400 |
parents | ecb85d3ba960 |
children | 577c824c2288 |
rev | line source |
---|---|
22 | 1 ;; textmate.el --- TextMate minor mode for Emacs |
2 | |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
3 ;; Copyright (C) 2008, 2009 Chris Wanstrath <chris@ozmm.org> and others |
22 | 4 |
5 ;; Licensed under the same terms as Emacs. | |
6 | |
7 ;; Keywords: textmate osx mac | |
8 ;; Created: 22 Nov 2008 | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
9 ;; Author: Chris Wanstrath <chris@ozmm.org> and others |
22 | 10 |
11 ;; This file is NOT part of GNU Emacs. | |
12 | |
13 ;;; Commentary: | |
14 | |
15 ;; This minor mode exists to mimick TextMate's awesome | |
16 ;; features. | |
17 | |
18 ;; ⌘T - Go to File | |
19 ;; ⇧⌘T - Go to Symbol | |
20 ;; ⌘L - Go to Line | |
21 ;; ⌘/ - Comment Line (or Selection/Region) | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
22 ;; ⌘] - Shift Right |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
23 ;; ⌘[ - Shift Left |
22 | 24 ;; ⌥⌘] - Align Assignments |
25 ;; ⌥⌘[ - Indent Line | |
26 ;; ⌘RET - Insert Newline at Line's End | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
27 ;; ⌥⌘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
|
28 ;; but resets cached root location, useful if roots |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
29 ;; are nested) |
22 | 30 |
31 ;; A "project" in textmate-mode is determined by the presence of | |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
32 ;; a .git directory, an .hg directory, a Rakefile, or a Makefile. |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
33 |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
34 ;; You can configure what makes a project root by appending a file |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
35 ;; or directory name onto the `*textmate-project-roots*' list. |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
36 |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
37 ;; If no project root indicator is found in your current directory, |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
38 ;; textmate-mode will traverse upwards until one (or none) is found. |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
39 ;; The directory housing the project root indicator (e.g. a .git or .hg |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
40 ;; directory) is presumed to be the project's root. |
22 | 41 |
42 ;; In other words, calling Go to File from | |
43 ;; ~/Projects/fieldrunners/app/views/towers/show.html.erb will use | |
44 ;; ~/Projects/fieldrunners/ as the root if ~/Projects/fieldrunners/.git | |
45 ;; exists. | |
46 | |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
47 ;; In the event that the project root was defined by either .git or .hg, |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
48 ;; fast file-listing with no caching is provided by the version control |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
49 ;; system. |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
50 |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
51 ;; Not bound to keys, but available are textmate-find-in-project and |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
52 ;; textmate-find-in-project-type, which use grep, the file listing, |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
53 ;; and grep-mode to provide excellent (and blindingly fast with git and |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
54 ;; hg!) grep integration with emacs and your project. |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
55 |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
56 ;; Also available (and unbound) is textmate-compile, which is like |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
57 ;; compile but prepends a cd to the project root to the command. It is |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
58 ;; used to build the find-in-project commands, but has other possible |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
59 ;; uses as well (eg, a test runner or some kind of compile command). |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
60 |
22 | 61 ;;; Installation |
62 | |
63 ;; $ cd ~/.emacs.d/vendor | |
64 ;; $ git clone git://github.com/defunkt/textmate.el.git | |
65 ;; | |
66 ;; In your emacs config: | |
67 ;; | |
68 ;; (add-to-list 'load-path "~/.emacs.d/vendor/textmate.el") | |
69 ;; (require 'textmate) | |
70 ;; (textmate-mode) | |
71 | |
72 ;;; Depends on imenu | |
73 (require 'imenu) | |
74 | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
75 ;;; Needed for flet |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
76 (eval-when-compile |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
77 (require 'cl)) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
78 |
22 | 79 ;;; Minor mode |
80 | |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
81 (defvar *textmate-gf-exclude* |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
82 "/\\.|vendor|fixtures|tmp|log|build|\\.xcodeproj|\\.nib|\\.framework|\\.app|\\.pbproj|\\.pbxproj|\\.xcode|\\.xcodeproj|\\.bundle|\\.pyc" |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
83 "Regexp of files to exclude from `textmate-goto-file'.") |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
84 |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
85 (defvar *textmate-project-roots* |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
86 '(".git" ".hg" "Rakefile" "Makefile" "README" "build.xml") |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
87 "The presence of any file/directory in this list indicates a project root.") |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
88 |
22 | 89 (defvar textmate-use-file-cache t |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
90 "Should `textmate-goto-file' keep a local cache of files?") |
22 | 91 |
92 (defvar textmate-completing-library 'ido | |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
93 "The library `textmade-goto-symbol' and `textmate-goto-file' should use for |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
94 completing filenames and symbols (`ido' by default)") |
22 | 95 |
96 (defvar *textmate-completing-function-alist* '((ido ido-completing-read) | |
97 (icicles icicle-completing-read) | |
98 (none completing-read)) | |
99 "The function to call to read file names and symbols from the user") | |
100 | |
101 (defvar *textmate-completing-minor-mode-alist* | |
102 `((ido ,(lambda (a) (progn (ido-mode a) (setq ido-enable-flex-matching t)))) | |
103 (icicles ,(lambda (a) (icy-mode a))) | |
104 (none ,(lambda (a) ()))) | |
105 "The list of functions to enable and disable completing minor modes") | |
106 | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
107 (defvar *textmate-mode-map* |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
108 (let ((map (make-sparse-keymap))) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
109 (cond ((featurep 'aquamacs) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
110 (define-key map [A-return] 'textmate-next-line) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
111 (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
|
112 (define-key map (kbd "A-M-]") 'align) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
113 (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
|
114 (define-key map (kbd "A-]") 'textmate-shift-right) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
115 (define-key map (kbd "A-[") 'textmate-shift-left) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
116 (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
|
117 (define-key map (kbd "A-t") 'textmate-goto-file) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
118 (define-key map (kbd "A-T") 'textmate-goto-symbol)) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
119 ((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
|
120 (define-key map [(alt meta return)] 'textmate-next-line) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
121 (define-key map [(alt meta t)] 'textmate-clear-cache) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
122 (define-key map [(alt meta \])] 'align) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
123 (define-key map [(alt meta \[)] 'indent-according-to-mode) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
124 (define-key map [(alt \])] 'textmate-shift-right) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
125 (define-key map [(alt \[)] 'textmate-shift-left) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
126 (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
|
127 (define-key map [(alt t)] 'textmate-goto-file) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
128 (define-key map [(alt shift t)] 'textmate-goto-symbol)) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
129 ((featurep 'ns) ;; Emacs.app |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
130 (define-key map [(super meta return)] 'textmate-next-line) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
131 (define-key map [(super meta t)] 'textmate-clear-cache) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
132 (define-key map [(super meta \])] 'align) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
133 (define-key map [(super meta \[)] 'indent-according-to-mode) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
134 (define-key map [(super \])] 'textmate-shift-right) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
135 (define-key map [(super \[)] 'textmate-shift-left) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
136 (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
|
137 (define-key map [(super t)] 'textmate-goto-file) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
138 (define-key map [(super shift t)] 'textmate-goto-symbol)) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
139 (t ;; Any other version |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
140 (define-key map [(meta return)] 'textmate-next-line) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
141 (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
|
142 (define-key map [(control c)(control a)] 'align) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
143 (define-key map [(control tab)] 'textmate-shift-right) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
144 (define-key map [(control shift tab)] 'textmate-shift-left) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
145 (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
|
146 (define-key map [(meta t)] 'textmate-goto-file) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
147 (define-key map [(meta shift t)] 'textmate-goto-symbol))) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
148 map)) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
149 |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
150 (defvar *textmate-project-root* nil |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
151 "Used internally to cache the project root.") |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
152 (defvar *textmate-project-files* '() |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
153 "Used internally to cache the files in a project.") |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
154 |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
155 (defvar *textmate-vcs-exclude* nil |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
156 "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
|
157 ) |
22 | 158 |
28
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
159 (defvar *textmate-find-in-project-default* nil) |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
160 |
28
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
161 (defvar *textmate-find-in-project-type-default* nil) |
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
162 |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
163 (defvar *textmate-compile-default* nil) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
164 |
22 | 165 ;;; Bindings |
166 | |
167 (defun textmate-ido-fix () | |
168 "Add up/down keybindings for ido." | |
169 (define-key ido-completion-map [up] 'ido-prev-match) | |
170 (define-key ido-completion-map [down] 'ido-next-match)) | |
171 | |
172 (defun textmate-completing-read (&rest args) | |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
173 "Uses `*textmate-completing-function-alist*' to call the appropriate completing |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
174 function." |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
175 (let ((reading-fn |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
176 (cadr (assoc textmate-completing-library |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
177 *textmate-completing-function-alist*)))) |
22 | 178 (apply (symbol-function reading-fn) args))) |
179 | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
180 ;;; 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
|
181 ;;; 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
|
182 ;;; 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
|
183 ;;; and is licensed under the GPL |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
184 |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
185 (defmacro allow-line-as-region-for-function (orig-function) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
186 `(defun ,(intern (concat (symbol-name orig-function) "-or-line")) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
187 () |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
188 ,(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
|
189 (interactive) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
190 (if mark-active |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
191 (call-interactively (function ,orig-function)) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
192 (save-excursion |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
193 ;; 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
|
194 (beginning-of-line) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
195 (set-mark (point)) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
196 (end-of-line) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
197 (call-interactively (function ,orig-function)))))) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
198 |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
199 (defun textmate-define-comment-line () |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
200 "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
|
201 (unless (fboundp 'comment-or-uncomment-region-or-line) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
202 (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
|
203 |
22 | 204 ;;; Commands |
205 | |
206 (defun textmate-next-line () | |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
207 "Inserts an indented newline after the current line and moves the point to it." |
22 | 208 (interactive) |
209 (end-of-line) | |
210 (newline-and-indent)) | |
211 | |
212 ;; http://chopmo.blogspot.com/2008/09/quickly-jumping-to-symbols.html | |
213 (defun textmate-goto-symbol () | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
214 "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
|
215 Symbols matching the text at point are put first in the completion list." |
22 | 216 (interactive) |
217 (imenu--make-index-alist) | |
218 (let ((name-and-pos '()) | |
219 (symbol-names '())) | |
220 (flet ((addsymbols (symbol-list) | |
221 (when (listp symbol-list) | |
222 (dolist (symbol symbol-list) | |
223 (let ((name nil) (position nil)) | |
224 (cond | |
225 ((and (listp symbol) (imenu--subalist-p symbol)) | |
226 (addsymbols symbol)) | |
227 | |
228 ((listp symbol) | |
229 (setq name (car symbol)) | |
230 (setq position (cdr symbol))) | |
231 | |
232 ((stringp symbol) | |
233 (setq name symbol) | |
234 (setq position (get-text-property 1 'org-imenu-marker symbol)))) | |
235 | |
236 (unless (or (null position) (null name)) | |
237 (add-to-list 'symbol-names name) | |
238 (add-to-list 'name-and-pos (cons name position)))))))) | |
239 (addsymbols imenu--index-alist)) | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
240 ;; 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
|
241 (let ((symbol-at-point (thing-at-point 'symbol))) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
242 (when symbol-at-point |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
243 (let* ((regexp (concat (regexp-quote symbol-at-point) "$")) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
244 (matching-symbols (delq nil (mapcar (lambda (symbol) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
245 (if (string-match regexp symbol) symbol)) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
246 symbol-names)))) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
247 (when matching-symbols |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
248 (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
|
249 (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
|
250 matching-symbols))))) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
251 (let* ((selected-symbol (ido-completing-read "Symbol? " symbol-names)) |
22 | 252 (position (cdr (assoc selected-symbol name-and-pos)))) |
253 (goto-char position)))) | |
254 | |
255 (defun textmate-goto-file () | |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
256 "Uses your completing read to quickly jump to a file in a project." |
22 | 257 (interactive) |
258 (let ((root (textmate-project-root))) | |
259 (when (null root) | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
260 (error |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
261 (concat |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
262 "Can't find a suitable project root (" |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
263 (string-join " " *textmate-project-roots* ) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
264 ")"))) |
22 | 265 (find-file |
266 (concat | |
267 (expand-file-name root) "/" | |
268 (textmate-completing-read | |
269 "Find file: " | |
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
270 (textmate-project-files root)))))) |
22 | 271 |
28
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
272 (defun textmate-find-in-project-type () |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
273 "Run grep over project files of a specific type and put the results |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
274 in a grep-mode buffer." |
28
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
275 (interactive) |
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
276 (let ((pat (read-string (concat "Suffix" |
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
277 (if *textmate-find-in-project-type-default* |
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
278 (format " [\"%s\"]" *textmate-find-in-project-type-default*) |
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
279 "") |
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
280 ": " |
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
281 ) nil nil *textmate-find-in-project-type-default*))) |
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
282 (setq *textmate-find-in-project-type-default* pat) |
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
283 (textmate-find-in-project (concat "*." pat)))) |
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
284 |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
285 (defun textmate-start-compile-in-root (command &optional mode |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
286 name-function |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
287 highlight-regexp) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
288 "Idential to compilation-start, except it automatically changes to the |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
289 project root directory before starting the command." |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
290 (let ((root (textmate-project-root))) |
28
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
291 (when (null root) |
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
292 (error "Not in a project area.")) |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
293 (let ((realcommand (concat "cd " root " ; " command))) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
294 (compilation-start realcommand mode name-function highlight-regexp)))) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
295 |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
296 (defun textmate-compile () |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
297 "Run a command in compilation-mode rooted at the project root." |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
298 (interactive) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
299 (let* ((default *textmate-compile-default*) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
300 (command (read-string |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
301 (concat "Command" |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
302 (if default (format " [\"%s\"]" default) "") |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
303 ": ") nil 'textmate-compile-history default))) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
304 (setq *textmate-compile-default* command) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
305 (textmate-start-compile-in-root command))) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
306 |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
307 (defun textmate-find-in-project (&optional pattern) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
308 "Run grep over project files with results in grep-mode. |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
309 |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
310 Takes an optional argument (see also textmate-find-in-project-type) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
311 of a file extension to limit the search. Useful for finding results in only a |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
312 specific type of file." |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
313 (interactive) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
314 (let* ((default *textmate-find-in-project-default*) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
315 (re (read-string (concat "Search for " |
28
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
316 (if (and default (> (length default) 0)) |
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
317 (format "[\"%s\"]" default)) ": ") |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
318 nil 'textmate-find-in-project-history default)) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
319 (incpat (if pattern pattern "*")) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
320 (type (textmate-project-root-type (textmate-project-root))) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
321 (command |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
322 (cond ((not (string= type "unknown")) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
323 (concat (cond ((string= type "git") "git ls-files") |
331
ecb85d3ba960
textmate.el: use hg locate for speed
Augie Fackler <raf@durin42.com>
parents:
330
diff
changeset
|
324 ((string= type "hg") "hg locate 'set:added() or modified() or clean()'")) |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
325 (if *textmate-vcs-exclude* |
330
629b500e1276
textmate.el: disable color on use of egrep
Augie Fackler <durin42@gmail.com>
parents:
329
diff
changeset
|
326 (concat " | egrep --color=never -v " |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
327 (shell-quote-argument *textmate-vcs-exclude*)) |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
328 "") |
331
ecb85d3ba960
textmate.el: use hg locate for speed
Augie Fackler <raf@durin42.com>
parents:
330
diff
changeset
|
329 " | xargs egrep --color=never -n " |
30
43e751bdedeb
Latest textmate.el - fixed a bug in find in type.
Augie Fackler <durin42@gmail.com>
parents:
29
diff
changeset
|
330 (if pattern (concat " --include='" pattern "' ") "") |
99 | 331 " -- " |
49
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
332 (shell-quote-argument re))) |
330
629b500e1276
textmate.el: disable color on use of egrep
Augie Fackler <durin42@gmail.com>
parents:
329
diff
changeset
|
333 (t (concat "egrep --color=never -nR --exclude='" |
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
334 *textmate-gf-exclude* |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
335 "' --include='" |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
336 incpat |
99 | 337 "' -- " |
49
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
338 (shell-quote-argument re) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
339 " . | grep -vE '" |
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
340 *textmate-gf-exclude* |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
341 "' | sed s:./::" |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
342 ))))) |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
343 (setq *textmate-find-in-project-default* re) |
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
344 (textmate-start-compile-in-root command 'grep-mode))) |
28
260deb14fbc8
Add textmate-find-in-project.
Augie Fackler <durin42@gmail.com>
parents:
25
diff
changeset
|
345 |
22 | 346 (defun textmate-clear-cache () |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
347 "Clears the project root and project files cache. Use after adding files." |
22 | 348 (interactive) |
349 (setq *textmate-project-root* nil) | |
350 (setq *textmate-project-files* nil) | |
351 (message "textmate-mode cache cleared.")) | |
352 | |
24
d6fd2964258c
New version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
22
diff
changeset
|
353 (defun textmate-toggle-camel-case () |
d6fd2964258c
New version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
22
diff
changeset
|
354 "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
|
355 (interactive) |
d6fd2964258c
New version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
22
diff
changeset
|
356 (if (thing-at-point 'word) |
d6fd2964258c
New version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
22
diff
changeset
|
357 (progn |
49
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
358 (unless (looking-at "\\<") (backward-sexp)) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
359 (let ((case-fold-search nil) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
360 (start (point)) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
361 (end (save-excursion (forward-sexp) (point)))) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
362 (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
|
363 (progn |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
364 (goto-char start) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
365 (while (re-search-forward "_[a-z]" end t) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
366 (goto-char (1- (point))) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
367 (delete-char -1) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
368 (upcase-region (point) (1+ (point))) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
369 (setq end (1- end)))) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
370 (downcase-region (point) (1+ (point))) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
371 (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
|
372 (forward-char -2) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
373 (insert "_") |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
374 (downcase-region (point) (1+ (point))) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
375 (forward-char 1) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
376 (setq end (1+ end))) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
377 (downcase-region start end) |
60dbe5b005cc
Fix a bug in shell quoting.
Augie Fackler <durin42@gmail.com>
parents:
30
diff
changeset
|
378 ))))) |
24
d6fd2964258c
New version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
22
diff
changeset
|
379 |
22 | 380 ;;; Utilities |
381 | |
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
382 (defun textmate-project-root-type (root) |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
383 (cond ((member ".git" (directory-files root)) "git") |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
384 ((member ".hg" (directory-files root)) "hg") |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
385 (t "unknown") |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
386 )) |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
387 |
22 | 388 (defun textmate-project-files (root) |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
389 "Finds all files in a given project using either hg, git, or find." |
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
390 (let ((type (textmate-project-root-type root))) |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
391 (cond ((string= type "git") (split-string |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
392 (shell-command-to-string |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
393 (concat "cd " root " && git ls-files")) "\n" t)) |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
394 ((string= type "hg") (split-string |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
395 (shell-command-to-string |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
396 (concat "cd " root " && hg manifest")) "\n" t)) |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
397 ((string= type "unknown") (textmate-cached-project-files-find root)) |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
398 ))) |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
399 |
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
400 (defun textmate-project-files-find (root) |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
401 "Finds all files in a given project using find." |
22 | 402 (split-string |
403 (shell-command-to-string | |
404 (concat | |
405 "find " | |
406 root | |
407 " -type f | grep -vE '" | |
408 *textmate-gf-exclude* | |
409 "' | sed 's:" | |
410 *textmate-project-root* | |
411 "/::'")) "\n" t)) | |
412 | |
29
e5f414619ea7
Latest version of textmate.el
Augie Fackler <durin42@gmail.com>
parents:
28
diff
changeset
|
413 (defun textmate-cached-project-files-find (&optional root) |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
414 "Finds and caches all files in a given project using find." |
22 | 415 (cond |
416 ((null textmate-use-file-cache) (textmate-project-files root)) | |
417 ((equal (textmate-project-root) (car *textmate-project-files*)) | |
418 (cdr *textmate-project-files*)) | |
419 (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
|
420 `(,root . ,(textmate-project-files-find root))))))) |
22 | 421 |
422 (defun textmate-project-root () | |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
423 "Returns the current project root." |
22 | 424 (when (or |
425 (null *textmate-project-root*) | |
171
2f865a7f84e6
textmate: do not trust cached project root of $HOME
Augie Fackler <durin42@gmail.com>
parents:
161
diff
changeset
|
426 (not (string-match *textmate-project-root* default-directory)) |
2f865a7f84e6
textmate: do not trust cached project root of $HOME
Augie Fackler <durin42@gmail.com>
parents:
161
diff
changeset
|
427 (not (string-match *textmate-project-root* (getenv "HOME")))) |
22 | 428 (let ((root (textmate-find-project-root))) |
429 (if root | |
430 (setq *textmate-project-root* (expand-file-name (concat root "/"))) | |
431 (setq *textmate-project-root* nil)))) | |
432 *textmate-project-root*) | |
433 | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
434 (defun root-match(root names) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
435 (member (car names) (directory-files root))) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
436 |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
437 (defun root-matches(root names) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
438 (if (root-match root names) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
439 (root-match root names) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
440 (if (eq (length (cdr names)) 0) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
441 'nil |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
442 (root-matches root (cdr names)) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
443 ))) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
444 |
22 | 445 (defun textmate-find-project-root (&optional root) |
152
a24d5587386f
textmate.el: update to latest version
Augie Fackler <durin42@gmail.com>
parents:
141
diff
changeset
|
446 "Determines the current project root by recursively searching for an indicator." |
22 | 447 (when (null root) (setq root default-directory)) |
448 (cond | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
449 ((root-matches root *textmate-project-roots*) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
450 (expand-file-name root)) |
22 | 451 ((equal (expand-file-name root) "/") nil) |
452 (t (textmate-find-project-root (concat (file-name-as-directory root) ".."))))) | |
453 | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
454 (defun textmate-shift-right (&optional arg) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
455 "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
|
456 |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
457 A place is considered `tab-width' character columns." |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
458 (interactive) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
459 (let ((deactivate-mark nil) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
460 (beg (or (and mark-active (region-beginning)) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
461 (line-beginning-position))) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
462 (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
|
463 (indent-rigidly beg end (* (or arg 1) tab-width)))) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
464 |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
465 (defun textmate-shift-left (&optional arg) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
466 "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
|
467 (interactive) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
468 (textmate-shift-right (* -1 (or arg 1)))) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
469 |
22 | 470 ;;;###autoload |
471 (define-minor-mode textmate-mode "TextMate Emulation Minor Mode" | |
472 :lighter " mate" :global t :keymap *textmate-mode-map* | |
141
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
473 (add-hook 'ido-setup-hook 'textmate-ido-fix) |
e30655eb7050
textmate.el: synced with upstream
Augie Fackler <durin42@gmail.com>
parents:
134
diff
changeset
|
474 (textmate-define-comment-line) |
22 | 475 ; activate preferred completion library |
476 (dolist (mode *textmate-completing-minor-mode-alist*) | |
477 (if (eq (car mode) textmate-completing-library) | |
478 (funcall (cadr mode) t) | |
479 (when (fboundp | |
480 (cadr (assoc (car mode) *textmate-completing-function-alist*))) | |
481 (funcall (cadr mode) -1))))) | |
482 | |
483 (provide 'textmate) | |
484 ;;; textmate.el ends here |