Mercurial > emacs
annotate lisp/skeleton.el @ 99501:e3acb52d33e1
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-yank): Make any prefix force normal yanking.
Suppress folding if text would be swallowed into a folded
subtree.
(org-yank-folded-subtrees, org-yank): Docstring updates.
* org-agenda.el (org-agenda-compare-effort): Treat no effort
defined as 0.
* org-exp.el (org-export-language-setup): Add Catalan and
Esperanto language entries.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-refile): Allow refiling of entire regions.
* org-clock.el (org-clock-time%): New function.
* org.el (org-entry-get, org-entry-delete): Use safer regexps to
retrieve property values.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-agenda-list): Handle the value `only' of
org-agenda-show-log'.
(org-agenda-log-mode): Interpret a double prefix arg.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-export-html-footnotes-section): New variable.
(org-export-as-html): Use `org-export-html-footnotes-section' to
insert the footnotes.
(org-export-language-setup): Add "Footnotes" to language words.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-yank): Fix bug when not inserting a subtree.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-vm.el (org-vm-follow-link): Call `vm-preview-current-message'
instead of `vm-beginning-of-message'.
* org.el (org-make-link-regexps): Make sure that links to gnus can
contain brackets.
2008-11-12 Carsten Dominik <carsten.dominik@gmail.com>
* org-attach.el (org-attach-dir): Remove duplicate ID creation
code.
* org-id.el (org-id-new): Use `org-trim' to extract the uuid from
shell output.
* org.el (org-link-abbrev-alist): Improve customization type.
* org-attach.el (org-attach-expand-link, org-attach-expand): New
functions.
* org-agenda.el (org-agenda-get-progress): Renamed from
`org-get-closed'. Implement searching for state changes as well.
(org-agenda-log-mode-items): New option.
(org-agenda-log-mode): New option prefix argument, interpreted as
request to show all possible progress info.
(org-agenda-get-day-entries): Call `org-get-progress' instead of
`org-get-closed'.
(org-agenda-set-mode-name): Handle the more complex log mode
settings.
(org-get-closed): New alias, pointing to `org-get-progress'.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-file-apps-defaults-gnu)
(org-file-apps-defaults-macosx)
(org-file-apps-defaults-windowsnt): Add an entry defining the
system command.
(org-file-apps): Allow `system' as key and value.
(org-open-at-point): Explain the effect of a double prefix arg.
(org-open-file): If the argument `in-emacs' is (16),
i.e. corresponding to a double prefix argument, try to open the
file externally.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-insert-link): Abbreviate absolute files names in
links. Also, fix a bug in which the double C-u prefix would not
be honored.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-insert-heading): If buffer does not end with a
newline, add one if necessary to insert headline correctly.
* org-exp.el (org-export-as-html): Make sure that <hr/> is between
paragraphs, not inside.
* org.el (org-todo): Quote
`org-agenda-headline-snapshot-before-repeat'.
* org-exp.el (org-export-as-html): Fully process link descriptions.
(org-export-html-format-desc): New function.
(org-export-as-html): Collect footnotes into the correct basket.
(org-html-protect): No longer protect quotations marks here, this
goes wrong.
* org-agenda.el (org-agenda-remove-marked-text): Bind variable
BEG.
* org-compat.el (org-fit-window-to-buffer): New function (not
really, a preliminary and incomplete version was present earlier,
but not used).
* org.el (org-fast-todo-selection, org-fast-tag-selection): Use
`org-fit-window-to-buffer'.
* org-exp.el (org-export): Use `org-fit-window-to-buffer'.
* org-agenda.el (org-agenda-get-restriction-and-command)
(org-fit-agenda-window, org-agenda-convert-date): Use
`org-fit-window-to-buffer'.
* org-exp.el (org-export-as-html): Process href links through
`org-export-html-format-href'.
(org-export-html-format-href): New function.
* org-agenda.el (org-agenda-todo): Update only the current
headline if this is a repeated TODO, marked done for today.
(org-agenda-change-all-lines): New argument JUST-THIS, to change
only the current line.
* org.el (org-todo): Take a snapshot of the headline if the
repeater might change it.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org-publish.el (org-publish-find-title): Remove buffers visited
only for extracting the title.
* org-exp.el (org-export-html-style)
(org-export-html-style-default): Mark style definitions as
unparsed CDATA.
* org-publish.el (org-publish-validate-link): Function
re-introduced.
2008-11-12 Charles Sebold <csebold@gmail.com>
* org-plot.el (org-plot/add-options-to-plist): Supports timefmt
property.
(org-plot-quote-timestamp-field): New function.
(org-plot-quote-tsv-field): Call timestamp field function when
necessary rather than just quoting as a string.
(org-plot/gnuplot-to-data): Pass in timefmt property.
(org-plot/gnuplot-script): Supports timefmt property.
(org-plot/gnuplot): Checks for timestamp column before checking
for text index column.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-insert-heading): Improve behavior with hidden subtrees.
* org-publish.el (org-publish-org-index): Create a section in the
index file.
(org-publish-org-index): Stop linking to directories.
* org.el (org-emphasis-alist): Use span instead of <u> to
underline text.
* org-exp.el (org-export-as-html): Make sure <p> is closed before
<pre> sections.
2008-11-12 Sebastian Rose <sebastian_rose@gmx.de>
* org-jsinfo.el (org-infojs-template): Remove language attribute
from script tag.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org-agenda.el (org-agenda-remove-marked-text): New function.
(org-agenda-mark-filtered-text)
(org-agenda-unmark-filtered-text): New functions.
(org-write-agenda): Remove fltered text.
* org.el (org-make-tags-matcher): Give access to TODO "property"
without speed penalty.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-link-frame-setup): Add `org-gnus-no-new-news' as an
option.
(org-store-link-props): Make sure adding to the plist works
correctly.
* org-gnus.el (org-gnus-no-new-news): New function.
(org-gnus-follow-link): Allow the article ID to be a message-id,
in addition to allowing article numbers. Message IDs make much
more roubust links.
(org-gnus-store-link): Use message-id to create link.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el (org-emphasize): Reverse the selection array.
(org-emphasis-alist): Set <code> tags for the verbatim
environment.
* org-remember.el (org-remember-handler): Fix bug with
prefix-related changing of the note storage target.
* org-exp.el (org-print-icalendar-entries): Make the exported
priorities compatible with RFC 2445.
* org-clock.el (org-clock-save): Insert time stamp without
dependence on time-stamp.el.
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org.el ("saveplace"): If saveplace puts point into an invisible
location, make it visible.
(org-make-tags-matcher): Allow inactive time stamps in time
comparisons.
(org-yank-adjusted-subtrees): New option.
(org-yank): Incorporate adjusting trees.
(org-paste-subtree): New argument FOR-YANK which will cause
insertion at point without backing up over white lines, and leave
point at the end of the inserted text. Also if the cursor is
at the beginning of a headline, use the same level or the inserted
tree.
* org-publish.el (org-publish-get-base-files-1): Deal correctly
with broken symlinks
2008-11-12 Carsten Dominik <dominik@science.uva.nl>
* org-exp.el (org-export-select-tags, org-get-current-options):
Fix typo.
author | Carsten Dominik <dominik@science.uva.nl> |
---|---|
date | Wed, 12 Nov 2008 08:01:06 +0000 |
parents | ee5932bf781d |
children | a9dc0e7c3f2b |
rev | line source |
---|---|
94138
b6c3fde83add
Set coding-tag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
1 ;;; skeleton.el --- Lisp language extension for writing statement skeletons -*- coding: utf-8 -*- |
14169 | 2 |
74442 | 3 ;; Copyright (C) 1993, 1994, 1995, 1996, 2001, 2002, 2003, |
79721 | 4 ;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
6463 | 5 |
23869 | 6 ;; Author: Daniel Pfeiffer <occitan@esperanto.org> |
6463 | 7 ;; Maintainer: FSF |
12501 | 8 ;; Keywords: extensions, abbrev, languages, tools |
6463 | 9 |
10 ;; This file is part of GNU Emacs. | |
11 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94138
diff
changeset
|
12 ;; GNU Emacs is free software: you can redistribute it and/or modify |
6463 | 13 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94138
diff
changeset
|
14 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94138
diff
changeset
|
15 ;; (at your option) any later version. |
6463 | 16 |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94138
diff
changeset
|
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
6463 | 24 |
25 ;;; Commentary: | |
26 | |
12501 | 27 ;; A very concise language extension for writing structured statement |
6463 | 28 ;; skeleton insertion commands for programming language modes. This |
29 ;; originated in shell-script mode and was applied to ada-mode's | |
30 ;; commands which shrunk to one third. And these commands are now | |
31 ;; user configurable. | |
32 | |
33 ;;; Code: | |
34 | |
12501 | 35 ;; page 1: statement skeleton language definition & interpreter |
6463 | 36 ;; page 2: paired insertion |
37 ;; page 3: mirror-mode, an example for setting up paired insertion | |
38 | |
39 | |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
40 (defvar skeleton-transformation-function 'identity |
12501 | 41 "*If non-nil, function applied to literal strings before they are inserted. |
6463 | 42 It should take strings and characters and return them transformed, or nil |
43 which means no transformation. | |
44 Typical examples might be `upcase' or `capitalize'.") | |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
45 (defvaralias 'skeleton-transformation 'skeleton-transformation-function) |
6463 | 46 |
47 ; this should be a fourth argument to defvar | |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
48 (put 'skeleton-transformation-function 'variable-interactive |
6463 | 49 "aTransformation function: ") |
50 | |
51 | |
15489
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
52 (defvar skeleton-autowrap t |
63257
cacd1f888146
(skeleton-autowrap): Fix spellings in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
62740
diff
changeset
|
53 "Controls wrapping behavior of functions created with `define-skeleton'. |
15489
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
54 When the region is visible (due to `transient-mark-mode' or marking a region |
50869
7d308602f619
(skeleton-autowrap, skeleton-untabify, skeleton-newline-indent-rigidly)
Juanma Barranquero <lekktu@gmail.com>
parents:
49299
diff
changeset
|
55 with the mouse) and this is non-nil and the function was called without an |
15489
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
56 explicit ARG, then the ARG defaults to -1, i.e. wrapping around the visible |
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
57 region. |
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
58 |
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
59 We will probably delete this variable in a future Emacs version |
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
60 unless we get a substantial number of complaints about the auto-wrap |
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
61 feature.") |
6463 | 62 |
34838
10b89a04d05d
(skeleton-internal-1): Really make sure the first line of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
34836
diff
changeset
|
63 (defvar skeleton-end-newline t |
10b89a04d05d
(skeleton-internal-1): Really make sure the first line of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
34836
diff
changeset
|
64 "If non-nil, make sure that the skeleton inserted ends with a newline. |
10b89a04d05d
(skeleton-internal-1): Really make sure the first line of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
34836
diff
changeset
|
65 This just influences the way the default `skeleton-end-hook' behaves.") |
10b89a04d05d
(skeleton-internal-1): Really make sure the first line of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
34836
diff
changeset
|
66 |
13390
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
67 (defvar skeleton-end-hook |
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
68 (lambda () |
34838
10b89a04d05d
(skeleton-internal-1): Really make sure the first line of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
34836
diff
changeset
|
69 (or (eolp) (not skeleton-end-newline) (newline-and-indent))) |
13390
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
70 "Hook called at end of skeleton but before going to point of interest. |
34838
10b89a04d05d
(skeleton-internal-1): Really make sure the first line of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
34836
diff
changeset
|
71 By default this moves out anything following to next line, |
10b89a04d05d
(skeleton-internal-1): Really make sure the first line of
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
34836
diff
changeset
|
72 unless `skeleton-end-newline' is set to nil. |
13390
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
73 The variables `v1' and `v2' are still set when calling this.") |
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
74 |
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
75 |
12501 | 76 ;;;###autoload |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
77 (defvar skeleton-filter-function 'identity |
15489
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
78 "Function for transforming a skeleton proxy's aliases' variable value.") |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
79 (defvaralias 'skeleton-filter 'skeleton-filter-function) |
12501 | 80 |
81 (defvar skeleton-untabify t | |
50869
7d308602f619
(skeleton-autowrap, skeleton-untabify, skeleton-newline-indent-rigidly)
Juanma Barranquero <lekktu@gmail.com>
parents:
49299
diff
changeset
|
82 "When non-nil untabifies when deleting backwards with element -ARG.") |
12501 | 83 |
12886
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
84 (defvar skeleton-newline-indent-rigidly nil |
50869
7d308602f619
(skeleton-autowrap, skeleton-untabify, skeleton-newline-indent-rigidly)
Juanma Barranquero <lekktu@gmail.com>
parents:
49299
diff
changeset
|
85 "When non-nil, indent rigidly under current line for element `\\n'. |
12886
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
86 Else use mode's `indent-line-function'.") |
12501 | 87 |
88 (defvar skeleton-further-elements () | |
89 "A buffer-local varlist (see `let') of mode specific skeleton elements. | |
90 These variables are bound while interpreting a skeleton. Their value may | |
91 in turn be any valid skeleton element if they are themselves to be used as | |
92 skeleton elements.") | |
93 (make-variable-buffer-local 'skeleton-further-elements) | |
94 | |
95 | |
6463 | 96 (defvar skeleton-subprompt |
97 (substitute-command-keys | |
98 "RET, \\<minibuffer-local-map>\\[abort-recursive-edit] or \\[help-command]") | |
12501 | 99 "*Replacement for %s in prompts of recursive subskeletons.") |
6463 | 100 |
101 | |
102 (defvar skeleton-debug nil | |
103 "*If non-nil `define-skeleton' will override previous definition.") | |
104 | |
16768
5ff0874f1309
(skeleton-positions): Renamed from skeleton-marks.
Richard M. Stallman <rms@gnu.org>
parents:
16767
diff
changeset
|
105 (defvar skeleton-positions nil |
5ff0874f1309
(skeleton-positions): Renamed from skeleton-marks.
Richard M. Stallman <rms@gnu.org>
parents:
16767
diff
changeset
|
106 "List of positions marked with @, after skeleton insertion. |
5ff0874f1309
(skeleton-positions): Renamed from skeleton-marks.
Richard M. Stallman <rms@gnu.org>
parents:
16767
diff
changeset
|
107 The list describes the most recent skeleton insertion, and its elements |
5ff0874f1309
(skeleton-positions): Renamed from skeleton-marks.
Richard M. Stallman <rms@gnu.org>
parents:
16767
diff
changeset
|
108 are integer buffer positions in the reverse order of the insertion order.") |
16767
6d837bb21c55
(skeleton-marks): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16427
diff
changeset
|
109 |
12886
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
110 ;; reduce the number of compiler warnings |
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
111 (defvar skeleton) |
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
112 (defvar skeleton-modified) |
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
113 (defvar skeleton-point) |
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
114 (defvar skeleton-regions) |
6463 | 115 |
51303
cbe53c66e890
(skeleton-edebug-spec): First cut of an edebug spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51244
diff
changeset
|
116 (def-edebug-spec skeleton-edebug-spec |
cbe53c66e890
(skeleton-edebug-spec): First cut of an edebug spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51244
diff
changeset
|
117 ([&or null stringp (stringp &rest stringp) [[¬ atom] def-form]] |
cbe53c66e890
(skeleton-edebug-spec): First cut of an edebug spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51244
diff
changeset
|
118 &rest &or "n" "_" "-" ">" "@" "&" "!" "resume:" |
cbe53c66e890
(skeleton-edebug-spec): First cut of an edebug spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51244
diff
changeset
|
119 ("quote" def-form) skeleton-edebug-spec def-form)) |
6463 | 120 ;;;###autoload |
12501 | 121 (defmacro define-skeleton (command documentation &rest skeleton) |
6463 | 122 "Define a user-configurable COMMAND that enters a statement skeleton. |
51153
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
123 DOCUMENTATION is that of the command. |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
124 SKELETON is as defined under `skeleton-insert'." |
51303
cbe53c66e890
(skeleton-edebug-spec): First cut of an edebug spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51244
diff
changeset
|
125 (declare (debug (&define name stringp skeleton-edebug-spec))) |
6463 | 126 (if skeleton-debug |
12501 | 127 (set command skeleton)) |
12862
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
128 `(progn |
51153
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
129 ;; Tell self-insert-command that this function, if called by an |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
130 ;; abbrev, should cause the self-insert to be skipped. |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
131 (put ',command 'no-self-insert t) |
15544
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
132 (defun ,command (&optional str arg) |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
133 ,(concat documentation |
51153
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
134 (if (string-match "\n\\'" documentation) |
15544
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
135 "" "\n") |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
136 "\n" |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
137 "This is a skeleton command (see `skeleton-insert'). |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
138 Normally the skeleton text is inserted at point, with nothing \"inside\". |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
139 If there is a highlighted region, the skeleton text is wrapped |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
140 around the region text. |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
141 |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
142 A prefix argument ARG says to wrap the skeleton around the next ARG words. |
17544
9ba1f7641826
(define-skeleton): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17515
diff
changeset
|
143 A prefix argument of -1 says to wrap around region, even if not highlighted. |
15544
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
144 A prefix argument of zero says to wrap around zero words---that is, nothing. |
17544
9ba1f7641826
(define-skeleton): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17515
diff
changeset
|
145 This is a way of overriding the use of a highlighted region.") |
15544
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
146 (interactive "*P\nP") |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
147 (skeleton-proxy-new ',skeleton str arg)))) |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
148 |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
149 ;;;###autoload |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
150 (defun skeleton-proxy-new (skeleton &optional str arg) |
51153
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
151 "Insert SKELETON. |
15544
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
152 Prefix ARG allows wrapping around words or regions (see `skeleton-insert'). |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
153 If no ARG was given, but the region is visible, ARG defaults to -1 depending |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
154 on `skeleton-autowrap'. An ARG of M-0 will prevent this just for once. |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
155 This command can also be an abbrev expansion (3rd and 4th columns in |
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
156 \\[edit-abbrevs] buffer: \"\" command-name). |
6463 | 157 |
64550
5347bf5bf3f9
(skeleton-proxy-new): Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
158 Optional second argument STR may also be a string which will be the value |
51153
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
159 of `str' whereas the skeleton's interactor is then ignored." |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
160 (skeleton-insert (funcall skeleton-filter-function skeleton) |
51153
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
161 ;; Pretend C-x a e passed its prefix arg to us |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
162 (if (or arg current-prefix-arg) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
163 (prefix-numeric-value (or arg |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
164 current-prefix-arg)) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
165 (and skeleton-autowrap |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
166 (or (eq last-command 'mouse-drag-region) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
167 (and transient-mark-mode mark-active)) |
51526
6445bf9b37f8
(skeleton-proxy-new): Consume the mark-active state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51303
diff
changeset
|
168 ;; Deactivate the mark, in case one of the |
6445bf9b37f8
(skeleton-proxy-new): Consume the mark-active state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51303
diff
changeset
|
169 ;; elements of the skeleton is sensitive |
6445bf9b37f8
(skeleton-proxy-new): Consume the mark-active state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51303
diff
changeset
|
170 ;; to such situations (e.g. it is itself a |
6445bf9b37f8
(skeleton-proxy-new): Consume the mark-active state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51303
diff
changeset
|
171 ;; skeleton). |
6445bf9b37f8
(skeleton-proxy-new): Consume the mark-active state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51303
diff
changeset
|
172 (progn (deactivate-mark) |
6445bf9b37f8
(skeleton-proxy-new): Consume the mark-active state.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51303
diff
changeset
|
173 -1))) |
51153
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
174 (if (stringp str) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
175 str)) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
176 ;; Return non-nil to tell expand-abbrev that expansion has happened. |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
177 ;; Otherwise the no-self-insert is ignored. |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
178 t) |
6463 | 179 |
12501 | 180 ;;;###autoload |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
181 (defun skeleton-insert (skeleton &optional regions str) |
12501 | 182 "Insert the complex statement skeleton SKELETON describes very concisely. |
6463 | 183 |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
184 With optional second argument REGIONS, wrap first interesting point |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
185 \(`_') in skeleton around next REGIONS words, if REGIONS is positive. |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
186 If REGIONS is negative, wrap REGIONS preceding interregions into first |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
187 REGIONS interesting positions \(successive `_'s) in skeleton. |
12501 | 188 |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
189 An interregion is the stretch of text between two contiguous marked |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
190 points. If you marked A B C [] (where [] is the cursor) in |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
191 alphabetical order, the 3 interregions are simply the last 3 regions. |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
192 But if you marked B A [] C, the interregions are B-A, A-[], []-C. |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
193 |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
194 The optional third argument STR, if specified, is the value for the |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
195 variable `str' within the skeleton. When this is non-nil, the |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
196 interactor gets ignored, and this should be a valid skeleton element. |
12886
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
197 |
12501 | 198 SKELETON is made up as (INTERACTOR ELEMENT ...). INTERACTOR may be nil if |
199 not needed, a prompt-string or an expression for complex read functions. | |
6463 | 200 |
201 If ELEMENT is a string or a character it gets inserted (see also | |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
202 `skeleton-transformation-function'). Other possibilities are: |
6463 | 203 |
12886
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
204 \\n go to next line and indent according to mode |
35879
1b871d9c3be4
Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35877
diff
changeset
|
205 _ interesting point, interregion here |
51087
49b8ab00fab0
(skeleton-internal-1): Allow - as alternate interesting point marker and revert
Juanma Barranquero <lekktu@gmail.com>
parents:
50869
diff
changeset
|
206 - interesting point, no interregion interaction, overrides |
49b8ab00fab0
(skeleton-internal-1): Allow - as alternate interesting point marker and revert
Juanma Barranquero <lekktu@gmail.com>
parents:
50869
diff
changeset
|
207 interesting point set by _ |
12501 | 208 > indent line (or interregion if > _) according to major mode |
16768
5ff0874f1309
(skeleton-positions): Renamed from skeleton-marks.
Richard M. Stallman <rms@gnu.org>
parents:
16767
diff
changeset
|
209 @ add position to `skeleton-positions' |
78492
7c8949dbfa0d
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78236
diff
changeset
|
210 & do next ELEMENT if previous moved point |
7c8949dbfa0d
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78236
diff
changeset
|
211 | do next ELEMENT if previous didn't move point |
12501 | 212 -num delete num preceding characters (see `skeleton-untabify') |
6463 | 213 resume: skipped, continue here if quit is signaled |
214 nil skipped | |
215 | |
51087
49b8ab00fab0
(skeleton-internal-1): Allow - as alternate interesting point marker and revert
Juanma Barranquero <lekktu@gmail.com>
parents:
50869
diff
changeset
|
216 After termination, point will be positioned at the last occurrence of - |
49b8ab00fab0
(skeleton-internal-1): Allow - as alternate interesting point marker and revert
Juanma Barranquero <lekktu@gmail.com>
parents:
50869
diff
changeset
|
217 or at the first occurrence of _ or at the end of the inserted text. |
35879
1b871d9c3be4
Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35877
diff
changeset
|
218 |
12501 | 219 Further elements can be defined via `skeleton-further-elements'. ELEMENT may |
220 itself be a SKELETON with an INTERACTOR. The user is prompted repeatedly for | |
221 different inputs. The SKELETON is processed as often as the user enters a | |
222 non-empty string. \\[keyboard-quit] terminates skeleton insertion, but | |
223 continues after `resume:' and positions at `_' if any. If INTERACTOR in such | |
224 a subskeleton is a prompt-string which contains a \".. %s ..\" it is | |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
225 formatted with `skeleton-subprompt'. Such an INTERACTOR may also be a list of |
12886
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
226 strings with the subskeleton being repeated once for each string. |
6463 | 227 |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
228 Quoted Lisp expressions are evaluated for their side-effects. |
15489
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
229 Other Lisp expressions are evaluated and the value treated as above. |
50869
7d308602f619
(skeleton-autowrap, skeleton-untabify, skeleton-newline-indent-rigidly)
Juanma Barranquero <lekktu@gmail.com>
parents:
49299
diff
changeset
|
230 Note that expressions may not return t since this implies an |
12501 | 231 endless loop. Modes can define other symbols by locally setting them |
232 to any valid skeleton element. The following local variables are | |
233 available: | |
6463 | 234 |
12501 | 235 str first time: read a string according to INTERACTOR |
6463 | 236 then: insert previously read string once more |
50869
7d308602f619
(skeleton-autowrap, skeleton-untabify, skeleton-newline-indent-rigidly)
Juanma Barranquero <lekktu@gmail.com>
parents:
49299
diff
changeset
|
237 help help-form during interaction with the user or nil |
12862
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
238 input initial input (string or cons with index) while reading str |
15489
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
239 v1, v2 local variables for memorizing anything you want |
12886
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
240 |
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
241 When done with skeleton, but before going back to `_'-point call |
50869
7d308602f619
(skeleton-autowrap, skeleton-untabify, skeleton-newline-indent-rigidly)
Juanma Barranquero <lekktu@gmail.com>
parents:
49299
diff
changeset
|
242 `skeleton-end-hook' if that is non-nil." |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
243 (let ((skeleton-regions regions)) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
244 (and skeleton-regions |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
245 (setq skeleton-regions |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
246 (if (> skeleton-regions 0) |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
247 (list (copy-marker (point) t) |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
248 (save-excursion (forward-word skeleton-regions) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
249 (point-marker))) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
250 (setq skeleton-regions (- skeleton-regions)) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
251 ;; copy skeleton-regions - 1 elements from `mark-ring' |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
252 (let ((l1 (cons (mark-marker) mark-ring)) |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
253 (l2 (list (copy-marker (point) t)))) |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
254 (while (and l1 (> skeleton-regions 0)) |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
255 (push (copy-marker (pop l1) t) l2) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
256 (setq skeleton-regions (1- skeleton-regions))) |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
257 (sort l2 '<)))) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
258 (goto-char (car skeleton-regions)) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
259 (setq skeleton-regions (cdr skeleton-regions))) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
260 (let ((beg (point)) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
261 skeleton-modified skeleton-point resume: help input v1 v2) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
262 (setq skeleton-positions nil) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
263 (unwind-protect |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
264 (eval `(let ,skeleton-further-elements |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
265 (skeleton-internal-list skeleton str))) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
266 (run-hooks 'skeleton-end-hook) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
267 (sit-for 0) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
268 (or (pos-visible-in-window-p beg) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
269 (progn |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
270 (goto-char beg) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
271 (recenter 0))) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
272 (if skeleton-point |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
273 (goto-char skeleton-point)))))) |
6463 | 274 |
17515
62b47fab94fd
(skeleton-read): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
17490
diff
changeset
|
275 (defun skeleton-read (prompt &optional initial-input recursive) |
12862
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
276 "Function for reading a string from the minibuffer within skeletons. |
17552
605bd9c63821
(skeleton-read): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17544
diff
changeset
|
277 |
605bd9c63821
(skeleton-read): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17544
diff
changeset
|
278 PROMPT must be a string or a form that evaluates to a string. |
605bd9c63821
(skeleton-read): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
17544
diff
changeset
|
279 It may contain a `%s' which will be replaced by `skeleton-subprompt'. |
50869
7d308602f619
(skeleton-autowrap, skeleton-untabify, skeleton-newline-indent-rigidly)
Juanma Barranquero <lekktu@gmail.com>
parents:
49299
diff
changeset
|
280 If non-nil second arg INITIAL-INPUT or variable `input' is a string or |
7d308602f619
(skeleton-autowrap, skeleton-untabify, skeleton-newline-indent-rigidly)
Juanma Barranquero <lekktu@gmail.com>
parents:
49299
diff
changeset
|
281 cons with index to insert before reading. If third arg RECURSIVE is non-nil |
12862
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
282 i.e. we are handling the iterator of a subskeleton, returns empty string if |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
283 user didn't modify input. |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
284 While reading, the value of `minibuffer-help-form' is variable `help' if that |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
285 is non-nil or a default string." |
13390
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
286 (let ((minibuffer-help-form (or (if (boundp 'help) (symbol-value 'help)) |
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
287 (if recursive "\ |
6463 | 288 As long as you provide input you will insert another subskeleton. |
289 | |
290 If you enter the empty string, the loop inserting subskeletons is | |
291 left, and the current one is removed as far as it has been entered. | |
292 | |
293 If you quit, the current subskeleton is removed as far as it has been | |
294 entered. No more of the skeleton will be inserted, except maybe for a | |
12501 | 295 syntactically necessary termination." |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
296 "\ |
12501 | 297 You are inserting a skeleton. Standard text gets inserted into the buffer |
13390
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
298 automatically, and you are prompted to fill in the variable parts."))) |
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
299 (eolp (eolp))) |
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
300 ;; since Emacs doesn't show main window's cursor, do something noticeable |
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
301 (or eolp |
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
302 (open-line 1)) |
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
303 (unwind-protect |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
304 (setq prompt (if (stringp prompt) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
305 (read-string (format prompt skeleton-subprompt) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
306 (setq initial-input |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
307 (or initial-input |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
308 (symbol-value 'input)))) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
309 (eval prompt))) |
13390
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
310 (or eolp |
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
311 (delete-char 1)))) |
12862
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
312 (if (and recursive |
17490
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
313 (or (null prompt) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
314 (string= prompt "") |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
315 (equal prompt initial-input) |
f0fc645756a3
(skeleton-insert): Rename the function's argument
Richard M. Stallman <rms@gnu.org>
parents:
16768
diff
changeset
|
316 (equal prompt (car-safe initial-input)))) |
6463 | 317 (signal 'quit t) |
17515
62b47fab94fd
(skeleton-read): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
17490
diff
changeset
|
318 prompt)) |
6463 | 319 |
12886
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
320 (defun skeleton-internal-list (skeleton &optional str recursive) |
12501 | 321 (let* ((start (save-excursion (beginning-of-line) (point))) |
322 (column (current-column)) | |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
323 (line (buffer-substring start (line-end-position))) |
12501 | 324 opoint) |
12886
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
325 (or str |
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
326 (setq str `(setq str (skeleton-read ',(car skeleton) nil ,recursive)))) |
49299
c7f492d5cd47
(skeleton-internal-list, skeleton-internal-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45288
diff
changeset
|
327 (when (and (eq (cadr skeleton) '\n) (not recursive) |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
328 (save-excursion (skip-chars-backward " \t") (bolp))) |
36967
cebc3019a629
(skeleton-internal-list): Fix bogus logic.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35879
diff
changeset
|
329 (setq skeleton (cons nil (cons '> (cddr skeleton))))) |
12886
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
330 (while (setq skeleton-modified (eq opoint (point)) |
12862
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
331 opoint (point) |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
332 skeleton (cdr skeleton)) |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
333 (condition-case quit |
51153
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
334 (skeleton-internal-1 (car skeleton) nil recursive) |
12862
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
335 (quit |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
336 (if (eq (cdr quit) 'recursive) |
12886
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
337 (setq recursive 'quit |
4029ded28f9d
(skeleton-newline-indent-rigidly): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12862
diff
changeset
|
338 skeleton (memq 'resume: skeleton)) |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
339 ;; Remove the subskeleton as far as it has been shown |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
340 ;; the subskeleton shouldn't have deleted outside current line. |
13390
333a77bb4ae8
(skeleton-end-hook): Now defvared and responsible for
Karl Heuer <kwzh@gnu.org>
parents:
12886
diff
changeset
|
341 (end-of-line) |
12862
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
342 (delete-region start (point)) |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
343 (insert line) |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
344 (move-to-column column) |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
345 (if (cdr quit) |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
346 (setq skeleton () |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
347 recursive nil) |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
348 (signal 'quit 'recursive))))))) |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
349 ;; maybe continue loop or go on to next outer resume: section |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
350 (if (eq recursive 'quit) |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
351 (signal 'quit 'recursive) |
9d994b0faaa3
(skeleton-pair-insert-maybe): Plain insert in Ovwrt mode
Karl Heuer <kwzh@gnu.org>
parents:
12619
diff
changeset
|
352 recursive)) |
6463 | 353 |
51153
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
354 (defun skeleton-internal-1 (element &optional literal recursive) |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
355 (cond |
91018
4dfd0563b711
(skeleton-internal-1): Use integerp and stringp
Kenichi Handa <handa@m17n.org>
parents:
91005
diff
changeset
|
356 ((or (integerp element) (stringp element)) |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
357 (if (and (integerp element) ; -num |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
358 (< element 0)) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
359 (if skeleton-untabify |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
360 (backward-delete-char-untabify (- element)) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
361 (delete-backward-char (- element))) |
51153
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
362 (insert (if (not literal) |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
363 (funcall skeleton-transformation-function element) |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
364 element)))) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
365 ((or (eq element '\n) ; actually (eq '\n 'n) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
366 ;; The sequence `> \n' is handled specially so as to indent the first |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
367 ;; line after inserting the newline (to get the proper indentation). |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
368 (and (eq element '>) (eq (nth 1 skeleton) '\n) (pop skeleton))) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
369 (let ((pos (if (eq element '>) (point)))) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
370 (cond |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
371 ((and skeleton-regions (eq (nth 1 skeleton) '_)) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
372 (or (eolp) (newline)) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
373 (if pos (save-excursion (goto-char pos) (indent-according-to-mode))) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
374 (indent-region (line-beginning-position) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
375 (car skeleton-regions) nil)) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
376 ;; \n as last element only inserts \n if not at eol. |
49299
c7f492d5cd47
(skeleton-internal-list, skeleton-internal-1):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
45288
diff
changeset
|
377 ((and (null (cdr skeleton)) (not recursive) (eolp)) |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
378 (if pos (indent-according-to-mode))) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
379 (skeleton-newline-indent-rigidly |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
380 (let ((pt (point))) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
381 (newline) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
382 (indent-to (save-excursion |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
383 (goto-char pt) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
384 (if pos (indent-according-to-mode)) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
385 (current-indentation))))) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
386 (t (if pos (reindent-then-newline-and-indent) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
387 (newline) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
388 (indent-according-to-mode)))))) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
389 ((eq element '>) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
390 (if (and skeleton-regions (eq (nth 1 skeleton) '_)) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
391 (indent-region (line-beginning-position) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
392 (car skeleton-regions) nil) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
393 (indent-according-to-mode))) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
394 ((eq element '_) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
395 (if skeleton-regions |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
396 (progn |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
397 (goto-char (pop skeleton-regions)) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
398 (and (<= (current-column) (current-indentation)) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
399 (eq (nth 1 skeleton) '\n) |
51153
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
400 (end-of-line 0))) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
401 (or skeleton-point |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
402 (setq skeleton-point (point))))) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
403 ((eq element '-) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
404 (setq skeleton-point (point))) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
405 ((eq element '&) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
406 (when skeleton-modified (pop skeleton))) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
407 ((eq element '|) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
408 (unless skeleton-modified (pop skeleton))) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
409 ((eq element '@) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
410 (push (point) skeleton-positions)) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
411 ((eq 'quote (car-safe element)) |
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
412 (eval (nth 1 element))) |
51244
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
413 ((and (consp element) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
414 (or (stringp (car element)) (listp (car element)))) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
415 ;; Don't forget: `symbolp' is also true for nil. |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
416 (if (symbolp (car-safe (car element))) |
51244
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
417 (while (and (skeleton-internal-list element nil t) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
418 ;; If the interactor is nil, don't infinite loop. |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
419 (car element))) |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
420 (setq literal (car element)) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
421 (while literal |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
422 (skeleton-internal-list element (car literal)) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
423 (setq literal (cdr literal))))) |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
424 ((null element)) |
51153
13c3a6c789ba
(define-skeleton): Use the `no-self-insert' property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51087
diff
changeset
|
425 (t (skeleton-internal-1 (eval element) t recursive)))) |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
426 |
12501 | 427 ;; Maybe belongs into simple.el or elsewhere |
45288
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
428 ;; ;;;###autoload |
984caedead68
(skeleton-transformation): Default to `identity'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38409
diff
changeset
|
429 ;; (define-skeleton local-variables-section |
15506
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
430 ;; "Insert a local variables section. Use current comment syntax if any." |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
431 ;; (completing-read "Mode: " obarray |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
432 ;; (lambda (symbol) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
433 ;; (if (commandp symbol) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
434 ;; (string-match "-mode$" (symbol-name symbol)))) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
435 ;; t) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
436 ;; '(save-excursion |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
437 ;; (if (re-search-forward page-delimiter nil t) |
38409
153f1b1f2efd
Emacs lisp coding convention fixes.
Pavel Janík <Pavel@Janik.cz>
parents:
36967
diff
changeset
|
438 ;; (error "Not on last page"))) |
15506
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
439 ;; comment-start "Local Variables:" comment-end \n |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
440 ;; comment-start "mode: " str |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
441 ;; & -5 | '(kill-line 0) & -1 | comment-end \n |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
442 ;; ( (completing-read (format "Variable, %s: " skeleton-subprompt) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
443 ;; obarray |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
444 ;; (lambda (symbol) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
445 ;; (or (eq symbol 'eval) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
446 ;; (user-variable-p symbol))) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
447 ;; t) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
448 ;; comment-start str ": " |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
449 ;; (read-from-minibuffer "Expression: " nil read-expression-map nil |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
450 ;; 'read-expression-history) | _ |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
451 ;; comment-end \n) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
452 ;; resume: |
15544
ef2b47c6c225
(skeleton-proxy-new): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15506
diff
changeset
|
453 ;; comment-start "End:" comment-end \n) |
6463 | 454 |
12619
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
455 ;; Variables and command for automatically inserting pairs like () or "". |
6463 | 456 |
12619
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
457 (defvar skeleton-pair nil |
6463 | 458 "*If this is nil pairing is turned off, no matter what else is set. |
12619
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
459 Otherwise modes with `skeleton-pair-insert-maybe' on some keys |
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
460 will attempt to insert pairs of matching characters.") |
6463 | 461 |
462 | |
12619
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
463 (defvar skeleton-pair-on-word nil |
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
464 "*If this is nil, paired insertion is inhibited before or inside a word.") |
6463 | 465 |
466 | |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
467 (defvar skeleton-pair-filter-function (lambda () nil) |
12619
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
468 "Attempt paired insertion if this function returns nil, before inserting. |
6463 | 469 This allows for context-sensitive checking whether pairing is appropriate.") |
470 | |
471 | |
12619
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
472 (defvar skeleton-pair-alist () |
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
473 "An override alist of pairing partners matched against `last-command-char'. |
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
474 Each alist element, which looks like (ELEMENT ...), is passed to |
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
475 `skeleton-insert' with no interactor. Variable `str' does nothing. |
6463 | 476 |
12501 | 477 Elements might be (?` ?` _ \"''\"), (?\\( ? _ \" )\") or (?{ \\n > _ \\n ?} >).") |
6463 | 478 |
51244
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
479 (defvar skeleton-pair-default-alist '((?( _ ?)) (?\)) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
480 (?[ _ ?]) (?\]) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
481 (?{ _ ?}) (?\}) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
482 (?< _ ?>) (?\>) |
94138
b6c3fde83add
Set coding-tag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
483 (?« _ ?») (?\») |
51244
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
484 (?` _ ?'))) |
6463 | 485 |
486 ;;;###autoload | |
12619
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
487 (defun skeleton-pair-insert-maybe (arg) |
6463 | 488 "Insert the character you type ARG times. |
489 | |
15506
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
490 With no ARG, if `skeleton-pair' is non-nil, pairing can occur. If the region |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
491 is visible the pair is wrapped around it depending on `skeleton-autowrap'. |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
492 Else, if `skeleton-pair-on-word' is non-nil or we are not before or inside a |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
493 word, and if `skeleton-pair-filter-function' returns nil, pairing is performed. |
36967
cebc3019a629
(skeleton-internal-list): Fix bogus logic.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35879
diff
changeset
|
494 Pairing is also prohibited if we are right after a quoting character |
cebc3019a629
(skeleton-internal-list): Fix bogus logic.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35879
diff
changeset
|
495 such as backslash. |
6463 | 496 |
12619
9d4a4e914215
(local-variables-section): Delete autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
12501
diff
changeset
|
497 If a match is found in `skeleton-pair-alist', that is inserted, else |
6463 | 498 the defaults are used. These are (), [], {}, <> and `' for the |
499 symmetrical ones, and the same character twice for the others." | |
500 (interactive "*P") | |
51244
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
501 (if (or arg (not skeleton-pair)) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
502 (self-insert-command (prefix-numeric-value arg)) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
503 (let* ((mark (and skeleton-autowrap |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
504 (or (eq last-command 'mouse-drag-region) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
505 (and transient-mark-mode mark-active)))) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
506 (skeleton-end-hook) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
507 (char last-command-char) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
508 (skeleton (or (assq char skeleton-pair-alist) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
509 (assq char skeleton-pair-default-alist) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
510 `(,char _ ,char)))) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
511 (if (or (memq (char-syntax (preceding-char)) '(?\\ ?/)) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
512 (and (not mark) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
513 (or overwrite-mode |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
514 (if (not skeleton-pair-on-word) (looking-at "\\w")) |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
515 (funcall skeleton-pair-filter-function)))) |
51244
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
516 (self-insert-command (prefix-numeric-value arg)) |
18df58e3c486
(skeleton-internal-1): Don't loop if interactor of subskeleton is nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51218
diff
changeset
|
517 (skeleton-insert (cons nil skeleton) (if mark -1)))))) |
6463 | 518 |
519 | |
15506
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
520 ;; A more serious example can be found in sh-script.el |
94138
b6c3fde83add
Set coding-tag.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
93975
diff
changeset
|
521 ;; (defun mirror-mode () |
15489
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
522 ;; "This major mode is an amusing little example of paired insertion. |
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
523 ;;All printable characters do a paired self insert, while the other commands |
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
524 ;;work normally." |
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
525 ;; (interactive) |
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
526 ;; (kill-all-local-variables) |
15506
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
527 ;; (make-local-variable 'skeleton-pair) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
528 ;; (make-local-variable 'skeleton-pair-on-word) |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
529 ;; (make-local-variable 'skeleton-pair-filter-function) |
15506
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
530 ;; (make-local-variable 'skeleton-pair-alist) |
15489
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
531 ;; (setq major-mode 'mirror-mode |
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
532 ;; mode-name "Mirror" |
15506
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
533 ;; skeleton-pair-on-word t |
15489
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
534 ;; ;; in the middle column insert one or none if odd window-width |
70821
fb7431719e32
(skeleton-transformation, skeleton-filter, skeleton-pair-filter):
Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
parents:
68651
diff
changeset
|
535 ;; skeleton-pair-filter-function (lambda () |
15506
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
536 ;; (if (>= (current-column) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
537 ;; (/ (window-width) 2)) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
538 ;; ;; insert both on next line |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
539 ;; (next-line 1) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
540 ;; ;; insert one or both? |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
541 ;; (= (* 2 (1+ (current-column))) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
542 ;; (window-width)))) |
15489
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
543 ;; ;; mirror these the other way round as well |
15506
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
544 ;; skeleton-pair-alist '((?) _ ?() |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
545 ;; (?] _ ?[) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
546 ;; (?} _ ?{) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
547 ;; (?> _ ?<) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
548 ;; (?/ _ ?\\) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
549 ;; (?\\ _ ?/) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
550 ;; (?` ?` _ "''") |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
551 ;; (?' ?' _ "``")) |
15489
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
552 ;; ;; in this mode we exceptionally ignore the user, else it's no fun |
15506
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
553 ;; skeleton-pair t) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
554 ;; (let ((map (make-vector 256 'skeleton-pair-insert-maybe)) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
555 ;; (i 0)) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
556 ;; (use-local-map `(keymap ,map)) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
557 ;; (while (< i ? ) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
558 ;; (aset map i nil) |
1a66dbb1a470
(local-variables-section): Adapted comment to outline minor mode.
Richard M. Stallman <rms@gnu.org>
parents:
15489
diff
changeset
|
559 ;; (aset map (+ i 128) nil) |
15489
5393431269db
(skeleton-autowrap): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15441
diff
changeset
|
560 ;; (setq i (1+ i)))) |
62740
073c3cc1d1d5
Use run-mode-hooks in example.
Lute Kamstra <lute@gnu.org>
parents:
52401
diff
changeset
|
561 ;; (run-mode-hooks 'mirror-mode-hook)) |
6463 | 562 |
14724 | 563 (provide 'skeleton) |
564 | |
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
565 ;; arch-tag: ccad7bd5-eb5d-40de-9ded-900197215c3e |
38409
153f1b1f2efd
Emacs lisp coding convention fixes.
Pavel Janík <Pavel@Janik.cz>
parents:
36967
diff
changeset
|
566 ;;; skeleton.el ends here |