Mercurial > emacs
view lisp/delim-col.el @ 110523:a5ad4f188e19
Synch Semantic to CEDET 1.0.
Move CEDET ChangeLog entries to new file lisp/cedet/ChangeLog.
* semantic.el (semantic-version): Update to 2.0.
(semantic-mode-map): Add "," and "m" bindings.
(navigate-menu): Update.
* semantic/symref.el (semantic-symref-calculate-rootdir):
New function.
(semantic-symref-detect-symref-tool): Use it.
* semantic/symref/grep.el (semantic-symref-grep-shell): New var.
(semantic-symref-perform-search): Use it. Calculate root dir with
semantic-symref-calculate-rootdir.
(semantic-symref-derive-find-filepatterns): Improve error message.
* semantic/symref/list.el
(semantic-symref-results-mode-map): New bindings.
(semantic-symref-auto-expand-results): New option.
(semantic-symref-results-dump): Obey auto-expand.
(semantic-symref-list-expand-all, semantic-symref-regexp)
(semantic-symref-list-contract-all)
(semantic-symref-list-map-open-hits)
(semantic-symref-list-update-open-hits)
(semantic-symref-list-create-macro-on-open-hit)
(semantic-symref-list-call-macro-on-open-hits): New functions.
(semantic-symref-list-menu-entries)
(semantic-symref-list-menu): New vars.
(semantic-symref-list-map-open-hits): Move cursor to beginning of
match before calling the mapped function.
* semantic/doc.el
(semantic-documentation-comment-preceeding-tag): Do nothing if the
mode doesn't provide comment-start-skip.
* semantic/scope.el
(semantic-analyze-scope-nested-tags-default): Strip duplicates.
(semantic-analyze-scoped-inherited-tag-map): Take the tag we are
looking for as part of the scoped tags list.
* semantic/html.el (semantic-default-html-setup): Add
senator-step-at-tag-classes.
* semantic/decorate/include.el
(semantic-decoration-on-unknown-includes): Change light bgcolor.
(semantic-decoration-on-includes-highlight-default): Check that
the include tag has a postion.
* semantic/complete.el (semantic-collector-local-members):
(semantic-complete-read-tag-local-members)
(semantic-complete-jump-local-members): New class and functions.
(semantic-complete-self-insert): Save excursion before completing.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): If no completions
are found, return the raw by-name-only completion list. Add FLAGS
arguments. Add support for 'no-tc (type constraint) and
'no-unique, or no stripping duplicates.
(semantic-analyze-possible-completions-default): Add FLAGS arg.
* semantic/util-modes.el
(semantic-stickyfunc-show-only-functions-p): New option.
(semantic-stickyfunc-fetch-stickyline): Don't show stickytext for
the very first line in a buffer.
* semantic/util.el (semantic-hack-search)
(semantic-recursive-find-nonterminal-by-name)
(semantic-current-tag-interactive): Deleted.
(semantic-describe-buffer): Fix expand-nonterminal. Add
lex-syntax-mods, type relation separator char, and command
separation char.
(semantic-sanity-check): Only message if called interactively.
* semantic/tag.el (semantic-tag-deep-copy-one-tag): Copy the
:filename property and the tag position.
* semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
Add recursion limit.
* semantic/imenu.el (semantic-imenu-bucketize-type-members):
Make this buffer local, not the obsoleted variable.
* semantic/idle.el: Add breadcrumbs support.
(semantic-idle-summary-current-symbol-info-default)
(semantic-idle-tag-highlight)
(semantic-idle-completion-list-default): Use
semanticdb-without-unloaded-file-searches for speed, and to
conform to the controls that specify if the idle timer is supposed
to be parsing unparsed includes.
(semantic-idle-symbol-highlight-face)
(semantic-idle-symbol-maybe-highlight): Rename from *-summary-*.
Callers changed.
(semantic-idle-work-parse-neighboring-files-flag): Default to nil.
(semantic-idle-work-update-headers-flag): New var.
(semantic-idle-work-for-one-buffer): Use it.
(semantic-idle-local-symbol-highlight): Rename from
semantic-idle-tag-highlight.
(semantic-idle-truncate-long-summaries): New option.
* semantic/ia.el (semantic-ia-cache)
(semantic-ia-get-completions): Deleted. Callers changed.
(semantic-ia-show-variants): New command.
(semantic-ia-show-doc): If doc is empty, don't make a temp buffer.
(semantic-ia-show-summary): If there isn't anything to show, say so.
* semantic/grammar.el (semantic-grammar-create-package):
Save the buffer even in batch mode.
* semantic/fw.el
(semanticdb-without-unloaded-file-searches): New macro.
* semantic/dep.el (semantic-dependency-find-file-on-path):
Fix case dereferencing ede-object when it is a list.
* semantic/db-typecache.el (semanticdb-expand-nested-tag)
(semanticdb-typecache-faux-namespace): New functions.
(semanticdb-typecache-file-tags)
(semanticdb-typecache-merge-streams): Use them.
(semanticdb-typecache-file-tags): When deriving tags from a file,
give the mode a chance to monkey with the tag copy.
(semanticdb-typecache-find-default): Wrap find in save-excursion.
(semanticdb-typecache-find-by-name-helper): Merge found names down.
* semantic/db-global.el
(semanticdb-enable-gnu-global-in-buffer): Don't show messages if
GNU Global is not available and we don't want to throw an error.
* semantic/db-find.el (semanticdb-find-result-nth-in-buffer):
When trying to normalize the tag to a buffer, don't error if
set-buffer method doesn't exist.
* semantic/db-file.el (semanticdb-save-db): Simplify msg.
* semantic/db.el (semanticdb-refresh-table): If forcing a
refresh on a file not in a buffer, use semantic-find-file-noselect
and delete the buffer after use.
(semanticdb-current-database-list): When calculating root via
hooks, force it through true-filename and skip the list of
possible roots.
* semantic/ctxt.el (semantic-ctxt-imported-packages): New.
* semantic/analyze/debug.el
(semantic-analyzer-debug-insert-tag): Reset standard output to
current buffer.
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype): Change "prefix" to
"symbol" in messages.
* semantic/analyze/refs.el: (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): When calculating value, make sure
the found tag is 'similar' to the originating tag.
(semantic--analyze-refs-find-tags-with-parent): Attempt to
identify matches via imported symbols of parents.
(semantic--analyze-refs-full-lookup-with-parents): Do a deep
search during the brute search.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Be robust to
calculated scopes being nil.
* semantic/bovine/c.el (semantic-c-describe-environment): Add
project macro symbol array.
(semantic-c-parse-lexical-token): Add recursion limit.
(semantic-ctxt-imported-packages, semanticdb-expand-nested-tag):
New overrides.
(semantic-expand-c-tag-namelist): Split a full type from a typedef
out to its own tag.
(semantic-expand-c-tag-namelist): Do not split out a typedef'd
inline type if it is an anonymous type.
(semantic-c-reconstitute-token): Use the optional initializers as
a clue that some function is probably a constructor. When
defining the type of these constructors, split the parent name,
and use only the class part, if applicable.
* semantic/bovine/c-by.el:
* semantic/wisent/python-wy.el: Regenerate.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sat, 18 Sep 2010 22:49:54 -0400 |
parents | f6b8c73548b3 |
children | 376148b31b5e |
line wrap: on
line source
;;; delim-col.el --- prettify all columns in a region or rectangle ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> ;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> ;; Version: 2.1 ;; Keywords: internal ;; X-URL: http://www.emacswiki.org/cgi-bin/wiki/ViniciusJoseLatorre ;; This file is part of GNU Emacs. ;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. ;;; Commentary: ;; delim-col helps to prettify columns in a text region or rectangle. ;; ;; To use it, make sure that this file is in load-path and insert in your ;; .emacs: ;; ;; (require 'delim-col) ;; ;; If you have, for example, the following columns: ;; ;; a b c d ;; aaaa bb ccc ddddd ;; aaa bbb cccc dddd ;; aa bb ccccccc ddd ;; ;; And the following settings: ;; ;; (setq delimit-columns-str-before "[ ") ;; (setq delimit-columns-str-after " ]") ;; (setq delimit-columns-str-separator ", ") ;; (setq delimit-columns-before "") ;; (setq delimit-columns-after "") ;; (setq delimit-columns-separator "\t") ;; (setq delimit-columns-format 'separator) ;; (setq delimit-columns-extra t) ;; ;; If you select the lines above and type: ;; ;; M-x delimit-columns-region RET ;; ;; You obtain the following result: ;; ;; [ a , b , c , d ] ;; [ aaaa, bb , ccc , ddddd ] ;; [ aaa , bbb, cccc , dddd ] ;; [ aa , bb , ccccccc, ddd ] ;; ;; But if you select start from the very first b to the very last c and type: ;; ;; M-x delimit-columns-rectangle RET ;; ;; You obtain the following result: ;; ;; a [ b , c ] d ;; aaaa [ bb , ccc ] ddddd ;; aaa [ bbb, cccc ] dddd ;; aa [ bb , ccccccc ] ddd ;; ;; Now, if we change settings to: ;; ;; (setq delimit-columns-before "<") ;; (setq delimit-columns-after ">") ;; ;; For the `delimit-columns-region' example above, the result is: ;; ;; [ <a> , <b> , <c> , <d> ] ;; [ <aaaa>, <bb> , <ccc> , <ddddd> ] ;; [ <aaa> , <bbb>, <cccc> , <dddd> ] ;; [ <aa> , <bb> , <ccccccc>, <ddd> ] ;; ;; And for the `delimit-columns-rectangle' example above, the result is: ;; ;; a [ <b> , <c> ] d ;; aaaa [ <bb> , <ccc> ] ddddd ;; aaa [ <bbb>, <cccc> ] dddd ;; aa [ <bb> , <ccccccc> ] ddd ;; ;; Note that `delimit-columns-region' operates over all text region ;; selected, extending the region start to the beginning of line and the ;; region end to the end of line. While `delimit-columns-rectangle' ;; operates over the text rectangle selected which rectangle diagonal is ;; given by the region start and end. ;; ;; See `delimit-columns-format' variable documentation for column formating. ;; ;; `delimit-columns-region' is useful when you have columns of text that ;; are not well aligned, like: ;; ;; horse apple bus ;; dog pineapple car ;; porcupine strawberry airplane ;; ;; `delimit-columns-region' and `delimit-columns-rectangle' handle lines ;; with different number of columns, like: ;; ;; horse apple bus ;; dog pineapple car EXTRA ;; porcupine strawberry airplane ;; ;; Use `delimit-columns-customize' to customize delim-col package variables. ;;; Code: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; User Options: (defgroup columns nil "Prettify columns." :link '(emacs-library-link :tag "Source Lisp File" "delim-col.el") :prefix "delimit-columns-" :group 'wp) (defcustom delimit-columns-str-before "" "Specify a string to be inserted before all columns." :type '(string :tag "Before All Columns") :group 'columns) (defcustom delimit-columns-str-separator ", " "Specify a string to be inserted between each column." :type '(string :tag "Between Each Column") :group 'columns) (defcustom delimit-columns-str-after "" "Specify a string to be inserted after all columns." :type '(string :tag "After All Columns") :group 'columns) (defcustom delimit-columns-before "" "Specify a string to be inserted before each column." :type '(string :tag "Before Each Column") :group 'columns) (defcustom delimit-columns-after "" "Specify a string to be inserted after each column." :type '(string :tag "After Each Column") :group 'columns) (defcustom delimit-columns-separator "\t" "Specify a regexp which separates each column." :type '(regexp :tag "Column Separator") :group 'columns) (defcustom delimit-columns-format t "Specify how to format columns. For examples below, consider: + columns `ccc' and `dddd', + the maximum column length for each column is 6, + and the following settings: (setq delimit-columns-before \"<\") (setq delimit-columns-after \">\") (setq delimit-columns-separator \":\") Valid values are: nil no formating. That is, `delimit-columns-after' is followed by `delimit-columns-separator'. For example, the result is: \"<ccc>:<dddd>:\" t align columns. That is, `delimit-columns-after' is followed by `delimit-columns-separator' and then followed by spaces. For example, the result is: \"<ccc>: <dddd>: \" 'separator align separators. That is, `delimit-columns-after' is followed by spaces and then followed by `delimit-columns-separator'. For example, the result is: \"<ccc> :<dddd> :\" 'padding format column by filling with spaces before `delimit-columns-after'. That is, spaces are followed by `delimit-columns-after' and then followed by `delimit-columns-separator'. For example, the result is: \"<ccc >:<dddd >:\" Any other value is treated as t." :type '(choice :menu-tag "Column Formating" :tag "Column Formating" (const :tag "No Formating" nil) (const :tag "Column Alignment" t) (const :tag "Separator Aligment" separator) (const :tag "Column Padding" padding)) :group 'columns) (defcustom delimit-columns-extra t "Non-nil means that lines will have the same number of columns. This has effect only when there are lines with different number of columns." :type '(boolean :tag "Lines With Same Number Of Column") :group 'columns) (defcustom delimit-columns-start 0 "Specify column number to start prettifing. See also `delimit-columns-end' for documentation. The following relation must hold: 0 <= delimit-columns-start <= delimit-columns-end The column number start from 0 and it's relative to the beginning of selected region. So if you selected a text region, the first column (column 0) is located at beginning of line. If you selected a text rectangle, the first column (column 0) is located at left corner." :type '(integer :tag "Column Start") :group 'columns) (defcustom delimit-columns-end 1000000 "Specify column number to end prettifing. See also `delimit-columns-start' for documentation. The following relation must hold: 0 <= delimit-columns-start <= delimit-columns-end The column number start from 0 and it's relative to the beginning of selected region. So if you selected a text region, the first column (column 0) is located at beginning of line. If you selected a text rectangle, the first column (column 0) is located at left corner." :type '(integer :tag "Column End") :group 'columns) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; User Commands: ;;;###autoload (defun delimit-columns-customize () "Customization of `columns' group." (interactive) (customize-group 'columns)) (defmacro delimit-columns-str (str) `(if (stringp ,str) ,str "")) ;;;###autoload (defun delimit-columns-region (start end) "Prettify all columns in a text region. START and END delimits the text region." (interactive "*r") (let ((delimit-columns-str-before (delimit-columns-str delimit-columns-str-before)) (delimit-columns-str-separator (delimit-columns-str delimit-columns-str-separator)) (delimit-columns-str-after (delimit-columns-str delimit-columns-str-after)) (delimit-columns-before (delimit-columns-str delimit-columns-before)) (delimit-columns-after (delimit-columns-str delimit-columns-after)) (delimit-columns-start (if (and (integerp delimit-columns-start) (>= delimit-columns-start 0)) delimit-columns-start 0)) (delimit-columns-end (if (integerp delimit-columns-end) delimit-columns-end 1000000)) (delimit-columns-limit (make-marker)) (the-end (copy-marker end)) delimit-columns-max) (when (<= delimit-columns-start delimit-columns-end) (save-excursion (goto-char start) (beginning-of-line) ;; get maximum length for each column (and delimit-columns-format (save-excursion (while (< (point) the-end) (delimit-columns-rectangle-max (prog1 (point) (end-of-line))) (forward-char 1)))) ;; prettify columns (while (< (point) the-end) (delimit-columns-rectangle-line (prog1 (point) (end-of-line))) (forward-char 1)) ;; nullify markers (set-marker delimit-columns-limit nil) (set-marker the-end nil))))) (require 'rect) ;;;###autoload (defun delimit-columns-rectangle (start end) "Prettify all columns in a text rectangle. START and END delimits the corners of text rectangle." (interactive "*r") (let ((delimit-columns-str-before (delimit-columns-str delimit-columns-str-before)) (delimit-columns-str-separator (delimit-columns-str delimit-columns-str-separator)) (delimit-columns-str-after (delimit-columns-str delimit-columns-str-after)) (delimit-columns-before (delimit-columns-str delimit-columns-before)) (delimit-columns-after (delimit-columns-str delimit-columns-after)) (delimit-columns-start (if (and (integerp delimit-columns-start) (>= delimit-columns-start 0)) delimit-columns-start 0)) (delimit-columns-end (if (integerp delimit-columns-end) delimit-columns-end 1000000)) (delimit-columns-limit (make-marker)) (the-end (copy-marker end)) delimit-columns-max) (when (<= delimit-columns-start delimit-columns-end) ;; get maximum length for each column (and delimit-columns-format (save-excursion (operate-on-rectangle 'delimit-columns-rectangle-max start the-end nil))) ;; prettify columns (save-excursion (operate-on-rectangle 'delimit-columns-rectangle-line start the-end nil)) ;; nullify markers (set-marker delimit-columns-limit nil) (set-marker the-end nil)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Internal Variables and Functions: ;; to avoid compilation gripes (defvar delimit-columns-max nil) (defvar delimit-columns-limit nil) (defun delimit-columns-rectangle-max (startpos &optional ignore1 ignore2) (set-marker delimit-columns-limit (point)) (goto-char startpos) (let ((ncol 1) origin values) ;; get current column length (while (progn (setq origin (current-column)) (re-search-forward delimit-columns-separator delimit-columns-limit 'move)) (save-excursion (goto-char (match-beginning 0)) (setq values (cons (- (current-column) origin) values))) (setq ncol (1+ ncol))) (setq values (cons (- (current-column) origin) values)) ;; extend delimit-columns-max, if needed (let ((index (length delimit-columns-max))) (and (> ncol index) (let ((extend (make-vector ncol 0))) (while (> index 0) (setq index (1- index)) (aset extend index (aref delimit-columns-max index))) (setq delimit-columns-max extend)))) ;; get maximum column length (while values (setq ncol (1- ncol)) (aset delimit-columns-max ncol (max (aref delimit-columns-max ncol) (car values))) (setq values (cdr values))))) (defun delimit-columns-rectangle-line (startpos &optional ignore1 ignore2) (let ((len (length delimit-columns-max)) (ncol 0) origin) (set-marker delimit-columns-limit (point)) (goto-char startpos) ;; skip initial columns (while (and (< ncol delimit-columns-start) (< (point) delimit-columns-limit) (re-search-forward delimit-columns-separator delimit-columns-limit 'move)) (setq ncol (1+ ncol))) ;; insert first formating (insert delimit-columns-str-before delimit-columns-before) ;; Adjust all columns but last one (while (progn (setq origin (current-column)) (and (< (point) delimit-columns-limit) (re-search-forward delimit-columns-separator delimit-columns-limit 'move) (or (< ncol delimit-columns-end) (progn (goto-char (match-beginning 0)) nil)))) (delete-region (match-beginning 0) (point)) (delimit-columns-format (and delimit-columns-format (make-string (- (aref delimit-columns-max ncol) (- (current-column) origin)) ?\s))) (setq ncol (1+ ncol))) ;; Prepare last column spaces (let ((spaces (and delimit-columns-format (make-string (- (aref delimit-columns-max ncol) (- (current-column) origin)) ?\s)))) ;; Adjust extra columns, if needed (and delimit-columns-extra (while (and (< (setq ncol (1+ ncol)) len) (<= ncol delimit-columns-end)) (delimit-columns-format spaces) (setq spaces (and delimit-columns-format (make-string (aref delimit-columns-max ncol) ?\s))))) ;; insert last formating (cond ((null delimit-columns-format) (insert delimit-columns-after delimit-columns-str-after)) ((eq delimit-columns-format 'padding) (insert spaces delimit-columns-after delimit-columns-str-after)) (t (insert delimit-columns-after spaces delimit-columns-str-after)) )) (goto-char (max (point) delimit-columns-limit)))) (defun delimit-columns-format (spaces) (cond ((null delimit-columns-format) (insert delimit-columns-after delimit-columns-str-separator delimit-columns-before)) ((eq delimit-columns-format 'separator) (insert delimit-columns-after spaces delimit-columns-str-separator delimit-columns-before)) ((eq delimit-columns-format 'padding) (insert spaces delimit-columns-after delimit-columns-str-separator delimit-columns-before)) (t (insert delimit-columns-after delimit-columns-str-separator spaces delimit-columns-before)) )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (provide 'delim-col) ;; arch-tag: 1cc0c5c5-1b2a-43e4-9ba5-bf9441cfd1a9 ;;; delim-col.el ends here