Move the current line (or a multi-line selection) up and down with Option + ↑/↓ in any macOS text field — the same behavior as VS Code's Move Line Up/Down, system-wide.
It works by reading and writing text directly through the macOS Accessibility API (AX API), so it never uses the clipboard and never synthesizes cut/paste keystrokes. That avoids the usual breakage where injected shortcuts leak into other apps.
macOS のどんなテキスト入力欄でも Option + ↑/↓ でカーソル行(または複数行の選択)を上下に移動できる、行移動専用ツールです。VS Code の Move Line Up/Down と同じ挙動をシステム全体で実現します。
- メニューバー常駐 — 画面右上のアイコンから ON/OFF・終了。Dock には出ません。
- クリップボード非使用・キー送出非使用 — アクセシビリティAPI(AX API)でテキストを直接読み書きするため、他アプリのショートカットに漏れません。
- 単一カーソル・複数行選択の両対応 — 選択がまたがる行ブロックを丸ごと移動し、選択範囲も追従します。
- 依存ゼロ — Swift 標準ライブラリと macOS のフレームワークのみ。単一ファイル。
CGEventTapでOption + ↑/↓の keyDown を捕捉し、元イベントを抑制します。- フォーカス要素を「最前面アプリのプロセス経由」で取得します(
AXUIElementCreateApplication→kAXFocusedUIElementAttribute)。 - role が
AXTextArea/AXTextFieldのときだけ処理します。それ以外は元の動作を素通しします。 AXValue(全文)とAXSelectedTextRange(選択範囲)を読み、対象行ブロックを上下の行と入れ替えて書き戻し、選択範囲を張り直します。
./build.shline_mover_native.swift をコンパイルし、メニューバー常駐アプリ LineMover.app を組み立てます(Swift 5.10 で動作確認済み)。
- Finder で
LineMover.appをダブルクリックして起動します。メニューバー右上にアイコン(↑↓)が出ます。 - 初回はアクセシビリティ権限が必要です。メニューの 「アクセシビリティ設定を開く…」 から、システム設定 > プライバシーとセキュリティ > アクセシビリティ で
LineMoverを許可してください。権限が付与されると自動でホットキーが有効になります。 - 任意のテキスト編集領域にカーソルを置き、
Option + ↑/↓で行を移動します。 - メニューの「有効」で ON/OFF を切り替え、「Line Mover を終了」で終了します。
- 対応:
AXTextArea/AXTextField(Apple のメモアプリ等で確認済み)。 - 改行コードは
\nを前提にしています(macOS ネイティブのテキストシステムは\n)。\r\n(Windows 由来)を使うアプリには未対応です。 - Google Docs のような canvas 描画エディタには非対応です(AX からテキストを読めないため)。
- アプリによっては AX 経由の書き込みを許可していない場合があります。