@@ -11,9 +11,17 @@ import { fetchwithRequestOptions } from "core/util/fetchWithOptions";
11
11
import { GlobalContext } from "core/util/GlobalContext" ;
12
12
import { getConfigJsonPath , getDevDataFilePath } from "core/util/paths" ;
13
13
import readLastLines from "read-last-lines" ;
14
+ import {
15
+ StatusBarStatus ,
16
+ getStatusBarStatus ,
17
+ getStatusBarStatusFromQuickPickItemLabel ,
18
+ quickPickStatusText ,
19
+ setupStatusBar ,
20
+ } from "./autocomplete/statusBar" ;
14
21
import { ContinueGUIWebviewViewProvider } from "./debugPanel" ;
15
22
import { DiffManager } from "./diff/horizontal" ;
16
23
import { VerticalPerLineDiffManager } from "./diff/verticalPerLine/manager" ;
24
+ import { Battery } from "./util/battery" ;
17
25
import { getPlatform } from "./util/util" ;
18
26
import type { VsCodeWebviewProtocol } from "./webviewProtocol" ;
19
27
@@ -147,6 +155,7 @@ const commandsMap: (
147
155
diffManager : DiffManager ,
148
156
verticalDiffManager : VerticalPerLineDiffManager ,
149
157
continueServerClientPromise : Promise < ContinueServerClient > ,
158
+ battery : Battery ,
150
159
) => { [ command : string ] : ( ...args : any ) => any } = (
151
160
ide ,
152
161
extensionContext ,
@@ -155,6 +164,7 @@ const commandsMap: (
155
164
diffManager ,
156
165
verticalDiffManager ,
157
166
continueServerClientPromise ,
167
+ battery ,
158
168
) => {
159
169
async function streamInlineEdit (
160
170
promptName : keyof ContextMenuConfig ,
@@ -541,27 +551,72 @@ const commandsMap: (
541
551
"continue.toggleTabAutocompleteEnabled" : ( ) => {
542
552
const config = vscode . workspace . getConfiguration ( "continue" ) ;
543
553
const enabled = config . get ( "enableTabAutocomplete" ) ;
544
- config . update (
545
- "enableTabAutocomplete" ,
546
- ! enabled ,
547
- vscode . ConfigurationTarget . Global ,
554
+ const pauseOnBattery = config . get < boolean > (
555
+ "pauseTabAutocompleteOnBattery" ,
548
556
) ;
557
+ if ( ! pauseOnBattery || battery . isACConnected ( ) ) {
558
+ config . update (
559
+ "enableTabAutocomplete" ,
560
+ ! enabled ,
561
+ vscode . ConfigurationTarget . Global ,
562
+ ) ;
563
+ } else {
564
+ if ( enabled ) {
565
+ const paused = getStatusBarStatus ( ) === StatusBarStatus . Paused ;
566
+ if ( paused ) {
567
+ setupStatusBar ( StatusBarStatus . Enabled ) ;
568
+ } else {
569
+ config . update (
570
+ "enableTabAutocomplete" ,
571
+ false ,
572
+ vscode . ConfigurationTarget . Global ,
573
+ ) ;
574
+ }
575
+ } else {
576
+ setupStatusBar ( StatusBarStatus . Paused ) ;
577
+ config . update (
578
+ "enableTabAutocomplete" ,
579
+ true ,
580
+ vscode . ConfigurationTarget . Global ,
581
+ ) ;
582
+ }
583
+ }
549
584
} ,
550
585
"continue.openTabAutocompleteConfigMenu" : async ( ) => {
551
586
const config = vscode . workspace . getConfiguration ( "continue" ) ;
552
- const enabled = config . get ( "enableTabAutocomplete" ) ;
553
587
const quickPick = vscode . window . createQuickPick ( ) ;
554
588
const selected = new GlobalContext ( ) . get ( "selectedTabAutocompleteModel" ) ;
555
589
const autocompleteModelTitles = ( (
556
590
await configHandler . loadConfig ( )
557
591
) . tabAutocompleteModels
558
592
?. map ( ( model ) => model . title )
559
593
. filter ( ( t ) => t !== undefined ) || [ ] ) as string [ ] ;
594
+
595
+ // Toggle between Disabled, Paused, and Enabled
596
+ const pauseOnBattery =
597
+ config . get < boolean > ( "pauseTabAutocompleteOnBattery" ) &&
598
+ ! battery . isACConnected ( ) ;
599
+ const currentStatus = getStatusBarStatus ( ) ;
600
+
601
+ let targetStatus : StatusBarStatus | undefined ;
602
+ if ( pauseOnBattery ) {
603
+ // Cycle from Disabled -> Paused -> Enabled
604
+ targetStatus =
605
+ currentStatus === StatusBarStatus . Paused
606
+ ? StatusBarStatus . Enabled
607
+ : currentStatus === StatusBarStatus . Disabled
608
+ ? StatusBarStatus . Paused
609
+ : StatusBarStatus . Disabled ;
610
+ } else {
611
+ // Toggle between Disabled and Enabled
612
+ targetStatus =
613
+ currentStatus === StatusBarStatus . Disabled
614
+ ? StatusBarStatus . Enabled
615
+ : StatusBarStatus . Disabled ;
616
+ }
560
617
quickPick . items = [
561
618
{
562
- label : enabled
563
- ? "$(check) Disable autocomplete"
564
- : "$(circle-slash) Enable autocomplete" ,
619
+ label : quickPickStatusText ( targetStatus ) ,
565
620
} ,
566
621
{
567
622
label : "$(gear) Configure autocomplete options" ,
@@ -580,16 +635,14 @@ const commandsMap: (
580
635
] ;
581
636
quickPick . onDidAccept ( ( ) => {
582
637
const selectedOption = quickPick . selectedItems [ 0 ] . label ;
583
- if ( selectedOption === "$(circle-slash) Enable autocomplete" ) {
584
- config . update (
585
- "enableTabAutocomplete" ,
586
- true ,
587
- vscode . ConfigurationTarget . Global ,
588
- ) ;
589
- } else if ( selectedOption === "$(check) Disable autocomplete" ) {
638
+ const targetStatus =
639
+ getStatusBarStatusFromQuickPickItemLabel ( selectedOption ) ;
640
+
641
+ if ( targetStatus !== undefined ) {
642
+ setupStatusBar ( targetStatus ) ;
590
643
config . update (
591
644
"enableTabAutocomplete" ,
592
- false ,
645
+ targetStatus === StatusBarStatus . Enabled ,
593
646
vscode . ConfigurationTarget . Global ,
594
647
) ;
595
648
} else if (
@@ -635,6 +688,7 @@ export function registerAllCommands(
635
688
diffManager : DiffManager ,
636
689
verticalDiffManager : VerticalPerLineDiffManager ,
637
690
continueServerClientPromise : Promise < ContinueServerClient > ,
691
+ battery : Battery ,
638
692
) {
639
693
for ( const [ command , callback ] of Object . entries (
640
694
commandsMap (
@@ -645,6 +699,7 @@ export function registerAllCommands(
645
699
diffManager ,
646
700
verticalDiffManager ,
647
701
continueServerClientPromise ,
702
+ battery ,
648
703
) ,
649
704
) ) {
650
705
context . subscriptions . push (
0 commit comments