Skip to content

Commit 748f1fa

Browse files
committed
Newline trigger events for entering different environments i.e. bash, ubuntu, etc.
1 parent 6987ea2 commit 748f1fa

File tree

4 files changed

+158
-5
lines changed

4 files changed

+158
-5
lines changed

Background-Terminal/BackgroundTerminalSettings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ public class BackgroundTerminalSettings
1515
public double PosY { get; set; }
1616
public double Width { get; set; }
1717
public double Height { get; set; }
18+
public List<NewlineTrigger> NewlineTriggers { get; set; }
1819
}
1920
}

Background-Terminal/MainWindow.xaml

Lines changed: 93 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
xmlns:tb="http://www.hardcodet.net/taskbar"
88
Title="Background Terminal"
99
Width="400"
10-
Height="230"
10+
Height="340"
1111
AllowsTransparency="True"
1212
Background="Transparent"
1313
Closed="MainWindow_Closed"
@@ -53,7 +53,7 @@
5353
</Setter>
5454
</Style>
5555

56-
<Style x:Key="KeyButton" TargetType="Button">
56+
<Style x:Key="StandardButton1" TargetType="Button">
5757
<Setter Property="Template">
5858
<Setter.Value>
5959
<ControlTemplate TargetType="Button">
@@ -178,9 +178,11 @@
178178
<RowDefinition Height="30" />
179179
<RowDefinition Height="30" />
180180
<RowDefinition Height="30" />
181+
<RowDefinition Height="10" />
182+
<RowDefinition Height="100" />
181183
<RowDefinition Height="30" />
182184
</Grid.RowDefinitions>
183-
<Border Grid.RowSpan="5" Background="#F5F5F5" />
185+
<Border Grid.RowSpan="7" Background="#F5F5F5" />
184186
<Grid Grid.Row="0" VerticalAlignment="Center">
185187
<Grid.ColumnDefinitions>
186188
<ColumnDefinition Width="1*" />
@@ -204,7 +206,7 @@
204206
Click="Key1Button_Click"
205207
FontFamily="Yu Gothic UI Light"
206208
FontSize="10"
207-
Style="{StaticResource KeyButton}" />
209+
Style="{StaticResource StandardButton1}" />
208210
<Label
209211
Grid.Column="1"
210212
Margin="0"
@@ -220,7 +222,7 @@
220222
Click="Key2Button_Click"
221223
FontFamily="Yu Gothic UI Light"
222224
FontSize="10"
223-
Style="{StaticResource KeyButton}" />
225+
Style="{StaticResource StandardButton1}" />
224226
</Grid>
225227
</Grid>
226228
<Grid Grid.Row="1">
@@ -344,6 +346,92 @@
344346
</Grid>
345347
</Grid>
346348
<Grid Grid.Row="5">
349+
<Border
350+
Height="1"
351+
Margin="10,0,10,0"
352+
BorderBrush="Gray"
353+
BorderThickness="1" />
354+
</Grid>
355+
<Grid Grid.Row="6">
356+
<Grid.RowDefinitions>
357+
<RowDefinition Height="30" />
358+
<RowDefinition Height="1*" />
359+
</Grid.RowDefinitions>
360+
<Grid.ColumnDefinitions>
361+
<ColumnDefinition Width="1*" />
362+
<ColumnDefinition Width="1*" />
363+
</Grid.ColumnDefinitions>
364+
<Label
365+
Grid.Row="0"
366+
HorizontalAlignment="Center"
367+
Content="Newline Triggers"
368+
FontFamily="Yu Gothic UI Light" />
369+
<Grid Grid.Row="0" Grid.Column="1">
370+
<Grid.ColumnDefinitions>
371+
<ColumnDefinition Width="1*" />
372+
<ColumnDefinition Width="15" />
373+
<ColumnDefinition Width="1*" />
374+
</Grid.ColumnDefinitions>
375+
<Button
376+
Margin="10,5"
377+
Click="AddNewlineTriggerButton_Click"
378+
Content="Add"
379+
FontFamily="Yu Gothic UI Light"
380+
FontSize="10"
381+
Style="{StaticResource StandardButton1}" />
382+
<Button
383+
Grid.Column="2"
384+
Margin="10,5"
385+
Click="DeleteNewlineTriggerButton_Click"
386+
Content="Delete"
387+
FontFamily="Yu Gothic UI Light"
388+
FontSize="10"
389+
Style="{StaticResource StandardButton1}" />
390+
</Grid>
391+
<ListBox
392+
x:Name="NewlineTrigger_ListBox"
393+
Grid.Row="1"
394+
Grid.ColumnSpan="2"
395+
HorizontalContentAlignment="Stretch"
396+
Background="Transparent"
397+
BorderThickness="0"
398+
ItemsSource="{Binding NewlineTriggers}"
399+
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
400+
<ListBox.ItemTemplate>
401+
<DataTemplate>
402+
<Grid Height="25">
403+
<Grid.ColumnDefinitions>
404+
<ColumnDefinition Width="1*" />
405+
<ColumnDefinition Width="1*" />
406+
<ColumnDefinition Width="1*" />
407+
</Grid.ColumnDefinitions>
408+
<TextBox
409+
Grid.Column="0"
410+
Margin="3"
411+
VerticalContentAlignment="Center"
412+
FontSize="10"
413+
PreviewMouseDown="NewlineTriggerTextBox_PreviewMouseDown"
414+
Text="{Binding TriggerCommand}" />
415+
<TextBox
416+
Grid.Column="1"
417+
Margin="3"
418+
VerticalContentAlignment="Center"
419+
FontSize="10"
420+
PreviewMouseDown="NewlineTriggerTextBox_PreviewMouseDown"
421+
Text="{Binding ExitCommand}" />
422+
<TextBox
423+
Grid.Column="2"
424+
Margin="3"
425+
VerticalContentAlignment="Center"
426+
FontSize="10"
427+
PreviewMouseDown="NewlineTriggerTextBox_PreviewMouseDown"
428+
Text="{Binding NewlineString}" />
429+
</Grid>
430+
</DataTemplate>
431+
</ListBox.ItemTemplate>
432+
</ListBox>
433+
</Grid>
434+
<Grid Grid.Row="7">
347435
<Grid.ColumnDefinitions>
348436
<ColumnDefinition Width="1*" />
349437
<ColumnDefinition Width="1" />

Background-Terminal/MainWindow.xaml.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ public partial class MainWindow : Window
4040
private Process _process;
4141

4242
private ObservableCollection<string> _terminalData = new ObservableCollection<string>();
43+
public ObservableCollection<NewlineTrigger> NewlineTriggers { get; set; }
4344

45+
private string _currentTrigger = null;
4446
private string _newlineString = Environment.NewLine;
4547

4648
private int _cmdProcessId;
@@ -118,6 +120,11 @@ public MainWindow()
118120
Width_TextBox.Text = _settings.Width.ToString();
119121
Height_TextBox.Text = _settings.Height.ToString();
120122

123+
if (_settings.NewlineTriggers == null)
124+
_settings.NewlineTriggers = new List<NewlineTrigger>();
125+
126+
NewlineTriggers = new ObservableCollection<NewlineTrigger>(_settings.NewlineTriggers);
127+
121128
// Set KeyTriggered callback delegate
122129
Win32Interop.KeyTriggered = KeyTriggered;
123130

@@ -126,6 +133,8 @@ public MainWindow()
126133

127134
// Begin terminal process
128135
RunTerminalProcessAsync();
136+
137+
DataContext = this;
129138
}
130139

131140
private void ApplySettingsToTerminalWindow()
@@ -221,6 +230,23 @@ private void SendCommand(string command, bool output = true)
221230

222231
_process.StandardInput.NewLine = _newlineString;
223232
_process.StandardInput.WriteLine(command);
233+
234+
// Check for newline trigger activations
235+
foreach (NewlineTrigger trigger in _settings.NewlineTriggers)
236+
{
237+
if (command.StartsWith(trigger.TriggerCommand))
238+
{
239+
_currentTrigger = trigger.TriggerCommand;
240+
241+
_newlineString = Regex.Unescape(trigger.NewlineString);
242+
}
243+
else if (command.StartsWith(trigger.ExitCommand) && _currentTrigger != null && _currentTrigger.Equals(trigger.TriggerCommand))
244+
{
245+
_currentTrigger = null;
246+
247+
_newlineString = Environment.NewLine;
248+
}
249+
}
224250
}
225251
}
226252

@@ -289,6 +315,22 @@ private void Key2Button_Click(object sender, RoutedEventArgs e)
289315
_awaitingKey2 = true;
290316
}
291317

318+
private void AddNewlineTriggerButton_Click(object sender, RoutedEventArgs e)
319+
{
320+
NewlineTriggers.Add(new NewlineTrigger("Trigger Command", "Exit Command", "Newline Character"));
321+
}
322+
323+
private void DeleteNewlineTriggerButton_Click(object sender, RoutedEventArgs e)
324+
{
325+
if (NewlineTrigger_ListBox.SelectedItem != null)
326+
NewlineTriggers.Remove((NewlineTrigger)NewlineTrigger_ListBox.SelectedItem);
327+
}
328+
329+
private void NewlineTriggerTextBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
330+
{
331+
NewlineTrigger_ListBox.SelectedItem = ((TextBox)sender).DataContext;
332+
}
333+
292334
private void ApplyChangesButton_Click(object sender, RoutedEventArgs e)
293335
{
294336
System.Windows.Media.Brush fontColor;
@@ -368,6 +410,8 @@ private void ApplyChangesButton_Click(object sender, RoutedEventArgs e)
368410
_settings.Width = width;
369411
_settings.Height = height;
370412

413+
_settings.NewlineTriggers = new List<NewlineTrigger>(NewlineTriggers);
414+
371415
ApplySettingsToTerminalWindow();
372416

373417
File.WriteAllText(_configPath, JsonConvert.SerializeObject(_settings));

Background-Terminal/NewlineTrigger.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace Background_Terminal
6+
{
7+
public class NewlineTrigger
8+
{
9+
public string TriggerCommand { get; set; }
10+
public string ExitCommand { get; set; }
11+
public string NewlineString { get; set; }
12+
13+
public NewlineTrigger(string triggerCommand, string exitCommand, string newlineString)
14+
{
15+
TriggerCommand = triggerCommand;
16+
ExitCommand = exitCommand;
17+
NewlineString = newlineString;
18+
}
19+
}
20+
}

0 commit comments

Comments
 (0)