Fossil SCM

Shortcut SHIFT+J to view the timeline of the focused entry filtered by branch. Add the 'm' query parameter to /timeline links.

florian 2022-08-05 06:22 timeline-keyboard-navigation
Commit 7bbd1b99183068b04c9344ed6646f3ed11875f50de4eba4d7803dde3f5e4f3de
2 files changed +20 -3 +1
+20 -3
--- src/graph.js
+++ src/graph.js
@@ -899,10 +899,11 @@
899899
var ti;
900900
for(var i=0; ti=timelineGetDataBlock(i); i++){
901901
for( var k=0; k<ti.rowinfo.length; k++ ){
902902
if( id=='m' + ti.rowinfo[k].id ) return {
903903
'baseurl': ti.baseUrl,
904
+ 'filediff': ti.fileDiff,
904905
'hashdigits': ti.hashDigits,
905906
'hash': ti.rowinfo[k].h,
906907
'branch': ti.rowinfo[k].br };
907908
}
908909
}
@@ -966,10 +967,11 @@
966967
kTICK = 188 /* , */,
967968
kUNTK = mSHIFT | 188 /* , */,
968969
kCPYH = 66 /* B */,
969970
kCPYB = mSHIFT | 66 /* SHIFT+B */,
970971
kTMLN = 74 /* J */,
972
+ kTMLB = mSHIFT | 74 /* J */,
971973
kVIEW = 75 /* K */,
972974
kDONE = 27 /* ESC */,
973975
mod = evt.altKey<<15 | evt.ctrlKey<<14 | evt.shiftKey<<13,
974976
key = ( evt.which || evt.keyCode ) | mod;
975977
var dx = 0;
@@ -982,10 +984,11 @@
982984
case kTICK: break;
983985
case kUNTK: break;
984986
case kCPYH: break;
985987
case kCPYB: break;
986988
case kTMLN: break;
989
+ case kTMLB: break;
987990
case kVIEW: break;
988991
case kDONE: break;
989992
default: return;
990993
}
991994
if( key==kUNTK ){
@@ -1030,15 +1033,29 @@
10301033
}
10311034
else if( key==kTICK ){
10321035
var gn = document.getElementById('tln'+id.slice(1));
10331036
if( gn ) gn.click();
10341037
}
1035
- else/* if( key==kTMLN || key==kVIEW )*/{
1038
+ else/* if( key==kTMLN || key==kTMLB || key==kVIEW )*/{
10361039
var ri = timelineGetRowInfo(id);
10371040
if( ri ){
1038
- var page = key==kVIEW ? '/info/' : '/timeline?c=';
1039
- var href = ri.baseurl + page + encodeURIComponent(ri.hash);
1041
+ var hh = encodeURIComponent(ri.hash.slice(0,ri.hashdigits));
1042
+ var br = encodeURIComponent(ri.branch);
1043
+ var page;
1044
+ switch( key ){
1045
+ case kTMLN:
1046
+ page = '/timeline?m&c=' + hh;
1047
+ break;
1048
+ case kTMLB:
1049
+ page = '/timeline?r=' + br +
1050
+ ( ri.filediff ? '&m&cf=' : '&m&c=' ) + hh;
1051
+ break;
1052
+ case kVIEW:
1053
+ page = '/info/' + hh;
1054
+ break;
1055
+ }
1056
+ var href = ri.baseurl + page;
10401057
if( href!=location.href.slice(-href.length) ){
10411058
location.href = href;
10421059
return;
10431060
}
10441061
}
10451062
--- src/graph.js
+++ src/graph.js
@@ -899,10 +899,11 @@
899 var ti;
900 for(var i=0; ti=timelineGetDataBlock(i); i++){
901 for( var k=0; k<ti.rowinfo.length; k++ ){
902 if( id=='m' + ti.rowinfo[k].id ) return {
903 'baseurl': ti.baseUrl,
 
904 'hashdigits': ti.hashDigits,
905 'hash': ti.rowinfo[k].h,
906 'branch': ti.rowinfo[k].br };
907 }
908 }
@@ -966,10 +967,11 @@
966 kTICK = 188 /* , */,
967 kUNTK = mSHIFT | 188 /* , */,
968 kCPYH = 66 /* B */,
969 kCPYB = mSHIFT | 66 /* SHIFT+B */,
970 kTMLN = 74 /* J */,
 
971 kVIEW = 75 /* K */,
972 kDONE = 27 /* ESC */,
973 mod = evt.altKey<<15 | evt.ctrlKey<<14 | evt.shiftKey<<13,
974 key = ( evt.which || evt.keyCode ) | mod;
975 var dx = 0;
@@ -982,10 +984,11 @@
982 case kTICK: break;
983 case kUNTK: break;
984 case kCPYH: break;
985 case kCPYB: break;
986 case kTMLN: break;
 
987 case kVIEW: break;
988 case kDONE: break;
989 default: return;
990 }
991 if( key==kUNTK ){
@@ -1030,15 +1033,29 @@
1030 }
1031 else if( key==kTICK ){
1032 var gn = document.getElementById('tln'+id.slice(1));
1033 if( gn ) gn.click();
1034 }
1035 else/* if( key==kTMLN || key==kVIEW )*/{
1036 var ri = timelineGetRowInfo(id);
1037 if( ri ){
1038 var page = key==kVIEW ? '/info/' : '/timeline?c=';
1039 var href = ri.baseurl + page + encodeURIComponent(ri.hash);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1040 if( href!=location.href.slice(-href.length) ){
1041 location.href = href;
1042 return;
1043 }
1044 }
1045
--- src/graph.js
+++ src/graph.js
@@ -899,10 +899,11 @@
899 var ti;
900 for(var i=0; ti=timelineGetDataBlock(i); i++){
901 for( var k=0; k<ti.rowinfo.length; k++ ){
902 if( id=='m' + ti.rowinfo[k].id ) return {
903 'baseurl': ti.baseUrl,
904 'filediff': ti.fileDiff,
905 'hashdigits': ti.hashDigits,
906 'hash': ti.rowinfo[k].h,
907 'branch': ti.rowinfo[k].br };
908 }
909 }
@@ -966,10 +967,11 @@
967 kTICK = 188 /* , */,
968 kUNTK = mSHIFT | 188 /* , */,
969 kCPYH = 66 /* B */,
970 kCPYB = mSHIFT | 66 /* SHIFT+B */,
971 kTMLN = 74 /* J */,
972 kTMLB = mSHIFT | 74 /* J */,
973 kVIEW = 75 /* K */,
974 kDONE = 27 /* ESC */,
975 mod = evt.altKey<<15 | evt.ctrlKey<<14 | evt.shiftKey<<13,
976 key = ( evt.which || evt.keyCode ) | mod;
977 var dx = 0;
@@ -982,10 +984,11 @@
984 case kTICK: break;
985 case kUNTK: break;
986 case kCPYH: break;
987 case kCPYB: break;
988 case kTMLN: break;
989 case kTMLB: break;
990 case kVIEW: break;
991 case kDONE: break;
992 default: return;
993 }
994 if( key==kUNTK ){
@@ -1030,15 +1033,29 @@
1033 }
1034 else if( key==kTICK ){
1035 var gn = document.getElementById('tln'+id.slice(1));
1036 if( gn ) gn.click();
1037 }
1038 else/* if( key==kTMLN || key==kTMLB || key==kVIEW )*/{
1039 var ri = timelineGetRowInfo(id);
1040 if( ri ){
1041 var hh = encodeURIComponent(ri.hash.slice(0,ri.hashdigits));
1042 var br = encodeURIComponent(ri.branch);
1043 var page;
1044 switch( key ){
1045 case kTMLN:
1046 page = '/timeline?m&c=' + hh;
1047 break;
1048 case kTMLB:
1049 page = '/timeline?r=' + br +
1050 ( ri.filediff ? '&m&cf=' : '&m&c=' ) + hh;
1051 break;
1052 case kVIEW:
1053 page = '/info/' + hh;
1054 break;
1055 }
1056 var href = ri.baseurl + page;
1057 if( href!=location.href.slice(-href.length) ){
1058 location.href = href;
1059 return;
1060 }
1061 }
1062
--- src/timeline.c
+++ src/timeline.c
@@ -1640,10 +1640,11 @@
16401640
** , Tick/untick the node of the focused entry.
16411641
** ; Untick the nodes of all entries.
16421642
** b Copy the commit hash of the focused entry to clipboard.
16431643
** B Copy the branch name of the focused entry to clipboard.
16441644
** j View timeline of focused entry.
1645
+** J View timeline of focused entry filtered by branch.
16451646
** k View details of focused entry.
16461647
** ESC Disable keyboard navigation mode.
16471648
*/
16481649
void page_timeline(void){
16491650
Stmt q; /* Query used to generate the timeline */
16501651
--- src/timeline.c
+++ src/timeline.c
@@ -1640,10 +1640,11 @@
1640 ** , Tick/untick the node of the focused entry.
1641 ** ; Untick the nodes of all entries.
1642 ** b Copy the commit hash of the focused entry to clipboard.
1643 ** B Copy the branch name of the focused entry to clipboard.
1644 ** j View timeline of focused entry.
 
1645 ** k View details of focused entry.
1646 ** ESC Disable keyboard navigation mode.
1647 */
1648 void page_timeline(void){
1649 Stmt q; /* Query used to generate the timeline */
1650
--- src/timeline.c
+++ src/timeline.c
@@ -1640,10 +1640,11 @@
1640 ** , Tick/untick the node of the focused entry.
1641 ** ; Untick the nodes of all entries.
1642 ** b Copy the commit hash of the focused entry to clipboard.
1643 ** B Copy the branch name of the focused entry to clipboard.
1644 ** j View timeline of focused entry.
1645 ** J View timeline of focused entry filtered by branch.
1646 ** k View details of focused entry.
1647 ** ESC Disable keyboard navigation mode.
1648 */
1649 void page_timeline(void){
1650 Stmt q; /* Query used to generate the timeline */
1651

Keyboard Shortcuts

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