From e3c24b171bfff16fb808cb02d3fc5eaff017c1bc Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 4 Dec 2014 10:09:08 -0500 Subject: [PATCH] * lisp/progmodes/sh-script.el: Fix indentation rule of "| while". Fixes: debbugs:18031 * lisp/progmodes/sh-script.el (sh-smie-sh-rules): Go back to the beginning of the whole pipe when indenting an opening keyword after a |. Generalize this treatment to opening keywords like "while". --- lisp/ChangeLog | 6 ++++++ lisp/progmodes/sh-script.el | 4 ++-- test/indent/shell.sh | 11 +++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 12e5ef0e346..26b09a68d02 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2014-12-04 Stefan Monnier + + * progmodes/sh-script.el (sh-smie-sh-rules): Go back to the beginning + of the whole pipe when indenting an opening keyword after a |. + Generalize this treatment to opening keywords like "while" (bug#18031). + 2014-12-01 Stefan Monnier * simple.el (newline): Place the hook buffer-locally, diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el index 724d22ab69b..1165144d05c 100644 --- a/lisp/progmodes/sh-script.el +++ b/lisp/progmodes/sh-script.el @@ -1988,12 +1988,12 @@ May return nil if the line should not be treated as continued." (and (numberp indent) (numberp initial) (<= indent initial))))) `(column . ,(+ initial sh-indentation))) - (`(:before . ,(or `"(" `"{" `"[")) + (`(:before . ,(or `"(" `"{" `"[" "while" "if" "for" "case")) (if (not (smie-rule-prev-p "&&" "||" "|")) (when (smie-rule-hanging-p) (smie-rule-parent)) (unless (smie-rule-bolp) - (smie-backward-sexp 'halfexp) + (while (equal "|" (nth 2 (smie-backward-sexp 'halfexp)))) `(column . ,(smie-indent-virtual))))) ;; FIXME: Maybe this handling of ;; should be made into ;; a smie-rule-terminator function that takes the substitute ";" as arg. diff --git a/test/indent/shell.sh b/test/indent/shell.sh index e3619057d6e..14f67744ff2 100755 --- a/test/indent/shell.sh +++ b/test/indent/shell.sh @@ -54,6 +54,17 @@ filter_3 () # bug#17842 grep -v "^," | sort -t, -k2,2 } +foo | bar | { + toto +} + +grep -e "^$userregexp:" /etc/passwd | cut -d : -f 1 | while read user ; do + print -u2 "user=$user" # bug#18031 + sudo -U $user -ll | while read line ; do + : + done +done + echo -n $(( 5 << 2 )) # This should not be treated as a heredoc (bug#12770). 2 -- 2.11.4.GIT