ほとんどのグラフィカルなデスクトップ環境で、Emacsはドラッグアンドドロップ(drag and drop)操作にたいする、基本的なサポートを提供します。たとえばEmacsのフレームにテキストをドロップすると、ドロップされた箇所にテキストを挿入し、ファイルをドロップすると、Emacsフレームはそのファイルをvisitします。特別なケースとしては、Diredバッファーにファイルをドロップすることにより、バッファーに表示されているディレクトリーにファイルを移動またはコピーします(アプリケーションの慣例に基づきます)。
ファイルをドロップすると、通常はドロップされたウィンドウでファイルをvisitします。そのような場合に、新しいウィンドウでファイルをvisitしたいときは、変数dnd-open-file-other-window
をカスタマイズします。
現在のところ、XDNDおよびMotif drag and drop protocolsと、古いKDE 1.x protocolがサポートされています。
Emacsのウィンドウにテキストをドラッグしている際に、スクロールやドロップされたテキストが挿入される場所を判断するのが難しい場合があるでしょう。オプションdnd-indicate-insertion-point
を非nil
値にセットすれば、ドラッグ中にマウスがウィンドウ内を移動する際にドロップされるテキストが挿入される位置にポイント移動がするようにできます。またdnd-scroll-margin
を整数値にセットすれば、ドラッグ中にウィンドウの上端または下端の指定した行数部分にマウスが移動するとウィンドウがスクロールするようにできます。
Emacsはオプションで、テキストのリージョンを他のバッファーの他の部分へドラッグする操作もサポートします。これを有効にするには、変数mouse-drag-and-drop-region
を非nil
値にカスタマイズしてください。通常そのテキストは、ドロップ先が元のリージョンと同じなら移動(カットアンドペースト)され、他のバッファーならそのリージョンがコピーされます。この変数の値が‘shift’、‘control’、‘alt’のような修飾キー名の場合、その修飾キーを押しながらテキストをドロップすると、ドロップ先がドラッグ元と同じバッファーでも、テキストはカットされずにコピーされます。
ドラッグ元とドロップ先が異なるバッファーのときにもテキストをカットするためには、オプションmouse-drag-and-drop-region-cut-when-buffers-differ
を非nil
値にセットします。デフォルトでは、グラフィカルなディスプレイの選択されたテキストはツールチップ内に表示され、ドラッグ中にはマウスカーソルとともにポイントが移動します。このような動作を抑止するには、オプションmouse-drag-and-drop-region-show-tooltip
、および/またはmouse-drag-and-drop-region-show-cursor
にnil
をセットしてください。
Emacsから他のプログラムにテキストをドラッグできるようにするには、オプションmouse-drag-and-drop-region-cross-program
に非nil
値をセットしてください。
Xウィンドウシステムでは、Emacsによるファイルの保存を期待してファイルをEmacsにドロップできるプログラムがいくつかあります。通常だとEmacsはファイルを保存する名前の入力を求めた後にそのファイルをオープンしますが、変数x-dnd-direct-save-function
を変更することによってこの挙動を変えることができます。Drag
and Drop in The Emacs Lisp Reference Manualを参照してください。