@@ -3404,6 +3404,8 @@ set rectmask {
3404
3404
}
3405
3405
image create bitmap reficon-H -background black -foreground " #00ff00" \
3406
3406
-data $rectdata -maskdata $rectmask
3407
+ image create bitmap reficon-R -background black -foreground " #ffddaa" \
3408
+ -data $rectdata -maskdata $rectmask
3407
3409
image create bitmap reficon-o -background black -foreground " #ddddff" \
3408
3410
-data $rectdata -maskdata $rectmask
3409
3411
@@ -7016,6 +7018,7 @@ proc commit_descriptor {p} {
7016
7018
7017
7019
# append some text to the ctext widget, and make any SHA1 ID
7018
7020
# that we know about be a clickable link.
7021
+ # Also look for URLs of the form "http[s]://..." and make them web links.
7019
7022
proc appendwithlinks {text tags} {
7020
7023
global ctext linknum curview
7021
7024
@@ -7032,6 +7035,18 @@ proc appendwithlinks {text tags} {
7032
7035
setlink $linkid link$linknum
7033
7036
incr linknum
7034
7037
}
7038
+ set wlinks [regexp -indices -all -inline -line \
7039
+ {https?://[^[:space:]]+} $text ]
7040
+ foreach l $wlinks {
7041
+ set s2 [lindex $l 0]
7042
+ set e2 [lindex $l 1]
7043
+ set url [string range $text $s2 $e2 ]
7044
+ incr e2
7045
+ $ctext tag delete link$linknum
7046
+ $ctext tag add link$linknum " $start + $s2 c" " $start + $e2 c"
7047
+ setwlink $url link$linknum
7048
+ incr linknum
7049
+ }
7035
7050
}
7036
7051
7037
7052
proc setlink {id lk} {
@@ -7064,6 +7079,18 @@ proc setlink {id lk} {
7064
7079
}
7065
7080
}
7066
7081
7082
+ proc setwlink {url lk} {
7083
+ global ctext
7084
+ global linkfgcolor
7085
+ global web_browser
7086
+
7087
+ if {$web_browser eq {}} return
7088
+ $ctext tag conf $lk -foreground $linkfgcolor -underline 1
7089
+ $ctext tag bind $lk <1> [list browseweb $url ]
7090
+ $ctext tag bind $lk <Enter> {linkcursor %W 1}
7091
+ $ctext tag bind $lk <Leave> {linkcursor %W -1}
7092
+ }
7093
+
7067
7094
proc appendshortlink {id {pre {}} {post {}}} {
7068
7095
global ctext linknum
7069
7096
@@ -7098,6 +7125,16 @@ proc linkcursor {w inc} {
7098
7125
}
7099
7126
}
7100
7127
7128
+ proc browseweb {url} {
7129
+ global web_browser
7130
+
7131
+ if {$web_browser eq {}} return
7132
+ # Use eval here in case $web_browser is a command plus some arguments
7133
+ if {[catch {eval exec $web_browser [list $url ] &} err]} {
7134
+ error_popup " [ mc " Error starting web browser:" ] $err "
7135
+ }
7136
+ }
7137
+
7101
7138
proc viewnextline {dir} {
7102
7139
global canv linespc
7103
7140
@@ -8191,11 +8228,11 @@ proc parseblobdiffline {ids line} {
8191
8228
} else {
8192
8229
$ctext insert end " $line \n " filesep
8193
8230
}
8194
- } elseif {![string compare -length 3 " >" $line ]} {
8231
+ } elseif {$currdiffsubmod != " " && ![string compare -length 3 " >" $line ]} {
8195
8232
set $currdiffsubmod " "
8196
8233
set line [encoding convertfrom $diffencoding $line ]
8197
8234
$ctext insert end " $line \n " dresult
8198
- } elseif {![string compare -length 3 " <" $line ]} {
8235
+ } elseif {$currdiffsubmod != " " && ![string compare -length 3 " <" $line ]} {
8199
8236
set $currdiffsubmod " "
8200
8237
set line [encoding convertfrom $diffencoding $line ]
8201
8238
$ctext insert end " $line \n " d0
@@ -10022,6 +10059,7 @@ proc sel_reflist {w x y} {
10022
10059
set n [lindex $ref 0]
10023
10060
switch -- [lindex $ref 1] {
10024
10061
" H" {selbyid $headids($n) }
10062
+ " R" {selbyid $headids($n) }
10025
10063
" T" {selbyid $tagids($n) }
10026
10064
" o" {selbyid $otherrefids($n) }
10027
10065
}
@@ -10051,7 +10089,11 @@ proc refill_reflist {} {
10051
10089
foreach n [array names headids] {
10052
10090
if {[string match $reflistfilter $n ]} {
10053
10091
if {[commitinview $headids($n) $curview ]} {
10054
- lappend refs [list $n H]
10092
+ if {[string match " remotes/*" $n ]} {
10093
+ lappend refs [list $n R]
10094
+ } else {
10095
+ lappend refs [list $n H]
10096
+ }
10055
10097
} else {
10056
10098
interestedin $headids($n) {run refill_reflist}
10057
10099
}
@@ -11488,7 +11530,7 @@ proc create_prefs_page {w} {
11488
11530
proc prefspage_general {notebook} {
11489
11531
global NS maxwidth maxgraphpct showneartags showlocalchanges
11490
11532
global tabstop limitdiffs autoselect autosellen extdifftool perfile_attrs
11491
- global hideremotes want_ttk have_ttk maxrefs
11533
+ global hideremotes want_ttk have_ttk maxrefs web_browser
11492
11534
11493
11535
set page [create_prefs_page $notebook .general]
11494
11536
@@ -11539,6 +11581,13 @@ proc prefspage_general {notebook} {
11539
11581
pack configure $page .extdifff.l -padx 10
11540
11582
grid x $page .extdifff $page .extdifft -sticky ew
11541
11583
11584
+ ${NS} ::entry $page .webbrowser -textvariable web_browser
11585
+ ${NS} ::frame $page .webbrowserf
11586
+ ${NS} ::label $page .webbrowserf.l -text [mc " Web browser" ]
11587
+ pack $page .webbrowserf.l -side left
11588
+ pack configure $page .webbrowserf.l -padx 10
11589
+ grid x $page .webbrowserf $page .webbrowser -sticky ew
11590
+
11542
11591
${NS} ::label $page .lgen -text [mc " General options" ]
11543
11592
grid $page .lgen - -sticky w -pady 10
11544
11593
${NS} ::checkbutton $page .want_ttk -variable want_ttk \
@@ -12310,13 +12359,19 @@ if {[tk windowingsystem] eq "win32"} {
12310
12359
set bgcolor SystemWindow
12311
12360
set fgcolor SystemWindowText
12312
12361
set selectbgcolor SystemHighlight
12362
+ set web_browser " cmd /c start"
12313
12363
} else {
12314
12364
set uicolor grey85
12315
12365
set uifgcolor black
12316
12366
set uifgdisabledcolor " #999"
12317
12367
set bgcolor white
12318
12368
set fgcolor black
12319
12369
set selectbgcolor gray85
12370
+ if {[tk windowingsystem] eq " aqua" } {
12371
+ set web_browser " open"
12372
+ } else {
12373
+ set web_browser " xdg-open"
12374
+ }
12320
12375
}
12321
12376
set diffcolors {red " #00a000" blue}
12322
12377
set diffcontext 3
@@ -12390,6 +12445,7 @@ set config_variables {
12390
12445
filesepbgcolor filesepfgcolor linehoverbgcolor linehoverfgcolor
12391
12446
linehoveroutlinecolor mainheadcirclecolor workingfilescirclecolor
12392
12447
indexcirclecolor circlecolors linkfgcolor circleoutlinecolor
12448
+ web_browser
12393
12449
}
12394
12450
foreach var $config_variables {
12395
12451
config_init_trace $var
0 commit comments