branch: elpa/markdown-mode commit 6724a2cb23853cb1aea62e2839be17e71bab2525 Author: plantarum <ty...@plantarum.ca> Commit: Shohei YOSHIDA <syo...@gmail.com>
Added optional support for inserting braces in GFM code block header --- CHANGES.md | 1 + README.md | 6 +++++ markdown-mode.el | 77 +++++++++++++++++++++++++++++++------------------------- 3 files changed, 50 insertions(+), 34 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 9a1d580..0953909 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -24,6 +24,7 @@ - Enable flyspell check at yaml metadata[GH-560][] - Clean up Makefile - Support to display local image with percent encoding file path + - Support including braces around the language specification in GFM code blocks * Bug fixes: - Fix remaining flyspell overlay in code block or comment issue [GH-311][] diff --git a/README.md b/README.md index bd4e891..216e180 100644 --- a/README.md +++ b/README.md @@ -991,6 +991,12 @@ by `markdown-mode` and `gfm-mode` as described below. region will be placed inside the code block. You will be prompted for the name of the language, but may press enter to continue without naming a language. + + In addition, in `gfm-mode`, GFM code blocks can be inserted via the + option `markdown-gfm-use-electric-backquote`. If the option + `markdown-code-block-braces` is set to `t`, code blocks inserted with + <kbd>C-c C-s C</kbd> or electric backquotes will include braces ("{}") + around the language attributes. * **Strikethrough:** Strikethrough text is supported in both `markdown-mode` and `gfm-mode`. It can be inserted (and toggled) diff --git a/markdown-mode.el b/markdown-mode.el index b27ad49..6c80f95 100644 --- a/markdown-mode.el +++ b/markdown-mode.el @@ -4301,6 +4301,11 @@ opening code fence and an info string." :safe #'natnump :package-version '(markdown-mode . "2.3")) +(defcustom markdown-code-block-braces nil + "When non-nil, automatically insert braces for GFM code blocks." + :group 'markdown + :type 'boolean) + (defun markdown-insert-gfm-code-block (&optional lang edit) "Insert GFM code block for language LANG. If LANG is nil, the language will be queried from user. If a @@ -4321,45 +4326,49 @@ code block in an indirect buffer after insertion." (quit ""))) current-prefix-arg)) (unless (string= lang "") (markdown-gfm-add-used-language lang)) - (when (> (length lang) 0) + (when (and (> (length lang) 0) + (not markdown-code-block-braces)) (setq lang (concat (make-string markdown-spaces-after-code-fence ?\s) lang))) - (if (use-region-p) - (let* ((b (region-beginning)) (e (region-end)) end - (indent (progn (goto-char b) (current-indentation)))) - (goto-char e) - ;; if we're on a blank line, don't newline, otherwise the ``` - ;; should go on its own line - (unless (looking-back "\n" nil) - (newline)) + (let ((gfm-open-brace (if markdown-code-block-braces "{" "")) + (gfm-close-brace (if markdown-code-block-braces "}" ""))) + (if (use-region-p) + (let* ((b (region-beginning)) (e (region-end)) end + (indent (progn (goto-char b) (current-indentation)))) + (goto-char e) + ;; if we're on a blank line, don't newline, otherwise the ``` + ;; should go on its own line + (unless (looking-back "\n" nil) + (newline)) + (indent-to indent) + (insert "```") + (markdown-ensure-blank-line-after) + (setq end (point)) + (goto-char b) + ;; if we're on a blank line, insert the quotes here, otherwise + ;; add a new line first + (unless (looking-at-p "\n") + (newline) + (forward-line -1)) + (markdown-ensure-blank-line-before) + (indent-to indent) + (insert "```" gfm-open-brace lang gfm-close-brace) + (markdown-syntax-propertize-fenced-block-constructs (point-at-bol) end)) + (let ((indent (current-indentation)) + start-bol) + (delete-horizontal-space :backward-only) + (markdown-ensure-blank-line-before) + (indent-to indent) + (setq start-bol (point-at-bol)) + (insert "```" gfm-open-brace lang gfm-close-brace "\n") + (indent-to indent) + (unless edit (insert ?\n)) (indent-to indent) (insert "```") (markdown-ensure-blank-line-after) - (setq end (point)) - (goto-char b) - ;; if we're on a blank line, insert the quotes here, otherwise - ;; add a new line first - (unless (looking-at-p "\n") - (newline) - (forward-line -1)) - (markdown-ensure-blank-line-before) - (indent-to indent) - (insert "```" lang) - (markdown-syntax-propertize-fenced-block-constructs (point-at-bol) end)) - (let ((indent (current-indentation)) start-bol) - (delete-horizontal-space :backward-only) - (markdown-ensure-blank-line-before) - (indent-to indent) - (setq start-bol (point-at-bol)) - (insert "```" lang "\n") - (indent-to indent) - (unless edit (insert ?\n)) - (indent-to indent) - (insert "```") - (markdown-ensure-blank-line-after) - (markdown-syntax-propertize-fenced-block-constructs start-bol (point))) - (end-of-line 0) - (when edit (markdown-edit-code-block)))) + (markdown-syntax-propertize-fenced-block-constructs start-bol (point))) + (end-of-line 0) + (when edit (markdown-edit-code-block))))) (defun markdown-code-block-lang (&optional pos-prop) "Return the language name for a GFM or tilde fenced code block.