Jump to content
Beege

SciTE Caret Color Switch - Use Both Dark and Light Themes

Recommended Posts

If you have every taken the time to set up a nice dark theme for your scite editor, you probably noticed shortly after a small yet really annoying flaw. For what ever reason, scite is not set up to let you change the caret fore color and caret line color per language. This really sucks if say you want to edit a properties file or any of the many other languages that Scite currently is setup to support. Pretty much all the other languages are set as light theme so unless you change the theme for those file types, you end up with something like below where the line color and caret are still using the dark theme colors. Line 3 in the pic:
 
post-8949-0-96975500-1392529505_thumb.pn
 
To get around this I came up with the following that seems to work pretty well.  
 
Add the following properties to SciteUser.properties file (Options -> Open User Options File). Update colors to your own needs. You can addionally add any other propertys that dont have a lexer language option in the same fashion.

# The default values (light themes) will be used for any lexer other than au3

caret.default.fore=#000000
caret.default.line.back=#FFFED8
selection.default.fore=#006000
selection.default.back=#F0A0A8

caret.au3.fore=#FFFFFF
caret.au3.line.back=#111111
selection.au3.fore=#C2FFAE
selection.au3.back=#f9f9f9

 
Add the following function to PersonalTools.Lua file. As jos pointed out, the OnStartup covers the filetab switches as well as the startup so only need the one function:

function PersonalTools:OnStartup()
    
    -- the "and" + "or" keywords are ternary operators here  
    local sLex = self:IsLexer(SCLEX_AU3) and 'au3' or 'default'

    props['caret.line.back'] =  props['caret.' .. sLex .. '.line.back']
    props['caret.fore'] =       props['caret.' .. sLex .. '.fore']
    props['selection.fore'] =   props['selection.' .. sLex .. '.fore']
    props['selection.back'] =   props['selection.' .. sLex .. '.back']

end


Last restart SciTE and that should be it. Let me know if you have any issues. Thanks
 

Edited by Beege
Rewrote and added selection.fore / back

Share this post


Link to post
Share on other sites

A couple of suggestions:

The current setup in the Full SciTE installer has an PersonalTools.lua file in the users directory which can be used for this type of scripts.This avoids having to update the SciteStartup.lua after each installation of the full installer.

You could also retrieve the current lexername in stead of using the File Extension as some Lexers use multiple different file extensions.

Using OnStartUp will run the function when changing FileTabs in SciTE in case you have multiple files open.

Something like this:

function PersonalTools:OnStartup()
    if props['caret.' .. editor.LexerLanguage .. '.line.back'] ~= '' then
        props['caret.line.back'] = props['caret.' .. editor.LexerLanguage .. '.line.back']
    else
        props['caret.line.back'] = props['caret.default.line.back']
    end

    if props['caret.' .. editor.LexerLanguage .. '.fore'] ~= '' then
        props['caret.fore'] = props['caret.' .. editor.LexerLanguage .. '.fore']
    else
        props['caret.fore'] = props['caret.default.fore']
    end
end

Cheers

Jos

Edited by Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites
Guest

thanks.

my way is to open Magnifier and then Ctrl+Alt+I

or use Magnifier in this >way

Share this post


Link to post
Share on other sites

A couple of suggestions:

The current setup in the Full SciTE installer has an PersonalTools.lua file in the users directory which can be used for this type of scripts.This avoids having to update the SciteStartup.lua after each installation of the full installer.

You could also retrieve the current lexername in stead of using the File Extension as some Lexers use multiple different file extensions.

Using OnStartUp will run the function when changing FileTabs in SciTE in case you have multiple files open.

 

Something like this:

function PersonalTools:OnStartup()
    if props['caret.' .. editor.LexerLanguage .. '.line.back'] ~= '' then
        props['caret.line.back'] = props['caret.' .. editor.LexerLanguage .. '.line.back']
    else
        props['caret.line.back'] = props['caret.default.line.back']
    end

    if props['caret.' .. editor.LexerLanguage .. '.fore'] ~= '' then
        props['caret.fore'] = props['caret.' .. editor.LexerLanguage .. '.fore']
    else
        props['caret.fore'] = props['caret.default.fore']
    end
end

Nice! Thanks for the suggestions. Ill defiantly revise to utilize the personal tools. For using the editor.lexerlanguage, I actually started out doing it that way but then changed to extention only for simplicity until I can get a table made of what extensions use what lexername, and then tie those into some properties in the user.properties with some notes. Html lexer (aka hypertext) for example includes a ton while xml has its own little catagory and I could easily see myself guessing they were in the same group if not looking at the properties file. Thanks again for the Tips

Edited by Beege

Share this post


Link to post
Share on other sites

This is working again. editor.LexerLanguage stopped working somewhere along the way and has been updated to just check if this is au3 or not. 

edit: actually this works fine. I dont know what I had screwed up..

function PersonalTools:OnStartup()
    print(editor.LexerLanguage)
end

 

Edited by Beege

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Bhooshan
      I need to mute an ongoing call on Microsoft teams without activating the window. Teams allows us to mute using shortcut key Ctrl+Shift+m but only when the window is active.
      # Used set option as ongoing call can be with any person which leads to change in Title Name.
      AutoItSetOption ( "WinTitleMatchMode", 2 ) 
      # I am not clear with the control ID which will be good to use here and also the key combination of ^M       
      ControlSend ( "Microsoft Teams", "", "[CLASS:Intermediate D3D Window; INSTANCE:1]", "{ctrl down}")
       
      Can anyone help...!!! 
       

    • By Sayed
      Hi there, 
      I'm new in AutoIt forms and using AutoIt to automate desktop application (able to automate the application normally but facing issue when I've to re-run the application twice within the same script...so need help in this please)
      here is the steps then followed by the issue in a brief : 
      1- run application . 
      2- do some actions (click menus,activate windows,set texts..)
      3- close the application. 
      4- run the application again & access the same controls.
      5- open the same windows again (like step 2)
      6- perform some validations (by getting texts from some text boxes)
      7- close the application again (and repeat 1-7 for 15 times in average )
      The issue 
      * all controls are accessible in the first run and actions done successfully on controls (for steps 1-3) BUT from the second run of the application from step-4 it's able to set focus only the main application window.
      Note: only unique properties used to while mapping the controls. 
      Error that appear in the console :
      UIAWrappers.au3" (1673) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.: $x = Int($t[1] + ($t[3] / 2)) $x = Int($t[1] + (^ ERROR  
      Simple spy code  of one of the controls that has this strange issue(menubar&view menu Item): 
      ;~ *** Standard code maintainable *** #include "UIAWrappers.au3" AutoItSetOption("MustDeclareVars", 1) _UIA_setVar("oP1","Title:=XXX;controltype:=UIA_WindowControlTypeId;class:=WindowsForms10.Window.8.app") ;main app form xxx _UIA_setVar("oP2","Title:=menuStrip1;controltype:=UIA_MenuBarControlTypeId;class:=WindowsForms10.Window.8.app") ;menuStrip1 ;~ $oUIElement=_UIA_getObjectByFindAll("View.mainwindow", "title:=View;ControlType:=UIA_MenuItemControlTypeId", $treescope_subtree) _UIA_setVar("oUIElement","Title:=View;controltype:=UIA_MenuItemControlTypeId;class:=") ;ControlType:=UIA_MenuItemControlTypeId;classname:=") ;~ Actions split away from logical/technical definition above can come from configfiles ;~_UIA_Action("oP1","highlight") _UIA_Action("oP1","setfocus") ;~_UIA_Action("oP2","highlight") _UIA_Action("oP2","setfocus") _UIA_action("oUIElement","highlight") ;~_UIA_action("oUIElement","click")  
       
    • By Fenzik
      Hello All!
      i suggest to set default encoding in Scite4 for Autoit 3 to UTF 8 with Bom encoding, format recommended also in Autoit Help.
      In last editor version, when i open new script, for example Czech characters (č, ř, ž) aren't correct.
      So when i change Encoding to UTF 8 with Bom from Default Code page property state, everithing seems to be OK.
      Thank you and sorry for potentialy duplicated content.
      Fenzik
    • By jitb
      I have an eof problem in SciTE. I keep gitting this knitsu at the end of the open sesion.
      Please see below. The file should end at line 1220 but has invisable lines. What am I doing wrong?
    • By AutoitMike
      Scite 3.4.4
      Win 10
      I click "Help" or press F1, there is no response
      If I use the file explorer and double click Autoit.chm or Autoit3.chm help opens.
      There is no dialog to check or uncheck "Always ask before opening this file" when clicking on these files.
       
      If you are curious as to why I dont have the latest version, I am creating a back up laptop that has a VERY extensive automation application that I have written over the past 15 years.
       
      An extremely potent, powerful, needed function has been deleted in the upgrade of Autoit in recent years that I can not do without. If my main laptop dies, which it almost did, I am in a very bad position. So I bought the exact same laptop and I am "cofiguring" it to work exactly the same as my main laptop. However, this one has been "Upgraded" to Win 10 which I hope is not the problem. 
      Thanks for any help
×
×
  • Create New...