[code] [textadept]Some questions about buffer.set_theme()

From: Peter Rolf <indiego.att.gmx.net>
Date: Wed, 28 Mar 2018 17:54:04 +0200

Am 2018-03-26 um 19:00 schrieb Peter Rolf:
> Am 2018-03-26 um 17:26 schrieb Mitchell:
>> Hi Peter,
>>
>> On Mon, 26 Mar 2018, Peter Rolf wrote:
>>
>>> Am 2018-03-26 um 16:35 schrieb Mitchell:
>>>> Hi Peter,
>>>>
>>>> On Mon, 26 Mar 2018, Peter Rolf wrote:
>>>>
>>>>> Hi Mitchell,
>>>>>
>>>>> Am 2018-03-25 um 23:08 schrieb Mitchell:
>>>>>> Hi,
>>>>>>
>>>>>> On Wed, 7 Feb 2018, Mitchell wrote:
>>>>>>
>>>>>>> Hi Barna,
>>>>>>>
>>>>>>> On Tue, 6 Feb 2018, Keresztes Barna wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>> I have some questions about the behavior of the buffer.set_theme()
>>>>>>>> function.
>>>>>>>>
>>>>>>>> 1. It sets the theme only at the startup and for every buffer, it's
>>>>>>>> clearly
>>>>>>>> a
>>>>>>>> function affecting the UI (like ui.menu), not a buffer-level
>>>>>>>> function
>>>>>>>> (properties that can be different for every buffer - like tab
>>>>>>>> width or
>>>>>>>> margin). So I don't really understand why was it moved from the ui
>>>>>>>> class to
>>>>>>>> buffer class?
>>>>>>>
>>>>>>> I agree it's not perfect, but there are two reasons for the
>>>>>>> change: (1)
>>>>>>> ui.set_theme() can imply the entire ui is themed (menus, text boxes,
>>>>>>> buttons,
>>>>>>> etc.) and this is not the case; (2) [ui|buffer].set_theme() only ever
>>>>>>> sets
>>>>>>> buffer properties and calls buffer functions. With the new feature in
>>>>>>> Textadept 10 that makes any buffer settings on startup apply to all
>>>>>>> subsequent buffers, `buffer.set_theme()` seems more appropriate.
>>>>>>>
>>>>>>>> 2. I understand that it works only at startup, but I don't find it
>>>>>>>> normal
>>>>>>>> that subsequent calls give "nil value" error (as it's an API
>>>>>>>> function). IMO
>>>>>>>> it should do nothing or give a warning.
>>>>>>>
>>>>>>> That is a fair point. Despite the fact that the documentation states
>>>>>>> the
>>>>>>> function can only be called on startup, I will do something about it.
>>>>>>>
>>>>>>>> 3. The most interesting question: It should be really interesting
>>>>>>>> to be
>>>>>>>> able
>>>>>>>> to define a different theme for different buffers. I like to have a
>>>>>>>> light
>>>>>>>> theme for text editing (LaTex, Markdown) and a dark theme for code.
>>>>>>>> Something
>>>>>>>> like:
>>>>>>>>
>>>>>>>>     events.connect(events.LEXER_LOADED, function(lang)
>>>>>>>>       if lang == 'markdown' or lang == 'latex' then
>>>>>>>>         buffer.set_theme(not CURSES and 'base16-tomorrow-light')
>>>>>>>>       else
>>>>>>>>         buffer.set_theme(not CURSES and 'base16-monokai-dark')
>>>>>>>>       end
>>>>>>>>     end
>>>>>>>>
>>>>>>>> I don't think there is a technical obstacle as I found a
>>>>>>>> workaround by
>>>>>>>> replacing `buffer.set_theme` by `dofile('path/to/theme.lua')`.
>>>>>>>> Could you implement the per buffer theme feature?
>>>>>>>
>>>>>>> That's an interesting idea. I will explore it and get back to you.
>>>>>>
>>>>>> I've committed a change[1] that removes the call restrictions on
>>>>>> `buffer.set_theme()` and adds an initial `buffer` argument like all
>>>>>> buffer functions. As a result, you can now call
>>>>>> `buffer:set_theme(name,
>>>>>> props)` at any time, not just on startup. This enables per-language
>>>>>> themes if you like.
>>>>>>
>>>>>> The next nightly build will have this change. You'll need to use a
>>>>>> nightly since I fixed a bug[2] in the Scintilla lexer that this change
>>>>>> depends on.
>>>>>>
>>>>>> There will also be a new compatibility notice if your
>>>>>> *~/.textadept/init.lua* uses the old `buffer.set_theme(name, props)`
>>>>>> syntax. (Note the '.' instead of the new ':'.)
>>>>>>
>>>>>> Cheers,
>>>>>> Mitchell
>>>>>>
>>>>>> [1]: https://foicica.com/hg/textadept/rev/4c9a8075e71c
>>>>>> [2]: https://foicica.com/hg/scintilla/rev/814593e7dde4
>>>>>
>>>>>
>>>>> just tested the nightly (W32) and I run into problems with unset style
>>>>> properties. Sometimes only "number" isn't set correctly, sometimes all
>>>>> but "string" is unset. Tried it several times, never got all my styles
>>>>> working at the same time. Strange (looking).
>>>>>
>>>>> I load my theme once (now buffer:set_theme(); called in init.lua), and
>>>>> change some of its properties afterwards (buffer.property[] at
>>>>> "LEXER_LOADED"), if the conditions are met.
>>>>
>>>> Would you please post your LEXER_LOADED event handler? I am not able to
>>>> reproduce with something simple like:
>>>>
>>>>   events.connect(events.LEXER_LOADED, function(lexer)
>>>>     if lexer == 'ansi_c' then
>>>>       buffer.property['style.number']='fore:#ff0000'
>>>>       buffer.property['style.string']='fore:#0000ff'
>>>>     end
>>>>   end)
>>>>
>>>> Cheers,
>>>> Mitchell
>>>
>>> Thanks for the quick reply :D
>>>
>>> Attached my actual "style.lua" (converted from Elastic Tabstops). It
>>> contains all the style related settings and is loaded at the end of my
>>> "init.lua". I tried to copy the related code parts first, but ended in a
>>> mess of ugly looking text.
>>
>> I think I see the problem. Prior to your iteration over `HiDPI_styles`,
>> try calling `set_style_property()` on your "default" key's values first.
>> Then in your iteration skip over the "default" key when it comes up.
>>
>> In brief, the change I committed yesterday "resets" all styles when the
>> "style.default" property is changed. Scintilla (the editing component
>> Textadept uses) intends for the default style to be defined first, and
>> then have all styles "reset" so that they inherit from that default
>> style. Without this "reset", on-the-fly theme switching via
>> `buffer:set_theme()` would not be possible.
>>
>> Cheers,
>> Mitchell
>
> Yep, that fixed it!
>
> Thanks again,
>
> Peter
>

I have noticed a problem with derived styles ("markdown"). When I just
set the "standard" style for such a buffer (s. line 110, style.lua), I
end up with the complete buffer in that style (totally uniform). I would
at least expect the "h1-6" styles to be bigger.

Loading a theme afterwards with buffer:set_theme() adds no extra styles
to the "markdown" buffer. Tested it with the three default themes, same
result. The "markdown" buffer stays uniform.

Cheers, Peter

-- 
You are subscribed to code.att.foicica.com.
To change subscription settings, send an e-mail to code+help.att.foicica.com.
To unsubscribe, send an e-mail to code+unsubscribe.att.foicica.com.
Received on Wed 28 Mar 2018 - 11:54:04 EDT

This archive was generated by hypermail 2.2.0 : Thu 29 Mar 2018 - 06:47:38 EDT