]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0865: filetype: org files are not recognized v9.1.0865
authorLuca Saccarola <github.e41mv@aleeas.com>
Thu, 14 Nov 2024 21:44:14 +0000 (22:44 +0100)
committerChristian Brabandt <cb@256bit.org>
Thu, 14 Nov 2024 21:44:14 +0000 (22:44 +0100)
Problem:  filetype: org files are not recognized
Solution: detect '*.org' files as 'org' filetype,
          include filetype and syntax plugin
          (Luca Saccarola)

closes: #16054

Signed-off-by: Luca Saccarola <github.e41mv@aleeas.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/doc/filetype.txt
runtime/filetype.vim
runtime/ftplugin/org.vim [new file with mode: 0644]
runtime/syntax/org.vim [new file with mode: 0644]
src/testdir/test_filetype.vim
src/version.c

index 8b4e25e17a7cd21b1e2bbbfa73d3bee9a8ae3753..06fc829235673fce89ced1166a788c20580ab774 100644 (file)
@@ -1,4 +1,4 @@
-*filetype.txt* For Vim version 9.1.  Last change: 2024 Nov 12
+*filetype.txt* For Vim version 9.1.  Last change: 2024 Nov 14
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -843,6 +843,12 @@ To enable folding use this: >
        let g:markdown_recommended_style = 0
 
 
+ORG                                                    *ft-org-plugin*
+
+To enable folding use this: >
+       let g:org_folding = 1
+<
+
 PDF                                                    *ft-pdf-plugin*
 
 Two maps, <C-]> and <C-T>, are provided to simulate a tag stack for navigating
index 59add191638fdea0541f7401d7c019c5b098b7fd..897f356bbc7b15104481d1806ed7cc75f7d0e614 100644 (file)
@@ -1472,6 +1472,9 @@ au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md
        \   setf markdown |
        \ endif
 
+" Org (Emacs' org-mode)
+au BufNewFile,BufRead *.org                    setf org
+
 " Mason (it used to include *.comp, are those Mason files?)
 au BufNewFile,BufRead *.mason,*.mhtml  setf mason
 
diff --git a/runtime/ftplugin/org.vim b/runtime/ftplugin/org.vim
new file mode 100644 (file)
index 0000000..45a5e19
--- /dev/null
@@ -0,0 +1,37 @@
+" Vim filetype plugin file
+" Language:    Org
+" Maintainer:  Luca Saccarola <github.e41mv@aleeas.com>
+" Last Change: 2024 Nov 14
+
+if exists("b:did_ftplugin")
+    finish
+endif
+let b:did_ftplugin = 1
+
+if exists('b:undo_ftplugin')
+    let b:undo_ftplugin .= "|setl cms< com< fo< flp<"
+else
+    let b:undo_ftplugin = "setl cms< com< fo< flp<"
+endif
+
+setl commentstring=#\ %s
+setl comments=fb:*,fb:-,fb:+,b:#,b:\:
+
+setl formatoptions+=nql
+setl formatlistpat=^\\s*\\(\\(\\d\\|\\a\\)\\+[.)]\\|[+-]\\)\\s\\+
+
+function OrgFoldExpr()
+    let l:depth = match(getline(v:lnum), '\(^\*\+\)\@<=\( .*$\)\@=')
+    if l:depth > 0 && synIDattr(synID(v:lnum, 1, 1), 'name') =~# '\m^orgHeadline'
+        return ">" . l:depth
+    endif
+    return "="
+endfunction
+
+if has("folding") && get(g:, 'org_folding', 0)
+    setl foldexpr=OrgFoldExpr()
+    setl foldmethod=expr
+    let b:undo_ftplugin .= "|setl foldexpr< foldmethod<"
+endif
+
+" vim: ts=8 sts=2 sw=2 et
diff --git a/runtime/syntax/org.vim b/runtime/syntax/org.vim
new file mode 100644 (file)
index 0000000..89c8de3
--- /dev/null
@@ -0,0 +1,71 @@
+" Vim syntax file
+" Language:    Org
+" Maintainer:  Luca Saccarola <github.e41mv@aleeas.com>
+" Last Change: 2024 Nov 14
+"
+" Reference Specification: Org mode manual
+"   GNU Info: `$ info Org`
+"   Web: <https://orgmode.org/manual/index.html>
+
+" Quit when a (custom) syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+let b:current_syntax = 'org'
+
+syn case ignore
+
+" Bold
+syn region orgBold matchgroup=orgBoldDelimiter start="\(^\|[- '"({\]]\)\@<=\*\ze[^ ]" end="^\@!\*\([^\k\*]\|$\)\@=" keepend
+hi def link orgBold markdownBold
+hi def link orgBoldDelimiter orgBold
+
+" Italic
+syn region orgItalic matchgroup=orgItalicDelimiter start="\(^\|[- '"({\]]\)\@<=\/\ze[^ ]" end="^\@!\/\([^\k\/]\|$\)\@=" keepend
+hi def link orgItalic markdownItalic
+hi def link orgItalicDelimiter orgItalic
+
+" Strikethrogh
+syn region orgStrikethrough matchgroup=orgStrikethroughDelimiter start="\(^\|[ '"({\]]\)\@<=+\ze[^ ]" end="^\@!+\([^\k+]\|$\)\@=" keepend
+hi def link orgStrikethrough markdownStrike
+hi def link orgStrikethroughDelimiter orgStrikethrough
+
+" Underline
+syn region orgUnderline matchgroup=orgUnderlineDelimiter start="\(^\|[- '"({\]]\)\@<=_\ze[^ ]" end="^\@!_\([^\k_]\|$\)\@=" keepend
+
+" Headlines
+syn match orgHeadline "^\*\+\s\+.*$" keepend
+hi def link orgHeadline Title
+
+" Line Comment
+syn match  orgLineComment /^\s*#\s\+.*$/ keepend
+hi def link orgLineComment Comment
+
+" Block Comment
+syn region orgBlockComment matchgroup=orgBlockCommentDelimiter start="\c^\s*#+BEGIN_COMMENT" end="\c^\s*#+END_COMMENT" keepend
+hi def link orgBlockComment Comment
+hi def link orgBlockCommentDelimiter Comment
+
+" Lists
+syn match orgUnorderedListMarker "^\s*[-+]\s\+" keepend
+hi def link orgUnorderedListMarker markdownOrderedListMarker
+syn match orgOrderedListMarker "^\s*\(\d\|\a\)\+[.)]\s\+" keepend
+hi def link orgOrderedListMarker markdownOrderedListMarker
+"
+" Verbatim
+syn region orgVerbatimInline matchgroup=orgVerbatimInlineDelimiter start="\(^\|[- '"({\]]\)\@<==\ze[^ ]" end="^\@!=\([^\k=]\|$\)\@=" keepend
+hi def link orgVerbatimInline markdownCodeBlock
+hi def link orgVerbatimInlineDelimiter orgVerbatimInline
+syn region orgVerbatimBlock matchgroup=orgVerbatimBlockDelimiter start="\c^\s*#+BEGIN_.*" end="\c^\s*#+END_.*" keepend
+hi def link orgVerbatimBlock orgCode
+hi def link orgVerbatimBlockDelimiter orgVerbatimBlock
+
+" Code
+syn region orgCodeInline matchgroup=orgCodeInlineDelimiter start="\(^\|[- '"({\]]\)\@<=\~\ze[^ ]" end="^\@!\~\([^\k\~]\|$\)\@=" keepend
+highlight def link orgCodeInline markdownCodeBlock
+highlight def link orgCodeInlineDelimiter orgCodeInline
+syn region orgCodeBlock matchgroup=orgCodeBlockDelimiter start="\c^\s*#+BEGIN_SRC.*" end="\c^\s*#+END_SRC" keepend
+highlight def link orgCodeBlock markdownCodeBlock
+highlight def link orgCodeBlockDelimiter orgCodeBlock
+
+" vim: ts=8 sts=2 sw=2 et
index 09fc184ca63a95fe9bf518dc3456a2d9c7c30ef8..8a89905e5ed02ad8ac63b5b9cb8a13d0a7707708 100644 (file)
@@ -2724,4 +2724,14 @@ func Test_make_file()
   filetype off
 endfunc
 
+func Test_org_file()
+  filetype on
+
+  call writefile(['* org Headline', '*some bold text*', '/some italic text/'], 'Xfile.org', 'D')
+  split Xfile.org
+  call assert_equal('org', &filetype)
+
+  filetype off
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index cbc4a8e11b7ed1cc1a75aa77d61e0a191e60fad1..79b3099a5cd820abed778dd3f14012139417af61 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    865,
 /**/
     864,
 /**/