Mercurial > emacs
annotate lisp/org/org-ctags.el @ 111955:b5bb4bf62d4a
Misc url-cookie tidy-up.
* lisp/url/url-cookie.el: Don't require cl when compiling.
(url-cookie-clean-up, url-cookie-generate-header-lines): Use dolist.
(url-cookie-parse-file, url-cookie-store, url-cookie-retrieve)
(url-cookie-handle-set-cookie): Simplify.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Mon, 13 Dec 2010 20:18:22 -0800 |
parents | a7740098b594 |
children | 6378d1b57038 |
rev | line source |
---|---|
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
1 ;;; org-ctags.el - Integrate Emacs "tags" facility with org mode. |
108180
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
2 ;; |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
3 ;; Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
4 |
108180
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
5 ;; Author: Paul Sexton <eeeickythump@gmail.com> |
111880
a7740098b594
Update to Org mode 7.4
Carsten Dominik <carsten.dominik@gmail.com>
parents:
111506
diff
changeset
|
6 ;; Version: 7.4 |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
7 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
8 ;; Keywords: org, wp |
111880
a7740098b594
Update to Org mode 7.4
Carsten Dominik <carsten.dominik@gmail.com>
parents:
111506
diff
changeset
|
9 ;; Version: 7.4 |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
10 ;; |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
11 ;; This file is part of GNU Emacs. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
12 ;; |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
13 ;; GNU Emacs is free software: you can redistribute it and/or modify |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
14 ;; it under the terms of the GNU General Public License as published by |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
15 ;; the Free Software Foundation, either version 3 of the License, or |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
16 ;; (at your option) any later version. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
17 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
18 ;; GNU Emacs is distributed in the hope that it will be useful, |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
21 ;; GNU General Public License for more details. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
22 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
23 ;; You should have received a copy of the GNU General Public License |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
25 |
108180
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
26 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
27 ;; Synopsis |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
28 ;; ======== |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
29 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
30 ;; Allows org-mode to make use of the Emacs `etags' system. Defines tag |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
31 ;; destinations in org-mode files as any text between <<double angled |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
32 ;; brackets>>. This allows the tags-generation program `exuberant ctags' to |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
33 ;; parse these files and create tag tables that record where these |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
34 ;; destinations are found. Plain [[links]] in org mode files which do not have |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
35 ;; <<matching destinations>> within the same file will then be interpreted as |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
36 ;; links to these 'tagged' destinations, allowing seamless navigation between |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
37 ;; multiple org-mode files. Topics can be created in any org mode file and |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
38 ;; will always be found by plain links from other files. Other file types |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
39 ;; recognised by ctags (source code files, latex files, etc) will also be |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
40 ;; available as destinations for plain links, and similarly, org-mode links |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
41 ;; will be available as tags from source files. Finally, the function |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
42 ;; `org-ctags-find-tag-interactive' lets you choose any known tag, using |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
43 ;; autocompletion, and quickly jump to it. |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
44 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
45 ;; Installation |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
46 ;; ============ |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
47 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
48 ;; Install org mode |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
49 ;; Ensure org-ctags.el is somewhere in your emacs load path. |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
50 ;; Download and install Exuberant ctags -- "http://ctags.sourceforge.net/" |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
51 ;; Edit your .emacs file (see next section) and load emacs. |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
52 |
108180
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
53 ;; To put in your init file (.emacs): |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
54 ;; ================================== |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
55 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
56 ;; Assuming you already have org mode installed and set up: |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
57 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
58 ;; (setq org-ctags-path-to-ctags "/path/to/ctags/executable") |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
59 ;; (add-hook 'org-mode-hook |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
60 ;; (lambda () |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
61 ;; (define-key org-mode-map "\C-co" 'org-ctags-find-tag-interactive))) |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
62 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
63 ;; By default, with org-ctags loaded, org will first try and visit the tag |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
64 ;; with the same name as the link; then, if unsuccessful, ask the user if |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
65 ;; he/she wants to rebuild the 'TAGS' database and try again; then ask if |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
66 ;; the user wishes to append 'tag' as a new toplevel heading at the end of |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
67 ;; the buffer; and finally, defer to org's default behaviour which is to |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
68 ;; search the entire text of the current buffer for 'tag'. |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
69 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
70 ;; This behaviour can be modified by changing the value of |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
71 ;; ORG-CTAGS-OPEN-LINK-FUNCTIONS. For example I have the following in my |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
72 ;; .emacs, which describes the same behaviour as the above paragraph with |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
73 ;; one difference: |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
74 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
75 ;; (setq org-ctags-open-link-functions |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
76 ;; '(org-ctags-find-tag |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
77 ;; org-ctags-ask-rebuild-tags-file-then-find-tag |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
78 ;; org-ctags-ask-append-topic |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
79 ;; org-ctags-fail-silently)) ; <-- prevents org default behaviour |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
80 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
81 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
82 ;; Usage |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
83 ;; ===== |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
84 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
85 ;; When you click on a link "[[foo]]" and org cannot find a matching "<<foo>>" |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
86 ;; in the current buffer, the tags facility will take over. The file TAGS in |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
87 ;; the active directory is examined to see if the tags facility knows about |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
88 ;; "<<foo>>" in any other files. If it does, the matching file will be opened |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
89 ;; and the cursor will jump to the position of "<<foo>>" in that file. |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
90 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
91 ;; User-visible functions: |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
92 ;; - `org-ctags-find-tag-interactive': type a tag (plain link) name and visit |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
93 ;; it. With autocompletion. Bound to ctrl-O in the above setup. |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
94 ;; - All the etags functions should work. These include: |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
95 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
96 ;; M-. `find-tag' -- finds the tag at point |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
97 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
98 ;; C-M-. find-tag based on regular expression |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
99 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
100 ;; M-x tags-search RET -- like C-M-. but searches through ENTIRE TEXT |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
101 ;; of ALL the files referenced in the TAGS file. A quick way to |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
102 ;; search through an entire 'project'. |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
103 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
104 ;; M-* "go back" from a tag jump. Like `org-mark-ring-goto'. |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
105 ;; You may need to bind this key yourself with (eg) |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
106 ;; (global-set-key (kbd "<M-kp-multiply>") 'pop-tag-mark) |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
107 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
108 ;; (see etags chapter in Emacs manual for more) |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
109 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
110 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
111 ;; Keeping the TAGS file up to date |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
112 ;; ================================ |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
113 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
114 ;; Tags mode has no way of knowing that you have created new tags by typing in |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
115 ;; your org-mode buffer. New tags make it into the TAGS file in 3 ways: |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
116 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
117 ;; 1. You re-run (org-ctags-create-tags "directory") to rebuild the file. |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
118 ;; 2. You put the function `org-ctags-ask-rebuild-tags-file-then-find-tag' in |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
119 ;; your `org-open-link-functions' list, as is done in the setup |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
120 ;; above. This will cause the TAGS file to be rebuilt whenever a link |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
121 ;; cannot be found. This may be slow with large file collections however. |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
122 ;; 3. You run the following from the command line (all 1 line): |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
123 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
124 ;; ctags --langdef=orgmode --langmap=orgmode:.org |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
125 ;; --regex-orgmode="/<<([^>]+)>>/\1/d,definition/" |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
126 ;; -f /your/path/TAGS -e -R /your/path/*.org |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
127 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
128 ;; If you are paranoid, you might want to run (org-ctags-create-tags |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
129 ;; "/path/to/org/files") at startup, by including the following toplevel form |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
130 ;; in .emacs. However this can cause a pause of several seconds if ctags has |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
131 ;; to scan lots of files. |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
132 ;; |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
133 ;; (progn |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
134 ;; (message "-- rebuilding tags tables...") |
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
135 ;; (mapc 'org-create-tags tags-table-list)) |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
136 |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
137 ;;; Code: |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
138 |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
139 (eval-when-compile (require 'cl)) |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
140 |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
141 (require 'org) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
142 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
143 (defgroup org-ctags nil |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
144 "Options concerning use of ctags within org mode." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
145 :tag "Org-Ctags" |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
146 :group 'org-link) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
147 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
148 (defvar org-ctags-enabled-p t |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
149 "Activate ctags support in org mode?") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
150 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
151 (defvar org-ctags-tag-regexp "/<<([^>]+)>>/\\1/d,definition/" |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
152 "Regexp expression used by ctags external program. |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
153 The regexp matches tag destinations in org-mode files. |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
154 Format is: /REGEXP/TAGNAME/FLAGS,TAGTYPE/ |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
155 See the ctags documentation for more information.") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
156 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
157 (defcustom org-ctags-path-to-ctags |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
158 (case system-type |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
159 (windows-nt "ctags.exe") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
160 (darwin "ctags-exuberant") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
161 (t "ctags-exuberant")) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
162 "Full path to the ctags executable file." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
163 :group 'org-ctags |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
164 :type 'file) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
165 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
166 (defcustom org-ctags-open-link-functions |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
167 '(org-ctags-find-tag |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
168 org-ctags-ask-rebuild-tags-file-then-find-tag |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
169 org-ctags-ask-append-topic) |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
170 "List of functions to be prepended to ORG-OPEN-LINK-FUNCTIONS when ORG-CTAGS is active." |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
171 :group 'org-ctags |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
172 :type 'hook |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
173 :options '(org-ctags-find-tag |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
174 org-ctags-ask-rebuild-tags-file-then-find-tag |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
175 org-ctags-rebuild-tags-file-then-find-tag |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
176 org-ctags-ask-append-topic |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
177 org-ctags-append-topic |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
178 org-ctags-ask-visit-buffer-or-file |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
179 org-ctags-visit-buffer-or-file |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
180 org-ctags-fail-silently)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
181 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
182 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
183 (defvar org-ctags-tag-list nil |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
184 "List of all tags in the active TAGS file. |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
185 Created as a local variable in each buffer.") |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
186 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
187 (defcustom org-ctags-new-topic-template |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
188 "* <<%t>>\n\n\n\n\n\n" |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
189 "Text to insert when creating a new org file via opening a hyperlink. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
190 The following patterns are replaced in the string: |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
191 `%t' - replaced with the capitalized title of the hyperlink" |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
192 :group 'org-ctags |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
193 :type 'string) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
194 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
195 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
196 (add-hook 'org-mode-hook |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
197 (lambda () |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
198 (when (and org-ctags-enabled-p |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
199 (buffer-file-name)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
200 ;; Make sure this file's directory is added to default |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
201 ;; directories in which to search for tags. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
202 (let ((tags-filename |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
203 (expand-file-name |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
204 (concat (file-name-directory (buffer-file-name)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
205 "/TAGS")))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
206 (when (file-exists-p tags-filename) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
207 (visit-tags-table tags-filename)))))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
208 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
209 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
210 (defadvice visit-tags-table (after org-ctags-load-tag-list activate compile) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
211 (when (and org-ctags-enabled-p tags-file-name) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
212 (set (make-local-variable 'org-ctags-tag-list) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
213 (org-ctags-all-tags-in-current-tags-table)))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
214 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
215 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
216 (defun org-ctags-enable () |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
217 (put 'org-mode 'find-tag-default-function 'org-ctags-find-tag-at-point) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
218 (setq org-ctags-enabled-p t) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
219 (dolist (fn org-ctags-open-link-functions) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
220 (add-hook 'org-open-link-functions fn t))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
221 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
222 |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
223 ;;; General utility functions. =============================================== |
108180
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
224 ;; These work outside org-ctags mode. |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
225 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
226 (defun org-ctags-get-filename-for-tag (tag) |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
227 "TAG is a string. Search the active TAGS file for a matching tag. |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
228 If the tag is found, return a list containing the filename, line number, and |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
229 buffer position where the tag is found." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
230 (interactive "sTag: ") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
231 (unless tags-file-name |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
232 (call-interactively (visit-tags-table))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
233 (save-excursion |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
234 (visit-tags-table-buffer 'same) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
235 (when tags-file-name |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
236 (with-current-buffer (get-file-buffer tags-file-name) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
237 (goto-char (point-min)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
238 (cond |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
239 ((re-search-forward (format "^.*%s\\([0-9]+\\),\\([0-9]+\\)$" |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
240 (regexp-quote tag)) nil t) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
241 (let ((line (string-to-number (match-string 1))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
242 (pos (string-to-number (match-string 2)))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
243 (cond |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
244 ((re-search-backward "\n\\(.*\\),[0-9]+\n") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
245 (list (match-string 1) line pos)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
246 (t ; can't find a file name preceding the matched |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
247 ; tag?? |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
248 (error "Malformed TAGS file: %s" (buffer-name)))))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
249 (t ; tag not found |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
250 nil)))))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
251 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
252 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
253 (defun org-ctags-all-tags-in-current-tags-table () |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
254 "Read all tags defined in the active TAGS file, into a list of strings. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
255 Return the list." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
256 (interactive) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
257 (let ((taglist nil)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
258 (unless tags-file-name |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
259 (call-interactively (visit-tags-table))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
260 (save-excursion |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
261 (visit-tags-table-buffer 'same) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
262 (with-current-buffer (get-file-buffer tags-file-name) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
263 (goto-char (point-min)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
264 (while (re-search-forward "^.*\\(.*\\)\\([0-9]+\\),\\([0-9]+\\)$" |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
265 nil t) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
266 (push (substring-no-properties (match-string 1)) taglist))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
267 taglist))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
268 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
269 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
270 (defun org-ctags-string-search-and-replace (search replace string) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
271 "Replace all instances of SEARCH with REPLACE in STRING." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
272 (replace-regexp-in-string (regexp-quote search) replace string t t)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
273 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
274 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
275 (defun y-or-n-minibuffer (prompt) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
276 (let ((use-dialog-box nil)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
277 (y-or-n-p prompt))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
278 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
279 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
280 ;;; Internal functions ======================================================= |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
281 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
282 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
283 (defun org-ctags-open-file (name &optional title) |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
284 "Visit or create a file called `NAME.org', and insert a new topic. |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
285 The new topic will be titled NAME (or TITLE if supplied)." |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
286 (interactive "sFile name: ") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
287 (let ((filename (substitute-in-file-name (expand-file-name name)))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
288 (condition-case v |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
289 (progn |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
290 (org-open-file name t) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
291 (message "Opened file OK") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
292 (goto-char (point-max)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
293 (insert (org-ctags-string-search-and-replace |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
294 "%t" (capitalize (or title name)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
295 org-ctags-new-topic-template)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
296 (message "Inserted new file text OK") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
297 (org-mode-restart)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
298 (error (error "Error %S in org-ctags-open-file" v))))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
299 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
300 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
301 ;;;; Misc interoperability with etags system ================================= |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
302 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
303 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
304 (defadvice find-tag (before org-ctags-set-org-mark-before-finding-tag |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
305 activate compile) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
306 "Before trying to find a tag, save our current position on org mark ring." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
307 (save-excursion |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
308 (if (and (org-mode-p) org-ctags-enabled-p) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
309 (org-mark-ring-push)))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
310 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
311 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
312 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
313 (defun org-ctags-find-tag-at-point () |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
314 "Determine default tag to search for, based on text at point. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
315 If there is no plausible default, return nil." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
316 (let (from to bound) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
317 (when (or (ignore-errors |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
318 ;; Look for hyperlink around `point'. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
319 (save-excursion |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
320 (search-backward "[[") (setq from (+ 2 (point)))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
321 (save-excursion |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
322 (goto-char from) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
323 (search-forward "]") (setq to (- (point) 1))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
324 (and (> to from) (>= (point) from) (<= (point) to))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
325 (progn |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
326 ;; Look at text around `point'. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
327 (save-excursion |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
328 (skip-syntax-backward "w_") (setq from (point))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
329 (save-excursion |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
330 (skip-syntax-forward "w_") (setq to (point))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
331 (> to from)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
332 ;; Look between `line-beginning-position' and `point'. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
333 (save-excursion |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
334 (and (setq bound (line-beginning-position)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
335 (skip-syntax-backward "^w_" bound) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
336 (> (setq to (point)) bound) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
337 (skip-syntax-backward "w_") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
338 (setq from (point)))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
339 ;; Look between `point' and `line-end-position'. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
340 (save-excursion |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
341 (and (setq bound (line-end-position)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
342 (skip-syntax-forward "^w_" bound) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
343 (< (setq from (point)) bound) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
344 (skip-syntax-forward "w_") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
345 (setq to (point))))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
346 (buffer-substring-no-properties from to)))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
347 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
348 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
349 ;;; Functions for use with 'org-open-link-functions' hook ================= |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
350 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
351 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
352 (defun org-ctags-find-tag (name) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
353 "This function is intended to be used in ORG-OPEN-LINK-FUNCTIONS. |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
354 Look for a tag called `NAME' in the current TAGS table. If it is found, |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
355 visit the file and location where the tag is found." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
356 (interactive "sTag: ") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
357 (let ((old-buf (current-buffer)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
358 (old-pnt (point-marker)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
359 (old-mark (copy-marker (mark-marker)))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
360 (condition-case nil |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
361 (progn (find-tag name) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
362 t) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
363 (error |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
364 ;; only restore old location if find-tag raises error |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
365 (set-buffer old-buf) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
366 (goto-char old-pnt) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
367 (set-marker (mark-marker) old-mark) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
368 nil)))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
369 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
370 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
371 (defun org-ctags-visit-buffer-or-file (name &optional create) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
372 "This function is intended to be used in ORG-OPEN-LINK-FUNCTIONS. |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
373 Visit buffer named `NAME.org'. If there is no such buffer, visit the file |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
374 with the same name if it exists. If the file does not exist, then behavior |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
375 depends on the value of CREATE. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
376 |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
377 If CREATE is nil (default), then return nil. Do not create a new file. |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
378 If CREATE is t, create the new file and visit it. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
379 If CREATE is the symbol `ask', then ask the user if they wish to create |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
380 the new file." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
381 (interactive) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
382 (let ((filename (concat (substitute-in-file-name |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
383 (expand-file-name name)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
384 ".org"))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
385 (cond |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
386 ((get-buffer (concat name ".org")) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
387 ;; Buffer is already open |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
388 (switch-to-buffer (get-buffer (concat name ".org")))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
389 ((file-exists-p filename) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
390 ;; File exists but is not open --> open it |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
391 (message "Opening existing org file `%S'..." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
392 filename) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
393 (org-open-file filename t)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
394 ((or (eql create t) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
395 (and (eql create 'ask) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
396 (y-or-n-p (format "File `%s.org' not found; create?" name)))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
397 (org-ctags-open-file filename name)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
398 (t ;; File does not exist, and we don't want to create it. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
399 nil)))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
400 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
401 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
402 (defun org-ctags-ask-visit-buffer-or-file (name) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
403 "This function is intended to be used in ORG-OPEN-LINK-FUNCTIONS. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
404 Wrapper for org-ctags-visit-buffer-or-file, which ensures the user is |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
405 asked before creating a new file." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
406 (org-ctags-visit-buffer-or-file name 'ask)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
407 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
408 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
409 (defun org-ctags-append-topic (name &optional narrowp) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
410 "This function is intended to be used in ORG-OPEN-LINK-FUNCTIONS. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
411 Append a new toplevel heading to the end of the current buffer. The |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
412 heading contains NAME surrounded by <<angular brackets>>, thus making |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
413 the heading a destination for the tag `NAME'." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
414 (interactive "sTopic: ") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
415 (widen) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
416 (goto-char (point-max)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
417 (newline 2) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
418 (message "Adding topic in buffer %s" (buffer-name)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
419 (insert (org-ctags-string-search-and-replace |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
420 "%t" (capitalize name) org-ctags-new-topic-template)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
421 (backward-char 4) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
422 (org-update-radio-target-regexp) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
423 (end-of-line) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
424 (forward-line 2) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
425 (when narrowp |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
426 ;;(org-tree-to-indirect-buffer 1) ;; opens new frame |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
427 (org-narrow-to-subtree)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
428 t) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
429 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
430 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
431 (defun org-ctags-ask-append-topic (name &optional narrowp) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
432 "This function is intended to be used in ORG-OPEN-LINK-FUNCTIONS. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
433 Wrapper for org-ctags-append-topic, which first asks the user if they want |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
434 to append a new topic." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
435 (if (y-or-n-p (format "Topic `%s' not found; append to end of buffer?" |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
436 name)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
437 (org-ctags-append-topic name narrowp) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
438 nil)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
439 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
440 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
441 (defun org-ctags-rebuild-tags-file-then-find-tag (name) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
442 "This function is intended to be used in ORG-OPEN-LINK-FUNCTIONS. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
443 Like ORG-CTAGS-FIND-TAG, but calls the external ctags program first, |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
444 to rebuild (update) the TAGS file." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
445 (unless tags-file-name |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
446 (call-interactively (visit-tags-table))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
447 (when (buffer-file-name) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
448 (org-ctags-create-tags)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
449 (org-ctags-find-tag name)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
450 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
451 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
452 (defun org-ctags-ask-rebuild-tags-file-then-find-tag (name) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
453 "This function is intended to be used in ORG-OPEN-LINK-FUNCTIONS. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
454 Wrapper for org-ctags-rebuild-tags-file-then-find-tag." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
455 (if (and (buffer-file-name) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
456 (y-or-n-p |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
457 (format |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
458 "Tag `%s' not found. Rebuild table `%s/TAGS' and look again?" |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
459 name |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
460 (file-name-directory (buffer-file-name))))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
461 (org-ctags-rebuild-tags-file-then-find-tag name) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
462 nil)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
463 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
464 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
465 (defun org-ctags-fail-silently (name) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
466 "This function is intended to be used in ORG-OPEN-LINK-FUNCTIONS. |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
467 Put as the last function in the list if you want to prevent org's default |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
468 behavior of free text search." |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
469 t) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
470 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
471 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
472 ;;; User-visible functions =================================================== |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
473 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
474 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
475 (defun org-ctags-create-tags (&optional directory-name) |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
476 "(Re)create tags file in the directory of the active buffer. |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
477 The file will contain tag definitions for all the files in the |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
478 directory and its subdirectories which are recognized by ctags. |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
479 This will include files ending in `.org' as well as most other |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
480 source files (.C, .H, .EL, .LISP, etc). All the resulting tags |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
481 end up in one file, called TAGS, located in the directory. This |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
482 function may take several seconds to finish if the directory or |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
483 its subdirectories contain large numbers of taggable files." |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
484 (interactive) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
485 (assert (buffer-file-name)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
486 (let ((dir-name (or directory-name |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
487 (file-name-directory (buffer-file-name)))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
488 (exitcode nil)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
489 (save-excursion |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
490 (setq exitcode |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
491 (shell-command |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
492 (format (concat "%s --langdef=orgmode --langmap=orgmode:.org " |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
493 "--regex-orgmode=\"%s\" -f \"%s\" -e -R \"%s\"") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
494 org-ctags-path-to-ctags |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
495 org-ctags-tag-regexp |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
496 (expand-file-name (concat dir-name "/TAGS")) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
497 (expand-file-name (concat dir-name "/*"))))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
498 (cond |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
499 ((eql 0 exitcode) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
500 (set (make-local-variable 'org-ctags-tag-list) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
501 (org-ctags-all-tags-in-current-tags-table))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
502 (t |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
503 ;; This seems to behave differently on Linux, so just ignore |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
504 ;; error codes for now |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
505 ;;(error "Calling ctags executable resulted in error code: %s" |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
506 ;; exitcode) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
507 nil))))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
508 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
509 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
510 (defvar org-ctags-find-tag-history nil |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
511 "History of tags visited by org-ctags-find-tag-interactive.") |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
512 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
513 (defun org-ctags-find-tag-interactive () |
109462
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
514 "Prompt for the name of a tag, with autocompletion, then visit the named tag. |
a150e8a14679
Install version 7.01 of Org-mode
Carsten Dominik <carsten.dominik@gmail.com>
parents:
108180
diff
changeset
|
515 Uses `ido-mode' if available. |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
516 If the user enters a string that does not match an existing tag, create |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
517 a new topic." |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
518 (interactive) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
519 (let* ((completing-read-fn (if (fboundp 'ido-completing-read) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
520 'ido-completing-read |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
521 'completing-read)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
522 (tag (funcall completing-read-fn "Topic: " org-ctags-tag-list |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
523 nil 'confirm nil 'org-ctags-find-tag-history))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
524 (when tag |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
525 (cond |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
526 ((member tag org-ctags-tag-list) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
527 ;; Existing tag |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
528 (push tag org-ctags-find-tag-history) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
529 (find-tag tag)) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
530 (t |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
531 ;; New tag |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
532 (run-hook-with-args-until-success |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
533 'org-open-link-functions tag)))))) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
534 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
535 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
536 (org-ctags-enable) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
537 |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
538 (provide 'org-ctags) |
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
539 |
108180
b781593bacdc
Fix commenting convention
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107863
diff
changeset
|
540 ;; arch-tag: 4b1ddd5a-8529-4b17-bcde-96a922d26343 |
107863
594e81986a75
2010-04-10 Carsten Dominik <carsten.dominik@gmail.com>
Carsten Dominik <carsten.dominik@gmail.com>
parents:
diff
changeset
|
541 ;;; org-ctags.el ends here |