Hi,
I found `ox-md` exporter drop src-block language information.
My patch fixes the behavior; to embed src-block language information
using markdown src block grammar.

1. Open some buffer
2. Tnsert below code
3. Turn on `org-mode`
4. `C-c C-e m M` (export as markdown in temp buffer)

## org source
```org
#+begin_src python
print(1 + 2)
#+end_src

#+begin_src emacs-lisp
(print "hello")
#+end_src

#+begin_src
something source code
#+end_src
```

## before
```markdown

# Table of Contents



    print(1 + 2)

    (print "hello")

    something source code

```

## after
```markdown

# Table of Contents



```python
print(1 + 2)
```

```emacs-lisp
(print "hello")
```

```
something source code
```

```
From 0ffa1f8f6dede26b7f1e8ce4afc1fbcd2f45755b Mon Sep 17 00:00:00 2001
From: conao3 <conao3@gmail.com>
Date: Thu, 27 Aug 2020 13:52:50 +0900
Subject: [PATCH] Add org-md-src-block for src-block formater

* lisp/ox-md.el (org-md-src-block): Add new formater for src block
* lisp/ox-md.el (org-export-define-derived-backend 'md): use it
---
 lisp/ox-md.el | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/lisp/ox-md.el b/lisp/ox-md.el
index 1d20c04f4..59db0c765 100644
--- a/lisp/ox-md.el
+++ b/lisp/ox-md.el
@@ -110,7 +110,7 @@ The %s will be replaced by the footnote reference itself."
 		     (quote-block . org-md-quote-block)
 		     (section . org-md-section)
 		     (special-block . org-md--convert-to-html)
-		     (src-block . org-md-example-block)
+		     (src-block . org-md-src-block)
 		     (table . org-md--convert-to-html)
 		     (template . org-md-template)
 		     (verbatim . org-md-verbatim))
@@ -331,6 +331,18 @@ channel."
    (org-remove-indentation
     (org-export-format-code-default example-block info))))
 
+(defun org-md-src-block (src-block _contents info)
+  "Transcode SRC-BLOCK element into Markdown format.
+CONTENTS is nil.  INFO is a plist used as a communication
+channel."
+  (let ((lang (pcase (plist-get info :parse-tree)
+                (`(org-data ,_ (section ,_ (src-block (:language ,l . ,_)))) l))))
+    (format
+     "```%s\n%s```"
+     (or lang "")
+     (org-remove-indentation
+      (org-export-format-code-default src-block info)))))
+
 (defun org-md-export-block (export-block contents info)
   "Transcode a EXPORT-BLOCK element from Org to Markdown.
 CONTENTS is nil.  INFO is a plist holding contextual information."
-- 
2.28.0

Reply via email to