unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#37726: [PATCH] Indent python multiline strings to start and previous levels
@ 2019-10-13  4:29 Carlos Pita
  2019-10-13  5:04 ` bug#37726: Carlos Pita
  0 siblings, 1 reply; 12+ messages in thread
From: Carlos Pita @ 2019-10-13  4:29 UTC (permalink / raw)
  To: 37726

[-- Attachment #1: Type: text/plain, Size: 746 bytes --]

This adds an additional indentation level that matches indentation of
previous line in a multiline string. Then Tab iterates between 0, the
start indentation level and the previous line level. This is useful
when writing docstrings in numpy/google formats that use indentation
to convey meaning.

For example:

0    4    8
     This is the first item
           This is a sub item
>   >    >

Then pressing Tab while in the third line will iterate between 0, 4
and 8, starting in 8, then 4, then 0. Compare with the current
implementation which will jump just between 0 and 4, which is not
convenient when the subitem is more than one line. A cursory
google/reddit search will show that this is a problem for some people.

Best regards
--
Carlos

[-- Attachment #2: 0001-Indent-python-multiline-strings-to-start-and-previou.patch --]
[-- Type: text/x-patch, Size: 2518 bytes --]

From 22803067f9117772f954aa5abec4487d234df2a5 Mon Sep 17 00:00:00 2001
From: memeplex <carlosjosepita@gmail.com>
Date: Sat, 12 Oct 2019 17:04:01 -0300
Subject: [PATCH] Indent python multiline strings to start and previous levels

* progmodes/python.el (python-indent--calculate-indentation): add an
additional indentation point to match indentation of previous line in
a multiline string. Then Tab iterates between 0, the start indentation
level and the previous line level. This is useful when writing
docstrings in numpy/google formats.
---
 lisp/progmodes/python.el | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index ae5aff3..f2a88f9 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -1,3 +1,4 @@
+
 ;;; python.el --- Python's flying circus support for Emacs -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2003-2019 Free Software Foundation, Inc.
@@ -1069,11 +1070,20 @@ python-indent--calculate-indentation
         (`(:no-indent . ,_) (prog-first-column)) ; usually 0
         (`(,(or :after-line
                 :after-comment
-                :inside-string
                 :after-backslash) . ,start)
          ;; Copy previous indentation.
          (goto-char start)
          (current-indentation))
+        (`(,(or :inside-string
+                :inside-docstring) . ,start)
+         ;; Copy previous indentation inside string
+         (let ((prev (progn (forward-line -1)
+                            (current-indentation)))
+               (base (progn (goto-char start)
+                            (current-indentation))))
+           (if (/= prev base)
+               (sort (list 0 prev base) #'<)
+             base)))
         (`(,(or :inside-paren-at-closing-paren
                 :inside-paren-at-closing-nested-paren) . ,start)
          (goto-char (+ 1 start))
@@ -1082,12 +1092,6 @@ python-indent--calculate-indentation
              (current-indentation)
            ;; Align with opening paren.
            (current-column)))
-        (`(:inside-docstring . ,start)
-         (let* ((line-indentation (current-indentation))
-                (base-indent (progn
-                               (goto-char start)
-                               (current-indentation))))
-           (max line-indentation base-indent)))
         (`(,(or :after-block-start
                 :after-backslash-first-line
                 :after-backslash-assignment-continuation
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-10-13  3:56 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-13  4:29 bug#37726: [PATCH] Indent python multiline strings to start and previous levels Carlos Pita
2019-10-13  5:04 ` bug#37726: Carlos Pita
2019-10-13 18:35   ` bug#37726: Carlos Pita
2019-10-13 19:06     ` bug#37726: Carlos Pita
2019-10-19  8:32       ` bug#37726: Carlos Pita
2019-10-23  0:25         ` bug#37726: [PATCH] Indent python multiline strings to start and previous levels Noam Postavsky
2020-08-09 18:46         ` bug#37726: Lars Ingebrigtsen
2020-08-09 21:44           ` bug#37726: Glenn Morris
2020-08-09 21:50             ` bug#37726: Lars Ingebrigtsen
2020-08-09 21:54         ` bug#37726: Lars Ingebrigtsen
2020-10-13  3:56           ` bug#37726: Lars Ingebrigtsen
2019-10-23  0:34       ` bug#37726: [PATCH] Indent python multiline strings to start and previous levels Noam Postavsky

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).