Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 266c6ee507 | |||
| 2954cb8678 | |||
| 4b75381cb9 | |||
| 90ce361ea5 | |||
| 508a1c48e3 | |||
| f98471e4f4 | |||
| 209ede7a1a | |||
| 245a56d270 | |||
| 89f4b0aeba | |||
| 962e3632bb | |||
| 98264b2a3c | |||
| b832ba5f8f | |||
| 43281e047d | |||
| 21c3a7c7c0 | |||
| b0e2eda4bb | |||
| d652ec7c04 | |||
| 63bb7f7316 | |||
| 12c615b62c | |||
| 99c20fa8de | |||
| e519d87193 | |||
| 7601f829bc | |||
| 84448f7d46 | |||
| 7f056036d0 | |||
| c8e70f41bc |
@ -15,6 +15,9 @@ jobs:
|
|||||||
run: echo "${LOCIP} gitea.comnenos" >> /etc/hosts
|
run: echo "${LOCIP} gitea.comnenos" >> /etc/hosts
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
fetch-tags: true
|
||||||
|
|
||||||
- name: Install Build Dependencies
|
- name: Install Build Dependencies
|
||||||
run: |
|
run: |
|
||||||
@ -92,6 +95,21 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
VERSION=${GITHUB_REF#refs/tags/}
|
VERSION=${GITHUB_REF#refs/tags/}
|
||||||
|
|
||||||
|
# Explicitly fetch the tag with annotation
|
||||||
|
echo "Fetching tag ${VERSION} with annotation..."
|
||||||
|
git fetch origin tag ${VERSION} --force
|
||||||
|
|
||||||
|
# Get the tag annotation message (not the commit message)
|
||||||
|
echo "Extracting tag annotation..."
|
||||||
|
TAG_MESSAGE=$(git cat-file tag ${VERSION} | sed '1,/^$/d')
|
||||||
|
echo "Tag annotation: ${TAG_MESSAGE}"
|
||||||
|
|
||||||
|
# Create release body
|
||||||
|
RELEASE_BODY=$(printf "%s\n\n## Downloads\n\n### Linux\n- **AppImage**: Portable, single-file executable (no installation needed)\n- **Tarball**: Extract and run \`sudo ./install.sh\` to install\n\n### Windows\n- **Zip**: Extract and run \`NotePad.exe\`" "$TAG_MESSAGE")
|
||||||
|
|
||||||
|
# Escape the full body for JSON
|
||||||
|
RELEASE_BODY_JSON=$(printf '%s' "$RELEASE_BODY" | sed 's/"/\\"/g' | sed ':a;N;$!ba;s/\n/\\n/g')
|
||||||
|
|
||||||
# Create release
|
# Create release
|
||||||
curl -X POST "https://repos.gmgauthier.com/api/v1/repos/${GITHUB_REPOSITORY}/releases" \
|
curl -X POST "https://repos.gmgauthier.com/api/v1/repos/${GITHUB_REPOSITORY}/releases" \
|
||||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||||
@ -99,7 +117,7 @@ jobs:
|
|||||||
-d "{
|
-d "{
|
||||||
\"tag_name\": \"${VERSION}\",
|
\"tag_name\": \"${VERSION}\",
|
||||||
\"name\": \"NotePad ${VERSION}\",
|
\"name\": \"NotePad ${VERSION}\",
|
||||||
\"body\": \"Release ${VERSION}\n\n## Downloads\n\n### Linux\n- **AppImage**: Portable, single-file executable (no installation needed)\n- **Tarball**: Extract and run \`sudo ./install.sh\` to install\n\n### Windows\n- **Zip**: Extract and run \`NotePad.exe\`\"
|
\"body\": \"${RELEASE_BODY_JSON}\"
|
||||||
}" > release_response.json
|
}" > release_response.json
|
||||||
|
|
||||||
RELEASE_ID=$(cat release_response.json | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2)
|
RELEASE_ID=$(cat release_response.json | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2)
|
||||||
|
|||||||
@ -15,7 +15,12 @@ public partial class App : Application
|
|||||||
{
|
{
|
||||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
{
|
{
|
||||||
desktop.MainWindow = new MainWindow();
|
string? fileToOpen = null;
|
||||||
|
if (desktop.Args?.Length > 0)
|
||||||
|
{
|
||||||
|
fileToOpen = desktop.Args[0];
|
||||||
|
}
|
||||||
|
desktop.MainWindow = new MainWindow(fileToOpen);
|
||||||
}
|
}
|
||||||
|
|
||||||
base.OnFrameworkInitializationCompleted();
|
base.OnFrameworkInitializationCompleted();
|
||||||
|
|||||||
@ -4,6 +4,27 @@
|
|||||||
Title="Untitled - Notepad"
|
Title="Untitled - Notepad"
|
||||||
Width="600" Height="400">
|
Width="600" Height="400">
|
||||||
|
|
||||||
|
<Window.Styles>
|
||||||
|
<Style Selector="Menu">
|
||||||
|
<Setter Property="Background" Value="#D3D3D3"/>
|
||||||
|
</Style>
|
||||||
|
<Style Selector="MenuItem">
|
||||||
|
<Setter Property="Background" Value="#D3D3D3"/>
|
||||||
|
<Setter Property="Foreground" Value="Black"/>
|
||||||
|
</Style>
|
||||||
|
<Style Selector="MenuItem:pointerover /template/ Border#PART_LayoutRoot">
|
||||||
|
<Setter Property="Background" Value="#A9A9A9"/>
|
||||||
|
</Style>
|
||||||
|
<Style Selector="MenuItem:open /template/ Popup#PART_Popup > Border">
|
||||||
|
<Setter Property="Background" Value="#D3D3D3"/>
|
||||||
|
<Setter Property="BorderBrush" Value="#A9A9A9"/>
|
||||||
|
<Setter Property="BorderThickness" Value="1"/>
|
||||||
|
</Style>
|
||||||
|
<Style Selector="Separator">
|
||||||
|
<Setter Property="Background" Value="#A9A9A9"/>
|
||||||
|
</Style>
|
||||||
|
</Window.Styles>
|
||||||
|
|
||||||
<DockPanel>
|
<DockPanel>
|
||||||
<!-- Menu Bar -->
|
<!-- Menu Bar -->
|
||||||
<Menu DockPanel.Dock="Top">
|
<Menu DockPanel.Dock="Top">
|
||||||
@ -29,7 +50,7 @@
|
|||||||
<MenuItem Header="F_ormat">
|
<MenuItem Header="F_ormat">
|
||||||
<MenuItem Header="_Word Wrap" x:Name="WordWrapMenuItem" Click="OnWordWrapToggle">
|
<MenuItem Header="_Word Wrap" x:Name="WordWrapMenuItem" Click="OnWordWrapToggle">
|
||||||
<MenuItem.Icon>
|
<MenuItem.Icon>
|
||||||
<CheckBox x:Name="WordWrapCheckBox" IsChecked="True" IsHitTestVisible="False"/>
|
<CheckBox x:Name="WordWrapCheckBox" IsChecked="False" IsHitTestVisible="False"/>
|
||||||
</MenuItem.Icon>
|
</MenuItem.Icon>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
@ -43,7 +64,7 @@
|
|||||||
<TextBox x:Name="EditorTextBox"
|
<TextBox x:Name="EditorTextBox"
|
||||||
AcceptsReturn="True"
|
AcceptsReturn="True"
|
||||||
AcceptsTab="True"
|
AcceptsTab="True"
|
||||||
TextWrapping="Wrap"
|
TextWrapping="NoWrap"
|
||||||
VerticalAlignment="Stretch"
|
VerticalAlignment="Stretch"
|
||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
ScrollViewer.VerticalScrollBarVisibility="Auto"
|
||||||
@ -52,8 +73,8 @@
|
|||||||
Background="White"
|
Background="White"
|
||||||
Foreground="Black"
|
Foreground="Black"
|
||||||
CaretBrush="Black"
|
CaretBrush="Black"
|
||||||
FontFamily="Consolas,Courier New,monospace"
|
FontFamily="Courier New,Liberation Mono,Courier,monospace"
|
||||||
FontSize="12"
|
FontSize="13"
|
||||||
ClearSelectionOnLostFocus="False">
|
ClearSelectionOnLostFocus="False">
|
||||||
<TextBox.Styles>
|
<TextBox.Styles>
|
||||||
<Style Selector="TextBox">
|
<Style Selector="TextBox">
|
||||||
|
|||||||
@ -17,7 +17,11 @@ namespace NotePad
|
|||||||
private bool _isModified;
|
private bool _isModified;
|
||||||
private string? _originalText;
|
private string? _originalText;
|
||||||
|
|
||||||
public MainWindow()
|
public MainWindow() : this(null)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainWindow(string? fileToOpen)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
UpdateTitle();
|
UpdateTitle();
|
||||||
@ -26,6 +30,30 @@ namespace NotePad
|
|||||||
textBox.TextChanged += OnTextChanged;
|
textBox.TextChanged += OnTextChanged;
|
||||||
|
|
||||||
Closing += OnWindowClosing;
|
Closing += OnWindowClosing;
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(fileToOpen) && File.Exists(fileToOpen))
|
||||||
|
{
|
||||||
|
_ = LoadFileAsync(fileToOpen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task LoadFileAsync(string filePath)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var text = await File.ReadAllTextAsync(filePath);
|
||||||
|
_currentFilePath = filePath;
|
||||||
|
_currentFileName = Path.GetFileName(filePath);
|
||||||
|
|
||||||
|
this.FindControl<TextBox>("EditorTextBox")!.Text = text;
|
||||||
|
_originalText = text;
|
||||||
|
_isModified = false;
|
||||||
|
UpdateTitle();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
// Silently ignore file loading errors on startup
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateTitle()
|
private void UpdateTitle()
|
||||||
@ -266,7 +294,17 @@ namespace NotePad
|
|||||||
var textBox = this.FindControl<TextBox>("EditorTextBox")!;
|
var textBox = this.FindControl<TextBox>("EditorTextBox")!;
|
||||||
|
|
||||||
checkBox.IsChecked = !checkBox.IsChecked;
|
checkBox.IsChecked = !checkBox.IsChecked;
|
||||||
textBox.TextWrapping = checkBox.IsChecked == true ? TextWrapping.Wrap : TextWrapping.NoWrap;
|
|
||||||
|
if (checkBox.IsChecked == true)
|
||||||
|
{
|
||||||
|
textBox.TextWrapping = TextWrapping.Wrap;
|
||||||
|
ScrollViewer.SetHorizontalScrollBarVisibility(textBox, Avalonia.Controls.Primitives.ScrollBarVisibility.Disabled);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
textBox.TextWrapping = TextWrapping.NoWrap;
|
||||||
|
ScrollViewer.SetHorizontalScrollBarVisibility(textBox, Avalonia.Controls.Primitives.ScrollBarVisibility.Auto);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Edit Menu
|
// Edit Menu
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
||||||
<ApplicationIcon>img\notepad-icon.ico</ApplicationIcon>
|
<ApplicationIcon>img\notepad-icon.ico</ApplicationIcon>
|
||||||
<Version>0.1.6</Version>
|
<Version>0.1.17</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
BIN
NotePad/img/notepad-screenshot-linux.png
Normal file
BIN
NotePad/img/notepad-screenshot-linux.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
BIN
NotePad/img/notepad-screenshot-win11.png
Normal file
BIN
NotePad/img/notepad-screenshot-win11.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB |
@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
A simple cross-platform text editor built with Avalonia UI and .NET 8.
|
A simple cross-platform text editor built with Avalonia UI and .NET 8.
|
||||||
|
|
||||||

|
| Windows | Linux |
|
||||||
|
|-----------------------------------------------------------------| ----- |
|
||||||
|
|  |  |
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user