ここから入手できます. でもMeadowには標準添付. 設定するだけですぐに使え ます.
でも, ここに書いてあるとおり, skkだと日本語が使いものにならないという のはどうにかならないものでしょうか... あきらめたほうが早い?
(require 'table)
;; ;; ;; ------------- ;; Introduction: ;; ------------- ;; ;; This package provides text based table creation and editing ;; feature. With this package Emacs is capable of editing tables that ;; are embedded inside a text document, the feature similar to the ;; ones seen in modern WYSIWYG word processors. A table is a ;; rectangular text area consisting from a surrounding frame and ;; content inside the frame. The content is usually subdivided into ;; multiple rectangular cells, see the actual tables used below in ;; this document. Once a table is recognized, editing operation ;; inside a table cell is confined into that specific cell's ;; rectangular area. This means that typing and deleting characters ;; inside a cell do not affect any outside text but introduces ;; appropriate formatting only to the cell contents. If necessary for ;; accommodating added text in the cell, the cell automatically grows ;; vertically and/or horizontally. The package uses no major mode nor ;; minor mode for its implementation because the subject text is ;; localized within a buffer. Therefore the special behaviors inside ;; a table cells are implemented by using local-map text property ;; instead of buffer wide mode-map. Also some commonly used functions ;; are advised so that they act specially inside a table cell. ;; ;; ;; ----------- ;; Background: ;; ----------- ;; ;; Paul Georgief is one of my best friends. He became an Emacs ;; convert after I recommended him trying it several years ago. Now ;; we both are devoted disciples of Emacsism and elisp cult. One day ;; in his Emacs exploration he asked me "Tak, what is a command to ;; edit tables in Emacs?". This question started my journey of this ;; table package development. May the code be with me! In the ;; software world Emacs is probably one of the longest lifetime record ;; holders. Amazingly there have been no direct support for WYSIWYG ;; table editing tasks in Emacs. Many people must have experienced ;; manipulating existing overwrite-mode and picture-mode for this task ;; and only dreamed of having such a lisp package which supports this ;; specific task directly. Certainly, I have been one of them. The ;; most difficult part of dealing with table editing in Emacs probably ;; is how to realize localized rectangular editing effect. Emacs has ;; no rectangular narrowing mechanism. Existing rect package provides ;; basically kill, delete and yank operations of a rectangle, which ;; internally is a mere list of strings. A simple approach for ;; realizing the localized virtual rectangular operation is combining ;; rect package capability with a temporary buffer. Insertion and ;; deletion of a character to a table cell can be trapped by a ;; function that copies the cell rectangle to a temporary buffer then ;; apply the insertion/deletion to the temporary contents. Then it ;; formats the contents by filling the paragraphs in order to fit it ;; into the original rectangular area and finally copy it back to the ;; original buffer. This simplistic approach has to bear with ;; significant performance hit. As cell grows larger the copying ;; rectangle back and forth between the original buffer and the ;; temporary buffer becomes expensive and unbearably slow. It was ;; completely impractical and an obvious failure. An idea has been ;; borrowed from the original Emacs design to overcome this ;; shortcoming. When the terminal screen update was slow and ;; expensive Emacs employed a clever algorithm to reduce actual screen ;; update by removing redundant redrawing operations. Also the actual ;; redrawing was done only when there was enough idling time. This ;; technique significantly improved the previously mentioned ;; undesirable situation. Now the original buffer's rectangle is ;; copied into a cache buffer only once. Any cell editing operation ;; is done only to the cache contents. When there is enough idling ;; time the original buffer's rectangle is updated with the current ;; cache contents. This delayed operation is implemented by using ;; Emacs's timer function. To reduce the visual awkwardness ;; introduced by the delayed effect the cursor location is updated in ;; real-time as a user types while the cell contents remains the same ;; until the next idling time. A key to the success of this approach ;; is how to maintain cache coherency. As a user moves point in and ;; out of a cell the table buffer contents and the cache buffer ;; contents must be synchronized without a mistake. By observing user ;; action carefully this is possible however not easy. Once this ;; mechanism is firmly implemented the rest of table features grew in ;; relatively painless progression. Those users who are familiar with ;; Emacs internals appreciate this table package more. Because it ;; demonstrates how extensible Emacs is by showing something that ;; appears like a magic. It lets you re-discover the potential of ;; Emacs. ;; ;; ;; ------------- ;; Entry Points: ;; ------------- ;; ;; If this is the first time for you to try this package, go ahead and ;; load the package by M-x `load-file' RET. Specify the package file ;; name "table.el". Then switch to a new test buffer and issue the ;; command M-x `table-insert' RET. It'll ask you number of columns, ;; number of rows, cell width and cell height. Give some small ;; numbers for each of them. Play with the resulted table for a ;; while. If you have menu system find the item "Table" under "Tools" ;; and "Table" in the menu bar when the point is in a table cell. ;; Some of them are pretty intuitive and you can easily guess what ;; they do. M-x `describe-function' and get the documentation of ;; `table-insert'. The document includes a short tutorial. When you ;; are tired of guessing how it works come back to this document ;; again. ;; ;; To use the package regularly place this file in the site library ;; directory and add the next expression in your .emacs file. Make ;; sure that directory is included in the `load-path'. ;; ;; (require 'table) ;; ;; Have the next expression also, if you want always be ready to edit ;; tables inside text files. This mechanism is analogous to ;; fontification in a sense that tables are recognized at editing time ;; without having table information saved along with the text itself. ;; ;; (add-hook 'text-mode-hook 'table-recognize) ;; ;; Following is a table of entry points and brief description of each ;; of them. The tables below are of course generated and edited by ;; using this package. Not all the commands are bound to keys. Many ;; of them must be invoked by "M-x" (`execute-extended-command') ;; command. Refer to the section "Keymap" below for the commands ;; available from keys. ;; ;; +------------------------------------------------------------------+ ;; | User Visible Entry Points | ;; +-------------------------------+----------------------------------+ ;; | Function | Description | ;; +-------------------------------+----------------------------------+ ;; |`table-insert' |Insert a table consisting of grid | ;; | |of cells by specifying the number | ;; | |of COLUMNS, number of ROWS, cell | ;; | |WIDTH and cell HEIGHT. | ;; +-------------------------------+----------------------------------+ ;; |`table-insert-row' |Insert row(s) of cells before the | ;; | |current row that matches the | ;; | |current row structure. | ;; +-------------------------------+----------------------------------+ ;; |`table-insert-column' |Insert column(s) of cells before | ;; | |the current column that matches | ;; | |the current column structure. | ;; +-------------------------------+----------------------------------+ ;; |`table-delete-row' |Delete row(s) of cells. The row | ;; | |must consist from cells of the | ;; | |same height. | ;; +-------------------------------+----------------------------------+ ;; |`table-delete-column' |Delete column(s) of cells. The | ;; | |column must consist from cells of | ;; | |the same width. | ;; +-------------------------------+----------------------------------+ ;; |`table-recognize' |Recognize all tables in the | ;; |`table-unrecognize' |current buffer and | ;; | |activate/inactivate them. | ;; +-------------------------------+----------------------------------+ ;; |`table-recognize-region' |Recognize all the cells in a | ;; |`table-unrecognize-region' |region and activate/inactivate | ;; | |them. | ;; +-------------------------------+----------------------------------+ ;; |`table-recognize-table' |Recognize all the cells in a | ;; |`table-unrecognize-table' |single table and | ;; | |activate/inactivate them. | ;; +-------------------------------+----------------------------------+ ;; |`table-recognize-cell' |Recognize a cell. Find a cell | ;; |`table-unrecognize-cell' |which contains the current point | ;; | |and activate/inactivate that cell.| ;; +-------------------------------+----------------------------------+ ;; |`table-forward-cell' |Move point to the next Nth cell in| ;; | |a table. | ;; +-------------------------------+----------------------------------+ ;; |`table-backward-cell' |Move point to the previous Nth | ;; | |cell in a table. | ;; +-------------------------------+----------------------------------+ ;; |`table-span-cell' |Span the current cell toward the | ;; | |specified direction and merge it | ;; | |with the adjacent cell. The | ;; | |direction is right, left, above or| ;; | |below. | ;; +-------------------------------+----------------------------------+ ;; |`table-split-cell-vertically' |Split the current cell vertically | ;; | |and create a cell above and a cell| ;; | |below the point location. | ;; +-------------------------------+----------------------------------+ ;; |`table-split-cell-horizontally'|Split the current cell | ;; | |horizontally and create a cell on | ;; | |the left and a cell on the right | ;; | |of the point location. | ;; +-------------------------------+----------------------------------+ ;; |`table-split-cell' |Split the current cell vertically | ;; | |or horizontally. This is a | ;; | |wrapper command to the other two | ;; | |orientation specific commands. | ;; +-------------------------------+----------------------------------+ ;; |`table-heighten-cell' |Heighten the current cell. | ;; +-------------------------------+----------------------------------+ ;; |`table-shorten-cell' |Shorten the current cell. | ;; +-------------------------------+----------------------------------+ ;; |`table-widen-cell' |Widen the current cell. | ;; +-------------------------------+----------------------------------+ ;; |`table-narrow-cell' |Narrow the current cell. | ;; +-------------------------------+----------------------------------+ ;; |`table-fixed-width-mode' |Toggle fixed width mode. In the | ;; | |fixed width mode, typing inside a | ;; | |cell never changes the cell width,| ;; | |while in the normal mode the cell | ;; | |width expands automatically in | ;; | |order to prevent a word being | ;; | |folded into multiple lines. Fixed| ;; | |width mode reverses video or | ;; | |underline the cell contents for | ;; | |its indication. | ;; +-------------------------------+----------------------------------+ ;; |`table-query-dimension' |Compute and report the current | ;; | |cell dimension, current table | ;; | |dimension and the number of | ;; | |columns and rows in the table. | ;; +-------------------------------+----------------------------------+ ;; |`table-generate-source' |Generate the source of the current| ;; | |table in the specified language | ;; | |and insert it into a specified | ;; | |buffer. | ;; +-------------------------------+----------------------------------+ ;; |`table-insert-sequence' |Travel cells forward while | ;; | |inserting a specified sequence | ;; | |string into each cell. | ;; +-------------------------------+----------------------------------+ ;; |`table-capture' |Convert plain text into a table by| ;; | |capturing the text in the region. | ;; +-------------------------------+----------------------------------+ ;; |`table-release' |Convert a table into plain text by| ;; | |removing the frame from a table. | ;; +-------------------------------+----------------------------------+ ;; |`table-justify' |Justify the contents of cell(s). | ;; +-------------------------------+----------------------------------+ ;; |`table-disable-advice' |Disable all table advice by | ;; | |removing them. | ;; +-------------------------------+----------------------------------+ ;; |`table-enable-advice' |Enable table advice. | ;; +-------------------------------+----------------------------------+ ;; |`table-version' |Show the current table package | ;; | |version. | ;; +-------------------------------+----------------------------------+ ;; ;; ;; *Note* ;; ;; You may find that some of commonly expected table commands are ;; missing such as copying a row/column and yanking it. Those ;; functions can be obtained through existing Emacs text editing ;; commands. Rows are easily manipulated with region commands and ;; columns can be copied and pasted through rectangle commands. After ;; all a table is still a part of text in the buffer. Only the ;; special behaviors exist inside each cell through text properties. ;; ;; `table-generate-html' which appeared in earlier releases is ;; deprecated in favor of `table-generate-source'. Now HTML is ;; treated as one of the languages used for describing the table's ;; logical structure. ;; ;; ;; ------- ;; Keymap: ;; ------- ;; ;; Although this package does not use a mode it does use its own ;; keymap inside a table cell by way of keymap text property. Some of ;; the standard basic editing commands bound to certain keys are ;; replaced with the table specific version of corresponding commands. ;; This replacement combination is listed in the constant alist ;; `table-command-replacement-alist' declared below. This alist is ;; not meant to be user configurable but mentioned here for your ;; better understanding of using this package. In addition, table ;; cells have some table specific bindings for cell navigation and ;; cell reformation. You can find these additional bindings in the ;; constant `table-cell-bindings'. Those key bound functions are ;; considered as internal functions instead of normal commands, ;; therefore they have special prefix, *table-- instead of table-, for ;; symbols. The purpose of this is to make it easier for a user to ;; use command name completion. There is a "normal hooks" variable ;; `table-cell-map-hook' prepared for users to override the default ;; table cell bindings. Following is the table of predefined default ;; key bound commands inside a table cell. Remember these bindings ;; exist only inside a table cell. When your terminal is a tty, the ;; control modifier may not be available or applicable for those ;; special characters. In this case use "C-cC-c", which is ;; customizable via `table-command-prefix', as the prefix key ;; sequence. This should preceding the following special character ;; without the control modifier. For example, use "C-cC-c|" instead ;; of "C-|". ;; ;; +------------------------------------------------------------------+ ;; | Default Bindings in a Table Cell | ;; +-------+----------------------------------------------------------+ ;; | Key | Function | ;; +-------+----------------------------------------------------------+ ;; | TAB |Move point forward to the beginning of the next cell. | ;; +-------+----------------------------------------------------------+ ;; | "C->" |Widen the current cell. | ;; +-------+----------------------------------------------------------+ ;; | "C-<" |Narrow the current cell. | ;; +-------+----------------------------------------------------------+ ;; | "C-}" |Heighten the current cell. | ;; +-------+----------------------------------------------------------+ ;; | "C-{" |Shorten the current cell. | ;; +-------+----------------------------------------------------------+ ;; | "C--" |Split current cell vertically. (one above and one below) | ;; +-------+----------------------------------------------------------+ ;; | "C-|" |Split current cell horizontally. (one left and one right) | ;; +-------+----------------------------------------------------------+ ;; | "C-*" |Span current cell into adjacent one. | ;; +-------+----------------------------------------------------------+ ;; | "C-+" |Insert row(s)/column(s). | ;; +-------+----------------------------------------------------------+ ;; | "C-!" |Toggle between normal mode and fixed width mode. | ;; +-------+----------------------------------------------------------+ ;; | "C-#" |Report cell and table dimension. | ;; +-------+----------------------------------------------------------+ ;; | "C-^" |Generate the source in a language from the current table. | ;; +-------+----------------------------------------------------------+ ;; | "C-:" |Justify the contents of cell(s). | ;; +-------+----------------------------------------------------------+ ;; ;; *Note* ;; ;; When using `table-cell-map-hook' do not use `local-set-key'. ;; ;; (add-hook 'table-cell-map-hook ;; (function (lambda () ;; (local-set-key [<key sequence>] '<function>)))) ;; ;; Above code is well known ~/.emacs idiom for customizing a mode ;; specific keymap however it does not work for this package. This is ;; because there is no table mode in effect. This package does not ;; use a local map therefor you must modify `table-cell-map' ;; explicitly. The correct way of achieving above task is: ;; ;; (add-hook 'table-cell-map-hook ;; (function (lambda () ;; (define-key table-cell-map [<key sequence>] '<function>)))) ;; ;; ----- ;; Menu: ;; ----- ;; ;; If a menu system is available a group of table specific menu items, ;; "Table" under "Tools" section of the menu bar, is globally added ;; after this package is loaded. The commands in this group are ;; limited to the ones that are related to creation and initialization ;; of tables, such as to insert a table, to insert rows and columns, ;; or recognize and unrecognize tables. Once tables are created and ;; point is placed inside of a table cell a table specific menu item ;; "Table" appears directly on the menu bar. The commands in this ;; menu give full control on table manipulation that include cell ;; navigation, insertion, splitting, spanning, shrinking, expansion ;; and unrecognizing. In addition to above two types of menu there is ;; a pop-up menu available within a table cell. The content of pop-up ;; menu is identical to the full table menu. [mouse-3] is the default ;; button, defined in `table-cell-bindings', to bring up the pop-up ;; menu. It can be reconfigured via `table-cell-map-hook'. The ;; benefit of a pop-up menu is that it combines selection of the ;; location (which cell, where in the cell) and selection of the ;; desired operation into a single clicking action. ;; ;; ;; --------------------------------- ;; Function Advising (Modification): ;; --------------------------------- ;; ;; Some functions that are desired to run specially inside a table ;; cell are modified by way of function advice mechanism instead of ;; using key binding replacement. The reason for this is that they ;; are such primitive that they may often be used as a building blocks ;; of other commands which are not known to this package, i.e. user ;; defined commands in a .emacs file. To make sure the correct ;; behavior of them in a table cell, those functions are slightly ;; modified. When the function executes, it checks if the point is ;; located in a table cell. If so, the function behaves in a slightly ;; modified fashion otherwise executes normally. The drawback of this ;; mechanism is there is a small overhead added to these functions for ;; testing if the location is within a table cell or not. Due to the ;; limitation of advice mechanism those built-in subr functions in a ;; byte compiled package are out of reach from this package. ;; ;; In general, redefining (or advising) an Emacs primitive is ;; discouraged. If you think those advising in this package are not ;; safe enough or you simply do not feel comfortable with having them ;; you can set the variable `table-disable-advising' to non-nil before ;; loading this package for the first time. This will disable the ;; advising all together. ;; ;; The next table lists the functions that are advised to act ;; specially when used in a table cell. ;; ;; +------------------------------------------------------------------+ ;; | Advised Functions | ;; +---------------------+--------------------------------------------+ ;; | Function | Advice Description | ;; +---------------------+--------------------------------------------+ ;; |`kill-region' |Kill between point and mark. When both | ;; | |point and mark reside in a same table cell | ;; | |the text in the region within the cell is | ;; | |deleted and saved in the kill ring. | ;; | |Otherwise it retains the original behavior. | ;; +---------------------+--------------------------------------------+ ;; |`delete-region' |Delete the text between point and mark. | ;; | |When both point and mark reside in a same | ;; | |table cell the text in the region within the| ;; | |cell is deleted. Otherwise it retains the | ;; | |original behavior. | ;; +---------------------+--------------------------------------------+ ;; |`copy-region-as-kill'|Save the region as if killed, but don't kill| ;; | |it. When both point and mark reside in a | ;; | |same table cell the text in the region | ;; | |within the cell is saved. Otherwise it | ;; | |retains the original behavior. | ;; +---------------------+--------------------------------------------+ ;; |`kill-line' |Kill the rest of the current line within a | ;; | |table cell when point is in an active table | ;; | |cell. Otherwise it retains the original | ;; | |behavior. | ;; +---------------------+--------------------------------------------+ ;; |`yank' |Reinsert the last stretch of killed text | ;; | |within a cell when point resides in a | ;; | |cell. Otherwise it retains the original | ;; | |behavior. | ;; +---------------------+--------------------------------------------+ ;; |`beginning-of-line' |Move point to beginning of current line | ;; | |within a cell when current point resides in | ;; | |a cell. Otherwise it retains the original | ;; | |behavior. | ;; +---------------------+--------------------------------------------+ ;; |`end-of-line' |Move point to end of current line within a | ;; | |cell when current point resides in a cell. | ;; | |Otherwise it retains the original behavior. | ;; +---------------------+--------------------------------------------+ ;; |`forward-word' |Move point forward word(s) within a cell | ;; | |when current point resides in a cell. | ;; | |Otherwise it retains the original behavior. | ;; +---------------------+--------------------------------------------+ ;; |`backward-word' |Move point backward word(s) within a cell | ;; | |when current point resides in a cell. | ;; | |Otherwise it retains the original behavior. | ;; +---------------------+--------------------------------------------+ ;; |`forward-paragraph' |Move point forward paragraph(s) within a | ;; | |cell when current point resides in a cell. | ;; | |Otherwise it retains the original behavior. | ;; +---------------------+--------------------------------------------+ ;; |`backward-paragraph' |Move point backward paragraph(s) within a | ;; | |cell when current point resides in a cell. | ;; | |Otherwise it retains the original behavior. | ;; +---------------------+--------------------------------------------+ ;; |`center-line' |Center the line point is on within a cell | ;; | |when current point resides in a | ;; | |cell. Otherwise it retains the original | ;; | |behavior. | ;; +---------------------+--------------------------------------------+ ;; |`center-region' |Center each non-blank line between point and| ;; | |mark. When both point and mark reside in a | ;; | |same table cell the text in the region | ;; | |within the cell is centered. Otherwise it | ;; | |retains the original behavior. | ;; +---------------------+--------------------------------------------+ ;; ;; ;; ------------------------------- ;; Definition of tables and cells: ;; ------------------------------- ;; ;; There is no artificial-intelligence magic in this package. The ;; definition of a table and the cells inside the table is reasonably ;; limited in order to achieve acceptable performance in the ;; interactive operation under Emacs lisp implementation. A valid ;; table is a rectangular text area completely filled with valid ;; cells. A valid cell is a rectangle text area, which four borders ;; consist of valid border characters. Cells can not be nested one to ;; another or overlapped to each other except sharing the border ;; lines. A valid character of a cell's vertical border is either ;; table-cell-vertical-char `|' or table-cell-intersection-char `+'. ;; A valid character of a cell's horizontal border is either ;; table-cell-horizontal-char `-' or table-cell-intersection-char `+'. ;; A valid character of the four corners of a cell must be ;; table-cell-intersection-char `+'. A cell must contain at least one ;; character space inside. There is no restriction about the contents ;; of a table cell, however it is advised if possible to avoid using ;; any of the border characters inside a table cell. Normally a few ;; boarder characters inside a table cell are harmless. But it is ;; possible that they accidentally align up to emulate a bogus cell ;; corner on which software relies on for cell recognition. When this ;; happens the software may be fooled by it and fail to determine ;; correct cell dimension. ;; ;; Following are the examples of valid tables. ;; ;; +--+----+---+ +-+ +--+-----+ ;; | | | | | | | | | ;; +--+----+---+ +-+ | +--+--+ ;; | | | | | | | | ;; +--+----+---+ +--+--+ | ;; | | | ;; +-----+--+ ;; ;; The next five tables are the examples of invalid tables. (From ;; left to right, 1. nested cells 2. overlapped cells and a ;; non-rectangle cell 3. non-rectangle table 4. zero width/height ;; cells 5. zero sized cell) ;; ;; +-----+ +-----+ +--+ +-++--+ ++ ;; | | | | | | | || | ++ ;; | +-+ | | | | | | || | ;; | | | | +--+ | +--+--+ +-++--+ ;; | +-+ | | | | | | | +-++--+ ;; | | | | | | | | | || | ;; +-----+ +--+--+ +--+--+ +-++--+ ;; ;; Although the program may recognizes some of these invalid tables, ;; results from the subsequent editing operations inside those cells ;; are not predictable and will most likely start destroying the table ;; structures. ;; ;; It is strongly recommended to have at least one blank line above ;; and below a table. For a table to coexist peacefully with ;; surrounding environment table needs to be separated from unrelated ;; text. This is necessary for the left table to grow or shrink ;; horizontally without breaking the right table in the following ;; example. ;; ;; +-----+-----+-----+ ;; +-----+-----+ | | | | ;; | | | +-----+-----+-----+ ;; +-----+-----+ | | | | ;; +-----+-----+-----+ ;; ;; ;; ------------------------- ;; Cell contents formatting: ;; ------------------------- ;; ;; The cell contents are formatted by filling a paragraph immediately ;; after characters are inserted into or deleted from a cell. Because ;; of this, cell contents always remain fit inside a cell neatly. One ;; drawback of this is that users do not have full control over ;; spacing between words and line breaking. Only one space can be ;; entered between words and up to two spaces between sentences. For ;; a newline to be effective the new line must form a beginning of ;; paragraph, otherwise it'll automatically be merged with the ;; previous line in a same paragraph. To form a new paragraph the ;; line must start with some space characters or immediately follow a ;; blank line. Here is a typical example of how to list items within ;; a cell. Without a space at the beginning of each line the items ;; can not stand on their own. ;; ;; +---------------------------------+ ;; |Each one of the following three | ;; |items starts with a space | ;; |character thus forms a paragraph | ;; |of its own. Limitations in cell | ;; |contents formatting are: | ;; | | ;; | 1. Only one space between words.| ;; | 2. Up to two spaces between | ;; |sentences. | ;; | 3. A paragraph must start with | ;; |spaces or follow a blank line. | ;; | | ;; |This paragraph stays away from | ;; |the item 3 because there is a | ;; |blank line between them. | ;; +---------------------------------+ ;; ;; In the normal operation table cell width grows automatically when ;; certain word has to be folded into the next line if the width had ;; not been increased. This normal operation is useful and ;; appropriate for most of the time, however, it is sometimes useful ;; or necessary to fix the width of table and width of table cells. ;; For this purpose the package provides fixed width mode. You can ;; toggle between fixed width mode and normal mode by "C-!". ;; ;; Here is a simple example of the fixed width mode. Suppose we have ;; a table like this one. ;; ;; +-----+ ;; | | ;; +-----+ ;; ;; In normal mode if you type a word "antidisestablishmentarianism" it ;; grows the cell horizontally like this. ;; ;; +----------------------------+ ;; |antidisestablishmentarianism| ;; +----------------------------+ ;; ;; In the fixed width mode the same action produces the following ;; result. The folded locations are indicated by a continuation ;; character (`\' is the default). The continuation character is ;; treated specially so it is recommended to choose a character that ;; does not appear elsewhere in table cells. This character is ;; configurable via customization and is kept in the variable ;; `table-word-continuation-char'. The continuation character is ;; treated specially only in the fixed width mode and has no special ;; meaning in the normal mode however. ;; ;; +-----+ ;; |anti\| ;; |dise\| ;; |stab\| ;; |lish\| ;; |ment\| ;; |aria\| ;; |nism | ;; +-----+ ;; ;; ;; ------------------- ;; Cell Justification: ;; ------------------- ;; ;; By default the cell contents are filled with left justification and ;; no vertical justification. A paragraph can be justified ;; individually but only horizontally. Paragraph justification is for ;; appearance only and does not change any structural information ;; while cell justification affects table's structural information. ;; For cell justification a user can select horizontal justification ;; and vertical justification independently. Horizontal justification ;; must be one of the three 'left, 'center or 'right. Vertical ;; justification can be 'top, 'middle, 'bottom or 'none. When a cell ;; is justified, that information is recorded as a part of text ;; property therefore the information is persistent as long as the ;; cell remains within the Emacs world. Even copying tables by region ;; and rectangle manipulation commands preserve this information. ;; However, once the table text is saved as a file and the buffer is ;; killed the justification information vanishes permanently. To ;; alleviate this shortcoming without forcing users to save and ;; maintain a separate attribute file, the table code detects ;; justification of each cell when recognizing a table. This ;; detection is done by guessing the justification by looking at the ;; appearance of the cell contents. Since it is a guessing work it ;; does not guarantee the perfectness but it is designed to be ;; practically good enough. The guessing algorithm is implemented in ;; the function `table--detect-cell-alignment'. If you have better ;; algorithm or idea any suggestion is welcome. ;; ;; ;; ----- ;; Todo: (in the order of priority, some are just possibility) ;; ----- ;; ;; Fix compatibilities with other input method than quail ;; Resolve conflict with flyspell ;; Use mouse for resizing cells ;; A mechanism to link cells internally ;; Consider the use of variable width font under Emacs 21 ;; Consider the use of `:box' face attribute under Emacs 21 ;; Consider the use of `modification-hooks' text property instead of ;; rebinding the keymap ;; Maybe provide complete XEmacs support in the future however the ;; "extent" is the single largest obstacle lying ahead, read the ;; document in Emacs info. ;; (eval '(progn (require 'info) (Info-find-node "elisp" "Not Intervals"))) ;; ;; ;; --------------- ;; Acknowledgment: ;; --------------- ;; ;; Table would not have been possible without the help and ;; encouragement of the following spirited contributors. ;; ;; Paul Georgief <pgeorgie@doctordesign.com> has been the best tester ;; of the code as well as the constructive criticizer. ;; ;; Gerd Moellmann <gerd@gnu.org> gave me useful suggestions from Emacs ;; 21 point of view. ;; ;; Richard Stallman <rms@gnu.org> showed the initial interest in this ;; attempt of implementing the table feature to Emacs. This greatly ;; motivated me to follow through to its completion. ;; ;; Kenichi Handa <handa@etl.go.jp> kindly guided me through to ;; overcome many technical issues while I was struggling with quail ;; related internationalization problems. ;; ;; Christoph Conrad <christoph.conrad@gmx.de> suggested making symbol ;; names consistent as well as fixing several bugs. ;; ;; Paul Lew <paullew@cisco.com> suggested implementing fixed width ;; mode as well as multi column width (row height) input interface. ;; ;; Michael Smith <smith@xml-doc.org> a well-informed DocBook user ;; asked for CALS table source generation and helped me following ;; through the work by offering valuable suggestions and testing out ;; the code. Jorge Godoy <godoy@conectiva.com> has also suggested ;; supporting for DocBook tables. ;; ;; Sebastian Rahtz <sebastian.rahtz@computing-services.oxford.ac.uk> ;; contributed by implementing TEI (Text Encoding Initiative XML/SGML ;; DTD) table source generation into `table-generate-source' group ;; functions. ;; ;; And many other individuals who reported bugs and suggestions.