Fossil SCM
Shortcut SHIFT+J to view the timeline of the focused entry filtered by branch. Add the 'm' query parameter to /timeline links.
Commit
7bbd1b99183068b04c9344ed6646f3ed11875f50de4eba4d7803dde3f5e4f3de
Parent
fff09df34ff57b8…
2 files changed
+20
-3
+1
+20
-3
| --- src/graph.js | ||
| +++ src/graph.js | ||
| @@ -899,10 +899,11 @@ | ||
| 899 | 899 | var ti; |
| 900 | 900 | for(var i=0; ti=timelineGetDataBlock(i); i++){ |
| 901 | 901 | for( var k=0; k<ti.rowinfo.length; k++ ){ |
| 902 | 902 | if( id=='m' + ti.rowinfo[k].id ) return { |
| 903 | 903 | 'baseurl': ti.baseUrl, |
| 904 | + 'filediff': ti.fileDiff, | |
| 904 | 905 | 'hashdigits': ti.hashDigits, |
| 905 | 906 | 'hash': ti.rowinfo[k].h, |
| 906 | 907 | 'branch': ti.rowinfo[k].br }; |
| 907 | 908 | } |
| 908 | 909 | } |
| @@ -966,10 +967,11 @@ | ||
| 966 | 967 | kTICK = 188 /* , */, |
| 967 | 968 | kUNTK = mSHIFT | 188 /* , */, |
| 968 | 969 | kCPYH = 66 /* B */, |
| 969 | 970 | kCPYB = mSHIFT | 66 /* SHIFT+B */, |
| 970 | 971 | kTMLN = 74 /* J */, |
| 972 | + kTMLB = mSHIFT | 74 /* J */, | |
| 971 | 973 | kVIEW = 75 /* K */, |
| 972 | 974 | kDONE = 27 /* ESC */, |
| 973 | 975 | mod = evt.altKey<<15 | evt.ctrlKey<<14 | evt.shiftKey<<13, |
| 974 | 976 | key = ( evt.which || evt.keyCode ) | mod; |
| 975 | 977 | var dx = 0; |
| @@ -982,10 +984,11 @@ | ||
| 982 | 984 | case kTICK: break; |
| 983 | 985 | case kUNTK: break; |
| 984 | 986 | case kCPYH: break; |
| 985 | 987 | case kCPYB: break; |
| 986 | 988 | case kTMLN: break; |
| 989 | + case kTMLB: break; | |
| 987 | 990 | case kVIEW: break; |
| 988 | 991 | case kDONE: break; |
| 989 | 992 | default: return; |
| 990 | 993 | } |
| 991 | 994 | if( key==kUNTK ){ |
| @@ -1030,15 +1033,29 @@ | ||
| 1030 | 1033 | } |
| 1031 | 1034 | else if( key==kTICK ){ |
| 1032 | 1035 | var gn = document.getElementById('tln'+id.slice(1)); |
| 1033 | 1036 | if( gn ) gn.click(); |
| 1034 | 1037 | } |
| 1035 | - else/* if( key==kTMLN || key==kVIEW )*/{ | |
| 1038 | + else/* if( key==kTMLN || key==kTMLB || key==kVIEW )*/{ | |
| 1036 | 1039 | var ri = timelineGetRowInfo(id); |
| 1037 | 1040 | 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; | |
| 1040 | 1057 | if( href!=location.href.slice(-href.length) ){ |
| 1041 | 1058 | location.href = href; |
| 1042 | 1059 | return; |
| 1043 | 1060 | } |
| 1044 | 1061 | } |
| 1045 | 1062 |
| --- 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 |
+1
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -1640,10 +1640,11 @@ | ||
| 1640 | 1640 | ** , Tick/untick the node of the focused entry. |
| 1641 | 1641 | ** ; Untick the nodes of all entries. |
| 1642 | 1642 | ** b Copy the commit hash of the focused entry to clipboard. |
| 1643 | 1643 | ** B Copy the branch name of the focused entry to clipboard. |
| 1644 | 1644 | ** j View timeline of focused entry. |
| 1645 | +** J View timeline of focused entry filtered by branch. | |
| 1645 | 1646 | ** k View details of focused entry. |
| 1646 | 1647 | ** ESC Disable keyboard navigation mode. |
| 1647 | 1648 | */ |
| 1648 | 1649 | void page_timeline(void){ |
| 1649 | 1650 | Stmt q; /* Query used to generate the timeline */ |
| 1650 | 1651 |
| --- 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 |