diff options
Diffstat (limited to 'lisp/align.el')
-rw-r--r-- | lisp/align.el | 74 |
1 files changed, 42 insertions, 32 deletions
diff --git a/lisp/align.el b/lisp/align.el index 5e02520aae0..be70f8f9d4f 100644 --- a/lisp/align.el +++ b/lisp/align.el @@ -86,10 +86,9 @@ ;; '((my-rule ;; (regexp . "Sample"))) ;; :type align-rules-list-type +;; :risky t ;; :group 'my-package) ;; -;; (put 'my-align-rules-list 'risky-local-variable t) -;; ;; (add-to-list 'align-dq-string-modes 'my-package-mode) ;; (add-to-list 'align-open-comment-modes 'my-package-mode) ;; @@ -160,7 +159,8 @@ string), this heuristic is used to determine how far before and after point we should search in looking for a region separator. Larger values can mean slower performance in large files, although smaller values may cause unexpected behavior at times." - :type 'integer + :type '(choice (const :tag "Don't use heuristic when aligning a region" nil) + integer) :group 'align) (defcustom align-highlight-change-face 'highlight @@ -176,7 +176,7 @@ values may cause unexpected behavior at times." (defcustom align-large-region 10000 "If an integer, defines what constitutes a \"large\" region. If nil, then no messages will ever be printed to the minibuffer." - :type 'integer + :type '(choice (const :tag "Align a large region silently" nil) integer) :group 'align) (defcustom align-c++-modes '(c++-mode c-mode java-mode) @@ -318,10 +318,9 @@ The possible settings for `align-region-separate' are: ; (const largest) (regexp :tag "Regexp defines section boundaries") (function :tag "Function defines section boundaries")) + :risky t :group 'align) -(put 'align-region-separate 'risky-local-variable t) - (defvar align-rules-list-type '(repeat (cons @@ -356,11 +355,11 @@ The possible settings for `align-region-separate' are: (cons :tag "Valid" (const :tag "(Return non-nil if rule is valid)" valid) - (function :value t)) + (function :value always)) (cons :tag "Run If" (const :tag "(Return non-nil if rule should run)" run-if) - (function :value t)) + (function :value always)) (cons :tag "Column" (const :tag "(Column to fix alignment at)" column) (choice :value comment-column @@ -545,16 +544,16 @@ The possible settings for `align-region-separate' are: (regexp . "\\(\\s-*\\)\\\\\\\\") (modes . align-tex-modes)) - ;; With a numeric prefix argument, or C-u, space delimited text - ;; tables will be aligned. + ;; Align space delimited text as columns. (text-column (regexp . "\\(^\\|\\S-\\)\\([ \t]+\\)\\(\\S-\\|$\\)") (group . 2) (modes . align-text-modes) (repeat . t) (run-if . ,(lambda () - (and current-prefix-arg - (not (eq '- current-prefix-arg)))))) + (and (not (eq '- current-prefix-arg)) + (not (apply #'provided-mode-derived-p + major-mode align-tex-modes)))))) ;; With a negative prefix argument, lists of dollar figures will ;; be aligned. @@ -698,10 +697,9 @@ The following attributes are meaningful: (see the documentation of that variable for possible values), and any separation argument passed to `align'." :type align-rules-list-type + :risky t :group 'align) -(put 'align-rules-list 'risky-local-variable t) - (defvar align-exclude-rules-list-type '(repeat (cons @@ -769,10 +767,9 @@ The following attributes are meaningful: "A list describing text that should be excluded from alignment. See the documentation for `align-rules-list' for more info." :type align-exclude-rules-list-type + :risky t :group 'align) -(put 'align-exclude-rules-list 'risky-local-variable t) - ;;; Internal Variables: (defvar-local align-mode-rules-list nil @@ -822,8 +819,8 @@ See the variable `align-exclude-rules-list' for more details.") (regexp . "\\(\\s-+\\)use\\s-+entity"))) "Alignment rules for `vhdl-mode'. See `align-rules-list' for more info." :type align-rules-list-type + :risky t :group 'align) -(put 'align-vhdl-rules-list 'risky-local-variable t) (make-obsolete-variable 'align-vhdl-rules-list "no longer used." "27.1") (defun align-set-vhdl-rules () @@ -836,11 +833,22 @@ See the variable `align-exclude-rules-list' for more details.") ;;;###autoload (defun align (beg end &optional separate rules exclude-rules) "Attempt to align a region based on a set of alignment rules. -BEG and END mark the region. If BEG and END are specifically set to -nil (this can only be done programmatically), the beginning and end of -the current alignment section will be calculated based on the location -of point, and the value of `align-region-separate' (or possibly each -rule's `separate' attribute). +Interactively, BEG and END are the mark/point of the current region. + +Many modes define specific alignment rules, and some of these +rules in some modes react to the current prefix argument. For +instance, in `text-mode', \\`M-x align' will align into columns +based on space delimiters, while \\`C-u -' \\`M-x align' will align +into columns based on the \"$\" character. See the +`align-rules-list' variable definition for the specific rules. + +Also see `align-regexp', which will guide you through various +parameters for aligning text. + +Non-interactively, if BEG and END are nil, the beginning and end +of the current alignment section will be calculated based on the +location of point, and the value of `align-region-separate' (or +possibly each rule's `separate' attribute). If SEPARATE is non-nil, it overrides the value of `align-region-separate' for all rules, except those that have their @@ -889,6 +897,15 @@ on the format of these lists." BEG and END mark the limits of the region. Interactively, this function prompts for the regular expression REGEXP to align with. +Interactively, if you specify a prefix argument, the function +will guide you through entering the full regular expression, and +then prompts for which subexpression parenthesis GROUP (default +1) within REGEXP to modify, the amount of SPACING (default +`align-default-spacing') to use, and whether or not to REPEAT the +rule throughout the line. + +See `align-rules-list' for more information about these options. + For example, let's say you had a list of phone numbers, and wanted to align them so that the opening parentheses would line up: @@ -908,15 +925,8 @@ regular expression after you enter it. Interactively, you only need to supply the characters to be lined up, and any preceding whitespace is replaced. -Non-interactively (or if you specify a prefix argument), you must -enter the full regular expression, including the subexpression. -Interactively, the function also then prompts for which -subexpression parenthesis GROUP (default 1) within REGEXP to -modify, the amount of SPACING (default `align-default-spacing') -to use, and whether or not to REPEAT the rule throughout the -line. - -See `align-rules-list' for more information about these options. +Non-interactively, you must enter the full regular expression, +including the subexpression. The non-interactive form of the previous example would look something like: (align-regexp (point-min) (point-max) \"\\\\(\\\\s-*\\\\)(\") @@ -928,7 +938,7 @@ construct a rule to pass to `align-region', which does the real work." (list (region-beginning) (region-end)) (if current-prefix-arg (list (read-string "Complex align using regexp: " - "\\(\\s-*\\)" 'align-regexp-history) + "\\(\\s-*\\) " 'align-regexp-history) (string-to-number (read-string "Parenthesis group to modify (justify if negative): " "1")) |