Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

line-mover

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 のフレームワークのみ。単一ファイル。

動作の仕組み

  1. CGEventTapOption + ↑/↓ の keyDown を捕捉し、元イベントを抑制します。
  2. フォーカス要素を「最前面アプリのプロセス経由」で取得します(AXUIElementCreateApplicationkAXFocusedUIElementAttribute)。
  3. role が AXTextArea / AXTextField のときだけ処理します。それ以外は元の動作を素通しします。
  4. AXValue(全文)と AXSelectedTextRange(選択範囲)を読み、対象行ブロックを上下の行と入れ替えて書き戻し、選択範囲を張り直します。

ビルド

./build.sh

line_mover_native.swift をコンパイルし、メニューバー常駐アプリ LineMover.app を組み立てます(Swift 5.10 で動作確認済み)。

実行

  1. Finder で LineMover.app をダブルクリックして起動します。メニューバー右上にアイコン(↑↓)が出ます。
  2. 初回はアクセシビリティ権限が必要です。メニューの 「アクセシビリティ設定を開く…」 から、システム設定 > プライバシーとセキュリティ > アクセシビリティLineMover を許可してください。権限が付与されると自動でホットキーが有効になります。
  3. 任意のテキスト編集領域にカーソルを置き、Option + ↑/↓ で行を移動します。
  4. メニューの「有効」で ON/OFF を切り替え、「Line Mover を終了」で終了します。

対応状況・制限

  • 対応: AXTextArea / AXTextField(Apple のメモアプリ等で確認済み)。
  • 改行コードは \n を前提にしています(macOS ネイティブのテキストシステムは \n)。\r\n(Windows 由来)を使うアプリには未対応です。
  • Google Docs のような canvas 描画エディタには非対応です(AX からテキストを読めないため)。
  • アプリによっては AX 経由の書き込みを許可していない場合があります。

License

MIT

About

Move the current line (or selection) up/down with Option+↑/↓ in any macOS text field — VS Code-style Move Line, system-wide, via the Accessibility API.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages