annotate lisp/org/org-ctags.el @ 112275:6378d1b57038

Add 2011 to remaining FSF/AIST copyright years.
author Glenn Morris <rgm@gnu.org>
date Sat, 15 Jan 2011 14:10:37 -0800
parents a7740098b594
children ef719132ddfa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 ;;
112275
6378d1b57038 Add 2011 to remaining FSF/AIST copyright years.
Glenn Morris <rgm@gnu.org>
parents: 111880
diff changeset
3 ;; Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
107863
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