summaryrefslogtreecommitdiffstats
path: root/computer/additional_properties_of_editorconfig.rst
blob: a6c2d0a0357327839f9df6063147b200a5799122 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Additional properties in .editorconfig
######################################

:date: 2019-01-22T00:30:44
:category: computer
:tags: vim, authoring

For some inexplicable reasons `vim-editorconfig`_ stopped working 
with my latest build of neovim. I am not sure why and I haven’t 
have enough time to debug it properly. As a workaround I have 
temporarily (?) switched to `editorconfig-vim`_. The former 
plugin is all written in VimL, so it was not problem to extend 
properties it supports by two more ones ``spell_enabled`` and 
``spell_language`` corresponding to ``spell`` and ``spelllang`` 
vim options respectively. The later plugin is in Python and it is 
a bit more complicated, but fortunately it has an explicit hook 
for custom plugins. So, I could write this into special 
``plugin/`` file (no into ``~/.vimrc``, because commands from 
plugins in ``~/.vim/pack`` are not available then yet):

.. code:: vim

   function! FiletypeHook(config)
        if has_key(a:config, 'spell_enabled')
            let spell_enabled = a:config['spell_enabled']
            echom printf("EditorConfig: spell_enabled = %s",
               \ spell_enabled)
            if spell_enabled == "true"
                let &spell = 1
            else
                let &spell = 0
            endif
        endif

        if has_key(a:config, 'spell_language')
           let s:languages = map(filter(globpath(&runtimepath,
             \ 'spell/*', 1, 1),
             \ '!isdirectory(v:val)'), 'fnamemodify(v:val, '':t'')')
           echom printf("EditorConfig: s:languages = %s",
             \ s:languages)

            let spell_language = a:config['spell_language']

            " set bomb if necessary
            if spell_language[-3:] == "BOM"
                let &bomb = 1
                spell_language = spell_language[:-4]
            endif
   
            echom printf("EditorConfig: spell_language = %s",
              \ spell_language)
           " We need to accept even dialects of languages, e.g., en_gb
            let lang = split(spell_language, '_')[0]
            echom printf("EditorConfig: spell_language = %s",
              \ lang)
            if !empty(filter(copy(s:languages),
              \ 'stridx(v:val, lang) == 0'))
                echom printf("EditorConfig: spell_language = %s",
                  \ spell_language)
                let &spelllang = spell_language
            endif
        endif

        return 0   " Return 0 to show no error happened
   endfunction
   call editorconfig#AddNewHook(function('FiletypeHook'))

Seems to work like charm. Comments on the code are, of course, 
more than welcome.

.. _`vim-editorconfig`:
   https://github.com/sgur/vim-editorconfig

.. _`editorconfig-vim`:
   https://github.com/editorconfig/editorconfig-vim