Fossil SCM
Shortcuts B and SHIFT+B top copy the hash or branch name of the focused entry to clipboard.
Commit
f23a6d13a2d4cc6fdbbdf6f7f775cf621388ac3577da3a9498cb17870bc46b88
Parent
15f943f0c2f062c…
1 file changed
+15
-1
+15
-1
| --- src/graph.js | ||
| +++ src/graph.js | ||
| @@ -876,11 +876,14 @@ | ||
| 876 | 876 | function timelineGetRowInfo(id){ |
| 877 | 877 | var ti; |
| 878 | 878 | for(var i=0; ti=timelineGetDataBlock(i); i++){ |
| 879 | 879 | for( var k=0; k<ti.rowinfo.length; k++ ){ |
| 880 | 880 | if( id=='m' + ti.rowinfo[k].id ) return { |
| 881 | - 'baseurl': ti.baseUrl, 'hash': ti.rowinfo[k].h }; | |
| 881 | + 'baseurl': ti.baseUrl, | |
| 882 | + 'hashdigits': ti.hashDigits, | |
| 883 | + 'hash': ti.rowinfo[k].h, | |
| 884 | + 'branch': ti.rowinfo[k].br }; | |
| 882 | 885 | } |
| 883 | 886 | } |
| 884 | 887 | return null; |
| 885 | 888 | } |
| 886 | 889 | function focusVisualize(id,scroll){ |
| @@ -928,10 +931,12 @@ | ||
| 928 | 931 | kFRST = mSHIFT | 78 /* SHIFT+N */, |
| 929 | 932 | kNEXT = 78 /* N */, |
| 930 | 933 | kPREV = 77 /* M */, |
| 931 | 934 | kLAST = mSHIFT | 77 /* SHIFT+M */, |
| 932 | 935 | kTICK = 188 /* , */, |
| 936 | + kCPYH = 66 /* B */, | |
| 937 | + kCPYB = mSHIFT | 66 /* SHIFT+B */, | |
| 933 | 938 | kTMLN = 74 /* J */, |
| 934 | 939 | kVIEW = 75 /* K */, |
| 935 | 940 | kDONE = 76 /* L */, |
| 936 | 941 | mod = evt.altKey<<15 | evt.ctrlKey<<14 | evt.shiftKey<<13, |
| 937 | 942 | key = ( evt.which || evt.keyCode ) | mod; |
| @@ -940,10 +945,12 @@ | ||
| 940 | 945 | case kFRST: dx = -2; break; |
| 941 | 946 | case kNEXT: dx = -1; break; |
| 942 | 947 | case kPREV: dx = +1; break; |
| 943 | 948 | case kLAST: dx = +2; break; |
| 944 | 949 | case kTICK: break; |
| 950 | + case kCPYH: break; | |
| 951 | + case kCPYB: break; | |
| 945 | 952 | case kTMLN: break; |
| 946 | 953 | case kVIEW: break; |
| 947 | 954 | case kDONE: break; |
| 948 | 955 | default: return; |
| 949 | 956 | } |
| @@ -958,10 +965,17 @@ | ||
| 958 | 965 | var id = focusCacheGet(); |
| 959 | 966 | if( id && dx==0 ){ |
| 960 | 967 | if( key==kTICK ){ |
| 961 | 968 | var gn = document.getElementById('tln'+id.slice(1)); |
| 962 | 969 | if( gn ) gn.click(); |
| 970 | + } | |
| 971 | + else if( key==kCPYH || key==kCPYB ){ | |
| 972 | + var ri = timelineGetRowInfo(id); | |
| 973 | + if( ri ){ | |
| 974 | + copyTextToClipboard( | |
| 975 | + key==kCPYH ? ri.hash.slice(0,ri.hashdigits) : ri.branch); | |
| 976 | + } | |
| 963 | 977 | } |
| 964 | 978 | else/* if( key==kTMLN || key==kVIEW )*/{ |
| 965 | 979 | var ri = timelineGetRowInfo(id); |
| 966 | 980 | if( ri ){ |
| 967 | 981 | var page = key==kVIEW ? '/info/' : '/timeline?c='; |
| 968 | 982 |
| --- src/graph.js | |
| +++ src/graph.js | |
| @@ -876,11 +876,14 @@ | |
| 876 | function timelineGetRowInfo(id){ |
| 877 | var ti; |
| 878 | for(var i=0; ti=timelineGetDataBlock(i); i++){ |
| 879 | for( var k=0; k<ti.rowinfo.length; k++ ){ |
| 880 | if( id=='m' + ti.rowinfo[k].id ) return { |
| 881 | 'baseurl': ti.baseUrl, 'hash': ti.rowinfo[k].h }; |
| 882 | } |
| 883 | } |
| 884 | return null; |
| 885 | } |
| 886 | function focusVisualize(id,scroll){ |
| @@ -928,10 +931,12 @@ | |
| 928 | kFRST = mSHIFT | 78 /* SHIFT+N */, |
| 929 | kNEXT = 78 /* N */, |
| 930 | kPREV = 77 /* M */, |
| 931 | kLAST = mSHIFT | 77 /* SHIFT+M */, |
| 932 | kTICK = 188 /* , */, |
| 933 | kTMLN = 74 /* J */, |
| 934 | kVIEW = 75 /* K */, |
| 935 | kDONE = 76 /* L */, |
| 936 | mod = evt.altKey<<15 | evt.ctrlKey<<14 | evt.shiftKey<<13, |
| 937 | key = ( evt.which || evt.keyCode ) | mod; |
| @@ -940,10 +945,12 @@ | |
| 940 | case kFRST: dx = -2; break; |
| 941 | case kNEXT: dx = -1; break; |
| 942 | case kPREV: dx = +1; break; |
| 943 | case kLAST: dx = +2; break; |
| 944 | case kTICK: break; |
| 945 | case kTMLN: break; |
| 946 | case kVIEW: break; |
| 947 | case kDONE: break; |
| 948 | default: return; |
| 949 | } |
| @@ -958,10 +965,17 @@ | |
| 958 | var id = focusCacheGet(); |
| 959 | if( id && dx==0 ){ |
| 960 | if( key==kTICK ){ |
| 961 | var gn = document.getElementById('tln'+id.slice(1)); |
| 962 | if( gn ) gn.click(); |
| 963 | } |
| 964 | else/* if( key==kTMLN || key==kVIEW )*/{ |
| 965 | var ri = timelineGetRowInfo(id); |
| 966 | if( ri ){ |
| 967 | var page = key==kVIEW ? '/info/' : '/timeline?c='; |
| 968 |
| --- src/graph.js | |
| +++ src/graph.js | |
| @@ -876,11 +876,14 @@ | |
| 876 | function timelineGetRowInfo(id){ |
| 877 | var ti; |
| 878 | for(var i=0; ti=timelineGetDataBlock(i); i++){ |
| 879 | for( var k=0; k<ti.rowinfo.length; k++ ){ |
| 880 | if( id=='m' + ti.rowinfo[k].id ) return { |
| 881 | 'baseurl': ti.baseUrl, |
| 882 | 'hashdigits': ti.hashDigits, |
| 883 | 'hash': ti.rowinfo[k].h, |
| 884 | 'branch': ti.rowinfo[k].br }; |
| 885 | } |
| 886 | } |
| 887 | return null; |
| 888 | } |
| 889 | function focusVisualize(id,scroll){ |
| @@ -928,10 +931,12 @@ | |
| 931 | kFRST = mSHIFT | 78 /* SHIFT+N */, |
| 932 | kNEXT = 78 /* N */, |
| 933 | kPREV = 77 /* M */, |
| 934 | kLAST = mSHIFT | 77 /* SHIFT+M */, |
| 935 | kTICK = 188 /* , */, |
| 936 | kCPYH = 66 /* B */, |
| 937 | kCPYB = mSHIFT | 66 /* SHIFT+B */, |
| 938 | kTMLN = 74 /* J */, |
| 939 | kVIEW = 75 /* K */, |
| 940 | kDONE = 76 /* L */, |
| 941 | mod = evt.altKey<<15 | evt.ctrlKey<<14 | evt.shiftKey<<13, |
| 942 | key = ( evt.which || evt.keyCode ) | mod; |
| @@ -940,10 +945,12 @@ | |
| 945 | case kFRST: dx = -2; break; |
| 946 | case kNEXT: dx = -1; break; |
| 947 | case kPREV: dx = +1; break; |
| 948 | case kLAST: dx = +2; break; |
| 949 | case kTICK: break; |
| 950 | case kCPYH: break; |
| 951 | case kCPYB: break; |
| 952 | case kTMLN: break; |
| 953 | case kVIEW: break; |
| 954 | case kDONE: break; |
| 955 | default: return; |
| 956 | } |
| @@ -958,10 +965,17 @@ | |
| 965 | var id = focusCacheGet(); |
| 966 | if( id && dx==0 ){ |
| 967 | if( key==kTICK ){ |
| 968 | var gn = document.getElementById('tln'+id.slice(1)); |
| 969 | if( gn ) gn.click(); |
| 970 | } |
| 971 | else if( key==kCPYH || key==kCPYB ){ |
| 972 | var ri = timelineGetRowInfo(id); |
| 973 | if( ri ){ |
| 974 | copyTextToClipboard( |
| 975 | key==kCPYH ? ri.hash.slice(0,ri.hashdigits) : ri.branch); |
| 976 | } |
| 977 | } |
| 978 | else/* if( key==kTMLN || key==kVIEW )*/{ |
| 979 | var ri = timelineGetRowInfo(id); |
| 980 | if( ri ){ |
| 981 | var page = key==kVIEW ? '/info/' : '/timeline?c='; |
| 982 |