annotate lisp/textmodes/table.el @ 71710:dbbc0b93cfeb

(Forcing Redisplay, Displaying Messages, Temporary Displays, Font Selection, Auto Faces, Font Lookup, Fringe Indicators, Display Margins, Image Descriptors, Showing Images, Image Cache, Button Types, Making Buttons, Manipulating Buttons, Button Buffer Commands, Display Table Format, Glyphs): Remove @tindex.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 08 Jul 2006 18:11:49 +0000
parents c2a4cb0acf5e
children a85c85db662c a8190f7e546e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; table.el --- create and edit WYSIWYG text based embedded tables
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
64751
5b1a238fcbb4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64695
diff changeset
3 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
68246
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
4 ;; 2005, 2006 Free Software Foundation, Inc.
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Keywords: wp, convenience
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Author: Takaaki Ota <Takaaki.Ota@am.sony.com>
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Created: Sat Jul 08 2000 13:28:45 (PST)
71107
c2a4cb0acf5e 2006-05-31 Takaaki Ota <Takaaki.Ota@am.sony.com>
Kim F. Storm <storm@cua.dk>
parents: 68571
diff changeset
9 ;; Revised: Tue May 30 2006 10:01:43 (PDT)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; any later version.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; GNU General Public License for more details.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64084
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 64059
diff changeset
25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 64059
diff changeset
26 ;; Boston, MA 02110-1301, USA.
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;;; Commentary:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; -------------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; Introduction:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; -------------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; This package provides text based table creation and editing
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; feature. With this package Emacs is capable of editing tables that
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; are embedded inside a text document, the feature similar to the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; ones seen in modern WYSIWYG word processors. A table is a
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; rectangular text area consisting from a surrounding frame and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; content inside the frame. The content is usually subdivided into
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; multiple rectangular cells, see the actual tables used below in
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; this document. Once a table is recognized, editing operation
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; inside a table cell is confined into that specific cell's
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;; rectangular area. This means that typing and deleting characters
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; inside a cell do not affect any outside text but introduces
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; appropriate formatting only to the cell contents. If necessary for
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; accommodating added text in the cell, the cell automatically grows
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; vertically and/or horizontally. The package uses no major mode nor
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;; minor mode for its implementation because the subject text is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;; localized within a buffer. Therefore the special behaviors inside
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;; a table cells are implemented by using keymap text property
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;; instead of buffer wide mode-map.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;; -----------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; Background:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;; -----------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;; Paul Georgief is one of my best friends. He became an Emacs
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;; convert after I recommended him trying it several years ago. Now
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;; we both are devoted disciples of Emacsism and elisp cult. One day
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;; in his Emacs exploration he asked me "Tak, what is a command to
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;; edit tables in Emacs?". This question started my journey of this
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;; table package development. May the code be with me! In the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;; software world Emacs is probably one of the longest lifetime record
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;; holders. Amazingly there have been no direct support for WYSIWYG
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;; table editing tasks in Emacs. Many people must have experienced
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;; manipulating existing overwrite-mode and picture-mode for this task
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; and only dreamed of having such a lisp package which supports this
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; specific task directly. Certainly, I have been one of them. The
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;; most difficult part of dealing with table editing in Emacs probably
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; is how to realize localized rectangular editing effect. Emacs has
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; no rectangular narrowing mechanism. Existing rect package provides
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;; basically kill, delete and yank operations of a rectangle, which
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;; internally is a mere list of strings. A simple approach for
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;; realizing the localized virtual rectangular operation is combining
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; rect package capability with a temporary buffer. Insertion and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;; deletion of a character to a table cell can be trapped by a
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;; function that copies the cell rectangle to a temporary buffer then
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;; apply the insertion/deletion to the temporary contents. Then it
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;; formats the contents by filling the paragraphs in order to fit it
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;; into the original rectangular area and finally copy it back to the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; original buffer. This simplistic approach has to bear with
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; significant performance hit. As cell grows larger the copying
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;; rectangle back and forth between the original buffer and the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;; temporary buffer becomes expensive and unbearably slow. It was
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;; completely impractical and an obvious failure. An idea has been
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;; borrowed from the original Emacs design to overcome this
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;; shortcoming. When the terminal screen update was slow and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;; expensive Emacs employed a clever algorithm to reduce actual screen
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;; update by removing redundant redrawing operations. Also the actual
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 ;; redrawing was done only when there was enough idling time. This
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 ;; technique significantly improved the previously mentioned
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 ;; undesirable situation. Now the original buffer's rectangle is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 ;; copied into a cache buffer only once. Any cell editing operation
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 ;; is done only to the cache contents. When there is enough idling
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 ;; time the original buffer's rectangle is updated with the current
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;; cache contents. This delayed operation is implemented by using
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 ;; Emacs's timer function. To reduce the visual awkwardness
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 ;; introduced by the delayed effect the cursor location is updated in
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 ;; real-time as a user types while the cell contents remains the same
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ;; until the next idling time. A key to the success of this approach
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 ;; is how to maintain cache coherency. As a user moves point in and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ;; out of a cell the table buffer contents and the cache buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ;; contents must be synchronized without a mistake. By observing user
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 ;; action carefully this is possible however not easy. Once this
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 ;; mechanism is firmly implemented the rest of table features grew in
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;; relatively painless progression. Those users who are familiar with
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;; Emacs internals appreciate this table package more. Because it
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ;; demonstrates how extensible Emacs is by showing something that
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 ;; appears like a magic. It lets you re-discover the potential of
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 ;; Emacs.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ;; -------------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;; Entry Points:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ;; -------------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;; If this is the first time for you to try this package, go ahead and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;; load the package by M-x `load-file' RET. Specify the package file
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ;; name "table.el". Then switch to a new test buffer and issue the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 ;; command M-x `table-insert' RET. It'll ask you number of columns,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 ;; number of rows, cell width and cell height. Give some small
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ;; numbers for each of them. Play with the resulted table for a
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;; while. If you have menu system find the item "Table" under "Tools"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 ;; and "Table" in the menu bar when the point is in a table cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 ;; Some of them are pretty intuitive and you can easily guess what
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ;; they do. M-x `describe-function' and get the documentation of
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 ;; `table-insert'. The document includes a short tutorial. When you
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 ;; are tired of guessing how it works come back to this document
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 ;; again.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 ;; To use the package regularly place this file in the site library
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 ;; directory and add the next expression in your .emacs file. Make
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 ;; sure that directory is included in the `load-path'.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 ;; (require 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 ;; Have the next expression also, if you want always be ready to edit
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 ;; tables inside text files. This mechanism is analogous to
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 ;; fontification in a sense that tables are recognized at editing time
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 ;; without having table information saved along with the text itself.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 ;; (add-hook 'text-mode-hook 'table-recognize)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 ;; Following is a table of entry points and brief description of each
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 ;; of them. The tables below are of course generated and edited by
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 ;; using this package. Not all the commands are bound to keys. Many
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 ;; of them must be invoked by "M-x" (`execute-extended-command')
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 ;; command. Refer to the section "Keymap" below for the commands
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 ;; available from keys.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 ;; +------------------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 ;; | User Visible Entry Points |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 ;; | Function | Description |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 ;; |`table-insert' |Insert a table consisting of grid |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 ;; | |of cells by specifying the number |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 ;; | |of COLUMNS, number of ROWS, cell |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 ;; | |WIDTH and cell HEIGHT. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 ;; |`table-insert-row' |Insert row(s) of cells before the |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 ;; | |current row that matches the |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 ;; | |current row structure. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 ;; |`table-insert-column' |Insert column(s) of cells before |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 ;; | |the current column that matches |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 ;; | |the current column structure. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 ;; |`table-delete-row' |Delete row(s) of cells. The row |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 ;; | |must consist from cells of the |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 ;; | |same height. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 ;; |`table-delete-column' |Delete column(s) of cells. The |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 ;; | |column must consist from cells of |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 ;; | |the same width. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 ;; |`table-recognize' |Recognize all tables in the |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 ;; |`table-unrecognize' |current buffer and |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 ;; | |activate/inactivate them. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 ;; |`table-recognize-region' |Recognize all the cells in a |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 ;; |`table-unrecognize-region' |region and activate/inactivate |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 ;; | |them. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 ;; |`table-recognize-table' |Recognize all the cells in a |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 ;; |`table-unrecognize-table' |single table and |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 ;; | |activate/inactivate them. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 ;; |`table-recognize-cell' |Recognize a cell. Find a cell |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 ;; |`table-unrecognize-cell' |which contains the current point |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 ;; | |and activate/inactivate that cell.|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 ;; |`table-forward-cell' |Move point to the next Nth cell in|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 ;; | |a table. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 ;; |`table-backward-cell' |Move point to the previous Nth |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 ;; | |cell in a table. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 ;; |`table-span-cell' |Span the current cell toward the |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 ;; | |specified direction and merge it |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 ;; | |with the adjacent cell. The |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 ;; | |direction is right, left, above or|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 ;; | |below. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 ;; |`table-split-cell-vertically' |Split the current cell vertically |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 ;; | |and create a cell above and a cell|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 ;; | |below the point location. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 ;; |`table-split-cell-horizontally'|Split the current cell |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 ;; | |horizontally and create a cell on |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 ;; | |the left and a cell on the right |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 ;; | |of the point location. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 ;; |`table-split-cell' |Split the current cell vertically |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 ;; | |or horizontally. This is a |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 ;; | |wrapper command to the other two |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 ;; | |orientation specific commands. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 ;; |`table-heighten-cell' |Heighten the current cell. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 ;; |`table-shorten-cell' |Shorten the current cell. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 ;; |`table-widen-cell' |Widen the current cell. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 ;; |`table-narrow-cell' |Narrow the current cell. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 ;; |`table-fixed-width-mode' |Toggle fixed width mode. In the |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 ;; | |fixed width mode, typing inside a |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 ;; | |cell never changes the cell width,|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 ;; | |while in the normal mode the cell |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 ;; | |width expands automatically in |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 ;; | |order to prevent a word being |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 ;; | |folded into multiple lines. Fixed|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 ;; | |width mode reverses video or |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 ;; | |underline the cell contents for |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 ;; | |its indication. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 ;; |`table-query-dimension' |Compute and report the current |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 ;; | |cell dimension, current table |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 ;; | |dimension and the number of |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 ;; | |columns and rows in the table. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 ;; |`table-generate-source' |Generate the source of the current|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 ;; | |table in the specified language |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 ;; | |and insert it into a specified |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 ;; | |buffer. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 ;; |`table-insert-sequence' |Travel cells forward while |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 ;; | |inserting a specified sequence |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 ;; | |string into each cell. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 ;; |`table-capture' |Convert plain text into a table by|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 ;; | |capturing the text in the region. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 ;; |`table-release' |Convert a table into plain text by|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 ;; | |removing the frame from a table. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 ;; |`table-justify' |Justify the contents of cell(s). |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 ;; +-------------------------------+----------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 ;; *Note*
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 ;; You may find that some of commonly expected table commands are
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 ;; missing such as copying a row/column and yanking it. Those
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 ;; functions can be obtained through existing Emacs text editing
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 ;; commands. Rows are easily manipulated with region commands and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 ;; columns can be copied and pasted through rectangle commands. After
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 ;; all a table is still a part of text in the buffer. Only the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 ;; special behaviors exist inside each cell through text properties.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 ;; `table-generate-html' which appeared in earlier releases is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 ;; deprecated in favor of `table-generate-source'. Now HTML is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 ;; treated as one of the languages used for describing the table's
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 ;; logical structure.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 ;; -------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 ;; Keymap:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 ;; -------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 ;; Although this package does not use a mode it does use its own
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 ;; keymap inside a table cell by way of keymap text property. Some of
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 ;; the standard basic editing commands bound to certain keys are
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 ;; replaced with the table specific version of corresponding commands.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 ;; This replacement combination is listed in the constant alist
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 ;; `table-command-remap-alist' declared below. This alist is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 ;; not meant to be user configurable but mentioned here for your
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 ;; better understanding of using this package. In addition, table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 ;; cells have some table specific bindings for cell navigation and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 ;; cell reformation. You can find these additional bindings in the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 ;; constant `table-cell-bindings'. Those key bound functions are
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 ;; considered as internal functions instead of normal commands,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 ;; therefore they have special prefix, *table-- instead of table-, for
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 ;; symbols. The purpose of this is to make it easier for a user to
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 ;; use command name completion. There is a "normal hooks" variable
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 ;; `table-cell-map-hook' prepared for users to override the default
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 ;; table cell bindings. Following is the table of predefined default
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 ;; key bound commands inside a table cell. Remember these bindings
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 ;; exist only inside a table cell. When your terminal is a tty, the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 ;; control modifier may not be available or applicable for those
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 ;; special characters. In this case use "C-cC-c", which is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 ;; customizable via `table-command-prefix', as the prefix key
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 ;; sequence. This should preceding the following special character
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 ;; without the control modifier. For example, use "C-cC-c|" instead
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 ;; of "C-|".
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 ;; +------------------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 ;; | Default Bindings in a Table Cell |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 ;; | Key | Function |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 ;; | TAB |Move point forward to the beginning of the next cell. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 ;; | "C->" |Widen the current cell. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 ;; | "C-<" |Narrow the current cell. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 ;; | "C-}" |Heighten the current cell. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 ;; | "C-{" |Shorten the current cell. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 ;; | "C--" |Split current cell vertically. (one above and one below) |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 ;; | "C-|" |Split current cell horizontally. (one left and one right) |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 ;; | "C-*" |Span current cell into adjacent one. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 ;; | "C-+" |Insert row(s)/column(s). |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 ;; | "C-!" |Toggle between normal mode and fixed width mode. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 ;; | "C-#" |Report cell and table dimension. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 ;; | "C-^" |Generate the source in a language from the current table. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 ;; | "C-:" |Justify the contents of cell(s). |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 ;; +-------+----------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 ;; *Note*
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 ;; When using `table-cell-map-hook' do not use `local-set-key'.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 ;; (add-hook 'table-cell-map-hook
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 ;; (function (lambda ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 ;; (local-set-key [<key sequence>] '<function>))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 ;; Above code is well known ~/.emacs idiom for customizing a mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 ;; specific keymap however it does not work for this package. This is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 ;; because there is no table mode in effect. This package does not
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 ;; use a local map therefor you must modify `table-cell-map'
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 ;; explicitly. The correct way of achieving above task is:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 ;; (add-hook 'table-cell-map-hook
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 ;; (function (lambda ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 ;; (define-key table-cell-map [<key sequence>] '<function>))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 ;; -----
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 ;; Menu:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 ;; -----
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 ;; If a menu system is available a group of table specific menu items,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 ;; "Table" under "Tools" section of the menu bar, is globally added
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 ;; after this package is loaded. The commands in this group are
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 ;; limited to the ones that are related to creation and initialization
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 ;; of tables, such as to insert a table, to insert rows and columns,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 ;; or recognize and unrecognize tables. Once tables are created and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 ;; point is placed inside of a table cell a table specific menu item
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 ;; "Table" appears directly on the menu bar. The commands in this
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 ;; menu give full control on table manipulation that include cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 ;; navigation, insertion, splitting, spanning, shrinking, expansion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 ;; and unrecognizing. In addition to above two types of menu there is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 ;; a pop-up menu available within a table cell. The content of pop-up
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 ;; menu is identical to the full table menu. [mouse-3] is the default
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 ;; button, defined in `table-cell-bindings', to bring up the pop-up
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 ;; menu. It can be reconfigured via `table-cell-map-hook'. The
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 ;; benefit of a pop-up menu is that it combines selection of the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 ;; location (which cell, where in the cell) and selection of the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 ;; desired operation into a single clicking action.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 ;; -------------------------------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 ;; Definition of tables and cells:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 ;; -------------------------------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 ;; There is no artificial-intelligence magic in this package. The
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 ;; definition of a table and the cells inside the table is reasonably
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 ;; limited in order to achieve acceptable performance in the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 ;; interactive operation under Emacs lisp implementation. A valid
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 ;; table is a rectangular text area completely filled with valid
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 ;; cells. A valid cell is a rectangle text area, which four borders
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 ;; consist of valid border characters. Cells can not be nested one to
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 ;; another or overlapped to each other except sharing the border
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 ;; lines. A valid character of a cell's vertical border is either
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 ;; table-cell-vertical-char `|' or table-cell-intersection-char `+'.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 ;; A valid character of a cell's horizontal border is either
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 ;; table-cell-horizontal-char `-' or table-cell-intersection-char `+'.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 ;; A valid character of the four corners of a cell must be
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 ;; table-cell-intersection-char `+'. A cell must contain at least one
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 ;; character space inside. There is no restriction about the contents
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 ;; of a table cell, however it is advised if possible to avoid using
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 ;; any of the border characters inside a table cell. Normally a few
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 ;; boarder characters inside a table cell are harmless. But it is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 ;; possible that they accidentally align up to emulate a bogus cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 ;; corner on which software relies on for cell recognition. When this
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 ;; happens the software may be fooled by it and fail to determine
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 ;; correct cell dimension.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 ;; Following are the examples of valid tables.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 ;; +--+----+---+ +-+ +--+-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 ;; | | | | | | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 ;; +--+----+---+ +-+ | +--+--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 ;; | | | | | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 ;; +--+----+---+ +--+--+ |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 ;; | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 ;; +-----+--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 ;; The next five tables are the examples of invalid tables. (From
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 ;; left to right, 1. nested cells 2. overlapped cells and a
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 ;; non-rectangle cell 3. non-rectangle table 4. zero width/height
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 ;; cells 5. zero sized cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 ;; +-----+ +-----+ +--+ +-++--+ ++
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 ;; | | | | | | | || | ++
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 ;; | +-+ | | | | | | || |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 ;; | | | | +--+ | +--+--+ +-++--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 ;; | +-+ | | | | | | | +-++--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 ;; | | | | | | | | | || |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 ;; +-----+ +--+--+ +--+--+ +-++--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 ;; Although the program may recognizes some of these invalid tables,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 ;; results from the subsequent editing operations inside those cells
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 ;; are not predictable and will most likely start destroying the table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 ;; structures.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 ;; It is strongly recommended to have at least one blank line above
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 ;; and below a table. For a table to coexist peacefully with
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 ;; surrounding environment table needs to be separated from unrelated
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 ;; text. This is necessary for the left table to grow or shrink
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 ;; horizontally without breaking the right table in the following
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 ;; example.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 ;; +-----+-----+-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 ;; +-----+-----+ | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 ;; | | | +-----+-----+-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 ;; +-----+-----+ | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 ;; +-----+-----+-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 ;; -------------------------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 ;; Cell contents formatting:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 ;; -------------------------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 ;; The cell contents are formatted by filling a paragraph immediately
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 ;; after characters are inserted into or deleted from a cell. Because
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 ;; of this, cell contents always remain fit inside a cell neatly. One
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 ;; drawback of this is that users do not have full control over
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 ;; spacing between words and line breaking. Only one space can be
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 ;; entered between words and up to two spaces between sentences. For
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 ;; a newline to be effective the new line must form a beginning of
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 ;; paragraph, otherwise it'll automatically be merged with the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 ;; previous line in a same paragraph. To form a new paragraph the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 ;; line must start with some space characters or immediately follow a
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 ;; blank line. Here is a typical example of how to list items within
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 ;; a cell. Without a space at the beginning of each line the items
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 ;; can not stand on their own.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 ;; +---------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 ;; |Each one of the following three |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 ;; |items starts with a space |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 ;; |character thus forms a paragraph |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 ;; |of its own. Limitations in cell |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 ;; |contents formatting are: |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 ;; | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 ;; | 1. Only one space between words.|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 ;; | 2. Up to two spaces between |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 ;; |sentences. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 ;; | 3. A paragraph must start with |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 ;; |spaces or follow a blank line. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 ;; | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 ;; |This paragraph stays away from |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 ;; |the item 3 because there is a |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 ;; |blank line between them. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 ;; +---------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 ;; In the normal operation table cell width grows automatically when
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 ;; certain word has to be folded into the next line if the width had
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 ;; not been increased. This normal operation is useful and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 ;; appropriate for most of the time, however, it is sometimes useful
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 ;; or necessary to fix the width of table and width of table cells.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 ;; For this purpose the package provides fixed width mode. You can
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 ;; toggle between fixed width mode and normal mode by "C-!".
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 ;; Here is a simple example of the fixed width mode. Suppose we have
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 ;; a table like this one.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 ;; +-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 ;; | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 ;; +-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 ;; In normal mode if you type a word "antidisestablishmentarianism" it
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 ;; grows the cell horizontally like this.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 ;; +----------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 ;; |antidisestablishmentarianism|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 ;; +----------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 ;; In the fixed width mode the same action produces the following
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 ;; result. The folded locations are indicated by a continuation
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 ;; character (`\' is the default). The continuation character is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 ;; treated specially so it is recommended to choose a character that
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 ;; does not appear elsewhere in table cells. This character is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 ;; configurable via customization and is kept in the variable
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 ;; `table-word-continuation-char'. The continuation character is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 ;; treated specially only in the fixed width mode and has no special
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 ;; meaning in the normal mode however.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 ;; +-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 ;; |anti\|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 ;; |dise\|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 ;; |stab\|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 ;; |lish\|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 ;; |ment\|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 ;; |aria\|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 ;; |nism |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 ;; +-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 ;; -------------------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 ;; Cell Justification:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 ;; -------------------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 ;; By default the cell contents are filled with left justification and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 ;; no vertical justification. A paragraph can be justified
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 ;; individually but only horizontally. Paragraph justification is for
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 ;; appearance only and does not change any structural information
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 ;; while cell justification affects table's structural information.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 ;; For cell justification a user can select horizontal justification
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 ;; and vertical justification independently. Horizontal justification
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 ;; must be one of the three 'left, 'center or 'right. Vertical
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 ;; justification can be 'top, 'middle, 'bottom or 'none. When a cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 ;; is justified, that information is recorded as a part of text
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 ;; property therefore the information is persistent as long as the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 ;; cell remains within the Emacs world. Even copying tables by region
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 ;; and rectangle manipulation commands preserve this information.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 ;; However, once the table text is saved as a file and the buffer is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 ;; killed the justification information vanishes permanently. To
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 ;; alleviate this shortcoming without forcing users to save and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 ;; maintain a separate attribute file, the table code detects
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 ;; justification of each cell when recognizing a table. This
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 ;; detection is done by guessing the justification by looking at the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 ;; appearance of the cell contents. Since it is a guessing work it
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 ;; does not guarantee the perfectness but it is designed to be
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 ;; practically good enough. The guessing algorithm is implemented in
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 ;; the function `table--detect-cell-alignment'. If you have better
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 ;; algorithm or idea any suggestion is welcome.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 ;; -----
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 ;; Todo: (in the order of priority, some are just possibility)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 ;; -----
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 ;; Fix compatibilities with other input method than quail
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 ;; Resolve conflict with flyspell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 ;; Use mouse for resizing cells
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 ;; A mechanism to link cells internally
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 ;; Consider the use of variable width font under Emacs 21
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 ;; Consider the use of `:box' face attribute under Emacs 21
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 ;; Consider the use of `modification-hooks' text property instead of
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 ;; rebinding the keymap
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 ;; Maybe provide complete XEmacs support in the future however the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 ;; "extent" is the single largest obstacle lying ahead, read the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 ;; document in Emacs info.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 ;; (eval '(progn (require 'info) (Info-find-node "elisp" "Not Intervals")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 ;; ---------------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 ;; Acknowledgment:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 ;; ---------------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 ;; Table would not have been possible without the help and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 ;; encouragement of the following spirited contributors.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 ;; Paul Georgief <georgief@igpp.ucsd.edu> has been the best tester
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 ;; of the code as well as the constructive criticizer.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 ;; Gerd Moellmann <gerd@gnu.org> gave me useful suggestions from Emacs
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 ;; 21 point of view.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 ;; Richard Stallman <rms@gnu.org> showed the initial interest in this
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 ;; attempt of implementing the table feature to Emacs. This greatly
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 ;; motivated me to follow through to its completion.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 ;; Kenichi Handa <handa@etl.go.jp> kindly guided me through to
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 ;; overcome many technical issues while I was struggling with quail
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 ;; related internationalization problems.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 ;; Christoph Conrad <christoph.conrad@gmx.de> suggested making symbol
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 ;; names consistent as well as fixing several bugs.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 ;; Paul Lew <paullew@cisco.com> suggested implementing fixed width
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 ;; mode as well as multi column width (row height) input interface.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 ;; Michael Smith <smith@xml-doc.org> a well-informed DocBook user
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 ;; asked for CALS table source generation and helped me following
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 ;; through the work by offering valuable suggestions and testing out
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 ;; the code. Jorge Godoy <godoy@conectiva.com> has also suggested
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 ;; supporting for DocBook tables.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 ;; And many other individuals who reported bugs and suggestions.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 ;;; Code:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 ;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 ;;; Compatibility:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 ;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 ;; hush up the byte-compiler
68246
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
624 (defvar quail-translating)
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
625 (defvar quail-converting)
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
626 (defvar flyspell-mode)
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
627 (defvar real-last-command)
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
628 (defvar delete-selection-mode)
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
629 ;; This is evil!!
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
630 ;; (eval-when-compile
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
631 ;; (unless (fboundp 'set-face-property)
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
632 ;; (defun set-face-property (face prop value)))
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
633 ;; (unless (fboundp 'unibyte-char-to-multibyte)
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
634 ;; (defun unibyte-char-to-multibyte (char)))
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
635 ;; (defun table--point-in-cell-p (&optional location)))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 ;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 ;;; Customization:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 ;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 (defgroup table nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 "Text based table manipulation utilities.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 See `table-insert' for examples about how to use."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 :tag "Table"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 :prefix "table-"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 :group 'editing
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 :group 'wp
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 :group 'paragraphs
57938
d54496881232 (table group): Add :version.
Richard M. Stallman <rms@gnu.org>
parents: 55906
diff changeset
650 :group 'fill
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 57938
diff changeset
651 :version "22.1")
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652
48373
4c02bb10da9a (defgroup table-hooks): New group.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 47247
diff changeset
653 (defgroup table-hooks nil
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
654 "Hooks for table manipulation utilities."
48373
4c02bb10da9a (defgroup table-hooks): New group.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 47247
diff changeset
655 :group 'table)
4c02bb10da9a (defgroup table-hooks): New group.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 47247
diff changeset
656
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 (defcustom table-time-before-update 0.2
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 "*Time in seconds before updating the cell contents after typing.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 Updating the cell contents on the screen takes place only after this
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 specified amount of time has passed after the last modification to the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 cell contents. When the contents of a table cell changes repetitively
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 and frequently the updating the cell contents on the screen is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 deferred until at least this specified amount of quiet time passes. A
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 smaller number wastes more computation resource by unnecessarily
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 frequent screen update. A large number presents noticeable and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 annoying delay before the typed result start appearing on the screen."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 :tag "Time Before Cell Update"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 :type 'number
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 (defcustom table-time-before-reformat 0.2
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 "*Time in seconds before reformatting the table.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 This many seconds must pass in addition to `table-time-before-update'
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 before the table is updated with newly widened width or heightened
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 height."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 :tag "Time Before Cell Reformat"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 :type 'number
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 (defcustom table-command-prefix [(control c) (control c)]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 "*Key sequence to be used as prefix for table command key bindings."
47247
1278169531f1 (table-command-prefix): Fix type.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 46933
diff changeset
682 :type '(vector (repeat :inline t sexp))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 :tag "Table Command Prefix"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685
63227
6f4701bb40a7 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-391
Miles Bader <miles@gnu.org>
parents: 62578
diff changeset
686 (defface table-cell
61394
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 60724
diff changeset
687 '((((min-colors 88) (class color))
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 60724
diff changeset
688 (:foreground "gray90" :background "blue1"))
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 60724
diff changeset
689 (((class color))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 (:foreground "gray90" :background "blue"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 (t (:bold t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 "*Face used for table cell contents."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 :tag "Cell Face"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
696 (defcustom table-cell-horizontal-chars "-="
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
697 "*Characters that may be used for table cell's horizontal border line."
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
698 :tag "Cell Horizontal Boundary Characters"
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
699 :type 'string
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 (defcustom table-cell-vertical-char ?\|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 "*Character that forms table cell's vertical border line."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 :tag "Cell Vertical Boundary Character"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 :type 'character
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 (defcustom table-cell-intersection-char ?\+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 "*Character that forms table cell's corner."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 :tag "Cell Intersection Character"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 :type 'character
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 (defcustom table-word-continuation-char ?\\
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 "*Character that indicates word continuation into the next line.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 This character has a special meaning only in the fixed width mode,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 that is when `table-fixed-width-mode' is non-nil . In the fixed width
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 mode this character indicates that the location is continuing into the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 next line. Be careful about the choice of this character. It is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 treated substantially different manner than ordinary characters. Try
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 select a character that is unlikely to appear in your document."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 :tag "Cell Word Continuation Character"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 :type 'character
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 (defun table-set-table-fixed-width-mode (variable value)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 (if (fboundp variable)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 (funcall variable (if value 1 -1))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 (defun table-initialize-table-fixed-width-mode (variable value)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 (set variable value))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 (defcustom table-fixed-width-mode nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 "*Cell width is fixed when this is non-nil.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 Normally it should be nil for allowing automatic cell width expansion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 that widens a cell when it is necessary. When non-nil, typing in a
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 cell does not automatically expand the cell width. A word that is too
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 long to fit in a cell is chopped into multiple lines. The chopped
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 location is indicated by `table-word-continuation-char'. This
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 variable's value can be toggled by \\[table-fixed-width-mode] at
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 run-time."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 :tag "Fix Cell Width"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 :type 'boolean
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 :initialize 'table-initialize-table-fixed-width-mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 :set 'table-set-table-fixed-width-mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 (defcustom table-detect-cell-alignment t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 "*Detect cell contents alignment automatically.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 When non-nil cell alignment is automatically determined by the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 appearance of the current cell contents when recognizing tables as a
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 whole. This applies to `table-recognize', `table-recognize-region'
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 and `table-recognize-table' but not to `table-recognize-cell'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 :tag "Detect Cell Alignment"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 :type 'boolean
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 (defcustom table-dest-buffer-name "table"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 "*Default buffer name (without a suffix) for source generation."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 :tag "Source Buffer Name"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 :type 'string
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 (defcustom table-html-delegate-spacing-to-user-agent nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 "*Non-nil delegates cell contents spacing entirely to user agent.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 Otherwise, when nil, it preserves the original spacing and line breaks."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 :tag "HTML delegate spacing"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 :type 'boolean
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 (defcustom table-html-th-rows 0
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 "*Number of top rows to become header cells automatically in HTML generation."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 :tag "HTML Header Rows"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 :type 'integer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777 (defcustom table-html-th-columns 0
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 "*Number of left columns to become header cells automatically in HTML generation."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 :tag "HTML Header Columns"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 :type 'integer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 (defcustom table-html-table-attribute "border=\"1\""
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 "*Table attribute that applies to the table in HTML generation."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 :tag "HTML table attribute"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 :type 'string
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 (defcustom table-html-cell-attribute ""
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 "*Cell attribute that applies to all cells in HTML generation.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 Do not specify \"align\" and \"valign\" because they are determined by
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 the cell contents dynamically."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 :tag "HTML cell attribute"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 :type 'string
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 (defcustom table-cals-thead-rows 1
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 "*Number of top rows to become header rows in CALS table."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 :tag "CALS Header Rows"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 :type 'integer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 (defcustom table-cell-map-hook nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 "*Normal hooks run when finishing construction of `table-cell-map'.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 User can modify `table-cell-map' by adding custom functions here."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 :tag "Cell Keymap Hooks"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 :type 'hook
48373
4c02bb10da9a (defgroup table-hooks): New group.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 47247
diff changeset
809 :group 'table-hooks)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 (defcustom table-disable-incompatibility-warning nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 "*Disable compatibility warning notice.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 When nil user is reminded of known incompatible issues."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814 :tag "Disable Incompatibility Warning"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 :type 'boolean
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 (defcustom table-abort-recognition-when-input-pending t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 "*Abort current recognition process when input pending.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 Abort current recognition process when we are not sure that no input
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 is available. When non-nil lengthy recognition process is aborted
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 simply by any key input."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 :tag "Abort Recognition When Input Pending"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 :type 'boolean
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 :group 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 (defcustom table-load-hook nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 "*List of functions to be called after the table is first loaded."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 :type 'hook
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 :group 'table-hooks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 (defcustom table-point-entered-cell-hook nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 "*List of functions to be called after point entered a table cell."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 :type 'hook
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 :group 'table-hooks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 (defcustom table-point-left-cell-hook nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 "*List of functions to be called after point left a table cell."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 :type 'hook
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 :group 'table-hooks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844
64695
82f489b3958d (table-yank-handler): Change defcustom to defvar.
Kim F. Storm <storm@cua.dk>
parents: 64084
diff changeset
845 (defvar table-yank-handler '(nil nil t nil)
82f489b3958d (table-yank-handler): Change defcustom to defvar.
Kim F. Storm <storm@cua.dk>
parents: 64084
diff changeset
846 "Yank handler for tables.")
53367
fbdcff26f02a (table-yank-handler): New defcustom.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
847
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 (setplist 'table-disable-incompatibility-warning nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 (defvar table-disable-menu (null (and (locate-library "easymenu")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 (require 'easymenu)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 (fboundp 'easy-menu-add-item)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 "*When non-nil, use of menu by table package is disabled.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 It must be set before loading this package `table.el' for the first
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 time.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 ;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 ;;; Implementation:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 ;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 ;;; Internal variables and constants
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 ;;; No need of user configuration
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 (defconst table-paragraph-start "[ \t\n\f]"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 "*Regexp for beginning of a line that starts OR separates paragraphs.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 (defconst table-cache-buffer-name " *table cell cache*"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869 "Cell cache buffer name.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 (defvar table-cell-info-lu-coordinate nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871 "Zero based coordinate of the cached cell's left upper corner.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 (defvar table-cell-info-rb-coordinate nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 "Zero based coordinate of the cached cell's right bottom corner.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 (defvar table-cell-info-width nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875 "Number of characters per cached cell width.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876 (defvar table-cell-info-height nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 "Number of lines per cached cell height.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 (defvar table-cell-info-justify nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 "Justification information of the cached cell.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 (defvar table-cell-info-valign nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 "Vertical alignment information of the cached cell.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 (defvar table-cell-self-insert-command-count 0
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 "Counter for undo control.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 (defvar table-cell-map nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 "Keymap for table cell contents.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 (defvar table-cell-global-map-alist nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 "Alist of copy of global maps that are substituted in `table-cell-map'.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 (defvar table-global-menu-map nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 "Menu map created via `easy-menu-define'.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 (defvar table-cell-menu-map nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 "Menu map created via `easy-menu-define'.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892 (defvar table-cell-buffer nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 "Buffer that contains the table cell.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 (defvar table-cell-cache-point-coordinate nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 "Cache point coordinate based from the cell origin.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 (defvar table-cell-cache-mark-coordinate nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 "Cache mark coordinate based from the cell origin.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 (defvar table-cell-entered-state nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 "Records the state whether currently in a cell or nor.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 (defvar table-update-timer nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 "Timer id for deferred cell update.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 (defvar table-widen-timer nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 "Timer id for deferred cell update.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 (defvar table-heighten-timer nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 "Timer id for deferred cell update.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 (defvar table-inhibit-update nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 "Non-nil inhibits implicit cell and cache updates.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 It inhibits `table-with-cache-buffer' to update data in both direction, cell to cache and cache to cell.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 (defvar table-inhibit-auto-fill-paragraph nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 "Non-nil inhibits auto fill paragraph when `table-with-cache-buffer' exits.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 This is always set to nil at the entry to `table-with-cache-buffer' before executing body forms.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 (defvar table-mode-indicator nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 "For mode line indicator")
68246
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
914 ;; This is not a real minor-mode but placed in the minor-mode-alist
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
915 ;; so that we can show the indicator on the mode line handy.
68271
fe442ba33e0a (table-mode-indicator): Typo in last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68246
diff changeset
916 (make-variable-buffer-local 'table-mode-indicator)
68246
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
917 (unless (assq table-mode-indicator minor-mode-alist)
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
918 (push '(table-mode-indicator (table-fixed-width-mode " Fixed-Table" " Table"))
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
919 minor-mode-alist))
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
920
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 (defconst table-source-languages '(html latex cals)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 "Supported source languages.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 (defvar table-source-info-plist nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 "General storage for temporary information used while generating source.")
68246
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
925
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 ;;; The following history containers not only keep the history of user
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 ;;; entries but also serve as the default value providers. When an
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 ;;; interactive command is invoked it offers a user the latest entry
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 ;;; of the history as a default selection. Therefore the values below
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 ;;; are the first default value when a command is invoked for the very
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 ;;; first time when there is no real history existing yet.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 (defvar table-cell-span-direction-history '("right"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 (defvar table-cell-split-orientation-history '("horizontally"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 (defvar table-cell-split-contents-to-history '("split"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 (defvar table-insert-row-column-history '("row"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 (defvar table-justify-history '("center"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 (defvar table-columns-history '("3"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 (defvar table-rows-history '("3"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 (defvar table-cell-width-history '("5"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 (defvar table-cell-height-history '("1"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 (defvar table-source-caption-history '("Table"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 (defvar table-sequence-string-history '("0"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 (defvar table-sequence-count-history '("0"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 (defvar table-sequence-increment-history '("1"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 (defvar table-sequence-interval-history '("1"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 (defvar table-sequence-justify-history '("left"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 (defvar table-source-language-history '("html"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 (defvar table-col-delim-regexp-history '(""))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 (defvar table-row-delim-regexp-history '(""))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 (defvar table-capture-justify-history '("left"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 (defvar table-capture-min-cell-width-history '("5"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 (defvar table-capture-columns-history '(""))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 (defvar table-target-history '("cell"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 ;;; Some entries in `table-cell-bindings' are duplicated in
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 ;;; `table-command-remap-alist'. There is a good reason for
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 ;;; this. Common key like return key may be taken by some other
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 ;;; function than normal `newline' function. Thus binding return key
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 ;;; directly for `*table--cell-newline' ensures that the correct enter
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 ;;; operation in a table cell. However
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 ;;; `table-command-remap-alist' has an additional role than
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 ;;; replacing commands. It is also used to construct a table command
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 ;;; list. This list is very important because it is used to check if
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 ;;; the previous command was one of them in this list or not. If the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 ;;; previous command is found in the list the current command will not
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 ;;; refill the table cache. If the command were not listed fast
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 ;;; typing can cause unwanted cache refill.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 (defconst table-cell-bindings
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 '(([(control i)] . table-forward-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 ([(control I)] . table-backward-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 ([tab] . table-forward-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 ([(shift backtab)] . table-backward-cell) ; for HPUX console keyboard
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 ([(shift iso-lefttab)] . table-backward-cell) ; shift-tab on a microsoft natural keyboard and redhat linux
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 ([(shift tab)] . table-backward-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 ([return] . *table--cell-newline)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 ([(control m)] . *table--cell-newline)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 ([(control j)] . *table--cell-newline-and-indent)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 ([mouse-3] . *table--present-cell-popup-menu)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 ([(control ?>)] . table-widen-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 ([(control ?<)] . table-narrow-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 ([(control ?})] . table-heighten-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 ([(control ?{)] . table-shorten-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983 ([(control ?-)] . table-split-cell-vertically)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 ([(control ?|)] . table-split-cell-horizontally)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 ([(control ?*)] . table-span-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 ([(control ?+)] . table-insert-row-column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 ([(control ?!)] . table-fixed-width-mode)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 ([(control ?#)] . table-query-dimension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 ([(control ?^)] . table-generate-source)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 ([(control ?:)] . table-justify)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 )
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 "Bindings for table cell commands.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
994 (defvar table-command-remap-alist
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 '((self-insert-command . *table--cell-self-insert-command)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 (completion-separator-self-insert-autofilling . *table--cell-self-insert-command)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997 (completion-separator-self-insert-command . *table--cell-self-insert-command)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 (delete-char . *table--cell-delete-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 (delete-backward-char . *table--cell-delete-backward-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 (backward-delete-char . *table--cell-delete-backward-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001 (backward-delete-char-untabify . *table--cell-delete-backward-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 (newline . *table--cell-newline)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003 (newline-and-indent . *table--cell-newline-and-indent)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 (open-line . *table--cell-open-line)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 (quoted-insert . *table--cell-quoted-insert)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 (describe-mode . *table--cell-describe-mode)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 (describe-bindings . *table--cell-describe-bindings)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 (dabbrev-expand . *table--cell-dabbrev-expand)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 (dabbrev-completion . *table--cell-dabbrev-completion))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010 "List of cons cells consisting of (ORIGINAL-COMMAND . TABLE-VERSION-OF-THE-COMMAND).")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
1012 (defvar table-command-list nil
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 "List of commands that override original commands.")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 ;; construct the real contents of the `table-command-list'
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 (let ((remap-alist table-command-remap-alist))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 (setq table-command-list nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 (while remap-alist
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 (setq table-command-list (cons (cdar remap-alist) table-command-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 (setq remap-alist (cdr remap-alist))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 (defconst table-global-menu
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 '("Table"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 ("Insert"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024 ["a Table..." table-insert
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 :active (and (not buffer-read-only) (not (table--probe-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 :help "Insert a text based table at point"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 ["Row" table-insert-row
60724
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
1028 :active (table--row-column-insertion-point-p)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 :help "Insert row(s) of cells in table"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 ["Column" table-insert-column
60724
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
1031 :active (table--row-column-insertion-point-p 'column)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 :help "Insert column(s) of cells in table"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033 "----"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 ("Recognize"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 ["in Buffer" table-recognize
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 :active t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037 :help "Recognize all tables in the current buffer"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038 ["in Region" table-recognize-region
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 :active (and mark-active (not (eq (mark t) (point))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 :help "Recognize all tables in the current region"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 ["a Table" table-recognize-table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 :active (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043 :help "Recognize a table at point"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 ["a Cell" table-recognize-cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 :active (let ((cell (table--probe-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046 (and cell (null (table--at-cell-p (car cell)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047 :help "Recognize a cell at point"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 ("Unrecognize"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 ["in Buffer" table-unrecognize
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 :active t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 :help "Unrecognize all tables in the current buffer"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 ["in Region" table-unrecognize-region
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053 :active (and mark-active (not (eq (mark t) (point))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054 :help "Unrecognize all tables in the current region"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 ["a Table" table-unrecognize-table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 :active (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 :help "Unrecognize the current table"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 ["a Cell" table-unrecognize-cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 :active (let ((cell (table--probe-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 (and cell (table--at-cell-p (car cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 :help "Unrecognize the current cell"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 "----"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 ["Capture Region" table-capture
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 :active (and (not buffer-read-only) mark-active (not (eq (mark t) (point))) (not (table--probe-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 :help "Capture text in the current region as a table"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 ["Release" table-release
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 :help "Release the current table as plain text"]))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 (defconst table-cell-menu
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 '("Table"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 ("Insert"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 ["Row" table-insert-row
60724
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
1074 :active (table--row-column-insertion-point-p)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 :help "Insert row(s) of cells in table"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 ["Column" table-insert-column
60724
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
1077 :active (table--row-column-insertion-point-p 'column)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 :help "Insert column(s) of cells in table"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 ("Delete"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 ["Row" table-delete-row
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 :help "Delete row(s) of cells in table"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 ["Column" table-delete-column
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 :help "Delete column(s) of cells in table"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 "----"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087 ("Split a Cell"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 ["Horizontally" table-split-cell-horizontally
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089 :active (table--cell-can-split-horizontally-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 :help "Split the current cell horizontally at point"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 ["Vertically" table-split-cell-vertically
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 :active (table--cell-can-split-vertically-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 :help "Split the current cell vertical at point"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 ("Span a Cell to"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 ["Right" (table-span-cell 'right)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 :active (table--cell-can-span-p 'right)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 :help "Span the current cell into the right cell"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 ["Left" (table-span-cell 'left)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 :active (table--cell-can-span-p 'left)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 :help "Span the current cell into the left cell"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 ["Above" (table-span-cell 'above)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 :active (table--cell-can-span-p 'above)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103 :help "Span the current cell into the cell above"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 ["Below" (table-span-cell 'below)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 :active (table--cell-can-span-p 'below)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 :help "Span the current cell into the cell below"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 "----"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 ("Shrink Cells"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 ["Horizontally" table-narrow-cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 :help "Shrink the current cell horizontally"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 ["Vertically" table-shorten-cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 :help "Shrink the current cell vertically"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 ("Expand Cells"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 ["Horizontally" table-widen-cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 :help "Expand the current cell horizontally"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 ["Vertically" table-heighten-cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 :help "Expand the current cell vertically"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 "----"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 ("Justify"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 ("a Cell"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 ["Left" (table-justify-cell 'left)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 :help "Left justify the contents of the current cell"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 ["Center" (table-justify-cell 'center)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 :help "Center justify the contents of the current cell"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 ["Right" (table-justify-cell 'right)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 :help "Right justify the contents of the current cell"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 "----"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 ["Top" (table-justify-cell 'top)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137 :help "Top align the contents of the current cell"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 ["Middle" (table-justify-cell 'middle)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140 :help "Middle align the contents of the current cell"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 ["Bottom" (table-justify-cell 'bottom)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143 :help "Bottom align the contents of the current cell"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 ["None" (table-justify-cell 'none)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 :help "Remove vertical alignment from the current cell"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147 ("a Row"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 ["Left" (table-justify-row 'left)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150 :help "Left justify the contents of all cells in the current row"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151 ["Center" (table-justify-row 'center)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 :help "Center justify the contents of all cells in the current row"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154 ["Right" (table-justify-row 'right)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156 :help "Right justify the contents of all cells in the current row"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157 "----"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158 ["Top" (table-justify-row 'top)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1159 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 :help "Top align the contents of all cells in the current row"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161 ["Middle" (table-justify-row 'middle)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 :help "Middle align the contents of all cells in the current row"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 ["Bottom" (table-justify-row 'bottom)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 :help "Bottom align the contents of all cells in the current row"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 ["None" (table-justify-cell 'none)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 :help "Remove vertical alignment from all cells in the current row"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170 ("a Column"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 ["Left" (table-justify-column 'left)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173 :help "Left justify the contents of all cells in the current column"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1174 ["Center" (table-justify-column 'center)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1176 :help "Center justify the contents of all cells in the current column"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 ["Right" (table-justify-column 'right)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1178 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179 :help "Right justify the contents of all cells in the current column"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 "----"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 ["Top" (table-justify-column 'top)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 :help "Top align the contents of all cells in the current column"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 ["Middle" (table-justify-column 'middle)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 :help "Middle align the contents of all cells in the current column"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187 ["Bottom" (table-justify-column 'bottom)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 :help "Bottom align the contents of all cells in the current column"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 ["None" (table-justify-cell 'none)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192 :help "Remove vertical alignment from all cells in the current column"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193 ("a Paragraph"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194 ["Left" (table-justify-cell 'left t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1196 :help "Left justify the current paragraph"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197 ["Center" (table-justify-cell 'center t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199 :help "Center justify the current paragraph"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 ["Right" (table-justify-cell 'right t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202 :help "Right justify the current paragraph"]))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203 "----"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204 ["Query Dimension" table-query-dimension
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205 :active (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206 :help "Get the dimension of the current cell and the current table"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207 ["Generate Source" table-generate-source
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 :active (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209 :help "Generate source of the current table in the specified language"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 ["Insert Sequence" table-insert-sequence
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1211 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212 :help "Travel cells forward while inserting a specified sequence string in each cell"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1213 ("Unrecognize"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1214 ["a Table" table-unrecognize-table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1215 :active (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 :help "Unrecognize the current table"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 ["a Cell" table-unrecognize-cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 :active (let ((cell (table--probe-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 (and cell (table--at-cell-p (car cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220 :help "Unrecognize the current cell"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221 ["Release" table-release
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 :active (table--editable-cell-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 :help "Release the current table as plain text"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 ("Configure Width to"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225 ["Auto Expand Mode" (table-fixed-width-mode -1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 :active t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227 :style radio
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228 :selected (not table-fixed-width-mode)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 :help "A mode that allows automatic horizontal cell expansion"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 ["Fixed Width Mode" (table-fixed-width-mode 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231 :active t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 :style radio
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 :selected table-fixed-width-mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234 :help "A mode that does not allow automatic horizontal cell expansion"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 ("Navigate"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236 ["Forward Cell" table-forward-cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237 :active (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238 :help "Move point forward by cell(s)"]
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1239 ["Backward Cell" table-backward-cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240 :active (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 :help "Move point backward by cell(s)"])
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242 ))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 ;; XEmacs causes an error when encountering unknown keywords in the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1245 ;; menu definition. Specifically the :help keyword is new in Emacs 21
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246 ;; and causes error for the XEmacs function `check-menu-syntax'. IMHO
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 ;; it is unwise to generate an error for unknown keywords because it
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 ;; kills the nice backward compatible extensibility of keyword use.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 ;; Unknown keywords should be quietly ignore so that future extension
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 ;; does not cause a problem in the old implementation. Sigh...
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251 (when (featurep 'xemacs)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 (mapcar
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 (defun table--tweak-menu-for-xemacs (menu)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 ((listp menu)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256 (mapcar 'table--tweak-menu-for-xemacs menu))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1257 ((vectorp menu)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258 (let ((i 0) (len (length menu)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1259 (while (< i len)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260 ;; replace :help with something harmless.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261 (if (eq (aref menu i) :help) (aset menu i :included))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 (setq i (1+ i)))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263 (list table-global-menu table-cell-menu))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1264 (defvar mark-active t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 ;; register table menu under global tools menu
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 (unless table-disable-menu
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 (easy-menu-define table-global-menu-map nil "Table global menu" table-global-menu)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 (if (featurep 'xemacs)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271 (easy-menu-add-item nil '("Tools") table-global-menu-map))
62578
ebbe0a507fe4 (table-disable-menu): Add separator as a string so that tmm doesn't create
Eli Zaretskii <eliz@gnu.org>
parents: 62531
diff changeset
1272 (easy-menu-add-item (current-global-map) '("menu-bar" "tools") "--")
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273 (easy-menu-add-item (current-global-map) '("menu-bar" "tools") table-global-menu-map)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1275 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 ;; Macros
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 (defmacro table-with-cache-buffer (&rest body)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 "Execute the forms in BODY with table cache buffer as the current buffer.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 This macro simplifies the rest of the work greatly by condensing the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 common idiom used in many of the cell manipulation functions. It does
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284 not return any meaningful value.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286 Save the current buffer and set the cache buffer as the current
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1287 buffer. Move the point to the cache buffer coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288 `table-cell-cache-point-coordinate'. After BODY forms are executed,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 the paragraph is filled as long as `table-inhibit-auto-fill-paragraph'
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290 remains nil. BODY can set it to t when it does not want to fill the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1291 paragraph. If necessary the cell width and height are extended as the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1292 consequence of cell content modification by the BODY. Then the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1293 current buffer is restored to the original one. The last cache point
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1294 coordinate is stored in `table-cell-cache-point-coordinate'. The
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1295 original buffer's point is moved to the location that corresponds to
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296 the last cache point coordinate."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1297 (let ((height-expansion (make-symbol "height-expansion-var-symbol"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1298 (width-expansion (make-symbol "width-expansion-var-symbol")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1299 `(let (,height-expansion ,width-expansion)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1300 ;; make sure cache has valid data unless it is explicitly inhibited.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1301 (unless table-inhibit-update
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1302 (table-recognize-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1303 (with-current-buffer (get-buffer-create table-cache-buffer-name)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1304 ;; goto the cell coordinate based on `table-cell-cache-point-coordinate'.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1305 (set-mark (table--goto-coordinate table-cell-cache-mark-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1306 (table--goto-coordinate table-cell-cache-point-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1307 (table--untabify-line)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1308 ;; always reset before executing body forms because auto-fill behavior is the default.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1309 (setq table-inhibit-auto-fill-paragraph nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 ;; do the body
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1311 ,@body
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1312 ;; fill paragraph unless the body does not want to by setting `table-inhibit-auto-fill-paragraph'.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1313 (unless table-inhibit-auto-fill-paragraph
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1314 (if (and table-cell-info-justify
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1315 (not (eq table-cell-info-justify 'left)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1316 (table--fill-region (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1317 (table--fill-region
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1318 (save-excursion (forward-paragraph -1) (point))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319 (save-excursion (forward-paragraph 1) (point)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320 ;; keep the updated cell coordinate.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1321 (setq table-cell-cache-point-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1322 ;; determine the cell width expansion.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1323 (setq ,width-expansion (table--measure-max-width))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1324 (if (<= ,width-expansion table-cell-info-width) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1325 (table--fill-region (point-min) (point-max) ,width-expansion)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1326 ;; keep the updated cell coordinate.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1327 (setq table-cell-cache-point-coordinate (table--get-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1328 (setq ,width-expansion (- ,width-expansion table-cell-info-width))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1329 ;; determine the cell height expansion.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1330 (if (looking-at "\\s *\\'") nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1331 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1332 (if (re-search-forward "\\(\\s *\\)\\'" nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1333 (goto-char (match-beginning 1))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1334 (setq ,height-expansion (- (cdr (table--get-coordinate)) (1- table-cell-info-height))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1335 ;; now back to the table buffer.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1336 ;; expand the cell width in the table buffer if necessary.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1337 (if (> ,width-expansion 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 (table-widen-cell ,width-expansion 'no-copy 'no-update))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339 ;; expand the cell height in the table buffer if necessary.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1340 (if (> ,height-expansion 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1341 (table-heighten-cell ,height-expansion 'no-copy 'no-update))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342 ;; do valign
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343 (with-current-buffer (get-buffer-create table-cache-buffer-name)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1344 (table--goto-coordinate table-cell-cache-point-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1345 (setq table-cell-cache-point-coordinate (table--valign)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1346 ;; move the point in the table buffer to the location that corresponds to
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1347 ;; the location in the cell cache buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1348 (table--goto-coordinate (table--transcoord-cache-to-table table-cell-cache-point-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1349 ;; set up the update timer unless it is explicitly inhibited.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1350 (unless table-inhibit-update
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351 (table--update-cell)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1353 ;; for debugging the body form of the macro
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1354 (put 'table-with-cache-buffer 'edebug-form-spec '(body))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355 ;; for neat presentation use the same indentation as `progn'
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1356 (put 'table-with-cache-buffer 'lisp-indent-function 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1357 (if (or (featurep 'xemacs)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1358 (null (fboundp 'font-lock-add-keywords))) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359 ;; color it as a keyword
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1360 (font-lock-add-keywords
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361 'emacs-lisp-mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1362 '("\\<table-with-cache-buffer\\>")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364 (defmacro table-put-source-info (prop value)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1365 "Register source generation information."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366 `(put 'table-source-info-plist ,prop ,value))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 (defmacro table-get-source-info (prop)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1369 "Retrieve source generation information."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370 `(get 'table-source-info-plist ,prop))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374 ;; Modified commands for cell operation
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377 ;; Point Motion Only Group
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1378 (mapcar
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379 (lambda (command)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380 (let ((func-symbol (intern (format "*table--cell-%s" command)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1381 (doc-string (format "Table remapped function for `%s'." command)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382 (fset func-symbol
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 `(lambda
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384 (&rest args)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385 ,doc-string
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 (interactive)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 (let ((table-inhibit-update t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388 (deactivate-mark nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 (table--finish-delayed-tasks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 (call-interactively ',command)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 (setq table-inhibit-auto-fill-paragraph t)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 (setq table-command-remap-alist
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 (cons (cons command func-symbol)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 table-command-remap-alist))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 '(beginning-of-line
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398 end-of-line
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399 beginning-of-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 end-of-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401 forward-word
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1402 backward-word
55906
b2c91984d5a2 Sentence commands added to Point Motion group; kill and backward-kill
Juanma Barranquero <lekktu@gmail.com>
parents: 53367
diff changeset
1403 forward-sentence
b2c91984d5a2 Sentence commands added to Point Motion group; kill and backward-kill
Juanma Barranquero <lekktu@gmail.com>
parents: 53367
diff changeset
1404 backward-sentence
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405 forward-paragraph
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 backward-paragraph))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 ;; Extraction Group
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 (mapcar
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410 (lambda (command)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411 (let ((func-symbol (intern (format "*table--cell-%s" command)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412 (doc-string (format "Table remapped function for `%s'." command)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 (fset func-symbol
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414 `(lambda
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415 (&rest args)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1416 ,doc-string
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417 (interactive)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1418 (table--finish-delayed-tasks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1420 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421 (table--remove-cell-properties (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 (table--remove-eol-spaces (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423 (call-interactively ',command))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1424 (table--finish-delayed-tasks)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1425 (setq table-command-remap-alist
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1426 (cons (cons command func-symbol)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1427 table-command-remap-alist))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1428 '(kill-region
55906
b2c91984d5a2 Sentence commands added to Point Motion group; kill and backward-kill
Juanma Barranquero <lekktu@gmail.com>
parents: 53367
diff changeset
1429 kill-ring-save
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430 delete-region
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1431 copy-region-as-kill
55906
b2c91984d5a2 Sentence commands added to Point Motion group; kill and backward-kill
Juanma Barranquero <lekktu@gmail.com>
parents: 53367
diff changeset
1432 kill-line
b2c91984d5a2 Sentence commands added to Point Motion group; kill and backward-kill
Juanma Barranquero <lekktu@gmail.com>
parents: 53367
diff changeset
1433 kill-word
b2c91984d5a2 Sentence commands added to Point Motion group; kill and backward-kill
Juanma Barranquero <lekktu@gmail.com>
parents: 53367
diff changeset
1434 backward-kill-word
b2c91984d5a2 Sentence commands added to Point Motion group; kill and backward-kill
Juanma Barranquero <lekktu@gmail.com>
parents: 53367
diff changeset
1435 kill-sentence
b2c91984d5a2 Sentence commands added to Point Motion group; kill and backward-kill
Juanma Barranquero <lekktu@gmail.com>
parents: 53367
diff changeset
1436 backward-kill-sentence
b2c91984d5a2 Sentence commands added to Point Motion group; kill and backward-kill
Juanma Barranquero <lekktu@gmail.com>
parents: 53367
diff changeset
1437 kill-paragraph
b2c91984d5a2 Sentence commands added to Point Motion group; kill and backward-kill
Juanma Barranquero <lekktu@gmail.com>
parents: 53367
diff changeset
1438 backward-kill-paragraph
b2c91984d5a2 Sentence commands added to Point Motion group; kill and backward-kill
Juanma Barranquero <lekktu@gmail.com>
parents: 53367
diff changeset
1439 kill-sexp
b2c91984d5a2 Sentence commands added to Point Motion group; kill and backward-kill
Juanma Barranquero <lekktu@gmail.com>
parents: 53367
diff changeset
1440 backward-kill-sexp))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1441
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442 ;; Pasting Group
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443 (mapcar
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444 (lambda (command)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445 (let ((func-symbol (intern (format "*table--cell-%s" command)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1446 (doc-string (format "Table remapped function for `%s'." command)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1447 (fset func-symbol
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 `(lambda
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449 (&rest args)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1450 ,doc-string
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1451 (interactive)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452 (table--finish-delayed-tasks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1453 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1454 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1455 (call-interactively ',command)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1456 (table--untabify (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1457 (table--fill-region (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1458 (setq table-inhibit-auto-fill-paragraph t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1459 (table--finish-delayed-tasks)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1460 (setq table-command-remap-alist
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1461 (cons (cons command func-symbol)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1462 table-command-remap-alist))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1463 '(yank
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1464 clipboard-yank
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 yank-clipboard-selection
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1466 insert))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1467
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1468 ;; Formatting Group
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1469 (mapcar
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1470 (lambda (command)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1471 (let ((func-symbol (intern (format "*table--cell-%s" command)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1472 (doc-string (format "Table remapped function for `%s'." command)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1473 (fset func-symbol
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1474 `(lambda
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1475 (&rest args)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1476 ,doc-string
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1477 (interactive)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1478 (table--finish-delayed-tasks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1479 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1480 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1481 (let ((fill-column table-cell-info-width))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1482 (call-interactively ',command))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1483 (setq table-inhibit-auto-fill-paragraph t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1484 (table--finish-delayed-tasks)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1485 (setq table-command-remap-alist
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1486 (cons (cons command func-symbol)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1487 table-command-remap-alist))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1488 '(center-line
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489 conter-region
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1490 center-paragraph
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1491 fill-paragraph))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1492
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1493 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1494 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1495 ;; Commands
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1497
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1498 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 (defun table-insert (columns rows &optional cell-width cell-height)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500 "Insert an editable text table.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501 Insert a table of specified number of COLUMNS and ROWS. Optional
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 parameter CELL-WIDTH and CELL-HEIGHT can specify the size of each
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1503 cell. The cell size is uniform across the table if the specified size
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1504 is a number. They can be a list of numbers to specify different size
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1505 for each cell. When called interactively, the list of number is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506 entered by simply listing all the numbers with space characters
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1507 delimiting them.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509 Examples:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1510
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511 \\[table-insert] inserts a table at the current point location.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513 Suppose we have the following situation where `-!-' indicates the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514 location of point.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516 -!-
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518 Type \\[table-insert] and hit ENTER key. As it asks table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519 specification, provide 3 for number of columns, 1 for number of rows,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1520 5 for cell width and 1 for cell height. Now you shall see the next
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521 table and the point is automatically moved to the beginning of the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 first cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1523
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1524 +-----+-----+-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525 |-!- | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1526 +-----+-----+-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1528 Inside a table cell, there are special key bindings. \\<table-cell-map>
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1529
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1530 M-9 \\[table-widen-cell] (or \\[universal-argument] 9 \\[table-widen-cell]) widens the first cell by 9 character
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1531 width, which results as
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1532
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1533 +--------------+-----+-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1534 |-!- | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1535 +--------------+-----+-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1536
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1537 Type TAB \\[table-widen-cell] then type TAB M-2 M-7 \\[table-widen-cell] (or \\[universal-argument] 2 7 \\[table-widen-cell]). Typing
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1538 TAB moves the point forward by a cell. The result now looks like this:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1539
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1540 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1541 | | |-!- |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1542 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1544 If you knew each width of the columns prior to the table creation,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1545 what you could have done better was to have had given the complete
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1546 width information to `table-insert'.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1547
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548 Cell width(s): 14 6 32
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549
49599
5ade352e8d1c Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48373
diff changeset
1550 instead of
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552 Cell width(s): 5
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1554 This would have eliminated the previously mentioned width adjustment
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1555 work all together.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 If the point is in the last cell type S-TAB S-TAB to move it to the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1558 first cell. Now type \\[table-heighten-cell] which heighten the row by a line.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1559
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 |-!- | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1565 Type \\[table-insert-row-column] and tell it to insert a row.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1566
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568 |-!- | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1570 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1571 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1572 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1573 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1575 Move the point under the table as shown below.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1576
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1577 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1578 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1580 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1582 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1583 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584 -!-
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1585
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1586 Type M-x table-insert-row instead of \\[table-insert-row-column]. \\[table-insert-row-column] does not work
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1587 when the point is outside of the table. This insertion at
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588 outside of the table effectively appends a row at the end.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1589
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1591 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1592 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1593 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1594 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1595 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1596 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1597 |-!- | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1598 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1599 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1600
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1601 Text editing inside the table cell produces reasonably expected
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1602 results.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1603
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1604 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1605 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1606 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1607 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1608 | | |Text editing inside the table |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1609 | | |cell produces reasonably |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1610 | | |expected results.-!- |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1611 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1612 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1613 | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1614 +--------------+------+--------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1615
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1616 Inside a table cell has a special keymap.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1617
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1618 \\{table-cell-map}
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1619 "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1620 (interactive
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1621 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1622 (barf-if-buffer-read-only)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1623 (if (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1624 (error "Can't insert a table inside a table"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1625 (mapcar (function table--read-from-minibuffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1626 '(("Number of columns" . table-columns-history)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1627 ("Number of rows" . table-rows-history)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1628 ("Cell width(s)" . table-cell-width-history)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1629 ("Cell height(s)" . table-cell-height-history)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1630 (table--make-cell-map)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1631 ;; reform the arguments.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1632 (if (null cell-width) (setq cell-width (car table-cell-width-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1633 (if (null cell-height) (setq cell-height (car table-cell-height-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1634 (if (stringp columns) (setq columns (string-to-number columns)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1635 (if (stringp rows) (setq rows (string-to-number rows)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1636 (if (stringp cell-width) (setq cell-width (table--string-to-number-list cell-width)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1637 (if (stringp cell-height) (setq cell-height (table--string-to-number-list cell-height)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1638 (if (numberp cell-width) (setq cell-width (cons cell-width nil)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1639 (if (numberp cell-height) (setq cell-height (cons cell-height nil)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1640 ;; test validity of the arguments.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1641 (mapcar (lambda (arg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1642 (let* ((value (symbol-value arg))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1643 (error-handler
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1644 (function (lambda ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1645 (error "%s must be a positive integer%s" arg
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1646 (if (listp value) " or a list of positive integers" ""))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1647 (if (null value) (funcall error-handler))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1648 (mapcar (function (lambda (arg1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1649 (if (or (not (integerp arg1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1650 (< arg1 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1651 (funcall error-handler))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1652 (if (listp value) value
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1653 (cons value nil)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1654 '(columns rows cell-width cell-height))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1655 (let ((orig-coord (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1656 (coord (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1657 r i cw ch cell-str border-str)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1658 ;; prefabricate the building blocks border-str and cell-str.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1659 (with-temp-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1660 ;; construct border-str
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1661 (insert table-cell-intersection-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1662 (setq cw cell-width)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1663 (setq i 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1664 (while (< i columns)
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
1665 (insert (make-string (car cw) (string-to-char table-cell-horizontal-chars)) table-cell-intersection-char)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1666 (if (cdr cw) (setq cw (cdr cw)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1667 (setq i (1+ i)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1668 (setq border-str (buffer-substring (point-min) (point-max)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1669 ;; construct cell-str
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1670 (erase-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1671 (insert table-cell-vertical-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1672 (setq cw cell-width)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1673 (setq i 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1674 (while (< i columns)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1675 (let ((beg (point)))
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
1676 (insert (make-string (car cw) ?\s))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1677 (insert table-cell-vertical-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1678 (table--put-cell-line-property beg (1- (point))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1679 (if (cdr cw) (setq cw (cdr cw)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1680 (setq i (1+ i)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1681 (setq cell-str (buffer-substring (point-min) (point-max))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1682 ;; if the construction site has an empty border push that border down.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1683 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1684 (beginning-of-line)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1685 (if (looking-at "\\s *$")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1686 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1687 (setq border-str (concat border-str "\n"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1688 (setq cell-str (concat cell-str "\n")))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1689 ;; now build the table using the prefabricated building blocks
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1690 (setq r 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1691 (setq ch cell-height)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1692 (while (< r rows)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1693 (if (> r 0) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1694 (table--goto-coordinate coord) (setcdr coord (1+ (cdr coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1695 (table--untabify-line (point))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1696 (insert border-str))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1697 (setq i 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1698 (while (< i (car ch))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1699 (table--goto-coordinate coord) (setcdr coord (1+ (cdr coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1700 (table--untabify-line (point))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1701 (insert cell-str)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1702 (setq i (1+ i)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1703 (table--goto-coordinate coord) (setcdr coord (1+ (cdr coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1704 (table--untabify-line (point))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1705 (insert border-str)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1706 (if (cdr ch) (setq ch (cdr ch)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1707 (setq r (1+ r)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1708 ;; stand by at the first cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1709 (table--goto-coordinate (table--offset-coordinate orig-coord '(1 . 1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1710 (table-recognize-cell 'force)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1711
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1712 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1713 (defun table-insert-row (n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1714 "Insert N table row(s).
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1715 When point is in a table the newly inserted row(s) are placed above
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1716 the current row. When point is outside of the table it must be below
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1717 the table within the table width range, then the newly created row(s)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1718 are appended at the bottom of the table."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1719 (interactive "*p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1720 (if (< n 0) (setq n 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1721 (let* ((current-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1722 (coord-list (table--cell-list-to-coord-list (table--horizontal-cell-list t nil 'top)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1723 (append-row (if coord-list nil (setq coord-list (table--find-row-column))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1724 (cell-height (cdr (table--min-coord-list coord-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1725 (left-list nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1726 (this-list coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1727 (right-list (cdr coord-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1728 (bottom-border-y (1+ (cdr (table--get-coordinate (cdr (table--vertical-cell-list nil t))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1729 (vertical-str (string table-cell-vertical-char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1730 (vertical-str-with-properties (let ((str (string table-cell-vertical-char)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1731 (table--put-cell-keymap-property 0 (length str) str)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1732 (table--put-cell-rear-nonsticky 0 (length str) str) str))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1733 (first-time t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1734 ;; create the space below for the table to grow
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1735 (table--create-growing-space-below (* n (+ 1 cell-height)) coord-list bottom-border-y)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1736 ;; vertically expand each cell from left to right
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1737 (while this-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1738 (let* ((left (prog1 (car left-list) (setq left-list (if left-list (cdr left-list) coord-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1739 (this (prog1 (car this-list) (setq this-list (cdr this-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1740 (right (prog1 (car right-list) (setq right-list (cdr right-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1741 (exclude-left (and left (< (cdar left) (cdar this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1742 (exclude-right (and right (<= (cdar right) (cdar this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1743 (beg (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1744 (cons (if exclude-left (caar this) (1- (caar this)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1745 (cdar this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1746 (end (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1747 (cons (if exclude-right (cadr this) (1+ (cadr this)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1748 bottom-border-y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1749 (rect (if append-row nil (extract-rectangle beg end))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1750 ;; prepend blank cell lines to the extracted rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1751 (let ((i n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1752 (while (> i 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1753 (setq rect (cons
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1754 (concat (if exclude-left "" (char-to-string table-cell-intersection-char))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
1755 (make-string (- (cadr this) (caar this)) (string-to-char table-cell-horizontal-chars))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1756 (if exclude-right "" (char-to-string table-cell-intersection-char)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1757 rect))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1758 (let ((j cell-height))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1759 (while (> j 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1760 (setq rect (cons
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1761 (concat (if exclude-left ""
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1762 (if first-time vertical-str vertical-str-with-properties))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1763 (table--cell-blank-str (- (cadr this) (caar this)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1764 (if exclude-right "" vertical-str-with-properties))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1765 rect))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1766 (setq j (1- j))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1767 (setq i (1- i))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1768 (setq first-time nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1769 (if append-row
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1770 (table--goto-coordinate (cons (if exclude-left (caar this) (1- (caar this)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1771 (1+ bottom-border-y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1772 (delete-rectangle beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1773 (goto-char beg))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1774 (table--insert-rectangle rect)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1775 ;; fix up the intersections
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1776 (setq this-list (if append-row nil coord-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1777 (while this-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1778 (let ((this (prog1 (car this-list) (setq this-list (cdr this-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1779 (i 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1780 (while (< i n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1781 (let ((y (1- (* i (+ 1 cell-height)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1782 (table--goto-coordinate (table--offset-coordinate (car this) (cons -1 y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1783 (delete-char 1) (insert table-cell-intersection-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1784 (table--goto-coordinate (table--offset-coordinate (cons (cadr this) (cdar this)) (cons 0 y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1785 (delete-char 1) (insert table-cell-intersection-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1786 (setq i (1+ i))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1787 ;; move the point to the beginning of the first newly inserted cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1788 (if (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1789 (if append-row (cons (car (caar coord-list)) (1+ bottom-border-y))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1790 (caar coord-list))) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1791 (table--goto-coordinate current-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1792 ;; re-recognize the current cell's new dimension
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1793 (table-recognize-cell 'force)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1794
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1795 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1796 (defun table-insert-column (n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1797 "Insert N table column(s).
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1798 When point is in a table the newly inserted column(s) are placed left
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1799 of the current column. When point is outside of the table it must be
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1800 right side of the table within the table height range, then the newly
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1801 created column(s) are appended at the right of the table."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1802 (interactive "*p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1803 (if (< n 0) (setq n 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1804 (let* ((current-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1805 (coord-list (table--cell-list-to-coord-list (table--vertical-cell-list t nil 'left)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1806 (append-column (if coord-list nil (setq coord-list (table--find-row-column 'column))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1807 (cell-width (car (table--min-coord-list coord-list)))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
1808 (border-str (table--multiply-string (concat (make-string cell-width (string-to-char table-cell-horizontal-chars))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1809 (char-to-string table-cell-intersection-char)) n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1810 (cell-str (table--multiply-string (concat (table--cell-blank-str cell-width)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1811 (let ((str (string table-cell-vertical-char)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1812 (table--put-cell-keymap-property 0 (length str) str)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1813 (table--put-cell-rear-nonsticky 0 (length str) str) str)) n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1814 (columns-to-extend (* n (+ 1 cell-width)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1815 (above-list nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1816 (this-list coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1817 (below-list (cdr coord-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1818 (right-border-x (car (table--get-coordinate (cdr (table--horizontal-cell-list nil t))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1819 ;; push back the affected area above and below this table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1820 (table--horizontally-shift-above-and-below columns-to-extend coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1821 ;; process each cell vertically from top to bottom
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1822 (while this-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1823 (let* ((above (prog1 (car above-list) (setq above-list (if above-list (cdr above-list) coord-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1824 (this (prog1 (car this-list) (setq this-list (cdr this-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1825 (below (prog1 (car below-list) (setq below-list (cdr below-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1826 (exclude-above (and above (<= (caar above) (caar this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1827 (exclude-below (and below (< (caar below) (caar this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1828 (beg-coord (cons (if append-column (1+ right-border-x) (caar this))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1829 (if exclude-above (cdar this) (1- (cdar this)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1830 (end-coord (cons (1+ right-border-x)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1831 (if exclude-below (cddr this) (1+ (cddr this)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1832 rect)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1833 ;; untabify the area right of the bar that is about to be inserted
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1834 (let ((coord (table--copy-coordinate beg-coord))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1835 (i 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1836 (len (length rect)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1837 (while (< i len)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1838 (if (table--goto-coordinate coord 'no-extension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1839 (table--untabify-line (point)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1840 (setcdr coord (1+ (cdr coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1841 (setq i (1+ i))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1842 ;; extract and delete the rectangle area including the current
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1843 ;; cell and to the right border of the table.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1844 (setq rect (extract-rectangle (table--goto-coordinate beg-coord)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1845 (table--goto-coordinate end-coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1846 (delete-rectangle (table--goto-coordinate beg-coord)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1847 (table--goto-coordinate end-coord))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1848 ;; prepend the empty column string at the beginning of each
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1849 ;; rectangle string extracted before.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1850 (let ((rect-str rect)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1851 (first t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1852 (while rect-str
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1853 (if (and first (null exclude-above))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1854 (setcar rect-str (concat border-str (car rect-str)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1855 (if (and (null (cdr rect-str)) (null exclude-below))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1856 (setcar rect-str (concat border-str (car rect-str)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1857 (setcar rect-str (concat cell-str (car rect-str)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1858 (setq first nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1859 (setq rect-str (cdr rect-str))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1860 ;; insert the extended rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1861 (table--goto-coordinate beg-coord)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1862 (table--insert-rectangle rect)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1863 ;; fix up the intersections
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1864 (setq this-list (if append-column nil coord-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1865 (while this-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1866 (let ((this (prog1 (car this-list) (setq this-list (cdr this-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1867 (i 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1868 (while (< i n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1869 (let ((x (1- (* (1+ i) (+ 1 cell-width)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1870 (table--goto-coordinate (table--offset-coordinate (car this) (cons x -1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1871 (delete-char 1) (insert table-cell-intersection-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1872 (table--goto-coordinate (table--offset-coordinate (cons (caar this) (cddr this)) (cons x 1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1873 (delete-char 1) (insert table-cell-intersection-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1874 (setq i (1+ i))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1875 ;; move the point to the beginning of the first newly inserted cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1876 (if (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1877 (if append-column
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1878 (cons (1+ right-border-x)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1879 (cdar (car coord-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1880 (caar coord-list))) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1881 (table--goto-coordinate current-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1882 ;; re-recognize the current cell's new dimension
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1883 (table-recognize-cell 'force)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1884
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1885 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1886 (defun table-insert-row-column (row-column n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1887 "Insert row(s) or column(s).
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1888 See `table-insert-row' and `table-insert-column'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1889 (interactive
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1890 (let ((n (prefix-numeric-value current-prefix-arg)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1891 (if (< n 0) (setq n 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1892 (list (intern (let ((completion-ignore-case t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1893 (default (car table-insert-row-column-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1894 (downcase (completing-read
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1895 (format "Insert %s row%s/column%s (default %s): "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1896 (if (> n 1) (format "%d" n) "a")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1897 (if (> n 1) "s" "")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1898 (if (> n 1) "s" "")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1899 default)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1900 '(("row") ("column"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1901 nil t nil 'table-insert-row-column-history default))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1902 n)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1903 (cond ((eq row-column 'row)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1904 (table-insert-row n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1905 ((eq row-column 'column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1906 (table-insert-column n))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1907
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1908 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1909 (defun table-recognize (&optional arg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1910 "Recognize all tables within the current buffer and activate them.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1911 Scans the entire buffer and recognizes valid table cells. If the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1912 optional numeric prefix argument ARG is negative the tables in the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1913 buffer become inactive, meaning the tables become plain text and loses
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1914 all the table specific features."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1915 (interactive "P")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1916 (setq arg (prefix-numeric-value arg))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1917 (let* ((inhibit-read-only t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1918 (table-recognize-region (point-min) (point-max) -1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1919 (if (>= arg 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1920 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1921 (goto-char (point-min))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
1922 (let* ((border (format "[%s%c%c]"
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
1923 table-cell-horizontal-chars
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1924 table-cell-vertical-char
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1925 table-cell-intersection-char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1926 (border3 (concat border border border))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
1927 (non-border (format "^[^%s%c%c]*$"
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
1928 table-cell-horizontal-chars
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1929 table-cell-vertical-char
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1930 table-cell-intersection-char)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1931 ;; `table-recognize-region' is an expensive function so minimize
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1932 ;; the search area. A minimum table at least consists of three consecutive
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1933 ;; table border characters to begin with such as
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1934 ;; +-+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1935 ;; |A|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1936 ;; +-+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1937 ;; and any tables end with a line containing no table border characters
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1938 ;; or the end of buffer.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1939 (while (and (re-search-forward border3 (point-max) t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1940 (not (and (input-pending-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1941 table-abort-recognition-when-input-pending)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1942 (message "Recognizing tables...(%d%%)" (/ (* 100 (match-beginning 0)) (- (point-max) (point-min))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1943 (let ((beg (match-beginning 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1944 end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1945 (if (re-search-forward non-border (point-max) t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1946 (setq end (match-beginning 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1947 (setq end (goto-char (point-max))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1948 (table-recognize-region beg end arg)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1949 (message "Recognizing tables...done"))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1950
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1951 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1952 (defun table-unrecognize ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1953 (interactive)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1954 (table-recognize -1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1955
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1956 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1957 (defun table-recognize-region (beg end &optional arg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1958 "Recognize all tables within region.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1959 BEG and END specify the region to work on. If the optional numeric
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1960 prefix argument ARG is negative the tables in the region become
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1961 inactive, meaning the tables become plain text and lose all the table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1962 specific features."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1963 (interactive "r\nP")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1964 (setq arg (prefix-numeric-value arg))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1965 (let ((inhibit-read-only t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1966 (modified-flag (buffer-modified-p)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1967 (if (< arg 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1968 (table--remove-cell-properties beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1969 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1970 (goto-char beg)
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
1971 (let* ((border (format "[%s%c%c]"
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
1972 table-cell-horizontal-chars
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1973 table-cell-vertical-char
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1974 table-cell-intersection-char))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
1975 (non-border (format "[^%s%c%c]"
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
1976 table-cell-horizontal-chars
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1977 table-cell-vertical-char
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1978 table-cell-intersection-char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1979 (inhibit-read-only t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1980 (unwind-protect
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1981 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1982 (remove-text-properties beg end '(table-cell nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1983 (while (and (< (point) end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1984 (not (and (input-pending-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1985 table-abort-recognition-when-input-pending)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1986 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1987 ((looking-at "\n")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1988 (forward-char 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1989 ((looking-at border)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1990 (if (re-search-forward non-border end t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1991 (goto-char (match-beginning 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1992 (goto-char end)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1993 ((table--at-cell-p (point))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1994 (goto-char (next-single-property-change (point) 'table-cell nil end)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1995 (t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1996 (let ((cell (table-recognize-cell 'force 'no-copy)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1997 (if (and cell table-detect-cell-alignment)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1998 (table--detect-cell-alignment cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1999 (unless (re-search-forward border end t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2000 (goto-char end))))))))))
68246
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
2001 (restore-buffer-modified-p modified-flag)))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2002
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2003 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2004 (defun table-unrecognize-region (beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2005 (interactive "r")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2006 (table-recognize-region beg end -1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2007
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2008 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2009 (defun table-recognize-table (&optional arg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2010 "Recognize a table at point.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2011 If the optional numeric prefix argument ARG is negative the table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2012 becomes inactive, meaning the table becomes plain text and loses all
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2013 the table specific features."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2014 (interactive "P")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2015 (setq arg (prefix-numeric-value arg))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2016 (let ((unrecognize (< arg 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2017 (origin-cell (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2018 (inhibit-read-only t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2019 (if origin-cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2020 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2021 (while
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2022 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2023 (table-forward-cell 1 nil unrecognize)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2024 (let ((cell (table--probe-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2025 (if (and cell table-detect-cell-alignment)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2026 (table--detect-cell-alignment cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2027 (and cell (not (equal cell origin-cell))))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2028
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2029 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2030 (defun table-unrecognize-table ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2031 (interactive)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2032 (table-recognize-table -1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2033
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2034 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2035 (defun table-recognize-cell (&optional force no-copy arg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2036 "Recognize a table cell that contains current point.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2037 Probe the cell dimension and prepare the cell information. The
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2038 optional two arguments FORCE and NO-COPY are for internal use only and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2039 must not be specified. When the optional numeric prefix argument ARG
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2040 is negative the cell becomes inactive, meaning that the cell becomes
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2041 plain text and loses all the table specific features."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2042 (interactive "i\ni\np")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2043 (table--make-cell-map)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2044 (if (or force (not (memq (table--get-last-command) table-command-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2045 (let* ((cell (table--probe-cell (interactive-p)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2046 (cache-buffer (get-buffer-create table-cache-buffer-name))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2047 (modified-flag (buffer-modified-p))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2048 (inhibit-read-only t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2049 (unwind-protect
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2050 (unless (null cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2051 ;; initialize the cell info variables
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2052 (let ((lu-coordinate (table--get-coordinate (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2053 (rb-coordinate (table--get-coordinate (cdr cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2054 ;; update the previous cell if this cell is different from the previous one.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2055 ;; care only lu but ignore rb since size change does not matter.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2056 (unless (equal table-cell-info-lu-coordinate lu-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2057 (table--finish-delayed-tasks))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2058 (setq table-cell-info-lu-coordinate lu-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2059 (setq table-cell-info-rb-coordinate rb-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2060 (setq table-cell-info-width (- (car table-cell-info-rb-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2061 (car table-cell-info-lu-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2062 (setq table-cell-info-height (+ (- (cdr table-cell-info-rb-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2063 (cdr table-cell-info-lu-coordinate)) 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2064 (setq table-cell-info-justify (table--get-cell-justify-property cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2065 (setq table-cell-info-valign (table--get-cell-valign-property cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2066 ;; set/remove table cell properties
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2067 (if (< (prefix-numeric-value arg) 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2068 (let ((coord (table--get-coordinate (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2069 (n table-cell-info-height))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2070 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2071 (while (> n 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2072 (table--remove-cell-properties
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2073 (table--goto-coordinate coord)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2074 (table--goto-coordinate (cons (+ (car coord) table-cell-info-width 1) (cdr coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2075 (setq n (1- n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2076 (setcdr coord (1+ (cdr coord))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2077 (table--put-cell-property cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2078 ;; copy the cell contents to the cache buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2079 ;; only if no-copy is nil and timers are not set
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2080 (unless no-copy
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2081 (setq table-cell-cache-point-coordinate (table--transcoord-table-to-cache))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2082 (setq table-cell-cache-mark-coordinate (table--transcoord-table-to-cache
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2083 (table--get-coordinate (marker-position (mark-marker)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2084 (setq table-cell-buffer (current-buffer))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2085 (let ((rectangle (extract-rectangle (car cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2086 (cdr cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2087 (save-current-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2088 (set-buffer cache-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2089 (erase-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2090 (table--insert-rectangle rectangle)))))
68246
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
2091 (restore-buffer-modified-p modified-flag))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2092 (if (featurep 'xemacs)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2093 (table--warn-incompatibility))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2094 cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2095
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2096 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2097 (defun table-unrecognize-cell ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2098 (interactive)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2099 (table-recognize-cell nil nil -1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2100
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2101 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2102 (defun table-heighten-cell (n &optional no-copy no-update)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2103 "Heighten the current cell by N lines by expanding the cell vertically.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2104 Heightening is done by adding blank lines at the bottom of the current
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2105 cell. Other cells aligned horizontally with the current one are also
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2106 heightened in order to keep the rectangular table structure. The
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2107 optional argument NO-COPY is internal use only and must not be
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2108 specified."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2109 (interactive "*p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2110 (if (< n 0) (setq n 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2111 (let* ((coord-list (table--cell-list-to-coord-list (table--horizontal-cell-list t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2112 (left-list nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2113 (this-list coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2114 (right-list (cdr coord-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2115 (bottom-border-y (1+ (cdr (table--get-coordinate (cdr (table--vertical-cell-list nil t))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2116 (vertical-str (string table-cell-vertical-char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2117 (vertical-str-with-properties (string table-cell-vertical-char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2118 (first-time t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2119 (current-coordinate (table--get-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2120 ;; prepare the right vertical string with appropriate properties put
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2121 (table--put-cell-keymap-property 0 (length vertical-str-with-properties) vertical-str-with-properties)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2122 ;; create the space below for the table to grow
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2123 (table--create-growing-space-below n coord-list bottom-border-y)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2124 ;; vertically expand each cell from left to right
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2125 (while this-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2126 (let* ((left (prog1 (car left-list) (setq left-list (if left-list (cdr left-list) coord-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2127 (this (prog1 (car this-list) (setq this-list (cdr this-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2128 (right (prog1 (car right-list) (setq right-list (cdr right-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2129 (exclude-left (and left (< (cddr left) (cddr this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2130 (exclude-right (and right (<= (cddr right) (cddr this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2131 (beg (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2132 (cons (if exclude-left (caar this) (1- (caar this)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2133 (1+ (cddr this)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2134 (end (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2135 (cons (if exclude-right (cadr this) (1+ (cadr this)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2136 bottom-border-y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2137 (rect (extract-rectangle beg end)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2138 ;; prepend blank cell lines to the extracted rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2139 (let ((i n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2140 (while (> i 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2141 (setq rect (cons
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2142 (concat (if exclude-left ""
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2143 (if first-time vertical-str vertical-str-with-properties))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2144 (table--cell-blank-str (- (cadr this) (caar this)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2145 (if exclude-right "" vertical-str-with-properties))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2146 rect))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2147 (setq i (1- i))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2148 (setq first-time nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2149 (delete-rectangle beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2150 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2151 (table--insert-rectangle rect)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2152 (table--goto-coordinate current-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2153 ;; re-recognize the current cell's new dimension
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2154 (table-recognize-cell 'force no-copy)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2155 (unless no-update
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2156 (table--update-cell-heightened))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2157
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2158 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2159 (defun table-shorten-cell (n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2160 "Shorten the current cell by N lines by shrinking the cell vertically.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2161 Shortening is done by removing blank lines from the bottom of the cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2162 and possibly from the top of the cell as well. Therefor, the cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2163 must have some bottom/top blank lines to be shorten effectively. This
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2164 is applicable to all the cells aligned horizontally with the current
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2165 one because they are also shortened in order to keep the rectangular
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2166 table structure."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2167 (interactive "*p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2168 (if (< n 0) (setq n 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2169 (table--finish-delayed-tasks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2170 (let* ((table-inhibit-update t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2171 (coord-list (table--cell-list-to-coord-list (table--horizontal-cell-list t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2172 (left-list nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2173 (this-list coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2174 (right-list (cdr coord-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2175 (bottom-budget-list nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2176 (bottom-border-y (1+ (cdr (table--get-coordinate (cdr (table--vertical-cell-list nil t))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2177 (current-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2178 (current-cell-coordinate (table--cell-to-coord (table--probe-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2179 (blank-line-regexp "\\s *$"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2180 (message "Shortening...");; this operation may be lengthy
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2181 ;; for each cell calculate the maximum number of blank lines we can delete
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2182 ;; and adjust the argument n. n is adjusted so that the total number of
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2183 ;; blank lines from top and bottom of a cell do not exceed n, all cell has
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2184 ;; at least one line height after blank line deletion.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2185 (while this-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2186 (let ((this (prog1 (car this-list) (setq this-list (cdr this-list)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2187 (table--goto-coordinate (car this))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2188 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2189 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2190 (catch 'end-count
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2191 (let ((blank-line-count 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2192 (table--goto-coordinate (cons 0 (1- table-cell-info-height)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2193 ;; count bottom
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2194 (while (and (looking-at blank-line-regexp)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2195 (setq blank-line-count (1+ blank-line-count))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2196 ;; need to leave at least one blank line
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2197 (if (> blank-line-count n) (throw 'end-count nil) t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2198 (if (zerop (forward-line -1)) t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2199 (setq n (if (zerop blank-line-count) 0
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2200 (1- blank-line-count)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2201 (throw 'end-count nil))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2202 (table--goto-coordinate (cons 0 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2203 ;; count top
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2204 (while (and (looking-at blank-line-regexp)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2205 (setq blank-line-count (1+ blank-line-count))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2206 ;; can consume all blank lines
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2207 (if (>= blank-line-count n) (throw 'end-count nil) t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2208 (zerop (forward-line 1))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2209 (setq n blank-line-count))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2210 ;; construct the bottom-budget-list which is a list of numbers where each number
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2211 ;; corresponds to how many lines to be deleted from the bottom of each cell. If
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2212 ;; this number, say bb, is smaller than n (bb < n) that means the difference (n - bb)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2213 ;; number of lines must be deleted from the top of the cell in addition to deleting
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2214 ;; bb lines from the bottom of the cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2215 (setq this-list coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2216 (while this-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2217 (let ((this (prog1 (car this-list) (setq this-list (cdr this-list)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2218 (table--goto-coordinate (car this))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2219 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2220 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2221 (setq bottom-budget-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2222 (cons
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2223 (let ((blank-line-count 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2224 (table--goto-coordinate (cons 0 (1- table-cell-info-height)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2225 (while (and (looking-at blank-line-regexp)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2226 (< blank-line-count n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2227 (setq blank-line-count (1+ blank-line-count))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2228 (zerop (forward-line -1))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2229 blank-line-count)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2230 bottom-budget-list)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2231 (setq bottom-budget-list (nreverse bottom-budget-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2232 ;; vertically shorten each cell from left to right
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2233 (setq this-list coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2234 (while this-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2235 (let* ((left (prog1 (car left-list) (setq left-list (if left-list (cdr left-list) coord-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2236 (this (prog1 (car this-list) (setq this-list (cdr this-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2237 (right (prog1 (car right-list) (setq right-list (cdr right-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2238 (bottom-budget (prog1 (car bottom-budget-list) (setq bottom-budget-list (cdr bottom-budget-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2239 (exclude-left (and left (< (cddr left) (cddr this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2240 (exclude-right (and right (<= (cddr right) (cddr this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2241 (beg (table--goto-coordinate (cons (caar this) (cdar this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2242 (end (table--goto-coordinate (cons (cadr this) bottom-border-y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2243 (rect (extract-rectangle beg end))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2244 (height (+ (- (cddr this) (cdar this)) 1))
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
2245 (blank-line (make-string (- (cadr this) (caar this)) ?\s)))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2246 ;; delete lines from the bottom of the cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2247 (setcdr (nthcdr (- height bottom-budget 1) rect) (nthcdr height rect))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2248 ;; delete lines from the top of the cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2249 (if (> n bottom-budget)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2250 (let ((props (text-properties-at 0 (car rect))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2251 (setq rect (nthcdr (- n bottom-budget) rect))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2252 (set-text-properties 0 1 props (car rect))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2253 ;; append blank lines below the table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2254 (setq rect (append rect (make-list n blank-line)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2255 ;; now swap the area with the prepared rect of the same size
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2256 (delete-rectangle beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2257 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2258 (table--insert-rectangle rect)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2259 ;; for the left and right borders always delete lines from the bottom of the cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2260 (unless exclude-left
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2261 (let* ((beg (table--goto-coordinate (cons (1- (caar this)) (cdar this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2262 (end (table--goto-coordinate (cons (caar this) bottom-border-y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2263 (rect (extract-rectangle beg end)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2264 (setcdr (nthcdr (- height n 1) rect) (nthcdr height rect))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2265 (setq rect (append rect (make-list n " ")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2266 (delete-rectangle beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2267 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2268 (table--insert-rectangle rect)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2269 (unless exclude-right
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2270 (let* ((beg (table--goto-coordinate (cons (cadr this) (cdar this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2271 (end (table--goto-coordinate (cons (1+ (cadr this)) bottom-border-y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2272 (rect (extract-rectangle beg end)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2273 (setcdr (nthcdr (- height n 1) rect) (nthcdr height rect))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2274 (setq rect (append rect (make-list n " ")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2275 (delete-rectangle beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2276 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2277 (table--insert-rectangle rect)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2278 ;; if this is the cell where the original point was in, adjust the point location
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2279 (if (null (equal this current-cell-coordinate)) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2280 (let ((y (- (cdr current-coordinate) (cdar this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2281 (if (< y (- n bottom-budget))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2282 (setcdr current-coordinate (cdar this))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2283 (if (< (- y (- n bottom-budget)) (- height n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2284 (setcdr current-coordinate (+ (cdar this) (- y (- n bottom-budget))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2285 (setcdr current-coordinate (+ (cdar this) (- height n 1)))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2286 ;; remove the appended blank lines below the table if they are unnecessary
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2287 (table--goto-coordinate (cons 0 (1+ (- bottom-border-y n))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2288 (table--remove-blank-lines n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2289 ;; re-recognize the current cell's new dimension
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2290 (table--goto-coordinate current-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2291 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2292 (table--update-cell-heightened)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2293 (message "")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2294
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2295 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2296 (defun table-widen-cell (n &optional no-copy no-update)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2297 "Widen the current cell by N columns and expand the cell horizontally.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2298 Some other cells in the same table are widen as well to keep the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2299 table's rectangle structure."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2300 (interactive "*p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2301 (if (< n 0) (setq n 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2302 (let* ((coord-list (table--cell-list-to-coord-list (table--vertical-cell-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2303 (below-list nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2304 (this-list coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2305 (above-list (cdr coord-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2306 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2307 ;; push back the affected area above and below this table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2308 (table--horizontally-shift-above-and-below n (reverse coord-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2309 ;; now widen vertically for each cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2310 (while this-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2311 (let* ((below (prog1 (car below-list) (setq below-list (if below-list (cdr below-list) coord-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2312 (this (prog1 (car this-list) (setq this-list (cdr this-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2313 (above (prog1 (car above-list) (setq above-list (cdr above-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2314 (beg (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2315 (cons (car (cdr this))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2316 (if (or (null above) (<= (car (cdr this)) (car (cdr above))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2317 (1- (cdr (car this)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2318 (cdr (car this))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2319 (end (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2320 (cons (1+ (car (cdr this)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2321 (if (or (null below) (< (car (cdr this)) (car (cdr below))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2322 (1+ (cdr (cdr this)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2323 (cdr (cdr this))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2324 (tmp (extract-rectangle (1- beg) end))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2325 (border (format "[%s%c]\\%c"
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2326 table-cell-horizontal-chars
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2327 table-cell-intersection-char
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2328 table-cell-intersection-char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2329 (blank (table--cell-blank-str))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2330 rectangle)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2331 ;; create a single wide vertical bar of empty cell fragment
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2332 (while tmp
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2333 ; (message "tmp is %s" tmp)
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2334 (setq rectangle (cons
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2335 (if (string-match border (car tmp))
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2336 (substring (car tmp) 0 1)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2337 blank)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2338 rectangle))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2339 ; (message "rectangle is %s" rectangle)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2340 (setq tmp (cdr tmp)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2341 (setq rectangle (nreverse rectangle))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2342 ;; untabify the area right of the bar that is about to be inserted
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2343 (let ((coord (table--get-coordinate beg))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2344 (i 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2345 (len (length rectangle)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2346 (while (< i len)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2347 (if (table--goto-coordinate coord 'no-extension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2348 (table--untabify-line (point)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2349 (setcdr coord (1+ (cdr coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2350 (setq i (1+ i))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2351 ;; insert the bar n times
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2352 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2353 (let ((i 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2354 (while (< i n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2355 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2356 (table--insert-rectangle rectangle))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2357 (setq i (1+ i)))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2358 (table-recognize-cell 'force no-copy)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2359 (unless no-update
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2360 (table--update-cell-widened))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2361
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2362 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2363 (defun table-narrow-cell (n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2364 "Narrow the current cell by N columns and shrink the cell horizontally.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2365 Some other cells in the same table are narrowed as well to keep the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2366 table's rectangle structure."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2367 (interactive "*p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2368 (if (< n 0) (setq n 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2369 (table--finish-delayed-tasks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2370 (let* ((coord-list (table--cell-list-to-coord-list (table--vertical-cell-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2371 (current-cell (table--cell-to-coord (table--probe-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2372 (current-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2373 tmp-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2374 (message "Narrowing...");; this operation may be lengthy
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2375 ;; determine the doable n by try narrowing each cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2376 (setq tmp-list coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2377 (while tmp-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2378 (let ((cell (prog1 (car tmp-list) (setq tmp-list (cdr tmp-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2379 (table-inhibit-update t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2380 cell-n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2381 (table--goto-coordinate (car cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2382 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2383 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2384 (table--fill-region (point-min) (point-max) (- table-cell-info-width n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2385 (if (< (setq cell-n (- table-cell-info-width (table--measure-max-width))) n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2386 (setq n cell-n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2387 (erase-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2388 (setq table-inhibit-auto-fill-paragraph t))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2389 (if (< n 1) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2390 ;; narrow only the contents of each cell but leave the cell frame as is because
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2391 ;; we need to have valid frame structure in order for table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2392 ;; to work correctly.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2393 (setq tmp-list coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2394 (while tmp-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2395 (let* ((cell (prog1 (car tmp-list) (setq tmp-list (cdr tmp-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2396 (table-inhibit-update t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2397 (currentp (equal cell current-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2398 old-height)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2399 (if currentp (table--goto-coordinate current-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2400 (table--goto-coordinate (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2401 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2402 (setq old-height table-cell-info-height)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2403 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2404 (let ((out-of-bound (>= (- (car current-coordinate) (car table-cell-info-lu-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2405 (- table-cell-info-width n)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2406 (sticky (and currentp
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2407 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2408 (unless (bolp) (forward-char -1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2409 (looking-at ".*\\S ")))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2410 (table--fill-region (point-min) (point-max) (- table-cell-info-width n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2411 (if (or sticky (and currentp (looking-at ".*\\S ")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2412 (setq current-coordinate (table--transcoord-cache-to-table))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2413 (if out-of-bound (setcar current-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2414 (+ (car table-cell-info-lu-coordinate) (- table-cell-info-width n 1))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2415 (setq table-inhibit-auto-fill-paragraph t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2416 (table--update-cell 'now)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2417 ;; if this cell heightens and pushes the current cell below, move
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2418 ;; the current-coordinate (point location) down accordingly.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2419 (if currentp (setq current-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2420 (if (and (> table-cell-info-height old-height)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2421 (> (cdr current-coordinate) (cdr table-cell-info-lu-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2422 (setcdr current-coordinate (+ (cdr current-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2423 (- table-cell-info-height old-height)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2424 ))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2425 ;; coord-list is now possibly invalid since some cells may have already
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2426 ;; been heightened so recompute them by table--vertical-cell-list.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2427 (table--goto-coordinate current-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2428 (setq coord-list (table--cell-list-to-coord-list (table--vertical-cell-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2429 ;; push in the affected area above and below this table so that things
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2430 ;; on the right side of the table are shifted horizontally neatly.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2431 (table--horizontally-shift-above-and-below (- n) (reverse coord-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2432 ;; finally narrow the frames for each cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2433 (let* ((below-list nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2434 (this-list coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2435 (above-list (cdr coord-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2436 (while this-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2437 (let* ((below (prog1 (car below-list) (setq below-list (if below-list (cdr below-list) coord-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2438 (this (prog1 (car this-list) (setq this-list (cdr this-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2439 (above (prog1 (car above-list) (setq above-list (cdr above-list)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2440 (delete-rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2441 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2442 (cons (- (cadr this) n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2443 (if (or (null above) (<= (cadr this) (cadr above)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2444 (1- (cdar this))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2445 (cdar this))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2446 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2447 (cons (cadr this)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2448 (if (or (null below) (< (cadr this) (cadr below)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2449 (1+ (cddr this))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2450 (cddr this)))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2451 (table--goto-coordinate current-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2452 ;; re-recognize the current cell's new dimension
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2453 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2454 (message "")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2455
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2456 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2457 (defun table-forward-cell (&optional arg no-recognize unrecognize)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2458 "Move point forward to the beginning of the next cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2459 With argument ARG, do it ARG times;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2460 a negative argument ARG = -N means move backward N cells.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2461 Do not specify NO-RECOGNIZE and UNRECOGNIZE. They are for internal use only.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2462
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2463 Sample Cell Traveling Order (In Irregular Table Cases)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2464
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2465 You can actually try how it works in this buffer. Press
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2466 \\[table-recognize] and go to cells in the following tables and press
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2467 \\[table-forward-cell] or TAB key.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2468
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2469 +-----+--+ +--+-----+ +--+--+--+ +--+--+--+ +---------+ +--+---+--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2470 |0 |1 | |0 |1 | |0 |1 |2 | |0 |1 |2 | |0 | |0 |1 |2 |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2471 +--+--+ | | +--+--+ +--+ | | | | +--+ +----+----+ +--+-+-+--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2472 |2 |3 | | | |2 |3 | |3 +--+ | | +--+3 | |1 |2 | |3 |4 |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2473 | +--+--+ +--+--+ | +--+4 | | | |4 +--+ +--+-+-+--+ +----+----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2474 | |4 | |4 | | |5 | | | | | |5 | |3 |4 |5 | |5 |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2475 +--+-----+ +-----+--+ +--+--+--+ +--+--+--+ +--+---+--+ +---------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2476
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2477 +--+--+--+ +--+--+--+ +--+--+--+ +--+--+--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2478 |0 |1 |2 | |0 |1 |2 | |0 |1 |2 | |0 |1 |2 |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2479 | | | | | +--+ | | | | | +--+ +--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2480 +--+ +--+ +--+3 +--+ | +--+ | |3 +--+4 |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2481 |3 | |4 | |4 +--+5 | | |3 | | +--+5 +--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2482 | | | | | |6 | | | | | | |6 | |7 |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2483 +--+--+--+ +--+--+--+ +--+--+--+ +--+--+--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2484
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2485 +--+--+--+ +--+--+--+ +--+--+--+--+ +--+-----+--+ +--+--+--+--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2486 |0 |1 |2 | |0 |1 |2 | |0 |1 |2 |3 | |0 |1 |2 | |0 |1 |2 |3 |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2487 | +--+ | | +--+ | | +--+--+ | | | | | | +--+--+ |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2488 | |3 +--+ +--+3 | | +--+4 +--+ +--+ +--+ +--+4 +--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2489 +--+ |4 | |4 | +--+ |5 +--+--+6 | |3 +--+--+4 | |5 | |6 |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2490 |5 +--+ | | +--+5 | | |7 |8 | | | |5 |6 | | | | | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2491 | |6 | | | |6 | | +--+--+--+--+ +--+--+--+--+ +--+-----+--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2492 +--+--+--+ +--+--+--+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2493 "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2494 ;; After modifying this function, test against the above tables in
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2495 ;; the doc string. It is quite tricky. The tables above do not
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2496 ;; mean to cover every possible cases of cell layout, of course.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2497 ;; They are examples of tricky cases from implementation point of
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2498 ;; view and provided for simple regression test purpose.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2499 (interactive "p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2500 (or arg (setq arg 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2501 (table--finish-delayed-tasks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2502 (while (null (zerop arg))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2503 (let* ((pivot (table--probe-cell 'abort-on-error))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2504 (cell pivot) edge tip)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2505 ;; go to the beginning of the first right/left cell with same height if exists
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2506 (while (and (setq cell (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2507 (cons (if (> arg 0) (1+ (car (table--get-coordinate (cdr cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2508 (1- (car (table--get-coordinate (car cell)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2509 (cdr (table--get-coordinate (car pivot)))) 'no-extension))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2510 (setq cell (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2511 (/= (cdr (table--get-coordinate (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2512 (cdr (table--get-coordinate (car pivot))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2513 (if cell (goto-char (car cell)) ; done
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2514 ;; if the horizontal move fails search the most left/right edge cell below/above the pivot
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2515 ;; but first find the edge cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2516 (setq edge pivot)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2517 (while (and (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2518 (cons (if (> arg 0) (1- (car (table--get-coordinate (car edge))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2519 (1+ (car (table--get-coordinate (cdr edge)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2520 (cdr (table--get-coordinate (car pivot)))) 'no-extension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2521 (setq cell (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2522 (setq edge cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2523 (setq cell (if (> arg 0) edge
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2524 (or (and (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2525 (cons (car (table--get-coordinate (cdr edge)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2526 (1- (cdr (table--get-coordinate (car edge))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2527 (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2528 edge)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2529 ;; now search for the tip which is the highest/lowest below/above cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2530 (while cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2531 (let (below/above)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2532 (and (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2533 (cons (car (table--get-coordinate (if (> arg 0) (car cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2534 (cdr cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2535 (if (> arg 0) (+ 2 (cdr (table--get-coordinate (cdr cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2536 (1- (cdr (table--get-coordinate (car pivot)))))) 'no-extension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2537 (setq below/above (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2538 (or (null tip)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2539 (if (> arg 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2540 (< (cdr (table--get-coordinate (car below/above)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2541 (cdr (table--get-coordinate (car tip))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2542 (> (cdr (table--get-coordinate (car below/above)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2543 (cdr (table--get-coordinate (car tip))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2544 (setq tip below/above)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2545 (and (setq cell (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2546 (cons (if (> arg 0) (1+ (car (table--get-coordinate (cdr cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2547 (1- (car (table--get-coordinate (car cell)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2548 (if (> arg 0) (cdr (table--get-coordinate (car pivot)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2549 (1- (cdr (table--get-coordinate (car pivot)))))) 'no-extension))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2550 (setq cell (table--probe-cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2551 (if tip (goto-char (car tip)) ; done
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2552 ;; let's climb up/down to the top/bottom from the edge
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2553 (while (and (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2554 (cons (if (> arg 0) (car (table--get-coordinate (car edge)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2555 (car (table--get-coordinate (cdr edge))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2556 (if (> arg 0) (1- (cdr (table--get-coordinate (car edge))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2557 (+ 2 (cdr (table--get-coordinate (cdr edge)))))) 'no-extension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2558 (setq cell (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2559 (setq edge cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2560 (if (< arg 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2561 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2562 (setq cell edge)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2563 (while (and (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2564 (cons (1- (car (table--get-coordinate (car cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2565 (cdr (table--get-coordinate (cdr cell)))) 'no-extension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2566 (setq cell (table--probe-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2567 (if (> (cdr (table--get-coordinate (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2568 (cdr (table--get-coordinate (car edge))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2569 (setq edge cell)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2570 (goto-char (car edge))))) ; the top left cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2571 (setq arg (if (> arg 0) (1- arg) (1+ arg))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2572 (unless no-recognize
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2573 (table-recognize-cell 'force nil (if unrecognize -1 nil)))) ; refill the cache with new cell contents
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2574
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2575 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2576 (defun table-backward-cell (&optional arg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2577 "Move backward to the beginning of the previous cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2578 With argument ARG, do it ARG times;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2579 a negative argument ARG = -N means move forward N cells."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2580 (interactive "p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2581 (or arg (setq arg 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2582 (table-forward-cell (- arg)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2583
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2584 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2585 (defun table-span-cell (direction)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2586 "Span current cell into adjacent cell in DIRECTION.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2587 DIRECTION is one of symbols; right, left, above or below."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2588 (interactive
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2589 (list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2590 (let* ((dummy (barf-if-buffer-read-only))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2591 (direction-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2592 (let* ((tmp (delete nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2593 (mapcar (lambda (d)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2594 (if (table--cell-can-span-p d)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2595 (list (symbol-name d))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2596 '(right left above below)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2597 (if (null tmp)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2598 (error "Can't span this cell"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2599 tmp))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2600 (default-direction (if (member (list (car table-cell-span-direction-history)) direction-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2601 (car table-cell-span-direction-history)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2602 (caar direction-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2603 (completion-ignore-case t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2604 (intern (downcase (completing-read
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2605 (format "Span into (default %s): " default-direction)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2606 direction-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2607 nil t nil 'table-cell-span-direction-history default-direction))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2608 (unless (memq direction '(right left above below))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2609 (error "Invalid direction %s, must be right, left, above or below"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2610 (symbol-name direction)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2611 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2612 (unless (table--cell-can-span-p direction)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2613 (error "Can't span %s" (symbol-name direction)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2614 ;; prepare beginning and ending positions of the border bar to strike through
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2615 (let ((beg (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2616 ((eq direction 'right)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2617 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2618 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2619 (cons (car table-cell-info-rb-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2620 (1- (cdr table-cell-info-lu-coordinate))) 'no-extension)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2621 ((eq direction 'below)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2622 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2623 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2624 (cons (1- (car table-cell-info-lu-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2625 (1+ (cdr table-cell-info-rb-coordinate))) 'no-extension)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2626 (t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2627 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2628 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2629 (cons (1- (car table-cell-info-lu-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2630 (1- (cdr table-cell-info-lu-coordinate))) 'no-extension)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2631 (end (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2632 ((eq direction 'left)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2633 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2634 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2635 (cons (car table-cell-info-lu-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2636 (1+ (cdr table-cell-info-rb-coordinate))) 'no-extension)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2637 ((eq direction 'above)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2638 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2639 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2640 (cons (1+ (car table-cell-info-rb-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2641 (1- (cdr table-cell-info-lu-coordinate))) 'no-extension)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2642 (t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2643 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2644 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2645 (cons (1+ (car table-cell-info-rb-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2646 (1+ (cdr table-cell-info-rb-coordinate))) 'no-extension))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2647 ;; replace the bar with blank space while taking care of edges to be border or intersection
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2648 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2649 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2650 (if (memq direction '(left right))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2651 (let* ((column (current-column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2652 rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2653 (n-element (- (length (extract-rectangle beg end)) 2))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2654 (above-contp (and (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2655 (zerop (forward-line -1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2656 (= (move-to-column column) column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2657 (looking-at (regexp-quote (char-to-string table-cell-vertical-char)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2658 (below-contp (and (goto-char end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2659 (progn (forward-char -1) t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2660 (zerop (forward-line 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2661 (= (move-to-column column) column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2662 (looking-at (regexp-quote (char-to-string table-cell-vertical-char))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2663 (setq rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2664 (cons (if below-contp
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2665 (char-to-string table-cell-intersection-char)
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2666 (substring table-cell-horizontal-chars 0 1))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2667 rectangle))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2668 (while (> n-element 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2669 (setq rectangle (cons (table--cell-blank-str 1) rectangle))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2670 (setq n-element (1- n-element)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2671 (setq rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2672 (cons (if above-contp
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2673 (char-to-string table-cell-intersection-char)
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2674 (substring table-cell-horizontal-chars 0 1))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2675 rectangle))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2676 (delete-rectangle beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2677 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2678 (table--insert-rectangle rectangle))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2679 (delete-region beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2680 (insert (if (and (> (point) (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2681 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2682 (forward-char -1)
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2683 (looking-at (regexp-opt-charset
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2684 (string-to-list table-cell-horizontal-chars)))))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2685 table-cell-intersection-char
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2686 table-cell-vertical-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2687 (table--cell-blank-str (- end beg 2))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2688 (if (looking-at (regexp-opt-charset
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2689 (string-to-list table-cell-horizontal-chars)))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2690 table-cell-intersection-char
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2691 table-cell-vertical-char))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2692 ;; recognize the newly created spanned cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2693 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2694 (if (member direction '(right left))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2695 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2696 (table--fill-region (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2697 (setq table-inhibit-auto-fill-paragraph t)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2698
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2699 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2700 (defun table-split-cell-vertically ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2701 "Split current cell vertically.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2702 Creates a cell above and a cell below the current point location."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2703 (interactive "*")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2704 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2705 (let ((point-y (cdr (table--get-coordinate))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2706 (unless (table--cell-can-split-vertically-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2707 (error "Can't split here"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2708 (let* ((old-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2709 (column (current-column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2710 (beg (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2711 (cons (1- (car table-cell-info-lu-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2712 point-y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2713 (end (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2714 (cons (1+ (car table-cell-info-rb-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2715 point-y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2716 (line (buffer-substring (1+ beg) (1- end))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2717 (when (= (cdr old-coordinate) (cdr table-cell-info-rb-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2718 (table--goto-coordinate old-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2719 (table-heighten-cell 1 'no-copy 'no-update))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2720 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2721 (delete-region beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2722 (insert table-cell-intersection-char
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
2723 (make-string table-cell-info-width (string-to-char table-cell-horizontal-chars))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2724 table-cell-intersection-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2725 (table--goto-coordinate old-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2726 (forward-line 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2727 (move-to-column column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2728 (setq old-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2729 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2730 (unless (string-match "^\\s *$" line)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2731 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2732 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2733 (insert line ?\n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2734 (goto-char (point-min)) ;; don't heighten cell unnecessarily
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2735 (setq table-inhibit-auto-fill-paragraph t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2736 (table--update-cell 'now) ;; can't defer this operation
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2737 (table--goto-coordinate old-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2738 (move-to-column column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2739 (table-recognize-cell 'force))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2740
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2741 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2742 (defun table-split-cell-horizontally ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2743 "Split current cell horizontally.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2744 Creates a cell on the left and a cell on the right of the current point location."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2745 (interactive "*")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2746 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2747 (let* ((o-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2748 (point-x (car o-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2749 cell-empty cell-contents cell-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2750 contents-to beg end rectangle strip-rect
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2751 (right-edge (= (car o-coordinate) (1- (car table-cell-info-rb-coordinate)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2752 (unless (table--cell-can-split-horizontally-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2753 (error "Can't split here"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2754 (let ((table-inhibit-update t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2755 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2756 (setq cell-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2757 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2758 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2759 (setq cell-empty (null (re-search-forward "\\S " nil t))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2760 (setq cell-contents (buffer-substring (point-min) (point-max)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2761 (setq table-inhibit-auto-fill-paragraph t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2762 (setq contents-to
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2763 (if cell-empty 'left
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2764 (let* ((completion-ignore-case t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2765 (default (car table-cell-split-contents-to-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2766 (intern
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2767 (if (member 'click (event-modifiers last-input-event))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2768 (x-popup-menu last-input-event
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2769 '("Existing cell contents to:"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2770 ("Title"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2771 ("Split" . "split") ("Left" . "left") ("Right" . "right"))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2772 (downcase (completing-read
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2773 (format "Existing cell contents to (default %s): " default)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2774 '(("split") ("left") ("right"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2775 nil t nil 'table-cell-split-contents-to-history default)))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2776 (unless (eq contents-to 'split)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2777 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2778 (erase-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2779 (setq table-inhibit-auto-fill-paragraph t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2780 (table--update-cell 'now)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2781 (setq beg (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2782 (cons point-x
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2783 (1- (cdr table-cell-info-lu-coordinate)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2784 (setq end (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2785 (cons (1+ point-x)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2786 (1+ (cdr table-cell-info-rb-coordinate)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2787 (setq rectangle (cons (char-to-string table-cell-intersection-char) nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2788 (let ((n table-cell-info-height))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2789 (while (prog1 (> n 0) (setq n (1- n)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2790 (setq rectangle (cons (char-to-string table-cell-vertical-char) rectangle))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2791 (setq rectangle (cons (char-to-string table-cell-intersection-char) rectangle))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2792 (if (eq contents-to 'split)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2793 (setq strip-rect (extract-rectangle beg end)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2794 (delete-rectangle beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2795 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2796 (table--insert-rectangle rectangle)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2797 (table--goto-coordinate o-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2798 (if cell-empty
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2799 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2800 (forward-char 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2801 (if right-edge
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2802 (table-widen-cell 1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2803 (unless (eq contents-to 'left)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2804 (forward-char 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2805 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2806 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2807 (if (eq contents-to 'split)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2808 ;; split inserts strip-rect after removing
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2809 ;; top and bottom borders
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2810 (let ((o-coord (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2811 (l (setq strip-rect (cdr strip-rect))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2812 (while (cddr l) (setq l (cdr l)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2813 (setcdr l nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2814 ;; insert the strip only when it is not a completely blank one
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2815 (unless (let ((cl (mapcar (lambda (s) (string= s " ")) strip-rect)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2816 (and (car cl)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2817 (table--uniform-list-p cl)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2818 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2819 (table--insert-rectangle strip-rect)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2820 (table--goto-coordinate o-coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2821 ;; left or right inserts original contents
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2822 (erase-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2823 (insert cell-contents)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2824 (table--goto-coordinate cell-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2825 (table--fill-region (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2826 ;; avoid unnecessary vertical cell expansion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2827 (and (looking-at "\\s *\\'")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2828 (re-search-backward "\\S \\(\\s *\\)\\=" nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2829 (goto-char (match-beginning 1))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2830 ;; in either case do not fill paragraph
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2831 (setq table-inhibit-auto-fill-paragraph t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2832 (table--update-cell 'now)) ;; can't defer this operation
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2833 (table-recognize-cell 'force)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2834
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2835 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2836 (defun table-split-cell (orientation)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2837 "Split current cell in ORIENTATION.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2838 ORIENTATION is a symbol either horizontally or vertically."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2839 (interactive
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2840 (list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2841 (let* ((dummy (barf-if-buffer-read-only))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2842 (completion-ignore-case t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2843 (default (car table-cell-split-orientation-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2844 (intern (downcase (completing-read
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2845 (format "Split orientation (default %s): " default)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2846 '(("horizontally") ("vertically"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2847 nil t nil 'table-cell-split-orientation-history default))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2848 (unless (memq orientation '(horizontally vertically))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2849 (error "Invalid orientation %s, must be horizontally or vertically"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2850 (symbol-name orientation)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2851 (if (eq orientation 'horizontally)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2852 (table-split-cell-horizontally)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2853 (table-split-cell-vertically)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2854
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2855 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2856 (defun table-justify (what justify)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2857 "Justify contents of a cell, a row of cells or a column of cells.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2858 WHAT is a symbol 'cell, 'row or 'column. JUSTIFY is a symbol 'left,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2859 'center, 'right, 'top, 'middle, 'bottom or 'none."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2860 (interactive
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2861 (list (let* ((dummy (barf-if-buffer-read-only))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2862 (completion-ignore-case t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2863 (default (car table-target-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2864 (intern (downcase (completing-read
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2865 (format "Justify what (default %s): " default)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2866 '(("cell") ("row") ("column"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2867 nil t nil 'table-target-history default))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2868 (table--query-justification)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2869 (funcall (intern (concat "table-justify-" (symbol-name what))) justify))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2870
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2871 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2872 (defun table-justify-cell (justify &optional paragraph)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2873 "Justify cell contents.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2874 JUSTIFY is a symbol 'left, 'center or 'right for horizontal, or 'top,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2875 'middle, 'bottom or 'none for vertical. When optional PARAGRAPH is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2876 non-nil the justify operation is limited to the current paragraph,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2877 otherwise the entire cell contents is justified."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2878 (interactive
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2879 (list (table--query-justification)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2880 (table--finish-delayed-tasks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2881 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2882 (table--justify-cell-contents justify paragraph))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2883
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2884 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2885 (defun table-justify-row (justify)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2886 "Justify cells of a row.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2887 JUSTIFY is a symbol 'left, 'center or 'right for horizontal, or top,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2888 'middle, 'bottom or 'none for vertical."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2889 (interactive
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2890 (list (table--query-justification)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2891 (let((cell-list (table--horizontal-cell-list nil nil 'top)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2892 (table--finish-delayed-tasks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2893 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2894 (while cell-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2895 (let ((cell (car cell-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2896 (setq cell-list (cdr cell-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2897 (goto-char (car cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2898 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2899 (table--justify-cell-contents justify))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2900
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2901 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2902 (defun table-justify-column (justify)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2903 "Justify cells of a column.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2904 JUSTIFY is a symbol 'left, 'center or 'right for horizontal, or top,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2905 'middle, 'bottom or 'none for vertical."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2906 (interactive
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2907 (list (table--query-justification)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2908 (let((cell-list (table--vertical-cell-list nil nil 'left)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2909 (table--finish-delayed-tasks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2910 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2911 (while cell-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2912 (let ((cell (car cell-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2913 (setq cell-list (cdr cell-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2914 (goto-char (car cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2915 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2916 (table--justify-cell-contents justify))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2917
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2918 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2919 (defun table-fixed-width-mode (&optional arg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2920 "Toggle fixing width mode.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2921 In the fixed width mode, typing inside a cell never changes the cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2922 width where in the normal mode the cell width expands automatically in
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2923 order to prevent a word being folded into multiple lines."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2924 (interactive "P")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2925 (table--finish-delayed-tasks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2926 (setq table-fixed-width-mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2927 (if (null arg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2928 (not table-fixed-width-mode)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2929 (> (prefix-numeric-value arg) 0)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2930 (table--update-cell-face))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2931
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2932 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2933 (defun table-query-dimension (&optional where)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2934 "Return the dimension of the current cell and the current table.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2935 The result is a list (cw ch tw th c r cells) where cw is the cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2936 width, ch is the cell height, tw is the table width, th is the table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2937 height, c is the number of columns, r is the number of rows and cells
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2938 is the total number of cells. The cell dimension excludes the cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2939 frame while the table dimension includes the table frame. The columns
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2940 and the rows are counted by the number of cell boundaries. Therefore
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2941 the number tends to be larger than it appears for the tables with
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2942 non-uniform cell structure (heavily spanned and split). When optional
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2943 WHERE is provided the cell and table at that location is reported."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2944 (interactive)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2945 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2946 (if where (goto-char where))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2947 (let ((starting-cell (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2948 cell table-lu table-rb col-list row-list (cells 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2949 (if (null starting-cell) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2950 (setq table-lu (car starting-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2951 (setq table-rb (cdr starting-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2952 (setq col-list (cons (car (table--get-coordinate (car starting-cell))) nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2953 (setq row-list (cons (cdr (table--get-coordinate (car starting-cell))) nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2954 (and (interactive-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2955 (message "Computing cell dimension..."))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2956 (while
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2957 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2958 (table-forward-cell 1 t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2959 (setq cells (1+ cells))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2960 (and (setq cell (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2961 (not (equal cell starting-cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2962 (if (< (car cell) table-lu)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2963 (setq table-lu (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2964 (if (> (cdr cell) table-rb)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2965 (setq table-rb (cdr cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2966 (let ((lu-coordinate (table--get-coordinate (car cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2967 (if (memq (car lu-coordinate) col-list) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2968 (setq col-list (cons (car lu-coordinate) col-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2969 (if (memq (cdr lu-coordinate) row-list) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2970 (setq row-list (cons (cdr lu-coordinate) row-list)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2971 (let* ((cell-lu-coordinate (table--get-coordinate (car starting-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2972 (cell-rb-coordinate (table--get-coordinate (cdr starting-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2973 (table-lu-coordinate (table--get-coordinate table-lu))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2974 (table-rb-coordinate (table--get-coordinate table-rb))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2975 (cw (- (car cell-rb-coordinate) (car cell-lu-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2976 (ch (1+ (- (cdr cell-rb-coordinate) (cdr cell-lu-coordinate))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2977 (tw (+ 2 (- (car table-rb-coordinate) (car table-lu-coordinate))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2978 (th (+ 3 (- (cdr table-rb-coordinate) (cdr table-lu-coordinate))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2979 (c (length col-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2980 (r (length row-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2981 (and (interactive-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2982 (message "Cell: (%dw, %dh), Table: (%dw, %dh), Dim: (%dc, %dr), Total Cells: %d" cw ch tw th c r cells))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2983 (list cw ch tw th c r cells))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2984
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2985 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2986 (defun table-generate-source (language &optional dest-buffer caption)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2987 "Generate source of the current table in the specified language.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2988 LANGUAGE is a symbol that specifies the language to describe the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2989 structure of the table. It must be either 'html, 'latex or 'cals.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2990 The resulted source text is inserted into DEST-BUFFER and the buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2991 object is returned. When DEST-BUFFER is omitted or nil the default
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2992 buffer specified in `table-dest-buffer-name' is used. In this case
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2993 the content of the default buffer is erased prior to the generation.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2994 When DEST-BUFFER is non-nil it is expected to be either a destination
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2995 buffer or a name of the destination buffer. In this case the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2996 generated result is inserted at the current point in the destination
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2997 buffer and the previously existing contents in the buffer are
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2998 untouched.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2999
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3000 References used for this implementation:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3001
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3002 HTML:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3003 http://www.w3.org
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3004
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3005 LaTeX:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3006 http://www.maths.tcd.ie/~dwilkins/LaTeXPrimer/Tables.html
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3007
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3008 CALS (DocBook DTD):
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3009 http://www.oasis-open.org/html/a502.htm
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3010 http://www.oreilly.com/catalog/docbook/chapter/book/table.html#AEN114751
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3011 "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3012 (interactive
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3013 (let* ((dummy (unless (table--probe-cell) (error "Table not found here")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3014 (completion-ignore-case t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3015 (default (car table-source-language-history))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3016 (language (downcase (completing-read
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3017 (format "Language (default %s): " default)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3018 (mapcar (lambda (s) (list (symbol-name s)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3019 table-source-languages)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3020 nil t nil 'table-source-language-history default))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3021 (list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3022 (intern language)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3023 (read-buffer "Destination buffer: " (concat table-dest-buffer-name "." language))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3024 (table--read-from-minibuffer '("Table Caption" . table-source-caption-history)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3025 (let ((default-buffer-name (concat table-dest-buffer-name "." (symbol-name language))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3026 (unless (or (interactive-p) (table--probe-cell)) (error "Table not found here"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3027 (unless (bufferp dest-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3028 (setq dest-buffer (get-buffer-create (or dest-buffer default-buffer-name))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3029 (if (string= (buffer-name dest-buffer) default-buffer-name)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3030 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3031 (erase-buffer)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3032 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3033 (let ((starting-cell (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3034 cell origin-cell tail-cell col-list row-list (n 0) i)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3035 ;; first analyze the table structure and prepare:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3036 ;; 1. origin cell (left up corner cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3037 ;; 2. tail cell (right bottom corner cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3038 ;; 3. column boundary list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3039 ;; 4. row boundary list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3040 (setq origin-cell starting-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3041 (setq tail-cell starting-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3042 (setq col-list (cons (car (table--get-coordinate (car starting-cell))) nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3043 (setq row-list (cons (cdr (table--get-coordinate (car starting-cell))) nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3044 (setq i 0)
49848
1bbf754d4688 (table-generate-source): Use ?\\ instead of space in "work in progress" message.
Juanma Barranquero <lekktu@gmail.com>
parents: 49599
diff changeset
3045 (let ((wheel [?- ?\\ ?| ?/]))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3046 (while
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3047 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3048 (if (interactive-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3049 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3050 (message "Analyzing table...%c" (aref wheel i))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3051 (if (eq (setq i (1+ i)) (length wheel))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3052 (setq i 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3053 (setq n (1+ n))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3054 (table-forward-cell 1 t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3055 (and (setq cell (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3056 (not (equal cell starting-cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3057 (if (< (car cell) (car origin-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3058 (setq origin-cell cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3059 (if (> (cdr cell) (cdr tail-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3060 (setq tail-cell cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3061 (let ((lu-coordinate (table--get-coordinate (car cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3062 (unless (memq (car lu-coordinate) col-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3063 (setq col-list (cons (car lu-coordinate) col-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3064 (unless (memq (cdr lu-coordinate) row-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3065 (setq row-list (cons (cdr lu-coordinate) row-list))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3066 (setq col-list (sort col-list '<))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3067 (setq row-list (sort row-list '<))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3068 (message "Generating source...")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3069 ;; clear the source generation property list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3070 (setplist 'table-source-info-plist nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3071 ;; prepare to start from the origin cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3072 (goto-char (car origin-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3073 ;; first put some header information
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3074 (table--generate-source-prologue dest-buffer language caption col-list row-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3075 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3076 ((eq language 'latex)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3077 ;; scan by character lines
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3078 (table--generate-source-scan-lines dest-buffer language origin-cell tail-cell col-list row-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3079 (t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3080 ;; scan by table cells
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3081 (table--generate-source-scan-rows dest-buffer language origin-cell col-list row-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3082 ;; insert closing
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3083 (table--generate-source-epilogue dest-buffer language col-list row-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3084 ;; lastly do some convenience work
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3085 (if (interactive-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3086 (save-selected-window
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3087 (pop-to-buffer dest-buffer t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3088 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3089 (and (string= (buffer-name dest-buffer) default-buffer-name)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3090 (buffer-file-name dest-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3091 (save-buffer))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3092 (message "Generating source...done")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3093 (let ((mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3094 (if (memq language '(cals)) 'sgml-mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3095 (intern (concat (symbol-name language) "-mode")))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3096 (if (fboundp mode)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3097 (call-interactively mode)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3098 )))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3099 dest-buffer))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3100
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3101 (defun table--generate-source-prologue (dest-buffer language caption col-list row-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3102 "Generate and insert source prologue into DEST-BUFFER."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3103 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3104 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3105 ((eq language 'html)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3106 (insert (format "<!-- This HTML table template is generated by emacs %s -->\n" emacs-version)
71107
c2a4cb0acf5e 2006-05-31 Takaaki Ota <Takaaki.Ota@am.sony.com>
Kim F. Storm <storm@cua.dk>
parents: 68571
diff changeset
3107 (format "<table %s>\n" table-html-table-attribute)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3108 (if (and (stringp caption)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3109 (not (string= caption "")))
71107
c2a4cb0acf5e 2006-05-31 Takaaki Ota <Takaaki.Ota@am.sony.com>
Kim F. Storm <storm@cua.dk>
parents: 68571
diff changeset
3110 (format " <caption>%s</caption>\n" caption)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3111 "")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3112 ((eq language 'latex)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3113 (insert (format "%% This LaTeX table template is generated by emacs %s\n" emacs-version)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3114 "\\begin{tabular}{|" (apply 'concat (make-list (length col-list) "l|")) "}\n"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3115 "\\hline\n"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3116 ((eq language 'cals)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3117 (insert (format "<!-- This CALS table template is generated by emacs %s -->\n" emacs-version)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3118 "<table frame=\"all\">\n")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3119 (if (and (stringp caption)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3120 (not (string= caption "")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3121 (insert " <title>" caption "</title>\n"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3122 (insert (format " <tgroup cols=\"%d\" align=\"left\" colsep=\"1\" rowsep=\"1\">\n" (length col-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3123 (table-put-source-info 'colspec-marker (point-marker))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3124 (table-put-source-info 'row-type (if (zerop table-cals-thead-rows) "tbody" "thead"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3125 (set-marker-insertion-type (table-get-source-info 'colspec-marker) nil) ;; insert after
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3126 (insert (format " <%s valign=\"top\">\n" (table-get-source-info 'row-type))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3127 )))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3128
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3129 (defun table--generate-source-epilogue (dest-buffer language col-list row-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3130 "Generate and insert source epilogue into DEST-BUFFER."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3131 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3132 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3133 ((eq language 'html)
71107
c2a4cb0acf5e 2006-05-31 Takaaki Ota <Takaaki.Ota@am.sony.com>
Kim F. Storm <storm@cua.dk>
parents: 68571
diff changeset
3134 (insert "</table>\n"))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3135 ((eq language 'latex)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3136 (insert "\\end{tabular}\n"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3137 ((eq language 'cals)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3138 (set-marker-insertion-type (table-get-source-info 'colspec-marker) t) ;; insert before
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3139 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3140 (goto-char (table-get-source-info 'colspec-marker))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3141 (mapcar
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3142 (lambda (col)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3143 (insert (format " <colspec colnum=\"%d\" colname=\"c%d\"/>\n" col col)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3144 (sort (table-get-source-info 'colnum-list) '<)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3145 (insert (format " </%s>\n </tgroup>\n</table>\n" (table-get-source-info 'row-type))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3146 )))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3147
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3148 (defun table--generate-source-scan-rows (dest-buffer language origin-cell col-list row-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3149 "Generate and insert source rows into DEST-BUFFER."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3150 (table-put-source-info 'current-row 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3151 (while row-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3152 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3153 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3154 ((eq language 'html)
71107
c2a4cb0acf5e 2006-05-31 Takaaki Ota <Takaaki.Ota@am.sony.com>
Kim F. Storm <storm@cua.dk>
parents: 68571
diff changeset
3155 (insert " <tr>\n"))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3156 ((eq language 'cals)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3157 (insert " <row>\n"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3158 ))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3159 (table--generate-source-cells-in-a-row dest-buffer language col-list row-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3160 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3161 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3162 ((eq language 'html)
71107
c2a4cb0acf5e 2006-05-31 Takaaki Ota <Takaaki.Ota@am.sony.com>
Kim F. Storm <storm@cua.dk>
parents: 68571
diff changeset
3163 (insert " </tr>\n"))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3164 ((eq language 'cals)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3165 (insert " </row>\n")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3166 (unless (/= (table-get-source-info 'current-row) table-cals-thead-rows)
49599
5ade352e8d1c Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48373
diff changeset
3167 (insert (format " </%s>\n" (table-get-source-info 'row-type)))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3168 (insert (format " <%s valign=\"top\">\n" (table-put-source-info 'row-type "tbody")))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3169 (table-put-source-info 'current-row (1+ (table-get-source-info 'current-row)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3170 (setq row-list (cdr row-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3171
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3172 (defun table--generate-source-cells-in-a-row (dest-buffer language col-list row-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3173 "Generate and insert source cells into DEST-BUFFER."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3174 (table-put-source-info 'current-column 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3175 (while col-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3176 (let* ((cell (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3177 (lu (table--get-coordinate (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3178 (rb (table--get-coordinate (cdr cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3179 (alignment (table--get-cell-justify-property cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3180 (valign (table--get-cell-valign-property cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3181 (row-list row-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3182 (colspan 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3183 (rowspan 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3184 (if (< (car lu) (car col-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3185 (setq col-list nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3186 (while (and col-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3187 (> (car lu) (car col-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3188 (setq col-list (cdr col-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3189 (table-put-source-info 'current-column (1+ (table-get-source-info 'current-column))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3190 (setq col-list (cdr col-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3191 (table-put-source-info 'next-column (1+ (table-get-source-info 'current-column)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3192 (while (and col-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3193 (> (1+ (car rb)) (car col-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3194 (setq colspan (1+ colspan))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3195 (setq col-list (cdr col-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3196 (table-put-source-info 'next-column (1+ (table-get-source-info 'next-column))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3197 (setq row-list (cdr row-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3198 (while (and row-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3199 (> (+ (cdr rb) 2) (car row-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3200 (setq rowspan (1+ rowspan))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3201 (setq row-list (cdr row-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3202 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3203 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3204 ((eq language 'html)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3205 (insert (format " <%s"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3206 (table-put-source-info
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3207 'cell-type
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3208 (if (or (<= (table-get-source-info 'current-row) table-html-th-rows)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3209 (<= (table-get-source-info 'current-column) table-html-th-columns))
71107
c2a4cb0acf5e 2006-05-31 Takaaki Ota <Takaaki.Ota@am.sony.com>
Kim F. Storm <storm@cua.dk>
parents: 68571
diff changeset
3210 "th" "td"))))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3211 (if (and table-html-cell-attribute (not (string= table-html-cell-attribute "")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3212 (insert " " table-html-cell-attribute))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3213 (if (> colspan 1) (insert (format " colspan=\"%d\"" colspan)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3214 (if (> rowspan 1) (insert (format " rowspan=\"%d\"" rowspan)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3215 (insert (format " align=\"%s\"" (if alignment (symbol-name alignment) "left")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3216 (insert (format " valign=\"%s\"" (if valign (symbol-name valign) "top")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3217 (insert ">\n"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3218 ((eq language 'cals)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3219 (insert " <entry")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3220 (if (> colspan 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3221 (let ((scol (table-get-source-info 'current-column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3222 (ecol (+ (table-get-source-info 'current-column) colspan -1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3223 (mapcar (lambda (col)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3224 (unless (memq col (table-get-source-info 'colnum-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3225 (table-put-source-info 'colnum-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3226 (cons col (table-get-source-info 'colnum-list)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3227 (list scol ecol))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3228 (insert (format " namest=\"c%d\" nameend=\"c%d\"" scol ecol))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3229 (if (> rowspan 1) (insert (format " morerows=\"%d\"" (1- rowspan))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3230 (if (and alignment
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3231 (not (memq alignment '(left none))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3232 (insert " align=\"" (symbol-name alignment) "\""))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3233 (if (and valign
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3234 (not (memq valign '(top none))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3235 (insert " valign=\"" (symbol-name valign) "\""))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3236 (insert ">\n"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3237 ))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3238 (table--generate-source-cell-contents dest-buffer language cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3239 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3240 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3241 ((eq language 'html)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3242 (insert (format" </%s>\n" (table-get-source-info 'cell-type))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3243 ((eq language 'cals)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3244 (insert " </entry>\n"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3245 ))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3246 (table-forward-cell 1 t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3247 (table-put-source-info 'current-column (table-get-source-info 'next-column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3248 ))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3249
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3250 (defun table--generate-source-cell-contents (dest-buffer language cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3251 "Generate and insert source cell contents of a CELL into DEST-BUFFER."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3252 (let ((cell-contents (extract-rectangle (car cell) (cdr cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3253 (with-temp-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3254 (table--insert-rectangle cell-contents)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3255 (table--remove-cell-properties (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3256 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3257 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3258 ((eq language 'html)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3259 (if table-html-delegate-spacing-to-user-agent
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3260 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3261 (table--remove-eol-spaces (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3262 (if (re-search-forward "\\s +\\'" nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3263 (replace-match "")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3264 (while (search-forward " " nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3265 (replace-match "&nbsp;"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3266 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3267 (while (and (re-search-forward "$" nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3268 (not (eobp)))
71107
c2a4cb0acf5e 2006-05-31 Takaaki Ota <Takaaki.Ota@am.sony.com>
Kim F. Storm <storm@cua.dk>
parents: 68571
diff changeset
3269 (insert "<br />")
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3270 (forward-char 1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3271 (unless (and table-html-delegate-spacing-to-user-agent
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3272 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3273 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3274 (looking-at "\\s *\\'")))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3275 ((eq language 'cals)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3276 (table--remove-eol-spaces (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3277 (if (re-search-forward "\\s +\\'" nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3278 (replace-match "")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3279 )
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3280 (setq cell-contents (buffer-substring (point-min) (point-max))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3281 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3282 (let ((beg (point)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3283 (insert cell-contents)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3284 (indent-rigidly beg (point)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3285 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3286 ((eq language 'html) 6)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3287 ((eq language 'cals) 10)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3288 (insert ?\n)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3289
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
3290 (defun table--cell-horizontal-char-p (c)
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
3291 "Test if character C is one of the horizontal characters"
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
3292 (memq c (string-to-list table-cell-horizontal-chars)))
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
3293
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3294 (defun table--generate-source-scan-lines (dest-buffer language origin-cell tail-cell col-list row-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3295 "Scan the table line by line.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3296 Currently this method is for LaTeX only."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3297 (let* ((lu-coord (table--get-coordinate (car origin-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3298 (rb-coord (table--get-coordinate (cdr tail-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3299 (x0 (car lu-coord))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3300 (x1 (car rb-coord))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3301 (y (cdr lu-coord))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3302 (y1 (cdr rb-coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3303 (while (<= y y1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3304 (let* ((border-p (memq (1+ y) row-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3305 (border-char-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3306 (mapcar (lambda (x)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3307 (if border-p (char-after (table--goto-coordinate (cons x y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3308 (char-before (table--goto-coordinate (cons x y)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3309 col-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3310 start i c)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3311 (if border-p
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3312 ;; horizontal cell border processing
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
3313 (if (and (table--cell-horizontal-char-p (car border-char-list))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3314 (table--uniform-list-p border-char-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3315 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3316 (insert "\\hline\n"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3317 (setq i 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3318 (while (setq c (nth i border-char-list))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
3319 (if (and start (not (table--cell-horizontal-char-p c)))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3320 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3321 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3322 (insert (format "\\cline{%d-%d}\n" (1+ start) i)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3323 (setq start nil)))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
3324 (if (and (not start) (table--cell-horizontal-char-p c))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3325 (setq start i))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3326 (setq i (1+ i)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3327 (if start
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3328 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3329 (insert (format "\\cline{%d-%d}\n" (1+ start) i)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3330 ;; horizontal cell contents processing
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3331 (let* ((span 1) ;; spanning length
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3332 (first-p t) ;; first in a row
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3333 (insert-column ;; a function that processes one column/multicolumn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3334 (function
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3335 (lambda (from to)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3336 (let ((line (table--buffer-substring-and-trim
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3337 (table--goto-coordinate (cons from y))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3338 (table--goto-coordinate (cons to y)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3339 ;; escape special characters
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3340 (with-temp-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3341 (insert line)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3342 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3343 (while (re-search-forward "\\([#$~_^%{}]\\)\\|\\(\\\\\\)\\|\\([<>|]\\)" nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3344 (if (match-beginning 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3345 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3346 (goto-char (match-beginning 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3347 (insert "\\"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3348 (if (match-beginning 2)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3349 (replace-match "$\\backslash$" t t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3350 (replace-match (concat "$" (match-string 3) "$")) t t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3351 (setq line (buffer-substring (point-min) (point-max))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3352 ;; insert a column separator and column/multicolumn contents
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3353 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3354 (unless first-p
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
3355 (insert (if (eq (char-before) ?\s) "" " ") "& "))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3356 (if (> span 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3357 (insert (format "\\multicolumn{%d}{%sl|}{%s}" span (if first-p "|" "") line))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3358 (insert line)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3359 (setq first-p nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3360 (setq span 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3361 (setq start (nth i col-list)))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3362 (setq start x0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3363 (setq i 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3364 (while (setq c (nth i border-char-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3365 (if (eq c table-cell-vertical-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3366 (funcall insert-column start (1- (nth i col-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3367 (setq span (1+ span)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3368 (setq i (1+ i)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3369 (funcall insert-column start x1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3370 (with-current-buffer dest-buffer
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
3371 (insert (if (eq (char-before) ?\s) "" " ") "\\\\\n"))))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3372 (setq y (1+ y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3373 (with-current-buffer dest-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3374 (insert "\\hline\n"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3375 ))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3376
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3377 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3378 (defun table-insert-sequence (str n increment interval justify)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3379 "Travel cells forward while inserting a specified sequence string in each cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3380 STR is the base string from which the sequence starts. When STR is an
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3381 empty string then each cell content is erased. When STR ends with
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3382 numerical characters (they may optionally be surrounded by a pair of
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3383 parentheses) they are incremented as a decimal number. Otherwise the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3384 last character in STR is incremented in ASCII code order. N is the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3385 number of sequence elements to insert. When N is negative the cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3386 traveling direction is backward. When N is zero it travels forward
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3387 entire table. INCREMENT is the increment between adjacent sequence
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3388 elements and can be a negative number for effectively decrementing.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3389 INTERVAL is the number of cells to travel between sequence element
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3390 insertion which is normally 1. When zero or less is given for
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3391 INTERVAL it is interpreted as number of cells per row so that sequence
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3392 is placed straight down vertically as long as the table's cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3393 structure is uniform. JUSTIFY is one of the symbol 'left, 'center or
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3394 'right, that specifies justification of the inserted string.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3395
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3396 Example:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3397
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3398 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3399 (table-insert 16 3 5 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3400 (table-forward-cell 15)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3401 (table-insert-sequence \"D0\" -16 1 1 'center)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3402 (table-forward-cell 16)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3403 (table-insert-sequence \"A[0]\" -16 1 1 'center)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3404 (table-forward-cell 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3405 (table-insert-sequence \"-\" 16 0 1 'center))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3406
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3407 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3408 (table-insert 16 8 5 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3409 (table-insert-sequence \"@\" 0 1 2 'right)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3410 (table-forward-cell 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3411 (table-insert-sequence \"64\" 0 1 2 'left))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3412 "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3413 (interactive
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3414 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3415 (barf-if-buffer-read-only)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3416 (unless (table--probe-cell) (error "Table not found here"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3417 (list (read-from-minibuffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3418 "Sequence base string: " (car table-sequence-string-history) nil nil 'table-sequence-string-history)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3419 (string-to-number
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3420 (table--read-from-minibuffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3421 '("How many elements (0: maximum, negative: backward traveling)" . table-sequence-count-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3422 (string-to-number
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3423 (table--read-from-minibuffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3424 '("Increment element by" . table-sequence-increment-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3425 (string-to-number
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3426 (table--read-from-minibuffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3427 '("Cell interval (0: vertical, 1:horizontal)" . table-sequence-interval-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3428 (let* ((completion-ignore-case t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3429 (default (car table-sequence-justify-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3430 (intern (downcase (completing-read
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3431 (format "Justify (default %s): " default)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3432 '(("left") ("center") ("right"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3433 nil t nil 'table-sequence-justify-history default)))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3434 (unless (or (interactive-p) (table--probe-cell)) (error "Table not found here"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3435 (string-match "\\([0-9]*\\)\\([]})>]*\\)\\'" str)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3436 (if (interactive-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3437 (message "Sequencing..."))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3438 (let* ((prefix (substring str 0 (match-beginning 1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3439 (index (match-string 1 str))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3440 (fmt (format "%%%s%dd" (if (eq (string-to-char index) ?0) "0" "") (length index)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3441 (postfix (match-string 2 str))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3442 (dim (table-query-dimension))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3443 (cells (nth 6 dim))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3444 (direction (if (< n 0) -1 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3445 (interval-count 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3446 (if (string= index "")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3447 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3448 (setq index nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3449 (if (string= prefix "")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3450 (setq prefix nil)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3451 (setq index (string-to-number index)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3452 (if (< n 0) (setq n (- n)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3453 (if (or (zerop n) (> n cells)) (setq n cells))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3454 (if (< interval 0) (setq interval (- interval)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3455 (if (zerop interval) (setq interval (nth 4 dim)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3456 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3457 (while (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3458 (if (> interval-count 0) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3459 (setq interval-count interval)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3460 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3461 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3462 (if (not (or prefix index))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3463 (erase-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3464 (insert prefix)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3465 (if index (insert (format fmt index)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3466 (insert postfix)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3467 (table--fill-region (point-min) (point) table-cell-info-width justify)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3468 (setq table-cell-info-justify justify))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3469 (setq table-inhibit-auto-fill-paragraph t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3470 (table--update-cell 'now)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3471 (if index
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3472 (setq index (+ index increment))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3473 (if (and prefix (string= postfix ""))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3474 (let ((len-1 (1- (length prefix))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3475 (setq prefix (concat (substring prefix 0 len-1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3476 (char-to-string
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3477 (+ (string-to-char (substring prefix len-1)) increment)))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3478 (setq n (1- n)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3479 (table-forward-cell direction t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3480 (setq interval-count (1- interval-count))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3481 (setq cells (1- cells))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3482 (and (> n 0) (> cells 0)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3483 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3484 (if (interactive-p)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3485 (message "Sequencing...done"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3486 ))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3487
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3488 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3489 (defun table-delete-row (n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3490 "Delete N row(s) of cells.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3491 Delete N rows of cells from current row. The current row is the row
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3492 contains the current cell where point is located. Each row must
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3493 consists from cells of same height."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3494 (interactive "*p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3495 (let ((orig-coord (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3496 (bt-coord (table--get-coordinate (cdr (table--vertical-cell-list nil 'first-only))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3497 lu-coord rb-coord rect)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3498 ;; determine the area to delete while testing row height uniformity
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3499 (while (> n 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3500 (setq n (1- n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3501 (unless (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3502 (error "Table not found"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3503 (let ((cell-list (table--horizontal-cell-list 'left-to-right)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3504 (unless
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3505 (and (table--uniform-list-p
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3506 (mapcar (lambda (cell) (cdr (table--get-coordinate (car cell)))) cell-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3507 (table--uniform-list-p
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3508 (mapcar (lambda (cell) (cdr (table--get-coordinate (cdr cell)))) cell-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3509 (error "Cells in this row are not in uniform height"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3510 (unless lu-coord
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3511 (setq lu-coord (table--get-coordinate (caar cell-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3512 (setq rb-coord (table--get-coordinate (cdar (last cell-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3513 (table--goto-coordinate (cons (car orig-coord) (+ 2 (cdr rb-coord))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3514 ;; copy the remaining area (below the deleting area)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3515 (setq rect (extract-rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3516 (table--goto-coordinate (cons (1- (car lu-coord)) (1+ (cdr rb-coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3517 (table--goto-coordinate (cons (1+ (car rb-coord)) (1+ (cdr bt-coord))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3518 ;; delete the deleting area and below together
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3519 (delete-rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3520 (table--goto-coordinate (cons (1- (car lu-coord)) (1- (cdr lu-coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3521 (table--goto-coordinate (cons (1+ (car rb-coord)) (1+ (cdr bt-coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3522 (table--goto-coordinate (cons (1- (car lu-coord)) (1- (cdr lu-coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3523 ;; insert the remaining area while appending blank lines below it
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3524 (table--insert-rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3525 (append rect (make-list (+ 2 (- (cdr rb-coord) (cdr lu-coord)))
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
3526 (make-string (+ 2 (- (car rb-coord) (car lu-coord))) ?\s))))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3527 ;; remove the appended blank lines below the table if they are unnecessary
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3528 (table--goto-coordinate (cons 0 (- (cdr bt-coord) (- (cdr rb-coord) (cdr lu-coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3529 (table--remove-blank-lines (+ 2 (- (cdr rb-coord) (cdr lu-coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3530 ;; fix up intersections
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3531 (let ((coord (cons (car lu-coord) (1- (cdr lu-coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3532 (n (1+ (- (car rb-coord) (car lu-coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3533 (while (> n 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3534 (table--goto-coordinate coord)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3535 (if (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3536 (or (and (table--goto-coordinate (cons (car coord) (1- (cdr coord))) 'no-extension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3537 (looking-at (regexp-quote (char-to-string table-cell-vertical-char))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3538 (and (table--goto-coordinate (cons (car coord) (1+ (cdr coord))) 'no-extension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3539 (looking-at (regexp-quote (char-to-string table-cell-vertical-char))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3540 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3541 (delete-char 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3542 (insert table-cell-intersection-char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3543 (delete-char 1)
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
3544 (insert (string-to-char table-cell-horizontal-chars)))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3545 (setq n (1- n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3546 (setcar coord (1+ (car coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3547 ;; goto appropriate end point
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3548 (table--goto-coordinate (cons (car orig-coord) (cdr lu-coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3549
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3550 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3551 (defun table-delete-column (n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3552 "Delete N column(s) of cells.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3553 Delete N columns of cells from current column. The current column is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3554 the column contains the current cell where point is located. Each
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3555 column must consists from cells of same width."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3556 (interactive "*p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3557 (let ((orig-coord (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3558 lu-coord rb-coord)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3559 ;; determine the area to delete while testing column width uniformity
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3560 (while (> n 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3561 (setq n (1- n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3562 (unless (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3563 (error "Table not found"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3564 (let ((cell-list (table--vertical-cell-list 'top-to-bottom)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3565 (unless
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3566 (and (table--uniform-list-p
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3567 (mapcar (function (lambda (cell) (car (table--get-coordinate (car cell))))) cell-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3568 (table--uniform-list-p
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3569 (mapcar (function (lambda (cell) (car (table--get-coordinate (cdr cell))))) cell-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3570 (error "Cells in this column are not in uniform width"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3571 (unless lu-coord
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3572 (setq lu-coord (table--get-coordinate (caar cell-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3573 (setq rb-coord (table--get-coordinate (cdar (last cell-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3574 (table--goto-coordinate (cons (1+ (car rb-coord)) (cdr orig-coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3575 ;; delete the area
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3576 (delete-rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3577 (table--goto-coordinate (cons (car lu-coord) (1- (cdr lu-coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3578 (table--goto-coordinate (cons (1+ (car rb-coord)) (1+ (cdr rb-coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3579 ;; fix up the intersections
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3580 (let ((coord (cons (1- (car lu-coord)) (cdr lu-coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3581 (n (1+ (- (cdr rb-coord) (cdr lu-coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3582 (while (> n 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3583 (table--goto-coordinate coord)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3584 (if (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3585 (or (and (table--goto-coordinate (cons (1- (car coord)) (cdr coord)) 'no-extension)
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
3586 (looking-at (regexp-opt-charset
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
3587 (string-to-list table-cell-horizontal-chars))))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3588 (and (table--goto-coordinate (cons (1+ (car coord)) (cdr coord)) 'no-extension)
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
3589 (looking-at (regexp-opt-charset
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
3590 (string-to-list table-cell-horizontal-chars))))))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3591 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3592 (delete-char 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3593 (insert table-cell-intersection-char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3594 (delete-char 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3595 (insert table-cell-vertical-char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3596 (setq n (1- n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3597 (setcdr coord (1+ (cdr coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3598 ;; goto appropriate end point
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3599 (table--goto-coordinate (cons (car lu-coord) (cdr orig-coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3600
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3601 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3602 (defun table-capture (beg end &optional col-delim-regexp row-delim-regexp justify min-cell-width columns)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3603 "Convert plain text into a table by capturing the text in the region.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3604 Create a table with the text in region as cell contents. BEG and END
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3605 specify the region. The text in the region is replaced with a table.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3606 The removed text is inserted in the table. When optional
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3607 COL-DELIM-REGEXP and ROW-DELIM-REGEXP are provided the region contents
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3608 is parsed and separated into individual cell contents by using the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3609 delimiter regular expressions. This parsing determines the number of
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3610 columns and rows of the table automatically. If COL-DELIM-REGEXP and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3611 ROW-DELIM-REGEXP are omitted the result table has only one cell and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3612 the entire region contents is placed in that cell. Optional JUSTIFY
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3613 is one of 'left, 'center or 'right, which specifies the cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3614 justification. Optional MIN-CELL-WIDTH specifies the minimum cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3615 width. Optional COLUMNS specify the number of columns when
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3616 ROW-DELIM-REGEXP is not specified.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3617
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3618
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3619 Example 1:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3620
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3621 1, 2, 3, 4
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3622 5, 6, 7, 8
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3623 , 9, 10
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3624
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3625 Running `table-capture' on above 3 line region with COL-DELIM-REGEXP
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3626 \",\" and ROW-DELIM-REGEXP \"\\n\" creates the following table. In
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3627 this example the cells are centered and minimum cell width is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3628 specified as 5.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3629
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3630 +-----+-----+-----+-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3631 | 1 | 2 | 3 | 4 |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3632 +-----+-----+-----+-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3633 | 5 | 6 | 7 | 8 |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3634 +-----+-----+-----+-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3635 | | 9 | 10 | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3636 +-----+-----+-----+-----+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3637
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3638 Note:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3639
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3640 In case the function is called interactively user must use \\[quoted-insert] `quoted-insert'
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3641 in order to enter \"\\n\" successfully. COL-DELIM-REGEXP at the end
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3642 of each row is optional.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3643
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3644
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3645 Example 2:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3646
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3647 This example shows how a table can be used for text layout editing.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3648 Let `table-capture' capture the following region starting from
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3649 -!- and ending at -*-, that contains three paragraphs and two item
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3650 name headers. This time specify empty string for both
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3651 COL-DELIM-REGEXP and ROW-DELIM-REGEXP.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3652
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3653 -!-`table-capture' is a powerful command however mastering its power
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3654 requires some practice. Here is a list of items what it can do.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3655
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3656 Parse Cell Items By using column delimiter regular
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3657 expression and raw delimiter regular
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3658 expression, it parses the specified text
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3659 area and extracts cell items from
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3660 non-table text and then forms a table out
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3661 of them.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3662
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3663 Capture Text Area When no delimiters are specified it
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3664 creates a single cell table. The text in
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3665 the specified region is placed in that
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3666 cell.-*-
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3667
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3668 Now the entire content is captured in a cell which is itself a table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3669 like this.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3670
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3671 +-----------------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3672 |`table-capture' is a powerful command however mastering its power|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3673 |requires some practice. Here is a list of items what it can do. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3674 | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3675 |Parse Cell Items By using column delimiter regular |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3676 | expression and raw delimiter regular |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3677 | expression, it parses the specified text |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3678 | area and extracts cell items from |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3679 | non-table text and then forms a table out |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3680 | of them. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3681 | |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3682 |Capture Text Area When no delimiters are specified it |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3683 | creates a single cell table. The text in |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3684 | the specified region is placed in that |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3685 | cell. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3686 +-----------------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3687
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3688 By splitting the cell appropriately we now have a table consisting of
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3689 paragraphs occupying its own cell. Each cell can now be edited
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3690 independently.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3691
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3692 +-----------------------------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3693 |`table-capture' is a powerful command however mastering its power|
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3694 |requires some practice. Here is a list of items what it can do. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3695 +---------------------+-------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3696 |Parse Cell Items |By using column delimiter regular |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3697 | |expression and raw delimiter regular |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3698 | |expression, it parses the specified text |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3699 | |area and extracts cell items from |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3700 | |non-table text and then forms a table out |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3701 | |of them. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3702 +---------------------+-------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3703 |Capture Text Area |When no delimiters are specified it |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3704 | |creates a single cell table. The text in |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3705 | |the specified region is placed in that |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3706 | |cell. |
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3707 +---------------------+-------------------------------------------+
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3708
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3709 By applying `table-release', which does the opposite process, the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3710 contents become once again plain text. `table-release' works as
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3711 companion command to `table-capture' this way.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3712 "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3713 (interactive
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3714 (let ((col-delim-regexp)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3715 (row-delim-regexp))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3716 (barf-if-buffer-read-only)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3717 (if (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3718 (error "Can't insert a table inside a table"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3719 (list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3720 (mark) (point)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3721 (setq col-delim-regexp
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3722 (read-from-minibuffer "Column delimiter regexp: "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3723 (car table-col-delim-regexp-history) nil nil 'table-col-delim-regexp-history))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3724 (setq row-delim-regexp
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3725 (read-from-minibuffer "Row delimiter regexp: "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3726 (car table-row-delim-regexp-history) nil nil 'table-row-delim-regexp-history))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3727 (let* ((completion-ignore-case t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3728 (default (car table-capture-justify-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3729 (if (and (string= col-delim-regexp "") (string= row-delim-regexp "")) 'left
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3730 (intern
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3731 (downcase (completing-read
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3732 (format "Justify (default %s): " default)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3733 '(("left") ("center") ("right"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3734 nil t nil 'table-capture-justify-history default)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3735 (if (and (string= col-delim-regexp "") (string= row-delim-regexp "")) "1"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3736 (table--read-from-minibuffer '("Minimum cell width" . table-capture-min-cell-width-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3737 (if (and (not (string= col-delim-regexp "")) (string= row-delim-regexp ""))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3738 (string-to-number
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3739 (table--read-from-minibuffer '("Number of columns" . 'table-capture-columns-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3740 nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3741 )))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3742 (if (> beg end) (let ((tmp beg)) (setq beg end) (setq end tmp)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3743 (if (string= col-delim-regexp "") (setq col-delim-regexp nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3744 (if (string= row-delim-regexp "") (setq row-delim-regexp nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3745 (if (and columns (< columns 1)) (setq columns nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3746 (unless min-cell-width (setq min-cell-width "5"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3747 (let ((contents (buffer-substring beg end))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3748 (cols 0) (rows 0) c r cell-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3749 (delim-pattern
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3750 (if (and col-delim-regexp row-delim-regexp)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3751 (format "\\(\\(%s\\)?\\s *\\(%s\\)\\s *\\)\\|\\(\\(%s\\)\\s *\\)"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3752 col-delim-regexp row-delim-regexp col-delim-regexp)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3753 (if col-delim-regexp
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3754 (format "\\(\\)\\(\\)\\(\\)\\(\\(%s\\)\\s *\\)" col-delim-regexp))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3755 (contents-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3756 ;; when delimiters are specified extract cells and determine the cell dimension
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3757 (if delim-pattern
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3758 (with-temp-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3759 (insert contents)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3760 ;; make sure the contents ends with a newline
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3761 (goto-char (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3762 (unless (zerop (current-column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3763 (insert ?\n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3764 ;; skip the preceding white spaces
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3765 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3766 (if (looking-at "\\s +")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3767 (goto-char (match-end 0)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3768 ;; extract cell contents
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3769 (let ((from (point)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3770 (setq cell-list nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3771 (setq c 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3772 (while (and (re-search-forward delim-pattern nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3773 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3774 ;; row delimiter
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3775 ((and (match-string 1) (not (string= (match-string 1) "")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3776 (setq rows (1+ rows))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3777 (setq cell-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3778 (append cell-list (list (buffer-substring from (match-beginning 1)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3779 (setq from (match-end 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3780 (setq contents-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3781 (append contents-list (list cell-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3782 (setq cell-list nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3783 (setq c (1+ c))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3784 (if (> c cols) (setq cols c))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3785 (setq c 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3786 t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3787 ;; column delimiter
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3788 ((and (match-string 4) (not (string= (match-string 4) "")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3789 (setq cell-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3790 (append cell-list (list (buffer-substring from (match-beginning 4)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3791 (setq from (match-end 4))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3792 (setq c (1+ c))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3793 (if (> c cols) (setq cols c))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3794 t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3795 (t nil))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3796 ;; take care of the last element without a post delimiter
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3797 (unless (null (looking-at ".+$"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3798 (setq cell-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3799 (append cell-list (list (match-string 0))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3800 (setq cols (1+ cols)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3801 ;; take care of the last row without a terminating delimiter
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3802 (unless (null cell-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3803 (setq rows (1+ rows))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3804 (setq contents-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3805 (append contents-list (list cell-list)))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3806 ;; finalize the table dimension
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3807 (if (and columns contents-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3808 ;; when number of columns are specified and cells are parsed determine the dimension
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3809 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3810 (setq cols columns)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3811 (setq rows (/ (+ (length (car contents-list)) columns -1) columns)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3812 ;; when dimensions are not specified default to a single cell table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3813 (if (zerop rows) (setq rows 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3814 (if (zerop cols) (setq cols 1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3815 ;; delete the region and reform line breaks
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3816 (delete-region beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3817 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3818 (unless (zerop (current-column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3819 (insert ?\n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3820 (unless (looking-at "\\s *$")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3821 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3822 (insert ?\n)))
49599
5ade352e8d1c Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48373
diff changeset
3823 ;; insert the table
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3824 ;; insert the cell contents
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3825 (if (null contents-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3826 ;; single cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3827 (let ((width) (height))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3828 (with-temp-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3829 (insert contents)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3830 (table--remove-eol-spaces (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3831 (table--untabify (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3832 (setq width (table--measure-max-width))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3833 (setq height (1+ (table--current-line (point-max))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3834 (setq contents (buffer-substring (point-min) (point-max))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3835 (table-insert cols rows width height)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3836 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3837 (insert contents)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3838 (setq table-inhibit-auto-fill-paragraph t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3839 ;; multi cells
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3840 (table-insert cols rows min-cell-width 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3841 (setq r 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3842 (setq cell-list nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3843 (while (< r rows)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3844 (setq r (1+ r))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3845 (setq c 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3846 (unless cell-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3847 (setq cell-list (car contents-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3848 (setq contents-list (cdr contents-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3849 (while (< c cols)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3850 (setq c (1+ c))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3851 (if (car cell-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3852 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3853 (insert (car cell-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3854 (setq cell-list (cdr cell-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3855 (setq table-cell-info-justify justify)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3856 (table-forward-cell 1))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3857
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3858 ;;;###autoload
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3859 (defun table-release ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3860 "Convert a table into plain text by removing the frame from a table.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3861 Remove the frame from a table and inactivate the table. This command
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3862 converts a table into plain text without frames. It is a companion to
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3863 `table-capture' which does the opposite process."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3864 (interactive)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3865 (let ((origin-cell (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3866 table-lu table-rb)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3867 (if origin-cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3868 (let ((old-point (point-marker)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3869 ;; save-excursion is not sufficient for this
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3870 ;; because untabify operation moves point
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3871 (set-marker-insertion-type old-point t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3872 (unwind-protect
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3873 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3874 (while
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3875 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3876 (table-forward-cell 1 nil 'unrecognize)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3877 (let ((cell (table--probe-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3878 (if (or (null table-lu)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3879 (< (car cell) table-lu))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3880 (setq table-lu (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3881 (if (or (null table-rb)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3882 (> (cdr cell) table-rb))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3883 (setq table-rb (cdr cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3884 (and cell (not (equal cell origin-cell))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3885 (let* ((lu-coord (table--get-coordinate table-lu))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3886 (rb-coord (table--get-coordinate table-rb))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3887 (lu (table--goto-coordinate (table--offset-coordinate lu-coord '(-1 . -1)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3888 (table--spacify-frame)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3889 (setcdr rb-coord (1+ (cdr rb-coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3890 (delete-rectangle lu (table--goto-coordinate (cons (car lu-coord) (cdr rb-coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3891 (table--remove-eol-spaces
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3892 (table--goto-coordinate (cons 0 (1- (cdr lu-coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3893 (table--goto-coordinate rb-coord) nil t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3894 (goto-char old-point))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3895
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3896 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3897 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3898 ;; Worker functions (executed implicitly)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3899 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3900
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3901 (defun table--make-cell-map ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3902 "Make the table cell keymap if it does not exist yet."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3903 ;; this is irrelevant to keymap but good place to make sure to be executed
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3904 (table--update-cell-face)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3905 (unless table-cell-map
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3906 (let ((map (make-sparse-keymap))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3907 (remap-alist table-command-remap-alist))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3908 ;; table-command-prefix mode specific bindings
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3909 (if (vectorp table-command-prefix)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3910 (mapcar (lambda (binding)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3911 (let ((seq (copy-sequence (car binding))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3912 (and (vectorp seq)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3913 (listp (aref seq 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3914 (eq (car (aref seq 0)) 'control)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3915 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3916 (aset seq 0 (cadr (aref seq 0)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3917 (define-key map (vconcat table-command-prefix seq) (cdr binding))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3918 table-cell-bindings))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3919 ;; shorthand control bindings
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3920 (mapcar (lambda (binding)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3921 (define-key map (car binding) (cdr binding)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3922 table-cell-bindings)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3923 ;; remap normal commands to table specific version
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3924 (while remap-alist
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3925 (define-key map (vector 'remap (caar remap-alist)) (cdar remap-alist))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3926 (setq remap-alist (cdr remap-alist)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3927 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3928 (setq table-cell-map map)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3929 (fset 'table-cell-map map)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3930 ;; add menu for table cells
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3931 (unless table-disable-menu
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3932 (easy-menu-define table-cell-menu-map table-cell-map "Table cell menu" table-cell-menu)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3933 (if (featurep 'xemacs)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3934 (easy-menu-add table-cell-menu)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3935 (run-hooks 'table-cell-map-hook))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3936
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3937 ;; Create the keymap after running the user init file so that the user
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3938 ;; modification to the global-map is accounted.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3939 (add-hook 'after-init-hook 'table--make-cell-map t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3940
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3941 (defun *table--cell-self-insert-command ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3942 "Table cell version of `self-insert-command'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3943 (interactive "*")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3944 (let ((char (table--unibyte-char-to-multibyte last-command-char)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3945 (if (eq buffer-undo-list t) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3946 (if (not (eq last-command this-command))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3947 (setq table-cell-self-insert-command-count 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3948 (if (car buffer-undo-list) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3949 (if (>= table-cell-self-insert-command-count 19)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3950 (setq table-cell-self-insert-command-count 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3951 (setq buffer-undo-list (cdr buffer-undo-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3952 (setq table-cell-self-insert-command-count (1+ table-cell-self-insert-command-count))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3953 (table--cell-insert-char char overwrite-mode)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3954
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3955 (defun *table--cell-delete-backward-char (n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3956 "Table cell version of `delete-backward-char'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3957 (interactive "*p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3958 (*table--cell-delete-char (- n)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3959
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3960 (defun *table--cell-newline (&optional indent)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3961 "Table cell version of `newline'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3962 (interactive "*")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3963 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3964 (let ((column (current-column)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3965 (insert ?\n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3966 (if indent (indent-to-column column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3967 ;; fill only when at the beginning of paragraph
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3968 (if (= (point)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3969 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3970 (forward-paragraph -1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3971 (if (looking-at "\\s *$")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3972 (forward-line 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3973 (point)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3974 nil ; yes, at the beginning of the paragraph
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3975 (setq table-inhibit-auto-fill-paragraph t)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3976
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3977 (defun *table--cell-open-line (n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3978 "Table cell version of `open-line'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3979 (interactive "*p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3980 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3981 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3982 (insert (make-string n ?\n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3983 (table--fill-region (point) (point))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3984 (setq table-inhibit-auto-fill-paragraph t))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3985
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3986 (defun *table--cell-newline-and-indent ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3987 "Table cell version of `newline-and-indent'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3988 (interactive)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3989 (*table--cell-newline t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3990
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3991 (defun *table--cell-delete-char (n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3992 "Table cell version of `delete-char'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3993 (interactive "*p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3994 (let ((overwrite overwrite-mode))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3995 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3996 (if (and overwrite (< n 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3997 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3998 (while (not (zerop n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3999 (let ((coordinate (table--get-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4000 (if (zerop (car coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4001 (unless (zerop (cdr coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4002 (table--goto-coordinate (cons (1- table-cell-info-width) (1- (cdr coordinate))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4003 (unless (eolp)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4004 (delete-char 1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4005 (delete-char -1)
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
4006 (insert ?\s)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4007 (forward-char -1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4008 (setq n (1+ n)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4009 (setq table-inhibit-auto-fill-paragraph t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4010 (let ((coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4011 (end-marker (copy-marker (+ (point) n)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4012 (deleted))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4013 (if (or (< end-marker (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4014 (> end-marker (point-max))) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4015 (table--remove-eol-spaces (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4016 (setq deleted (buffer-substring (point) end-marker))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4017 (delete-char n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4018 ;; in fixed width mode when two lines are concatenated
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4019 ;; remove continuation character if there is one.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4020 (and table-fixed-width-mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4021 (string-match "^\n" deleted)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4022 (equal (char-before) table-word-continuation-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4023 (delete-char -2))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4024 ;; see if the point is placed at the right tip of the previous
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4025 ;; blank line, if so get rid of the preceding blanks.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4026 (if (and (not (bolp))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4027 (/= (cdr coordinate) (cdr (table--get-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4028 (let ((end (point)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4029 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4030 (beginning-of-line)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4031 (re-search-forward "\\s +" end t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4032 (= (point) end))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4033 (replace-match ""))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4034 ;; do not fill the paragraph if the point is already at the end
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4035 ;; of this paragraph and is following a blank character
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4036 ;; (otherwise the filling squeezes the preceding blanks)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4037 (if (and (looking-at "\\s *$")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4038 (or (bobp)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4039 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4040 (backward-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4041 (looking-at "\\s "))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4042 (setq table-inhibit-auto-fill-paragraph t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4043 )
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4044 (set-marker end-marker nil))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4045
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4046 (defun *table--cell-quoted-insert (arg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4047 "Table cell version of `quoted-insert'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4048 (interactive "*p")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4049 (let ((char (table--unibyte-char-to-multibyte (read-quoted-char))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4050 (while (> arg 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4051 (table--cell-insert-char char nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4052 (setq arg (1- arg)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4053
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4054 (defun *table--cell-describe-mode ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4055 "Table cell version of `describe-mode'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4056 (interactive)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4057 (if (not (table--point-in-cell-p))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4058 (call-interactively 'describe-mode)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4059 (with-output-to-temp-buffer "*Help*"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4060 (princ "Table mode: (in ")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4061 (princ mode-name)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4062 (princ " mode)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4063
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4064 Table is not a mode technically. You can regard it as a pseudo mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4065 which exists locally within a buffer. It overrides some standard
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4066 editing behaviors. Editing operations in a table produces confined
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4067 effects to the current cell. It may grow the cell horizontally and/or
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4068 vertically depending on the newly entered or deleted contents of the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4069 cell, and also depending on the current mode of cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4070
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4071 In the normal mode the table preserves word continuity. Which means
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4072 that a word never gets folded into multiple lines. For this purpose
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4073 table will occasionally grow the cell width. On the other hand, when
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4074 in a fixed width mode all cell width are fixed. When a word can not
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4075 fit in the cell width the word is folded into the next line. The
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4076 folded location is marked by a continuation character which is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4077 specified in the variable `table-word-continuation-char'.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4078 ")
68571
a0b9a3f3fc7a (*table--cell-describe-mode, *table--cell-describe-bindings): Undo last change
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68271
diff changeset
4079 (print-help-return-message))))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4080
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4081 (defun *table--cell-describe-bindings ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4082 "Table cell version of `describe-bindings'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4083 (interactive)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4084 (if (not (table--point-in-cell-p))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4085 (call-interactively 'describe-bindings)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4086 (with-output-to-temp-buffer "*Help*"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4087 (princ "Table Bindings:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4088 key binding
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4089 --- -------
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4090
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4091 ")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4092 (mapcar (lambda (binding)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4093 (princ (format "%-16s%s\n"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4094 (key-description (car binding))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4095 (cdr binding))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4096 table-cell-bindings)
68571
a0b9a3f3fc7a (*table--cell-describe-mode, *table--cell-describe-bindings): Undo last change
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 68271
diff changeset
4097 (print-help-return-message))))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4098
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4099 (defun *table--cell-dabbrev-expand (arg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4100 "Table cell version of `dabbrev-expand'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4101 (interactive "*P")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4102 (let ((dabbrev-abbrev-char-regexp (concat "[^"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4103 (char-to-string table-cell-vertical-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4104 (char-to-string table-cell-intersection-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4105 " \n]")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4106 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4107 (dabbrev-expand arg))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4108
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4109 (defun *table--cell-dabbrev-completion (&optional arg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4110 "Table cell version of `dabbrev-completion'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4111 (interactive "*P")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4112 (error "`dabbrev-completion' is incompatible with table")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4113 (let ((dabbrev-abbrev-char-regexp (concat "[^"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4114 (char-to-string table-cell-vertical-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4115 (char-to-string table-cell-intersection-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4116 " \n]")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4117 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4118 (dabbrev-completion arg))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4119
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4120 (defun *table--present-cell-popup-menu (event)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4121 "Present and handle cell popup menu."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4122 (interactive "e")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4123 (unless table-disable-menu
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4124 (select-window (posn-window (event-start event)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4125 (goto-char (posn-point (event-start event)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4126 (let ((item-list (x-popup-menu event table-cell-menu-map))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4127 (func table-cell-menu-map))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4128 (while item-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4129 (setq func (nth 3 (assoc (car item-list) func)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4130 (setq item-list (cdr item-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4131 (if (and (symbolp func) (fboundp func))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4132 (call-interactively func)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4133
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4134 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4135 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4136 ;; Cell updating functions
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4137 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4138
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4139 (defun table--update-cell (&optional now)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4140 "Update the table cell contents.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4141 When the optional parameter NOW is nil it only sets up the update
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4142 timer. If it is non-nil the function copies the contents of the cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4143 cache buffer into the designated cell in the table buffer."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4144 (if (null table-update-timer) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4145 (table--cancel-timer table-update-timer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4146 (setq table-update-timer nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4147 (if (or (not now)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4148 (and (boundp 'quail-converting)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4149 quail-converting) ;; defer operation while current quail work is not finished.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4150 (and (boundp 'quail-translating)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4151 quail-translating))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4152 (setq table-update-timer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4153 (table--set-timer table-time-before-update
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4154 (function table--update-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4155 'now))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4156 (save-current-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4157 (set-buffer table-cell-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4158 (let ((cache-buffer (get-buffer-create table-cache-buffer-name))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4159 (org-coord (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4160 (in-cell (equal (table--cell-to-coord (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4161 (cons table-cell-info-lu-coordinate table-cell-info-rb-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4162 rectangle)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4163 (set-buffer cache-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4164 (setq rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4165 (extract-rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4166 1
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4167 (table--goto-coordinate (cons table-cell-info-width (1- table-cell-info-height)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4168 (set-buffer table-cell-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4169 (delete-rectangle (table--goto-coordinate table-cell-info-lu-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4170 (table--goto-coordinate table-cell-info-rb-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4171 (table--goto-coordinate table-cell-info-lu-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4172 (table--insert-rectangle rectangle)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4173 (let* ((cell (table--probe-cell))) ; must probe again in case of wide characters
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4174 (table--put-cell-property cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4175 (table--put-cell-justify-property cell table-cell-info-justify)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4176 (table--put-cell-valign-property cell table-cell-info-valign))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4177 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4178 (if in-cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4179 (table--transcoord-cache-to-table table-cell-cache-point-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4180 org-coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4181 ;; simulate undo behavior under overwrite-mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4182 (if (and overwrite-mode (not (eq buffer-undo-list t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4183 (setq buffer-undo-list (cons nil buffer-undo-list)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4184
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4185 (defun table--update-cell-widened (&optional now)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4186 "Update the contents of the cells that are affected by widening operation."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4187 (if (null table-widen-timer) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4188 (table--cancel-timer table-widen-timer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4189 (setq table-widen-timer nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4190 (if (not now)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4191 (setq table-widen-timer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4192 (table--set-timer (+ table-time-before-update table-time-before-reformat)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4193 (function table--update-cell-widened)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4194 'now))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4195 (save-current-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4196 (if table-update-timer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4197 (table--update-cell 'now))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4198 (set-buffer table-cell-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4199 (let* ((current-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4200 (current-cell-coordinate (table--cell-to-coord (table--probe-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4201 (cell-coord-list (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4202 (table--goto-coordinate table-cell-info-lu-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4203 (table--cell-list-to-coord-list (table--vertical-cell-list)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4204 (while cell-coord-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4205 (let* ((cell-coord (prog1 (car cell-coord-list) (setq cell-coord-list (cdr cell-coord-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4206 (currentp (equal cell-coord current-cell-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4207 (if currentp (table--goto-coordinate current-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4208 (table--goto-coordinate (car cell-coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4209 (table-recognize-cell 'froce)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4210 (let ((table-inhibit-update t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4211 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4212 (let ((sticky (and currentp
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4213 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4214 (unless (bolp) (forward-char -1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4215 (looking-at ".*\\S ")))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4216 (table--fill-region (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4217 (if sticky
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4218 (setq current-coordinate (table--transcoord-cache-to-table))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4219 (table--update-cell 'now)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4220 ))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4221 (table--goto-coordinate current-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4222 (table-recognize-cell 'froce)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4223
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4224 (defun table--update-cell-heightened (&optional now)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4225 "Update the contents of the cells that are affected by heightening operation."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4226 (if (null table-heighten-timer) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4227 (table--cancel-timer table-heighten-timer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4228 (setq table-heighten-timer nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4229 (if (not now)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4230 (setq table-heighten-timer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4231 (table--set-timer (+ table-time-before-update table-time-before-reformat)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4232 (function table--update-cell-heightened)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4233 'now))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4234 (save-current-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4235 (if table-update-timer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4236 (table--update-cell 'now))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4237 (if table-widen-timer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4238 (table--update-cell-widened 'now))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4239 (set-buffer table-cell-buffer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4240 (let* ((current-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4241 (current-cell-coordinate (table--cell-to-coord (table--probe-cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4242 (cell-coord-list (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4243 (table--goto-coordinate table-cell-info-lu-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4244 (table--cell-list-to-coord-list (table--horizontal-cell-list)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4245 (while cell-coord-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4246 (let* ((cell-coord (prog1 (car cell-coord-list) (setq cell-coord-list (cdr cell-coord-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4247 (currentp (equal cell-coord current-cell-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4248 (if currentp (table--goto-coordinate current-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4249 (table--goto-coordinate (car cell-coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4250 (table-recognize-cell 'froce)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4251 (let ((table-inhibit-update t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4252 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4253 (let ((sticky (and currentp
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4254 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4255 (unless (bolp) (forward-char -1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4256 (looking-at ".*\\S ")))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4257 (table--valign)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4258 (if sticky
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4259 (setq current-coordinate (table--transcoord-cache-to-table))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4260 (table--update-cell 'now)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4261 ))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4262 (table--goto-coordinate current-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4263 (table-recognize-cell 'froce)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4264
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4265 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4266 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4267 ;; Service functions (for external packages)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4268 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4269
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4270 (defun table-goto-top-left-corner ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4271 "Move point to top left corner of the current table and return the char position."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4272 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4273 (cons
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4274 (1- (car (table--get-coordinate (car (table--horizontal-cell-list t t)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4275 (1- (cdr (table--get-coordinate (car (table--vertical-cell-list t t))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4276
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4277 (defun table-goto-top-right-corner ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4278 "Move point to top right corner of the current table and return the char position."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4279 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4280 (cons
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4281 (car (table--get-coordinate (cdr (table--horizontal-cell-list nil t))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4282 (1- (cdr (table--get-coordinate (car (table--vertical-cell-list t t))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4283
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4284 (defun table-goto-bottom-left-corner ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4285 "Move point to bottom left corner of the current table and return the char position."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4286 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4287 (cons
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4288 (1- (car (table--get-coordinate (car (table--horizontal-cell-list t t)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4289 (1+ (cdr (table--get-coordinate (cdr (table--vertical-cell-list nil t))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4290
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4291 (defun table-goto-bottom-right-corner ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4292 "Move point to bottom right corner of the current table and return the char position."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4293 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4294 (cons
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4295 (car (table--get-coordinate (cdr (table--horizontal-cell-list nil t))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4296 (1+ (cdr (table--get-coordinate (cdr (table--vertical-cell-list nil t))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4297
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4298 (defun table-call-interactively (function &optional recoard-flag keys)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4299 "Call FUNCTION, or a table version of it if applicable.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4300 See `call-interactively' for full description of the arguments."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4301 (let ((table-func (intern-soft (format "*table--cell-%s" function))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4302 (call-interactively
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4303 (if (and table-func
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4304 (table--point-in-cell-p))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4305 table-func
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4306 function) recoard-flag keys)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4307
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4308 (defun table-funcall (function &rest arguments)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4309 "Call FUNCTION, or a table version of it if applicable.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4310 See `funcall' for full description of the arguments."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4311 (let ((table-func (intern-soft (format "*table--cell-%s" function))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4312 (apply
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4313 (if (and table-func
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4314 (table--point-in-cell-p))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4315 table-func
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4316 function)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4317 arguments)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4318
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4319 (defmacro table-apply (function &rest arguments)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4320 "Call FUNCTION, or a table version of it if applicable.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4321 See `apply' for full description of the arguments."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4322 (let ((table-func (make-symbol "table-func")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4323 `(let ((,table-func (intern-soft (format "*table--cell-%s" ,function))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4324 (apply
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4325 (if (and ,table-func
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4326 (table--point-in-cell-p))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4327 ,table-func
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4328 ,function)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4329 ,@arguments))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4330
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4331 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4332 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4333 ;; Utility functions
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4334 ;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4335
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4336 (defun table--read-from-minibuffer (prompt-history)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4337 "A wrapper to `read-from-minibuffer'.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4338 PROMPT-HISTORY is a cons cell which car is the prompt string and the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4339 cdr is the history symbol."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4340 (let ((default (car (symbol-value (cdr prompt-history)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4341 (read-from-minibuffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4342 (format "%s (default %s): " (car prompt-history) default)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4343 "" nil nil (cdr prompt-history) default))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4344 (and (featurep 'xemacs)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4345 (equal (car (symbol-value (cdr prompt-history))) "")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4346 (set (cdr prompt-history)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4347 (cdr (symbol-value (cdr prompt-history)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4348 (car (symbol-value (cdr prompt-history))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4349
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4350 (defun table--unibyte-char-to-multibyte (char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4351 "Convert CHAR by `unibyte-char-to-multibyte' when possible and necessary."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4352 ;; This part is take from `quoted-insert'.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4353 ;; Assume character codes 0240 - 0377 stand for characters in some
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4354 ;; single-byte character set, and convert them to Emacs
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4355 ;; characters.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4356 (if (and enable-multibyte-characters
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4357 (fboundp 'unibyte-char-to-multibyte)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4358 (>= char ?\240)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4359 (<= char ?\377))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4360 (unibyte-char-to-multibyte char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4361 char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4362
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4363 (defun table--buffer-substring-and-trim (beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4364 "Extract buffer substring and remove blanks from front and the rear of it."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4365 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4366 (save-restriction
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4367 (narrow-to-region (goto-char beg) end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4368 (if (re-search-forward "\\s *")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4369 (setq beg (match-end 0)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4370 (if (re-search-forward "\\s *\\'" end t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4371 (setq end (match-beginning 0)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4372 (table--remove-cell-properties
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4373 0 (- end beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4374 (buffer-substring beg end)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4375
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4376 (defun table--valign ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4377 "Vertically align the cache cell contents.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4378 Current buffer must be the cache buffer at the entry to this function.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4379 Returns the coordinate of the final point location."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4380 (if (or (null table-cell-info-valign)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4381 (eq table-cell-info-valign 'none))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4382 (table--get-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4383 (let ((saved-point (point-marker)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4384 ;;(set-marker-insertion-type saved-point t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4385 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4386 (let* ((from (and (re-search-forward "^.*\\S " nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4387 (table--current-line)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4388 (to (let ((tmp from))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4389 (while (re-search-forward "^.*\\S " nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4390 (setq tmp (table--current-line)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4391 tmp))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4392 (content-height (and from to (1+ (- to from)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4393 (unless (null content-height)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4394 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4395 (if (looking-at "\\s *\n")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4396 (replace-match ""))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4397 (cond ((eq table-cell-info-valign 'middle)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4398 (insert (make-string (/ (- table-cell-info-height content-height) 2) ?\n)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4399 ((eq table-cell-info-valign 'bottom)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4400 (insert (make-string (- table-cell-info-height content-height) ?\n))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4401 (table--goto-coordinate (cons table-cell-info-width (1- table-cell-info-height)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4402 (if (re-search-forward "\\s +\\'" nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4403 (replace-match ""))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4404 (goto-char saved-point)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4405 (set-marker saved-point nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4406 (let ((coord (table--get-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4407 (unless (< (cdr coord) table-cell-info-height)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4408 (setcdr coord (1- table-cell-info-height))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4409 (table--goto-coordinate coord))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4410 coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4411
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4412 (defun table--query-justification ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4413 (barf-if-buffer-read-only)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4414 (let* ((completion-ignore-case t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4415 (default (car table-justify-history)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4416 (intern (downcase (completing-read
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4417 (format "Justify (default %s): " default)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4418 '(("left") ("center") ("right") ("top") ("middle") ("bottom") ("none"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4419 nil t nil 'table-justify-history default)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4420
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4421 (defun table--spacify-frame ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4422 "Spacify table frame.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4423 Replace frame characters with spaces."
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
4424 (let ((frame-char
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
4425 (append (string-to-list table-cell-horizontal-chars)
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
4426 (list table-cell-intersection-char table-cell-vertical-char))))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4427 (while
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4428 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4429 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4430 ((eq (char-after) table-cell-intersection-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4431 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4432 (let ((col (current-column)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4433 (and (zerop (forward-line 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4434 (zerop (current-column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4435 (move-to-column col)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4436 (table--spacify-frame))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4437 (delete-char 1)
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
4438 (insert-before-markers ?\s))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
4439 ((table--cell-horizontal-char-p (char-after))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4440 (while (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4441 (delete-char 1)
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
4442 (insert-before-markers ?\s)
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
4443 (table--cell-horizontal-char-p (char-after)))))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4444 ((eq (char-after) table-cell-vertical-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4445 (while (let ((col (current-column)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4446 (delete-char 1)
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
4447 (insert-before-markers ?\s)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4448 (and (zerop (forward-line 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4449 (zerop (current-column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4450 (move-to-column col)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4451 (eq (char-after) table-cell-vertical-char))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4452 (memq (char-after) frame-char)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4453
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4454 (defun table--remove-blank-lines (n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4455 "Delete N blank lines from the current line.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4456 For adjusting below area of the table when the table is shortened."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4457 (move-to-column 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4458 (let ((first-blank t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4459 (while (> n 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4460 (setq n (1- n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4461 (cond ((looking-at "\\s *\\'")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4462 (delete-region (match-beginning 0) (match-end 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4463 (setq n 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4464 ((and (looking-at "\\([ \t]*\n[ \t]*\\)\n") first-blank)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4465 (delete-region (match-beginning 1) (match-end 1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4466 ((looking-at "[ \t]*$")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4467 (delete-region (match-beginning 0) (match-end 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4468 (forward-line 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4469 (t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4470 (setq first-blank nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4471 (forward-line 1))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4472
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4473 (defun table--uniform-list-p (l)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4474 "Return nil when LIST contains non equal elements. Otherwise return t."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4475 (if (null l) t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4476 (catch 'end
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4477 (while (cdr l)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4478 (if (not (equal (car l) (cadr l))) (throw 'end nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4479 (setq l (cdr l)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4480 t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4481
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4482 (defun table--detect-cell-alignment (cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4483 "Detect CELL contents alignment.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4484 Guess CELL contents alignment both horizontally and vertically by
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4485 looking at the appearance of the CELL contents."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4486 (let ((cell-contents (extract-rectangle (car cell) (cdr cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4487 (left-margin 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4488 (right-margin 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4489 (top-margin 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4490 (bottom-margin 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4491 (margin-diff 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4492 (margin-info-available nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4493 justify valign)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4494 (with-temp-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4495 (table--insert-rectangle cell-contents)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4496 ;; determine the horizontal justification
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4497 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4498 (while (re-search-forward "^\\( *\\).*[^ \n]\\( *\\)$" nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4499 (setq margin-info-available t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4500 (let* ((lm (- (match-end 1) (match-beginning 1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4501 (rm (- (match-end 2) (match-beginning 2)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4502 (md (abs (- lm rm))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4503 (if (> lm left-margin)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4504 (setq left-margin lm))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4505 (if (> rm right-margin)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4506 (setq right-margin rm))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4507 (if (> md margin-diff)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4508 (setq margin-diff md))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4509 (setq justify
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4510 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4511 ((and margin-info-available
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4512 (<= margin-diff 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4513 (> left-margin 0)) 'center)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4514 ((and margin-info-available
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4515 (zerop right-margin)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4516 (> left-margin 0)) 'right)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4517 (t 'left)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4518 ;; determine the vertical justification
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4519 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4520 (if (and (re-search-forward "\\s *\\S " nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4521 (/= (match-beginning 0) (match-end 0)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4522 (setq top-margin (1- (count-lines (match-beginning 0) (match-end 0)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4523 (if (and (re-search-forward "\\s *\\'" nil t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4524 (/= (match-beginning 0) (match-end 0)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4525 (setq bottom-margin (1- (count-lines (match-beginning 0) (match-end 0)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4526 (setq valign
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4527 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4528 ((and (> top-margin 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4529 (> bottom-margin 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4530 (<= (abs (- top-margin bottom-margin)) 1)) 'middle)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4531 ((and (> top-margin 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4532 (zerop bottom-margin)) 'bottom)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4533 (t nil))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4534 (table--put-cell-justify-property cell justify)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4535 (table--put-cell-valign-property cell valign)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4536
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4537 (defun table--string-to-number-list (str)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4538 "Return a list of numbers in STR."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4539 (let ((idx 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4540 (nl nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4541 (while (string-match "[-0-9.]+" str idx)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4542 (setq idx (match-end 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4543 (setq nl (cons (string-to-number (match-string 0 str)) nl)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4544 (nreverse nl)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4545
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4546 (defun table--justify-cell-contents (justify &optional paragraph)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4547 "Justify the current cell contents.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4548 JUSTIFY is a symbol 'left, 'center or 'right for horizontal, or 'top,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4549 'middle, 'bottom or 'none for vertical. When PARAGRAPH is non-nil the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4550 justify operation is limited to the current paragraph."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4551 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4552 (let ((beg (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4553 (end (point-max-marker))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4554 (fill-column table-cell-info-width)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4555 (adaptive-fill-mode nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4556 (valign-symbols '(top middle bottom none)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4557 (unless paragraph
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4558 (if (memq justify valign-symbols)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4559 (setq table-cell-info-valign
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4560 (if (eq justify 'none) nil justify))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4561 (setq table-cell-info-justify justify)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4562 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4563 (if paragraph
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4564 (let ((paragraph-start "\n"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4565 (forward-paragraph)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4566 (or (bolp) (newline 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4567 (set-marker end (point))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4568 (setq beg (progn (forward-paragraph -1) (point)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4569 (if (memq justify valign-symbols)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4570 (table--valign)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4571 (table--remove-eol-spaces beg end 'bol)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4572 (let ((paragraph-start table-paragraph-start))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4573 (fill-region beg end table-cell-info-justify))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4574 (setq table-inhibit-auto-fill-paragraph t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4575 (set-marker end nil)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4576 (table--update-cell 'now))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4577
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4578 (defun table--horizontally-shift-above-and-below (columns-to-extend top-to-bottom-coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4579 "Horizontally shift outside contents right above and right below of the table.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4580 This function moves the surrounding text outside of the table so that
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4581 they match the horizontal growth/shrink of the table. It also
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4582 untabify the shift affected area including the right side of the table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4583 so that tab related uneven shifting is avoided. COLUMNS-TO-EXTEND
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4584 specifies the number of columns the table grows, or shrinks if
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4585 negative. TOP-TO-BOTTOM-COORD-LIST is the vertical cell coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4586 list. This list can be any vertical list within the table."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4587 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4588 (let (beg-coord end-coord)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4589 (table--goto-coordinate (caar top-to-bottom-coord-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4590 (let* ((cell (table--horizontal-cell-list nil 'first-only 'top))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4591 (coord (cons (car (table--get-coordinate (cdr cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4592 (cdr (table--get-coordinate (car cell))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4593 (setcar coord (1+ (car coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4594 (setcdr coord (- (cdr coord) 2))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4595 (setq beg-coord (cons (car coord) (1+ (cdr coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4596 (while (and (table--goto-coordinate coord 'no-extension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4597 (not (looking-at "\\s *$")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4598 (if (< columns-to-extend 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4599 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4600 (table--untabify-line)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4601 (delete-char columns-to-extend))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4602 (table--untabify-line (point))
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
4603 (insert (make-string columns-to-extend ?\s)))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4604 (setcdr coord (1- (cdr coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4605 (table--goto-coordinate (caar (last top-to-bottom-coord-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4606 (let ((coord (table--get-coordinate (cdr (table--horizontal-cell-list nil 'first-only 'bottom)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4607 (setcar coord (1+ (car coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4608 (setcdr coord (+ (cdr coord) 2))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4609 (setq end-coord (cons (car coord) (1- (cdr coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4610 (while (and (table--goto-coordinate coord 'no-extension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4611 (not (looking-at "\\s *$")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4612 (if (< columns-to-extend 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4613 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4614 (table--untabify-line)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4615 (delete-char columns-to-extend))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4616 (table--untabify-line (point))
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
4617 (insert (make-string columns-to-extend ?\s)))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4618 (setcdr coord (1+ (cdr coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4619 (while (<= (cdr beg-coord) (cdr end-coord))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4620 (table--untabify-line (table--goto-coordinate beg-coord 'no-extension))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4621 (setcdr beg-coord (1+ (cdr beg-coord)))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4622
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4623 (defun table--create-growing-space-below (lines-to-extend left-to-right-coord-list bottom-border-y)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4624 "Create growing space below the table.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4625 This function creates growing space below the table slightly
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4626 intelligent fashion. Following is the cases it handles for each
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4627 growing line:
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4628 1. When the first line below the table is a complete blank line it
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4629 inserts a blank line.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4630 2. When the line starts with a prefix that matches the prefix of the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4631 bottom line of the table it inserts a line consisting of prefix alone.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4632 3. Otherwise it deletes the rectangular contents where table will
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4633 grow into."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4634 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4635 (let ((i 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4636 (prefix (and (table--goto-coordinate (cons 0 bottom-border-y))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4637 (re-search-forward
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4638 ".*\\S "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4639 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4640 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4641 (cons (1- (caar (car left-to-right-coord-list))) bottom-border-y)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4642 t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4643 (buffer-substring (match-beginning 0) (match-end 0)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4644 (while (< i lines-to-extend)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4645 (let ((y (+ i bottom-border-y 1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4646 (table--goto-coordinate (cons 0 y))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4647 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4648 ((looking-at "\\s *$")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4649 (insert ?\n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4650 ((and prefix (looking-at (concat (regexp-quote prefix) "\\s *$")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4651 (insert prefix ?\n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4652 (t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4653 (delete-rectangle
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4654 (table--goto-coordinate (cons (1- (caar (car left-to-right-coord-list))) y))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4655 (table--goto-coordinate (cons (1+ (cadr (car (last left-to-right-coord-list)))) y))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4656 (setq i (1+ i))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4657
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4658 (defun table--untabify-line (&optional from)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4659 "Untabify current line.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4660 Unlike save-excursion this guarantees preserving the cursor location
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4661 even when the point is on a tab character which is to be removed.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4662 Optional FROM narrows the subject operation from this point to the end
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4663 of line."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4664 (let ((current-coordinate (table--get-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4665 (table--untabify (or from (progn (beginning-of-line) (point)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4666 (progn (end-of-line) (point)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4667 (table--goto-coordinate current-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4668
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4669 (defun table--untabify (beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4670 "Wrapper to raw untabify."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4671 (untabify beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4672 (if (featurep 'xemacs)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4673 ;; Cancel strange behavior of xemacs
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4674 (message "")))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4675
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4676 (defun table--multiply-string (string multiplier)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4677 "Multiply string and return it."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4678 (let ((ret-str ""))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4679 (while (> multiplier 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4680 (setq ret-str (concat ret-str string))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4681 (setq multiplier (1- multiplier)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4682 ret-str))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4683
60724
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4684 (defun table--line-column-position (line column)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4685 "Return the location of LINE forward at COLUMN."
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4686 (save-excursion
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4687 (forward-line line)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4688 (move-to-column column)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4689 (point)))
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4690
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4691 (defun table--row-column-insertion-point-p (&optional columnp)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4692 "Return non nil if it makes sense to insert a row or a column at point."
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4693 (and (not buffer-read-only)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4694 (or (get-text-property (point) 'table-cell)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4695 (let ((column (current-column)))
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4696 (if columnp
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4697 (or (text-property-any (line-beginning-position 0)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4698 (table--line-column-position -1 column)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4699 'table-cell t)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4700 (text-property-any (line-beginning-position) (point) 'table-cell t)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4701 (text-property-any (line-beginning-position 2)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4702 (table--line-column-position 1 column)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4703 'table-cell t))
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4704 (text-property-any (table--line-column-position -2 column)
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4705 (table--line-column-position -2 (+ 2 column))
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4706 'table-cell t))))))
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
4707
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4708 (defun table--find-row-column (&optional columnp no-error)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4709 "Search table and return a cell coordinate list of row or column."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4710 (let ((current-coordinate (table--get-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4711 (catch 'end
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4712 (catch 'error
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4713 (let ((coord (table--get-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4714 (while
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4715 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4716 (if columnp (setcar coord (1- (car coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4717 (setcdr coord (1- (cdr coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4718 (>= (if columnp (car coord) (cdr coord)) 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4719 (while (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4720 (table--goto-coordinate coord 'no-extension 'no-tab-expansion)
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
4721 (not (looking-at (format "[%s%c%c]"
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
4722 table-cell-horizontal-chars
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4723 table-cell-vertical-char
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4724 table-cell-intersection-char))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4725 (if columnp (setcar coord (1- (car coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4726 (setcdr coord (1- (cdr coord))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4727 (if (< (if columnp (car coord) (cdr coord)) 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4728 (throw 'error nil)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4729 (if (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4730 (throw 'end (table--cell-list-to-coord-list (if columnp
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4731 (table--vertical-cell-list t nil 'left)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4732 (table--horizontal-cell-list t nil 'top))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4733 (table--goto-coordinate (table--offset-coordinate coord (if columnp '(0 . 1) '(1 . 0)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4734 'no-extension 'no-tab-expansion)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4735 (if (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4736 (throw 'end (table--cell-list-to-coord-list (if columnp
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4737 (table--vertical-cell-list t nil 'left)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4738 (table--horizontal-cell-list t nil 'top)))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4739 (table--goto-coordinate current-coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4740 (if no-error nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4741 (error "Table not found")))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4742
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4743 (defun table--min-coord-list (coord-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4744 "Return minimum cell dimension of COORD-LIST.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4745 COORD-LIST is a list of coordinate pairs (lu-coord . rb-coord), where
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4746 each pair in the list represents a cell. lu-coord is the left upper
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4747 coordinate of a cell and rb-coord is the right bottom coordinate of a
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4748 cell. A coordinate is a pair of x and y axis coordinate values. The
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4749 return value is a cons cell (min-w . min-h), where min-w and min-h are
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4750 respectively the minimum width and the minimum height of all the cells
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4751 in the list."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4752 (if (null coord-list) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4753 (let ((min-width 134217727)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4754 (min-height 134217727))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4755 (while coord-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4756 (let* ((coord (prog1 (car coord-list) (setq coord-list (cdr coord-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4757 (width (- (cadr coord) (caar coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4758 (height (1+ (- (cddr coord) (cdar coord)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4759 (if (< width min-width) (setq min-width width))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4760 (if (< height min-height) (setq min-height height))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4761 (cons min-width min-height))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4762
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4763 (defun table--cell-can-split-horizontally-p ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4764 "Test if a cell can split at current location horizontally."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4765 (and (not buffer-read-only)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4766 (let ((point-x (car (table--get-coordinate))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4767 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4768 (and (> point-x (car table-cell-info-lu-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4769 (<= point-x (1- (car table-cell-info-rb-coordinate)))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4770
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4771 (defun table--cell-can-split-vertically-p ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4772 "Test if a cell can split at current location vertically."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4773 (and (not buffer-read-only)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4774 (let ((point-y (cdr (table--get-coordinate))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4775 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4776 (and (> point-y (cdr table-cell-info-lu-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4777 (<= point-y (cdr table-cell-info-rb-coordinate))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4778
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4779 (defun table--cell-can-span-p (direction)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4780 "Test if the current cell can span to DIRECTION."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4781 (table-recognize-cell 'force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4782 (and (not buffer-read-only)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4783 (table--probe-cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4784 ;; get two adjacent cells from each corner
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4785 (let ((cell (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4786 (and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4787 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4788 (cons (cond ((eq direction 'right) (1+ (car table-cell-info-rb-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4789 ((eq direction 'left) (1- (car table-cell-info-lu-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4790 (t (car table-cell-info-lu-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4791 (cond ((eq direction 'above) (- (cdr table-cell-info-lu-coordinate) 2))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4792 ((eq direction 'below) (+ (cdr table-cell-info-rb-coordinate) 2))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4793 (t (cdr table-cell-info-lu-coordinate)))) 'no-extension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4794 (table--probe-cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4795 (cell2 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4796 (and
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4797 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4798 (cons (cond ((eq direction 'right) (1+ (car table-cell-info-rb-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4799 ((eq direction 'left) (1- (car table-cell-info-lu-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4800 (t (car table-cell-info-rb-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4801 (cond ((eq direction 'above) (- (cdr table-cell-info-lu-coordinate) 2))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4802 ((eq direction 'below) (+ (cdr table-cell-info-rb-coordinate) 2))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4803 (t (cdr table-cell-info-rb-coordinate)))) 'no-extension)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4804 (table--probe-cell)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4805 ;; make sure the two cells exist, and they are identical, that cell's size matches the current one
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4806 (and cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4807 (equal cell cell2)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4808 (if (or (eq direction 'right) (eq direction 'left))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4809 (and (= (cdr (table--get-coordinate (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4810 (cdr table-cell-info-lu-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4811 (= (cdr (table--get-coordinate (cdr cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4812 (cdr table-cell-info-rb-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4813 (and (= (car (table--get-coordinate (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4814 (car table-cell-info-lu-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4815 (= (car (table--get-coordinate (cdr cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4816 (car table-cell-info-rb-coordinate))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4817
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4818 (defun table--cell-insert-char (char &optional overwrite)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4819 "Insert CHAR inside a table cell."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4820 (let ((delete-selection-p (and (boundp 'delete-selection-mode)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4821 delete-selection-mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4822 transient-mark-mode mark-active
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4823 (not buffer-read-only)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4824 (mark-coordinate (table--transcoord-table-to-cache (table--get-coordinate (mark t)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4825 (table-with-cache-buffer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4826 (and delete-selection-p
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4827 (>= (car mark-coordinate) 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4828 (<= (car mark-coordinate) table-cell-info-width)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4829 (>= (cdr mark-coordinate) 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4830 (<= (cdr mark-coordinate) table-cell-info-height)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4831 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4832 (delete-region (point) (table--goto-coordinate mark-coordinate))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4833 (if overwrite
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4834 (let ((coordinate (table--get-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4835 (setq table-inhibit-auto-fill-paragraph t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4836 (if (>= (car coordinate) table-cell-info-width)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4837 (if (>= (cdr coordinate) (1- table-cell-info-height))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4838 (insert "\n" char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4839 (forward-line 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4840 (insert char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4841 (unless (eolp)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4842 (delete-char 1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4843 (insert char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4844 (unless (eolp)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4845 (delete-char 1))))
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
4846 (if (not (eq char ?\s))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4847 (if char (insert char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4848 (if (not (looking-at "\\s *$"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4849 (if (and table-fixed-width-mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4850 (> (point) 2)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4851 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4852 (forward-char -2)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4853 (looking-at (concat "\\("
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4854 (regexp-quote (char-to-string table-word-continuation-char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4855 "\\)\n"))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4856 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4857 (replace-match " " nil nil nil 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4858 (insert char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4859 (let ((coordinate (table--get-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4860 (if (< (car coordinate) table-cell-info-width)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4861 (move-to-column (1+ (car coordinate)) t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4862 (insert (make-string (forward-line 1) ?\n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4863 (unless (bolp) (insert ?\n))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4864 (setq table-inhibit-auto-fill-paragraph t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4865 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4866 (let ((o-point (point)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4867 (if (and (bolp)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4868 (or (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4869 (forward-paragraph)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4870 (forward-paragraph -1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4871 (= o-point (point)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4872 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4873 (goto-char o-point)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4874 (forward-line)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4875 (setq o-point (point))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4876 (forward-paragraph)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4877 (forward-paragraph -1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4878 (= o-point (point)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4879 (insert ?\n)))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4880
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4881 (defun table--finish-delayed-tasks ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4882 "Finish all outstanding delayed tasks."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4883 (if table-update-timer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4884 (table--update-cell 'now))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4885 (if table-widen-timer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4886 (table--update-cell-widened 'now))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4887 (if table-heighten-timer
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4888 (table--update-cell-heightened 'now)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4889
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4890 (defmacro table--log (&rest body)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4891 "Debug logging macro."
68246
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
4892 `(with-current-buffer (get-buffer-create "log")
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4893 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4894 (let ((standard-output (current-buffer)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4895 ,@body)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4896
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4897 (defun table--measure-max-width (&optional unlimited)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4898 "Return maximum width of current buffer.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4899 Normally the current buffer is expected to be already the cache
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4900 buffer. The width excludes following spaces at the end of each line.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4901 Unless UNLIMITED is non-nil minimum return value is 1."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4902 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4903 (let ((width 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4904 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4905 (while
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4906 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4907 ;; do not count the following white spaces
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4908 (re-search-forward "\\s *$")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4909 (goto-char (match-beginning 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4910 (if (> (current-column) width)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4911 (setq width (current-column)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4912 (forward-line)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4913 (not (eobp))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4914 (if unlimited width
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4915 (max 1 width)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4916
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4917 (defun table--cell-to-coord (cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4918 "Create a cell coordinate pair from cell location pair."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4919 (if cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4920 (cons (table--get-coordinate (car cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4921 (table--get-coordinate (cdr cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4922 nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4923
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4924 (defun table--cell-list-to-coord-list (cell-list)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4925 "Create and return a coordinate list that corresponds to CELL-LIST.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4926 CELL-LIST is a list of location pairs (lu . rb), where each pair
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4927 represents a cell in the list. lu is the left upper location and rb
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4928 is the right bottom location of a cell. The return value is a list of
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4929 coordinate pairs (lu-coord . rb-coord), where lu-coord is the left
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4930 upper coordinate and rb-coord is the right bottom coordinate of a
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4931 cell."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4932 (let ((coord-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4933 (while cell-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4934 (let ((cell (prog1 (car cell-list) (setq cell-list (cdr cell-list)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4935 (setq coord-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4936 (cons (table--cell-to-coord cell) coord-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4937 (nreverse coord-list)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4938
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4939 (defun table--test-cell-list (&optional horizontal reverse first-only pivot)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4940 "For testing `table--vertical-cell-list' and `table--horizontal-cell-list'."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4941 (let* ((current-coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4942 (cell-list (if horizontal
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4943 (table--horizontal-cell-list reverse first-only pivot)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4944 (table--vertical-cell-list reverse first-only pivot)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4945 (count 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4946 (while cell-list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4947 (let* ((cell (if first-only (prog1 cell-list (setq cell-list nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4948 (prog1 (car cell-list) (setq cell-list (cdr cell-list)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4949 (dig1-str (format "%1d" (prog1 (% count 10) (setq count (1+ count))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4950 (goto-char (car cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4951 (table-with-cache-buffer
68246
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
4952 (while (re-search-forward "." nil t)
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
4953 (replace-match dig1-str nil nil))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4954 (setq table-inhibit-auto-fill-paragraph t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4955 (table--finish-delayed-tasks)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4956 (table--goto-coordinate current-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4957
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4958 (defun table--vertical-cell-list (&optional top-to-bottom first-only pivot internal-dir internal-list internal-px)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4959 "Return a vertical cell list from the table.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4960 The return value represents a list of cells including the current cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4961 that align vertically. Each element of the list is a cons cell (lu
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4962 . rb) where lu is the cell's left upper location and rb is the cell's
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4963 right bottom location. The cell order in the list is from bottom to
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4964 top of the table. If optional argument TOP-TO-BOTTOM is non-nil the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4965 order is reversed as from top to bottom of the table. If optional
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4966 argument FIRST-ONLY is non-nil the return value is not a list of cells
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4967 but a single cons cell that is the first cell of the list, if the list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4968 had been created. If optional argument PIVOT is a symbol `left' the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4969 vertical cell search is aligned with the left edge of the current
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4970 cell, otherwise aligned with the right edge of the current cell. The
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4971 arguments INTERNAL-DIR, INTERNAL-LIST and INTERNAL-PX are internal use
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4972 only and must not be specified."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4973 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4974 (let* ((cell (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4975 (lu-coordinate (table--get-coordinate (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4976 (rb-coordinate (table--get-coordinate (cdr cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4977 (px (or internal-px (car (if (eq pivot 'left) lu-coordinate rb-coordinate))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4978 (ty (- (cdr lu-coordinate) 2))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4979 (by (+ (cdr rb-coordinate) 2)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4980 ;; in case of finding the the first cell, get the last adding item on the list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4981 (if (and (null internal-dir) first-only) (setq top-to-bottom (null top-to-bottom)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4982 ;; travel up and process as recursion traces back (reverse order)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4983 (and cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4984 (or (eq internal-dir 'up) (null internal-dir))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4985 (table--goto-coordinate (cons px (if top-to-bottom by ty)) 'no-extension 'no-tab-expansion)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4986 (setq internal-list (table--vertical-cell-list top-to-bottom first-only nil 'up nil px)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4987 ;; return the last cell or add this cell to the list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4988 (if first-only (or internal-list cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4989 (setq internal-list (if cell (cons cell internal-list) internal-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4990 ;; travel down and process as entering each recursion (forward order)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4991 (and cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4992 (or (eq internal-dir 'down) (null internal-dir))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4993 (table--goto-coordinate (cons px (if top-to-bottom ty by)) 'no-extension 'no-tab-expansion)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4994 (setq internal-list (table--vertical-cell-list top-to-bottom nil nil 'down internal-list px)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4995 ;; return the result
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4996 internal-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4997
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4998 (defun table--horizontal-cell-list (&optional left-to-right first-only pivot internal-dir internal-list internal-py)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4999 "Return a horizontal cell list from the table.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5000 The return value represents a list of cells including the current cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5001 that align horizontally. Each element of the list is a cons cells (lu
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5002 . rb) where lu is the cell's left upper location and rb is the cell's
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5003 right bottom location. The cell order in the list is from right to
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5004 left of the table. If optional argument LEFT-TO-RIGHT is non-nil the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5005 order is reversed as from left to right of the table. If optional
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5006 argument FIRST-ONLY is non-nil the return value is not a list of cells
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5007 but a single cons cell that is the first cell of the list, if the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5008 list had been created. If optional argument PIVOT is a symbol `top'
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5009 the horizontal cell search is aligned with the top edge of the current
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5010 cell, otherwise aligned with the bottom edge of the current cell. The
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5011 arguments INTERNAL-DIR, INTERNAL-LIST and INTERNAL-PY are internal use
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5012 only and must not be specified."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5013 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5014 (let* ((cell (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5015 (lu-coordinate (table--get-coordinate (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5016 (rb-coordinate (table--get-coordinate (cdr cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5017 (py (or internal-py (if (eq pivot 'top) (cdr lu-coordinate) (1+ (cdr rb-coordinate)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5018 (lx (1- (car lu-coordinate)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5019 (rx (1+ (car rb-coordinate))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5020 ;; in case of finding the the first cell, get the last adding item on the list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5021 (if (and (null internal-dir) first-only) (setq left-to-right (null left-to-right)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5022 ;; travel left and process as recursion traces back (reverse order)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5023 (and cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5024 (or (eq internal-dir 'left) (null internal-dir))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5025 (table--goto-coordinate (cons (if left-to-right rx lx) py) 'no-extension 'no-tab-expansion)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5026 (setq internal-list (table--horizontal-cell-list left-to-right first-only nil 'left nil py)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5027 ;; return the last cell or add this cell to the list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5028 (if first-only (or internal-list cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5029 (setq internal-list (if cell (cons cell internal-list) internal-list))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5030 ;; travel right and process as entering each recursion (forward order)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5031 (and cell
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5032 (or (eq internal-dir 'right) (null internal-dir))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5033 (table--goto-coordinate (cons (if left-to-right lx rx) py) 'no-extension 'no-tab-expansion)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5034 (setq internal-list (table--horizontal-cell-list left-to-right nil nil 'right internal-list py)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5035 ;; return the result
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5036 internal-list))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5037
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5038 (defun table--point-in-cell-p (&optional location)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5039 "Return t when point is in a valid table cell in the current buffer.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5040 When optional LOCATION is provided the test is performed at that location."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5041 (and (table--at-cell-p (or location (point)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5042 (if location
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5043 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5044 (goto-char location)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5045 (table--probe-cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5046 (table--probe-cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5047
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5048 (defun table--region-in-cell-p (beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5049 "Return t when location BEG and END are in a valid table cell in the current buffer."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5050 (and (table--at-cell-p (min beg end))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5051 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5052 (let ((cell-beg (progn (goto-char beg) (table--probe-cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5053 (and cell-beg
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5054 (equal cell-beg (progn (goto-char end) (table--probe-cell))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5055
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5056 (defun table--at-cell-p (position &optional object at-column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5057 "Returns non-nil if POSITION has table-cell property in OBJECT.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5058 OBJECT is optional and defaults to the current buffer.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5059 If POSITION is at the end of OBJECT, the value is nil."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5060 (if (and at-column (stringp object))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5061 (setq position (table--str-index-at-column object position)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5062 (get-text-property position 'table-cell object))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5063
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5064 (defun table--probe-cell-left-up ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5065 "Probe left up corner pattern of a cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5066 If it finds a valid corner returns a position otherwise returns nil.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5067 The position is the location before the first cell character.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5068 Focus only on the corner pattern. Further cell validity check is required."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5069 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5070 (let ((vertical-str (regexp-quote (char-to-string table-cell-vertical-char)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5071 (intersection-str (regexp-quote (char-to-string table-cell-intersection-char)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5072 (v-border (format "[%c%c]" table-cell-vertical-char table-cell-intersection-char))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
5073 (h-border (format "[%s%c]" table-cell-horizontal-chars table-cell-intersection-char))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5074 (limit (save-excursion (beginning-of-line) (point))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5075 (catch 'end
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5076 (while t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5077 (catch 'retry-horizontal
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5078 (if (not (search-backward-regexp v-border limit t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5079 (throw 'end nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5080 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5081 (let ((column (current-column)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5082 (while t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5083 (catch 'retry-vertical
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5084 (if (zerop (forward-line -1)) nil (throw 'end nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5085 (move-to-column column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5086 (while (and (looking-at vertical-str)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5087 (= column (current-column)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5088 (if (zerop (forward-line -1)) nil (throw 'end nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5089 (move-to-column column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5090 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5091 ((/= column (current-column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5092 (throw 'end nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5093 ((looking-at (concat intersection-str h-border))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5094 (forward-line 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5095 (move-to-column column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5096 (forward-char 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5097 (throw 'end (point)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5098 ((looking-at intersection-str)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5099 (throw 'retry-vertical nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5100 (t (throw 'retry-horizontal nil)))))))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5101
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5102 (defun table--probe-cell-right-bottom ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5103 "Probe right bottom corner pattern of a cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5104 If it finds a valid corner returns a position otherwise returns nil.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5105 The position is the location after the last cell character.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5106 Focus only on the corner pattern. Further cell validity check is required."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5107 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5108 (let ((vertical-str (regexp-quote (char-to-string table-cell-vertical-char)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5109 (intersection-str (regexp-quote (char-to-string table-cell-intersection-char)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5110 (v-border (format "[%c%c]" table-cell-vertical-char table-cell-intersection-char))
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
5111 (h-border (format "[%s%c]" table-cell-horizontal-chars table-cell-intersection-char))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5112 (limit (save-excursion (end-of-line) (point))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5113 (catch 'end
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5114 (while t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5115 (catch 'retry-horizontal
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5116 (if (not (search-forward-regexp v-border limit t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5117 (throw 'end nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5118 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5119 (forward-char -1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5120 (let ((column (current-column)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5121 (while t
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5122 (catch 'retry-vertical
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5123 (while (and (looking-at vertical-str)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5124 (= column (current-column)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5125 (if (and (zerop (forward-line 1)) (zerop (current-column))) nil (throw 'end nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5126 (move-to-column column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5127 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5128 ((/= column (current-column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5129 (throw 'end nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5130 ((save-excursion (forward-char -1) (looking-at (concat h-border intersection-str)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5131 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5132 (and (zerop (forward-line -1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5133 (move-to-column column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5134 (looking-at v-border)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5135 (throw 'end (point))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5136 (forward-char 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5137 (throw 'retry-horizontal nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5138 ((looking-at intersection-str)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5139 (if (and (zerop (forward-line 1)) (zerop (current-column))) nil (throw 'end nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5140 (move-to-column column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5141 (throw 'retry-vertical nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5142 (t (throw 'retry-horizontal nil)))))))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5143
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5144 (defun table--editable-cell-p (&optional abort-on-error)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5145 (and (not buffer-read-only)
60724
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
5146 (get-text-property (point) 'table-cell)))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5147
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5148 (defun table--probe-cell (&optional abort-on-error)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5149 "Probes a table cell around the point.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5150 Searches for the left upper corner and the right bottom corner of a table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5151 cell which contains the current point location.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5152
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5153 The result is a cons cell (left-upper . right-bottom) where
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5154 the left-upper is the position before the cell's left upper corner character,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5155 the right-bottom is the position after the cell's right bottom corner character.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5156
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5157 When it fails to find either one of the cell corners it returns nil or
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5158 signals error if the optional ABORT-ON-ERROR is non-nil."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5159 (let (lu rb
51496
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
5160 (border (format "^[%s%c%c]+$"
28f18afa589b (table-cell-horizontal-chars): Renamed from table-cell-horizontal-char. Now a
Juanma Barranquero <lekktu@gmail.com>
parents: 49848
diff changeset
5161 table-cell-horizontal-chars
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5162 table-cell-vertical-char
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5163 table-cell-intersection-char)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5164 (if (and (condition-case nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5165 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5166 (and (setq lu (table--probe-cell-left-up))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5167 (setq rb (table--probe-cell-right-bottom))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5168 (error nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5169 (< lu rb)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5170 (let ((lu-coordinate (table--get-coordinate lu))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5171 (rb-coordinate (table--get-coordinate rb)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5172 ;; test for valid upper and lower borders
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5173 (and (string-match
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5174 border
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5175 (buffer-substring
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5176 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5177 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5178 (cons (1- (car lu-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5179 (1- (cdr lu-coordinate)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5180 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5181 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5182 (cons (1+ (car rb-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5183 (1- (cdr lu-coordinate)))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5184 (string-match
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5185 border
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5186 (buffer-substring
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5187 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5188 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5189 (cons (1- (car lu-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5190 (1+ (cdr rb-coordinate)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5191 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5192 (table--goto-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5193 (cons (1+ (car rb-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5194 (1+ (cdr rb-coordinate))))))))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5195 (cons lu rb)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5196 (if abort-on-error
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5197 (error "Table cell not found")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5198 nil))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5199
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5200 (defun table--insert-rectangle (rectangle)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5201 "Insert text of RECTANGLE with upper left corner at point.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5202 Same as insert-rectangle except that mark operation is eliminated."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5203 (let ((lines rectangle)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5204 (insertcolumn (current-column))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5205 (first t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5206 (while lines
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5207 (or first
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5208 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5209 (forward-line 1)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5210 (or (bolp) (insert ?\n))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5211 (move-to-column insertcolumn t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5212 (setq first nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5213 (insert (car lines))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5214 (setq lines (cdr lines)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5215
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5216 (defun table--put-cell-property (cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5217 "Put standard text properties to the CELL.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5218 The CELL is a cons cell (left-upper . right-bottom) where the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5219 left-upper is the position before the cell's left upper corner
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5220 character, the right-bottom is the position after the cell's right
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5221 bottom corner character."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5222 (let ((lu (table--get-coordinate (car cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5223 (rb (table--get-coordinate (cdr cell))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5224 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5225 (while (<= (cdr lu) (cdr rb))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5226 (let ((beg (table--goto-coordinate lu 'no-extension))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5227 (end (table--goto-coordinate (cons (car rb) (cdr lu)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5228 (table--put-cell-line-property beg end))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5229 (setcdr lu (1+ (cdr lu))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5230 (table--put-cell-justify-property cell table-cell-info-justify)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5231 (table--put-cell-valign-property cell table-cell-info-valign))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5232
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5233 (defun table--put-cell-line-property (beg end &optional object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5234 "Put standard text properties to a line of a cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5235 BEG is the beginning of the line that is the location between left
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5236 cell border character and the first content character. END is the end
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5237 of the line that is the location between the last content character
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5238 and the right cell border character."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5239 (table--put-cell-content-property beg end object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5240 (table--put-cell-keymap-property end (1+ end) object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5241 (table--put-cell-indicator-property end (1+ end) object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5242 (table--put-cell-rear-nonsticky end (1+ end) object))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5243
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5244 (defun table--put-cell-content-property (beg end &optional object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5245 "Put cell content text properties."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5246 (table--put-cell-keymap-property beg end object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5247 (table--put-cell-indicator-property beg end object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5248 (table--put-cell-face-property beg end object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5249 (table--put-cell-point-entered/left-property beg end object))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5250
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5251 (defun table--put-cell-indicator-property (beg end &optional object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5252 "Put cell property which indicates that the location is within a table cell."
53367
fbdcff26f02a (table-yank-handler): New defcustom.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
5253 (put-text-property beg end 'table-cell t object)
fbdcff26f02a (table-yank-handler): New defcustom.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
5254 (put-text-property beg end 'yank-handler table-yank-handler object))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5255
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5256 (defun table--put-cell-face-property (beg end &optional object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5257 "Put cell face property."
63227
6f4701bb40a7 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-391
Miles Bader <miles@gnu.org>
parents: 62578
diff changeset
5258 (put-text-property beg end 'face 'table-cell object))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5259
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5260 (defun table--put-cell-keymap-property (beg end &optional object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5261 "Put cell keymap property."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5262 (put-text-property beg end 'keymap 'table-cell-map object))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5263
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5264 (defun table--put-cell-rear-nonsticky (beg end &optional object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5265 "Put rear-nonsticky property."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5266 (put-text-property beg end 'rear-nonsticky t object))
49599
5ade352e8d1c Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48373
diff changeset
5267
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5268 (defun table--put-cell-point-entered/left-property (beg end &optional object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5269 "Put point-entered/left property."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5270 (put-text-property beg end 'point-entered 'table--point-entered-cell-function object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5271 (put-text-property beg end 'point-left 'table--point-left-cell-function object))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5272
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5273 (defun table--remove-cell-properties (beg end &optional object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5274 "Remove all cell properties.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5275 If OBJECT is non-nil cell properties are removed from the OBJECT
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5276 instead of the current buffer and returns the OBJECT."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5277 (while (< beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5278 (let ((next (next-single-property-change beg 'table-cell object end)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5279 (if (get-text-property beg 'table-cell object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5280 (remove-text-properties beg next
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5281 (list
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5282 'table-cell nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5283 'table-justify nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5284 'table-valign nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5285 'face nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5286 'rear-nonsticky nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5287 'point-entered nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5288 'point-left nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5289 'keymap nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5290 object))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5291 (setq beg next)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5292 object)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5293
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5294 (defun table--update-cell-face ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5295 "Update cell face according to the current mode."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5296 (if (featurep 'xemacs)
63227
6f4701bb40a7 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-391
Miles Bader <miles@gnu.org>
parents: 62578
diff changeset
5297 (set-face-property 'table-cell 'underline table-fixed-width-mode)
6f4701bb40a7 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-391
Miles Bader <miles@gnu.org>
parents: 62578
diff changeset
5298 (set-face-inverse-video-p 'table-cell table-fixed-width-mode)))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5299
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5300 (table--update-cell-face)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5301
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5302 (defun table--get-property (cell property)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5303 "Get CELL's PROPERTY."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5304 (or (get-text-property (car cell) property)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5305 (get-text-property (1- (cdr cell)) property)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5306
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5307 (defun table--get-cell-justify-property (cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5308 "Get cell's justify property."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5309 (table--get-property cell 'table-justify))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5310
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5311 (defun table--get-cell-valign-property (cell)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5312 "Get cell's vertical alignment property."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5313 (table--get-property cell 'table-valign))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5314
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5315 (defun table--put-property (cell property value)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5316 "Put CELL's PROPERTY the VALUE."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5317 (let ((beg (car cell))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5318 (end (cdr cell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5319 (put-text-property beg (1+ beg) property value)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5320 (put-text-property (1- end) end property value)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5321
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5322 (defun table--put-cell-justify-property (cell justify)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5323 "Put cell's justify property."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5324 (table--put-property cell 'table-justify justify))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5325
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5326 (defun table--put-cell-valign-property (cell valign)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5327 "Put cell's vertical alignment property."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5328 (table--put-property cell 'table-valign valign))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5329
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5330 (defun table--point-entered-cell-function (&optional old-point new-point)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5331 "Point has entered a cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5332 Refresh the menu bar."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5333 (unless table-cell-entered-state
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5334 (setq table-cell-entered-state t)
68246
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
5335 (setq table-mode-indicator t)
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
5336 (force-mode-line-update)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5337 (table--warn-incompatibility)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5338 (run-hooks 'table-point-entered-cell-hook)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5339
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5340 (defun table--point-left-cell-function (&optional old-point new-point)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5341 "Point has left a cell.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5342 Refresh the menu bar."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5343 (when table-cell-entered-state
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5344 (setq table-cell-entered-state nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5345 (setq table-mode-indicator nil)
68246
ecfd9a69b670 Move defvars out of eval-when-compile.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 64993
diff changeset
5346 (force-mode-line-update)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5347 (run-hooks 'table-point-left-cell-hook)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5348
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5349 (defun table--warn-incompatibility ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5350 "If called from interactive operation warn the know incompatibilities.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5351 This feature is disabled when `table-disable-incompatibility-warning'
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5352 is non-nil. The warning is done only once per session for each item."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5353 (unless (and table-disable-incompatibility-warning
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5354 (not (interactive-p)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5355 (cond ((and (featurep 'xemacs)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5356 (not (get 'table-disable-incompatibility-warning 'xemacs)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5357 (put 'table-disable-incompatibility-warning 'xemacs t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5358 (momentary-string-display
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5359 "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5360 *** Warning ***
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5361
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5362 Table package mostly works fine under XEmacs, however, due to the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5363 peculiar implementation of text property under XEmacs, cell splitting
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5364 and any undo operation of table exhibit some known strange problems,
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5365 such that a border characters dissolve into adjacent cells. Please be
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5366 aware of this.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5367
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5368 "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5369 (save-excursion (forward-line 1) (point))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5370 ((and (boundp 'flyspell-mode)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5371 flyspell-mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5372 (not (get 'table-disable-incompatibility-warning 'flyspell)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5373 (put 'table-disable-incompatibility-warning 'flyspell t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5374 (momentary-string-display
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5375 "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5376 *** Warning ***
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5377
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5378 Flyspell minor mode is known to be incompatible with this table
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5379 package. The flyspell version 1.5d at http://kaolin.unice.fr/~serrano
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5380 works better than the previous versions however not fully compatible.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5381
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5382 "
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5383 (save-excursion (forward-line 1) (point))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5384 )))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5385
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5386 (defun table--cell-blank-str (&optional n)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5387 "Return blank table cell string of length N."
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
5388 (let ((str (make-string (or n 1) ?\s)))
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5389 (table--put-cell-content-property 0 (length str) str)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5390 str))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5391
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5392 (defun table--remove-eol-spaces (beg end &optional bol force)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5393 "Remove spaces at the end of each line in the BEG END region of the current buffer.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5394 When optional BOL is non-nil spaces at the beginning of line are
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5395 removed. When optional FORCE is non-nil removal operation is enforced
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5396 even when point is within the removal area."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5397 (if (> beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5398 (let ((tmp beg))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5399 (setq beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5400 (setq end tmp)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5401 (let ((saved-point (point-marker))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5402 (end-marker (copy-marker end)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5403 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5404 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5405 (while (if bol (re-search-forward "^\\( +\\)" end-marker t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5406 (re-search-forward "\\( +\\)$" end-marker t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5407 ;; avoid removal that causes the saved point to lose its location.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5408 (if (and (null bol)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5409 (<= (match-beginning 1) saved-point)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5410 (<= saved-point (match-end 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5411 (not force))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5412 (delete-region saved-point (match-end 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5413 (delete-region (match-beginning 1) (match-end 1)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5414 (set-marker saved-point nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5415 (set-marker end-marker nil)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5416
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5417 (defun table--fill-region (beg end &optional col justify)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5418 "Fill paragraphs in table cell cache.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5419 Current buffer must already be set to the cache buffer."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5420 (let ((fill-column (or col table-cell-info-width))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5421 (fill-prefix nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5422 (enable-kinsoku nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5423 (adaptive-fill-mode nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5424 (marker-beg (copy-marker beg))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5425 (marker-end (copy-marker end))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5426 (marker-point (point-marker)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5427 (setq justify (or justify table-cell-info-justify))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5428 (and justify
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5429 (not (eq justify 'left))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5430 (not (featurep 'xemacs))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5431 (set-marker-insertion-type marker-point t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5432 (table--remove-eol-spaces (point-min) (point-max))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5433 (if table-fixed-width-mode
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5434 (table--fill-region-strictly marker-beg marker-end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5435 (let ((paragraph-start table-paragraph-start))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5436 (fill-region marker-beg marker-end justify nil t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5437 (goto-char marker-point)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5438 (set-marker marker-beg nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5439 (set-marker marker-end nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5440 (set-marker marker-point nil)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5441
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5442 (defun table--fill-region-strictly (beg end)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5443 "Fill region strictly so that no line exceeds fill-column.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5444 When a word exceeds fill-column the word is chopped into pieces. The
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5445 chopped location is indicated with table-word-continuation-char."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5446 (or (and (markerp beg) (markerp end))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5447 (error "markerp"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5448 (if (< fill-column 2)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5449 (setq fill-column 2))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5450 ;; first remove all continuation characters.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5451 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5452 (while (re-search-forward (concat
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5453 (format "[^%c ]\\(" table-word-continuation-char)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5454 (regexp-quote (char-to-string table-word-continuation-char))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5455 "\\s +\\)")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5456 end t)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5457 (delete-region (match-beginning 1) (match-end 1)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5458 ;; then fill as normal
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5459 (let ((paragraph-start table-paragraph-start))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5460 (fill-region beg end nil nil t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5461 ;; now fix up
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5462 (goto-char beg)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5463 (while (let ((col (move-to-column fill-column t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5464 (cond
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5465 ((and (<= col fill-column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5466 (looking-at " *$"))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5467 (delete-region (match-beginning 0) (match-end 0))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5468 (and (zerop (forward-line 1))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5469 (< (point) end)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5470 (t (forward-char -1)
64059
77cc3a2cedb3 (table-hooks): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents: 63227
diff changeset
5471 (insert-before-markers (if (equal (char-before) ?\s) ?\s table-word-continuation-char)
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5472 "\n")
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5473 t)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5474
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5475 (defun table--goto-coordinate (coordinate &optional no-extension no-tab-expansion)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5476 "Move point to the given COORDINATE and return the location.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5477 When optional NO-EXTENSION is non-nil and the specified coordinate is
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5478 not reachable returns nil otherwise the blanks are added if necessary
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5479 to achieve the goal coordinate and returns the goal point. It
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5480 intentionally does not preserve the original point in case it fails
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5481 achieving the goal. When optional NO-TAB-EXPANSION is non-nil and the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5482 goad happens to be in a tab character the tab is not expanded but the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5483 goal ends at the beginning of tab."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5484 (if (or (null coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5485 (< (car coordinate) 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5486 (< (cdr coordinate) 0)) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5487 (goto-char (point-min))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5488 (let ((x (car coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5489 (more-lines (forward-line (cdr coordinate))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5490 (catch 'exit
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5491 (if (zerop (current-column)) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5492 (if no-extension
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5493 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5494 (move-to-column x)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5495 (throw 'exit nil))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5496 (setq more-lines (1+ more-lines))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5497 (if (zerop more-lines) nil
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5498 (newline more-lines))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5499 (if no-extension
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5500 (if (/= (move-to-column x) x)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5501 (if (> (move-to-column x) x)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5502 (if no-tab-expansion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5503 (progn
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5504 (while (> (move-to-column x) x)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5505 (setq x (1- x)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5506 (point))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5507 (throw 'exit (move-to-column x t)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5508 (throw 'exit nil)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5509 (move-to-column x t))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5510 (point)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5511
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5512 (defun table--copy-coordinate (coord)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5513 "Copy coordinate in a new cons cell."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5514 (cons (car coord) (cdr coord)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5515
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5516 (defun table--get-coordinate (&optional where)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5517 "Return the coordinate of point in current buffer.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5518 When optional WHERE is given it returns the coordinate of that
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5519 location instead of point in the current buffer. It does not move the
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5520 point"
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5521 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5522 (if where (goto-char where))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5523 (cons (current-column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5524 (table--current-line))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5525
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5526 (defun table--current-line (&optional location)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5527 "Return zero based line count of current line or if non-nil LOCATION line."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5528 (save-excursion
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5529 (if location (goto-char location))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5530 (beginning-of-line)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5531 (count-lines (point-min) (point))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5532
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5533 (defun table--transcoord-table-to-cache (&optional coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5534 "Transpose COORDINATE from table coordinate system to cache coordinate system.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5535 When COORDINATE is omitted or nil the point in current buffer is assumed in place."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5536 (table--offset-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5537 (or coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5538 table-cell-info-lu-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5539 'negative))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5540
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5541 (defun table--transcoord-cache-to-table (&optional coordinate)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5542 "Transpose COORDINATE from cache coordinate system to table coordinate system.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5543 When COORDINATE is omitted or nil the point in current buffer is assumed in place."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5544 (table--offset-coordinate
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5545 (or coordinate (table--get-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5546 table-cell-info-lu-coordinate))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5547
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5548 (defun table--offset-coordinate (coordinate offset &optional negative)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5549 "Return the offseted COORDINATE by OFFSET.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5550 When optional NEGATIVE is non-nil offsetting direction is negative."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5551 (cons (if negative (- (car coordinate) (car offset))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5552 (+ (car coordinate) (car offset)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5553 (if negative (- (cdr coordinate) (cdr offset))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5554 (+ (cdr coordinate) (cdr offset)))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5555
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5556 (defun table--char-in-str-at-column (str column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5557 "Return the character in STR at COLUMN location.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5558 When COLUMN is out of range it returns null character."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5559 (let ((idx (table--str-index-at-column str column)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5560 (if idx (aref str idx)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5561 ?\0)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5562
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5563 (defun table--str-index-at-column (str column)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5564 "Return the character index in STR that corresponds to COLUMN location.
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5565 It returns COLUMN unless STR contains some wide characters."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5566 (let ((col 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5567 (idx 0)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5568 (len (length str)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5569 (while (and (< col column) (< idx len))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5570 (setq col (+ col (char-width (aref str idx))))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5571 (setq idx (1+ idx)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5572 (if (< idx len)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5573 idx
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5574 nil)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5575
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5576 (defun table--set-timer (seconds func args)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5577 "Generic wrapper for setting up a timer."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5578 (if (featurep 'xemacs)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5579 ;; the picky xemacs refuses to accept zero
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5580 (add-timeout (if (zerop seconds) 0.01 seconds) func args nil)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5581 ;;(run-at-time seconds nil func args)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5582 ;; somehow run-at-time causes strange problem under Emacs 20.7
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5583 ;; this problem does not show up under Emacs 21.0.90
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5584 (run-with-idle-timer seconds nil func args)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5585
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5586 (defun table--cancel-timer (timer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5587 "Generic wrapper for canceling a timer."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5588 (if (featurep 'xemacs)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5589 (disable-timeout timer)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5590 (cancel-timer timer)))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5591
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5592 (defun table--get-last-command ()
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5593 "Generic wrapper for getting the real last command."
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5594 (if (boundp 'real-last-command)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5595 real-last-command
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5596 last-command))
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5597
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5598 (run-hooks 'table-load-hook)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5599
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5600 (provide 'table)
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5601
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5602 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5603 ;; Local Variables: ***
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5604 ;; time-stamp-line-limit: 16 ***
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5605 ;; time-stamp-start: ";; Revised:[ \t]+" ***
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5606 ;; time-stamp-end: "$" ***
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5607 ;; time-stamp-format: "%3a %3b %02d %:y %02H:%02M:%02S (%Z)" ***
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5608 ;; End: ***
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5609 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5610
60724
3a2908eb7595 (table--line-column-position): New idiom.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59996
diff changeset
5611 ;; arch-tag: 0d69b03e-aa5f-4e72-8806-5727217617e0
46933
efe136f74b89 New file.
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5612 ;;; table.el ends here