{"id":43987360,"url":"https://github.com/kurouna/elecxzy","last_synced_at":"2026-05-30T02:00:46.467Z","repository":{"id":337007840,"uuid":"1148746659","full_name":"kurouna/elecxzy","owner":"kurouna","description":"elecxzy project","archived":false,"fork":false,"pushed_at":"2026-05-23T00:40:42.000Z","size":98903,"stargazers_count":15,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-23T02:34:17.197Z","etag":null,"topics":["electron","elecxzy","emacs","emacs-like","piece-table","react","text-editor","typescript","xyzzy"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kurouna.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-03T10:14:50.000Z","updated_at":"2026-05-13T14:57:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kurouna/elecxzy","commit_stats":null,"previous_names":["kurouna/elecxzy"],"tags_count":117,"template":false,"template_full_name":null,"purl":"pkg:github/kurouna/elecxzy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurouna%2Felecxzy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurouna%2Felecxzy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurouna%2Felecxzy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurouna%2Felecxzy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kurouna","download_url":"https://codeload.github.com/kurouna/elecxzy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kurouna%2Felecxzy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33677261,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["electron","elecxzy","emacs","emacs-like","piece-table","react","text-editor","typescript","xyzzy"],"created_at":"2026-02-07T10:07:28.215Z","updated_at":"2026-05-30T02:00:46.420Z","avatar_url":"https://github.com/kurouna.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./public/elecxzy_repo_card.svg\" width=\"800\" alt=\"elecxzy - Next-generation Emacs-like modern editor\"\u003e\n\u003c/p\u003e\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Zenn](https://img.shields.io/badge/Zenn-kurouna-blue)](https://zenn.dev/kurouna)\n[![X](https://img.shields.io/badge/X-elecxzy-black)](https://x.com/elecxzy)\n\n**A Lisp-free text editor with Emacs keybindings, featuring a built-in MCP server for AI-driven editing.**\n\nhttps://github.com/user-attachments/assets/ea817cb4-85c9-4225-9425-5c61915823ab\n\n[English](#english) | [日本語](#japanese)\n\n---\n\n\u003ca name=\"english\"\u003e\u003c/a\u003e\n## English\n\n`elecxzy` is a text editor developed to provide an Emacs-like editing experience within a web technology stack (Electron). While it does not include an embedded Lisp engine, it features a built-in MCP (Model Context Protocol) server, enabling AI assistants to directly interact with and control the editor. By providing well-considered default settings out of the box, it reduces the need for extensive initial configuration, allowing you to start editing immediately.\n\n### Download\n\n**Windows only**\n\n[![Microsoft Store](https://img.shields.io/badge/Download-Microsoft_Store-0078D4?style=for-the-badge\u0026logo=microsoft\u0026logoColor=white)](https://apps.microsoft.com/detail/9P32F2WFL69M)\n\nAutomatic updates are provided via the Microsoft Store. For the latest development builds, you can also download binaries from:\n👉 **[GitHub Releases](https://github.com/kurouna/elecxzy/releases)**\n\n*Note: The source repository is currently private.*\n\n### Architecture \u0026 Design\n\n- **Technology Base**: Built on the Electron framework, utilizing HTML and CSS for the user interface, and TypeScript for application logic. It employs IPC communication between the Main and Renderer processes to handle system-level operations.\n- **Buffer Management**: Uses an RB-Tree (Red-Black Tree) based Piece Table. This allows efficient operations and incremental, delta-based undo histories for large files.\n- **Rendering Engine**: Implements a custom virtual rendering system. It utilizes the Canvas API for accurate text metrics (handling mixed full-width and half-width characters without fixed-width assumptions) and minimizes DOM reflows.\n- **IME Input Control**: Implements explicit handling of DOM composition events to manage uncommitted text state and focus. Additionally, it ignores IME input after prefix keys (e.g., `C-x`) to prevent conflicts between Japanese text input and Emacs command execution.\n- **Settings System**: Relies on static JSON configurations (`config.json`, `color-config.json`) instead of a dynamic scripting engine.\n\n### Key Features\n\n* **Emacs Keybindings:** Core operations including cursor movement (`C-f`, `C-b`, `C-n`, `C-p`), recursive window splitting (`C-x 2`, `C-x 3`), window resizing (`C-x ^`, `C-x }`), animated window-layout reshaping (`C-x w t` to transpose, `C-x w f` / `C-x w v` to flip, `C-x w r \u003cRight\u003e` / `\u003cLeft\u003e` to rotate the layout 90°, `C-x w o \u003cRight\u003e` / `\u003cLeft\u003e` to cycle buffers across panes), and kill ring management (`C-w`, `M-w`, `C-y`, `M-y`).\n* **Search \u0026 Replacement:** Incremental search (`C-s`), interactive replacement (`M-%`), and cross-file search across directories (`M-x grep`) powered by background OS processes (`findstr` / `grep`).\n* **Completion System:** `dabbrev-expand` (`M-/`) for buffer-local word completion, extracting multi-byte characters and preserving undo chain integrity.\n* **Live Preview:** Preview modes for Markdown and HTML, featuring one-way scroll synchronization that tracking the source buffer's position.\n* **Window \u0026 Buffer Management:** Provides seamless buffer switching (`C-x b`) and a dedicated buffer list (`C-x C-b`). In addition to standard minibuffer prompts, it provides commands to utilize OS-native file and save dialogs (`C-x M-f`, `C-x M-w`).\n* **Sidebar File Explorer (Filer):** A dedicated file manager (`C-x d` / `C-c d`) displayed on the window's left side. Provides fast file previewing (`l` / `Right`), and directory traversal (`r`, `u`) including support for Windows system drives.\n* **Sidebar Utility Suite:** Multiple dedicated sidebars displayed on the window's right side to assist editing:\n  * **Workspace Sidebar** (`C-c w`, `C-,` or `M-x toggle-workspace-sidebar`): Manage multiple folders in a dedicated workspace, seamlessly opening and saving `.code-workspace` files compatible with VS Code.\n  * **Outline View** (`C-c o`): Hierarchical display of headings for Markdown and HTML with real-time sync.\n  * **Kill Ring Sidebar** (`C-c y` or `M-x browse-kill-ring`): Browse and manage your kill ring (clipboard history).\n  * **Register Sidebar** (`C-c r` or `M-x browse-registers`): Inspect and select persistent registers (text and points).\n  * **Undo History Sidebar** (`C-c u` or `M-x browse-undo-history`): Browse the active buffer's undo history with text previews; selecting an entry rolls the buffer back to that point and is recorded as a single redo transaction (Office-style).\n  * **Recent Files Sidebar** (`C-c c` or `M-x browse-recent-files`): Quickly browse and open recently used files with path previews.\n  * **Settings Sidebar** (`C-c s`, `C-.` or `M-x open-config`): Manage editor configurations like fonts, themes, and line numbers.\n* **Terminal Integration:** Built-in interactive shell buffer (`M-x shell`) on Windows environments.\n* **Major Modes:** Automatic language detection and syntax highlighting for major languages based on file extensions.\n* **Minibuffer Completion:** Interactive completion for `M-x` commands, files, and directories within the minibuffer.\n* **Non-text File Import:** Automatically extract and import plain text from PDF, Word documents (**`.docx`**), and Excel (**`.xlsx`**) files. Excel documents are parsed with sheet headers and data formatted in a clean TSV (Tab-Separated Values) layout. **Note:** Imported files are opened in **Read-only mode** to prevent overwriting the original binary data. Use 'Save As' (`C-x C-w` or `C-x M-w`) to save the extracted text to a new file. A **50MB size limit** applies to these formats to ensure system stability.\n* **File Operations \u0026 Encoding:** Includes periodic auto-saving, a recent files list (`M-x recentf-open-files`), automatic UTF-8 promotion, and native buffer printing (`M-x print-buffer`).\n* **Text Formatting (Fill Paragraph):** `M-q` (`fill-paragraph`) command to reformat and hard-wrap paragraphs based on a configurable width (`set-wrap-column`), optimizing layout for both Japanese and English text.\n* **Persistent Registers:** Store and recall text or cursor positions across sessions using Emacs-style registers. Commands include `C-x r s` (copy to register), `C-x r i` (insert), `C-x r SPC` (save point), and `C-x r j` (jump). All data is persisted in browser local storage. Supports special 'rectangle' type storage when in rectangle mark mode.\n* **Rectangle Editing:** Enhanced rectangle support for mass-editing columns. Enter rectangle mark mode with `C-x SPC`, and perform operations like `C-x r k` (kill), `M-x kill-ring-save` (copy), and `C-y` (yank). The editor intelligently detects rectangular data in the kill ring and registers.\n* **Full Unicode Support:** Robust handling of surrogate pairs (emojis, etc.) throughout the editor, ensuring characters are never split during editing or navigation.\n* **Accurate Word Navigation**: Utilizes the native `Intl.Segmenter` API for precise word boundary detection. It provides natural cursor movement (`M-f`, `M-b`, etc.) across CJK (Chinese, Japanese, Korean) text and supports subword navigation (e.g., `snake_case`) out of the box without additional configurations.\n* **Avy Jump Navigation (`C-'`):** Quick cursor movement within the visible viewport using target labels. Press `C-'` followed by a character to overlay matching locations with labels, then type the label to jump.\n* **Cursor Visual Effects (VFX):** Add dynamic visual flair to your cursor movement. Switch between 9 unique styles (including \"Light Particle\", \"Cyber Trace\", and \"Kawaii Shower\") or turn it off using dedicated shortcuts:\n  * `C-c 1` to `C-c 9`: Switch through different VFX styles.\n  * `C-c 0`: Turn VFX off.\n* **Lightweight Cursor-based Macros (Beta):** Reproduce repetitive text mutations (`insert`/`delete`) relative to the cursor position (`C-x (`, `C-x )`, `C-x e`). Supports prefix arguments for repetition (e.g., `C-u 10 C-x e`).\n* **Customizable Color Themes:** Personalize your workspace with color themes. Switch between built-in modes like **\"Dark\"**, **\"Light\"**, **\"Cyber\"** (Neon/Futuristic), and **\"Cute\"** (Pastel/Macaron) using `M-x \u003ctheme-name\u003e-theme`. Note: Application restart is required for changes to take effect.\n* **MCP Server Integration**: Functions as a Model Context Protocol (MCP) server, allowing AI assistants (Google Antigravity, Claude Desktop/Code, etc.) to read/edit buffers and control the editor directly via the **`ELECXZY_MCP_MODE`** environment variable.\n* **Custom Keybindings (`keybinds.json`)**: Override or remove default keybindings without rebuilding. Drop a `keybinds.json` next to `config.json` (open it any time with `M-x show-keybinds-config`); Emacs-style notation is supported (`\\C-` = Ctrl, `\\M-` = Alt, space-separated tokens form a key sequence like `\"C-x C-f\"`), and an empty string value removes a binding. Parsing or validation problems are reported once in the echo line and never crash editing. Example:\n  ```json\n  {\n      \"\\\\C-s\": \"save-buffer\",\n      \"C-x C-r\": \"mark-whole-buffer\",\n      \"\\\\C-_\": \"\"\n  }\n  ```\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot1.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot4.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot6.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot8.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot14.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot12.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot13.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n\u003c/p\u003e\n\n### MCP Server Integration\n\n`elecxzy` can function as an MCP server. By connecting your AI assistant to `elecxzy`, the AI can gain direct access to your open buffers, layout, and editing commands. This allows for powerful AI-driven editing workflows.\n\n\u003e [!IMPORTANT]\n\u003e Before starting the MCP server, configure **Allowed Save Directories** in `Settings → MCP` (or `mcpAllowedDirectories` in `config.json`). The MCP `save_file` tool can only write to paths under one of these directories. `M-x mcp-start` aborts with an echo-line message if the list is empty or contains a non-existent path.\n\n#### Configuration (Google Antigravity / Claude Desktop / Claude Code)\n\nAdd the following to your `claude_desktop_config.json` or the relevant configuration section of your AI agent (like Google Antigravity), referring to one of the examples below:\n\n```json\n{\n  \"mcpServers\": {\n    \"elecxzy\": {\n      \"command\": \"C:\\\\path\\\\to\\\\elecxzy\\\\elecxzy.exe\",\n      \"args\": [\"C:\\\\path\\\\to\\\\elecxzy\\\\resources\\\\app.asar\"],\n      \"env\": {\n        \"ELECXZY_MCP_MODE\": \"true\",\n        \"ELECTRON_RUN_AS_NODE\": \"1\"\n      }\n    }\n  }\n}\n```\n\n```json\n{\n  \"mcpServers\": {\n    \"elecxzy\": {\n      \"command\": \"C:\\\\Users\\\\...\\\\AppData\\\\Local\\\\Programs\\\\elecxzy\\\\elecxzy.exe\",\n      \"args\": [\"C:\\\\Users\\\\...\\\\AppData\\\\Local\\\\Programs\\\\elecxzy\\\\resources\\\\app.asar\"],\n      \"env\": {\n        \"ELECXZY_MCP_MODE\": \"true\",\n        \"ELECTRON_RUN_AS_NODE\": \"1\"\n      }\n    }\n  }\n}\n```\n\n### Tech Stack\n\n- **Platform**: Electron\n- **Frontend**: React, TypeScript\n- **Styling**: Styled-components\n\n### Commands and Customization\n\nFor a full list of available commands and keybindings, please refer to:\n👉 **[COMMANDLIST.md](./COMMANDLIST.md)**\n\n---\n\n\u003ca name=\"japanese\"\u003e\u003c/a\u003e\n## 日本語\n\n`elecxzy` は、Electronを基盤として開発された、Emacsキーバインドをサポートするテキストエディタです。\nLispなどのスクリプトエンジンは内蔵していませんが、テキスト編集機能を提供するMCP（Model Context Protocol）サーバー機能を備えており、各種AIアシスタントから直接エディタを操作することが可能です。\nあらかじめ使いやすい設定をデフォルト値として組み込んでおくことで、初期設定のオーバーヘッドを減らし、インストール直後からすぐに作業を開始できることを目的に設計されています。\n\n### ダウンロード\n\n**Windows専用**\n\n[![Microsoft Storeからダウンロード](https://img.shields.io/badge/Download-Microsoft_Store-0078D4?style=for-the-badge\u0026logo=microsoft\u0026logoColor=white)](https://apps.microsoft.com/detail/9P32F2WFL69M)\n\nMicrosoft Store版は、自動更新が提供されます。最新の開発版（GitHub経由）は以下から入手可能です：\n👉 **[GitHub Releases](https://github.com/kurouna/elecxzy/releases)**\n\n*※ソースコードは現在非公開です。*\n\n### アーキテクチャと設計方針\n\n- **基盤技術**: Electronフレームワークをベースとし、UIの構築にHTML/CSS、アプリケーションロジックにTypeScriptを採用しています。メインプロセスとレンダラープロセス間のIPC通信を用いて、ファイルやウィンドウのシステム処理を連携させています。\n- **バッファ管理**: 赤黒木（RB-Tree）ベースの Piece Table をデータ構造として採用しています。差分（Delta）を利用したインクリメンタルなUndo履歴の構築により、大容量ファイルにおいてもメモリ使用量を抑えつつ編集操作が可能です。\n- **描画エンジン**: 仮想レンダリングによるカスタム描画系を実装しています。Canvas APIを利用した高精度な文字幅計測を組み込むことで、フォントサイズや全角・半角文字の混在に起因するレイアウトのズレを防ぎ、論理的なカーソル配置とスクロール計算を行っています。\n- **IME入力制御**: DOMのcompositionイベントを利用して未確定文字の強制確定やフォーカス管理を行っているほか、プリフィックスキー（`C-x`等）の入力直後はIMEの入力を無視する制御を入れることで、Emacsキーバインドと日本語入力の競合を防ぎ、コマンド実行の確実性を向上させています。\n- **設定機構**: 動的なスクリプトエンジンを持たず、静的な設定ファイル（`config.json` および `color-config.json`）を用いてエディタの外観や基本的な挙動を管理します。\n\n### 主な機能\n\n* **Emacs互換の操作体系**: 基本的なカーソル移動（`C-n`, `C-a`等）、再帰的なウィンドウの分割と比率変更（`C-x 2`, `C-x ^`等）、ウィンドウレイアウトのアニメーション付き再構成（`C-x w t` で転置、`C-x w f` / `C-x w v` で左右・上下反転、`C-x w r \u003cRight\u003e` / `\u003cLeft\u003e` でレイアウト 90° 回転、`C-x w o \u003cRight\u003e` / `\u003cLeft\u003e` でペイン間バッファ循環シフト）、キルリングの管理（`C-w`, `M-w`, `C-y`, `M-y`）をサポート。\n* **検索・置換機能**: インクリメンタル検索（`C-s`）、対話的置換（`M-%`）、およびバックグラウンドのOSプロセス（Windowsでは `findstr`、他環境では `grep`）を用いたディレクトリ内テキスト検索（`M-x grep`）。\n* **動的単語補完**: バッファ近傍の文字列から推測する `dabbrev-expand` (`M-/`)。日本語などのマルチバイト文字の抽出に対応し、Undo履歴管理との連携を維持します。\n* **リアルタイムプレビュー**: MarkdownおよびHTMLの編集内容を反映するプレビューモード。ソースバッファのスクロールに連動してプレビュー側もスクロールする片方向スクロール同期を備えています。\n* **ウィンドウ・バッファ管理**: バッファの切り替え (`C-x b`) や専用のバッファリスト機能 (`C-x C-b`) を備えるほか、ミニバッファによるファイル操作に加えて、OSネイティブのファイル選択・保存ダイアログ (`C-x M-f`, `C-x M-w`) もサポートします。\n* **サイドバー型ファイラ機能**: ウィンドウ左側に表示されるファイルエクスプローラ (`C-x d` / `C-c d`)。素早くファイルの中身を確認できるプレビュー機能 (`l` / `Right`) や、Windows環境のシステムドライブにも対応したディレクトリナビゲーション (`r`, `u`) を備えています。\n* **右サイドバー機能群:** ウィンドウ右側に表示される、編集を効率化するための各種専用サイドバーを搭載：\n  * **ワークスペース・サイドバー** (`C-c w`, `C-,` または `M-x toggle-workspace-sidebar`): 複数のフォルダをまとめて管理。VS Code互換の `.code-workspace` ファイルの読み書きに対応しています。\n  * **アウトラインビュー** (`C-c o`): Markdown/HTMLの見出し階層を表示。エディタとのリアルタイム同期や位置復元に対応。\n  * **キルリング・サイドバー** (`C-c y` または `M-x browse-kill-ring`): キルリング（クリップボード履歴）を一覧し、過去のテキストを選択してヤンク（貼り付け）可能。\n  * **レジスタ・サイドバー** (`C-c r` または `M-x browse-registers`): 保存されているテキストや位置（レジスタ）を一覧。\n  * **Undo 履歴サイドバー** (`C-c u` または `M-x browse-undo-history`): 現在のバッファの Undo 履歴を中身付きで一覧表示し、選択した項目までまとめて Undo できます。サイドバー経由のまとめ Undo は 1 回の Redo で一括復元できます（Word/Excel と同様）。\n  * **最近使ったファイルサイドバー** (`C-c c` または `M-x browse-recent-files`): 最近使用したファイルをディレクトリパスと共に一覧表示し、素早く開くことが可能。\n  * **設定サイドバー** (`C-c s`, `C-.` または `M-x open-config`): フォント、テーマ、行番号表示などのエディタ設定を視覚的に管理。\n* **シェル統合**: エディタ内で対話的シェル（cmd.exe等）を実行するバッファ機能 (`M-x shell`)。\n* **メジャーモード**: ファイルの拡張子判定に基づくシンタックスハイライト。\n* **ミニバッファ補完**: `M-x` 時のコマンドのほか、ファイルパスやディレクトリパスの補完機能を搭載。\n* **ドキュメント・インポーター**: PDF、Word (**`.docx`**)、Excel (**`.xlsx`**) 形式のファイルを、プレーンテキストとして自動的に抽出・インポートして開くことが可能です。Excel は各シートが TSV 形式で読み込まれます。**注意:** 元のバイナリファイルを破壊しないよう、インポートされたバッファは自動的に**「読み取り専用（Read-only）」**として開かれます（安定性確保のため、**50MBまでのサイズ制限**があります）。抽出したテキストを保存する場合は `Save As` (`C-x C-w`または`C-x M-w`) を使用してください。\n* **ファイル・エンコーディング管理**: オートセーブ、最近開いたファイルの履歴 (`M-x recentf-open-files`)、自動UTF-8昇格、および印刷機能 (`M-x print-buffer`) に対応。\n* **段落整形機能 (`M-q`)**: 指定した桁数でテキストをハードラップし、段落を美しく再整形する `fill-paragraph` 機能を搭載。\n* **永続化レジスタ機能**: テキストやカーソル位置を一時的に記憶（レジスタ）し、必要な時に呼び出せます。保存内容はローカルストレージへ永続化されます。対応コマンド: `C-x r s` (コピー), `C-x r i` (挿入), `C-x r SPC` (点保存), `C-x r j` (ジャンプ)。矩形選択モード中であれば矩形データとしても保存可能です。\n* **矩形編集機能**: 縦方向にテキストを操作する矩形編集を正式にサポート。`C-x SPC` で矩形マークモードに入り、`C-x r k` (切り取り) やヤンク (C-y) が可能です。キルリングやレジスタに保存された矩形データは、貼り付け時に自動的に判別・展開されます。\n* **サロゲートペアへの完全対応**: 絵文字や特殊漢字などのサロゲートペアを「一文字」として厳格に管理。編集・移動・整形時に文字が分断されることのない堅牢なテキスト処理を実現。\n* **正確な単語ナビゲーション**: ネイティブの `Intl.Segmenter` API を利用した単語境界の判定を実装しています。日本語（CJK）における自然な文節移動や、スネークケース（`snake_case`）などのサブワード単位でのカーソル移動（`M-f`, `M-b` など）に標準で対応しています。\n* **Avy ジャンプ (`C-'`):** 画面内の表示領域に対して、ラベル入力を用いたカーソル移動。`C-'` に続けて文字を入力すると座標にラベルが重畳表示され、それをタイピングすることで目的の場所へ即座にジャンプできます。\n* **カーソルVFX:** カーソルの移動に合わせて動的な視覚効果（粒子、雷、カワイイシャワー、分身など）を表示します。ショートカットキーで9種類のスタイルを瞬時に切り替え可能です。\n  * `C-c 1` 〜 `C-c 9`: 各種VFXスタイルを選択。\n  * `C-c 0`: VFXをオフにします。\n* **簡易的なカーソルベースマクロ (Beta):** カーソル位置を基準としたテキスト操作（挿入・削除）を記録・再現します（`C-x (`, `C-x )`, `C-x e`）。ユニバーサル引数による連続実行（`C-u 10 C-x e` 等）にも対応しています。\n* **カスタマイズ可能なカラーテーマ:** カラーテーマで作業空間をパーソナライズできます。**\"Dark\"**, **\"Light\"**, **\"Cyber\"** (ネオン/近未来), **\"Cute\"** (パステル/マカロン) などの内蔵テーマを `M-x \u003cテーマ名\u003e-theme` コマンドで切り替え可能です。※設定の反映にはアプリケーションの再起動が必要です。\n* **MCP サーバー統合**: Model Context Protocol (MCP) サーバーとして動作可能。環境変数 **`ELECXZY_MCP_MODE`** を **`true`** に指定して起動することで、AI アシスタント（Google Antigravity, Claude Desktop/Code 等）から直接バッファの読み書きやエディタ操作が行えます。\n* **キーバインドのカスタマイズ (`keybinds.json`)**: 再ビルドなしに既定キーマップを上書き・削除できます。`config.json` と同じユーザデータフォルダに `keybinds.json` を置くだけ（`M-x show-keybinds-config` でいつでも開けます）。記法は Emacs 互換で、`\\C-` が `Ctrl`、`\\M-` が `Alt`、スペース区切りでキーシーケンス（`\"C-x C-f\"`）を表現できます。値を空文字 `\"\"` にするとそのバインドを削除します。JSON の構文エラーや未登録コマンド ID などはエコーラインに 1 度だけまとめて表示され、起動・編集を止めることはありません。例:\n  ```json\n  {\n      \"\\\\C-s\": \"save-buffer\",\n      \"C-x C-r\": \"mark-whole-buffer\",\n      \"\\\\C-_\": \"\"\n  }\n  ```\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot1.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot2.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot6.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot8.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot14.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot12.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n  \u003cimg src=\"./assets/screenshot/screenshot13.png\" height=\"200\" alt=\"elecxzy Screenshot\"\u003e\n\u003c/p\u003e\n\n\n### MCP サーバー統合\n\n`elecxzy` は MCP サーバーとして動作します。お使いの AI アシスタント（Google Antigravity や Claude Desktop/Code 等）と連携させることで、AI が開いているバッファの内容を読み取ったり、直接編集したりといった強力なエージェント操作が可能になります。\n\n\u003e [!IMPORTANT]\n\u003e MCP サーバーを起動する前に、`設定サイドバー → MCP` の **Allowed Save Directories**（または `config.json` の `mcpAllowedDirectories`）に保存を許可するディレクトリを登録してください。MCP の `save_file` ツールは、登録されたいずれかのディレクトリ配下にしか書き込めません。リストが空、または存在しないパスを含む場合、`M-x mcp-start` は起動を中断し、エコーラインに案内を表示します。\n\n#### 設定方法 (Google Antigravity / Claude Desktop / Claude Code)\n\n`claude_desktop_config.json` や、Google Antigravity の設定セクションに以下のいずれかの内容を参考にして追加してください：\n\n```json\n{\n  \"mcpServers\": {\n    \"elecxzy\": {\n      \"command\": \"C:\\\\path\\\\to\\\\elecxzy\\\\elecxzy.exe\",\n      \"args\": [\"C:\\\\path\\\\to\\\\elecxzy\\\\resources\\\\app.asar\"],\n      \"env\": {\n        \"ELECXZY_MCP_MODE\": \"true\",\n        \"ELECTRON_RUN_AS_NODE\": \"1\"\n      }\n    }\n  }\n}\n```\n\n```json\n{\n  \"mcpServers\": {\n    \"elecxzy\": {\n      \"command\": \"C:\\\\Users\\\\...\\\\AppData\\\\Local\\\\Programs\\\\elecxzy\\\\elecxzy.exe\",\n      \"args\": [\"C:\\\\Users\\\\...\\\\AppData\\\\Local\\\\Programs\\\\elecxzy\\\\resources\\\\app.asar\"],\n      \"env\": {\n        \"ELECXZY_MCP_MODE\": \"true\",\n        \"ELECTRON_RUN_AS_NODE\": \"1\"\n      }\n    }\n  }\n}\n```\n\n### 技術スタック\n\n- **プラットフォーム**: Electron\n- **フロントエンド**: React, TypeScript\n- **スタイリング**: Styled-components\n\n### コマンド一覧\n\nすべてのコマンドとキーバインドの詳細については、以下をご参照ください。\n👉 **[COMMANDLIST.md](./COMMANDLIST.md)**\n\n---\n\n## FAQ\n\n### English\n\n**Q: Is word wrap (wrapping at the window edge) supported?**\n\nA: We currently have no plans to support dynamic word wrap. Implementing line folding requires complex rendering calculations, which would negatively impact the predictability of the virtual rendering system and overall maintainability. As an alternative, please use the **`M-q` (Fill Paragraph)** command to perform hard-wrapping, enable **`auto-fill-mode`** to automatically insert newlines as you type, or use **`C-;` (Show Line Expansion)** to temporarily view truncated lines in an overlay.\n\n**Q: Horizontal scrolling with my mouse tilt-wheel doesn't work.**\n\nA: Depending on your environment, mouse utility software (e.g., Logi Options) may block horizontal scroll signals (deltaX) for unrecognized applications. You can horizontally scroll by holding the **Shift** key while rotating the vertical wheel.\n\n**Q: The cursor is misaligned when using \"MS Gothic\" or \"MS Mincho\" fonts.**\n\nA: This behavior is due to conflicting legacy bitmap data within these older fonts and the modern Canvas-based text measurement. For proper cursor alignment, we recommend using modern monospace fonts such as **BIZ UDGothic**.\n\n**Q: I see leftover files named `.\u003cfilename\u003e.tmp-*` in my edit folder. Are they safe to delete?**\n\nA: Yes, you can delete them safely. elecxzy uses an atomic-save pattern (write to a temp file, then rename) to prevent file corruption on crashes, and these temp files are normally cleaned up automatically. If one remains, it usually means antivirus software or a cloud-sync tool (e.g., OneDrive, Dropbox, Google Drive) briefly locked the temp file and the rename step failed — your original file is unaffected, but the temp file got stranded. If this happens often, add the folder you edit in to the exclusion list of your antivirus or cloud-sync tool.\n\n### 日本語\n\n**Q: 右端で折り返し表示はできないのですか？**\n\nA: 現時点では、ウィンドウ端での動的な折り返し（ソフトラップ）には対応していません。折り返し処理の実装は、仮想レンダリングにおける座標計算の複雑化を招き、実行速度やコード保守性の低下に繋がるためです。代替手段として、**`M-q` (Fill Paragraph)** コマンドによる整形、入力に追従して自動的に改行を挿入する **`auto-fill-mode`**、または右端で切れた行を一時的に展開表示する **`C-;` (Show Line Expansion)** をご利用ください。\n\n**Q: マウスのチルトホイールを倒しても水平スクロールが動作しません。**\n\nA: 一部のマウスユーティリティソフト（例：Logi Options）がインストールされている環境では、アプリケーションに対する水平スクロール信号がブロックされる場合があります。**Shiftキーを押しながらホイールを縦に回転**させることで、水平スクロールが可能です。\n\n**Q: 「MS ゴシック」や「MS 明朝」を使うと、カーソルの位置がずれます。**\n\nA: 古いフォントに内蔵されているビットマップ仕様と、Canvas APIを利用した文字幅計測エンジンとの間で生じる挙動です。正確なカーソル配置のためには、表示が滑らかな **BIZ UDGothic** などのモダンな等幅フォントの使用を推奨します。\n\n**Q: 編集フォルダに `.\u003cfilename\u003e.tmp-*` というファイルが残っています。削除しても問題ありませんか？**\n\nA: 削除して問題ありません。elecxzy はクラッシュ時のファイル破損を防ぐため、アトミック保存方式（一時ファイルに書き込んでからリネーム）で保存しており、これらの一時ファイルは通常自動的に削除されます。残っている場合は、ウイルス対策ソフトやクラウド同期ソフト（OneDrive、Dropbox、Google Drive など）が一時ファイルを瞬間的にロックし、リネーム手順が失敗したことが原因です（元のファイルには影響ありません）。頻繁に発生する場合は、編集対象のフォルダをウイルス対策ソフトやクラウド同期ソフトの除外設定に追加してください。\n\n---\n\n## License / ライセンス\n\nThis software is released under the [MIT License](./LICENSE). \n本ソフトウェアは [MITライセンス](./LICENSE) のもとで公開されています。\n\n## Acknowledgements / 謝辞\n\nThis application is deeply inspired by the design and philosophy of the following pioneering editors. We express our utmost respect and gratitude to their creators and contributors:\n\n本アプリケーションは、以下の先駆的なエディタの設計と哲学に深くインスパイアされています。これらの優れたソフトウェアを生み出した開発者およびコミュニティの皆様に、最大限の敬意と謝意を表します。\n\n- **GNU Emacs**\n  - Copyright (C) 1985-2024 Free Software Foundation, Inc.\n  - Created by Richard Stallman\n\n- **xyzzy**\n  - Copyright (c) 1996-2005 Tetsuya Kamei\n  - Copyright (c) 2012-2014 xyzzy Project\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkurouna%2Felecxzy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkurouna%2Felecxzy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkurouna%2Felecxzy/lists"}