Sublime Forum

BracketHighlighter2 BETA Branch

#85

I am hoping this is the one and only time I break the plugin for current users. All changes moving forward should hopefully be backwards compatible.

0 Likes

#86

What was the exact change that made this underline/icon change from the pink in the previous version (I’m assuming it somehow got it from the syntax highlighting being used?) to the white in this latest commit?:

What was your logic behind this change?

0 Likes

#87

Originally I had it hard coded to use the color of the scope “keyword”. This is just stuff I was using in testing. I changed how the region styles are associated with the bracket definition (i separated them, it makes more sense this way).

But the reason why it is white, is because everything by default is now linked to the default color scope “brackethighlighter.default”. This is how I plan to release it out of the box. You can add this scope to your color scheme file and define it to whatever color you want. Or you can change the scope to one that exists in your color scheme file, or create different scopes in your color scheme file. All brackets are probably white now (if your color scheme foreground color is white) because I am no longer defining individual colors anymore. You must do this by copying the settings file to the User folder and then change it to your hearts content.

It doesn’t make sense for me to try and define scopes for different brackets because in some color scheme files what I pick may look horrible while in others it may look good. So I created “brackethighlighter.default” (which probably does not exist in your color scheme file, which means the color will just be your foreground color).

I hope that makes sense. The plugin provides the functionality, you provide the color, style, rules etc you want. I provide some basic rules though.

0 Likes

#88

This is an alpha, so things can change radically. But hopefully, this is the last radical change.

0 Likes

#89

[quote=“facelessuser”]Originally I had it hard coded to use the color of the scope “keyword”. This is just stuff I was using in testing. I changed how the region styles are associated with the bracket definition (i separated them, it makes more sense this way).

But the reason why it is white, is because everything by default is now linked to the default color scope “brackethighlighter.default”. This is how I plan to release it out of the box. You can add this scope to your color scheme file and define it to whatever color you want. Or you can change the scope to one that exists in your color scheme file, or create different scopes in your color scheme file. All brackets are probably white now (if your color scheme foreground color is white) because I am no longer defining individual colors anymore. You must do this by copying the settings file to the User folder and then change it to your hearts content.

It doesn’t make sense for me to try and define scopes for different brackets because in some color scheme files what I pick may look horrible while in others it may look good. So I created “brackethighlighter.default” (which probably does not exist in your color scheme file, which means the color will just be your foreground color).

I hope that makes sense. The plugin provides the functionality, you provide the color, style, rules etc you want. I provide some basic rules though.[/quote]

Is it possible to somehow grab the color from the color of the bracket being highlighted? This would guarantee it would still look OK with a given color scheme and provide a more visually appealing default for BH2.

0 Likes

#90

The way the ST2 API works is that you set a region to highlight, and you give your scope. To try and dynamically pick a scope would turn out horrible depending on what is getting highighlighted. What if the the region being highlighted spans multiple scopes, which scope would I pick? And in the case of curly, and square etc. you would just get a boring white with your current color scheme.

The way I personally do it is assign different brackets scopes that I make up “brackethighighter.curly”, “brackethighlighter.square”, etc. And then I define them in my theme file. You can do this if you like.

Right now ruby keywords are linked to the default. If you change your settings file to this, you will have red for the default.

[pre=#2D2D2D] “default”: {
“icon”: “dot”,
“color”: “keyword”,
“style”: “underline”
},[/pre]

If you want greater control, you can create a special style for ruby keywords.

[pre=#2D2D2D] 191 // Ruby conditional statements
192 {
193 “name”: “ruby”,
194 “open”: “(^\s*\b(?:if|until|unless|while|begin|class|module|def\b\s*[a-zA-Z_]+)|do)\b”,
195 “close”: “\b(end)\b”,
196 “style”: “rubykeywords”,
197 “scope_exclude”: “string”, “comment”],
198 “plugin_library”: “bh_modules.rubykeywords”,
199 “language_filter”: “whitelist”,
200 “language_list”: “Ruby”],
201 “enabled”: true
202 },

242 “rubykeywords”: {
243 “icon”: “dot”,
244 “color”: “keyword”,
245 “style”: “underline”
246 },[/pre]

Anything you omit in the style object defers to what is in the default style.

If you want even greater control, make up a scope and add it to your theme file.

[pre=#2D2D2D] “rubykeywords”: {
“icon”: “dot”,
“color”: “madeup.scope”,
“style”: “underline”
},[/pre]

[pre=#2D2D2D]
name
Made up Scope
scope
madeup.scope
settings

foreground
#99CC99

[/pre]

The sky is the limit.

0 Likes

#91

I was envisioning just picking the outermost scope for the coloring. Regarding the braces, I like the white coloring that matches. The matching colors are the least distracting while still being useful with a flare of style. Is there an easier way to do this than manually go and set the color to match for every single “bracket” type?

0 Likes

#92

Some people want one color that all brackets use, some people want the bracket to be the same as the bracket being emphasized, some want contrast between the two to make it easier to see. I run into a problem were I can’t please everyone with styling, so the easiest way is to make it completely configurable. If I make it simpler for you to style it in your way, it may make it less simpler for people to style in their way. So I make it basic, but straight forward. Create style profiles and assign them to one or more brackets.

You don’t have to create separate style profiles for every bracket. You can create just a couple and assign them to multiple brackets. You can remove them all and just use the default one.

On top of that, changing the colors isn’t something you are going to be doing everyday. It is one of those things were you tweak it the first time, and then you forget about it. If it was a task that was going to be done everyday, I can see where it would get troublesome, but really, this is something you should tweak how you like and forget about it.

0 Likes

#93

[quote=“facelessuser”]

Some people want one color that all brackets use, some people want the bracket to be the same as the bracket being emphasized, some want contrast between the two to make it easier to see. I run into a problem were I can’t please everyone with styling, so the easiest way is to make it completely configurable. If I make it simpler for you to style it in your way, it may make it less simpler for people to style in their way. So I make it basic, but straight forward. Create style profiles and assign them to one or more brackets.

You don’t have to create separate style profiles for every bracket. You can create just a couple and assign them to multiple brackets. You can remove them all and just use the default one.

On top of that, changing the colors isn’t something you are going to be doing everyday. It is one of those things were you tweak it the first time, and then you forget about it. If it was a task that was going to be done everyday, I can see where it would get troublesome, but really, this is something you should tweak how you like and forget about it.[/quote]

I know, I was just asking if there was an easier way to do this (eg. somehow set it as the default behavior for everything). Nothing can ever please everybody; I just thought this would be a nice option to have and a better default than simply using the foreground color. I’m not suggesting you should abandon customization, that’s silly. I’m just saying that something like:

"default": { "color": "brackethighlighter.bracketcolor", } would be a nice option to have.

0 Likes

#94

[quote=“Gnintendo”]

Some people want one color that all brackets use, some people want the bracket to be the same as the bracket being emphasized, some want contrast between the two to make it easier to see. I run into a problem were I can’t please everyone with styling, so the easiest way is to make it completely configurable. If I make it simpler for you to style it in your way, it may make it less simpler for people to style in their way. So I make it basic, but straight forward. Create style profiles and assign them to one or more brackets.

You don’t have to create separate style profiles for every bracket. You can create just a couple and assign them to multiple brackets. You can remove them all and just use the default one.

On top of that, changing the colors isn’t something you are going to be doing everyday. It is one of those things were you tweak it the first time, and then you forget about it. If it was a task that was going to be done everyday, I can see where it would get troublesome, but really, this is something you should tweak how you like and forget about it.
I know, I was just asking if there was an easier way to do this (eg. somehow set it as the default behavior for everything). Nothing can ever please everybody; I just thought this would be a nice option to have and a better default than simply using the foreground color. I’m not suggesting you should abandon customization, that’s silly. I’m just saying that something like:

"default": { "color": "brackethighlighter.bracketcolor", } would be a nice option to have.[/quote]

That is what I was saying earlier. That already exists. It just isn’t dynamic (grap the actual scope of the bracket).

It makes it tough because the region has to be the same for all in the group, so you can’t really scan every bracket selection, or you would have to create a special region for every bracket instead of bracket groups, and ensure the region key names don’t overlap and then keep a list so you can clear them all. It is a lot of added complexity.

0 Likes

#95

So then how do I use the existing non-dynamic approach? I’m not sure I fully understood what you were getting that, then.

0 Likes

#96

Take a look at the current settings. I only define one color in default. The rest of them inherit that color. You can see I have colors commented out in the others. If you uncomment them (and the scope actually exists) those style definitions will pick up the new style. The easiest way to understand is to take a look and turn some of those knobs.

It is the eternal problem of not giving people enough knobs to turn vs giving them too many. People wanted it to be configurable for every thing they wanted, the down side is that now you have to turn all of those knobs to get what you want :smile:.

0 Likes

#97

Can you define the defaults when something isn’t specified in the User settings file?
For instance, when I do this in my user settings:

{ "bracket_styles": { "unmatched": { "color": "brackethighlighter.unmatched", "style": "underline" }, "curly": { "color": "brackethighlighter.curly" }, "round": { "color": "brackethighlighter.round" }, "square": { "color": "brackethighlighter.square" }, "angle": { "color": "brackethighlighter.angle" }, "tag": { "color": "brackethighlighter.tag", "style": "underline" }, "single_quote": { "color": "brackethighlighter.quote" }, "double_quote": { "icon": "double_quote", "color": "brackethighlighter.quote" }, "regex": { "color": "brackethighlighter.quote" } } }
All the icons are the circle except the double_quote when I manually copied in. Shouldn’t this be falling back on the default values for that particular setting when I don’t specify what I want?

On a side note, I guess there’s no easy way to simply grab the coloring of the outermost character highlighted/underlined/outlined/etc to use. Oh well. :frowning:

0 Likes

#98

I explain this in the settings file.

[pre=#151515] // “default” and “unmatched” styles are special
// styles. If they are not defined here,
// they will be generated internally with
// internal defaults.

    // "default" style defines attributes that
    // will be used for any style that does not
    // explicitly define that attribute.  So if
    // a style does not define a color, it will
    // use the color from the "default" style.
    "default": {
        "icon": "dot",
        "color": "brackethighlighter.default",
        "style": "underline"
    },[/pre]

If you do not define the default style I define one internally.

Attributes from “default” is what gets used when you don’t define an attribute in another style. So in your example, you did not define an icon, so the default one got used. But you also did not define a default style, so the plugin used the internal one which defines the icon as “dot”.

I don’t understand what you are expressing here. See the above response which explains the behavior. It is acting as intended.

[quote=“Gnintendo”]
On a side note, I guess there’s no easy way to simply grab the coloring of the outermost character highlighted/underlined/outlined/etc to use. Oh well. :frowning:[/quote]

It could be done, but it causes a lot more complexity to an already complex set of rules. Take a look at the actual code, you will see to make it as configurable as it is now, there is quite a bit of complexity. What you propose would require yet another exception, and impact a lot of code. It would require me to dynamically create a region for each individual bracket opposed to bracket groups as it is done now. And if I added it, someone would then not be satisfied that it picks the first scope, but want maybe the last scope etc…I don’t want to open that box. But I do appreciate the feedback. Certain features I push back on because I have to maintain this code, so no offense :smile:.

0 Likes

#99

Thanks for the update! Just finished migrating my old settings, no biggie, like 10 minutes of work (i think 8 minutes took to figure out how new stuff works :smiley: )

Few stuff:

  • it is possible to extend a theme? I mean ok, i changed Monokai, but what if there is a new version of Monokai in the future? (is totally unrelated to BH, it’s more related to ST itself).

  • i noticed that if i would remove everything and let this empty in my user bb_core settings file:

"scope_brackets": ]

Highlights stops for quotes. If i remove completely, it’s fine (which is what i did). I’m not customizing anything in this area (not now, probably not ever), but probably it’s a good idea to have an option to merge settings with default or just replace completely. That’s because it’s kinda silly to copy/paste ALL default settings just to add one more setting. Again, i’m not using this, but probably someone that use it should provide some feedback.

  • i read in another thread about alpha colors. Which i tried and works awesome. There are some situations when text cursor it’s slightly hard to see (when you use style:solid). I was thinking of adding an option to „dim the solid color” when you are touching a bracket with the cursor ( like so {|} ). In this case, if the color is #CC0000, when touching would be #CC000066 or something like that. Make sense?

  • another thing that may be useful (ask other users too!) is to not highlight brackets that are touching ( e.g. in: function(){ }, () part should not be highlighted, but {} should be)

Pfiew, that’s all for now. I woke up in a typing mood! :mrgreen:

0 Likes

#100

Not sure. I don’t think you can, but I could look into it. I usually copy my color schemes to a sub folder in my user folder so ST2 will not overwrite my personal edits.

Yeah, that is how ST2 loads settings files via sublime.load_settings. If I do a custom deep merge solution, I have to start watching files for changes and reload etc. like ST2 does…it is not really worth it. ST2 already does all of this, it just does a shallow merge (the user key overwrites the base key), just something you have to be aware of.

Makes sense. I would do this if ST2 would only directly accept a color via the API, but since it doesn’t, the only way to accomplish this is to require the user to make a separate dimmed color profile, and based on some internal rule pick between the two color profiles.

I could do this if enough people wanted it. Basically you want to ignore a bracket if the two brackets touch each other? The only issue I see though, is that it might be annoying for some types of brackets. For instance, tags have bracket plugins that allow you select the tag names of both opening and closing tags so you can edit them both. So if you created a tag, but you decided to change their name (and the tags touched), the plugin wouldn’t work. Anything I do, I want to make very general so it works with all brackets. I don’t want to hard code things specifically for tags etc. Also things like swap tags would break etc. (I know it isn’t working right now, but when I finish it, it would break on this for touching brackets).

0 Likes

#101

Cool, thanks for explanations. :wink:

0 Likes

#102

I kinda found another bug! :mrgreen:
So, let’s say we have this snippet:

          <?php for ( $i=0; $i < 5; $i++ ) { ?>
            
          <?php } ?>

The bug is that { and } doesn’t highlight correctly (only as invalid), although if I press ctrl+m (to jump to pair bracket) will jump correctly.

This is not related to my custom settings of the plugin (i removed everything and act the same).

0 Likes

#103

[quote=“iamntz”]I kinda found another bug! :mrgreen:
So, let’s say we have this snippet:

          <?php for ( $i=0; $i < 5; $i++ ) { ?>
            
          <?php } ?>

The bug is that { and } doesn’t highlight correctly (only as invalid), although if I press ctrl+m (to jump to pair bracket) will jump correctly.

This is not related to my custom settings of the plugin (i removed everything and act the same).[/quote]

Mine highlights “{” and “}” as invalid (which I would expect, since “{” and “}” are not matched between the “<?php ?>” tags, it breaks the valid match rules). And cannot jump between the “{}” brackets either because they are invalid. This is the case for ctrl+m and BH2s jump between brackets method for me as well. ctrl+m uses ST2s algorithm. BH2 uses its own. I provide example keymaps to use BH2’s version.

Now Ctrl+m was able to match PHP angles in the last PHP group, but not in the first. BH2’s match did not match either. BH2 is very consistent when using its algorithm. ST2 seems like it is not.

Are you able to post more code? Because I could not reproduce what you described with just what you posed above. As you can see my description seems different than yours.

0 Likes

#104

There is no need for more code because it seems that everything that match follow this pattern (more or less) doesn’t work:

< { > 

< }>

I made a short movie here:
(http://img.iamntz.com/jing/2012-11-04_1918.swf)

with settings off (including those PHP tags):
(http://img.iamntz.com/jing/2012-11-04_1924.swf)
(also, at the end of the movie i enabled my settings & tried to use other brackets)

Green is ok, red is invalid. Pink is… i have no clue what (or why) is pink in that context!

0 Likes