Compare commits

...
10 Commits
Author SHA1 Message Date
amitwhandClaude aac496923e Add font size adjustment menu and fix theme styling
Features:
• Added Font Size menu in View with increase/decrease/reset options
• Keyboard shortcuts: Ctrl+Shift+Plus/Minus/0 for font adjustment
• Font size persists between sessions using localStorage
• Font sizes adjustable from 10px to 24px

Theme Fixes:
• Fixed missing Monokai theme styles for tabs and editor
• Added complete tab styling for Solarized theme
• Added complete tab styling for GitHub theme
• All themes now have consistent tab bar appearance

Other Changes:
• Updated CLAUDE.md with v1.3.x features documentation
• Version bumped to 1.3.4

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-01 21:41:28 +05:30
amitwhandClaude 256f944b88 Increase editor and preview font sizes to 15px
Enhanced font sizes for improved readability:
• Editor font size increased from 14px to 15px
• Preview font size set to 15px for both #preview and .preview-content
• Better visual experience across all themes and content types

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-01 21:30:57 +05:30
amitwh dbe57d2fad Fix v1.3.2: Restore proper preview text spacing and typography
- Restored ideal preview text spacing from earlier versions
- Extended all preview styles to work with new .preview-content class
- Added proper margins, padding, and line-height for readability
- Updated theme support for all preview elements across all themes
- Improved typography with balanced font size and spacing
- Fixed double padding issue with better container structure
- Enhanced readability with proper heading margins and paragraph spacing
- Updated to version 1.3.2 with improved preview typography
2025-09-01 21:24:40 +05:30
amitwh 9a45849003 Update README.md for v1.3.1 release 2025-09-01 21:08:29 +05:30
amitwh dfb603c2ea Fix v1.3.1: File associations and 50/50 pane layout
- Enhanced file association handling for double-clicking .md files
- Added proper file associations in package.json build config
- Fixed preview/source pane layout to be equally distributed 50/50
- Updated CSS for tab-content structure with proper flex layout
- Added theme support for new pane selectors
- Improved command line argument processing for file opening
- Updated version to 1.3.1 with file association feature
2025-09-01 21:05:01 +05:30
amitwh fda173d9a1 Merge branch 'master' into macos 2025-09-01 20:58:00 +05:30
amitwh 5cbcfa466d Merge branch 'master' into macos 2025-09-01 20:53:29 +05:30
amitwh edb163eab4 Merge master with comprehensive v1.2.0 editor enhancements 2025-09-01 20:29:13 +05:30
amitwh 7b5165bcb1 Update README.md with v1.2.0 features and remove CLAUDE.md 2025-09-01 20:07:13 +05:30
amitwh bd38c5342d Update About dialog to version 1.2.0 with new features list 2025-09-01 20:03:08 +05:30
8 changed files with 708 additions and 61 deletions
+35 -4
View File
@@ -4,7 +4,7 @@
**PanConverter** is a cross-platform Markdown editor and converter powered by Pandoc, built with Electron. It provides professional-grade editing capabilities with comprehensive export options. **PanConverter** is a cross-platform Markdown editor and converter powered by Pandoc, built with Electron. It provides professional-grade editing capabilities with comprehensive export options.
**Current Version**: v1.2.1 **Current Version**: v1.3.3
**Author**: Amit Haridas (amit.wh@gmail.com) **Author**: Amit Haridas (amit.wh@gmail.com)
**License**: MIT **License**: MIT
**Repository**: https://github.com/amitwh/pan-converter **Repository**: https://github.com/amitwh/pan-converter
@@ -23,14 +23,15 @@
``` ```
src/ src/
├── main.js # Electron main process, menu system, IPC handlers ├── main.js # Electron main process, menu system, IPC handlers
├── renderer.js # UI logic, editor functionality, event handling ├── renderer.js # TabManager class, multi-file editing, event handling
├── index.html # Application layout and components ├── index.html # Application layout with tabbed interface
└── styles.css # Comprehensive styling with multi-theme support └── styles.css # Comprehensive styling with multi-theme support
assets/ assets/
└── icon.png # Application icon └── icon.png # Application icon
package.json # Dependencies and build configuration package.json # Dependencies and build configuration
CLAUDE.md # Development documentation for AI assistants
``` ```
## Development Commands ## Development Commands
@@ -108,6 +109,36 @@ gh release create v1.2.1 --title "Title" --notes "Release notes" \
## Feature Implementation Guide ## Feature Implementation Guide
### v1.3.x Tabbed Interface & Enhanced Features
#### 🗂️ Tabbed Multi-File Support (v1.3.0)
**TabManager Class** (`src/renderer.js`)
- Complete tab management system for multiple files
- Tab switching, creation, and closure
- State preservation per tab (content, cursor position, scroll)
- File path tracking for each tab
- Keyboard shortcuts: `Ctrl/Cmd+T` (new tab), `Ctrl/Cmd+W` (close tab)
#### 🎯 Enhanced PDF Export (v1.3.0)
**Multi-Engine Fallback System** (`src/main.js:239-280`)
- Primary: XeLaTeX with proper margins
- Fallback 1: PDFLaTeX
- Fallback 2: wkhtmltopdf
- Automatic engine detection and switching
#### 📁 File Association Support (v1.3.1)
**OS Integration** (`src/main.js:452-498`, `package.json:50-65`)
- Double-click .md files to open in PanConverter
- Command-line argument handling
- Pending file queue for startup loading
#### 🎨 Typography & Spacing (v1.3.2-1.3.3)
**Preview Enhancement** (`src/styles.css`)
- Restored ideal text spacing from v1.0
- Font sizes increased to 15px for better readability
- Comprehensive selector coverage for legacy and new containers
- Theme-aware typography for all content types
### v1.2.1 Comprehensive Editor Enhancements ### v1.2.1 Comprehensive Editor Enhancements
#### ✨ Advanced Editor Features #### ✨ Advanced Editor Features
@@ -300,4 +331,4 @@ gh release create v1.2.1 --title "Title" --notes "Release notes" \
--- ---
**Last Updated**: September 1, 2025 **Last Updated**: September 1, 2025
**Claude Assistant**: Development completed for v1.2.1 comprehensive editor enhancements **Claude Assistant**: Development completed for v1.3.3 with tabbed interface, enhanced PDF export, file associations, and improved typography
+378
View File
@@ -0,0 +1,378 @@
\hypertarget{panconverter}{%
\section{PanConverter}\label{panconverter}}
A cross-platform Markdown editor and converter powered by Pandoc.
\begin{figure}
\centering
\includegraphics{assets/icon.png}
\caption{PanConverter}
\end{figure}
\hypertarget{features}{%
\subsection{Features}\label{features}}
\hypertarget{advanced-markdown-editor}{%
\subsubsection{✨ Advanced Markdown
Editor}\label{advanced-markdown-editor}}
\begin{itemize}
\tightlist
\item
🗂️ \textbf{Tabbed Interface} - Work with multiple files simultaneously
in separate tabs
\item
📝 \textbf{Rich Text Editor} - Full-featured editor with syntax
highlighting and comprehensive toolbar
\item
🔍 \textbf{Find \& Replace} - Powerful search and replace with match
highlighting and navigation
\item
🔢 \textbf{Line Numbers} - Toggle line numbers for easier code editing
and navigation
\item
↩️ \textbf{Smart Auto-Indentation} - Automatic list continuation and
intelligent indentation
\item
⏪ \textbf{Undo/Redo} - Full undo/redo support with keyboard shortcuts
\item
⌨️ \textbf{Advanced Shortcuts} - Tab indentation, line selection, and
smart text formatting
\item
📂 \textbf{File Association Support} - Open markdown files directly
from file manager
\end{itemize}
\hypertarget{themes-interface}{%
\subsubsection{🎨 Themes \& Interface}\label{themes-interface}}
\begin{itemize}
\tightlist
\item
👁️ \textbf{Live Preview} - See your markdown rendered in real-time
with synchronized scrolling
\item
🎨 \textbf{Multiple Themes} - Choose from Light, Dark, Solarized,
Monokai, or GitHub themes
\item
💾 \textbf{Auto-Save} - Never lose your work with automatic saving
every 30 seconds
\end{itemize}
\hypertarget{export-conversion}{%
\subsubsection{📤 Export \& Conversion}\label{export-conversion}}
\begin{itemize}
\tightlist
\item
📄 \textbf{Enhanced PDF Export} - Robust PDF generation with multiple
LaTeX engine fallbacks (XeLaTeX, PDFLaTeX, wkhtmltopdf)
\item
📄 \textbf{Document Export} - Convert to HTML, DOCX, LaTeX, RTF, ODT,
EPUB, PowerPoint (PPTX), and OpenDocument Presentation (ODP)
\item
📊 \textbf{Spreadsheet Export} - Export markdown tables to Excel
(XLSX/XLS) and OpenDocument Spreadsheet (ODS) formats
\item
📥 \textbf{Document Import} - Import DOCX, ODT, RTF, HTML, PDF, and
presentation files to markdown
\item
📋 \textbf{Table Creation Helper} - Built-in table generator for easy
markdown table creation
\end{itemize}
\hypertarget{platform-support}{%
\subsubsection{🖥️ Platform Support}\label{platform-support}}
\begin{itemize}
\tightlist
\item
\textbf{Cross-Platform} - Works seamlessly on Windows, macOS, and
Linux
\end{itemize}
\hypertarget{installation}{%
\subsection{Installation}\label{installation}}
\hypertarget{prerequisites}{%
\subsubsection{Prerequisites}\label{prerequisites}}
\begin{itemize}
\tightlist
\item
\href{https://pandoc.org/installing.html}{Pandoc} must be installed
for export functionality
\begin{itemize}
\tightlist
\item
\textbf{Ubuntu/Debian}: \texttt{sudo\ apt-get\ install\ pandoc}
\item
\textbf{macOS}: \texttt{brew\ install\ pandoc}
\item
\textbf{Windows}: Download installer from Pandoc website
\end{itemize}
\end{itemize}
\hypertarget{pdf-export-requirements}{%
\subsubsection{PDF Export Requirements}\label{pdf-export-requirements}}
For optimal PDF export, install a LaTeX engine (recommended): -
\textbf{Ubuntu/Debian}:
\texttt{sudo\ apt-get\ install\ texlive-xetex\ texlive-latex-base} -
\textbf{macOS}: \texttt{brew\ install\ -\/-cask\ mactex} -
\textbf{Windows}: Install MiKTeX or TeX Live - \textbf{Alternative}:
\texttt{sudo\ apt-get\ install\ wkhtmltopdf} (fallback option)
\hypertarget{download}{%
\subsubsection{Download}\label{download}}
Download the latest release for your platform from the
\href{https://github.com/amitwh/pan-converter/releases}{Releases} page.
\hypertarget{linux}{%
\paragraph{Linux}\label{linux}}
\begin{itemize}
\tightlist
\item
\textbf{AppImage}: \texttt{PanConverter-1.3.1.AppImage} (universal,
may require \texttt{-\/-no-sandbox} flag)
\item
\textbf{Debian Package}: \texttt{pan-converter\_1.3.1\_amd64.deb}
\item
\textbf{Snap Package}: \texttt{pan-converter\_1.3.1\_amd64.snap}
\end{itemize}
\hypertarget{install-from-source}{%
\subsubsection{Install from Source}\label{install-from-source}}
\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{git}\NormalTok{ clone https://github.com/amitwh/pan{-}converter.git}
\BuiltInTok{cd}\NormalTok{ pan{-}converter}
\ExtensionTok{npm}\NormalTok{ install}
\ExtensionTok{npm}\NormalTok{ start}
\end{Highlighting}
\end{Shaded}
\hypertarget{usage}{%
\subsection{Usage}\label{usage}}
\hypertarget{basic-workflow}{%
\subsubsection{Basic Workflow}\label{basic-workflow}}
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
\textbf{Write} - Use the editor to write your Markdown content
\item
\textbf{Preview} - Toggle the preview pane to see rendered output
\item
\textbf{Theme} - Choose your preferred theme from the View menu
\item
\textbf{Export} - Export your document to various formats
\end{enumerate}
\hypertarget{export-options}{%
\subsubsection{Export Options}\label{export-options}}
\begin{itemize}
\tightlist
\item
\textbf{Documents}: HTML, PDF, DOCX, LaTeX, RTF, ODT, EPUB
\item
\textbf{Presentations}: PowerPoint (PPTX), OpenDocument Presentation
(ODP)
\item
\textbf{Spreadsheets}: Excel (XLSX/XLS), OpenDocument Spreadsheet
(ODS)
\end{itemize}
\hypertarget{import-conversion}{%
\subsubsection{Import \& Conversion}\label{import-conversion}}
\begin{itemize}
\tightlist
\item
\textbf{Import Documents}: Convert DOCX, ODT, RTF, HTML, PDF, and
presentation files to Markdown
\item
\textbf{Cross-Format Conversion}: Convert current file between
multiple formats
\item
\textbf{Smart Presentation Handling}: Automatic slide-level formatting
for PPTX/ODP exports
\end{itemize}
\hypertarget{table-creation}{%
\subsubsection{Table Creation}\label{table-creation}}
\begin{itemize}
\tightlist
\item
Click the table button in the toolbar
\item
Specify number of rows and columns
\item
Automatically generates properly formatted Markdown tables
\end{itemize}
\hypertarget{keyboard-shortcuts}{%
\subsection{Keyboard Shortcuts}\label{keyboard-shortcuts}}
\hypertarget{file-operations}{%
\subsubsection{File Operations}\label{file-operations}}
\begin{itemize}
\tightlist
\item
\texttt{Ctrl/Cmd\ +\ N} - New file/tab
\item
\texttt{Ctrl/Cmd\ +\ T} - New tab
\item
\texttt{Ctrl/Cmd\ +\ W} - Close current tab
\item
\texttt{Ctrl/Cmd\ +\ Tab} - Switch to next tab
\item
\texttt{Ctrl/Cmd\ +\ O} - Open file
\item
\texttt{Ctrl/Cmd\ +\ S} - Save file
\item
\texttt{Ctrl/Cmd\ +\ Shift\ +\ S} - Save as
\item
\texttt{Ctrl/Cmd\ +\ I} - Import document
\end{itemize}
\hypertarget{editor-features}{%
\subsubsection{Editor Features}\label{editor-features}}
\begin{itemize}
\tightlist
\item
\texttt{Ctrl/Cmd\ +\ F} - Find \& Replace
\item
\texttt{Ctrl/Cmd\ +\ Z} - Undo
\item
\texttt{Ctrl/Cmd\ +\ Shift\ +\ Z} - Redo
\item
\texttt{Tab} - Indent lines or insert 4 spaces
\item
\texttt{Shift\ +\ Tab} - Outdent selected lines
\item
\texttt{Enter} - Auto-continue lists with proper indentation
\end{itemize}
\hypertarget{view-navigation}{%
\subsubsection{View \& Navigation}\label{view-navigation}}
\begin{itemize}
\tightlist
\item
\texttt{Ctrl/Cmd\ +\ P} - Toggle preview
\item
\texttt{Ctrl/Cmd\ +\ Enter} - Toggle preview (alternative)
\item
\texttt{Escape} - Close find dialog
\end{itemize}
\hypertarget{building}{%
\subsection{Building}\label{building}}
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{\# Install dependencies}
\ExtensionTok{npm}\NormalTok{ install}
\CommentTok{\# Generate icons}
\ExtensionTok{npm}\NormalTok{ run generate{-}icons}
\CommentTok{\# Build for current platform}
\ExtensionTok{npm}\NormalTok{ run build}
\CommentTok{\# Build for specific platform}
\ExtensionTok{npm}\NormalTok{ run build:win }\CommentTok{\# Windows}
\ExtensionTok{npm}\NormalTok{ run build:mac }\CommentTok{\# macOS }
\ExtensionTok{npm}\NormalTok{ run build:linux }\CommentTok{\# Linux (generates .deb, .AppImage, and .snap)}
\CommentTok{\# Build for all platforms}
\ExtensionTok{npm}\NormalTok{ run dist:all}
\end{Highlighting}
\end{Shaded}
\hypertarget{version-history}{%
\subsection{Version History}\label{version-history}}
\begin{itemize}
\tightlist
\item
\textbf{v1.3.1} - Bug fixes: Fixed file associations for
double-clicking .md files, corrected 50/50 layout alignment for
editor/preview panes
\item
\textbf{v1.3.0} - Major update: Tabbed interface for multiple files,
enhanced PDF export with LaTeX engines, fixed file associations,
removed redundant converter menu, improved UI architecture
\item
\textbf{v1.2.1} - Comprehensive editor enhancements: Find \& Replace,
Line Numbers, Undo/Redo, Auto-indentation, PowerPoint export, document
conversion menu, table creation helper, spreadsheet export
\item
\textbf{v1.1.0} - Added Excel/ODS spreadsheet export, updated author
information, renamed to PanConverter
\item
\textbf{v1.0.0} - Initial release with basic markdown editing, themes,
and Pandoc export
\end{itemize}
\hypertarget{known-issues}{%
\subsection{Known Issues}\label{known-issues}}
\begin{itemize}
\tightlist
\item
AppImage may require \texttt{-\/-no-sandbox} flag on some Linux
systems
\item
Windows/Mac builds require platform-specific build environments
\item
Large files may cause performance issues
\end{itemize}
\hypertarget{contributing}{%
\subsection{Contributing}\label{contributing}}
Contributions are welcome! Please feel free to submit a Pull Request to
the \href{https://github.com/amitwh/pan-converter}{GitHub repository}.
\hypertarget{license}{%
\subsection{License}\label{license}}
MIT License - see LICENSE file for details.
\hypertarget{author}{%
\subsection{Author}\label{author}}
\textbf{Amit Haridas} -
\href{mailto:amit.wh@gmail.com}{\nolinkurl{amit.wh@gmail.com}}
\hypertarget{acknowledgments}{%
\subsection{Acknowledgments}\label{acknowledgments}}
\begin{itemize}
\tightlist
\item
Built with \href{https://www.electronjs.org/}{Electron}
\item
Markdown parsing by \href{https://marked.js.org/}{marked}
\item
Export functionality powered by \href{https://pandoc.org/}{Pandoc}
\item
Syntax highlighting by \href{https://highlightjs.org/}{highlight.js}
\item
Spreadsheet export by \href{https://www.npmjs.com/package/xlsx}{XLSX}
\item
HTML sanitization by
\href{https://www.npmjs.com/package/dompurify}{DOMPurify}
\end{itemize}
+4 -3
View File
@@ -50,9 +50,9 @@ For optimal PDF export, install a LaTeX engine (recommended):
Download the latest release for your platform from the [Releases](https://github.com/amitwh/pan-converter/releases) page. Download the latest release for your platform from the [Releases](https://github.com/amitwh/pan-converter/releases) page.
#### Linux #### Linux
- **AppImage**: `PanConverter-1.3.0.AppImage` (universal, may require `--no-sandbox` flag) - **AppImage**: `PanConverter-1.3.1.AppImage` (universal, may require `--no-sandbox` flag)
- **Debian Package**: `pan-converter_1.3.0_amd64.deb` - **Debian Package**: `pan-converter_1.3.1_amd64.deb`
- **Snap Package**: `pan-converter_1.3.0_amd64.snap` - **Snap Package**: `pan-converter_1.3.1_amd64.snap`
### Install from Source ### Install from Source
```bash ```bash
@@ -133,6 +133,7 @@ npm run dist:all
## Version History ## Version History
- **v1.3.1** - Bug fixes: Fixed file associations for double-clicking .md files, corrected 50/50 layout alignment for editor/preview panes
- **v1.3.0** - Major update: Tabbed interface for multiple files, enhanced PDF export with LaTeX engines, fixed file associations, removed redundant converter menu, improved UI architecture - **v1.3.0** - Major update: Tabbed interface for multiple files, enhanced PDF export with LaTeX engines, fixed file associations, removed redundant converter menu, improved UI architecture
- **v1.2.1** - Comprehensive editor enhancements: Find & Replace, Line Numbers, Undo/Redo, Auto-indentation, PowerPoint export, document conversion menu, table creation helper, spreadsheet export - **v1.2.1** - Comprehensive editor enhancements: Find & Replace, Line Numbers, Undo/Redo, Auto-indentation, PowerPoint export, document conversion menu, table creation helper, spreadsheet export
- **v1.1.0** - Added Excel/ODS spreadsheet export, updated author information, renamed to PanConverter - **v1.1.0** - Added Excel/ODS spreadsheet export, updated author information, renamed to PanConverter
BIN
View File
Binary file not shown.
+17 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "pan-converter", "name": "pan-converter",
"version": "1.3.0", "version": "1.3.4",
"description": "Cross-platform Markdown editor and converter using Pandoc", "description": "Cross-platform Markdown editor and converter using Pandoc",
"main": "src/main.js", "main": "src/main.js",
"scripts": { "scripts": {
@@ -47,6 +47,22 @@
"node_modules/**/*", "node_modules/**/*",
"package.json" "package.json"
], ],
"fileAssociations": [
{
"ext": "md",
"name": "Markdown Document",
"description": "Markdown Document",
"mimeType": "text/markdown",
"role": "Editor"
},
{
"ext": "markdown",
"name": "Markdown Document",
"description": "Markdown Document",
"mimeType": "text/markdown",
"role": "Editor"
}
],
"mac": { "mac": {
"category": "public.app-category.productivity", "category": "public.app-category.productivity",
"icon": "assets/icon.icns" "icon": "assets/icon.icns"
+29 -5
View File
@@ -153,6 +153,27 @@ function createMenu() {
] ]
}, },
{ type: 'separator' }, { type: 'separator' },
{
label: 'Font Size',
submenu: [
{
label: 'Increase Font Size',
accelerator: 'CmdOrCtrl+Shift+Plus',
click: () => mainWindow.webContents.send('adjust-font-size', 'increase')
},
{
label: 'Decrease Font Size',
accelerator: 'CmdOrCtrl+Shift+-',
click: () => mainWindow.webContents.send('adjust-font-size', 'decrease')
},
{
label: 'Reset Font Size',
accelerator: 'CmdOrCtrl+Shift+0',
click: () => mainWindow.webContents.send('adjust-font-size', 'reset')
}
]
},
{ type: 'separator' },
{ label: 'Reload', accelerator: 'CmdOrCtrl+R', role: 'reload' }, { label: 'Reload', accelerator: 'CmdOrCtrl+R', role: 'reload' },
{ label: 'Toggle DevTools', accelerator: 'F12', role: 'toggleDevTools' }, { label: 'Toggle DevTools', accelerator: 'F12', role: 'toggleDevTools' },
{ type: 'separator' }, { type: 'separator' },
@@ -171,7 +192,7 @@ function createMenu() {
type: 'info', type: 'info',
title: 'About PanConverter', title: 'About PanConverter',
message: 'PanConverter', message: 'PanConverter',
detail: 'A cross-platform Markdown editor and converter using Pandoc.\n\nVersion: 1.3.0\nAuthor: Amit Haridas\nEmail: amit.wh@gmail.com\nLicense: MIT\n\nFeatures:\n• Tabbed interface for multiple files\n• Advanced markdown editing with live preview\n• Enhanced PDF export with LaTeX engines\n• Find & replace with match highlighting\n• Line numbers and auto-indentation\n• Export to multiple formats via Pandoc\n• PowerPoint & presentation export\n• Export tables to Excel/ODS spreadsheets\n• Document import & conversion\n• Table creation helper\n• Multiple themes support\n• Undo/redo functionality', detail: 'A cross-platform Markdown editor and converter using Pandoc.\n\nVersion: 1.3.4\nAuthor: Amit Haridas\nEmail: amit.wh@gmail.com\nLicense: MIT\n\nFeatures:\n• Tabbed interface for multiple files\n• Advanced markdown editing with live preview\n• Enhanced PDF export with LaTeX engines\n• File association support for .md files\n• Improved preview typography and spacing\n• Adjustable font sizes via menu (Ctrl+Shift+Plus/Minus)\n• Complete theme support including Monokai fixes\n• Find & replace with match highlighting\n• Line numbers and auto-indentation\n• Export to multiple formats via Pandoc\n• PowerPoint & presentation export\n• Export tables to Excel/ODS spreadsheets\n• Document import & conversion\n• Table creation helper\n• Multiple themes support\n• Undo/redo functionality',
buttons: ['OK'] buttons: ['OK']
}); });
} }
@@ -453,10 +474,13 @@ app.whenReady().then(() => {
createWindow(); createWindow();
// Handle file association on app startup // Handle file association on app startup
if (process.argv.length > 1) { // Process all command line arguments except the first two (node and script path)
const filePath = process.argv.find(arg => arg.endsWith('.md') || arg.endsWith('.markdown')); const fileArgs = process.argv.slice(2);
if (filePath && fs.existsSync(filePath)) { for (const arg of fileArgs) {
openFileFromPath(filePath); if ((arg.endsWith('.md') || arg.endsWith('.markdown')) && fs.existsSync(arg)) {
// Store the file to open after window is ready
app.pendingFile = arg;
break;
} }
} }
}); });
+32
View File
@@ -538,3 +538,35 @@ ipcRenderer.on('toggle-find', () => {
ipcRenderer.on('theme-changed', (event, theme) => { ipcRenderer.on('theme-changed', (event, theme) => {
document.body.className = `theme-${theme}`; document.body.className = `theme-${theme}`;
}); });
// Font size adjustment
let currentFontSize = parseInt(localStorage.getItem('fontSize')) || 15;
function updateFontSizes(size) {
const editors = document.querySelectorAll('#editor, .editor-textarea');
const previews = document.querySelectorAll('#preview, .preview-content');
editors.forEach(editor => {
editor.style.fontSize = `${size}px`;
});
previews.forEach(preview => {
preview.style.fontSize = `${size}px`;
});
localStorage.setItem('fontSize', size);
}
// Apply saved font size on load
updateFontSizes(currentFontSize);
ipcRenderer.on('adjust-font-size', (event, action) => {
if (action === 'increase' && currentFontSize < 24) {
currentFontSize++;
} else if (action === 'decrease' && currentFontSize > 10) {
currentFontSize--;
} else if (action === 'reset') {
currentFontSize = 15;
}
updateFontSizes(currentFontSize);
});
+213 -48
View File
@@ -152,8 +152,40 @@ body {
.pane { .pane {
flex: 1; flex: 1;
overflow: auto; overflow: auto;
min-width: 0;
} }
.pane:first-child {
border-right: 1px solid #ddd;
}
.editor-textarea {
width: 100%;
height: 100%;
padding: 20px;
font-family: 'SF Mono', Monaco, 'Courier New', monospace;
font-size: 15px;
line-height: 1.6;
border: none;
outline: none;
resize: none;
}
.pane:last-child {
padding: 0;
background: #fff;
}
.preview-content {
max-width: none;
margin: 0;
padding: 20px 24px 24px 24px;
line-height: 1.6;
font-size: 15px;
font-size: 14px;
}
/* Legacy support for old selectors */
#editor-pane { #editor-pane {
border-right: 1px solid #ddd; border-right: 1px solid #ddd;
} }
@@ -163,7 +195,7 @@ body {
height: 100%; height: 100%;
padding: 20px; padding: 20px;
font-family: 'SF Mono', Monaco, 'Courier New', monospace; font-family: 'SF Mono', Monaco, 'Courier New', monospace;
font-size: 14px; font-size: 15px;
line-height: 1.6; line-height: 1.6;
border: none; border: none;
outline: none; outline: none;
@@ -178,6 +210,7 @@ body {
#preview { #preview {
max-width: 800px; max-width: 800px;
margin: 0 auto; margin: 0 auto;
font-size: 15px;
} }
/* Status Bar */ /* Status Bar */
@@ -192,31 +225,33 @@ body {
} }
/* Preview Styles */ /* Preview Styles */
#preview h1, #preview h2, #preview h3, #preview h4, #preview h5, #preview h6 { #preview h1, #preview h2, #preview h3, #preview h4, #preview h5, #preview h6,
.preview-content h1, .preview-content h2, .preview-content h3, .preview-content h4, .preview-content h5, .preview-content h6 {
margin-top: 24px; margin-top: 24px;
margin-bottom: 16px; margin-bottom: 16px;
font-weight: 600; font-weight: 600;
line-height: 1.25; line-height: 1.25;
} }
#preview h1 { #preview h1, .preview-content h1 {
font-size: 2em; font-size: 2em;
border-bottom: 1px solid #eaecef; border-bottom: 1px solid #eaecef;
padding-bottom: 0.3em; padding-bottom: 0.3em;
margin-top: 0;
} }
#preview h2 { #preview h2, .preview-content h2 {
font-size: 1.5em; font-size: 1.5em;
border-bottom: 1px solid #eaecef; border-bottom: 1px solid #eaecef;
padding-bottom: 0.3em; padding-bottom: 0.3em;
} }
#preview p { #preview p, .preview-content p {
margin-bottom: 16px; margin-bottom: 16px;
line-height: 1.6; line-height: 1.6;
} }
#preview code { #preview code, .preview-content code {
padding: 0.2em 0.4em; padding: 0.2em 0.4em;
margin: 0; margin: 0;
font-size: 85%; font-size: 85%;
@@ -225,7 +260,7 @@ body {
font-family: 'SF Mono', Monaco, 'Courier New', monospace; font-family: 'SF Mono', Monaco, 'Courier New', monospace;
} }
#preview pre { #preview pre, .preview-content pre {
padding: 16px; padding: 16px;
overflow: auto; overflow: auto;
font-size: 85%; font-size: 85%;
@@ -235,7 +270,7 @@ body {
margin-bottom: 16px; margin-bottom: 16px;
} }
#preview pre code { #preview pre code, .preview-content pre code {
display: inline; display: inline;
max-width: auto; max-width: auto;
padding: 0; padding: 0;
@@ -247,54 +282,54 @@ body {
border: 0; border: 0;
} }
#preview blockquote { #preview blockquote, .preview-content blockquote {
padding: 0 1em; padding: 0 1em;
color: #6a737d; color: #6a737d;
border-left: 0.25em solid #dfe2e5; border-left: 0.25em solid #dfe2e5;
margin-bottom: 16px; margin-bottom: 16px;
} }
#preview ul, #preview ol { #preview ul, #preview ol, .preview-content ul, .preview-content ol {
padding-left: 2em; padding-left: 2em;
margin-bottom: 16px; margin-bottom: 16px;
} }
#preview li { #preview li, .preview-content li {
margin-bottom: 4px; margin-bottom: 4px;
} }
#preview a { #preview a, .preview-content a {
color: #0366d6; color: #0366d6;
text-decoration: none; text-decoration: none;
} }
#preview a:hover { #preview a:hover, .preview-content a:hover {
text-decoration: underline; text-decoration: underline;
} }
#preview img { #preview img, .preview-content img {
max-width: 100%; max-width: 100%;
height: auto; height: auto;
} }
#preview table { #preview table, .preview-content table {
border-collapse: collapse; border-collapse: collapse;
margin-bottom: 16px; margin-bottom: 16px;
width: 100%; width: 100%;
} }
#preview table th, #preview table th, #preview table td,
#preview table td { .preview-content table th, .preview-content table td {
padding: 6px 13px; padding: 6px 13px;
border: 1px solid #dfe2e5; border: 1px solid #dfe2e5;
} }
#preview table th { #preview table th, .preview-content table th {
font-weight: 600; font-weight: 600;
background-color: #f6f8fa; background-color: #f6f8fa;
} }
#preview table tr:nth-child(2n) { #preview table tr:nth-child(2n), .preview-content table tr:nth-child(2n) {
background-color: #f6f8fa; background-color: #f6f8fa;
} }
@@ -356,6 +391,20 @@ body.theme-dark .toolbar-separator {
background: #3e3e42; background: #3e3e42;
} }
body.theme-dark .pane:first-child {
border-right-color: #3e3e42;
}
body.theme-dark .editor-textarea {
background: #1e1e1e;
color: #d4d4d4;
}
body.theme-dark .pane:last-child {
background: #1e1e1e;
}
/* Legacy support */
body.theme-dark #editor-pane { body.theme-dark #editor-pane {
border-right-color: #3e3e42; border-right-color: #3e3e42;
} }
@@ -369,42 +418,42 @@ body.theme-dark #preview-pane {
background: #252526; background: #252526;
} }
body.theme-dark #preview { body.theme-dark #preview, body.theme-dark .preview-content {
color: #d4d4d4; color: #d4d4d4;
} }
body.theme-dark #preview h1, body.theme-dark #preview h1, body.theme-dark #preview h2,
body.theme-dark #preview h2 { body.theme-dark .preview-content h1, body.theme-dark .preview-content h2 {
border-bottom-color: #3e3e42; border-bottom-color: #3e3e42;
} }
body.theme-dark #preview code { body.theme-dark #preview code, body.theme-dark .preview-content code {
background-color: rgba(255,255,255,0.1); background-color: rgba(255,255,255,0.1);
} }
body.theme-dark #preview pre { body.theme-dark #preview pre, body.theme-dark .preview-content pre {
background-color: #2d2d30; background-color: #2d2d30;
} }
body.theme-dark #preview blockquote { body.theme-dark #preview blockquote, body.theme-dark .preview-content blockquote {
color: #808080; color: #808080;
border-left-color: #3e3e42; border-left-color: #3e3e42;
} }
body.theme-dark #preview a { body.theme-dark #preview a, body.theme-dark .preview-content a {
color: #569cd6; color: #569cd6;
} }
body.theme-dark #preview table th, body.theme-dark #preview table th, body.theme-dark #preview table td,
body.theme-dark #preview table td { body.theme-dark .preview-content table th, body.theme-dark .preview-content table td {
border-color: #3e3e42; border-color: #3e3e42;
} }
body.theme-dark #preview table th { body.theme-dark #preview table th, body.theme-dark .preview-content table th {
background-color: #2d2d30; background-color: #2d2d30;
} }
body.theme-dark #preview table tr:nth-child(2n) { body.theme-dark #preview table tr:nth-child(2n), body.theme-dark .preview-content table tr:nth-child(2n) {
background-color: #2d2d30; background-color: #2d2d30;
} }
@@ -420,6 +469,40 @@ body.theme-solarized {
color: #657b83; color: #657b83;
} }
body.theme-solarized .tab-bar {
background: #eee8d5;
border-bottom-color: #93a1a1;
}
body.theme-solarized .tab {
background: #fdf6e3;
border-color: #93a1a1;
color: #657b83;
}
body.theme-solarized .tab.active {
background: #fdf6e3;
border-color: #859900;
}
body.theme-solarized .tab-close {
color: #657b83;
}
body.theme-solarized .tab-close:hover {
background: #93a1a1;
color: #dc322f;
}
body.theme-solarized .new-tab-button {
border-color: #93a1a1;
color: #657b83;
}
body.theme-solarized .new-tab-button:hover {
background: #eee8d5;
}
body.theme-solarized .toolbar { body.theme-solarized .toolbar {
background: #eee8d5; background: #eee8d5;
border-bottom-color: #93a1a1; border-bottom-color: #93a1a1;
@@ -439,19 +522,19 @@ body.theme-solarized #editor {
color: #657b83; color: #657b83;
} }
body.theme-solarized #preview { body.theme-solarized #preview, body.theme-solarized .preview-content {
color: #586e75; color: #586e75;
} }
body.theme-solarized #preview code { body.theme-solarized #preview code, body.theme-solarized .preview-content code {
background-color: #eee8d5; background-color: #eee8d5;
} }
body.theme-solarized #preview pre { body.theme-solarized #preview pre, body.theme-solarized .preview-content pre {
background-color: #eee8d5; background-color: #eee8d5;
} }
body.theme-solarized #preview a { body.theme-solarized #preview a, body.theme-solarized .preview-content a {
color: #268bd2; color: #268bd2;
} }
@@ -461,6 +544,40 @@ body.theme-monokai {
color: #f8f8f2; color: #f8f8f2;
} }
body.theme-monokai .tab-bar {
background: #3e3d32;
border-bottom-color: #75715e;
}
body.theme-monokai .tab {
background: #49483e;
border-color: #75715e;
color: #f8f8f2;
}
body.theme-monokai .tab.active {
background: #272822;
border-color: #a6e22e;
}
body.theme-monokai .tab-close {
color: #f8f8f2;
}
body.theme-monokai .tab-close:hover {
background: #75715e;
color: #f92672;
}
body.theme-monokai .new-tab-button {
border-color: #75715e;
color: #f8f8f2;
}
body.theme-monokai .new-tab-button:hover {
background: #49483e;
}
body.theme-monokai .toolbar { body.theme-monokai .toolbar {
background: #3e3d32; background: #3e3d32;
border-bottom-color: #75715e; border-bottom-color: #75715e;
@@ -480,33 +597,38 @@ body.theme-monokai #editor {
color: #f8f8f2; color: #f8f8f2;
} }
body.theme-monokai .editor-textarea {
background: #272822;
color: #f8f8f2;
}
body.theme-monokai #preview-pane { body.theme-monokai #preview-pane {
background: #272822; background: #272822;
} }
body.theme-monokai #preview { body.theme-monokai #preview, body.theme-monokai .preview-content {
color: #f8f8f2; color: #f8f8f2;
} }
body.theme-monokai #preview h1, body.theme-monokai #preview h1, body.theme-monokai #preview h2,
body.theme-monokai #preview h2 { body.theme-monokai .preview-content h1, body.theme-monokai .preview-content h2 {
border-bottom-color: #75715e; border-bottom-color: #75715e;
} }
body.theme-monokai #preview code { body.theme-monokai #preview code, body.theme-monokai .preview-content code {
background-color: #3e3d32; background-color: #3e3d32;
} }
body.theme-monokai #preview pre { body.theme-monokai #preview pre, body.theme-monokai .preview-content pre {
background-color: #3e3d32; background-color: #3e3d32;
} }
body.theme-monokai #preview blockquote { body.theme-monokai #preview blockquote, body.theme-monokai .preview-content blockquote {
color: #75715e; color: #75715e;
border-left-color: #75715e; border-left-color: #75715e;
} }
body.theme-monokai #preview a { body.theme-monokai #preview a, body.theme-monokai .preview-content a {
color: #66d9ef; color: #66d9ef;
} }
@@ -522,6 +644,40 @@ body.theme-github {
color: #24292e; color: #24292e;
} }
body.theme-github .tab-bar {
background: #fafbfc;
border-bottom-color: #e1e4e8;
}
body.theme-github .tab {
background: #f6f8fa;
border-color: #e1e4e8;
color: #24292e;
}
body.theme-github .tab.active {
background: #fff;
border-color: #0366d6;
}
body.theme-github .tab-close {
color: #586069;
}
body.theme-github .tab-close:hover {
background: #e1e4e8;
color: #cb2431;
}
body.theme-github .new-tab-button {
border-color: #e1e4e8;
color: #586069;
}
body.theme-github .new-tab-button:hover {
background: #f6f8fa;
}
body.theme-github .toolbar { body.theme-github .toolbar {
background: #fafbfc; background: #fafbfc;
border-bottom-color: #e1e4e8; border-bottom-color: #e1e4e8;
@@ -541,29 +697,29 @@ body.theme-github #editor {
color: #24292e; color: #24292e;
} }
body.theme-github #preview { body.theme-github #preview, body.theme-github .preview-content {
color: #24292e; color: #24292e;
} }
body.theme-github #preview h1, body.theme-github #preview h1, body.theme-github #preview h2,
body.theme-github #preview h2 { body.theme-github .preview-content h1, body.theme-github .preview-content h2 {
border-bottom-color: #eaecef; border-bottom-color: #eaecef;
} }
body.theme-github #preview code { body.theme-github #preview code, body.theme-github .preview-content code {
background-color: rgba(27,31,35,0.05); background-color: rgba(27,31,35,0.05);
} }
body.theme-github #preview pre { body.theme-github #preview pre, body.theme-github .preview-content pre {
background-color: #f6f8fa; background-color: #f6f8fa;
} }
body.theme-github #preview blockquote { body.theme-github #preview blockquote, body.theme-github .preview-content blockquote {
color: #6a737d; color: #6a737d;
border-left-color: #dfe2e5; border-left-color: #dfe2e5;
} }
body.theme-github #preview a { body.theme-github #preview a, body.theme-github .preview-content a {
color: #0366d6; color: #0366d6;
} }
@@ -574,6 +730,15 @@ body.theme-github .status-bar {
} }
/* Hide preview pane by default */ /* Hide preview pane by default */
.pane.hidden {
display: none;
}
.pane.full-width {
border-right: none;
}
/* Legacy support */
#preview-pane.hidden { #preview-pane.hidden {
display: none; display: none;
} }