mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-11-28 07:44:49 +00:00
Footnotes: Activate labels as links
This commit add a new face for footnote labels, and activates footnote labels for mouse clicks and for `C-c C-o', to jump to the corresponding reference or definition.
This commit is contained in:
parent
317990dd8a
commit
3559b2dc93
@ -26,9 +26,9 @@ reference is simply the marker in square brackets inside text.
|
||||
For example:
|
||||
|
||||
#+begin_src org
|
||||
The Org homepage[1] now looks a lot better than it used to.
|
||||
The Org homepage[fn:1] now looks a lot better than it used to.
|
||||
...
|
||||
[1] The link is: http://orgmode.org
|
||||
[fn:1] The link is: http://orgmode.org
|
||||
#+end_src
|
||||
|
||||
Org-mode extends the number-based syntax to /named/ footnotes and
|
||||
@ -43,15 +43,14 @@ references:
|
||||
unique label word or, for simplicity of automatic creation,
|
||||
a number.
|
||||
|
||||
- [fn:: This is the inline definition of this footnote] ::
|
||||
A LaTeX-like anonymous footnote where the definition is given
|
||||
- [fn:: This is the inline definition of this footnote] :: A
|
||||
LaTeX-like anonymous footnote where the definition is given
|
||||
directly at the reference point.
|
||||
|
||||
- [fn:name: a definition] ::
|
||||
An inline definition of a footnote, which also specifies a name
|
||||
for the note. Since Org allows multiple references to the same
|
||||
note, you can then use use `[fn:name]' to create additional
|
||||
references.
|
||||
- [fn:name: a definition] :: An inline definition of a footnote,
|
||||
which also specifies a name for the note. Since Org allows
|
||||
multiple references to the same note, you can then use use
|
||||
`[fn:name]' to create additional references.
|
||||
|
||||
Footnote labels can be created automatically, or you create names
|
||||
yourself. This is handled by the variable
|
||||
@ -60,19 +59,17 @@ keywords, see the docstring of that variable for details.
|
||||
|
||||
The following command handles footnotes:
|
||||
|
||||
- C-c C-x f ::
|
||||
The footnote action command. When the cursor is on a
|
||||
footnote reference, jump to the definition. When it is at a
|
||||
definition, jump to the (first) reference. Otherwise,
|
||||
- C-c C-x f :: The footnote action command. When the cursor is
|
||||
on a footnote reference, jump to the definition. When it is
|
||||
at a definition, jump to the (first) reference. Otherwise,
|
||||
create a new footnote. Depending on the variable
|
||||
`org-footnote-define-inline' (with associated =#+STARTUP=
|
||||
options =fninline= and =nofninline=), the definitions will
|
||||
be placed locally, or into the nearest outline section with
|
||||
the heading `Footnotes'. If no such section is found after
|
||||
the reference point, one will be created at the end of the
|
||||
file.
|
||||
When this command is called with a prefix argument, a menu of
|
||||
additional options is offered:
|
||||
file. When this command is called with a prefix argument, a
|
||||
menu of additional options is offered:
|
||||
- s :: Sort the footnote definitions by reference sequence.
|
||||
During editing, Org makes no effort to sort
|
||||
footnote definitions into a particular sequence.
|
||||
@ -87,11 +84,14 @@ The following command handles footnotes:
|
||||
something like `message-send-hook'.
|
||||
- d :: Delete the footnote at point, and all references to it.
|
||||
|
||||
- C-c C-c ::
|
||||
If the cursor is on a footnote reference, jump to the definition.
|
||||
If it is a the definition, jump back to the reference. When
|
||||
called with a prefix argument at either location, offer the
|
||||
same menu as `C-u C-c C-x f'.
|
||||
- C-c C-c :: If the cursor is on a footnote reference, jump to
|
||||
the definition. If it is a the definition, jump back to the
|
||||
reference. When called with a prefix argument at either
|
||||
location, offer the same menu as `C-u C-c C-x f'.
|
||||
|
||||
- C-c C-o or mouse-1/2 :: Footnote labels are also links to the
|
||||
corresponding definition/reference, and you can use the
|
||||
usual commands to follow these links.
|
||||
|
||||
Org-mode's footnote support is designed so that it should also
|
||||
work in buffers that are not in Org-mode, for example in email
|
||||
|
@ -1443,6 +1443,12 @@ d @r{Delete the footnote at point, and all definitions of and references}
|
||||
If the cursor is on a footnote reference, jump to the definition. If it is a
|
||||
the definition, jump back to the reference. When called at a footnote
|
||||
location with a prefix argument, offer the same menu as @kbd{C-c C-x f}.
|
||||
@kindex C-c C-o
|
||||
@kindex mouse-1
|
||||
@kindex mouse-2
|
||||
@item C-c C-c @r{or} mouse-1/2
|
||||
Footnote labels are also links to the corresponding definition/reference, and
|
||||
you can use the usual commands to follow these links.
|
||||
@end table
|
||||
|
||||
@node Orgstruct mode, , Footnotes, Document Structure
|
||||
|
@ -1,3 +1,12 @@
|
||||
2009-01-02 Carsten Dominik <carsten.dominik@gmail.com>
|
||||
|
||||
* org.el (org-set-font-lock-defaults): Trigger footnote
|
||||
fontification.
|
||||
(org-activate-footnote-links): New function.
|
||||
(org-activate-links): New entry `footnote'.
|
||||
|
||||
* org-faces.el (org-footnote): New face.
|
||||
|
||||
2009-01-01 Carsten Dominik <carsten.dominik@gmail.com>
|
||||
|
||||
* org-macs.el (org-re): Handle the [:word:] class.
|
||||
|
@ -239,6 +239,13 @@ column view defines special faces for each outline level. See the file
|
||||
"Face for links."
|
||||
:group 'org-faces)
|
||||
|
||||
(defface org-footnote
|
||||
'((((class color) (background light)) (:foreground "Purple" :underline t))
|
||||
(((class color) (background dark)) (:foreground "Cyan" :underline t))
|
||||
(t (:underline t)))
|
||||
"Face for links."
|
||||
:group 'org-faces)
|
||||
|
||||
(defface org-ellipsis
|
||||
'((((class color) (background light)) (:foreground "DarkGoldenrod" :underline t))
|
||||
(((class color) (background dark)) (:foreground "LightGoldenrod" :underline t))
|
||||
|
@ -148,6 +148,7 @@ with start and label of the footnote if there is a definition at point."
|
||||
(if (not pos)
|
||||
(error "Cannot find definition of footnote %s" label)
|
||||
(goto-char pos)
|
||||
(org-show-context 'link-search)
|
||||
(message "Edit definition and go back with `C-c &' or, if unique, with `C-c C-c'."))))
|
||||
|
||||
(defun org-footnote-goto-next-reference (label)
|
||||
@ -166,7 +167,10 @@ with start and label of the footnote if there is a definition at point."
|
||||
(re-search-forward re nil t))
|
||||
(and (goto-char (point-min))
|
||||
(re-search-forward re nil t)))))
|
||||
(if pos (goto-char pos)
|
||||
(if pos
|
||||
(progn
|
||||
(goto-char pos)
|
||||
(org-show-context 'link-search))
|
||||
(error "Cannot find reference of footnote %s" label))))
|
||||
|
||||
(defun org-footnote-normalize-label (label)
|
||||
|
36
lisp/org.el
36
lisp/org.el
@ -888,7 +888,7 @@ adaptive Use relative path for files in the current directory and sub-
|
||||
(const noabbrev)
|
||||
(const adaptive)))
|
||||
|
||||
(defcustom org-activate-links '(bracket angle plain radio tag date)
|
||||
(defcustom org-activate-links '(bracket angle plain radio tag date footnote)
|
||||
"Types of links that should be activated in Org-mode files.
|
||||
This is a list of symbols, each leading to the activation of a certain link
|
||||
type. In principle, it does not hurt to turn on most link types - there may
|
||||
@ -901,15 +901,18 @@ plain Plain links in normal text, no whitespace, like http://google.com.
|
||||
radio Text that is matched by a radio target, see manual for details.
|
||||
tag Tag settings in a headline (link to tag search).
|
||||
date Time stamps (link to calendar).
|
||||
footnote Footnote labels.
|
||||
|
||||
Changing this variable requires a restart of Emacs to become effective."
|
||||
:group 'org-link
|
||||
:type '(set (const :tag "Double bracket links (new style)" bracket)
|
||||
:type '(set :greedy t
|
||||
(const :tag "Double bracket links (new style)" bracket)
|
||||
(const :tag "Angular bracket links (old style)" angular)
|
||||
(const :tag "Plain text links" plain)
|
||||
(const :tag "Radio target matches" radio)
|
||||
(const :tag "Tags" tag)
|
||||
(const :tag "Timestamps" date)))
|
||||
(const :tag "Timestamps" date)
|
||||
(const :tag "Footnotes" footnote)))
|
||||
|
||||
(defcustom org-make-link-description-function nil
|
||||
"Function to use to generate link descriptions from links. If
|
||||
@ -3749,6 +3752,22 @@ will be prompted for."
|
||||
))
|
||||
t)))
|
||||
|
||||
(defun org-activate-footnote-links (limit)
|
||||
"Run through the buffer and add overlays to links."
|
||||
(if (re-search-forward "\\[\\([0-9]+\\]\\|fn:[^ \t\r\n:]+?[]:]\\)"
|
||||
limit t)
|
||||
(progn
|
||||
(add-text-properties (match-beginning 0) (match-end 0)
|
||||
(list 'mouse-face 'highlight
|
||||
'rear-nonsticky org-nonsticky-props
|
||||
'keymap org-mouse-map
|
||||
'help-echo
|
||||
(if (= (point-at-bol) (match-beginning 0))
|
||||
"Footnote definition"
|
||||
"Footnote reference")
|
||||
))
|
||||
t)))
|
||||
|
||||
(defun org-activate-bracket-links (limit)
|
||||
"Run through the buffer and add overlays to bracketed links."
|
||||
(if (re-search-forward org-bracket-link-regexp limit t)
|
||||
@ -4003,6 +4022,8 @@ between words."
|
||||
(if (memq 'bracket lk) '(org-activate-bracket-links (0 'org-link t)))
|
||||
(if (memq 'radio lk) '(org-activate-target-links (0 'org-link t)))
|
||||
(if (memq 'date lk) '(org-activate-dates (0 'org-date t)))
|
||||
(if (memq 'footnote lk) '(org-activate-footnote-links
|
||||
(0 'org-footnote t)))
|
||||
'("^&?%%(.*\\|<%%([^>\n]*?>" (0 'org-sexp-date t))
|
||||
'(org-hide-wide-columns (0 nil append))
|
||||
;; TODO lines
|
||||
@ -6913,8 +6934,11 @@ application the system uses for this file type."
|
||||
(move-marker org-open-link-marker (point))
|
||||
(setq org-window-config-before-follow-link (current-window-configuration))
|
||||
(org-remove-occur-highlights nil nil t)
|
||||
(if (org-at-timestamp-p t)
|
||||
(org-follow-timestamp-link)
|
||||
(cond
|
||||
((org-at-timestamp-p t) (org-follow-timestamp-link))
|
||||
((or (org-footnote-at-reference-p) (org-footnote-at-definition-p))
|
||||
(org-footnote-action))
|
||||
(t
|
||||
(let (type path link line search (pos (point)))
|
||||
(catch 'match
|
||||
(save-excursion
|
||||
@ -7060,7 +7084,7 @@ application the system uses for this file type."
|
||||
(error "Abort"))))
|
||||
|
||||
(t
|
||||
(browse-url-at-point)))))
|
||||
(browse-url-at-point))))))
|
||||
(move-marker org-open-link-marker nil)
|
||||
(run-hook-with-args 'org-follow-link-hook))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user