changing background colour on the current line only
Tony Balinski
ajbj at free.fr
Tue Apr 22 23:05:14 CEST 2008
Quoting kuzn at htsc.mephi.ru:
> Hi,>
> > I worked for a company once which was using nedit, and had a macro which
> > would toggle the background colour on the current line between normal ->
> > yellow -> orange -> red -> normal.
>
> To highlight the current line you must patch the NEdit.
> See Patch Collection
>
http://sourceforge.net/tracker/index.php?func=detail&aid=1058246&group_id=11005&atid=311005
> This patch produces highlighting you want (without the color rotating) and
> many other features.
You don't need that patch for the following. That patch provides a special
background for the current line. Rangesets OTOH don't move with the cursor.
> > This was really handy to tag the areas of code you were working on,
> > especially when editing a few select lines within thousands of lines of
> > code
> > (i.e quick small bug fixes).
> >
> > Is this a script available somewhere? else I can't seem to find the macro
> > subroutine to change the background colour.. it shouldn't be too hard to
> > rewrite such a macro.. any pointers would be appreciated.
> >
>
> You can try following macros.
>
> Cheers,
> Alexey Kuznetsov
>
> $line_marking = $empty_array
> $line_marking["\n"] = $empty_array
>
> define mark_line {
> file = $file_path $file_name
> if(!(file in $line_marking)) {
> $line_marking[file] = rangeset_create()
> $line_marking["\n"][file] = "yellow"
> rangeset_set_color($line_marking[file], $line_marking["\n"][file])
> }
> if($selection_start >= 0 && $selection_left < 0) { # Mark selection
> rangeset_add($line_marking[file])
> return
> } # Mark current line.
> rangeset_add($line_marking[file],\
> search("^", $cursor, "regex", "backward"),\
> search("$", $cursor, "regex"))
> }
>
> define unmark_line {
> file = $file_path $file_name
> if(file in $line_marking) {
> i = rangeset_includes($line_marking[file], $cursor)
> if(i) {
> range = rangeset_range($line_marking[file], i)
> rangeset_subtract($line_marking[file], range["start"], range["end"])
> }
> }
> }
>
> define rotate_color {
> file = $file_path $file_name
> if(file in $line_marking["\n"]) {
> if($line_marking["\n"][file] == "")
> $line_marking["\n"][file] = "yellow"
> else if($line_marking["\n"][file] == "yellow")
> $line_marking["\n"][file] = "orange"
> else if($line_marking["\n"][file] == "orange")
> $line_marking["\n"][file] = "red"
> else if($line_marking["\n"][file] == "red")
> $line_marking["\n"][file] = ""
> rangeset_set_color($line_marking[file], $line_marking["\n"][file])
> }
> }
Here, you've got one rangeset for marking lines per file, and its color is
changed by the rotate_color function. You probably want to have a number of
rangesets, one for each color, and add/remove the current line with your macro
to/from these sets. (Include the line terminating \n while you're at it, which
will color the line beyond its RHS.) Use rangeset_set_name to provide a string
name for each set, and rangeset_get_by_name to retrieve the id created with
rangeset_create. Naming by color is a reasonable idea; by function might be
better. A set of functions that can be used to make your life a little easier
with rangesets were written by Uwe:
http://nedit.hackvalue.nl/niki/index.php/RangesetMacroCollection
(I use different ones, also based on the original rangeset interface.)
Tony
More information about the Discuss
mailing list