From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Gustaf Waldemarson Newsgroups: gmane.emacs.bugs Subject: bug#62696: python.el: Extra indentation for conditionals Date: Thu, 6 Apr 2023 14:47:42 +0200 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000037bf4705f8aa51bf" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="19570"; mail-complaints-to="usenet@ciao.gmane.io" To: 62696@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu Apr 06 14:49:30 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pkP3R-0004o0-Hj for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 06 Apr 2023 14:49:29 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pkP38-0007hM-9X; Thu, 06 Apr 2023 08:49:10 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pkP31-0007g2-0I for bug-gnu-emacs@gnu.org; Thu, 06 Apr 2023 08:49:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pkP30-0001ZB-NL for bug-gnu-emacs@gnu.org; Thu, 06 Apr 2023 08:49:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pkP30-0000Tz-4X for bug-gnu-emacs@gnu.org; Thu, 06 Apr 2023 08:49:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Gustaf Waldemarson Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 06 Apr 2023 12:49:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 62696 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.16807852861627 (code B ref -1); Thu, 06 Apr 2023 12:49:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 6 Apr 2023 12:48:06 +0000 Original-Received: from localhost ([127.0.0.1]:53633 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pkP24-0000Py-S5 for submit@debbugs.gnu.org; Thu, 06 Apr 2023 08:48:06 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:52142) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pkP20-0000PA-KD for submit@debbugs.gnu.org; Thu, 06 Apr 2023 08:48:03 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pkP20-0007am-5p for bug-gnu-emacs@gnu.org; Thu, 06 Apr 2023 08:48:00 -0400 Original-Received: from mail-yw1-x1136.google.com ([2607:f8b0:4864:20::1136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pkP1w-0001SV-47 for bug-gnu-emacs@gnu.org; Thu, 06 Apr 2023 08:47:59 -0400 Original-Received: by mail-yw1-x1136.google.com with SMTP id 00721157ae682-536af432ee5so737966007b3.0 for ; Thu, 06 Apr 2023 05:47:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1680785274; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=FxYBEvr/eKh7EobNuI7L214jsNzw75gRpRhRCak5zmg=; b=T9LebPHGaEJCkU6oW9dOuVusd5GB8oI04J8d8SjGIahg2Y1+SVvr6lZJTFDk4B7H3r OlX2kXSJWreuUXE5OsPyBrIzR4q6hgF27H5CjTjK0yB8tnnOjOu4teaP2YWi9wgkMH/G LfJCEWJ0+CjiR5Qjntb/5hqF6+gNbrf2aCTiPzjF12TyTibKyfWdgcsLy+95jJ7tC3q1 y59eLU3puYSJdWMHwG0Y5D1de5phoEzWZ9dCsQTKzK/lpunZXdSLRrOGvmUWFYLdlhH+ djMW/k8Qm1wmT2DXQJkzIRoI5ASrUUrWKmPF96LiHIrMZo9v6TXklWEw8fQgsMAezVGY qkZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680785274; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=FxYBEvr/eKh7EobNuI7L214jsNzw75gRpRhRCak5zmg=; b=jC/cR24PSqB/PBLPbItDboCzB0vERvgJpOP8v2ClcMdr2mTrvqUYNCSRArfOk8cK6Z bG/sryzUbAghtkXcmwh/0TKjDp/O8mAhuzGWHPYvrV3gwzPTlkQpnyh9wG4w5qpkDO9/ b9a/RPWXbhitGLxZM3NKFtqhdeOjHsxrRtCFJlFTQTz2SYfMI8hYoMOXxgHrLpo5W+zS t373D4hSu0FLSjwM7Opff5wUFzuETumY6mEFQcl1XwBSSms54Wzyf8o7p5IITSO2iBok WLebtI5zdzY289AjnG6c6LaodeuL0TtNrywNEr9YBfeKbbgi+N2pEAGtksGglXKZDrOd oWbA== X-Gm-Message-State: AAQBX9f/AZdkwNqRZjB7PC/7clx2u4wKMj8mCD6ZWr/qGhae2XzLR3jr SOLNyO5/aHdQofqqvG3dYaxsP6N5YJWthc+j7yxrxE0EPHI= X-Google-Smtp-Source: AKy350ZLSCJ4n5uotPmX9VUbu2G/r1q4E8Bl6eCJ+SzpOuEYK/DVtFQIJchSxCpW0PJbmK3S3f0WdGjZG7Q9v8XdSjM= X-Received: by 2002:a81:ca44:0:b0:540:e744:13ae with SMTP id y4-20020a81ca44000000b00540e74413aemr5631850ywk.3.1680785274270; Thu, 06 Apr 2023 05:47:54 -0700 (PDT) Received-SPF: pass client-ip=2607:f8b0:4864:20::1136; envelope-from=gustaf.waldemarson@gmail.com; helo=mail-yw1-x1136.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:259322 Archived-At: --00000000000037bf4705f8aa51bf Content-Type: multipart/alternative; boundary="00000000000037bf4305f8aa51bd" --00000000000037bf4305f8aa51bd Content-Type: text/plain; charset="UTF-8" Hello, The follow can be considered either a feature request or a bug and was originally asked as question on the Emacs StackOverflow page: < https://emacs.stackexchange.com/questions/76257/python-mode-multi-line-conditional-indentation > But I'll reproduce it in full here anyways: Given the following somewhat silly Python code with a multi-line condition: if ("VALUE" in my_uncessarily_long_dictionary and some_other_long_condition_case): do_something() else: pass This is written as Emacs typically indents each line, which I'm normally fine with. However, quite a few linters prefer the condition to be indented visually different from the next (non-conditional) line, e.g., something like this: if ("VALUE" in my_uncessarily_long_dictionary and some_other_long_condition_case): do_something(): else: pass As was helpfully provided by Tobias in the answer to this question on StackOverflow, this was solved on Emacs-28.1. I went ahead and refactored and tested it on Emacs-master and it appears to be working fine there as well. The code for this is attached to this email. One noticeable caveat is that **any** parenthesis can now be additionally indented, e.g., the follow is now also possible: this_is_a_tuple = (long_variable_name_here, also_a_long_variable_name) Although, given that this can be cycled at will by the user, I'm not sure if it is a bad additional feature or not. Ideally, I suppose that `python-indent-context` could be modified to add a `:inside-cond-paren` symbol that signals that the parenthesis is for a conditional expression and thus the extra indentation should be applied, and not in any other case. That does seem a bit harder for me to fix at a cursory glance however, so maybe this fix is enough? Best regards, Gustaf In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.33, cairo version 1.16.0) of 2023-03-26 built on ShadowX Repository revision: 248aabd9514c9eb21f4aa2e9062f8ce927d9fe54 Repository branch: master System Description: Ubuntu 22.04.2 LTS Configured using: 'configure --prefix=/home/xaldew/.local '--program-transform-name=s/^ctags$/ctags.emacs/' --without-makeinfo --with-xpm=ifavailable --with-jpeg=ifavailable --with-gif=ifavailable --with-tiff=ifavailable' Configured features: CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG LCMS2 LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB Important settings: value of $LANG: sv_SE.UTF-8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Magit Minor modes in effect: pyvenv-mode: t dap-tooltip-mode: t dap-ui-many-windows-mode: t dap-ui-controls-mode: t dap-ui-mode: t gdb-many-windows: t treemacs-filewatch-mode: t treemacs-follow-mode: t treemacs-git-mode: t treemacs-fringe-indicator-mode: t dap-auto-configure-mode: t dap-mode: t global-git-commit-mode: t magit-auto-revert-mode: t shell-dirtrack-mode: t beacon-mode: t server-mode: t hes-mode: t projectile-mode: t global-display-fill-column-indicator-mode: t global-display-line-numbers-mode: t global-so-long-mode: t yas-global-mode: t yas-minor-mode: t global-company-mode: t company-mode: t global-undo-tree-mode: t undo-tree-mode: t global-anzu-mode: t anzu-mode: t global-atomic-chrome-edit-mode: t windmove-mode: t which-key-mode: t anyclip-mode: t override-global-mode: t electric-pair-mode: t save-place-mode: t global-subword-mode: t subword-mode: t winner-mode: t global-auto-revert-mode: t xterm-mouse-mode: t savehist-mode: t ido-everywhere: t tooltip-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t buffer-read-only: t column-number-mode: t line-number-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: /home/xaldew/.config/emacs/elpa/transient-20230315.1520/transient hides /home/xaldew/.local/share/emacs/30.0.50/lisp/transient Features: (shadow sort bbdb-message mail-extr warnings emacsbug cdlatex reftex reftex-loaddefs reftex-vars org-element org-persist org-id org-refile avl-tree oc-basic ol-eww eww xdg url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime dig gnus-sum shr pixel-fill kinsoku url-file svg gnus-group gnus-undo gnus-start gnus-dbus dbus gnus-cloud nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win gnus nnheader range ol-docview doc-view jka-compr ol-bibtex bibtex ol-bbdb ol-w3m org-tempo tempo cus-start ob-latex ob-plantuml ob-org ob-shell ob-gnuplot ob-C ob-python ob-ditaa ob-dot org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src ob-comint org-pcomplete org-list org-footnote org-faces org-entities ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold org-fold-core org-keys oc org-loaddefs cal-menu calendar cal-loaddefs org-version org-compat org-macs shortdoc help-fns radix-tree magit-annex magit-patch magit-subtree magit-gitignore magit-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init ediff-util image-mode exif guess-language pyvenv eshell esh-cmd esh-ext esh-opt esh-proc esh-io esh-arg esh-module esh-groups esh-util highlight-indentation anaconda-mode pythonic tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat parse-time iso8601 ls-lisp python-mode/.yas-setup.el dap-python python treesit c++-genostream cmake-mode rst ace-window all-the-icons all-the-icons-faces data-material data-weathericons data-octicons data-fileicons data-faicons data-alltheicons vc-hg vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs log-view vc bug-reference misearch multi-isearch lsp-diagnostics lsp-headerline lsp-icons lsp-modeline dap-mouse dap-ui gdb-mi bui bui-list bui-info bui-entry bui-core bui-history bui-button bui-utils lsp-lens vc-git vc-dispatcher modern-cpp-font-lock .yas-setup.el cc-mode/.yas-setup.el view lsp-zig lsp-tilt lsp-steep lsp-svelte lsp-sqls lsp-ruby-syntax-tree lsp-ruby-lsp lsp-yaml lsp-xml lsp-vimscript lsp-vhdl lsp-volar lsp-vetur lsp-html lsp-verilog lsp-vala lsp-v lsp-typeprof lsp-ttcn3 lsp-toml lsp-terraform lsp-tex lsp-sorbet lsp-solargraph lsp-rust lsp-rf lsp-ruff-lsp lsp-remark lsp-racket lsp-r lsp-purescript lsp-pylsp lsp-pyls lsp-pwsh lsp-php lsp-pls lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-magik lsp-nix lsp-nim lsp-nginx lsp-mint lsp-marksman lsp-markdown lsp-lua lsp-ltex lsp-kotlin lsp-json lsp-javascript lsp-idris lsp-haxe lsp-groovy lsp-hack lsp-graphql lsp-gleam lsp-go lsp-completion lsp-gdscript lsp-fsharp lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elixir lsp-elm lsp-dockerfile lsp-dhall lsp-d lsp-css lsp-csharp gnutls lsp-crystal lsp-cmake lsp-clojure lsp-treemacs lsp-treemacs-generic lsp-treemacs-themes treemacs-treelib treemacs treemacs-header-line treemacs-compatibility treemacs-mode treemacs-interface treemacs-persistence treemacs-filewatch-mode treemacs-follow-mode treemacs-rendering treemacs-annotations treemacs-async treemacs-workspaces treemacs-dom treemacs-visuals treemacs-fringe-indicator treemacs-scope pulse treemacs-faces treemacs-icons treemacs-themes treemacs-core-utils pfuture hl-line treemacs-logging treemacs-customization treemacs-macros lsp-semantic-tokens lsp-clangd lsp-beancount lsp-bash lsp-astro lsp-ansible lsp-angular lsp-ada lsp-actionscript dap-gdb-lldb dap-utils dom xml dap-mode dap-tasks dap-launch lsp-docker yaml posframe dap-overlays magit-extras magit-submodule magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit magit-repos magit-apply magit-wip magit-log which-func magit-diff smerge-mode diff-mode git-commit log-edit message sendmail yank-media rfc822 mml mml-sec epa derived gnus-util time-date mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log magit-core magit-autorevert magit-margin magit-transient magit-process with-editor shell pcomplete magit-mode transient magit-git magit-base magit-section format-spec crm compat dired-aux dired dired-loaddefs term/tmux term/xterm xterm pinentry beacon server form-feed paredit nameless flyspell ispell whitespace rainbow-delimiters highlight-escape-sequences projectile lisp-mnt grep ibuf-ext ibuffer ibuffer-loaddefs lsp-ui lsp-ui-flycheck lsp-ui-doc goto-addr lsp-ui-imenu lsp-ui-peek lsp-ui-sideline flycheck lsp-mode tree-widget spinner network-stream puny nsm markdown-mode noutline outline inline imenu f f-shortdoc ewoc epg rfc6068 epg-config compile text-property-search lsp-ui-util face-remap find-func lsp-protocol s ht dash display-fill-column-indicator display-line-numbers so-long py-snippets yasnippet-radical-snippets yasnippet-snippets yasnippet company-oddmuse company-keywords company-etags etags fileloop generator xref project company-gtags company-dabbrev-code company-dabbrev company-files company-clang company-capf company-cmake company-semantic company-template company-bbdb company undo-tree diff queue anzu thingatpt atomic-chrome websocket bindat let-alist color-theme-approximate advice color delim-col hydra-examples windmove rect hydra lv bbdb bbdb-site timezone cus-edit pp cus-load icons wid-edit ace-link avy which-key anyclip-mode cl-extra help-mode edmacro kmacro diminish use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core finder-inf local-autoloads cwarn cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs elec-pair saveplace cap-words superword subword winner autorevert filenotify xt-mouse tango-dark-theme savehist ido gud comint ansi-osc ansi-color ring keybinds terminals ivy-autoloads spacemacs-theme-autoloads ace-link-autoloads kotlin-mode-autoloads company-auctex-autoloads gl-conf-mode-autoloads css-eldoc-autoloads beacon-autoloads lsp-ltex-autoloads paredit-autoloads glsl-mode-autoloads highlight-escape-sequences-autoloads powershell-autoloads gnuplot-mode-autoloads cuda-mode-autoloads ein-autoloads request-autoloads ssh-config-mode-autoloads git-modes-autoloads mmm-mode-autoloads ebdb-autoloads rmsbolt-autoloads debbugs-autoloads dart-mode-autoloads sublime-themes-autoloads coffee-mode-autoloads graphviz-dot-mode-autoloads magit-annex-autoloads opencl-mode-autoloads json-mode-autoloads rx company-anaconda-autoloads pinentry-autoloads rainbow-mode-autoloads htmlize-autoloads projectile-autoloads flycheck-rust-autoloads bbdb-vcard-autoloads jira-markup-mode-autoloads browse-kill-ring-autoloads helm-dash-autoloads sx-autoloads jenkins-autoloads smart-jump-autoloads bbdb-autoloads which-key-autoloads anzu-autoloads x86-lookup-autoloads cmake-mode-autoloads flycheck-kotlin-autoloads undo-tree-autoloads rust-mode-autoloads plantuml-mode-autoloads magit-gerrit-autoloads lua-mode-autoloads yaml-mode-autoloads evil-autoloads deferred-autoloads iedit-autoloads unfill-autoloads srefactor-autoloads abc-mode-autoloads autoinsert solarized-theme-autoloads alert-autoloads gntp-autoloads emms-autoloads cider-autoloads sesman-autoloads queue-autoloads parseedn-autoloads parseclj-autoloads clojure-mode-autoloads flycheck-package-autoloads package-lint-autoloads atomic-chrome-autoloads websocket-autoloads powerthesaurus-autoloads jeison-autoloads dash-docs-autoloads rainbow-delimiters-autoloads form-feed-autoloads yasnippet-radical-snippets-autoloads pyimport-autoloads shut-up-autoloads json-snatcher-autoloads helm-lsp-autoloads helm-autoloads clang-format-autoloads poly-markdown-autoloads polymode-autoloads toml-mode-autoloads diminish-autoloads cdlatex-autoloads eclim-autoloads anaphora-autoloads py-snippets-autoloads yasnippet-snippets-autoloads zenburn-theme-autoloads dap-mode-autoloads lsp-docker-autoloads lsp-treemacs-autoloads treemacs-autoloads cfrs-autoloads posframe-autoloads pfuture-autoloads ace-window-autoloads avy-autoloads bui-autoloads magit-svn-autoloads magit-autoloads pcase git-commit-autoloads with-editor-autoloads transient-autoloads go-mode-autoloads goto-chg-autoloads log4e-autoloads color-theme-approximate-autoloads cargo-autoloads calfw-autoloads company-quickhelp-autoloads helm-core-autoloads async-autoloads ecb-autoloads modern-cpp-font-lock-autoloads dts-mode-autoloads nov-autoloads esxml-autoloads kv-autoloads company-math-autoloads math-symbol-lists-autoloads elpy-autoloads pyvenv-autoloads highlight-indentation-autoloads ob-ipython-autoloads dash-functional-autoloads hydra-autoloads auto-complete-auctex-autoloads auto-complete-autoloads yasnippet-autoloads auctex-latexmk-autoloads auctex-autoloads tex-site yaml-autoloads ahk-mode-autoloads magit-section-autoloads compat-autoloads cask-mode-autoloads company-c-headers-autoloads company-autoloads csv-mode-autoloads gnuplot-autoloads anaconda-mode-autoloads pythonic-autoloads pos-tip-autoloads zerodark-theme-autoloads all-the-icons-autoloads image+-autoloads expand-region-autoloads gnus-desktop-notify-autoloads flycheck-autoloads pkg-info-autoloads epl-autoloads ggtags-autoloads web-mode-autoloads lsp-ui-autoloads lsp-mode-autoloads lv-autoloads markdown-mode-autoloads spinner-autoloads ht-autoloads f-autoloads uimage-autoloads guess-language-autoloads dumb-jump-autoloads popup-autoloads dash-autoloads s-autoloads google-c-style-autoloads nameless-autoloads info slime-autoloads macrostep-autoloads package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit xinput2 x multi-tty make-network-process emacs) Memory information: ((conses 16 817895 212638) (symbols 48 62999 0) (strings 32 249530 19612) (string-bytes 1 8101995) (vectors 16 160320) (vector-slots 8 3855694 143961) (floats 8 1381 10031) (intervals 56 21064 2868) (buffers 976 49)) --00000000000037bf4305f8aa51bd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello,

The follow can be considered either a f= eature request or a bug and was
originally asked as question on the Emac= s StackOverflow page:

<https://em= acs.stackexchange.com/questions/76257/python-mode-multi-line-conditional-in= dentation>

But I'll reproduce it in full here anyways:
Given the following somewhat silly Python code with a multi-line condi= tion:

=C2=A0 =C2=A0 if ("VALUE" in my_uncessarily_long_dic= tionary and
=C2=A0 =C2=A0 =C2=A0 =C2=A0 some_other_long_condition_case):=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 do_something()
=C2=A0 =C2=A0 else:
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 pass

This is written as Emacs typically = indents each line, which I'm normally fine
with. However, quite a fe= w linters prefer the condition to be indented visually
different from th= e next (non-conditional) line, e.g., something like this:

=C2=A0 =C2= =A0 if ("VALUE" in my_uncessarily_long_dictionary and
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 some_other_long_condition_case):
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 do_something():
=C2=A0 =C2=A0 else:
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 pass

As was helpfully provided by Tobias in the= answer to this question on
StackOverflow, this was solved on Emacs-28.1= . I went ahead and refactored and
tested it on Emacs-master and it appea= rs to be working fine there as well. The
code for this is attached to th= is email.

One noticeable caveat is that **any** parenthesis can now = be additionally
indented, e.g., the follow is now also possible:

= =C2=A0 =C2=A0 this_is_a_tuple =3D (long_variable_name_here,
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 a= lso_a_long_variable_name)

Although, given that this can be cycled at= will by the user, I'm not sure if it
is a bad additional feature or= not.

Ideally, I suppose that `python-indent-context` could be modif= ied to add a
`:inside-cond-paren` symbol that signals that the parenthes= is is for a
conditional expression and thus the extra indentation should= be applied, and not
in any other case. That does seem a bit harder for = me to fix at a cursory glance
however, so maybe this fix is enough?
<= br>Best regards,
Gustaf


In G= NU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
=C2=A03.2= 4.33, cairo version 1.16.0) of 2023-03-26 built on ShadowX
Repository re= vision: 248aabd9514c9eb21f4aa2e9062f8ce927d9fe54
Repository branch: mast= er
System Description: Ubuntu 22.04.2 LTS

Configured using:
= =C2=A0'configure --prefix=3D/home/xaldew/.local
=C2=A0'--program= -transform-name=3Ds/^ctags$/ctags.emacs/' --without-makeinfo
=C2=A0-= -with-xpm=3Difavailable --with-jpeg=3Difavailable --with-gif=3Difavailable<= br>=C2=A0--with-tiff=3Difavailable'

Configured features:
CAIR= O DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG LCMS2
LIBSEL= INUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND
THREA= DS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB

= Important settings:
=C2=A0 value of $LANG: sv_SE.UTF-8
=C2=A0 value o= f $XMODIFIERS: @im=3Dibus
=C2=A0 locale-coding-system: utf-8-unix
Major mode: Magit

Minor modes in effect:
=C2=A0 pyvenv-mode: t=C2=A0 dap-tooltip-mode: t
=C2=A0 dap-ui-many-windows-mode: t
=C2= =A0 dap-ui-controls-mode: t
=C2=A0 dap-ui-mode: t
=C2=A0 gdb-many-win= dows: t
=C2=A0 treemacs-filewatch-mode: t
=C2=A0 treemacs-follow-mode= : t
=C2=A0 treemacs-git-mode: t
=C2=A0 treemacs-fringe-indicator-mode= : t
=C2=A0 dap-auto-configure-mode: t
=C2=A0 dap-mode: t
=C2=A0 gl= obal-git-commit-mode: t
=C2=A0 magit-auto-revert-mode: t
=C2=A0 shell= -dirtrack-mode: t
=C2=A0 beacon-mode: t
=C2=A0 server-mode: t
=C2= =A0 hes-mode: t
=C2=A0 projectile-mode: t
=C2=A0 global-display-fill-= column-indicator-mode: t
=C2=A0 global-display-line-numbers-mode: t
= =C2=A0 global-so-long-mode: t
=C2=A0 yas-global-mode: t
=C2=A0 yas-mi= nor-mode: t
=C2=A0 global-company-mode: t
=C2=A0 company-mode: t
= =C2=A0 global-undo-tree-mode: t
=C2=A0 undo-tree-mode: t
=C2=A0 globa= l-anzu-mode: t
=C2=A0 anzu-mode: t
=C2=A0 global-atomic-chrome-edit-m= ode: t
=C2=A0 windmove-mode: t
=C2=A0 which-key-mode: t
=C2=A0 any= clip-mode: t
=C2=A0 override-global-mode: t
=C2=A0 electric-pair-mode= : t
=C2=A0 save-place-mode: t
=C2=A0 global-subword-mode: t
=C2=A0= subword-mode: t
=C2=A0 winner-mode: t
=C2=A0 global-auto-revert-mode= : t
=C2=A0 xterm-mouse-mode: t
=C2=A0 savehist-mode: t
=C2=A0 ido-= everywhere: t
=C2=A0 tooltip-mode: t
=C2=A0 global-eldoc-mode: t
= =C2=A0 show-paren-mode: t
=C2=A0 electric-indent-mode: t
=C2=A0 mouse= -wheel-mode: t
=C2=A0 tool-bar-mode: t
=C2=A0 file-name-shadow-mode: = t
=C2=A0 global-font-lock-mode: t
=C2=A0 font-lock-mode: t
=C2=A0 = blink-cursor-mode: t
=C2=A0 buffer-read-only: t
=C2=A0 column-number-= mode: t
=C2=A0 line-number-mode: t
=C2=A0 transient-mark-mode: t
= =C2=A0 auto-composition-mode: t
=C2=A0 auto-encryption-mode: t
=C2=A0= auto-compression-mode: t

Load-path shadows:
/home/xaldew/.config= /emacs/elpa/transient-20230315.1520/transient hides /home/xaldew/.local/sha= re/emacs/30.0.50/lisp/transient

Features:
(shadow sort bbdb-messa= ge mail-extr warnings emacsbug cdlatex reftex
reftex-loaddefs reftex-var= s org-element org-persist org-id org-refile
avl-tree oc-basic ol-eww eww= xdg url-queue mm-url ol-rmail ol-mhe ol-irc
ol-info ol-gnus nnselect gn= us-art mm-uu mml2015 mm-view mml-smime smime
dig gnus-sum shr pixel-fill= kinsoku url-file svg gnus-group gnus-undo
gnus-start gnus-dbus dbus gnu= s-cloud nnimap nnmail mail-source utf7 nnoo
gnus-spec gnus-int gnus-rang= e gnus-win gnus nnheader range ol-docview
doc-view jka-compr ol-bibtex b= ibtex ol-bbdb ol-w3m org-tempo tempo
cus-start ob-latex ob-plantuml ob-o= rg ob-shell ob-gnuplot ob-C ob-python
ob-ditaa ob-dot org ob ob-tangle o= b-ref ob-lob ob-table ob-exp org-macro
org-src ob-comint org-pcomplete o= rg-list org-footnote org-faces
org-entities ob-emacs-lisp ob-core ob-eva= l org-cycle org-table ol
org-fold org-fold-core org-keys oc org-loaddefs= cal-menu calendar
cal-loaddefs org-version org-compat org-macs shortdoc= help-fns
radix-tree magit-annex magit-patch magit-subtree magit-gitigno= re
magit-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-h= elp
ediff-init ediff-util image-mode exif guess-language pyvenv eshellesh-cmd esh-ext esh-opt esh-proc esh-io esh-arg esh-module esh-groups
= esh-util highlight-indentation anaconda-mode pythonic tramp
tramp-loadde= fs trampver tramp-integration files-x tramp-compat
parse-time iso8601 ls= -lisp python-mode/.yas-setup.el dap-python python
treesit c++-genostream= cmake-mode rst ace-window all-the-icons
all-the-icons-faces data-materi= al data-weathericons data-octicons
data-fileicons data-faicons data-allt= heicons vc-hg vc-bzr vc-src vc-sccs
vc-svn vc-cvs vc-rcs log-view vc bug= -reference misearch multi-isearch
lsp-diagnostics lsp-headerline lsp-ico= ns lsp-modeline dap-mouse dap-ui
gdb-mi bui bui-list bui-info bui-entry = bui-core bui-history bui-button
bui-utils lsp-lens vc-git vc-dispatcher = modern-cpp-font-lock
.yas-setup.el cc-mode/.yas-setup.el view lsp-zig ls= p-tilt lsp-steep
lsp-svelte lsp-sqls lsp-ruby-syntax-tree lsp-ruby-lsp l= sp-yaml lsp-xml
lsp-vimscript lsp-vhdl lsp-volar lsp-vetur lsp-html lsp-= verilog lsp-vala
lsp-v lsp-typeprof lsp-ttcn3 lsp-toml lsp-terraform lsp= -tex lsp-sorbet
lsp-solargraph lsp-rust lsp-rf lsp-ruff-lsp lsp-remark l= sp-racket lsp-r
lsp-purescript lsp-pylsp lsp-pyls lsp-pwsh lsp-php lsp-p= ls
lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-magik lsp-nixlsp-nim lsp-nginx lsp-mint lsp-marksman lsp-markdown lsp-lua lsp-ltex
= lsp-kotlin lsp-json lsp-javascript lsp-idris lsp-haxe lsp-groovy
lsp-hac= k lsp-graphql lsp-gleam lsp-go lsp-completion lsp-gdscript
lsp-fsharp ls= p-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elixir
lsp-elm lsp-dockerf= ile lsp-dhall lsp-d lsp-css lsp-csharp gnutls
lsp-crystal lsp-cmake lsp-= clojure lsp-treemacs lsp-treemacs-generic
lsp-treemacs-themes treemacs-t= reelib treemacs treemacs-header-line
treemacs-compatibility treemacs-mod= e treemacs-interface
treemacs-persistence treemacs-filewatch-mode treema= cs-follow-mode
treemacs-rendering treemacs-annotations treemacs-asynctreemacs-workspaces treemacs-dom treemacs-visuals
treemacs-fringe-indic= ator treemacs-scope pulse treemacs-faces
treemacs-icons treemacs-themes = treemacs-core-utils pfuture hl-line
treemacs-logging treemacs-customizat= ion treemacs-macros
lsp-semantic-tokens lsp-clangd lsp-beancount lsp-bas= h lsp-astro
lsp-ansible lsp-angular lsp-ada lsp-actionscript dap-gdb-lld= b dap-utils
dom xml dap-mode dap-tasks dap-launch lsp-docker yaml posfra= me
dap-overlays magit-extras magit-submodule magit-blame magit-stash
= magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone
= magit-remote magit-commit magit-sequence magit-notes magit-worktree
magi= t-tag magit-merge magit-branch magit-reset magit-files magit-refs
magit-= status magit magit-repos magit-apply magit-wip magit-log
which-func magi= t-diff smerge-mode diff-mode git-commit log-edit message
sendmail yank-m= edia rfc822 mml mml-sec epa derived gnus-util time-date
mm-decode mm-bod= ies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util
ietf-drums mail= -prsvr mailabbrev mail-utils gmm-utils mailheader
pcvs-util add-log magi= t-core magit-autorevert magit-margin
magit-transient magit-process with-= editor shell pcomplete magit-mode
transient magit-git magit-base magit-s= ection format-spec crm compat
dired-aux dired dired-loaddefs term/tmux t= erm/xterm xterm pinentry
beacon server form-feed paredit nameless flyspe= ll ispell whitespace
rainbow-delimiters highlight-escape-sequences proje= ctile lisp-mnt grep
ibuf-ext ibuffer ibuffer-loaddefs lsp-ui lsp-ui-flyc= heck lsp-ui-doc
goto-addr lsp-ui-imenu lsp-ui-peek lsp-ui-sideline flych= eck lsp-mode
tree-widget spinner network-stream puny nsm markdown-mode n= outline
outline inline imenu f f-shortdoc ewoc epg rfc6068 epg-config co= mpile
text-property-search lsp-ui-util face-remap find-func lsp-protocol= s ht
dash display-fill-column-indicator display-line-numbers so-longpy-snippets yasnippet-radical-snippets yasnippet-snippets yasnippet
com= pany-oddmuse company-keywords company-etags etags fileloop generator
xre= f project company-gtags company-dabbrev-code company-dabbrev
company-fil= es company-clang company-capf company-cmake company-semantic
company-tem= plate company-bbdb company undo-tree diff queue anzu
thingatpt atomic-ch= rome websocket bindat let-alist
color-theme-approximate advice color del= im-col hydra-examples windmove
rect hydra lv bbdb bbdb-site timezone cus= -edit pp cus-load icons
wid-edit ace-link avy which-key anyclip-mode cl-= extra help-mode edmacro
kmacro diminish use-package use-package-ensure u= se-package-delight
use-package-diminish use-package-bind-key bind-key ea= sy-mmode
use-package-core finder-inf local-autoloads cwarn cc-mode cc-fo= nts
cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-de= fs
elec-pair saveplace cap-words superword subword winner autorevert
= filenotify xt-mouse tango-dark-theme savehist ido gud comint ansi-osc
an= si-color ring keybinds terminals ivy-autoloads
spacemacs-theme-autoloads= ace-link-autoloads kotlin-mode-autoloads
company-auctex-autoloads gl-co= nf-mode-autoloads css-eldoc-autoloads
beacon-autoloads lsp-ltex-autoload= s paredit-autoloads
glsl-mode-autoloads highlight-escape-sequences-autol= oads
powershell-autoloads gnuplot-mode-autoloads cuda-mode-autoloads
= ein-autoloads request-autoloads ssh-config-mode-autoloads
git-modes-auto= loads mmm-mode-autoloads ebdb-autoloads rmsbolt-autoloads
debbugs-autolo= ads dart-mode-autoloads sublime-themes-autoloads
coffee-mode-autoloads g= raphviz-dot-mode-autoloads magit-annex-autoloads
opencl-mode-autoloads j= son-mode-autoloads rx company-anaconda-autoloads
pinentry-autoloads rain= bow-mode-autoloads htmlize-autoloads
projectile-autoloads flycheck-rust-= autoloads bbdb-vcard-autoloads
jira-markup-mode-autoloads browse-kill-ri= ng-autoloads
helm-dash-autoloads sx-autoloads jenkins-autoloads smart-ju= mp-autoloads
bbdb-autoloads which-key-autoloads anzu-autoloads x86-looku= p-autoloads
cmake-mode-autoloads flycheck-kotlin-autoloads undo-tree-aut= oloads
rust-mode-autoloads plantuml-mode-autoloads magit-gerrit-autoload= s
lua-mode-autoloads yaml-mode-autoloads evil-autoloads deferred-autoloa= ds
iedit-autoloads unfill-autoloads srefactor-autoloads abc-mode-autoloa= ds
autoinsert solarized-theme-autoloads alert-autoloads gntp-autoloadsemms-autoloads cider-autoloads sesman-autoloads queue-autoloads
parsee= dn-autoloads parseclj-autoloads clojure-mode-autoloads
flycheck-package-= autoloads package-lint-autoloads
atomic-chrome-autoloads websocket-autol= oads powerthesaurus-autoloads
jeison-autoloads dash-docs-autoloads rainb= ow-delimiters-autoloads
form-feed-autoloads yasnippet-radical-snippets-a= utoloads
pyimport-autoloads shut-up-autoloads json-snatcher-autoloadshelm-lsp-autoloads helm-autoloads clang-format-autoloads
poly-markdown-= autoloads polymode-autoloads toml-mode-autoloads
diminish-autoloads cdla= tex-autoloads eclim-autoloads anaphora-autoloads
py-snippets-autoloads y= asnippet-snippets-autoloads
zenburn-theme-autoloads dap-mode-autoloads l= sp-docker-autoloads
lsp-treemacs-autoloads treemacs-autoloads cfrs-autol= oads
posframe-autoloads pfuture-autoloads ace-window-autoloads avy-autol= oads
bui-autoloads magit-svn-autoloads magit-autoloads pcase
git-comm= it-autoloads with-editor-autoloads transient-autoloads
go-mode-autoloads= goto-chg-autoloads log4e-autoloads
color-theme-approximate-autoloads ca= rgo-autoloads calfw-autoloads
company-quickhelp-autoloads helm-core-auto= loads async-autoloads
ecb-autoloads modern-cpp-font-lock-autoloads dts-m= ode-autoloads
nov-autoloads esxml-autoloads kv-autoloads company-math-au= toloads
math-symbol-lists-autoloads elpy-autoloads pyvenv-autoloads
h= ighlight-indentation-autoloads ob-ipython-autoloads
dash-functional-auto= loads hydra-autoloads auto-complete-auctex-autoloads
auto-complete-autol= oads yasnippet-autoloads auctex-latexmk-autoloads
auctex-autoloads tex-s= ite yaml-autoloads ahk-mode-autoloads
magit-section-autoloads compat-aut= oloads cask-mode-autoloads
company-c-headers-autoloads company-autoloads= csv-mode-autoloads
gnuplot-autoloads anaconda-mode-autoloads pythonic-a= utoloads
pos-tip-autoloads zerodark-theme-autoloads all-the-icons-autolo= ads
image+-autoloads expand-region-autoloads gnus-desktop-notify-autoloa= ds
flycheck-autoloads pkg-info-autoloads epl-autoloads ggtags-autoloads<= br>web-mode-autoloads lsp-ui-autoloads lsp-mode-autoloads lv-autoloads
m= arkdown-mode-autoloads spinner-autoloads ht-autoloads f-autoloads
uimage= -autoloads guess-language-autoloads dumb-jump-autoloads
popup-autoloads = dash-autoloads s-autoloads google-c-style-autoloads
nameless-autoloads i= nfo slime-autoloads macrostep-autoloads package
browse-url url url-proxy= url-privacy url-expand url-methods url-history
url-cookie generate-lisp= -file url-domsuf url-util mailcap url-handlers
url-parse auth-source cl-= seq eieio eieio-core cl-macs password-cache
json subr-x map byte-opt gv = bytecomp byte-compile url-vars cl-loaddefs
cl-lib rmc iso-transl tooltip= cconv eldoc paren electric uniquify
ediff-hook vc-hooks lisp-float-type= elisp-mode mwheel term/x-win x-win
term/common-win x-dnd tool-bar dnd f= ontset image regexp-opt fringe
tabulated-list replace newcomment text-mo= de lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearc= h easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-= core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indo= nesian philippine
cham georgian utf-8-lang misc-lang vietnamese tibetan = thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian= slovak czech
european ethiopic indian cyrillic chinese composite emoji-= zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev ob= array oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-fac= e macroexp
files window text-properties overlay sha1 md5 base64 format e= nv
code-pages mule custom widget keymap hashtable-print-readable backquo= te
threads dbusbind inotify lcms2 dynamic-setting system-font-settingfont-render-setting cairo move-toolbar gtk x-toolkit xinput2 x multi-ttymake-network-process emacs)

Memory information:
((conses 16 817= 895 212638)
=C2=A0(symbols 48 62999 0)
=C2=A0(strings 32 249530 19612= )
=C2=A0(string-bytes 1 8101995)
=C2=A0(vectors 16 160320)
=C2=A0(= vector-slots 8 3855694 143961)
=C2=A0(floats 8 1381 10031)
=C2=A0(int= ervals 56 21064 2868)
=C2=A0(buffers 976 49))
--00000000000037bf4305f8aa51bd-- --00000000000037bf4705f8aa51bf Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Allow-indent-in-long-python-mode-conditionals.patch" Content-Disposition: attachment; filename="0001-Allow-indent-in-long-python-mode-conditionals.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lg53wgm70 RnJvbSA4ZGMyZTcyNzVkNjhkMjc0OTgyMmI1OWU0NzQ4Nzk0YWIyNzYyMWM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YWYgV2FsZGVtYXJzb24gPGd1c3RhZi53YWxkZW1hcnNv bkBnbWFpbC5jb20+CkRhdGU6IFR1ZSwgNCBBcHIgMjAyMyAxNDowNDo0NCArMDIwMApTdWJqZWN0 OiBbUEFUQ0hdIEFsbG93IGluZGVudCBpbiBsb25nIHB5dGhvbi1tb2RlIGNvbmRpdGlvbmFscy4K CiogbGlzcC9wcm9nbW9kZXMvcHl0aG9uLmVsOiBBbGxvdyBhZGRpdGlvbmFsIGluZGVudGF0aW9u IGluCnBhcmVudGhlc2VzIHRvIG1vcmUgZWFzaWx5IHNhdGlzZnkgdmFyaW91cyBQeXRob24gbGlu dGVycy4KLS0tCiBsaXNwL3Byb2dtb2Rlcy9weXRob24uZWwgfCAxMCArKysrKysrKystCiAxIGZp bGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEv bGlzcC9wcm9nbW9kZXMvcHl0aG9uLmVsIGIvbGlzcC9wcm9nbW9kZXMvcHl0aG9uLmVsCmluZGV4 IGJiYWJjZTgwYjRkLi5kN2M2YTkyMThjNyAxMDA2NDQKLS0tIGEvbGlzcC9wcm9nbW9kZXMvcHl0 aG9uLmVsCisrKyBiL2xpc3AvcHJvZ21vZGVzL3B5dGhvbi5lbApAQCAtMTI0OCw2ICsxMjQ4LDEx IEBAIHB5dGhvbi1pbmRlbnQtb2Zmc2V0CiAgIDp0eXBlICdpbnRlZ2VyCiAgIDpzYWZlICdpbnRl Z2VycCkKIAorKGRlZmN1c3RvbSBweXRob24taW5kZW50LWFkZC1hZnRlci1wYXJlbiBweXRob24t aW5kZW50LW9mZnNldAorICAiQWRkaXRpb25hbCBpbmRlbnQgYWZ0ZXIgcGFyZW4uIgorICA6dHlw ZSAnbnVtYmVyCisgIDpncm91cCAncHl0aG9uKQorCiAoZGVmY3VzdG9tIHB5dGhvbi1pbmRlbnQt Z3Vlc3MtaW5kZW50LW9mZnNldCB0CiAgICJOb24tbmlsIHRlbGxzIFB5dGhvbiBtb2RlIHRvIGd1 ZXNzIGBweXRob24taW5kZW50LW9mZnNldCcgdmFsdWUuIgogICA6dHlwZSAnYm9vbGVhbgpAQCAt MTU4MCw3ICsxNTg1LDEwIEBAIHB5dGhvbi1pbmRlbnQtLWNhbGN1bGF0ZS1pbmRlbnRhdGlvbgog ICAgICAgICAgICAgICAgOzsgQWRkIG9uZSBsZXZlbCB0byBhdm9pZCBzYW1lIGluZGVudCBhcyBu ZXh0IGxvZ2ljYWwgbGluZS4KICAgICAgICAgICAgICAgICgrIGNvbHVtbiBweXRob24taW5kZW50 LW9mZnNldCkKICAgICAgICAgICAgICBjb2x1bW4pKSkKLSAgICAgICAgKGAoLChvciA6aW5zaWRl LXBhcmVuCisgICAgICAgIChgKDppbnNpZGUtcGFyZW4gLiAsc3RhcnQpCisgICAgICAgICAoZ290 by1jaGFyIHN0YXJ0KQorICAgICAgICAgKCsgKGN1cnJlbnQtY29sdW1uKSBweXRob24taW5kZW50 LWFkZC1hZnRlci1wYXJlbikpCisgICAgICAgIChgKCwob3IgOmFmdGVyLWJhY2tzbGFzaC1ibG9j ay1jb250aW51YXRpb24KICAgICAgICAgICAgICAgICA6YWZ0ZXItYmFja3NsYXNoLWRvdHRlZC1j b250aW51YXRpb24pIC4gLHN0YXJ0KQogICAgICAgICAgOzsgVXNlIHRoZSBjb2x1bW4gZ2l2ZW4g YnkgdGhlIGNvbnRleHQuCiAgICAgICAgICAoZ290by1jaGFyIHN0YXJ0KQotLSAKMi4zNC4xCgo= --00000000000037bf4705f8aa51bf--