Fossil SCM

Shortcuts B and SHIFT+B top copy the hash or branch name of the focused entry to clipboard.

florian 2022-08-04 03:51 timeline-keyboard-navigation
Commit f23a6d13a2d4cc6fdbbdf6f7f775cf621388ac3577da3a9498cb17870bc46b88
1 file changed +15 -1
+15 -1
--- src/graph.js
+++ src/graph.js
@@ -876,11 +876,14 @@
876876
function timelineGetRowInfo(id){
877877
var ti;
878878
for(var i=0; ti=timelineGetDataBlock(i); i++){
879879
for( var k=0; k<ti.rowinfo.length; k++ ){
880880
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 };
882885
}
883886
}
884887
return null;
885888
}
886889
function focusVisualize(id,scroll){
@@ -928,10 +931,12 @@
928931
kFRST = mSHIFT | 78 /* SHIFT+N */,
929932
kNEXT = 78 /* N */,
930933
kPREV = 77 /* M */,
931934
kLAST = mSHIFT | 77 /* SHIFT+M */,
932935
kTICK = 188 /* , */,
936
+ kCPYH = 66 /* B */,
937
+ kCPYB = mSHIFT | 66 /* SHIFT+B */,
933938
kTMLN = 74 /* J */,
934939
kVIEW = 75 /* K */,
935940
kDONE = 76 /* L */,
936941
mod = evt.altKey<<15 | evt.ctrlKey<<14 | evt.shiftKey<<13,
937942
key = ( evt.which || evt.keyCode ) | mod;
@@ -940,10 +945,12 @@
940945
case kFRST: dx = -2; break;
941946
case kNEXT: dx = -1; break;
942947
case kPREV: dx = +1; break;
943948
case kLAST: dx = +2; break;
944949
case kTICK: break;
950
+ case kCPYH: break;
951
+ case kCPYB: break;
945952
case kTMLN: break;
946953
case kVIEW: break;
947954
case kDONE: break;
948955
default: return;
949956
}
@@ -958,10 +965,17 @@
958965
var id = focusCacheGet();
959966
if( id && dx==0 ){
960967
if( key==kTICK ){
961968
var gn = document.getElementById('tln'+id.slice(1));
962969
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
+ }
963977
}
964978
else/* if( key==kTMLN || key==kVIEW )*/{
965979
var ri = timelineGetRowInfo(id);
966980
if( ri ){
967981
var page = key==kVIEW ? '/info/' : '/timeline?c=';
968982
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button