Mercurial > emacs
view lisp/delim-col.el @ 92870:8f17f65dd575
* textmodes/org.el (org-ctrl-c-star): Implement a missing branch
in the decision tree.
(org-select-remember-template): Cleaned the code.
(org-prepare-dblock): Added the extra :content parameter.
(org-write-agenda): New output type ".ics" files.
(org-write-agenda): Call `org-icalendar-verify-function', both for
time stamps and for TODO entries.
(org-agenda-collect-markers, org-create-marker-find-array)
(org-check-agenda-marker-table): New functions.
(org-agenda-marker-table): New variable.
(org-export-as-html): Revert the change that killed the html
buffer. Side effects first need to be studied carefully.
(org-get-tags-at): Fix the structure of the condition-case
statement.
(org-ts-regexp0, org-repeat-re, org-display-custom-time)
(org-timestamp-change): Fix regulear expressions to swallow the
extra character for repeat-shift control.
(org-auto-repeat-maybe): Implement the new repeater mechanisms.
(org-get-legal-level): Aliased to `org-get-valid-level'.
(org-dblock-write:clocktable): Added a :link parameter, linking
headlines to their location in the Org agenda files.
(org-get-tags-at): Bugfix: prevent `org-back-to-heading' from
throwing an error when getting tags before headlines.
(org-timestamp-change, org-modify-ts-extra)
(org-ts-regexp1): Fix timestamp editing.
(org-agenda-custom-commands-local-options): New constant.
(org-agenda-custom-commands): Use
`org-agenda-custom-commands-local-options' to improve customize
type. "htmlize": Removed hack to fix face problem with htmlize,
it no longer seem necessary.
(org-follow-link-hook): New hook.
(org-agenda-custom-commands): Added "Component" as a tag for each
item in a command serie.
(org-open-at-point): Run `org-follow-link-hook'.
(org-agenda-schedule): Bugfix: don't display marker type when it
is `nil'.
(org-store-link): org-irc required.
(org-set-regexps-and-options): Parse the new logging options.
(org-extract-log-state-settings): New function.
(org-todo): Handle the new ways of recording state change stuff.
(org-local-logging): New function.
(org-columns-open-link): Fixed bug with opening link in column
view.
(org-local-logging): New function
(org-todo): Make sure that LOGGING properties are honoured.
(org-todo-keywords): Improve docstring.
(org-startup-options): Cleanup startup options.
(org-set-regexps-and-options): Process the "!" markers.
(org-todo): Respect the new logging stuff.
(org-log-note-how): New variable.
(org-add-log-maybe): New parameter HOW that defines how logging
should be done and also overrides PURPOSE. Add a docstring.
(org-add-log-note): Check if we really need to ask for a note.
(org-get-current-options): Digest the new keyword.
(org-agenda-reset-markers): Renamed from
`org-agenda-maybe-reset-markers'. FORCE argument removed.
(org-diary, org-agenda-quit, org-prepare-agenda): Call the renamed
function, without force argument.
(org-buffer-property-keys): Bind local variables s and p.
(org-make-tags-matcher): Allow "" to match an empty or
non-existent property value.
(org-export-as-html): Join unsorted lists when they directly
follow each other. Such lists may be created by headlines that
are converted to lists.
(org-nofm-to-completion): New function.
(org-export-as-html): Use :html-extension instead of
org-export-html-extension.
(org-store-link): Support for links from `rmail-summary-mode'.
(org-columns-new, org-complete, org-set-property): Set the
`include-columns' argument in the call to
`org-buffer-property-keys'.
(org-buffer-property-keys): New argument `include-columns', to
include properties expected by any of the COLUMS formats in the
current buffer.
(org-cleaned-string-for-export): Get rid of drawers first, so that
they will be removed also in the text before the first headline.
(org-clock-report): Show the clocktable when found.
(org-refile): Fix positioning bug when `org-reverse-note-order' is
nil.
(org-version): With prefix argument, insert `org-version' at
point.
(org-agenda-goto): Recenter the window after finding the target
location, to make sure the correct position will be displayed.
(org-agenda-get-deadlines): Don't scale priority with the warning
period.
(org-insert-heading): Don't break line in the middle of the line.
(org-agenda-get-deadlines): Allow `org-deadline-warning-days' to
be 0.
(org-update-checkbox-count): Revamped to deal with hierarchical
beckboxes. This was a patch from Miguel A. Figueroa-Villanueva.
(org-remove-timestamp-with-keyword): New function.
(org-schedule, org-deadline): Use
`org-remove-timestamp-with-keyword' to make sure all such time
stamps are removed.
(org-mode): Support for `align'.
(org-agenda-get-deadlines): Make sure priorities increase as the
due date approaches and is passed.
(org-remember-apply-template): Fixed problem with tags that
contain "_" or "@".
(org-make-link-regexps): Improve the regular expression for plain
links.
(org-agenda-get-closed): List each clocking entry.
(org-set-tags): Only tabify before tags if indent-tabs-mode is t.
(org-special-ctrl-k): New option.
(org-kill-line): New function.
(org-archive-all-done): Fixed incorrect number of stars in regexp.
(org-refile-get-location): New function.
(org-refile-goto-last-stored): New function.
(org-global-tags-completion-table): Add the value of org-tag-alist
in each buffer, to make sure that also unused tags will be
available for completion.
(org-columns-edit-value)
(org-columns-next-allowed-value): Only update if not in agenda.
(org-clocktable-steps): New function.
(org-dblock-write:clocktable): Call `org-clocktable-steps'.
(org-archive-subtree): Add the outline tree context as a property.
(org-closest-date): New optional argument `prefer'.
(org-goto-auto-isearch): New option.
(org-goto-map, org-get-location): Implement auto-isearch.
(org-goto-local-auto-isearch-map): New variable.
(org-goto-local-search-forward-headings)
(org-goto-local-auto-isearch): New functions
author | Carsten Dominik <dominik@science.uva.nl> |
---|---|
date | Thu, 13 Mar 2008 08:54:11 +0000 |
parents | 73661ddc7ac7 |
children | 606f2d163a64 1e3a407766b9 |
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 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, 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; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; 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 'internal) (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