mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-03 11:33:37 +00:00
Merged in changes from CVS trunk.
Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-398 Tweak permissions * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-399 Tweak directory permissions * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-400 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-401 More build-in-place tweaking of arch tagging * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-402 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-403 Yet more build-in-place tweaking of arch tagging * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-404 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-405 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-406 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-407 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-199
This commit is contained in:
commit
987a34896f
@ -1,4 +1,5 @@
|
||||
precious ^(config\.status)$
|
||||
# Generated files
|
||||
precious ^(config\.status|config\.cache)$
|
||||
|
||||
# Build-in-place makes these directories, so just ignore them
|
||||
precious ^(info)$
|
||||
|
@ -1,3 +1,8 @@
|
||||
2004-06-12 Juri Linkov <juri@jurta.org>
|
||||
|
||||
* info/dir: Move menu help lines from `* Menu:' to file header.
|
||||
Describe the purpose of a red *.
|
||||
|
||||
2004-05-04 Dave Love <fx@gnu.org>
|
||||
|
||||
* configure.in: Don't use `extrasub'.
|
||||
|
@ -1,6 +1,9 @@
|
||||
# Unlike most emacs dirs, etc has a simple non-autoconf-generated makefile
|
||||
source ^(Makefile)$
|
||||
|
||||
# Generated files (DOC-X is generated on windows)
|
||||
backup ^(DOC(|-[0-9.]*|-X))$
|
||||
|
||||
# Install-in-place on NT makes this directory, so just ignore it
|
||||
backup ^(icons)$
|
||||
|
||||
|
82
etc/NEWS
82
etc/NEWS
@ -90,8 +90,18 @@ types any more. Add -DUSE_LISP_UNION_TYPE if you want union types.
|
||||
|
||||
* Changes in Emacs 21.4
|
||||
|
||||
** Passing resources on the command line now works on MS Windows.
|
||||
You can use --xrm to pass resource settings to Emacs, overriding any
|
||||
existing values. For example:
|
||||
|
||||
emacs --xrm "Emacs.Background:red" --xrm "Emacs.Geometry:100x20"
|
||||
|
||||
will start up Emacs on an initial frame of 100x20 with red background,
|
||||
irrespective of geometry or background setting on the Windows registry.
|
||||
|
||||
** New features in evaluation commands
|
||||
|
||||
+++
|
||||
*** The function `eval-defun' (C-M-x) called on defface reinitializes
|
||||
the face to the value specified in the defface expression.
|
||||
|
||||
@ -436,14 +446,24 @@ restores the previous value of `buffer-invisibility-spec'.
|
||||
** New command `kill-whole-line' kills an entire line at once.
|
||||
By default, it is bound to C-S-<backspace>.
|
||||
|
||||
** New commands to operate on pairs of open and close characters:
|
||||
`insert-pair', `delete-pair', `raise-sexp'.
|
||||
|
||||
** A prefix argument of C-M-q in Emacs Lisp mode pretty-printifies the
|
||||
list starting after point.
|
||||
|
||||
** Dired mode:
|
||||
|
||||
*** New faces dired-header, dired-mark, dired-marked, dired-flagged,
|
||||
dired-ignored, dired-directory, dired-symlink, dired-warning
|
||||
introduced for Dired mode instead of font-lock faces.
|
||||
|
||||
*** New Dired command `dired-compare-directories' to mark files with
|
||||
different file attributes in two dired buffers.
|
||||
*** New Dired command `dired-compare-directories' marks files
|
||||
with different file attributes in two dired buffers.
|
||||
|
||||
+++
|
||||
*** New Dired command `dired-do-touch' (bound to T) changes timestamps
|
||||
of marked files with the value entered in the minibuffer.
|
||||
|
||||
+++
|
||||
*** In Dired's ! command (dired-do-shell-command), `*' and `?' now
|
||||
@ -459,7 +479,7 @@ types of files. The variable `dired-view-command-alist' controls
|
||||
what external viewers to use and when.
|
||||
|
||||
*** In Dired, the w command now copies the current line's file name
|
||||
into the kill ring.
|
||||
into the kill ring. With a zero prefix arg, copies absolute file names.
|
||||
|
||||
+++
|
||||
** Dired-x:
|
||||
@ -470,15 +490,39 @@ marks omitted files. The variable dired-omit-files-p is obsoleted, use the
|
||||
mode toggling function instead.
|
||||
|
||||
** Info mode:
|
||||
|
||||
*** A numeric prefix argument of `info' selects an Info buffer
|
||||
with the number appended to the *info* buffer name.
|
||||
|
||||
*** New command `Info-history' (bound to L) displays a menu of visited nodes.
|
||||
|
||||
*** New command `Info-toc' (bound to T) creates a node with table of contents
|
||||
from the tree structure of menus of the current Info file.
|
||||
|
||||
*** New command `info-apropos' searches the indices of the known
|
||||
Info files on your system for a string, and builds a menu of the
|
||||
possible matches.
|
||||
|
||||
*** New command `Info-copy-current-node-name' (bound to w) copies
|
||||
the current Info node name into the kill ring. With a zero prefix
|
||||
arg, puts the node name inside the `info' function call.
|
||||
|
||||
*** New command `Info-search-case-sensitively' (bound to S).
|
||||
|
||||
*** New command `Info-search-next' (unbound) repeats the last search
|
||||
without prompting for a new search string.
|
||||
|
||||
*** New face `info-xref-visited' distinguishes visited nodes from unvisited
|
||||
and a new option `Info-fontify-visited-nodes' to control this.
|
||||
|
||||
*** http and ftp links in Info are now operational: they look like cross
|
||||
references and following them calls `browse-url'.
|
||||
|
||||
+++
|
||||
*** Info now hides node names in menus and cross references by default.
|
||||
If you prefer the old behavior, you can set the new user option
|
||||
`Info-hide-note-references' to nil.
|
||||
|
||||
*** The new command `info-apropos' searches the indices of the known
|
||||
Info files on your system for a string, and builds a menu of the
|
||||
possible matches.
|
||||
|
||||
*** Images in Info pages are supported.
|
||||
Info pages show embedded images, in Emacs frames with image support.
|
||||
Info documentation that includes images, processed with makeinfo
|
||||
@ -708,11 +752,12 @@ and windows-1251 are preloaded since the former is so common and the
|
||||
latter is used by GNU locales.
|
||||
|
||||
** The utf-8/16 coding systems have been enhanced.
|
||||
By default, untranslatable utf-8 sequences (mostly representing CJK
|
||||
characters) are simply composed into single quasi-characters. User
|
||||
option `utf-translate-cjk' arranges to translate many utf-8 CJK
|
||||
character sequences into real Emacs characters in a similar way to the
|
||||
Mule-UCS system. This uses significant space, so is not the default.
|
||||
By default, untranslatable utf-8 sequences are simply composed into
|
||||
single quasi-characters. User option `utf-translate-cjk-mode' (it is
|
||||
turned on by default) arranges to translate many utf-8 CJK character
|
||||
sequences into real Emacs characters in a similar way to the Mule-UCS
|
||||
system. As this loads a fairly big data on demand, people who are not
|
||||
interested in CJK characters may want to customize it to nil.
|
||||
You can augment/amend the CJK translation via hash tables
|
||||
`ucs-mule-cjk-to-unicode' and `ucs-unicode-to-mule-cjk'. The utf-8
|
||||
coding system now also encodes characters from most of Emacs's
|
||||
@ -2100,6 +2145,15 @@ configuration files.
|
||||
|
||||
* Lisp Changes in Emacs 21.4
|
||||
|
||||
+++
|
||||
** Cleaner way to enter key sequences.
|
||||
|
||||
You can enter a constant key sequence in a more natural format, the
|
||||
same one used for saving keyboard macros, using the macro `kbd'. For
|
||||
example,
|
||||
|
||||
(kbd "C-x C-f") => "\^x\^f"
|
||||
|
||||
** The sentinel is now called when a network process is deleted with
|
||||
delete-process. The status message passed to the sentinel for a
|
||||
deleted network process is "deleted". The message passed to the
|
||||
@ -2110,10 +2164,12 @@ changed to "connection broken by remote peer".
|
||||
undo-outer-limit, garbage collection empties it. This is to prevent
|
||||
it from using up the available memory and choking Emacs.
|
||||
|
||||
---
|
||||
** New function quail-find-key returns a list of keys to type in the
|
||||
current input method to input a character.
|
||||
|
||||
** New functions posn-at-point and posn-at-x-y returns
|
||||
+++
|
||||
** New functions posn-at-point and posn-at-x-y return
|
||||
click-event-style position information for a given visible buffer
|
||||
position or for a given window pixel coordinate.
|
||||
|
||||
|
4
etc/TODO
4
etc/TODO
@ -185,10 +185,6 @@ to the FSF.
|
||||
|
||||
** Make the Custom themes support do useful things.
|
||||
|
||||
** Investigate using GNU Lightning or similar system for incremental
|
||||
compilation of selected bytecode functions to subrs. Converting CCL
|
||||
programs to native code is probably the first thing to try, though.
|
||||
|
||||
** Add support for SVG (Scalable Vector Graphics) rendering to
|
||||
Emacs.
|
||||
|
||||
|
4
leim/.arch-inventory
Normal file
4
leim/.arch-inventory
Normal file
@ -0,0 +1,4 @@
|
||||
# Auto-generated files, which ignore.
|
||||
precious ^(stamp-subdir|changed\..*|leim-list\.el)$
|
||||
|
||||
# arch-tag: a4cda8ae-2a52-4d85-bd29-14e25c7ed2a2
|
4
leim/quail/.arch-inventory
Normal file
4
leim/quail/.arch-inventory
Normal file
@ -0,0 +1,4 @@
|
||||
# Auto-generated lisp files, which ignore.
|
||||
precious ^([A-Z0-9].*|tsang-.*|quick-.*)\.el$
|
||||
|
||||
# arch-tag: 3d0d3e6b-f7c3-4dce-9135-a72ba7fe095d
|
10
lib-src/.arch-inventory
Normal file
10
lib-src/.arch-inventory
Normal file
@ -0,0 +1,10 @@
|
||||
# Ignore binaries
|
||||
backup ^(test-distrib|make-docfile|profile|digest-doc|movemail|cvtmail|fakemail|yow|emacsserver|hexl|update-game-score|etags|ctags|emacsclient|b2m|ebrowse)$
|
||||
|
||||
# Building actually makes a copy/link of the source file
|
||||
precious ^(ctags\.c)$
|
||||
|
||||
# Windows generates this
|
||||
backup ^(DOC)$
|
||||
|
||||
# arch-tag: da33b3d6-170d-4fe5-9eb8-ed2753bc9b4f
|
@ -1,4 +1,7 @@
|
||||
# Auto-generated lisp files, which ignore
|
||||
precious ^(loaddefs|finder-inf|cus-load)\.el$
|
||||
|
||||
# Something generated during a windows build?!?
|
||||
precious ^(Makefile\.unix)$
|
||||
|
||||
# arch-tag: fc62dc9f-3a91-455b-b8e7-d49df66beee0
|
||||
|
150
lisp/ChangeLog
150
lisp/ChangeLog
@ -1,3 +1,149 @@
|
||||
2004-06-14 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* international/code-pages.el (windows-1256, cp1125): Fix tables
|
||||
for several characters.
|
||||
|
||||
* international/utf-8.el (ccl-encode-mule-utf-8): Fix previous
|
||||
change.
|
||||
|
||||
2004-06-13 Richard M. Stallman <rms@gnu.org>
|
||||
|
||||
* textmodes/paragraphs.el (sentence-end): Add 0x5397d as close brace.
|
||||
|
||||
* emulation/pc-select.el: Doc fixes: say "PC Selection mode",
|
||||
not "`pc-selection-mode'".
|
||||
|
||||
* emacs-lisp/bytecomp.el: Put `...' around symbols in warning messages.
|
||||
|
||||
* simple.el (previous-matching-history-element): Specify a default.
|
||||
|
||||
* hexl.el (hexl-mode): Catch errors in hexl-goto-address.
|
||||
|
||||
* cus-face.el (custom-declare-face): Simplify code.
|
||||
|
||||
* abbrev.el (abbrev-mode, edit-abbrevs-map): Doc fixes.
|
||||
|
||||
2004-06-13 Luc Teirlinck <teirllm@auburn.edu>
|
||||
|
||||
* files.el (before-save-hook): Add `time-stamp' to the options.
|
||||
|
||||
* time-stamp.el (time-stamp): Recommend adding it to
|
||||
`before-save-hook', rather than `write-file-functions'
|
||||
Make a similar change in `Commentary' section.
|
||||
|
||||
2004-06-13 Kai Grossjohann <kai.grossjohann@gmx.net>
|
||||
|
||||
* diff-mode.el (diff-current-defun): If at start of hunk, use
|
||||
position of first change.
|
||||
|
||||
2004-06-13 Lars Hansen <larsh@math.ku.dk>
|
||||
|
||||
* dired-x.el (dired-mark-omitted): Bind to "*O".
|
||||
|
||||
2004-06-12 Karl Fogel <kfogel@red-bean.com>
|
||||
|
||||
* bookmark.el (bookmark-bmenu-relocate): New function, as
|
||||
suggested by David J. Biesack <David.Biesack@sas.com>.
|
||||
(bookmark-bmenu-mode-map): Bind `bookmark-bmenu-relocate' to "R".
|
||||
(bookmark-bmenu-mode): Describe binding in doc string.
|
||||
(bookmark-set-filename): Save the bookmark list if it's time.
|
||||
|
||||
2004-06-13 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* international/utf-8.el (ccl-decode-mule-utf-8): Fix previous
|
||||
change.
|
||||
(ccl-untranslated-to-ucs): Fix typo.
|
||||
|
||||
2004-06-12 Karl Chen <quarl@hkn.eecs.berkeley.edu> (tiny change)
|
||||
|
||||
* progmodes/python.el (python-open-block-statement-p): Fix
|
||||
indentation after a block opening that contains a comment.
|
||||
|
||||
2004-06-12 J,Ai(Br,At(Bme Marant <jerome@marant.org> (tiny change)
|
||||
|
||||
* bindings.el (completion-ignored-extensions): Add file extensions
|
||||
of Python byte-compiled files.
|
||||
|
||||
2004-06-12 Juri Linkov <juri@jurta.org>
|
||||
|
||||
* info.el (Info-goto-node): Add autoload.
|
||||
(Info-toc): Add substring-no-properties on Info file name.
|
||||
(Info-mode, info, Info-toc, Info-mode-menu): Doc fix.
|
||||
(Info-mode-map): Bind L to Info-history, T to Info-toc.
|
||||
|
||||
2004-06-12 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* international/mule-cmds.el (set-language-environment): Load
|
||||
subst tables if necessary.
|
||||
|
||||
* international/mule.el (decode-char): Load subst tables if
|
||||
necessary.
|
||||
(encode-char): Likewise.
|
||||
|
||||
* international/utf-16.el (utf-16-decode-ucs): Handle a surrogate
|
||||
pair correctly. Call ccl-mule-utf-untrans for untranslable chars.
|
||||
(utf-16le-decode-loop): Set r5 to -1 before loop.
|
||||
(utf-16be-decode-loop): Likewise.
|
||||
(ccl-decode-mule-utf-16le): Add EOF processing block.
|
||||
(ccl-decode-mule-utf-16be): Likewise.
|
||||
(ccl-decode-mule-utf-16le-with-signature): Likewise.
|
||||
(ccl-decode-mule-utf-16be-with-signature): Likewise.
|
||||
(ccl-decode-mule-utf-16): Likewise. Set r5 to -1 initially.
|
||||
(ccl-mule-utf-16-encode-untrans): New CCL.
|
||||
(utf-16-decode-to-ucs): Handle pre-read character.
|
||||
(utf-16le-encode-loop): Handle surrogate pair.
|
||||
(utf-16be-encode-loop): Likewise.
|
||||
(ccl-encode-mule-utf-16le-with-signature): Adjusted for the change
|
||||
of utf-16le-encode-loop.
|
||||
(ccl-encode-mule-utf-16be-with-signature): Adjusted for the change
|
||||
of utf-16be-encode-loop.
|
||||
(mule-utf-16-post-read-conversion): Call
|
||||
utf-8-post-read-conversion at first.
|
||||
(mule-utf-16[{le|be}], mule-utf-16{le|be}-with-signature): Include
|
||||
CJK charsets in safe-charsets if utf-translate-cjk-mode is on.
|
||||
Add post-read-conversion and pre-write-conversion.
|
||||
|
||||
* international/utf-8.el (utf-translate-cjk-charsets): New
|
||||
variable.
|
||||
(utf-translate-cjk-unicode-range): New variable.
|
||||
(utf-translate-cjk-load-tables): New function.
|
||||
(utf-lookup-subst-table-for-decode): New function.
|
||||
(utf-lookup-subst-table-for-encode): New function.
|
||||
(utf-translate-cjk-mode): Init-value changed to t. Don't load
|
||||
tables here. Update safe-charsets of utf-* coding systems.
|
||||
(ccl-mule-utf-untrans): New CCL.
|
||||
(ccl-decode-mule-utf-8): Call ccl-mule-utf-untrans. Use `repeat'
|
||||
at end of each branch.
|
||||
(ccl-mule-utf-8-encode-untrans): New CCL.
|
||||
(ccl-encode-mule-utf-8): Call ccl-mule-utf-8-encode-untrans.
|
||||
(ccl-untranslated-to-ucs): Handle 2-byte encoding. Set r1 to the
|
||||
length of encoding. Don't return r0.
|
||||
(utf-8-compose): New arg hash-table. Handle 2-byte encoding.
|
||||
(utf-8-post-read-conversion): Narrow to region properly. If
|
||||
utf-translate-cjk-mode is on, load tables if necessary. Call
|
||||
utf-8-compose with hash-table arg if necessary. Call
|
||||
XXX-compose-region instead of XXX-post-read-convesion.
|
||||
(utf-8-pre-write-conversion): New function.
|
||||
(mule-utf-8): Include CJK charsets in safe-charsets if
|
||||
utf-translate-cjk-mode is on. Add pre-write-conversion.
|
||||
|
||||
* international/characters.el: Temporarily set
|
||||
utf-translate-cjk-mode to nil.
|
||||
|
||||
* language/devan-util.el (devanagari-compose-region): Add
|
||||
autoload cookie.
|
||||
|
||||
* international/ccl.el (ccl-dump-call): Fix printing the
|
||||
subroutine name.
|
||||
|
||||
2004-06-11 Luc Teirlinck <teirllm@auburn.edu>
|
||||
|
||||
* dired.el (dired-revert): If buffer is marked unmodified before
|
||||
reverting, keep it marked unmodified.
|
||||
Adapt to new conventions for commenting out code.
|
||||
(dired-make-relative): Adapt to new conventions for commenting out
|
||||
code.
|
||||
|
||||
2004-06-10 Miles Bader <miles@gnu.ai.mit.edu>
|
||||
|
||||
* eshell/esh-module.el (eshell-load-defgroups): Bind
|
||||
@ -2169,17 +2315,21 @@
|
||||
(desktop-buffer-info-misc-data): Rename to
|
||||
Info-desktop-buffer-misc-data and move to info.el.
|
||||
(desktop-read): Add message about number of buffers restored/failed.
|
||||
|
||||
* dired.el (dired-restore-desktop-buffer) Move from desktop.el.
|
||||
Add parameters. Pause to display error only when
|
||||
desktop-missing-file-warning is non-nil.
|
||||
(dired-desktop-buffer-misc-data): Move from desktop.el. Add parameter.
|
||||
(dired-mode): Bind desktop-buffer-misc-data-function.
|
||||
|
||||
* info.el (Info-restore-desktop-buffer): Move from desktop.el.
|
||||
Add Parameters.
|
||||
(Info-desktop-buffer-misc-data): Move from desktop.el. Add parameter.
|
||||
(Info-mode): Bind desktop-buffer-misc-data-function.
|
||||
|
||||
* mail/rmail.el (rmail-restore-desktop-buffer): Move from desktop.el.
|
||||
Add Parameters.
|
||||
|
||||
* mh-e/mh-e.el (mh-restore-desktop-buffer): Move from desktop.el.
|
||||
Add Parameters.
|
||||
|
||||
|
@ -37,9 +37,9 @@ define global abbrevs instead."
|
||||
:group 'convenience)
|
||||
|
||||
(defun abbrev-mode (&optional arg)
|
||||
"Toggle abbrev mode.
|
||||
"Toggle Abbrev mode in the current buffer.
|
||||
With argument ARG, turn abbrev mode on iff ARG is positive.
|
||||
In abbrev mode, inserting an abbreviation causes it to expand
|
||||
In Abbrev mode, inserting an abbreviation causes it to expand
|
||||
and be replaced by its expansion."
|
||||
(interactive "P")
|
||||
(setq abbrev-mode
|
||||
@ -48,18 +48,19 @@ and be replaced by its expansion."
|
||||
(force-mode-line-update))
|
||||
|
||||
(defcustom abbrev-mode nil
|
||||
"Toggle abbrev mode.
|
||||
"Enable or disable Abbrev mode.
|
||||
Non-nil means automatically expand abbrevs as they are inserted.
|
||||
|
||||
Setting this variable with `setq' changes it for the current buffer.
|
||||
Changing it with \\[customize] sets the default value.
|
||||
Use the command `abbrev-mode' to enable or disable Abbrev mode in the current
|
||||
buffer."
|
||||
Interactively, use the command `abbrev-mode'
|
||||
to enable or disable Abbrev mode in the current buffer."
|
||||
:type 'boolean
|
||||
:group 'abbrev-mode)
|
||||
|
||||
|
||||
(defvar edit-abbrevs-map nil
|
||||
"Keymap used in edit-abbrevs.")
|
||||
"Keymap used in `edit-abbrevs'.")
|
||||
(if edit-abbrevs-map
|
||||
nil
|
||||
(setq edit-abbrevs-map (make-sparse-keymap))
|
||||
|
@ -524,7 +524,9 @@ is okay. See `mode-line-format'.")
|
||||
;; files you do want to see, not just TeX stuff. -- fx
|
||||
".toc" ".aux"
|
||||
".cp" ".fn" ".ky" ".pg" ".tp" ".vr"
|
||||
".cps" ".fns" ".kys" ".pgs" ".tps" ".vrs")))
|
||||
".cps" ".fns" ".kys" ".pgs" ".tps" ".vrs"
|
||||
;; Python byte-compiled
|
||||
".pyc" ".pyo")))
|
||||
|
||||
;; Suffixes used for executables.
|
||||
(setq exec-suffixes
|
||||
|
@ -376,7 +376,11 @@ That is, all information but the name."
|
||||
(if cell
|
||||
(setcdr cell filename)
|
||||
(nconc (bookmark-get-bookmark-record bookmark)
|
||||
(list (cons 'filename filename))))))
|
||||
(list (cons 'filename filename))))
|
||||
(setq bookmark-alist-modification-count
|
||||
(1+ bookmark-alist-modification-count))
|
||||
(if (bookmark-time-to-save-p)
|
||||
(bookmark-save))))
|
||||
|
||||
|
||||
(defun bookmark-get-position (bookmark)
|
||||
@ -1491,6 +1495,7 @@ method buffers use to resolve name collisions."
|
||||
(define-key bookmark-bmenu-mode-map "m" 'bookmark-bmenu-mark)
|
||||
(define-key bookmark-bmenu-mode-map "l" 'bookmark-bmenu-load)
|
||||
(define-key bookmark-bmenu-mode-map "r" 'bookmark-bmenu-rename)
|
||||
(define-key bookmark-bmenu-mode-map "R" 'bookmark-bmenu-relocate)
|
||||
(define-key bookmark-bmenu-mode-map "t" 'bookmark-bmenu-toggle-filenames)
|
||||
(define-key bookmark-bmenu-mode-map "a" 'bookmark-bmenu-show-annotation)
|
||||
(define-key bookmark-bmenu-mode-map "A" 'bookmark-bmenu-show-all-annotations)
|
||||
@ -1589,6 +1594,7 @@ Bookmark names preceded by a \"*\" have annotations.
|
||||
so the bookmark menu bookmark remains visible in its window.
|
||||
\\[bookmark-bmenu-switch-other-window] -- switch the other window to this bookmark.
|
||||
\\[bookmark-bmenu-rename] -- rename this bookmark \(prompts for new name\).
|
||||
\\[bookmark-bmenu-relocate] -- relocate this bookmark's file \(prompts for new file\).
|
||||
\\[bookmark-bmenu-delete] -- mark this bookmark to be deleted, and move down.
|
||||
\\[bookmark-bmenu-delete-backwards] -- mark this bookmark to be deleted, and move up.
|
||||
\\[bookmark-bmenu-execute-deletions] -- delete bookmarks marked with `\\[bookmark-bmenu-delete]'.
|
||||
@ -2041,6 +2047,15 @@ To carry out the deletions that you've marked, use \\<bookmark-bmenu-mode-map>\\
|
||||
(let ((bmrk (bookmark-bmenu-bookmark)))
|
||||
(message (bookmark-location bmrk)))))
|
||||
|
||||
(defun bookmark-bmenu-relocate ()
|
||||
"Change the file path of the bookmark on the current line,
|
||||
prompting with completion for the new path."
|
||||
(interactive)
|
||||
(if (bookmark-bmenu-check-position)
|
||||
(let ((bmrk (bookmark-bmenu-bookmark))
|
||||
(thispoint (point)))
|
||||
(bookmark-relocate bmrk)
|
||||
(goto-char thispoint))))
|
||||
|
||||
|
||||
;;; Menu bar stuff. Prefix is "bookmark-menu".
|
||||
|
@ -40,15 +40,11 @@
|
||||
(unless (facep face)
|
||||
;; If the user has already created the face, respect that.
|
||||
(let ((value (or (get face 'saved-face) spec))
|
||||
(frames (frame-list))
|
||||
(have-window-system (memq initial-window-system '(x w32)))
|
||||
frame)
|
||||
(have-window-system (memq initial-window-system '(x w32))))
|
||||
;; Create global face.
|
||||
(make-empty-face face)
|
||||
;; Create frame-local faces
|
||||
(while frames
|
||||
(setq frame (car frames)
|
||||
frames (cdr frames))
|
||||
(dolist (frame (frame-list))
|
||||
(face-spec-set face value frame)
|
||||
(when (memq (window-system frame) '(x w32))
|
||||
(setq have-window-system t)))
|
||||
|
@ -1248,9 +1248,12 @@ If the prefix arg is bigger than 8 (for example with \\[universal-argument] \\[u
|
||||
(defun diff-current-defun ()
|
||||
"Find the name of function at point.
|
||||
For use in `add-log-current-defun-function'."
|
||||
(destructuring-bind (buf line-offset pos src dst &optional switched)
|
||||
(diff-find-source-location)
|
||||
(save-excursion
|
||||
(save-excursion
|
||||
(when (looking-at diff-hunk-header-re)
|
||||
(forward-line 1)
|
||||
(while (and (looking-at " ") (not (zerop (forward-line 1))))))
|
||||
(destructuring-bind (buf line-offset pos src dst &optional switched)
|
||||
(diff-find-source-location)
|
||||
(beginning-of-line)
|
||||
(or (when (memq (char-after) '(?< ?-))
|
||||
;; Cursor is pointing at removed text. This could be a removed
|
||||
|
@ -239,7 +239,7 @@ to nil: a pipe using `zcat' or `gunzip -c' will be used."
|
||||
;;; KEY BINDINGS.
|
||||
|
||||
(define-key dired-mode-map "\M-o" 'dired-omit-mode)
|
||||
(define-key dired-mode-map "\M-O" 'dired-mark-omitted)
|
||||
(define-key dired-mode-map "*O" 'dired-mark-omitted)
|
||||
(define-key dired-mode-map "\M-(" 'dired-mark-sexp)
|
||||
(define-key dired-mode-map "*(" 'dired-mark-sexp)
|
||||
(define-key dired-mode-map "*." 'dired-mark-extension)
|
||||
|
@ -880,7 +880,8 @@ Must also be called after dired-actual-switches have changed.
|
||||
Should not fail even on completely garbaged buffers.
|
||||
Preserves old cursor, marks/flags, hidden-p."
|
||||
(widen) ; just in case user narrowed
|
||||
(let ((opoint (point))
|
||||
(let ((modflag (buffer-modified-p))
|
||||
(opoint (point))
|
||||
(ofile (dired-get-filename nil t))
|
||||
(mark-alist nil) ; save marked files
|
||||
(hidden-subdirs (dired-remember-hidden))
|
||||
@ -907,9 +908,10 @@ Preserves old cursor, marks/flags, hidden-p."
|
||||
(save-excursion ; hide subdirs that were hidden
|
||||
(dolist (dir hidden-subdirs)
|
||||
(if (dired-goto-subdir dir)
|
||||
(dired-hide-subdir 1)))))
|
||||
(dired-hide-subdir 1))))
|
||||
(unless modflag (restore-buffer-modified-p nil)))
|
||||
;; outside of the let scope
|
||||
;;; Might as well not override the user if the user changed this.
|
||||
;;; Might as well not override the user if the user changed this.
|
||||
;;; (setq buffer-read-only t)
|
||||
)
|
||||
|
||||
@ -1707,7 +1709,7 @@ DIR must be a directory name, not a file name."
|
||||
(setq dir (expand-file-name dir)))
|
||||
(if (string-match (concat "^" (regexp-quote dir)) file)
|
||||
(substring file (match-end 0))
|
||||
;;; (or no-error
|
||||
;;; (or no-error
|
||||
;;; (error "%s: not in directory tree growing at %s" file dir))
|
||||
file))
|
||||
|
||||
|
@ -1008,11 +1008,11 @@ Each function's symbol gets added to `byte-compile-noruntime-functions'."
|
||||
(when (nth 2 new)))
|
||||
(byte-compile-set-symbol-position (car form))
|
||||
(if (memq 'obsolete byte-compile-warnings)
|
||||
(byte-compile-warn "%s is an obsolete function%s; %s" (car form)
|
||||
(byte-compile-warn "`%s' is an obsolete function%s; %s" (car form)
|
||||
(if when (concat " since " when) "")
|
||||
(if (stringp (car new))
|
||||
(car new)
|
||||
(format "use %s instead." (car new)))))
|
||||
(format "use `%s' instead." (car new)))))
|
||||
(funcall (or handler 'byte-compile-normal-call) form)))
|
||||
|
||||
;; Compiler options
|
||||
@ -2076,7 +2076,7 @@ list that represents a doc string reference.
|
||||
(defun byte-compile-file-form-defsubst (form)
|
||||
(when (assq (nth 1 form) byte-compile-unresolved-functions)
|
||||
(setq byte-compile-current-form (nth 1 form))
|
||||
(byte-compile-warn "defsubst %s was used before it was defined"
|
||||
(byte-compile-warn "defsubst `%s' was used before it was defined"
|
||||
(nth 1 form)))
|
||||
(byte-compile-file-form
|
||||
(macroexpand form byte-compile-macro-environment))
|
||||
@ -2206,7 +2206,7 @@ list that represents a doc string reference.
|
||||
(not (assq (nth 1 form)
|
||||
byte-compile-initial-macro-environment)))
|
||||
(byte-compile-warn
|
||||
"%s defined multiple times, as both function and macro"
|
||||
"`%s' defined multiple times, as both function and macro"
|
||||
(nth 1 form)))
|
||||
(setcdr that-one nil))
|
||||
(this-one
|
||||
@ -2215,14 +2215,14 @@ list that represents a doc string reference.
|
||||
;; byte-compiler macros in byte-run.el...
|
||||
(not (assq (nth 1 form)
|
||||
byte-compile-initial-macro-environment)))
|
||||
(byte-compile-warn "%s %s defined multiple times in this file"
|
||||
(byte-compile-warn "%s `%s' defined multiple times in this file"
|
||||
(if macrop "macro" "function")
|
||||
(nth 1 form))))
|
||||
((and (fboundp name)
|
||||
(eq (car-safe (symbol-function name))
|
||||
(if macrop 'lambda 'macro)))
|
||||
(when (memq 'redefine byte-compile-warnings)
|
||||
(byte-compile-warn "%s %s being redefined as a %s"
|
||||
(byte-compile-warn "%s `%s' being redefined as a %s"
|
||||
(if macrop "function" "macro")
|
||||
(nth 1 form)
|
||||
(if macrop "macro" "function")))
|
||||
@ -2695,7 +2695,7 @@ If FORM is a lambda or a macro, byte-compile it as a function."
|
||||
(handler (get fn 'byte-compile)))
|
||||
(byte-compile-set-symbol-position fn)
|
||||
(when (byte-compile-const-symbol-p fn)
|
||||
(byte-compile-warn "%s called as a function" fn))
|
||||
(byte-compile-warn "`%s' called as a function" fn))
|
||||
(if (and handler
|
||||
(or (not (byte-compile-version-cond
|
||||
byte-compile-compatibility))
|
||||
@ -2730,9 +2730,9 @@ If FORM is a lambda or a macro, byte-compile it as a function."
|
||||
(if (or (not (symbolp var))
|
||||
(byte-compile-const-symbol-p var (not (eq base-op 'byte-varref))))
|
||||
(byte-compile-warn
|
||||
(cond ((eq base-op 'byte-varbind) "attempt to let-bind %s %s")
|
||||
((eq base-op 'byte-varset) "variable assignment to %s %s")
|
||||
(t "variable reference to %s %s"))
|
||||
(cond ((eq base-op 'byte-varbind) "attempt to let-bind %s `%s'")
|
||||
((eq base-op 'byte-varset) "variable assignment to %s `%s'")
|
||||
(t "variable reference to %s `%s'"))
|
||||
(if (symbolp var) "constant" "nonvariable")
|
||||
(prin1-to-string var))
|
||||
(if (and (get var 'byte-obsolete-variable)
|
||||
@ -2740,11 +2740,11 @@ If FORM is a lambda or a macro, byte-compile it as a function."
|
||||
(not (eq var byte-compile-not-obsolete-var)))
|
||||
(let* ((ob (get var 'byte-obsolete-variable))
|
||||
(when (cdr ob)))
|
||||
(byte-compile-warn "%s is an obsolete variable%s; %s" var
|
||||
(byte-compile-warn "`%s' is an obsolete variable%s; %s" var
|
||||
(if when (concat " since " when) "")
|
||||
(if (stringp (car ob))
|
||||
(car ob)
|
||||
(format "use %s instead." (car ob))))))
|
||||
(format "use `%s' instead." (car ob))))))
|
||||
(if (memq 'free-vars byte-compile-warnings)
|
||||
(if (eq base-op 'byte-varbind)
|
||||
(push var byte-compile-bound-variables)
|
||||
@ -2753,11 +2753,11 @@ If FORM is a lambda or a macro, byte-compile it as a function."
|
||||
(if (eq base-op 'byte-varset)
|
||||
(or (memq var byte-compile-free-assignments)
|
||||
(progn
|
||||
(byte-compile-warn "assignment to free variable %s" var)
|
||||
(byte-compile-warn "assignment to free variable `%s'" var)
|
||||
(push var byte-compile-free-assignments)))
|
||||
(or (memq var byte-compile-free-references)
|
||||
(progn
|
||||
(byte-compile-warn "reference to free variable %s" var)
|
||||
(byte-compile-warn "reference to free variable `%s'" var)
|
||||
(push var byte-compile-free-references))))))))
|
||||
(let ((tmp (assq var byte-compile-variables)))
|
||||
(unless tmp
|
||||
@ -2958,7 +2958,7 @@ If FORM is a lambda or a macro, byte-compile it as a function."
|
||||
|
||||
(defun byte-compile-subr-wrong-args (form n)
|
||||
(byte-compile-set-symbol-position (car form))
|
||||
(byte-compile-warn "%s called with %d arg%s, but requires %s"
|
||||
(byte-compile-warn "`%s' called with %d arg%s, but requires %s"
|
||||
(car form) (length (cdr form))
|
||||
(if (= 1 (length (cdr form))) "" "s") n)
|
||||
;; get run-time wrong-number-of-args error.
|
||||
@ -3124,7 +3124,7 @@ If FORM is a lambda or a macro, byte-compile it as a function."
|
||||
(if (and (consp (car body))
|
||||
(not (eq 'byte-code (car (car body)))))
|
||||
(byte-compile-warn
|
||||
"A quoted lambda form is the second argument of fset. This is probably
|
||||
"A quoted lambda form is the second argument of `fset'. This is probably
|
||||
not what you want, as that lambda cannot be compiled. Consider using
|
||||
the syntax (function (lambda (...) ...)) instead.")))))
|
||||
(byte-compile-two-args form))
|
||||
@ -3507,7 +3507,7 @@ being undefined will be suppressed."
|
||||
(byte-compile-set-symbol-position 'condition-case)
|
||||
(unless (symbolp var)
|
||||
(byte-compile-warn
|
||||
"%s is not a variable-name or nil (in condition-case)" var))
|
||||
"`%s' is not a variable-name or nil (in condition-case)" var))
|
||||
(byte-compile-push-constant var)
|
||||
(byte-compile-push-constant (byte-compile-top-level
|
||||
(nth 2 form) for-effect))
|
||||
@ -3525,13 +3525,13 @@ being undefined will be suppressed."
|
||||
(setq syms (cdr syms)))
|
||||
ok))))
|
||||
(byte-compile-warn
|
||||
"%s is not a condition name or list of such (in condition-case)"
|
||||
"`%s' is not a condition name or list of such (in condition-case)"
|
||||
(prin1-to-string condition)))
|
||||
;; ((not (or (eq condition 't)
|
||||
;; (and (stringp (get condition 'error-message))
|
||||
;; (consp (get condition 'error-conditions)))))
|
||||
;; (byte-compile-warn
|
||||
;; "%s is not a known condition name (in condition-case)"
|
||||
;; "`%s' is not a known condition name (in condition-case)"
|
||||
;; condition))
|
||||
)
|
||||
(setq compiled-clauses
|
||||
@ -3627,7 +3627,7 @@ being undefined will be suppressed."
|
||||
(and (eq fun 'defconst) (null (cddr form))))
|
||||
(let ((ncall (length (cdr form))))
|
||||
(byte-compile-warn
|
||||
"%s called with %d argument%s, but %s %s"
|
||||
"`%s' called with %d argument%s, but %s %s"
|
||||
fun ncall
|
||||
(if (= 1 ncall) "" "s")
|
||||
(if (< ncall 2) "requires" "accepts only")
|
||||
@ -3644,7 +3644,7 @@ being undefined will be suppressed."
|
||||
`(push ',var current-load-list))
|
||||
(when (> (length form) 3)
|
||||
(when (and string (not (stringp string)))
|
||||
(byte-compile-warn "third arg to %s %s is not a string: %s"
|
||||
(byte-compile-warn "third arg to `%s %s' is not a string: %s"
|
||||
fun var string))
|
||||
`(put ',var 'variable-documentation ,string))
|
||||
(if (cddr form) ; `value' provided
|
||||
|
@ -61,7 +61,7 @@
|
||||
;; Eli Barzilay (eli@cs.bgu.ac.il) suggested the sexps functions and
|
||||
;; keybindings.
|
||||
;;
|
||||
;; Ok, some details about the idea of pc-selection-mode:
|
||||
;; Ok, some details about the idea of PC Selection mode:
|
||||
;;
|
||||
;; o The standard keys for moving around (right, left, up, down, home, end,
|
||||
;; prior, next, called "move-keys" from now on) will always de-activate
|
||||
@ -114,23 +114,23 @@ This gives mostly Emacs-like behaviour with only the selection keys enabled."
|
||||
:group 'pc-select)
|
||||
|
||||
(defvar pc-select-saved-settings-alist nil
|
||||
"The values of the variables before `pc-selection-mode' was toggled on.
|
||||
When `pc-selection-mode' is toggled on, it sets quite a few variables
|
||||
"The values of the variables before PC Selection mode was toggled on.
|
||||
When PC Selection mode is toggled on, it sets quite a few variables
|
||||
for its own purposes. This alist holds the original values of the
|
||||
variables `pc-selection-mode' had set, so that these variables can be
|
||||
restored to their original values when `pc-selection-mode' is toggled off.")
|
||||
variables PC Selection mode had set, so that these variables can be
|
||||
restored to their original values when PC Selection mode is toggled off.")
|
||||
|
||||
(defvar pc-select-map nil
|
||||
"The keymap used as the global map when `pc-selection-mode' is on." )
|
||||
"The keymap used as the global map when PC Selection mode is on." )
|
||||
|
||||
(defvar pc-select-saved-global-map nil
|
||||
"The global map that was in effect when `pc-selection-mode' was toggled on.")
|
||||
"The global map that was in effect when PC Selection mode was toggled on.")
|
||||
|
||||
(defvar pc-select-key-bindings-alist nil
|
||||
"This alist holds all the key bindings `pc-selection-mode' sets.")
|
||||
"This alist holds all the key bindings PC Selection mode sets.")
|
||||
|
||||
(defvar pc-select-default-key-bindings nil
|
||||
"These key bindings always get set by `pc-selection-mode'.")
|
||||
"These key bindings always get set by PC Selection mode.")
|
||||
|
||||
(unless pc-select-default-key-bindings
|
||||
(let ((lst
|
||||
@ -250,7 +250,7 @@ These key bindings get installed when running in a tty, but only if
|
||||
(defvar pc-select-old-M-delete-binding nil
|
||||
"Holds the old mapping of [M-delete] in the `function-key-map'.
|
||||
This variable holds the value associated with [M-delete] in the
|
||||
`function-key-map' before `pc-selection-mode' had changed that
|
||||
`function-key-map' before PC Selection mode had changed that
|
||||
association.")
|
||||
|
||||
;;;;
|
||||
@ -842,7 +842,7 @@ M-LEFT and M-RIGHT move back or forward one word or sexp, disabling the mark.
|
||||
S-M-LEFT and S-M-RIGHT move back or forward one word or sexp, leaving the mark
|
||||
behind. To control whether these keys move word-wise or sexp-wise set the
|
||||
variable `pc-select-meta-moves-sexps' after loading pc-select.el but before
|
||||
turning `pc-selection-mode' on.
|
||||
turning PC Selection mode on.
|
||||
|
||||
C-DOWN and C-UP move back or forward a paragraph, disabling the mark.
|
||||
S-C-DOWN and S-C-UP move back or forward a paragraph, leaving the mark behind.
|
||||
@ -864,7 +864,7 @@ C-INSERT copies the region into the kill ring (`copy-region-as-kill').
|
||||
|
||||
In addition, certain other PC bindings are imitated (to avoid this, set
|
||||
the variable `pc-select-selection-keys-only' to t after loading pc-select.el
|
||||
but before calling `pc-selection-mode'):
|
||||
but before calling PC Selection mode):
|
||||
|
||||
F6 other-window
|
||||
DELETE delete-char
|
||||
@ -974,7 +974,8 @@ but before calling `pc-selection-mode'):
|
||||
Change mark behaviour to emulate Motif, MAC or MS-Windows cut and paste style,
|
||||
and cursor movement commands.
|
||||
This mode enables Delete Selection mode and Transient Mark mode.
|
||||
You must modify via \\[customize] for this variable to have an effect."
|
||||
Setting this variable directly does not take effect;
|
||||
you must modify it using \\[customize] or \\[pc-selection-mode]."
|
||||
:set (lambda (symbol value)
|
||||
(pc-selection-mode (if value 1 -1)))
|
||||
:initialize 'custom-initialize-default
|
||||
|
4
lisp/eshell/.arch-inventory
Normal file
4
lisp/eshell/.arch-inventory
Normal file
@ -0,0 +1,4 @@
|
||||
# Generated files
|
||||
precious ^(esh-groups)\.el$
|
||||
|
||||
# arch-tag: 8dc7bfaa-6ca6-4be0-915a-1e539c3dabfb
|
@ -3024,7 +3024,7 @@ the last real save, but optional arg FORCE non-nil means delete anyway."
|
||||
|
||||
(defcustom before-save-hook nil
|
||||
"Normal hook that is run before a buffer is saved to its file."
|
||||
:options '(copyright-update)
|
||||
:options '(copyright-update time-stamp)
|
||||
:type 'hook
|
||||
:group 'files)
|
||||
|
||||
|
@ -217,7 +217,9 @@ You can use \\[hexl-find-file] to visit a file in Hexl mode.
|
||||
(set-buffer-modified-p modified))
|
||||
(make-local-variable 'hexl-max-address)
|
||||
(setq hexl-max-address max-address)
|
||||
(hexl-goto-address original-point))
|
||||
(condition-case nil
|
||||
(hexl-goto-address original-point)
|
||||
(error nil)))
|
||||
|
||||
;; We do not turn off the old major mode; instead we just
|
||||
;; override most of it. That way, we can restore it perfectly.
|
||||
@ -405,7 +407,7 @@ This function is indented to be used as eldoc callback."
|
||||
Signal error if ADDRESS out of range."
|
||||
(interactive "nAddress: ")
|
||||
(if (or (< address 0) (> address hexl-max-address))
|
||||
(error "Out of hexl region"))
|
||||
(error "Out of hexl region"))
|
||||
(goto-char (hexl-address-to-marker address)))
|
||||
|
||||
(defun hexl-goto-hex-address (hex-address)
|
||||
|
33
lisp/info.el
33
lisp/info.el
@ -469,7 +469,8 @@ with the top-level Info directory.
|
||||
|
||||
In interactive use, a non-numeric prefix argument directs
|
||||
this command to read a file name from the minibuffer.
|
||||
A numeric prefix argument appends the number to the buffer name.
|
||||
A numeric prefix argument selects an Info buffer with the prefix number
|
||||
appended to the Info buffer name.
|
||||
|
||||
The search path for Info files is in the variable `Info-directory-list'.
|
||||
The top-level Info directory is made by combining all the files named `dir'
|
||||
@ -1315,6 +1316,7 @@ any double quotes or backslashes must be escaped (\\\",\\\\)."
|
||||
;; Go to an info node specified with a filename-and-nodename string
|
||||
;; of the sort that is found in pointers in nodes.
|
||||
|
||||
;;;###autoload
|
||||
(defun Info-goto-node (nodename &optional fork)
|
||||
"Go to info node named NODENAME. Give just NODENAME or (FILENAME)NODENAME.
|
||||
If NODENAME is of the form (FILENAME)NODENAME, the node is in the Info file
|
||||
@ -1672,7 +1674,8 @@ If SAME-FILE is non-nil, do not move to a different Info file."
|
||||
(goto-char (or p (point-min)))))
|
||||
|
||||
(defun Info-toc ()
|
||||
"Go to a node with table of contents of the current Info file."
|
||||
"Go to a node with table of contents of the current Info file.
|
||||
Table of contents is created from the tree structure of menus."
|
||||
(interactive)
|
||||
(let ((curr-file Info-current-file)
|
||||
(curr-node Info-current-node)
|
||||
@ -1687,7 +1690,7 @@ If SAME-FILE is non-nil, do not move to a different Info file."
|
||||
(insert "*Note Top::\n")
|
||||
(Info-insert-toc
|
||||
(nth 2 (assoc "Top" node-list)) ; get Top nodes
|
||||
node-list 0 curr-file))
|
||||
node-list 0 (substring-no-properties curr-file)))
|
||||
(if (not (bobp))
|
||||
(let ((Info-hide-note-references 'hide)
|
||||
(Info-fontify-visited-nodes nil))
|
||||
@ -2786,6 +2789,7 @@ if point is in a menu item description, follow that menu item."
|
||||
(define-key Info-mode-map "h" 'Info-help)
|
||||
(define-key Info-mode-map "i" 'Info-index)
|
||||
(define-key Info-mode-map "l" 'Info-last)
|
||||
(define-key Info-mode-map "L" 'Info-history)
|
||||
(define-key Info-mode-map "m" 'Info-menu)
|
||||
(define-key Info-mode-map "n" 'Info-next)
|
||||
(define-key Info-mode-map "p" 'Info-prev)
|
||||
@ -2796,6 +2800,7 @@ if point is in a menu item description, follow that menu item."
|
||||
(define-key Info-mode-map "\M-s" 'Info-search)
|
||||
(define-key Info-mode-map "\M-n" 'clone-buffer)
|
||||
(define-key Info-mode-map "t" 'Info-top-node)
|
||||
(define-key Info-mode-map "T" 'Info-toc)
|
||||
(define-key Info-mode-map "u" 'Info-up)
|
||||
;; For consistency with dired-copy-filename-as-kill.
|
||||
(define-key Info-mode-map "w" 'Info-copy-current-node-name)
|
||||
@ -2843,9 +2848,9 @@ if point is in a menu item description, follow that menu item."
|
||||
["Last" Info-last :active Info-history
|
||||
:help "Go to the last node you were at"]
|
||||
["History" Info-history :active Info-history-list
|
||||
:help "Go to the history buffer"]
|
||||
:help "Go to menu of visited nodes"]
|
||||
["Table of Contents" Info-toc
|
||||
:help "Go to the buffer with a table of contents"]
|
||||
:help "Go to table of contents"]
|
||||
("Index..."
|
||||
["Lookup a String" Info-index
|
||||
:help "Look for a string in the index items"]
|
||||
@ -2990,15 +2995,15 @@ Selecting other nodes:
|
||||
\\[Info-directory] Go to the Info directory node.
|
||||
\\[Info-follow-reference] Follow a cross reference. Reads name of reference.
|
||||
\\[Info-last] Move to the last node you were at.
|
||||
\\[Info-history] Go to the history buffer.
|
||||
\\[Info-toc] Go to the buffer with a table of contents.
|
||||
\\[Info-index] Look up a topic in this file's Index and move to that node.
|
||||
\\[Info-index-next] (comma) Move to the next match from a previous \\<Info-mode-map>\\[Info-index] command.
|
||||
\\[info-apropos] Look for a string in the indices of all manuals.
|
||||
\\[Info-history] Go to menu of visited nodes.
|
||||
\\[Info-toc] Go to table of contents of the current Info file.
|
||||
\\[Info-top-node] Go to the Top node of this file.
|
||||
\\[Info-final-node] Go to the final node in this file.
|
||||
\\[Info-backward-node] Go backward one node, considering all nodes as forming one sequence.
|
||||
\\[Info-forward-node] Go forward one node, considering all nodes as forming one sequence.
|
||||
\\[Info-index] Look up a topic in this file's Index and move to that node.
|
||||
\\[Info-index-next] (comma) Move to the next match from a previous \\<Info-mode-map>\\[Info-index] command.
|
||||
\\[info-apropos] Look for a string in the indices of all manuals.
|
||||
|
||||
Moving within a node:
|
||||
\\[Info-scroll-up] Normally, scroll forward a full screen.
|
||||
@ -3015,15 +3020,15 @@ Advanced commands:
|
||||
\\[Info-copy-current-node-name] Put name of current info node in the kill ring.
|
||||
\\[clone-buffer] Select a new cloned Info buffer in another window.
|
||||
\\[Info-edit] Edit contents of selected node.
|
||||
1 Pick first item in node's menu.
|
||||
2, 3, 4, 5 Pick second ... fifth item in node's menu.
|
||||
1 .. 9 Pick first ... ninth item in node's menu.
|
||||
Every third `*' is highlighted to help pick the right number.
|
||||
\\[Info-goto-node] Move to node specified by name.
|
||||
You may include a filename as well, as (FILENAME)NODENAME.
|
||||
\\[universal-argument] \\[info] Move to new Info file with completion.
|
||||
\\[universal-argument] N \\[info] Select Info buffer with prefix number in the name *info*<N>.
|
||||
\\[Info-search] Search through this Info file for specified regexp,
|
||||
and select the node in which the next occurrence is found.
|
||||
\\[Info-search-case-sensitively] Search through this Info file
|
||||
for specified regexp case-sensitively.
|
||||
\\[Info-search-case-sensitively] Search through this Info file for specified regexp case-sensitively.
|
||||
\\[Info-search-next] Search for another occurrence of regexp
|
||||
from a previous \\<Info-mode-map>\\[Info-search] command.
|
||||
\\[Info-next-reference] Move cursor to next cross-reference or menu item.
|
||||
|
@ -1120,7 +1120,8 @@
|
||||
(insert (format "write r%d (%d remaining)\n" rrr cc)))
|
||||
|
||||
(defun ccl-dump-call (ignore cc)
|
||||
(insert (format "call subroutine #%d\n" cc)))
|
||||
(let ((subroutine (car (ccl-get-next-code))))
|
||||
(insert (format "call subroutine `%s'\n" subroutine))))
|
||||
|
||||
(defun ccl-dump-write-const-string (rrr cc)
|
||||
(if (= rrr 0)
|
||||
|
@ -33,6 +33,11 @@
|
||||
|
||||
;;; Code:
|
||||
|
||||
;; We must set utf-translate-cjk-mode to nil while loading this file
|
||||
;; to avoid translating CJK characters in decode-char.
|
||||
(defvar saved-utf-translate-cjk-mode utf-translate-cjk-mode)
|
||||
(setq utf-translate-cjk-mode nil)
|
||||
|
||||
;;; Predefined categories.
|
||||
|
||||
;; For each character set.
|
||||
@ -1277,6 +1282,10 @@
|
||||
(put-charset-property (car l) 'nospace-between-words t)
|
||||
(setq l (cdr l))))
|
||||
|
||||
|
||||
(setq utf-translate-cjk-mode saved-utf-translate-cjk-mode)
|
||||
(makunbound 'saved-utf-translate-cjk-mode)
|
||||
|
||||
;;; Local Variables:
|
||||
;;; coding: iso-2022-7bit
|
||||
;;; End:
|
||||
|
@ -2970,22 +2970,22 @@ Return an updated `non-iso-charset-alist'."
|
||||
(cp-make-coding-system
|
||||
windows-1256
|
||||
[?\€
|
||||
?\٠
|
||||
?\پ
|
||||
?\‚
|
||||
?\١
|
||||
?\ƒ
|
||||
?\„
|
||||
?\…
|
||||
?\†
|
||||
?\‡
|
||||
?\٢
|
||||
?\٣
|
||||
?\٤
|
||||
?\ˆ
|
||||
?\‰
|
||||
?\ٹ
|
||||
?\‹
|
||||
?\٥
|
||||
?\٦
|
||||
?\٧
|
||||
?\٨
|
||||
?\٩
|
||||
?\Œ
|
||||
?\چ
|
||||
?\ژ
|
||||
?\ڈ
|
||||
?\گ
|
||||
?\‘
|
||||
?\’
|
||||
?\“
|
||||
@ -2993,110 +2993,110 @@ Return an updated `non-iso-charset-alist'."
|
||||
?\•
|
||||
?\–
|
||||
?\—
|
||||
?\؛
|
||||
?\ک
|
||||
?\™
|
||||
?\؟
|
||||
?\ڑ
|
||||
?\›
|
||||
?\ء
|
||||
?\آ
|
||||
?\أ
|
||||
?\Ÿ
|
||||
?\œ
|
||||
?\
|
||||
?\
|
||||
?\ں
|
||||
?\
|
||||
?\ؤ
|
||||
?\إ
|
||||
?\،
|
||||
?\¢
|
||||
?\£
|
||||
?\¤
|
||||
?\ئ
|
||||
?\¥
|
||||
?\¦
|
||||
?\§
|
||||
?\ا
|
||||
?\¨
|
||||
?\©
|
||||
?\ب
|
||||
?\ھ
|
||||
?\«
|
||||
?\¬
|
||||
?\
|
||||
?\®
|
||||
?\پ
|
||||
?\¯
|
||||
?\°
|
||||
?\±
|
||||
?\ة
|
||||
?\ت
|
||||
?\ث
|
||||
?\²
|
||||
?\³
|
||||
?\´
|
||||
?\µ
|
||||
?\¶
|
||||
?\·
|
||||
?\ج
|
||||
?\چ
|
||||
?\ح
|
||||
?\¸
|
||||
?\¹
|
||||
?\؛
|
||||
?\»
|
||||
?\¼
|
||||
?\½
|
||||
?\¾
|
||||
?\؟
|
||||
?\ہ
|
||||
?\ء
|
||||
?\آ
|
||||
?\أ
|
||||
?\ؤ
|
||||
?\إ
|
||||
?\ئ
|
||||
?\ا
|
||||
?\ب
|
||||
?\ة
|
||||
?\ت
|
||||
?\ث
|
||||
?\ج
|
||||
?\ح
|
||||
?\خ
|
||||
?\د
|
||||
?\ذ
|
||||
?\ر
|
||||
?\À
|
||||
?\ز
|
||||
?\Â
|
||||
?\ژ
|
||||
?\س
|
||||
?\ش
|
||||
?\ص
|
||||
?\Ç
|
||||
?\È
|
||||
?\É
|
||||
?\Ê
|
||||
?\Ë
|
||||
?\ض
|
||||
?\×
|
||||
?\ط
|
||||
?\Î
|
||||
?\Ï
|
||||
?\ㄓ
|
||||
?\ظ
|
||||
?\ع
|
||||
?\غ
|
||||
?\ـ
|
||||
?\Ô
|
||||
?\ف
|
||||
?\ق
|
||||
?\×
|
||||
?\ك
|
||||
?\Ù
|
||||
?\گ
|
||||
?\Û
|
||||
?\Ü
|
||||
?\à
|
||||
?\ل
|
||||
?\â
|
||||
?\م
|
||||
?\ن
|
||||
?\à
|
||||
?\ه
|
||||
?\â
|
||||
?\ځ
|
||||
?\و
|
||||
?\ى
|
||||
?\ي
|
||||
?\ç
|
||||
?\è
|
||||
?\é
|
||||
?\ê
|
||||
?\ë
|
||||
?\ً
|
||||
?\ٌ
|
||||
?\ى
|
||||
?\ي
|
||||
?\î
|
||||
?\ï
|
||||
?\ً
|
||||
?\ٌ
|
||||
?\ٍ
|
||||
?\َ
|
||||
?\ô
|
||||
?\ُ
|
||||
?\ِ
|
||||
?\ô
|
||||
?\ّ
|
||||
?\ْ
|
||||
?\÷
|
||||
nil
|
||||
?\ّ
|
||||
?\ù
|
||||
nil
|
||||
?\ْ
|
||||
?\û
|
||||
?\ü
|
||||
?\
|
||||
?\
|
||||
?\ÿ]
|
||||
?\ے]
|
||||
nil ?a) ;; Arabic
|
||||
|
||||
(cp-make-coding-system
|
||||
@ -4430,11 +4430,11 @@ Return an updated `non-iso-charset-alist'."
|
||||
?\і
|
||||
?\Ї
|
||||
?\ї
|
||||
?\÷
|
||||
?\±
|
||||
?\·
|
||||
?\√
|
||||
?\№
|
||||
?\¤
|
||||
?\■
|
||||
?\■
|
||||
?\ ])
|
||||
(define-coding-system-alias 'ruscii 'cp1125)
|
||||
;; Original name for cp1125, says Serhii Hlodin <hlodin@lutsk.bank.gov.ua>
|
||||
|
@ -1834,6 +1834,15 @@ specifies the character set for the major languages of Western Europe."
|
||||
(let ((func (get-language-info language-name 'setup-function)))
|
||||
(if (functionp func)
|
||||
(funcall func)))
|
||||
(if (and utf-translate-cjk-mode
|
||||
utf-translate-cjk-lang-env
|
||||
(not (eq utf-translate-cjk-lang-env language-name))
|
||||
(catch 'tag
|
||||
(dolist (charset (get-language-info language-name 'charset))
|
||||
(if (memq charset utf-translate-cjk-charsets)
|
||||
(throw 'tag t)))
|
||||
nil))
|
||||
(utf-translate-cjk-load-tables))
|
||||
(run-hooks 'set-language-environment-hook)
|
||||
(force-mode-line-update t))
|
||||
|
||||
|
@ -316,8 +316,7 @@ Optional argument RESTRICTION specifies a way to map the pair of CCS
|
||||
and CODE-POINT to a character. Currently not supported and just ignored."
|
||||
(cond
|
||||
((eq ccs 'ucs)
|
||||
(or (gethash code-point
|
||||
(get 'utf-subst-table-for-decode 'translation-hash-table))
|
||||
(or (utf-lookup-subst-table-for-decode code-point)
|
||||
(let ((c (cond
|
||||
((< code-point 160)
|
||||
code-point)
|
||||
@ -361,8 +360,7 @@ code-point in CCS. Currently not supported and just ignored."
|
||||
(charset (car split))
|
||||
trans)
|
||||
(cond ((eq ccs 'ucs)
|
||||
(or (gethash char (get 'utf-subst-table-for-encode
|
||||
'translation-hash-table))
|
||||
(or (utf-lookup-subst-table-for-encode char)
|
||||
(let ((table (get 'utf-translation-table-for-encode
|
||||
'translation-table)))
|
||||
(setq trans (aref table char))
|
||||
|
@ -48,99 +48,110 @@
|
||||
;; things below, sometimes with commonality abstracted into a let
|
||||
;; binding for maintenance convenience.
|
||||
|
||||
;; We'd need new charsets distinct from ascii and eight-bit-control to
|
||||
;; deal with untranslated sequences, since we can't otherwise
|
||||
;; distinguish the bytes, as we can with utf-8.
|
||||
|
||||
;; ;; Do a multibyte write for bytes in r3 and r4.
|
||||
;; ;; Intended for untranslatable utf-16 sequences.
|
||||
;; (define-ccl-program ccl-mule-utf-16-untrans
|
||||
;; `(0
|
||||
;; (if (r3 < 128)
|
||||
;; (r0 = ,(charset-id 'ascii))
|
||||
;; (if (r3 < 160)
|
||||
;; (r0 = ,(charset-id 'eight-bit-control))
|
||||
;; (r0 = ,(charset-id 'eight-bit-graphic))))
|
||||
;; (if (r4 < 128)
|
||||
;; (r0 = ,(charset-id 'ascii))
|
||||
;; (if (r4 < 160)
|
||||
;; (r0 = ,(charset-id 'eight-bit-control))
|
||||
;; (r0 = ,(charset-id 'eight-bit-graphic))))
|
||||
;; (r1 = r4)))
|
||||
;; "Do a multibyte write for bytes in r3 and r4.
|
||||
;; First swap them if we're big endian, indicated by r5==0.
|
||||
;; Intended for untranslatable utf-16 sequences.")
|
||||
|
||||
;; Needed in macro expansion, so can't be let-bound. Zapped after use.
|
||||
(eval-and-compile
|
||||
(defconst utf-16-decode-ucs
|
||||
;; We have the unicode in r1. Output is charset ID in r0, code
|
||||
;; point in r1.
|
||||
`((lookup-integer utf-subst-table-for-decode r1 r3)
|
||||
(if r7 ; got a translation
|
||||
((r0 = r1) (r1 = r3))
|
||||
(if (r1 < 128)
|
||||
(r0 = ,(charset-id 'ascii))
|
||||
(if (r1 < 160)
|
||||
(r0 = ,(charset-id 'eight-bit-control))
|
||||
(if (r1 < 256)
|
||||
((r0 = ,(charset-id 'latin-iso8859-1))
|
||||
(r1 -= 128))
|
||||
(if (r1 < #x2500)
|
||||
((r0 = ,(charset-id 'mule-unicode-0100-24ff))
|
||||
(r1 -= #x100)
|
||||
(r2 = (((r1 / 96) + 32) << 7))
|
||||
(r1 %= 96)
|
||||
(r1 += (r2 + 32)))
|
||||
(if (r1 < #x3400)
|
||||
((r0 = ,(charset-id 'mule-unicode-2500-33ff))
|
||||
(r1 -= #x2500)
|
||||
(r2 = (((r1 / 96) + 32) << 7))
|
||||
(r1 %= 96)
|
||||
(r1 += (r2 + 32)))
|
||||
(if (r1 < #xd800) ; 2 untranslated bytes
|
||||
;; ;; Assume this is rare, so don't worry about the
|
||||
;; ;; overhead of the call.
|
||||
;; (call mule-utf-16-untrans)
|
||||
((r0 = ,(charset-id 'mule-unicode-e000-ffff))
|
||||
(r1 = 15037)) ; U+fffd
|
||||
(if (r1 < #xe000) ; surrogate
|
||||
;; ((call mule-utf-16-untrans)
|
||||
;; (write-multibyte-character r0 r1)
|
||||
;; (read r3 r4)
|
||||
;; (call mule-utf-16-untrans))
|
||||
((read r3 r4)
|
||||
(r0 = ,(charset-id 'mule-unicode-e000-ffff))
|
||||
(r1 = 15037))
|
||||
((r0 = ,(charset-id 'mule-unicode-e000-ffff))
|
||||
(r1 -= #xe000)
|
||||
(r2 = (((r1 / 96) + 32) << 7))
|
||||
(r1 %= 96)
|
||||
(r1 += (r2 + 32)))))))))))))
|
||||
;; If r5 is negative, r1 is a Unicode chacter code. Otherise, r5 is
|
||||
;; the first of a surrogate pair and r1 is the second of the pair.
|
||||
;; Output is charset ID in r0, code point in r1. R0 may be set to
|
||||
;; -1 in which case a caller should not write out r1.
|
||||
`((if (r5 >= 0)
|
||||
((r0 = (r1 < #xDC00))
|
||||
(if ((r1 >= #xE000) | r0)
|
||||
;; Invalid second code of surrogate pair.
|
||||
((r0 = r5)
|
||||
(call ccl-mule-utf-untrans))
|
||||
((r1 -= #xDC00)
|
||||
(r1 += (((r5 - #xD800) << 10) + #x10000))))
|
||||
(r5 = -1)))
|
||||
(if (r1 < 128)
|
||||
(r0 = ,(charset-id 'ascii))
|
||||
((lookup-integer utf-subst-table-for-decode r1 r3)
|
||||
(if r7 ; got a translation
|
||||
((r0 = r1) (r1 = r3))
|
||||
(if (r1 < 160)
|
||||
(r0 = ,(charset-id 'eight-bit-control))
|
||||
(if (r1 < 256)
|
||||
((r0 = ,(charset-id 'latin-iso8859-1))
|
||||
(r1 -= 128))
|
||||
(if (r1 < #x2500)
|
||||
((r0 = ,(charset-id 'mule-unicode-0100-24ff))
|
||||
(r1 -= #x100)
|
||||
(r2 = (((r1 / 96) + 32) << 7))
|
||||
(r1 %= 96)
|
||||
(r1 += (r2 + 32)))
|
||||
(if (r1 < #x3400)
|
||||
((r0 = ,(charset-id 'mule-unicode-2500-33ff))
|
||||
(r1 -= #x2500)
|
||||
(r2 = (((r1 / 96) + 32) << 7))
|
||||
(r1 %= 96)
|
||||
(r1 += (r2 + 32)))
|
||||
(if (r1 < #xD800)
|
||||
;; We can't have this character.
|
||||
((r0 = r1)
|
||||
(call ccl-mule-utf-untrans)
|
||||
(r5 = -1)
|
||||
(r0 = -1))
|
||||
(if (r1 < #xDC00)
|
||||
;; The first code of a surrogate pair.
|
||||
((r5 = r1)
|
||||
(r0 = -1))
|
||||
(if (r1 < #xE000)
|
||||
;; The second code of a surrogate pair, invalid.
|
||||
((r0 = r1)
|
||||
(call ccl-mule-utf-untrans)
|
||||
(r5 = -1)
|
||||
(r0 = -1))
|
||||
(if (r1 < #x10000)
|
||||
((r0 = ,(charset-id 'mule-unicode-e000-ffff))
|
||||
(r1 -= #xE000)
|
||||
(r2 = (((r1 / 96) + 32) << 7))
|
||||
(r1 %= 96)
|
||||
(r1 += (r2 + 32)))
|
||||
;; We can't have this character.
|
||||
((r0 = r1)
|
||||
(call ccl-mule-utf-untrans)
|
||||
(r5 = -1)
|
||||
(r0 = -1)))))))))))))))
|
||||
|
||||
(defconst utf-16le-decode-loop
|
||||
`(loop
|
||||
(read r3 r4)
|
||||
(r1 = (r4 <8 r3))
|
||||
,utf-16-decode-ucs
|
||||
(translate-character utf-translation-table-for-decode r0 r1)
|
||||
(write-multibyte-character r0 r1)
|
||||
(repeat)))
|
||||
`((r5 = -1)
|
||||
(loop
|
||||
(r3 = -1)
|
||||
(read r3 r4)
|
||||
(r1 = (r4 <8 r3))
|
||||
,@utf-16-decode-ucs
|
||||
(if (r0 >= 0)
|
||||
((translate-character utf-translation-table-for-decode r0 r1)
|
||||
(write-multibyte-character r0 r1)))
|
||||
(repeat))))
|
||||
|
||||
(defconst utf-16be-decode-loop
|
||||
`(loop
|
||||
(read r3 r4)
|
||||
(r1 = (r3 <8 r4))
|
||||
,@utf-16-decode-ucs
|
||||
(translate-character utf-translation-table-for-decode r0 r1)
|
||||
(write-multibyte-character r0 r1)
|
||||
(repeat)))
|
||||
`((r5 = -1)
|
||||
(loop
|
||||
(r3 = -1)
|
||||
(read r3 r4)
|
||||
(r1 = (r3 <8 r4))
|
||||
,@utf-16-decode-ucs
|
||||
(if (r0 >= 0)
|
||||
((translate-character utf-translation-table-for-decode r0 r1)
|
||||
(write-multibyte-character r0 r1)))
|
||||
(repeat))))
|
||||
|
||||
)
|
||||
|
||||
(define-ccl-program ccl-decode-mule-utf-16le
|
||||
`(2 ; 2 bytes -> 1 to 4 bytes
|
||||
,utf-16le-decode-loop)
|
||||
,utf-16le-decode-loop
|
||||
((if (r5 >= 0)
|
||||
((r0 = r5)
|
||||
(call ccl-mule-utf-untrans)))
|
||||
(if (r3 < 0)
|
||||
nil
|
||||
((if (r3 < #xA0)
|
||||
(r0 = ,(charset-id 'eight-bit-control))
|
||||
(r0 = ,(charset-id 'eight-bit-graphic)))
|
||||
(write-multibyte-character r0 r3)))))
|
||||
"Decode UTF-16LE (little endian without signature bytes).
|
||||
Basic decoding is done into the charsets ascii, latin-iso8859-1 and
|
||||
mule-unicode-*. Un-representable Unicode characters are decoded as
|
||||
@ -149,7 +160,13 @@ U+fffd. The result is run through the translation-table named
|
||||
|
||||
(define-ccl-program ccl-decode-mule-utf-16be
|
||||
`(2 ; 2 bytes -> 1 to 4 bytes
|
||||
,utf-16be-decode-loop)
|
||||
,utf-16be-decode-loop
|
||||
((if (r5 >= 0)
|
||||
((r0 = r5)
|
||||
(call ccl-mule-utf-untrans)))
|
||||
(if (r3 >= 0)
|
||||
((r0 = r3)
|
||||
(call ccl-mule-utf-untrans)))))
|
||||
"Decode UTF-16BE (big endian without signature bytes).
|
||||
Basic decoding is done into the charsets ascii, latin-iso8859-1 and
|
||||
mule-unicode-*. Un-representable Unicode characters are
|
||||
@ -158,91 +175,218 @@ name `utf-translation-table-for-decode'.")
|
||||
|
||||
(define-ccl-program ccl-decode-mule-utf-16le-with-signature
|
||||
`(2
|
||||
((read r3 r4)
|
||||
,utf-16le-decode-loop))
|
||||
((r3 = -1)
|
||||
(read r3 r4)
|
||||
,@utf-16le-decode-loop)
|
||||
(if (r3 >= 0)
|
||||
((r0 = r3)
|
||||
(call ccl-mule-utf-untrans))))
|
||||
"Like ccl-decode-utf-16le but skip the first 2-byte BOM.")
|
||||
|
||||
(define-ccl-program ccl-decode-mule-utf-16be-with-signature
|
||||
`(2
|
||||
((read r3 r4)
|
||||
,utf-16be-decode-loop))
|
||||
((r3 = -1)
|
||||
(read r3 r4)
|
||||
,@utf-16be-decode-loop)
|
||||
(if (r3 >= 0)
|
||||
((r0 = r3)
|
||||
(call ccl-mule-utf-untrans))))
|
||||
"Like ccl-decode-utf-16be but skip the first 2-byte BOM.")
|
||||
|
||||
(define-ccl-program ccl-decode-mule-utf-16
|
||||
`(2
|
||||
((read r3 r4)
|
||||
((r3 = -1)
|
||||
(read r3 r4)
|
||||
(r1 = (r3 <8 r4))
|
||||
(r5 = -1)
|
||||
(if (r1 == #xFFFE)
|
||||
;; R1 is a BOM for little endian. We keep this character as
|
||||
;; is temporarily. It is removed by post-read-conversion
|
||||
;; function.
|
||||
(,@utf-16-decode-ucs
|
||||
(write-multibyte-character r0 r1)
|
||||
,utf-16le-decode-loop)
|
||||
,@utf-16le-decode-loop)
|
||||
((if (r1 == #xFEFF)
|
||||
;; R1 is a BOM for big endian, but we can't keep that
|
||||
;; character in the output because it can't be
|
||||
;; distinguished with the normal U+FEFF. So, we keep
|
||||
;; #xFFFF instead.
|
||||
((r1 = #xFFFF)
|
||||
,@utf-16-decode-ucs)
|
||||
;; R1 a normal Unicode character.
|
||||
,@utf-16-decode-ucs
|
||||
(write-multibyte-character r0 r1))
|
||||
;; R1 is a normal Unicode character.
|
||||
(,@utf-16-decode-ucs
|
||||
(translate-character utf-translation-table-for-decode r0 r1)))
|
||||
(write-multibyte-character r0 r1)
|
||||
,utf-16be-decode-loop))))
|
||||
(if (r0 >= 0)
|
||||
((translate-character utf-translation-table-for-decode r0 r1)
|
||||
(write-multibyte-character r0 r1)))))
|
||||
,@utf-16be-decode-loop)))
|
||||
(if (r3 >= 0)
|
||||
((r0 = r3)
|
||||
(call ccl-mule-utf-untrans))))
|
||||
"Like ccl-decode-utf-16be/le but check the first BOM.")
|
||||
|
||||
(makunbound 'utf-16-decode-ucs) ; done with it
|
||||
(makunbound 'utf-16le-decode-loop)
|
||||
(makunbound 'utf-16be-decode-loop)
|
||||
|
||||
;; UTF-16 decoder generates an UTF-8 sequence represented by a
|
||||
;; sequence eight-bit-control/graphic chars for an invalid byte (the
|
||||
;; last byte of an odd length source) and an untranslatable character
|
||||
;; (including an invalid surrogate-pair code-point).
|
||||
;;
|
||||
;; This CCL parses that sequence (the first byte is already in r1),
|
||||
;; and if the sequence represents an untranslatable character, it sets
|
||||
;; r1 to the original invalid code or untranslated Unicode character
|
||||
;; code, sets r2 to -1 (to prevent r2 and r3 are written), set2 r5 to
|
||||
;; -1 (to tell the caller that there's no pre-read character).
|
||||
;;
|
||||
;; If the sequence represents an invalid byte, it sets r1 to -1, r2 to
|
||||
;; the byte, sets r3 and r5 to -1.
|
||||
;;
|
||||
;; Otherwise, don't change r1, set r2 and r3 to already read
|
||||
;; eight-bit-control/graphic characters (if any), set r5 and r6 to the
|
||||
;; last character that invalidates the UTF-8 form.
|
||||
;;
|
||||
;; Note: For UTF-8 validation, we only check if a character is
|
||||
;; eight-bit-control/graphic or not. It may result in incorrect
|
||||
;; handling of random binary data, but such a data can't be encoded by
|
||||
;; UTF-16 anyway. At least, UTF-16 decoder doesn't generate such a
|
||||
;; sequence even if a source contains invalid byte-sequence.
|
||||
|
||||
(define-ccl-program ccl-mule-utf-16-encode-untrans
|
||||
`(0
|
||||
((r2 = -1)
|
||||
;; Read the 2nd byte.
|
||||
(read-multibyte-character r5 r6)
|
||||
(r0 = (r5 != ,(charset-id 'eight-bit-control)))
|
||||
(if ((r5 != ,(charset-id 'eight-bit-graphic)) & r0)
|
||||
((r2 = r1)
|
||||
(r3 = -1)
|
||||
(r1 = -1)
|
||||
(end))) ; invalid UTF-8
|
||||
|
||||
(r3 = -1)
|
||||
(r2 = r6)
|
||||
(if (r1 <= #xE0)
|
||||
;; 2-byte UTF-8, i.e. originally an invalid byte.
|
||||
((r2 &= #x3F)
|
||||
(r2 |= ((r1 & #x1F) << 6))
|
||||
(r1 = -1)
|
||||
(r5 = -1)
|
||||
(end)))
|
||||
|
||||
;; Read the 3rd byte.
|
||||
(read-multibyte-character r5 r6)
|
||||
(r0 = (r5 != ,(charset-id 'eight-bit-control)))
|
||||
(if ((r5 != ,(charset-id 'eight-bit-graphic)) & r0)
|
||||
((end))) ; invalid UTF-8
|
||||
|
||||
(if (r1 < #xF0) ; valid 3-byte UTF-8
|
||||
((r1 = ((r1 & #x0F) << 12))
|
||||
(r1 |= ((r2 & #x3F) << 6))
|
||||
(r1 |= (r6 & #x3F))
|
||||
(r2 = -1)
|
||||
(r5 = -1)
|
||||
(end)))
|
||||
|
||||
(r3 = r6)
|
||||
;; Read the 4th byte.
|
||||
(read-multibyte-character r5 r6)
|
||||
(r0 = (r5 != ,(charset-id 'eight-bit-control)))
|
||||
(if ((r5 != ,(charset-id 'eight-bit-graphic)) & r0)
|
||||
(end)) ; livalid UTF-8
|
||||
|
||||
;; valid 4-byte UTF-8
|
||||
(r1 = ((r1 & #x07) << 18))
|
||||
(r1 |= ((r2 & #x3F) << 12))
|
||||
(r1 |= ((r3 & #x3F) << 6))
|
||||
(r1 |= (r6 & #x3F))
|
||||
(r2 = -1)
|
||||
(r5 = -1)
|
||||
(end))
|
||||
|
||||
(if (r1 >= 0)
|
||||
((write r1)
|
||||
(if (r2 >= 0)
|
||||
((write r2)
|
||||
(if (r3 >= 0)
|
||||
(write r3))))))))
|
||||
|
||||
(eval-and-compile
|
||||
(defconst utf-16-decode-to-ucs
|
||||
;; CCL which, given the result of a multibyte read in r0 and r1,
|
||||
;; sets r0 to the character's Unicode if the charset is one of the
|
||||
;; basic utf-8 coding system ones. Otherwise set to U+fffd.
|
||||
`(if (r0 == ,(charset-id 'ascii))
|
||||
(r0 = r1)
|
||||
(if (r0 == ,(charset-id 'latin-iso8859-1))
|
||||
(r0 = (r1 + 128))
|
||||
(if (r0 == ,(charset-id 'eight-bit-control))
|
||||
(r0 = r1)
|
||||
(if (r0 == ,(charset-id 'eight-bit-graphic))
|
||||
(r0 = r1)
|
||||
((r2 = (r1 & #x7f))
|
||||
(r1 >>= 7)
|
||||
(r3 = ((r1 - 32) * 96))
|
||||
(r3 += (r2 - 32))
|
||||
(if (r0 == ,(charset-id 'mule-unicode-0100-24ff))
|
||||
(r0 = (r3 + #x100))
|
||||
(if (r0 == ,(charset-id 'mule-unicode-2500-33ff))
|
||||
(r0 = (r3 + #x2500))
|
||||
(if (r0 == ,(charset-id 'mule-unicode-e000-ffff))
|
||||
(r0 = (r3 + #xe000))
|
||||
(r0 = #xfffd))))))))))
|
||||
;; Read a character and set r1 to the corresponding Unicode code.
|
||||
;; If r5 is not negative, it means that we have already read a
|
||||
;; character into r5 and r6.
|
||||
;; If an invalid eight-bit-control/graphic sequence is found, r2 and
|
||||
;; r3 may contain a byte to written out, r5 and r6 may contain a
|
||||
;; pre-read character. Usually they are set to -1.
|
||||
`((if (r5 < 0)
|
||||
(read-multibyte-character r0 r1)
|
||||
((r0 = r5)
|
||||
(r1 = r6)
|
||||
(r5 = -1)))
|
||||
(lookup-character utf-subst-table-for-encode r0 r1)
|
||||
(r2 = -1)
|
||||
(if (r7 > 0)
|
||||
(r1 = r0)
|
||||
((translate-character utf-translation-table-for-encode r0 r1)
|
||||
(if (r0 == ,(charset-id 'ascii))
|
||||
nil
|
||||
(if (r0 == ,(charset-id 'latin-iso8859-1))
|
||||
(r1 += 128)
|
||||
(if (r0 == ,(charset-id 'eight-bit-control))
|
||||
nil
|
||||
(if (r0 == ,(charset-id 'eight-bit-graphic))
|
||||
(call ccl-mule-utf-16-encode-untrans)
|
||||
((r2 = ((r1 & #x7f) - 32))
|
||||
(r3 = ((((r1 >> 7) - 32) * 96) + r2))
|
||||
(r2 = -1)
|
||||
(r5 = -1)
|
||||
(if (r0 == ,(charset-id 'mule-unicode-0100-24ff))
|
||||
(r1 = (r3 + #x100))
|
||||
(if (r0 == ,(charset-id 'mule-unicode-2500-33ff))
|
||||
(r1 = (r3 + #x2500))
|
||||
(if (r0 == ,(charset-id 'mule-unicode-e000-ffff))
|
||||
(r1 = (r3 + #xe000))
|
||||
(r1 = #xfffd)))))))))))))
|
||||
|
||||
(defconst utf-16le-encode-loop
|
||||
`(loop
|
||||
(read-multibyte-character r0 r1)
|
||||
(lookup-character utf-subst-table-for-encode r0 r1)
|
||||
(if (r7 == 0)
|
||||
((translate-character utf-translation-table-for-encode r0 r1)
|
||||
,utf-16-decode-to-ucs))
|
||||
(write (r0 & 255))
|
||||
(write (r0 >> 8))
|
||||
(repeat)))
|
||||
`((r5 = -1)
|
||||
(loop
|
||||
,@utf-16-decode-to-ucs
|
||||
(if (r1 >= #x10000)
|
||||
((r1 -= #x10000)
|
||||
(r0 = ((r1 >> 10) + #xD800))
|
||||
(write (r0 & 255))
|
||||
(write (r0 >> 8))
|
||||
(r1 = ((r1 & #x3FF) + #xDC00))))
|
||||
(if (r1 >= 0)
|
||||
((write (r1 & 255))
|
||||
(write (r1 >> 8))))
|
||||
(if (r2 >= 0)
|
||||
((write r2)
|
||||
(if (r3 >= 0)
|
||||
(write r3))))
|
||||
(repeat))))
|
||||
|
||||
(defconst utf-16be-encode-loop
|
||||
`(loop
|
||||
(read-multibyte-character r0 r1)
|
||||
(lookup-character utf-subst-table-for-encode r0 r1)
|
||||
(if (r7 == 0)
|
||||
((translate-character utf-translation-table-for-encode r0 r1)
|
||||
,utf-16-decode-to-ucs))
|
||||
(write (r0 >> 8))
|
||||
(write (r0 & 255))
|
||||
(repeat)))
|
||||
`((r5 = -1)
|
||||
(loop
|
||||
,@utf-16-decode-to-ucs
|
||||
(if (r1 >= #x10000)
|
||||
((r1 -= #x10000)
|
||||
(r0 = ((r1 >> 10) + #xD800))
|
||||
(write (r0 >> 8))
|
||||
(write (r0 & 255))
|
||||
(r1 = ((r1 & #x3FF) + #xDC00))))
|
||||
(if (r1 >= 0)
|
||||
((write (r1 >> 8))
|
||||
(write (r1 & 255))))
|
||||
(if (r2 >= 0)
|
||||
((write r2)
|
||||
(if (r3 >= 0)
|
||||
(write r3))))
|
||||
(repeat))))
|
||||
)
|
||||
|
||||
|
||||
@ -270,7 +414,7 @@ Others are encoded as U+FFFD.")
|
||||
`(1
|
||||
((write #xFF)
|
||||
(write #xFE)
|
||||
,utf-16le-encode-loop))
|
||||
,@utf-16le-encode-loop))
|
||||
"Encode to UTF-16 (little endian with signature).
|
||||
Characters from the charsets ascii, eight-bit-control,
|
||||
eight-bit-graphic, latin-iso8859-1 and mule-unicode-* are encoded
|
||||
@ -282,7 +426,7 @@ Others are encoded as U+FFFD.")
|
||||
`(1
|
||||
((write #xFE)
|
||||
(write #xFF)
|
||||
,utf-16be-encode-loop))
|
||||
,@utf-16be-encode-loop))
|
||||
"Encode to UTF-16 (big endian with signature).
|
||||
Characters from the charsets ascii, eight-bit-control,
|
||||
eight-bit-graphic, latin-iso8859-1 and mule-unicode-* are encoded
|
||||
@ -296,6 +440,7 @@ Others are encoded as U+FFFD.")
|
||||
|
||||
(defun mule-utf-16-post-read-conversion (length)
|
||||
(when (> length 0)
|
||||
(setq length (utf-8-post-read-conversion length))
|
||||
(let ((char (following-char)))
|
||||
(cond ((= char (decode-char 'ucs #xFFFE))
|
||||
(delete-char 1)
|
||||
@ -329,29 +474,34 @@ if they are re-encoded.
|
||||
|
||||
On encoding (e.g. writing a file), Emacs characters not belonging to
|
||||
any of the character sets listed above are encoded into the byte
|
||||
sequence representing U+FFFD (REPLACEMENT CHARACTER)."))
|
||||
sequence representing U+FFFD (REPLACEMENT CHARACTER).")
|
||||
(props `((safe-charsets
|
||||
ascii
|
||||
eight-bit-control
|
||||
eight-bit-graphic
|
||||
latin-iso8859-1
|
||||
mule-unicode-0100-24ff
|
||||
mule-unicode-2500-33ff
|
||||
mule-unicode-e000-ffff
|
||||
,@(if utf-translate-cjk-mode
|
||||
utf-translate-cjk-charsets))
|
||||
(valid-codes (0 . 255))
|
||||
(mime-text-unsuitable . t)
|
||||
(pre-write-conversion . utf-8-pre-write-conversion)
|
||||
(dependency unify-8859-on-encoding-mode
|
||||
unify-8859-on-decoding-mode
|
||||
utf-fragment-on-decoding
|
||||
utf-translate-cjk-mode))))
|
||||
(make-coding-system
|
||||
'mule-utf-16le 4
|
||||
?u ; Mule-UCS uses ?U, but code-pages uses that for koi8-u.
|
||||
(concat
|
||||
"UTF-16LE encoding for Emacs-supported Unicode characters."
|
||||
doc)
|
||||
|
||||
'(ccl-decode-mule-utf-16le . ccl-encode-mule-utf-16le)
|
||||
'((safe-charsets
|
||||
ascii
|
||||
eight-bit-control
|
||||
latin-iso8859-1
|
||||
mule-unicode-0100-24ff
|
||||
mule-unicode-2500-33ff
|
||||
mule-unicode-e000-ffff)
|
||||
(mime-charset . utf-16le)
|
||||
(mime-text-unsuitable . t)
|
||||
(valid-codes (0 . 255))
|
||||
(dependency unify-8859-on-encoding-mode
|
||||
unify-8859-on-decoding-mode
|
||||
utf-fragment-on-decoding
|
||||
utf-translate-cjk-mode)))
|
||||
`(,@props
|
||||
(post-read-conversion . utf-8-post-read-conversion)
|
||||
(mime-charset . utf-16le)))
|
||||
|
||||
(make-coding-system
|
||||
'mule-utf-16be 4 ?u
|
||||
@ -360,19 +510,9 @@ sequence representing U+FFFD (REPLACEMENT CHARACTER)."))
|
||||
doc)
|
||||
|
||||
'(ccl-decode-mule-utf-16be . ccl-encode-mule-utf-16be)
|
||||
'((safe-charsets
|
||||
ascii
|
||||
eight-bit-control
|
||||
latin-iso8859-1
|
||||
mule-unicode-0100-24ff
|
||||
mule-unicode-2500-33ff
|
||||
mule-unicode-e000-ffff)
|
||||
(mime-charset . utf-16be)
|
||||
(valid-codes (0 . 255))
|
||||
(dependency unify-8859-on-encoding-mode
|
||||
unify-8859-on-decoding-mode
|
||||
utf-fragment-on-decoding
|
||||
utf-translate-cjk-mode)))
|
||||
`(,@props
|
||||
(post-read-conversion . utf-8-post-read-conversion)
|
||||
(mime-charset . utf-16be)))
|
||||
|
||||
(make-coding-system
|
||||
'mule-utf-16le-with-signature 4 ?u
|
||||
@ -382,21 +522,10 @@ sequence representing U+FFFD (REPLACEMENT CHARACTER)."))
|
||||
|
||||
'(ccl-decode-mule-utf-16le-with-signature
|
||||
. ccl-encode-mule-utf-16le-with-signature)
|
||||
'((safe-charsets
|
||||
ascii
|
||||
eight-bit-control
|
||||
latin-iso8859-1
|
||||
mule-unicode-0100-24ff
|
||||
mule-unicode-2500-33ff
|
||||
mule-unicode-e000-ffff)
|
||||
`(,@props
|
||||
(post-read-conversion . utf-8-post-read-conversion)
|
||||
(coding-category . coding-category-utf-16-le)
|
||||
(mime-charset . utf-16)
|
||||
(mime-text-unsuitable . t)
|
||||
(valid-codes (0 . 255))
|
||||
(dependency unify-8859-on-encoding-mode
|
||||
unify-8859-on-decoding-mode
|
||||
utf-fragment-on-decoding
|
||||
utf-translate-cjk-mode)))
|
||||
(mime-charset . utf-16)))
|
||||
|
||||
(make-coding-system
|
||||
'mule-utf-16be-with-signature 4 ?u
|
||||
@ -406,20 +535,10 @@ sequence representing U+FFFD (REPLACEMENT CHARACTER)."))
|
||||
|
||||
'(ccl-decode-mule-utf-16be-with-signature
|
||||
. ccl-encode-mule-utf-16be-with-signature)
|
||||
'((safe-charsets
|
||||
ascii
|
||||
eight-bit-control
|
||||
latin-iso8859-1
|
||||
mule-unicode-0100-24ff
|
||||
mule-unicode-2500-33ff
|
||||
mule-unicode-e000-ffff)
|
||||
`(,@props
|
||||
(post-read-conversion . utf-8-post-read-conversion)
|
||||
(coding-category . coding-category-utf-16-be)
|
||||
(mime-charset . utf-16)
|
||||
(valid-codes (0 . 255))
|
||||
(dependency unify-8859-on-encoding-mode
|
||||
unify-8859-on-decoding-mode
|
||||
utf-fragment-on-decoding
|
||||
utf-translate-cjk-mode)))
|
||||
(mime-charset . utf-16)))
|
||||
|
||||
(make-coding-system
|
||||
'mule-utf-16 4 ?u
|
||||
@ -428,22 +547,10 @@ sequence representing U+FFFD (REPLACEMENT CHARACTER)."))
|
||||
doc)
|
||||
|
||||
'(ccl-decode-mule-utf-16 . ccl-encode-mule-utf-16be-with-signature)
|
||||
'((safe-charsets
|
||||
ascii
|
||||
eight-bit-control
|
||||
latin-iso8859-1
|
||||
mule-unicode-0100-24ff
|
||||
mule-unicode-2500-33ff
|
||||
mule-unicode-e000-ffff)
|
||||
`(,@props
|
||||
(post-read-conversion . mule-utf-16-post-read-conversion)
|
||||
(coding-category . coding-category-utf-16-be)
|
||||
(mime-charset . utf-16)
|
||||
(mime-text-unsuitable . t)
|
||||
(valid-codes (0 . 255))
|
||||
(dependency unify-8859-on-encoding-mode
|
||||
unify-8859-on-decoding-mode
|
||||
utf-fragment-on-decoding
|
||||
utf-translate-cjk-mode)
|
||||
(post-read-conversion . mule-utf-16-post-read-conversion)))
|
||||
(mime-charset . utf-16)))
|
||||
)
|
||||
|
||||
(define-coding-system-alias 'utf-16le 'mule-utf-16le)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -60,6 +60,7 @@
|
||||
"\\)")
|
||||
"Regexp matching a composable sequence of Devanagari characters.")
|
||||
|
||||
;;;###autoload
|
||||
(defun devanagari-compose-region (from to)
|
||||
(interactive "r")
|
||||
(save-excursion
|
||||
|
@ -323,7 +323,8 @@ BOS non-nil means point is known to be at beginning of statement."
|
||||
line-end))
|
||||
(save-excursion (python-end-of-statement))
|
||||
t)
|
||||
(not (python-in-string/comment)))))
|
||||
(not (progn (goto-char (match-beginning 0))
|
||||
(python-in-string/comment))))))
|
||||
|
||||
(defun python-close-block-statement-p (&optional bos)
|
||||
"Return non-nil if current line is a statement closing a block.
|
||||
|
@ -953,7 +953,8 @@ See also `minibuffer-history-case-insensitive-variables'."
|
||||
nil
|
||||
minibuffer-local-map
|
||||
nil
|
||||
'minibuffer-history-search-history)))
|
||||
'minibuffer-history-search-history
|
||||
(car minibuffer-history-search-history))))
|
||||
;; Use the last regexp specified, by default, if input is empty.
|
||||
(list (if (string= regexp "")
|
||||
(if minibuffer-history-search-history
|
||||
|
@ -171,7 +171,7 @@ followed by two spaces, unless it's inside some sort of quotes or
|
||||
parenthesis. See Info node `Sentences'."
|
||||
(or sentence-end
|
||||
(concat (if sentence-end-without-period "\\w \\|")
|
||||
"\\([.?!][]\"'\xd0c9)}]*"
|
||||
"\\([.?!][]\"'\xd0c9\x5397d)}]*"
|
||||
(if sentence-end-double-space
|
||||
"\\($\\| $\\|\t\\| \\)" "\\($\\|[\t ]\\)")
|
||||
"\\|[" sentence-end-without-space "]+\\)"
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; Maintainer's Time-stamp: <2003-02-01 09:26:25 gildea>
|
||||
;; Maintainer's Time-stamp: <2004-06-13 19:04:36 teirllm>
|
||||
;; Maintainer: Stephen Gildea <gildea@stop.mail-abuse.org>
|
||||
;; Keywords: tools
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
;; See the top of `time-stamp.el' for another example.
|
||||
|
||||
;; To use time-stamping, add this line to your .emacs file:
|
||||
;; (add-hook 'write-file-hooks 'time-stamp)
|
||||
;; (add-hook 'before-save-hook 'time-stamp)
|
||||
;; Now any time-stamp templates in your files will be updated automatically.
|
||||
|
||||
;; See the documentation for the functions `time-stamp'
|
||||
@ -242,7 +242,8 @@ of the time-stamped file itself.")
|
||||
"Update the time stamp string(s) in the buffer.
|
||||
A template in a file can be automatically updated with a new time stamp
|
||||
every time you save the file. Add this line to your .emacs file:
|
||||
(add-hook 'write-file-hooks 'time-stamp)
|
||||
(add-hook 'before-save-hook 'time-stamp)
|
||||
or customize `before-save-hook' through Custom.
|
||||
Normally the template must appear in the first 8 lines of a file and
|
||||
look like one of the following:
|
||||
Time-stamp: <>
|
||||
@ -318,7 +319,6 @@ template."
|
||||
(setq start (time-stamp-once start search-limit ts-start ts-end
|
||||
ts-format format-lines end-lines))
|
||||
(setq ts-count (1- ts-count))))
|
||||
;; be sure to return nil so can be used on write-file-hooks
|
||||
nil)
|
||||
|
||||
(defun time-stamp-once (start search-limit ts-start ts-end
|
||||
|
4
lispref/.arch-inventory
Normal file
4
lispref/.arch-inventory
Normal file
@ -0,0 +1,4 @@
|
||||
# Generated files
|
||||
precious ^(config\.status|config\.cache)$
|
||||
|
||||
# arch-tag: dde817a2-94ff-4c6e-838c-bb5b33e7f0df
|
@ -1,3 +1,22 @@
|
||||
2004-06-13 Luc Teirlinck <teirllm@auburn.edu>
|
||||
|
||||
* autotype.texi (Copyrights, Timestamps): Recommend
|
||||
`before-save-hook' instead of `write-file-functions'.
|
||||
|
||||
2004-06-13 Richard M. Stallman <rms@gnu.org>
|
||||
|
||||
* custom.texi (Init Syntax): Explain about vars that do special
|
||||
things when set with setq or with Custom.
|
||||
(Init Examples): Add line-number-mode example.
|
||||
|
||||
2004-06-13 Lars Hansen <larsh@math.ku.dk>
|
||||
|
||||
* dired-x.texi (dired-mark-omitted): Update keybinding.
|
||||
|
||||
2004-06-12 Juri Linkov <juri@jurta.org>
|
||||
|
||||
* dired.texi (Operating on Files): Add dired-do-touch.
|
||||
|
||||
2004-06-10 Kim F. Storm <storm@cua.dk>
|
||||
|
||||
* pcl-cvs.texi (Viewing differences): Add 'd y'.
|
||||
|
@ -456,16 +456,19 @@ wrong version of the GNU General Public License (@pxref{(emacs)Copying}) is foun
|
||||
that is updated too.
|
||||
|
||||
An interesting application for this function is to have it be called
|
||||
automatically every time a file is saved. This is accomplished by putting
|
||||
@code{(add-hook 'write-file-functions 'copyright-update)} into your @file{~/.emacs}
|
||||
file (@pxref{(emacs)Init File}).
|
||||
automatically every time a file is saved. This is accomplished by
|
||||
putting @code{(add-hook 'before-save-hook 'copyright-update)} into
|
||||
your @file{~/.emacs} file (@pxref{(emacs)Init File}). Alternative,
|
||||
you can do @kbd{M-x customize-variable @key{RET} before-save-hook
|
||||
@key{RET}}. @code{copyright-update} is conveniently listed as an
|
||||
option in the customization buffer.
|
||||
|
||||
@vindex copyright-query
|
||||
The variable @code{copyright-query} controls whether to update the
|
||||
copyright or whether to ask about it. When this is @code{nil} updating is
|
||||
only done with @kbd{M-x copyright-update}. When this is @code{function}
|
||||
you are queried whenever @code{copyright-update} is called as a function,
|
||||
such as in the @code{write-file-functions} feature mentioned above. Otherwise
|
||||
such as in the @code{before-save-hook} feature mentioned above. Otherwise
|
||||
you are always queried.
|
||||
|
||||
|
||||
@ -522,11 +525,13 @@ The ``interpreter'' used is @code{executable-self-display} with argument
|
||||
@cindex timestamps
|
||||
|
||||
@findex time-stamp
|
||||
@vindex write-file-functions
|
||||
@vindex before-save-hook
|
||||
The @code{time-stamp} command can be used to update automatically a
|
||||
template in a file with a new time stamp every time you save the file.
|
||||
Customize the hook @code{write-file-functions} to add the function
|
||||
@code{time-stamp} to arrange this.
|
||||
Customize the hook @code{before-save-hook} to add the function
|
||||
@code{time-stamp} to arrange this. It you use Custom to do this,
|
||||
then @code{time-stamp} is conveniently listed as an option in the
|
||||
customization buffer.
|
||||
|
||||
@vindex time-stamp-active
|
||||
@vindex time-stamp-format
|
||||
|
@ -1984,9 +1984,20 @@ arguments, all surrounded by parentheses. For example, @code{(setq
|
||||
fill-column 60)} calls the function @code{setq} to set the variable
|
||||
@code{fill-column} (@pxref{Filling}) to 60.
|
||||
|
||||
The second argument to @code{setq} is an expression for the new value of
|
||||
the variable. This can be a constant, a variable, or a function call
|
||||
expression. In @file{.emacs}, constants are used most of the time. They can be:
|
||||
You can set any Lisp variable with @code{setq}, but with certain
|
||||
variables @code{setq} won't do what you probably want in the
|
||||
@file{.emacs} file. Some variables automatically become buffer-local
|
||||
when set with @code{setq}; what you want in @file{.emacs} is to set
|
||||
the default value, using @code{setq-default}. Some customizable minor
|
||||
mode variables do special things to enable the mode when you set them
|
||||
with Customize, but ordinary @code{setq} won't do that; to enable the
|
||||
mode in your @file{.emacs} file, call the minor mode command. The
|
||||
following section has examples of both of these methods.
|
||||
|
||||
The second argument to @code{setq} is an expression for the new
|
||||
value of the variable. This can be a constant, a variable, or a
|
||||
function call expression. In @file{.emacs}, constants are used most
|
||||
of the time. They can be:
|
||||
|
||||
@table @asis
|
||||
@item Numbers:
|
||||
@ -2106,6 +2117,14 @@ which supports most of the languages of Western Europe.
|
||||
(set-language-environment "Latin-1")
|
||||
@end example
|
||||
|
||||
@need 1500
|
||||
@item
|
||||
Turn off Line Number mode, a global minor mode.
|
||||
|
||||
@example
|
||||
(line-number-mode 0)
|
||||
@end example
|
||||
|
||||
@need 1500
|
||||
@item
|
||||
Turn on Auto Fill mode automatically in Text mode and related modes.
|
||||
|
@ -397,8 +397,8 @@ Marked files are never omitted.
|
||||
@findex dired-omit-mode
|
||||
(@code{dired-omit-mode}) Toggle between displaying and omitting
|
||||
``uninteresting'' files.
|
||||
@item M-O
|
||||
@kindex M-O
|
||||
@item * O
|
||||
@kindex * O
|
||||
@findex dired-mark-omitted
|
||||
(@code{dired-mark-omitted}) Mark ``uninteresting'' files.
|
||||
@end table
|
||||
|
@ -589,6 +589,12 @@ The variable @code{dired-chown-program} specifies the name of the
|
||||
program to use to do the work (different systems put @code{chown} in
|
||||
different places).
|
||||
|
||||
@findex dired-do-touch
|
||||
@kindex T @r{(Dired)}
|
||||
@cindex changing file time (in Dired)
|
||||
@item T @var{timestamp} @key{RET}
|
||||
Change the time of the specified files (@code{dired-do-touch}).
|
||||
|
||||
@findex dired-do-print
|
||||
@kindex P @r{(Dired)}
|
||||
@cindex printing files (in Dired)
|
||||
|
@ -65,7 +65,6 @@ and you can select it by typing @kbd{M-x @var{l}-mode @key{RET}}.
|
||||
|
||||
@cindex Perl mode
|
||||
@cindex Icon mode
|
||||
@cindex Awk mode
|
||||
@cindex Makefile mode
|
||||
@cindex Tcl mode
|
||||
@cindex CPerl mode
|
||||
@ -82,7 +81,7 @@ and you can select it by typing @kbd{M-x @var{l}-mode @key{RET}}.
|
||||
@cindex PostScript mode
|
||||
The existing programming language major modes include Lisp, Scheme (a
|
||||
variant of Lisp) and the Scheme-based DSSSL expression language, Ada,
|
||||
Awk, C, C++, Delphi (Object Pascal), Fortran (free format and fixed
|
||||
AWK, C, C++, Delphi (Object Pascal), Fortran (free format and fixed
|
||||
format), Icon, IDL (CORBA), IDLWAVE, Java, Metafont (@TeX{}'s
|
||||
companion for font creation), Modula2, Objective-C, Octave, Pascal,
|
||||
Perl, Pike, PostScript, Prolog, Simula, Tcl, and VHDL. There is
|
||||
@ -104,7 +103,7 @@ whitespace consists of spaces or tabs. Use @kbd{C-b C-d} to delete a
|
||||
tab character before point, in these modes.
|
||||
|
||||
Separate manuals are available for the modes for Ada (@pxref{Top, , Ada
|
||||
Mode, ada-mode, Ada Mode}), C/C++/Objective C/Java/Corba IDL
|
||||
Mode, ada-mode, Ada Mode}), C/C++/Objective C/Java/Corba IDL/Pike/AWK
|
||||
(@pxref{Top, , CC Mode, ccmode, CC Mode}) and the IDLWAVE modes
|
||||
(@pxref{Top, , IDLWAVE, idlwave, IDLWAVE User Manual}).
|
||||
|
||||
@ -446,15 +445,16 @@ modes and C and related modes.) @key{TAB} with a numeric argument
|
||||
reindents the current line as usual, then reindents by the same amount
|
||||
all the lines in the parenthetical grouping starting on the current
|
||||
line. It is clever, though, and does not alter lines that start
|
||||
inside strings, or C preprocessor lines when in C mode.
|
||||
inside strings. Neither does it alter C preprocessor lines when in C
|
||||
mode, but it does reindent any continuation lines that may be attached
|
||||
to them.
|
||||
|
||||
@findex indent-code-rigidly
|
||||
You can also perform this operation on the region, using the command
|
||||
@kbd{M-x indent-code-rigidly}. It rigidly shifts all the lines in the
|
||||
region sideways, like @code{indent-rigidly} does (@pxref{Indentation
|
||||
Commands}). It doesn't alter the indentation of lines that start
|
||||
inside a comment or a string, unless the region starts inside that
|
||||
comment or string.
|
||||
inside a string, unless the region also starts inside that string.
|
||||
|
||||
@node Lisp Indent
|
||||
@subsection Customizing Lisp Indentation
|
||||
@ -507,14 +507,15 @@ declaration (@code{c-indent-defun}).
|
||||
@kindex C-M-q @r{(C mode)}
|
||||
@findex c-indent-exp
|
||||
Reindent each line in the balanced expression that follows point
|
||||
(@code{c-indent-exp}). A prefix argument inhibits error checking and
|
||||
warning messages about invalid syntax.
|
||||
(@code{c-indent-exp}). A prefix argument inhibits warning messages
|
||||
about invalid syntax.
|
||||
|
||||
@item @key{TAB}
|
||||
@findex c-indent-command
|
||||
Reindent the current line, and/or in some cases insert a tab character
|
||||
(@code{c-indent-command}).
|
||||
|
||||
@vindex c-tab-always-indent
|
||||
If @code{c-tab-always-indent} is @code{t}, this command always reindents
|
||||
the current line and does nothing else. This is the default.
|
||||
|
||||
@ -524,8 +525,7 @@ otherwise, it inserts a tab (or the equivalent number of spaces,
|
||||
if @code{indent-tabs-mode} is @code{nil}).
|
||||
|
||||
Any other value (not @code{nil} or @code{t}) means always reindent the
|
||||
line, and also insert a tab if within a comment, a string, or a
|
||||
preprocessor directive.
|
||||
line, and also insert a tab if within a comment or a string.
|
||||
@end table
|
||||
|
||||
To reindent the whole current buffer, type @kbd{C-x h C-M-\}. This
|
||||
@ -539,18 +539,19 @@ to the front of the block and then reindents it all.
|
||||
@subsection Customizing C Indentation
|
||||
@cindex style (for indentation)
|
||||
|
||||
C mode and related modes use a simple yet flexible mechanism for
|
||||
customizing indentation. The mechanism works in two steps: first it
|
||||
classifies the line syntactically according to its contents and context;
|
||||
second, it associates each kind of syntactic construct with an
|
||||
indentation offset based on your selected @dfn{style}.
|
||||
C mode and related modes use a flexible mechanism for customizing
|
||||
indentation. C mode indents a source line in two steps: first it
|
||||
classifies the line syntactically according to its contents and
|
||||
context; second, it determines the indentation offset associated by
|
||||
your selected @dfn{style} with the syntactic construct and adds this
|
||||
onto the indentation of the @dfn{anchor statement}.
|
||||
|
||||
@table @kbd
|
||||
@item M-x c-set-style @key{RET} @var{style} @key{RET}
|
||||
Select predefined indentation style @var{style}.
|
||||
@item C-c . @key{RET} @var{style} @key{RET}
|
||||
Select a predefined style @var{style} (@code{c-set-style}).
|
||||
@end table
|
||||
|
||||
A style is a named collection of indentation customizations that can
|
||||
A @dfn{style} is a named collection of customizations that can
|
||||
be used in C mode and the related modes. Emacs comes with several
|
||||
predefined styles, including @code{gnu}, @code{k&r}, @code{bsd},
|
||||
@code{stroustrup}, @code{linux}, @code{python}, @code{java},
|
||||
@ -561,19 +562,21 @@ modes. To find out what a style looks like, select it and reindent
|
||||
some code, e.g., by typing @key{C-M-q} at the start of a function
|
||||
definition.
|
||||
|
||||
@kindex C-c . @r{(C mode)}
|
||||
@findex c-set-style
|
||||
To choose a style for the current buffer, use the command @kbd{M-x
|
||||
c-set-style}. Specify a style name as an argument (case is not
|
||||
significant). This command affects the current buffer only, and it
|
||||
affects only future invocations of the indentation commands; it does
|
||||
not reindent the code in the buffer. To reindent the whole buffer in
|
||||
the new style, you can type @kbd{C-x h C-M-\}.
|
||||
To choose a style for the current buffer, use the command @kbd{C-c
|
||||
.}. Specify a style name as an argument (case is not significant).
|
||||
This command affects the current buffer only, and it affects only
|
||||
future invocations of the indentation commands; it does not reindent
|
||||
the code in the buffer. To reindent the whole buffer in the new
|
||||
style, you can type @kbd{C-x h C-M-\}.
|
||||
|
||||
@vindex c-default-style
|
||||
You can also set the variable @code{c-default-style} to specify the
|
||||
default style for various major modes. Its value should be an alist,
|
||||
in which each element specifies one major mode and which indentation
|
||||
style to use for it. For example,
|
||||
default style for various major modes. Its value should be either the
|
||||
style's name (a string) or an alist, in which each element specifies
|
||||
one major mode and which indentation style to use for it. For
|
||||
example,
|
||||
|
||||
@example
|
||||
(setq c-default-style
|
||||
@ -848,18 +851,20 @@ also do spell checking on comments with Flyspell Prog mode
|
||||
The comment commands in this table insert, kill and align comments.
|
||||
They are described in this section and following sections.
|
||||
|
||||
@table @kbd
|
||||
@item M-;
|
||||
@table @asis
|
||||
@item @kbd{M-;}
|
||||
Insert or realign comment on current line; alternatively, comment or
|
||||
uncomment the region (@code{comment-dwim}).
|
||||
@item C-u M-;
|
||||
@item @kbd{C-u M-;}
|
||||
Kill comment on current line (@code{comment-kill}).
|
||||
@item C-x ;
|
||||
@item @kbd{C-x ;}
|
||||
Set comment column (@code{comment-set-column}).
|
||||
@item C-M-j
|
||||
@item @kbd{C-M-j}
|
||||
@itemx @kbd{M-j}
|
||||
Like @key{RET} followed by inserting and aligning a comment
|
||||
(@code{comment-indent-new-line}).
|
||||
@item M-x comment-region
|
||||
@item @kbd{M-x comment-region}
|
||||
@itemx @kbd{C-c C-c} (in C-like modes)
|
||||
Add or remove comment delimiters on all the lines in the region.
|
||||
@end table
|
||||
|
||||
@ -937,17 +942,20 @@ is indented like a line of code.
|
||||
@subsection Multiple Lines of Comments
|
||||
|
||||
@kindex C-M-j
|
||||
@kindex M-j
|
||||
@cindex blank lines in programs
|
||||
@findex comment-indent-new-line
|
||||
If you are typing a comment and wish to continue it on another line,
|
||||
you can use the command @kbd{C-M-j} (@code{comment-indent-new-line}).
|
||||
This terminates the comment you are typing, creates a new blank line
|
||||
afterward, and begins a new comment indented under the old one. When
|
||||
Auto Fill mode is on, going past the fill column while typing a comment
|
||||
causes the comment to be continued in just this fashion. If point is
|
||||
not at the end of the line when @kbd{C-M-j} is typed, the text on
|
||||
the rest of the line becomes part of the new comment line.
|
||||
you can use the command @kbd{C-M-j} or @kbd{M-j}
|
||||
(@code{comment-indent-new-line}). This terminates the comment you are
|
||||
typing, creates a new blank line afterward, and begins a new comment
|
||||
indented under the old one. When Auto Fill mode is on, going past the
|
||||
fill column while typing a comment causes the comment to be continued
|
||||
in just this fashion. If point is not at the end of the line when you
|
||||
type the command, the text on the rest of the line becomes part of the
|
||||
new comment line.
|
||||
|
||||
@kindex C-c C-c (C mode)
|
||||
@findex comment-region
|
||||
To turn existing lines into comment lines, use the @kbd{M-x
|
||||
comment-region} command. It adds comment delimiters to the lines that start
|
||||
@ -970,12 +978,13 @@ if within a defun, it must be three.
|
||||
@vindex comment-column
|
||||
@kindex C-x ;
|
||||
@findex comment-set-column
|
||||
The comment column is stored in the variable @code{comment-column}. You
|
||||
can set it to a number explicitly. Alternatively, the command @kbd{C-x ;}
|
||||
(@code{comment-set-column}) sets the comment column to the column point is
|
||||
at. @kbd{C-u C-x ;} sets the comment column to match the last comment
|
||||
before point in the buffer, and then does a @kbd{M-;} to align the
|
||||
current line's comment under the previous one.
|
||||
The @dfn{comment column}, the column at which Emacs tries to place
|
||||
comments, is stored in the variable @code{comment-column}. You can
|
||||
set it to a number explicitly. Alternatively, the command @kbd{C-x ;}
|
||||
(@code{comment-set-column}) sets the comment column to the column
|
||||
point is at. @kbd{C-u C-x ;} sets the comment column to match the
|
||||
last comment before point in the buffer, and then does a @kbd{M-;} to
|
||||
align the current line's comment under the previous one.
|
||||
|
||||
The variable @code{comment-column} is per-buffer: setting the variable
|
||||
in the normal fashion affects only the current buffer, but there is a
|
||||
@ -990,7 +999,7 @@ Make sure this regexp does not match the null string. It may match more
|
||||
than the comment starting delimiter in the strictest sense of the word;
|
||||
for example, in C mode the value of the variable is
|
||||
@c This stops M-q from breaking the line inside that @code.
|
||||
@code{@w{"/\\*+ *\\|//+ *""}}, which matches extra stars and spaces
|
||||
@code{@w{"/\\*+ *\\|//+ *"}}, which matches extra stars and spaces
|
||||
after the @samp{/*} itself, and accepts C++ style comments also.
|
||||
(Note that @samp{\\} is needed in Lisp syntax to include a @samp{\} in
|
||||
the string, which is needed to deny the first star its special meaning
|
||||
@ -1006,21 +1015,21 @@ into the comment. In C mode, @code{comment-start} has the value
|
||||
|
||||
@vindex comment-padding
|
||||
The variable @code{comment-padding} specifies how many spaces
|
||||
@code{comment-region} should insert on each line between the
|
||||
comment delimiter and the line's original text. The default is 1,
|
||||
to insert one space.
|
||||
@code{comment-region} should insert on each line between the comment
|
||||
delimiter and the line's original text. The default is 1, to insert
|
||||
one space. @code{nil} means 0. Alternatively, @code{comment-padding}
|
||||
can hold the actual string to insert.
|
||||
|
||||
@vindex comment-multi-line
|
||||
The variable @code{comment-multi-line} controls how @kbd{C-M-j}
|
||||
(@code{indent-new-comment-line}) behaves when used inside a comment. If
|
||||
@code{comment-multi-line} is @code{nil}, as it normally is, then the
|
||||
comment on the starting line is terminated and a new comment is started
|
||||
on the new following line. If @code{comment-multi-line} is not
|
||||
@code{nil}, then the new following line is set up as part of the same
|
||||
comment that was found on the starting line. This is done by not
|
||||
inserting a terminator on the old line, and not inserting a starter on
|
||||
the new line. In languages where multi-line comments work, the choice
|
||||
of value for this variable is a matter of taste.
|
||||
(@code{indent-new-comment-line}) behaves when used inside a comment.
|
||||
Specifically, when @code{comment-multi-line} is @code{nil} (the
|
||||
default value), the command inserts a comment terminator, begins a new
|
||||
line, and finally inserts a comment starter. Otherwise it does not
|
||||
insert the terminator and starter, so it effectively continues the
|
||||
current comment across multiple lines. In languages that allow
|
||||
multi-line comments, the choice of value for this variable is a matter
|
||||
of taste.
|
||||
|
||||
@vindex comment-indent-function
|
||||
The variable @code{comment-indent-function} should contain a function
|
||||
@ -1064,7 +1073,7 @@ symbol---which Info files to look in, and which indices to search.
|
||||
You can also use @kbd{M-x info-lookup-file} to look for documentation
|
||||
for a file name.
|
||||
|
||||
This feature currently supports the modes Awk, Autoconf, Bison, C,
|
||||
This feature currently supports the modes AWK, Autoconf, Bison, C,
|
||||
Emacs Lisp, LaTeX, M4, Makefile, Octave, Perl, Scheme, and Texinfo,
|
||||
provided you have installed the relevant Info files, which are
|
||||
typically available with the appropriate GNU package.
|
||||
@ -1081,7 +1090,7 @@ still useful to read manual pages.
|
||||
|
||||
@findex manual-entry
|
||||
You can read the man page for an operating system command, library
|
||||
function, or system call, with the @kbd{M-x manual-entry} command. It
|
||||
function, or system call, with the @kbd{M-x man} command. It
|
||||
runs the @code{man} program to format the man page; if the system
|
||||
permits, it runs @code{man} asynchronously, so that you can keep on
|
||||
editing while the page is being formatted. (On MS-DOS and MS-Windows
|
||||
@ -1393,25 +1402,27 @@ Mode}). The Foldout package provides folding-editor features
|
||||
@cindex CORBA IDL mode
|
||||
@cindex Objective C mode
|
||||
@cindex C++ mode
|
||||
@cindex AWK mode
|
||||
@cindex mode, Java
|
||||
@cindex mode, C
|
||||
@cindex mode, C++
|
||||
@cindex mode, Objective C
|
||||
@cindex mode, CORBA IDL
|
||||
@cindex mode, Pike
|
||||
@cindex mode, AWK
|
||||
|
||||
This section gives a brief description of the special features
|
||||
available in C, C++, Objective-C, Java, CORBA IDL, and Pike modes.
|
||||
available in C, C++, Objective-C, Java, CORBA IDL, Pike and AWK modes.
|
||||
(These are called ``C mode and related modes.'') @xref{Top, , CC Mode,
|
||||
ccmode, CC Mode}, for a more extensive description of these modes
|
||||
and their special features.
|
||||
|
||||
@menu
|
||||
* Motion in C:: Commands to move by C statements, etc.
|
||||
* Electric C:: Colon and other chars can automatically reindent.
|
||||
* Hungry Delete:: A more powerful DEL command.
|
||||
* Other C Commands:: Filling comments, viewing expansion of macros,
|
||||
and other neat features.
|
||||
* Comments in C:: Options for customizing comment style.
|
||||
* Motion in C:: Commands to move by C statements, etc.
|
||||
* Electric C:: Colon and other chars can automatically reindent.
|
||||
* Hungry Delete:: A more powerful DEL command.
|
||||
* Other C Commands:: Filling comments, viewing expansion of macros,
|
||||
and other neat features.
|
||||
@end menu
|
||||
|
||||
@node Motion in C
|
||||
@ -1421,15 +1432,29 @@ and their special features.
|
||||
related modes.
|
||||
|
||||
@table @code
|
||||
@item M-x c-beginning-of-defun
|
||||
@itemx M-x c-end-of-defun
|
||||
@findex c-beginning-of-defun
|
||||
@findex c-end-of-defun
|
||||
Move point to the beginning or end of the current function or
|
||||
top-level definition. These are found by searching for the least
|
||||
enclosing braces. (By contrast, @code{beginning-of-defun} and
|
||||
@code{end-of-defun} search for braces in column zero.) If you are
|
||||
editing code where the opening brace of a function isn't placed in
|
||||
column zero, you may wish to bind @code{C-M-a} and @code{C-M-e} to
|
||||
these commands. @xref{Moving by Defuns}.
|
||||
|
||||
@item C-c C-u
|
||||
@kindex C-c C-u @r{(C mode)}
|
||||
@findex c-up-conditional
|
||||
Move point back to the containing preprocessor conditional, leaving the
|
||||
mark behind. A prefix argument acts as a repeat count. With a negative
|
||||
argument, move point forward to the end of the containing
|
||||
preprocessor conditional. When going backwards, @code{#elif} is treated
|
||||
like @code{#else} followed by @code{#if}. When going forwards,
|
||||
@code{#elif} is ignored.@refill
|
||||
preprocessor conditional.
|
||||
|
||||
@samp{#elif} is equivalent to @samp{#else} followed by @samp{#if}, so
|
||||
the function will stop at a @samp{#elif} when going backward, but not
|
||||
when going forward.
|
||||
|
||||
@item C-c C-p
|
||||
@kindex C-c C-p @r{(C mode)}
|
||||
@ -1446,27 +1471,22 @@ behind. A prefix argument acts as a repeat count. With a negative
|
||||
argument, move backward.
|
||||
|
||||
@item M-a
|
||||
@kindex ESC a
|
||||
@kindex M-a (C mode)
|
||||
@findex c-beginning-of-statement
|
||||
Move point to the beginning of the innermost C statement
|
||||
(@code{c-beginning-of-statement}). If point is already at the beginning
|
||||
of a statement, move to the beginning of the preceding statement. With
|
||||
prefix argument @var{n}, move back @var{n} @minus{} 1 statements.
|
||||
|
||||
If point is within a string or comment, or next to a comment (only
|
||||
whitespace between them), this command moves by sentences instead of
|
||||
statements.
|
||||
|
||||
When called from a program, this function takes three optional
|
||||
arguments: the numeric prefix argument, a buffer position limit
|
||||
(don't move back before that place), and a flag that controls whether
|
||||
to do sentence motion when inside of a comment.
|
||||
In comments or in strings which span more than one line, this command
|
||||
moves by sentences instead of statements.
|
||||
|
||||
@item M-e
|
||||
@kindex ESC e
|
||||
@kindex M-e (C mode)
|
||||
@findex c-end-of-statement
|
||||
Move point to the end of the innermost C statement; like @kbd{M-a}
|
||||
except that it moves in the other direction (@code{c-end-of-statement}).
|
||||
Move point to the end of the innermost C statement or sentence; like
|
||||
@kbd{M-a} except that it moves in the other direction
|
||||
(@code{c-end-of-statement}).
|
||||
|
||||
@item M-x c-backward-into-nomenclature
|
||||
@findex c-backward-into-nomenclature
|
||||
@ -1530,12 +1550,14 @@ Insert a double colon scope operator at point, without reindenting the
|
||||
line or adding any newlines (@code{c-scope-operator}).
|
||||
@end table
|
||||
|
||||
@vindex c-electric-pound-behavior
|
||||
The electric @kbd{#} key reindents the line if it appears to be the
|
||||
beginning of a preprocessor directive. This happens when the value of
|
||||
@code{c-electric-pound-behavior} is @code{(alignleft)}. You can turn
|
||||
this feature off by setting @code{c-electric-pound-behavior} to
|
||||
@code{nil}.
|
||||
|
||||
@vindex c-hanging-braces-alist
|
||||
The variable @code{c-hanging-braces-alist} controls the insertion of
|
||||
newlines before and after inserted braces. It is an association list
|
||||
with elements of the following form: @code{(@var{syntactic-symbol}
|
||||
@ -1550,6 +1572,7 @@ to determine where newlines are inserted: either before the brace,
|
||||
after, or both. If not found, the default is to insert a newline both
|
||||
before and after braces.
|
||||
|
||||
@vindex c-hanging-colons-alist
|
||||
The variable @code{c-hanging-colons-alist} controls the insertion of
|
||||
newlines before and after inserted colons. It is an association list
|
||||
with elements of the following form: @code{(@var{syntactic-symbol}
|
||||
@ -1562,6 +1585,7 @@ where newlines are inserted: either before the brace, after, or both.
|
||||
If the syntactic symbol is not found in this list, no newlines are
|
||||
inserted.
|
||||
|
||||
@vindex c-cleanup-list
|
||||
Electric characters can also delete newlines automatically when the
|
||||
auto-newline feature is enabled. This feature makes auto-newline more
|
||||
acceptable, by deleting the newlines in the most common cases where you
|
||||
@ -1613,6 +1637,7 @@ whitespace.
|
||||
|
||||
@node Hungry Delete
|
||||
@subsection Hungry Delete Feature in C
|
||||
@cindex hungry deletion (C Mode)
|
||||
|
||||
When the @dfn{hungry-delete} feature is enabled (indicated by
|
||||
@samp{/h} or @samp{/ah} in the mode line after the mode name), a single
|
||||
@ -1642,6 +1667,21 @@ hungry-delete feature is enabled.
|
||||
@subsection Other Commands for C Mode
|
||||
|
||||
@table @kbd
|
||||
@item M-x c-context-line-break
|
||||
@findex c-context-line-break
|
||||
This command inserts a line break and indents the new line in a manner
|
||||
appropriate to the context. In normal code, it does the work of
|
||||
@kbd{C-j} (@code{newline-and-indent}), in a C preprocessor line it
|
||||
additionally inserts a @samp{\} at the line break, and within comments
|
||||
it's like @kbd{M-j} (@code{c-indent-new-comment-line}).
|
||||
|
||||
@code{c-context-line-break} isn't bound to a key by default, but it
|
||||
needs a binding to be useful. The following code will bind it to
|
||||
@kbd{C-j}.
|
||||
@example
|
||||
(define-key c-mode-base-map "\C-j" 'c-context-line-break)
|
||||
@end example
|
||||
|
||||
@item C-M-h
|
||||
Put mark at the end of a function definition, and put point at the
|
||||
beginning (@code{c-mark-function}).
|
||||
@ -1702,6 +1742,7 @@ directs how the line is indented.
|
||||
@itemx M-x global-cwarn-mode
|
||||
@findex cwarn-mode
|
||||
@findex global-cwarn-mode
|
||||
@vindex global-cwarn-mode
|
||||
@cindex CWarn mode
|
||||
@cindex suspicious constructions in C, C++
|
||||
CWarn minor mode highlights certain suspicious C and C++ constructions:
|
||||
@ -1741,42 +1782,6 @@ to a C/C++ source file, or vice versa. The variable
|
||||
names.
|
||||
@end table
|
||||
|
||||
@node Comments in C
|
||||
@subsection Comments in C Modes
|
||||
|
||||
C mode and related modes use a number of variables for controlling
|
||||
comment format.
|
||||
|
||||
@table @code
|
||||
@item c-comment-only-line-offset
|
||||
@vindex c-comment-only-line-offset
|
||||
Extra offset for line which contains only the start of a comment. It
|
||||
can be either an integer or a cons cell of the form
|
||||
@code{(@var{non-anchored-offset} . @var{anchored-offset})}, where
|
||||
@var{non-anchored-offset} is the amount of offset given to
|
||||
non-column-zero anchored comment-only lines, and @var{anchored-offset}
|
||||
is the amount of offset to give column-zero anchored comment-only lines.
|
||||
Just an integer as value is equivalent to @code{(@var{val} . 0)}.
|
||||
|
||||
@item c-comment-start-regexp
|
||||
@vindex c-comment-start-regexp
|
||||
This buffer-local variable specifies how to recognize the start of a comment.
|
||||
|
||||
@item c-hanging-comment-ender-p
|
||||
@vindex c-hanging-comment-ender-p
|
||||
If this variable is @code{nil}, @code{c-fill-paragraph} leaves the
|
||||
comment terminator of a block comment on a line by itself. The default
|
||||
value is @code{t}, which puts the comment-end delimiter @samp{*/} at the
|
||||
end of the last line of the comment text.
|
||||
|
||||
@item c-hanging-comment-starter-p
|
||||
@vindex c-hanging-comment-starter-p
|
||||
If this variable is @code{nil}, @code{c-fill-paragraph} leaves the
|
||||
starting delimiter of a block comment on a line by itself. The default
|
||||
value is @code{t}, which puts the comment-start delimiter @samp{/*} at
|
||||
the beginning of the first line of the comment text.
|
||||
@end table
|
||||
|
||||
@node Fortran
|
||||
@section Fortran Mode
|
||||
@cindex Fortran mode
|
||||
|
@ -4,4 +4,6 @@ source ^\.(gdbinit|dbxinit)$
|
||||
# Auto-generated files, which ignore
|
||||
precious ^(config\.stamp|config\.h|epaths\.h)$
|
||||
|
||||
backup ^(stamp-oldxmenu|prefix-args|temacs|emacs|emacs-[0-9.]*)$
|
||||
|
||||
# arch-tag: 277cc7ae-b3f5-44af-abf1-84c073164543
|
||||
|
@ -1,3 +1,82 @@
|
||||
2004-06-13 Richard M. Stallman <rms@gnu.org>
|
||||
|
||||
* regex.h (CHAR_CLASS_MAX_LENGTH, re_wctype_t, re_wchar_t)
|
||||
(re_wctype, re_iswctype, re_wctype_to_bit):
|
||||
Non-function definitions moved here from regex.c.
|
||||
|
||||
* regex.c (re_wctype, re_iswctype): Function defs longer static.
|
||||
(CHAR_CLASS_MAX_LENGTH, re_wctype_t, re_wchar_t)
|
||||
(re_wctype, re_iswctype, re_wctype_to_bit):
|
||||
Non-function definitions moved to regex.h.
|
||||
|
||||
* window.c (Fselect_window): Doc fix.
|
||||
|
||||
* syntax.c: Include regex.h.
|
||||
(skip_chars): New arg HANDLE_ISO_CLASSES. Callers changed.
|
||||
If requested, make a list of classes, then check the scanned
|
||||
chars for membership in them.
|
||||
(in_classes): New function.
|
||||
Doc fix.
|
||||
|
||||
* keyboard.c (cmd_error): Don't call any_kboard_state
|
||||
if inside a recursive edit level.
|
||||
|
||||
2004-06-13 Lorentey K,Aa(Broly <lorentey@elte.hu>
|
||||
|
||||
* keyboard.c (command_loop): Call any_kboard_state before
|
||||
command_loop_2 when at top level.
|
||||
|
||||
2004-06-13 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
* print.c (print_object): Always use %ld for printing EMACS_INT.
|
||||
|
||||
* keyboard.c (cancel_hourglass_unwind): Return a value.
|
||||
(modify_event_symbol): Always use %ld for printing EMACS_INT.
|
||||
(Fexecute_extended_command): Likewise.
|
||||
|
||||
* syntax.h (SYNTAX_ENTRY_FOLLOW_PARENT): Rename local variable to
|
||||
avoid clashes.
|
||||
(SYNTAX): Likewise.
|
||||
(SYNTAX_WITH_FLAGS): Likewise.
|
||||
(SYNTAX_MATCH): Likewise.
|
||||
|
||||
* syntax.c (char_quoted): Avoid warning about undefined operation.
|
||||
(find_defun_start): Likewise.
|
||||
(scan_lists): Likewise.
|
||||
(INC_FROM): Likewise.
|
||||
(scan_sexps_forward): Likewise.
|
||||
|
||||
* image.c: Include <ctype.h>.
|
||||
|
||||
* xfaces.c (face_attr_equal_p): Declare parameters.
|
||||
|
||||
2004-06-13 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* ccl.c (CCL_READ_CHAR): If hit EOF, set REG to -1.
|
||||
|
||||
2004-06-12 Matthew Mundell <matt@mundell.ukfsn.org>
|
||||
|
||||
* eval.c (Fdefun): Signal an error if NAME is not a symbol.
|
||||
|
||||
2004-06-12 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* ccl.c (CCL_CALL_FOR_MAP_INSTRUCTION): Save eof_ic in
|
||||
ccl_prog_stack_struct and update it.
|
||||
(CCL_INVALID_CMD): If CCL_DEBUG is defined, call ccl_debug_hook.
|
||||
(CCL_READ_CHAR): Get instruction counter from eof_ic, not from
|
||||
ccl->eof_ic on EOF.
|
||||
(ccl_debug_hook): New function.
|
||||
(struct ccl_prog_stack): New member eof_ic.
|
||||
(ccl_driver): Handle EOF in subrountine call correctly.
|
||||
|
||||
2004-06-11 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* coding.c (decode_coding_string): Check CODING_FINISH_INTERRUPT.
|
||||
|
||||
2004-06-11 Kim F. Storm <storm@cua.dk>
|
||||
|
||||
* emacs.c (shut_down_emacs): Inhibit redisplay during shutdown.
|
||||
|
||||
2004-06-11 Juanma Barranquero <lektu@terra.es>
|
||||
|
||||
* keyboard.c (Fposn_at_point): Doc fix.
|
||||
|
42
src/ccl.c
42
src/ccl.c
@ -626,14 +626,17 @@ do \
|
||||
{ \
|
||||
ccl_prog = ccl_prog_stack_struct[0].ccl_prog; \
|
||||
ic = ccl_prog_stack_struct[0].ic; \
|
||||
eof_ic = ccl_prog_stack_struct[0].eof_ic; \
|
||||
} \
|
||||
CCL_INVALID_CMD; \
|
||||
} \
|
||||
ccl_prog_stack_struct[stack_idx].ccl_prog = ccl_prog; \
|
||||
ccl_prog_stack_struct[stack_idx].ic = (ret_ic); \
|
||||
ccl_prog_stack_struct[stack_idx].eof_ic = eof_ic; \
|
||||
stack_idx++; \
|
||||
ccl_prog = called_ccl.prog; \
|
||||
ic = CCL_HEADER_MAIN; \
|
||||
eof_ic = XFASTINT (ccl_prog[CCL_HEADER_EOF]); \
|
||||
goto ccl_repeat; \
|
||||
} \
|
||||
while (0)
|
||||
@ -710,6 +713,8 @@ while (0)
|
||||
|
||||
/* Terminate CCL program because of invalid command. Should not occur
|
||||
in the normal case. */
|
||||
#ifndef CCL_DEBUG
|
||||
|
||||
#define CCL_INVALID_CMD \
|
||||
do \
|
||||
{ \
|
||||
@ -718,6 +723,19 @@ do \
|
||||
} \
|
||||
while(0)
|
||||
|
||||
#else
|
||||
|
||||
#define CCL_INVALID_CMD \
|
||||
do \
|
||||
{ \
|
||||
ccl_debug_hook (this_ic); \
|
||||
ccl->status = CCL_STAT_INVALID_CMD; \
|
||||
goto ccl_error_handler; \
|
||||
} \
|
||||
while(0)
|
||||
|
||||
#endif
|
||||
|
||||
/* Encode one character CH to multibyte form and write to the current
|
||||
output buffer. If CH is less than 256, CH is written as is. */
|
||||
#define CCL_WRITE_CHAR(ch) \
|
||||
@ -809,7 +827,8 @@ while(0)
|
||||
} \
|
||||
else if (ccl->last_block) \
|
||||
{ \
|
||||
ic = ccl->eof_ic; \
|
||||
REG = -1; \
|
||||
ic = eof_ic; \
|
||||
goto ccl_repeat; \
|
||||
} \
|
||||
else \
|
||||
@ -854,12 +873,20 @@ while(0)
|
||||
#define CCL_DEBUG_BACKTRACE_LEN 256
|
||||
int ccl_backtrace_table[CCL_DEBUG_BACKTRACE_LEN];
|
||||
int ccl_backtrace_idx;
|
||||
|
||||
int
|
||||
ccl_debug_hook (int ic)
|
||||
{
|
||||
return ic;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
struct ccl_prog_stack
|
||||
{
|
||||
Lisp_Object *ccl_prog; /* Pointer to an array of CCL code. */
|
||||
int ic; /* Instruction Counter. */
|
||||
int eof_ic; /* Instruction Counter to jump on EOF. */
|
||||
};
|
||||
|
||||
/* For the moment, we only support depth 256 of stack. */
|
||||
@ -888,8 +915,10 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
|
||||
sequence. For that conversion, we remember how many more bytes
|
||||
we must keep in DESTINATION in this variable. */
|
||||
int extra_bytes = ccl->eight_bit_control;
|
||||
int eof_ic = ccl->eof_ic;
|
||||
int eof_hit = 0;
|
||||
|
||||
if (ic >= ccl->eof_ic)
|
||||
if (ic >= eof_ic)
|
||||
ic = CCL_HEADER_MAIN;
|
||||
|
||||
if (ccl->buf_magnification == 0) /* We can't produce any bytes. */
|
||||
@ -1093,15 +1122,18 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
|
||||
{
|
||||
ccl_prog = ccl_prog_stack_struct[0].ccl_prog;
|
||||
ic = ccl_prog_stack_struct[0].ic;
|
||||
eof_ic = ccl_prog_stack_struct[0].eof_ic;
|
||||
}
|
||||
CCL_INVALID_CMD;
|
||||
}
|
||||
|
||||
ccl_prog_stack_struct[stack_idx].ccl_prog = ccl_prog;
|
||||
ccl_prog_stack_struct[stack_idx].ic = ic;
|
||||
ccl_prog_stack_struct[stack_idx].eof_ic = eof_ic;
|
||||
stack_idx++;
|
||||
ccl_prog = XVECTOR (AREF (slot, 1))->contents;
|
||||
ic = CCL_HEADER_MAIN;
|
||||
eof_ic = XFASTINT (ccl_prog[CCL_HEADER_EOF]);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1131,6 +1163,9 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
|
||||
stack_idx--;
|
||||
ccl_prog = ccl_prog_stack_struct[stack_idx].ccl_prog;
|
||||
ic = ccl_prog_stack_struct[stack_idx].ic;
|
||||
eof_ic = ccl_prog_stack_struct[stack_idx].eof_ic;
|
||||
if (eof_hit)
|
||||
ic = eof_ic;
|
||||
break;
|
||||
}
|
||||
if (src)
|
||||
@ -1367,7 +1402,8 @@ ccl_driver (ccl, source, destination, src_bytes, dst_bytes, consumed)
|
||||
src--;
|
||||
if (ccl->last_block)
|
||||
{
|
||||
ic = ccl->eof_ic;
|
||||
ic = eof_ic;
|
||||
eof_hit = 1;
|
||||
goto ccl_repeat;
|
||||
}
|
||||
else
|
||||
|
@ -6316,6 +6316,7 @@ encode_coding_string (str, coding, nocopy)
|
||||
produced += coding->produced;
|
||||
produced_char += coding->produced_char;
|
||||
if (result == CODING_FINISH_NORMAL
|
||||
|| result == CODING_FINISH_INTERRUPT
|
||||
|| (result == CODING_FINISH_INSUFFICIENT_SRC
|
||||
&& coding->consumed == 0))
|
||||
break;
|
||||
|
@ -207,6 +207,8 @@ extern Lisp_Object Vinitial_window_system;
|
||||
|
||||
extern Lisp_Object Vauto_save_list_file_name;
|
||||
|
||||
extern Lisp_Object Vinhibit_redisplay;
|
||||
|
||||
#ifdef USG_SHARED_LIBRARIES
|
||||
/* If nonzero, this is the place to put the end of the writable segment
|
||||
at startup. */
|
||||
@ -2009,6 +2011,9 @@ shut_down_emacs (sig, no_x, stuff)
|
||||
/* Prevent running of hooks from now on. */
|
||||
Vrun_hooks = Qnil;
|
||||
|
||||
/* Don't update display from now on. */
|
||||
Vinhibit_redisplay = Qt;
|
||||
|
||||
/* If we are controlling the terminal, reset terminal modes. */
|
||||
#ifdef EMACS_HAVE_TTY_PGRP
|
||||
{
|
||||
|
@ -617,6 +617,7 @@ usage: (defun NAME ARGLIST [DOCSTRING] BODY...) */)
|
||||
register Lisp_Object defn;
|
||||
|
||||
fn_name = Fcar (args);
|
||||
CHECK_SYMBOL (fn_name);
|
||||
defn = Fcons (Qlambda, Fcdr (args));
|
||||
if (!NILP (Vpurify_flag))
|
||||
defn = Fpurecopy (defn);
|
||||
|
@ -23,6 +23,7 @@ Boston, MA 02111-1307, USA. */
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
|
@ -1147,7 +1147,8 @@ cmd_error (data)
|
||||
|
||||
Vinhibit_quit = Qnil;
|
||||
#ifdef MULTI_KBOARD
|
||||
any_kboard_state ();
|
||||
if (command_loop_level == 0 && minibuf_level == 0)
|
||||
any_kboard_state ();
|
||||
#endif
|
||||
|
||||
return make_number (0);
|
||||
@ -6261,12 +6262,8 @@ modify_event_symbol (symbol_num, modifiers, symbol_kind, name_alist_or_stem,
|
||||
{
|
||||
int len = SBYTES (name_alist_or_stem);
|
||||
char *buf = (char *) alloca (len + 50);
|
||||
if (sizeof (int) == sizeof (EMACS_INT))
|
||||
sprintf (buf, "%s-%d", SDATA (name_alist_or_stem),
|
||||
(int)XINT (symbol_int) + 1);
|
||||
else if (sizeof (long) == sizeof (EMACS_INT))
|
||||
sprintf (buf, "%s-%ld", SDATA (name_alist_or_stem),
|
||||
(long)XINT (symbol_int) + 1);
|
||||
sprintf (buf, "%s-%ld", SDATA (name_alist_or_stem),
|
||||
(long) XINT (symbol_int) + 1);
|
||||
value = intern (buf);
|
||||
}
|
||||
else if (name_table != 0 && name_table[symbol_num])
|
||||
@ -9790,23 +9787,9 @@ DEFUN ("execute-extended-command", Fexecute_extended_command, Sexecute_extended_
|
||||
else if (CONSP (prefixarg) && XINT (XCAR (prefixarg)) == 4)
|
||||
strcpy (buf, "C-u ");
|
||||
else if (CONSP (prefixarg) && INTEGERP (XCAR (prefixarg)))
|
||||
{
|
||||
if (sizeof (int) == sizeof (EMACS_INT))
|
||||
sprintf (buf, "%d ", XINT (XCAR (prefixarg)));
|
||||
else if (sizeof (long) == sizeof (EMACS_INT))
|
||||
sprintf (buf, "%ld ", (long) XINT (XCAR (prefixarg)));
|
||||
else
|
||||
abort ();
|
||||
}
|
||||
sprintf (buf, "%ld ", (long) XINT (XCAR (prefixarg)));
|
||||
else if (INTEGERP (prefixarg))
|
||||
{
|
||||
if (sizeof (int) == sizeof (EMACS_INT))
|
||||
sprintf (buf, "%d ", XINT (prefixarg));
|
||||
else if (sizeof (long) == sizeof (EMACS_INT))
|
||||
sprintf (buf, "%ld ", (long) XINT (prefixarg));
|
||||
else
|
||||
abort ();
|
||||
}
|
||||
sprintf (buf, "%ld ", (long) XINT (prefixarg));
|
||||
|
||||
/* This isn't strictly correct if execute-extended-command
|
||||
is bound to anything else. Perhaps it should use
|
||||
|
@ -1290,20 +1290,21 @@ is used to further constrain the set of candidates. */)
|
||||
XSETFASTINT (zero, 0);
|
||||
|
||||
/* Ignore this element if it fails to match all the regexps. */
|
||||
{
|
||||
int count = SPECPDL_INDEX ();
|
||||
specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
|
||||
for (regexps = Vcompletion_regexp_list; CONSP (regexps);
|
||||
regexps = XCDR (regexps))
|
||||
{
|
||||
tem = Fstring_match (XCAR (regexps), eltstring, zero);
|
||||
if (NILP (tem))
|
||||
break;
|
||||
}
|
||||
unbind_to (count, Qnil);
|
||||
if (CONSP (regexps))
|
||||
continue;
|
||||
}
|
||||
if (CONSP (Vcompletion_regexp_list))
|
||||
{
|
||||
int count = SPECPDL_INDEX ();
|
||||
specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
|
||||
for (regexps = Vcompletion_regexp_list; CONSP (regexps);
|
||||
regexps = XCDR (regexps))
|
||||
{
|
||||
tem = Fstring_match (XCAR (regexps), eltstring, zero);
|
||||
if (NILP (tem))
|
||||
break;
|
||||
}
|
||||
unbind_to (count, Qnil);
|
||||
if (CONSP (regexps))
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Ignore this element if there is a predicate
|
||||
and the predicate doesn't like it. */
|
||||
@ -1541,20 +1542,21 @@ are ignored unless STRING itself starts with a space. */)
|
||||
XSETFASTINT (zero, 0);
|
||||
|
||||
/* Ignore this element if it fails to match all the regexps. */
|
||||
{
|
||||
int count = SPECPDL_INDEX ();
|
||||
specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
|
||||
for (regexps = Vcompletion_regexp_list; CONSP (regexps);
|
||||
regexps = XCDR (regexps))
|
||||
{
|
||||
tem = Fstring_match (XCAR (regexps), eltstring, zero);
|
||||
if (NILP (tem))
|
||||
break;
|
||||
}
|
||||
unbind_to (count, Qnil);
|
||||
if (CONSP (regexps))
|
||||
continue;
|
||||
}
|
||||
if (CONSP (Vcompletion_regexp_list))
|
||||
{
|
||||
int count = SPECPDL_INDEX ();
|
||||
specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
|
||||
for (regexps = Vcompletion_regexp_list; CONSP (regexps);
|
||||
regexps = XCDR (regexps))
|
||||
{
|
||||
tem = Fstring_match (XCAR (regexps), eltstring, zero);
|
||||
if (NILP (tem))
|
||||
break;
|
||||
}
|
||||
unbind_to (count, Qnil);
|
||||
if (CONSP (regexps))
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Ignore this element if there is a predicate
|
||||
and the predicate doesn't like it. */
|
||||
@ -1789,19 +1791,20 @@ the values STRING, PREDICATE and `lambda'. */)
|
||||
return call3 (alist, string, predicate, Qlambda);
|
||||
|
||||
/* Reject this element if it fails to match all the regexps. */
|
||||
{
|
||||
int count = SPECPDL_INDEX ();
|
||||
specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
|
||||
for (regexps = Vcompletion_regexp_list; CONSP (regexps);
|
||||
regexps = XCDR (regexps))
|
||||
{
|
||||
if (NILP (Fstring_match (XCAR (regexps),
|
||||
SYMBOLP (tem) ? string : tem,
|
||||
Qnil)))
|
||||
return unbind_to (count, Qnil);
|
||||
}
|
||||
unbind_to (count, Qnil);
|
||||
}
|
||||
if (CONSP (Vcompletion_regexp_list))
|
||||
{
|
||||
int count = SPECPDL_INDEX ();
|
||||
specbind (Qcase_fold_search, completion_ignore_case ? Qt : Qnil);
|
||||
for (regexps = Vcompletion_regexp_list; CONSP (regexps);
|
||||
regexps = XCDR (regexps))
|
||||
{
|
||||
if (NILP (Fstring_match (XCAR (regexps),
|
||||
SYMBOLP (tem) ? string : tem,
|
||||
Qnil)))
|
||||
return unbind_to (count, Qnil);
|
||||
}
|
||||
unbind_to (count, Qnil);
|
||||
}
|
||||
|
||||
/* Finally, check the predicate. */
|
||||
if (!NILP (predicate))
|
||||
|
10
src/print.c
10
src/print.c
@ -1822,7 +1822,7 @@ print_object (obj, printcharfun, escapeflag)
|
||||
|
||||
PRINTCHAR ('#');
|
||||
PRINTCHAR ('&');
|
||||
sprintf (buf, "%d", XBOOL_VECTOR (obj)->size);
|
||||
sprintf (buf, "%ld", (long) XBOOL_VECTOR (obj)->size);
|
||||
strout (buf, -1, -1, printcharfun, 0);
|
||||
PRINTCHAR ('\"');
|
||||
|
||||
@ -1875,7 +1875,7 @@ print_object (obj, printcharfun, escapeflag)
|
||||
else if (WINDOWP (obj))
|
||||
{
|
||||
strout ("#<window ", -1, -1, printcharfun, 0);
|
||||
sprintf (buf, "%d", XFASTINT (XWINDOW (obj)->sequence_number));
|
||||
sprintf (buf, "%ld", (long) XFASTINT (XWINDOW (obj)->sequence_number));
|
||||
strout (buf, -1, -1, printcharfun, 0);
|
||||
if (!NILP (XWINDOW (obj)->buffer))
|
||||
{
|
||||
@ -1896,8 +1896,8 @@ print_object (obj, printcharfun, escapeflag)
|
||||
PRINTCHAR (' ');
|
||||
strout (SDATA (SYMBOL_NAME (h->weak)), -1, -1, printcharfun, 0);
|
||||
PRINTCHAR (' ');
|
||||
sprintf (buf, "%d/%d", XFASTINT (h->count),
|
||||
XVECTOR (h->next)->size);
|
||||
sprintf (buf, "%ld/%ld", (long) XFASTINT (h->count),
|
||||
(long) XVECTOR (h->next)->size);
|
||||
strout (buf, -1, -1, printcharfun, 0);
|
||||
}
|
||||
sprintf (buf, " 0x%lx", (unsigned long) h);
|
||||
@ -2020,7 +2020,7 @@ print_object (obj, printcharfun, escapeflag)
|
||||
break;
|
||||
|
||||
case Lisp_Misc_Intfwd:
|
||||
sprintf (buf, "#<intfwd to %d>", *XINTFWD (obj)->intvar);
|
||||
sprintf (buf, "#<intfwd to %ld>", (long) *XINTFWD (obj)->intvar);
|
||||
strout (buf, -1, -1, printcharfun, 0);
|
||||
break;
|
||||
|
||||
|
@ -3619,6 +3619,8 @@ FLAGS is the current flags of the interface. */)
|
||||
#endif
|
||||
#endif /* HAVE_SOCKETS */
|
||||
|
||||
/* Turn off input and output for process PROC. */
|
||||
|
||||
void
|
||||
deactivate_process (proc)
|
||||
Lisp_Object proc;
|
||||
|
37
src/regex.c
37
src/regex.c
@ -1961,41 +1961,10 @@ struct range_table_work_area
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#if WIDE_CHAR_SUPPORT
|
||||
/* The GNU C library provides support for user-defined character classes
|
||||
and the functions from ISO C amendement 1. */
|
||||
# ifdef CHARCLASS_NAME_MAX
|
||||
# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
|
||||
# else
|
||||
/* This shouldn't happen but some implementation might still have this
|
||||
problem. Use a reasonable default value. */
|
||||
# define CHAR_CLASS_MAX_LENGTH 256
|
||||
# endif
|
||||
typedef wctype_t re_wctype_t;
|
||||
typedef wchar_t re_wchar_t;
|
||||
# define re_wctype wctype
|
||||
# define re_iswctype iswctype
|
||||
# define re_wctype_to_bit(cc) 0
|
||||
#else
|
||||
# define CHAR_CLASS_MAX_LENGTH 9 /* Namely, `multibyte'. */
|
||||
# define btowc(c) c
|
||||
|
||||
/* Character classes. */
|
||||
typedef enum { RECC_ERROR = 0,
|
||||
RECC_ALNUM, RECC_ALPHA, RECC_WORD,
|
||||
RECC_GRAPH, RECC_PRINT,
|
||||
RECC_LOWER, RECC_UPPER,
|
||||
RECC_PUNCT, RECC_CNTRL,
|
||||
RECC_DIGIT, RECC_XDIGIT,
|
||||
RECC_BLANK, RECC_SPACE,
|
||||
RECC_MULTIBYTE, RECC_NONASCII,
|
||||
RECC_ASCII, RECC_UNIBYTE
|
||||
} re_wctype_t;
|
||||
|
||||
typedef int re_wchar_t;
|
||||
#if ! WIDE_CHAR_SUPPORT
|
||||
|
||||
/* Map a string to the char class it names (if any). */
|
||||
static re_wctype_t
|
||||
re_wctype_t
|
||||
re_wctype (str)
|
||||
re_char *str;
|
||||
{
|
||||
@ -2021,7 +1990,7 @@ re_wctype (str)
|
||||
}
|
||||
|
||||
/* True iff CH is in the char class CC. */
|
||||
static boolean
|
||||
boolean
|
||||
re_iswctype (ch, cc)
|
||||
int ch;
|
||||
re_wctype_t cc;
|
||||
|
43
src/regex.h
43
src/regex.h
@ -562,6 +562,49 @@ extern void regfree _RE_ARGS ((regex_t *__preg));
|
||||
}
|
||||
#endif /* C++ */
|
||||
|
||||
/* For platform which support the ISO C amendement 1 functionality we
|
||||
support user defined character classes. */
|
||||
#if WIDE_CHAR_SUPPORT
|
||||
/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
|
||||
# include <wchar.h>
|
||||
# include <wctype.h>
|
||||
#endif
|
||||
|
||||
#if WIDE_CHAR_SUPPORT
|
||||
/* The GNU C library provides support for user-defined character classes
|
||||
and the functions from ISO C amendement 1. */
|
||||
# ifdef CHARCLASS_NAME_MAX
|
||||
# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
|
||||
# else
|
||||
/* This shouldn't happen but some implementation might still have this
|
||||
problem. Use a reasonable default value. */
|
||||
# define CHAR_CLASS_MAX_LENGTH 256
|
||||
# endif
|
||||
typedef wctype_t re_wctype_t;
|
||||
typedef wchar_t re_wchar_t;
|
||||
# define re_wctype wctype
|
||||
# define re_iswctype iswctype
|
||||
# define re_wctype_to_bit(cc) 0
|
||||
#else
|
||||
# define CHAR_CLASS_MAX_LENGTH 9 /* Namely, `multibyte'. */
|
||||
# define btowc(c) c
|
||||
|
||||
/* Character classes. */
|
||||
typedef enum { RECC_ERROR = 0,
|
||||
RECC_ALNUM, RECC_ALPHA, RECC_WORD,
|
||||
RECC_GRAPH, RECC_PRINT,
|
||||
RECC_LOWER, RECC_UPPER,
|
||||
RECC_PUNCT, RECC_CNTRL,
|
||||
RECC_DIGIT, RECC_XDIGIT,
|
||||
RECC_BLANK, RECC_SPACE,
|
||||
RECC_MULTIBYTE, RECC_NONASCII,
|
||||
RECC_ASCII, RECC_UNIBYTE
|
||||
} re_wctype_t;
|
||||
|
||||
typedef int re_wchar_t;
|
||||
|
||||
#endif /* not WIDE_CHAR_SUPPORT */
|
||||
|
||||
#endif /* regex.h */
|
||||
|
||||
/*
|
||||
|
155
src/syntax.c
155
src/syntax.c
@ -26,6 +26,7 @@ Boston, MA 02111-1307, USA. */
|
||||
#include "buffer.h"
|
||||
#include "charset.h"
|
||||
#include "keymap.h"
|
||||
#include "regex.h"
|
||||
|
||||
/* Make syntax table lookup grant data in gl_state. */
|
||||
#define SYNTAX_ENTRY_VIA_PROPERTY
|
||||
@ -97,11 +98,12 @@ static int find_start_modiff;
|
||||
static int find_defun_start P_ ((int, int));
|
||||
static int back_comment P_ ((int, int, int, int, int, int *, int *));
|
||||
static int char_quoted P_ ((int, int));
|
||||
static Lisp_Object skip_chars P_ ((int, int, Lisp_Object, Lisp_Object));
|
||||
static Lisp_Object skip_chars P_ ((int, int, Lisp_Object, Lisp_Object, int));
|
||||
static Lisp_Object scan_lists P_ ((int, int, int, int));
|
||||
static void scan_sexps_forward P_ ((struct lisp_parse_state *,
|
||||
int, int, int, int,
|
||||
int, Lisp_Object, int));
|
||||
static int in_classes P_ ((int, Lisp_Object));
|
||||
|
||||
|
||||
struct gl_state_s gl_state; /* Global state of syntax parser. */
|
||||
@ -292,8 +294,11 @@ char_quoted (charpos, bytepos)
|
||||
|
||||
while (bytepos >= beg)
|
||||
{
|
||||
int c;
|
||||
|
||||
UPDATE_SYNTAX_TABLE_BACKWARD (charpos);
|
||||
code = SYNTAX (FETCH_CHAR (bytepos));
|
||||
c = FETCH_CHAR (bytepos);
|
||||
code = SYNTAX (c);
|
||||
if (! (code == Scharquote || code == Sescape))
|
||||
break;
|
||||
|
||||
@ -380,12 +385,16 @@ find_defun_start (pos, pos_byte)
|
||||
gl_state.use_global = 0;
|
||||
while (PT > BEGV)
|
||||
{
|
||||
int c;
|
||||
|
||||
/* Open-paren at start of line means we may have found our
|
||||
defun-start. */
|
||||
if (SYNTAX (FETCH_CHAR (PT_BYTE)) == Sopen)
|
||||
c = FETCH_CHAR (PT_BYTE);
|
||||
if (SYNTAX (c) == Sopen)
|
||||
{
|
||||
SETUP_SYNTAX_TABLE (PT + 1, -1); /* Try again... */
|
||||
if (SYNTAX (FETCH_CHAR (PT_BYTE)) == Sopen)
|
||||
c = FETCH_CHAR (PT_BYTE);
|
||||
if (SYNTAX (c) == Sopen)
|
||||
break;
|
||||
/* Now fallback to the default value. */
|
||||
gl_state.current_syntax_table = current_buffer->syntax_table;
|
||||
@ -1314,13 +1323,13 @@ except that `]' is never special and `\\' quotes `^', `-' or `\\'
|
||||
(but not as the end of a range; quoting is never needed there).
|
||||
Thus, with arg "a-zA-Z", this skips letters stopping before first nonletter.
|
||||
With arg "^a-zA-Z", skips nonletters stopping before first letter.
|
||||
Returns the distance traveled, either zero or positive.
|
||||
Note that char classes, e.g. `[:alpha:]', are not currently supported;
|
||||
they will be treated as literals. */)
|
||||
Char classes, e.g. `[:alpha:]', are supported.
|
||||
|
||||
Returns the distance traveled, either zero or positive. */)
|
||||
(string, lim)
|
||||
Lisp_Object string, lim;
|
||||
{
|
||||
return skip_chars (1, 0, string, lim);
|
||||
return skip_chars (1, 0, string, lim, 1);
|
||||
}
|
||||
|
||||
DEFUN ("skip-chars-backward", Fskip_chars_backward, Sskip_chars_backward, 1, 2, 0,
|
||||
@ -1330,7 +1339,7 @@ Returns the distance traveled, either zero or negative. */)
|
||||
(string, lim)
|
||||
Lisp_Object string, lim;
|
||||
{
|
||||
return skip_chars (0, 0, string, lim);
|
||||
return skip_chars (0, 0, string, lim, 1);
|
||||
}
|
||||
|
||||
DEFUN ("skip-syntax-forward", Fskip_syntax_forward, Sskip_syntax_forward, 1, 2, 0,
|
||||
@ -1342,7 +1351,7 @@ This function returns the distance traveled, either zero or positive. */)
|
||||
(syntax, lim)
|
||||
Lisp_Object syntax, lim;
|
||||
{
|
||||
return skip_chars (1, 1, syntax, lim);
|
||||
return skip_chars (1, 1, syntax, lim, 0);
|
||||
}
|
||||
|
||||
DEFUN ("skip-syntax-backward", Fskip_syntax_backward, Sskip_syntax_backward, 1, 2, 0,
|
||||
@ -1354,13 +1363,14 @@ This function returns the distance traveled, either zero or negative. */)
|
||||
(syntax, lim)
|
||||
Lisp_Object syntax, lim;
|
||||
{
|
||||
return skip_chars (0, 1, syntax, lim);
|
||||
return skip_chars (0, 1, syntax, lim, 0);
|
||||
}
|
||||
|
||||
static Lisp_Object
|
||||
skip_chars (forwardp, syntaxp, string, lim)
|
||||
skip_chars (forwardp, syntaxp, string, lim, handle_iso_classes)
|
||||
int forwardp, syntaxp;
|
||||
Lisp_Object string, lim;
|
||||
int handle_iso_classes;
|
||||
{
|
||||
register unsigned int c;
|
||||
unsigned char fastmap[0400];
|
||||
@ -1376,12 +1386,14 @@ skip_chars (forwardp, syntaxp, string, lim)
|
||||
int size_byte;
|
||||
const unsigned char *str;
|
||||
int len;
|
||||
Lisp_Object iso_classes;
|
||||
|
||||
CHECK_STRING (string);
|
||||
char_ranges = (int *) alloca (SCHARS (string) * (sizeof (int)) * 2);
|
||||
string_multibyte = STRING_MULTIBYTE (string);
|
||||
str = SDATA (string);
|
||||
size_byte = SBYTES (string);
|
||||
iso_classes = Qnil;
|
||||
|
||||
/* Adjust the multibyteness of the string to that of the buffer. */
|
||||
if (multibyte != string_multibyte)
|
||||
@ -1437,6 +1449,45 @@ skip_chars (forwardp, syntaxp, string, lim)
|
||||
fastmap[syntax_spec_code[c & 0377]] = 1;
|
||||
else
|
||||
{
|
||||
if (handle_iso_classes && c == '['
|
||||
&& i_byte < size_byte
|
||||
&& STRING_CHAR (str + i_byte, size_byte - i_byte) == ':')
|
||||
{
|
||||
const unsigned char *class_beg = str + i_byte + 1;
|
||||
const unsigned char *class_end = class_beg;
|
||||
const unsigned char *class_limit = str + size_byte;
|
||||
/* Leave room for the null. */
|
||||
unsigned char class_name[CHAR_CLASS_MAX_LENGTH + 1];
|
||||
re_wctype_t cc;
|
||||
|
||||
if (class_limit - class_beg > CHAR_CLASS_MAX_LENGTH)
|
||||
class_limit = class_beg + CHAR_CLASS_MAX_LENGTH;
|
||||
|
||||
while (class_end != class_limit
|
||||
&& ! (*class_end >= 0200
|
||||
|| *class_end <= 040
|
||||
|| (*class_end == ':'
|
||||
&& class_end[1] == ']')))
|
||||
class_end++;
|
||||
|
||||
if (class_end == class_limit
|
||||
|| *class_end >= 0200
|
||||
|| *class_end <= 040)
|
||||
error ("Invalid ISO C character class");
|
||||
|
||||
bcopy (class_beg, class_name, class_end - class_beg);
|
||||
class_name[class_end - class_beg] = 0;
|
||||
|
||||
cc = re_wctype (class_name);
|
||||
if (cc == 0)
|
||||
error ("Invalid ISO C character class");
|
||||
|
||||
iso_classes = Fcons (make_number (cc), iso_classes);
|
||||
|
||||
i_byte = class_end + 2 - str;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (c == '\\')
|
||||
{
|
||||
if (i_byte == size_byte)
|
||||
@ -1630,6 +1681,15 @@ skip_chars (forwardp, syntaxp, string, lim)
|
||||
stop = endp;
|
||||
}
|
||||
c = STRING_CHAR_AND_LENGTH (p, MAX_MULTIBYTE_LENGTH, nbytes);
|
||||
|
||||
if (! NILP (iso_classes) && in_classes (c, iso_classes))
|
||||
{
|
||||
if (negate)
|
||||
break;
|
||||
else
|
||||
goto fwd_ok;
|
||||
}
|
||||
|
||||
if (SINGLE_BYTE_CHAR_P (c))
|
||||
{
|
||||
if (!fastmap[c])
|
||||
@ -1652,6 +1712,7 @@ skip_chars (forwardp, syntaxp, string, lim)
|
||||
if (!(negate ^ (i < n_char_ranges)))
|
||||
break;
|
||||
}
|
||||
fwd_ok:
|
||||
p += nbytes, pos++, pos_byte += nbytes;
|
||||
}
|
||||
else
|
||||
@ -1664,8 +1725,19 @@ skip_chars (forwardp, syntaxp, string, lim)
|
||||
p = GAP_END_ADDR;
|
||||
stop = endp;
|
||||
}
|
||||
|
||||
if (!NILP (iso_classes) && in_classes (*p, iso_classes))
|
||||
{
|
||||
if (negate)
|
||||
break;
|
||||
else
|
||||
goto fwd_ok;
|
||||
}
|
||||
|
||||
if (!fastmap[*p])
|
||||
break;
|
||||
|
||||
fwd_unibyte_ok:
|
||||
p++, pos++;
|
||||
}
|
||||
}
|
||||
@ -1691,6 +1763,15 @@ skip_chars (forwardp, syntaxp, string, lim)
|
||||
p = prev_p - 1, c = *p, nbytes = 1;
|
||||
else
|
||||
c = STRING_CHAR (p, MAX_MULTIBYTE_LENGTH);
|
||||
|
||||
if (! NILP (iso_classes) && in_classes (c, iso_classes))
|
||||
{
|
||||
if (negate)
|
||||
break;
|
||||
else
|
||||
goto back_ok;
|
||||
}
|
||||
|
||||
if (SINGLE_BYTE_CHAR_P (c))
|
||||
{
|
||||
if (!fastmap[c])
|
||||
@ -1705,6 +1786,7 @@ skip_chars (forwardp, syntaxp, string, lim)
|
||||
if (!(negate ^ (i < n_char_ranges)))
|
||||
break;
|
||||
}
|
||||
back_ok:
|
||||
pos--, pos_byte -= nbytes;
|
||||
}
|
||||
else
|
||||
@ -1717,8 +1799,19 @@ skip_chars (forwardp, syntaxp, string, lim)
|
||||
p = GPT_ADDR;
|
||||
stop = endp;
|
||||
}
|
||||
|
||||
if (! NILP (iso_classes) && in_classes (p[-1], iso_classes))
|
||||
{
|
||||
if (negate)
|
||||
break;
|
||||
else
|
||||
goto fwd_ok;
|
||||
}
|
||||
|
||||
if (!fastmap[p[-1]])
|
||||
break;
|
||||
|
||||
back_unibyte_ok:
|
||||
p--, pos--;
|
||||
}
|
||||
}
|
||||
@ -1741,6 +1834,30 @@ skip_chars (forwardp, syntaxp, string, lim)
|
||||
return make_number (PT - start_point);
|
||||
}
|
||||
}
|
||||
|
||||
/* Return 1 if character C belongs to one of the ISO classes
|
||||
in the list ISO_CLASSES. Each class is represented by an
|
||||
integer which is its type according to re_wctype. */
|
||||
|
||||
static int
|
||||
in_classes (c, iso_classes)
|
||||
int c;
|
||||
Lisp_Object iso_classes;
|
||||
{
|
||||
int fits_class = 0;
|
||||
|
||||
while (! NILP (iso_classes))
|
||||
{
|
||||
Lisp_Object elt;
|
||||
elt = XCAR (iso_classes);
|
||||
iso_classes = XCDR (iso_classes);
|
||||
|
||||
if (re_iswctype (c, XFASTINT (elt)))
|
||||
fits_class = 1;
|
||||
}
|
||||
|
||||
return fits_class;
|
||||
}
|
||||
|
||||
/* Jump over a comment, assuming we are at the beginning of one.
|
||||
FROM is the current position.
|
||||
@ -2124,7 +2241,7 @@ scan_lists (from, count, depth, sexpflag)
|
||||
INC_BOTH (from, from_byte);
|
||||
UPDATE_SYNTAX_TABLE_FORWARD (from);
|
||||
if (from < stop && comstart_first
|
||||
&& SYNTAX_COMSTART_SECOND (FETCH_CHAR (from_byte))
|
||||
&& (c = FETCH_CHAR (from_byte), SYNTAX_COMSTART_SECOND (c))
|
||||
&& parse_sexp_ignore_comments)
|
||||
{
|
||||
/* we have encountered a comment start sequence and we
|
||||
@ -2449,7 +2566,7 @@ scan_lists (from, count, depth, sexpflag)
|
||||
Fcons (build_string ("Unbalanced parentheses"),
|
||||
Fcons (make_number (last_good),
|
||||
Fcons (make_number (from), Qnil))));
|
||||
|
||||
abort ();
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
@ -2588,8 +2705,8 @@ scan_sexps_forward (stateptr, from, from_byte, end, targetdepth,
|
||||
#define INC_FROM \
|
||||
do { prev_from = from; \
|
||||
prev_from_byte = from_byte; \
|
||||
prev_from_syntax \
|
||||
= SYNTAX_WITH_FLAGS (FETCH_CHAR (prev_from_byte)); \
|
||||
temp = FETCH_CHAR (prev_from_byte); \
|
||||
prev_from_syntax = SYNTAX_WITH_FLAGS (temp); \
|
||||
INC_BOTH (from, from_byte); \
|
||||
if (from < end) \
|
||||
UPDATE_SYNTAX_TABLE_FORWARD (from); \
|
||||
@ -2664,7 +2781,8 @@ do { prev_from = from; \
|
||||
curlevel->last = -1;
|
||||
|
||||
SETUP_SYNTAX_TABLE (prev_from, 1);
|
||||
prev_from_syntax = SYNTAX_WITH_FLAGS (FETCH_CHAR (prev_from_byte));
|
||||
temp = FETCH_CHAR (prev_from_byte);
|
||||
prev_from_syntax = SYNTAX_WITH_FLAGS (temp);
|
||||
UPDATE_SYNTAX_TABLE_FORWARD (from);
|
||||
|
||||
/* Enter the loop at a place appropriate for initial state. */
|
||||
@ -2743,7 +2861,8 @@ do { prev_from = from; \
|
||||
while (from < end)
|
||||
{
|
||||
/* Some compilers can't handle this inside the switch. */
|
||||
temp = SYNTAX (FETCH_CHAR (from_byte));
|
||||
temp = FETCH_CHAR (from_byte);
|
||||
temp = SYNTAX (temp);
|
||||
switch (temp)
|
||||
{
|
||||
case Scharquote:
|
||||
|
38
src/syntax.h
38
src/syntax.h
@ -68,16 +68,16 @@ enum syntaxcode
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define SYNTAX_ENTRY_FOLLOW_PARENT(table, c) \
|
||||
({ Lisp_Object tbl = table; \
|
||||
Lisp_Object temp = XCHAR_TABLE (tbl)->contents[(c)]; \
|
||||
while (NILP (temp)) \
|
||||
({ Lisp_Object _syntax_tbl = (table); \
|
||||
Lisp_Object _syntax_temp = XCHAR_TABLE (_syntax_tbl)->contents[(c)]; \
|
||||
while (NILP (_syntax_temp)) \
|
||||
{ \
|
||||
tbl = XCHAR_TABLE (tbl)->parent; \
|
||||
if (NILP (tbl)) \
|
||||
_syntax_tbl = XCHAR_TABLE (_syntax_tbl)->parent; \
|
||||
if (NILP (_syntax_tbl)) \
|
||||
break; \
|
||||
temp = XCHAR_TABLE (tbl)->contents[(c)]; \
|
||||
_syntax_temp = XCHAR_TABLE (_syntax_tbl)->contents[(c)]; \
|
||||
} \
|
||||
temp; })
|
||||
_syntax_temp; })
|
||||
#else
|
||||
extern Lisp_Object syntax_temp;
|
||||
extern Lisp_Object syntax_parent_lookup P_ ((Lisp_Object, int));
|
||||
@ -117,24 +117,24 @@ extern Lisp_Object syntax_parent_lookup P_ ((Lisp_Object, int));
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define SYNTAX(c) \
|
||||
({ Lisp_Object temp; \
|
||||
temp = SYNTAX_ENTRY (c); \
|
||||
(CONSP (temp) \
|
||||
? (enum syntaxcode) (XINT (XCAR (temp)) & 0xff) \
|
||||
({ Lisp_Object _syntax_temp; \
|
||||
_syntax_temp = SYNTAX_ENTRY (c); \
|
||||
(CONSP (_syntax_temp) \
|
||||
? (enum syntaxcode) (XINT (XCAR (_syntax_temp)) & 0xff) \
|
||||
: Swhitespace); })
|
||||
|
||||
#define SYNTAX_WITH_FLAGS(c) \
|
||||
({ Lisp_Object temp; \
|
||||
temp = SYNTAX_ENTRY (c); \
|
||||
(CONSP (temp) \
|
||||
? XINT (XCAR (temp)) \
|
||||
({ Lisp_Object _syntax_temp; \
|
||||
_syntax_temp = SYNTAX_ENTRY (c); \
|
||||
(CONSP (_syntax_temp) \
|
||||
? XINT (XCAR (_syntax_temp)) \
|
||||
: (int) Swhitespace); })
|
||||
|
||||
#define SYNTAX_MATCH(c) \
|
||||
({ Lisp_Object temp; \
|
||||
temp = SYNTAX_ENTRY (c); \
|
||||
(CONSP (temp) \
|
||||
? XCDR (temp) \
|
||||
({ Lisp_Object _syntax_temp; \
|
||||
_syntax_temp = SYNTAX_ENTRY (c); \
|
||||
(CONSP (_syntax_temp) \
|
||||
? XCDR (_syntax_temp) \
|
||||
: Qnil); })
|
||||
#else
|
||||
#define SYNTAX(c) \
|
||||
|
@ -3064,8 +3064,8 @@ defaults. */)
|
||||
|
||||
DEFUN ("select-window", Fselect_window, Sselect_window, 1, 2, 0,
|
||||
doc: /* Select WINDOW. Most editing will apply to WINDOW's buffer.
|
||||
If WINDOW is not already selected, also make WINDOW's buffer current.
|
||||
Also make WINDOW the frame's selected window.
|
||||
If WINDOW is not already selected, make WINDOW's buffer current
|
||||
and make WINDOW the frame's selected window.
|
||||
Optional second arg NORECORD non-nil means
|
||||
do not put this buffer at the front of the list of recently selected ones.
|
||||
|
||||
|
@ -4915,6 +4915,7 @@ If FRAME is omitted or nil, use the selected frame. */)
|
||||
|
||||
static INLINE int
|
||||
face_attr_equal_p (v1, v2)
|
||||
Lisp_Object v1, v2;
|
||||
{
|
||||
/* Type can differ, e.g. when one attribute is unspecified, i.e. nil,
|
||||
and the other is specified. */
|
||||
|
Loading…
Reference in New Issue
Block a user