git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Barret Rhoden <brho@google.com>
To: Paul Mackerras <paulus@ozlabs.org>, git@vger.kernel.org
Subject: Re: [PATCH] gitk: Make web links clickable
Date: Tue, 27 Aug 2019 11:33:16 -0400	[thread overview]
Message-ID: <24ec7841-0996-b3d7-81b4-f48a446341ee@google.com> (raw)
In-Reply-To: <20190826221444.GB7402@blackberry>

On 8/26/19 6:14 PM, Paul Mackerras wrote:
> This makes gitk look for lines in the commit message which start with
> "Link:" or "BugLink:" followed by a http or https URL, and make the
> URL clickable.  Clicking on it will invoke an external web browser with
> the URL.
> 
> The web browser command is by default "xdg-open" on Linux, "open" on
> MacOS, and "cmd /c start" on Windows.  The command can be changed in
> the preferences window, and it can include parameters as well as the
> command name.  If it is set to the empty string then URLs will no
> longer be made clickable.
> 
> Signed-off-by: Paul Mackerras <paulus@ozlabs.org>

FWIW:

Tested-by: Barret Rhoden <brho@google.com>


> ---
>   gitk | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
>   1 file changed, 50 insertions(+), 1 deletion(-)
> 
> diff --git a/gitk b/gitk
> index a14d7a1..4577150 100755
> --- a/gitk
> +++ b/gitk
> @@ -7016,6 +7016,7 @@ proc commit_descriptor {p} {
>   
>   # append some text to the ctext widget, and make any SHA1 ID
>   # that we know about be a clickable link.
> +# Also look for lines of the form "Link: http..." and make them web links.
>   proc appendwithlinks {text tags} {
>       global ctext linknum curview
>   
> @@ -7032,6 +7033,18 @@ proc appendwithlinks {text tags} {
>   	setlink $linkid link$linknum
>   	incr linknum
>       }
> +    set wlinks [regexp -indices -all -inline -line \
> +		    {^ *(Bug|)Link: (https?://.*)$} $text]
> +    foreach {l sub1 sub2} $wlinks {
> +	set s2 [lindex $sub2 0]
> +	set e2 [lindex $sub2 1]
> +	set url [string range $text $s2 $e2]
> +	incr e2
> +	$ctext tag delete link$linknum
> +	$ctext tag add link$linknum "$start + $s2 c" "$start + $e2 c"
> +	setwlink $url link$linknum
> +	incr linknum
> +    }
>   }
>   
>   proc setlink {id lk} {
> @@ -7064,6 +7077,18 @@ proc setlink {id lk} {
>       }
>   }
>   
> +proc setwlink {url lk} {
> +    global ctext
> +    global linkfgcolor
> +    global web_browser
> +
> +    if {$web_browser eq {}} return
> +    $ctext tag conf $lk -foreground $linkfgcolor -underline 1
> +    $ctext tag bind $lk <1> [list browseweb $url]
> +    $ctext tag bind $lk <Enter> {linkcursor %W 1}
> +    $ctext tag bind $lk <Leave> {linkcursor %W -1}
> +}
> +
>   proc appendshortlink {id {pre {}} {post {}}} {
>       global ctext linknum
>   
> @@ -7098,6 +7123,16 @@ proc linkcursor {w inc} {
>       }
>   }
>   
> +proc browseweb {url} {
> +    global web_browser
> +
> +    if {$web_browser eq {}} return
> +    # Use eval here in case $web_browser is a command plus some arguments
> +    if {[catch {eval exec $web_browser [list $url] &} err]} {
> +	error_popup "[mc "Error starting web browser:"] $err"
> +    }
> +}
> +
>   proc viewnextline {dir} {
>       global canv linespc
>   
> @@ -11488,7 +11523,7 @@ proc create_prefs_page {w} {
>   proc prefspage_general {notebook} {
>       global NS maxwidth maxgraphpct showneartags showlocalchanges
>       global tabstop limitdiffs autoselect autosellen extdifftool perfile_attrs
> -    global hideremotes want_ttk have_ttk maxrefs
> +    global hideremotes want_ttk have_ttk maxrefs web_browser
>   
>       set page [create_prefs_page $notebook.general]
>   
> @@ -11539,6 +11574,13 @@ proc prefspage_general {notebook} {
>       pack configure $page.extdifff.l -padx 10
>       grid x $page.extdifff $page.extdifft -sticky ew
>   
> +    ${NS}::entry $page.webbrowser -textvariable web_browser
> +    ${NS}::frame $page.webbrowserf
> +    ${NS}::label $page.webbrowserf.l -text [mc "Web browser" ]
> +    pack $page.webbrowserf.l -side left
> +    pack configure $page.webbrowserf.l -padx 10
> +    grid x $page.webbrowserf $page.webbrowser -sticky ew
> +
>       ${NS}::label $page.lgen -text [mc "General options"]
>       grid $page.lgen - -sticky w -pady 10
>       ${NS}::checkbutton $page.want_ttk -variable want_ttk \
> @@ -12310,6 +12352,7 @@ if {[tk windowingsystem] eq "win32"} {
>       set bgcolor SystemWindow
>       set fgcolor SystemWindowText
>       set selectbgcolor SystemHighlight
> +    set web_browser "cmd /c start"
>   } else {
>       set uicolor grey85
>       set uifgcolor black
> @@ -12317,6 +12360,11 @@ if {[tk windowingsystem] eq "win32"} {
>       set bgcolor white
>       set fgcolor black
>       set selectbgcolor gray85
> +    if {[tk windowingsystem] eq "aqua"} {
> +	set web_browser "open"
> +    } else {
> +	set web_browser "xdg-open"
> +    }
>   }
>   set diffcolors {red "#00a000" blue}
>   set diffcontext 3
> @@ -12390,6 +12438,7 @@ set config_variables {
>       filesepbgcolor filesepfgcolor linehoverbgcolor linehoverfgcolor
>       linehoveroutlinecolor mainheadcirclecolor workingfilescirclecolor
>       indexcirclecolor circlecolors linkfgcolor circleoutlinecolor
> +    web_browser
>   }
>   foreach var $config_variables {
>       config_init_trace $var
> 


  reply	other threads:[~2019-08-27 15:33 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-26 22:14 [PATCH] gitk: Make web links clickable Paul Mackerras
2019-08-27 15:33 ` Barret Rhoden [this message]
2019-08-27 20:32 ` Junio C Hamano
2019-08-29  0:50   ` Paul Mackerras
2019-08-29  3:46     ` Junio C Hamano
2019-08-27 21:58 ` Pratyush Yadav
2019-08-29  1:27 ` [PATCH v2] " Paul Mackerras
2019-08-29 18:32   ` Pratyush Yadav
2019-09-13 23:33     ` Paul Mackerras
2019-09-14 14:30       ` Pratyush Yadav

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=24ec7841-0996-b3d7-81b4-f48a446341ee@google.com \
    --to=brho@google.com \
    --cc=git@vger.kernel.org \
    --cc=paulus@ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).