1997,1998,1999 S.Namba <email@example.com>
Dired-dd (aka Dired-DragDrop)
is a minor mode enabling mouse interface
It provides facilities in
ange-ftpworks -- It means that you can FTP via drag drop (except `Copy Recursive' in menu entry).
find-dired, find-grep-dired, locate-diredor all other dired-related-stuff-compatible
locate-dired can be located in `spinout' directory of
dired-dd distribution. The `spinout' directory contains other
assorted stuffs including a patch for `archie.el', elisp codes for
URL-to-ange-ftp conversion, Netscape bookmark stealer, and others that
work well with
dired-dd is distributed under GPL (version 2). See section COPYING.
dired-dd was written and tested on mule-2.3 (both of official
emacs-19.28, and unofficial emacs-19.34 based versions) and emacs-20.2
and 20.3. It works fine on the 19.x and 20.x emacsen, but some
behaviours (eg. menu appearance) are not exactly the same. Emacs-18
(Nemacs) is not supported at all. Perhaps
dired-dd won't work in
XEmacs, in which
dired is totally different from FSF emacsen. It
has not been tested on Windows version of emacs / mule.
dired-x features intensively and
extensively. See section Installing
dired-dd for minimum setup of
dired-x just for
dired-dd, or further refer to
dired-x info file (M-x info RET and search for
`Dired-X') for datailed information on setup and customization of
dired-x is included in a standard emacs
distribution, so you shouldn't have to FTP it.
dired-dd is composed of
`dired-dd.el' and `dired-dd-b3-menu.el'.
Byte-compile these two files
and copy derived
`dired-dd-b3-menu.elc' into your emacs's load path
(`/usr/local/share/emacs/site-lisp/', `~/elisp' or wherever appropriate). Byte-compiling of `dired-dd.el' and `dired-dd-b3-menu.el' is strongly recommended.
This two-step file installation can be done by attached `Makefile'.
In this `Makefile', the default
are defined as:
Thus, if your emacs is `/gnu/bin/emacs' and your lisp directory is `/gnu/lib/emacs/site-lisp', invoke `make' with overriding the defaults above:
$ make emacs=/gnu/bin/emacs compile $ make emacs=/gnu/bin/emacs install elispdir=/gnu/lib/emacs/site-lisp
Include add-hook codes below in your `~/.emacs':
;;(setq dired-dd-mode-as-default nil) (add-hook 'dired-load-hook (function (lambda () (load "dired-x") ;; Set dired-x variables here. ;; To and flo... (if window-system (require 'dired-dd)))))
In dired-load-hook, you can customize various
(see section `Installation' in dired-x info).
dired-dd-mode is implemented as a minor mode for
If you do not want to turn on
dired-mode, remove "
(setq dired-dd-mode-as-default nil) in the example above.
If you set
dired-dd-mode-as-default to nil, you have to
dired-dd-mode with manual operation
(see section Dired-dd minor mode).
PostScript formatted version of this info is included under the
distribution directory. If you want hardcopy, issue shell
command such as
lpr -Pps dired-dd.ps.
Of course, `dired-dd.info', and perhaps `dired-dd_toc.html'
and `dired-dd.html' can be found in the same directory. Use your
favorite WWW browser to read the html version. For
dired `I' command, or
dired-dd menu raised by mouse-3 (or install it in your info
The `dired-dd.ps' was formatted with `dvi2ps' as can be seen in the `Makefile', with PostScript version of `cm' fonts. If you do not have PostScript `cm' fonts, or want to print it with genuine `pk' fonts for some reason, run `texi2dvi' locally. Texinfo version used for drafting this info seems to be 2.145, according to `texi2dvi' output (maybe it is old ?).
Since version 0.9.1.6,
dired-dd is distributed under GPL (version 2).
The older versions might include different copying notice (even if I believe they were also `Free Software' as well), but forget all about those obsolete versions.
I take GPL because I think it is the best way to distribute my work on elisp for `free', and express my respect to all the emacs related works ever been achieved.
The files under `spinout' directory may not all have the GPL copying notice in order to save storage space, but consider them protected under GPL as well.
I cite the copying notice at the top of this texi/info file hereunder, for it may not be seen via info browser.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
dired-dd-mode is implemented as a normal minor mode for
dired-mode. M-x dired-dd-mode RET toggles on / off state
dired-dd-mode is turned on, string
"DragDrop" appears in modeline.
Further, issuing command C-u M-x dired-dd-mode RET
(with positive numeric argument) forces to turn
dired-dd-mode, while M- - M-x dired-dd-mode RET
(with negative numeric argument) turns it off.
You will notice that some of the mouse commands, for example
(mouse-drag-secondary), are totally disabled
dired-dd-mode. Turn off
dired-dd-mode manually, if you
want to use such commands on
dired-dd-mode-as-default controls whether
dired-dd-mode is automatically enabled or not (see section Turning on / off
dired-dd-mode as default minor mode) upon entering
It is possible to turn on
dired-dd-mode within a non-
buffer, but that is totally useless.
Dragging Mouse button 1 marks files or directories with
mouse command is almost compatible to ordinary
Double click of mouse Button 1 opens file(s) or directory(s) objects by an external application (shell command) or emacs. The opening method is automatically selected. The criteria for the opening method selection is whether any shell command is registered for the extension part of the file name of the objects.
The core part of the dragging is handled by function
dired-dd-drag-region, which is bound to down-mouse-1.
double-mouse-1 eventually executes
dired-dd, a single function may have multiple mouse bindings
for some technical reason. So, hereafter in this document, the
convention of normal emacs info, in which user command is often
designated such as
may not be followed in relevant sections below.
Dragging region by mouse button 1 marks or unmarks file(s) or directory(s)
with a mark
* (toggles marking status).
Moving the mouse horizontally a bit marks or unmarks a single file.
Dragged region is copied to the kill ring as a side effect.
Secondary selection handling with M-mouse-1 and M-mouse-2
is totally disabled.
* put by dragging of mouse button 1 is identical to the
* put by normal
dired keyboard command
(dired-mark)). All of the normal
keyboard commands, and menu bar or popup menu (in emacs-20.xx) commands
can properly interpret the mark
* put by Mouse Button 1. All of
the commands invoked by mouse buttons 2 and 3 work on files and/or
directories marked with this mark
* (if any marked file exists).
Pressing Meta key while dragging with mouse button 1 flags
files or directories with
D (delete) flag instead of mark
*. You can delete the files flagged with
D by hitting
(dired-do-flagged-delete). The only menu entry that
D flagged files is `Delete Flagged' entry found in
the menu raised by mouse button 3, which is equivalent to x
(dired-do-flagged-delete). The other commands invoked from mouse
buttons 2 and 3 do not affect
D flagged files, but
* marked files.
Double clicking mouse button 1 provides a generic file opening facility. The file is opend with an external application (shell command) predefined in association with the extension part of the file name, or if no such application is defined, double-mouse-1 falls back to a mere file opening operation using emacs buffer.
The opening target is marked with
*, or the double-
clicked file (or directory) if no file (or directory) is marked
Double-mouse-1 eventually calls a function
dired-dd-find-file-or-exec. This function first tries to invoke
a shell command (application) relevant to the extension of the file name
asynchronously. If it can't find such a shell command, the function
dired-dd-find-file-or-exec just opens marked (or clicked) file or
directory using the selected window displaying the current
The relationship between filename extensions and their respective
handling command (application) should be stored in a
dired-guess-shell-alist-default). This feature relies on
dired-x. C-h v dired-guess-shell-alist-user RET shows you
how to combine a command to a certain file extension (`*.jpeg' =>
execute `xv', etc), and the current relationship setup in the
variable. See section `Shell Command Guessing' in dired-x info.
Rough and ready interactive command
is provided to add entry in
However, the command
dired-dd-register-shell-alist is not
automatically called when there is no shell command is registered in
dired-guess-shell-alist-user. Further, no automatic saving
custom-file) is provided in current
dired-dd. Adding setup codes for
dired-guess-shell-alist-user in your `~/.emacs' is the most
handy and safe way to support new shell command for certain file
The invoked shell command output is collected in buffer `*dired-dd-proc*'.
All the processes invoked by
this buffer. Until all the processes sharing the buffer exit,
string `run' is shown in the mode line of the buffer `*dired-dd-proc*'.
After all the processes have exited, the mode line shows `exit'. The buffer `*dired-dd-proc*' exists just for collecting stdout/stderr output from the invoked command(s). Killing the buffer `*dired-dd-proc*' does no harm (perhaps) to invoked command(s). No fancy job control interface is implemented.
As described above, double clicking mouse button 1 automatically selects
file opening method, which works fine in most cases. However, no
matter how your
dired-guess-shell-alist-user definition is
designed carefully, there should be such situation that you have to
force either opening-by-emacs or open-by-external-application.
For instance, think about the case you have registered a shell script to
pass a marked HTML file to Netscape in
dired-guess-shell-alist-user, but you have to edit it in
HTML-helper mode in emacs.
Use mouse-2 (
dired-dd-find-file) to force opening a file
(or directory) with emacs, or M-mouse-2
dired-dd-exec-command-directly) to force execution of the
registered command explicitly (see section Click (Single)).
Mouse button 2 is the most important part of
handles Drag and Drop. Further, single clicking of Mouse button
2 opens files / directories, as well as executes command related to the
Users are strongly advised to create a directory or two accommodating
dummy files to try drag-and-drop operations and features of
dired-dd. There is "NO WARRANTY" for
(see section COPYING).
dired-dd-drag-drop takes charge in Drag and Drop
part of mouse button 2, and is bound to multiple mouse events such
as down-mouse-2, C-down-mouse-2, M-down-mouse-2.
With mouse button 2, you can drag marked (or on point) files or
directories, and drop them somewhere. You can drop the object into
dired buffer, or into directory line in the same
dired buffer. All of these drop targets are `directory'
A `drop target' may be not only a `directory object', but also a
`non-directory object'. For example, see what happens when you drop a
file or directory into non-
dired or non-
dired buffer, or target directory
line in a
dired buffer can be located anywhere in emacs. For
dired buffer and target
dired buffer may
be identical. Or, target
dired buffer, or target directory line
may be displayed in a window different from the `source'
window. The target
dired window can be accommodated in a
different emacs frame.
On drag and drop into a directory object (a
dired buffer or
directory line in a
dired buffer), a menu is popped up to ask
file operation method for the drag drop. The menu also includes several
entries which are thought to be convenient but may not be relevant
directly to drag and drop operation.
The job selected from the popup menu is immediately executed (copy, move, link etc.) if the target is explicit, while minibuffer prompt is raised if the target (normally it is a directory) is ambiguous.
The same menu is popped upon horizontal drag. This means that you made drag & drop into the same directory, if the dragged object is file(s). In this case, the destination of copy/move/link etc. is asked by minibuffer interface.
If the horizontally dragged object is a directory, note that the target
directory is not the same as the default directory of the
buffer (refer to subsection "Where is my file ?" below).
Also See section The Popup Menu for the menu raised by mouse button 2.
Drag and drop into non-directory object (other non-
the file or directory object is just opened using the window into which
it dropped (or defined function is executed. See below). This is an
emulation of a drag and drop operation, which can be commonly found in
various file managers and editing applications (eg. `Word' and
Offix `Files' and `Editor' or
`Trash' and so on).
The behaviour of on drag-and-dropping files into non-directory object
dired buffer) can be customized with variable
dired-dd-non-dired-drop-handlers. See section Customizing behavior on dropping into non-dired buffer for detailed informations.
On dropping onto non-
dired buffer located in another frame, files
or directories are opened using multiple windows.
Further, from version 0.9.1.7, the object can be dropped on root window.
Before 0.9.1.7, dropping object on root window was treated with message
"No emacs frame over there", but now the object (file or directory) is
opened by function
find-file-other-frame. The dropped file or
directory is opened using an independent frame, which is newly created,
or just raised (this behaviour may differ depending upon the window
manager in use) if it already exists. If variable
dired-dd-iconify-control-on-root-drop (default: nil) is non-nil,
the relevant frame is iconified or deiconified depending on its iconic
status. This iconify control may not work nicely (or be totally
ignored) in some version of emacs, or with some window manager.
As a handler routine for the dropping onto non-
dired target, an
emacs command (function)
dired-find-file-other-frame is provided.
This emacs command can be called from keyboard. Possible settings (not
well tested) in `./emacs':
(define-key dired-mode-map "\e\C-o" 'dired-find-file-other-frame) (autoload 'dired-find-file-other-frame "dired-dd" nil t)
Unfortunately, inter-application drag-and-drop is not supported yet (or
dired-dd. It seems that there are known some emacsen
which can handle inter-application drag-and-drop, but the authour may be
too busy to support them as a
dired-dd platform, or build
primitive functions for inter-application drag-and-drop disabled normal
Dragging with Control/Meta/Shift key is supported. These modifier keys are detected at the very timing of releasing mouse button (as in `XV''s Visual Schunauzer). Thus, in order to select file operation method, you may start drag with down-mouse-2, then press Control/Meta/Shift before releasing it, even if you rebind C-/M-/S-down-mouse-2 to other functions.
Each modifier specifies file (or directory) operation for the current drag and drop as follows:
In linking file / directory with Shift modifier, the link method
is determined by variable
(see section File linking method).
Be carefull when you drop a file or directory into in a
buffer. If a file or directory is dropped into an ordinary file line,
into the first header line, or into `.' line, it is
copied/moved/linked into the directory corresponding to the target
dired buffer's default directory as you may expect. However,
dropping a file or directory into a directory line in a
buffer means that you selected the directory (line) as the destination
directory. This is rational feature of
dired-dd, but the file or
directory may be copied/moved/linked to unintended place due to this
feature, if you do not care much about the target line. Especially when
you drop with the modifier keys, no menu is raised, nor destination is
displayed in the echo area of emacs, so please pay a special attention
on drop-target when you quick-drop with the modifier key.
Clicking mouse-2 opens, or executes shell commands on file (or directory). A mere click opens file using the currently selected window.
dired-dd-find-file) openes only clicked file (or directory) despite of existence of any marked file (or directory) in the
diredbuffer. Further, mouse-2 (
dired-dd-find-file-other-window) openes a file (or directory) using the window displaying the
diredbuffer, and this operation is incompatible to original
dired's mouse-2 command (
dired-mouse-find-file-other-window). This windowing behaviour can be customized (see section Find file method).
Further several modifiers are supported for a click of mouse-2:
dired-dd-find-marked-filesis provided is implemented. This function can alternatively be bound to, for example,
C-S-mouse-2with including a line
(define-key dired-dd-mode-map [C-S-mouse-2] 'dired-dd-find-marked-files)in your
dired-dd-load-hookdefinition (I think this binding is not what you want in most situations, though).
dired-dd-exec-command-directlybound to this mouse event asynchronously invokes a shell command (application) related to the filename extension of the marked or clicked file (or directory). Command output is collected in buffer `*dired-dd-proc*'. All the process invoked by
dired-dd-exec-command-directlyshares this buffer. Until all the process sharing the buffer are terminated, string `run' is shown in mode line of the buffer `*dired-dd-proc*'.
diredkeyboard command ! (
dired-do-shell-command). If you append "&" at the end of command line, the command is invoked asynchronously, but you have to rename `*Shell Command Output*' buffer to invoke multiple commands asynchronously. See See section Double click for
Mouse Button 3 raises a menu facilitating miscellaneous file operations.
This menu features various shell commands which are not available
directly from original
dired's menu-bar, or popup menu.
Clicking mouse Button 3 raises a full menu (not so `full' as
dired menu bar, but good enough for daily use, I suppose) to ask
a handling method (delete/copy/move... etc) for marked (or on point)
files delete/copy/move... etc.
Probably at the time of public release of
dired-dd, various of
shell commands will be bound which are not available direct from
dired menu bar or key binding. The menu raised by mouse
button 3 can be customized (see section Menu raised by Button 3).
Consider the default menu raised by mouse button 3 as just a customizable file operation menu. Also See section The Popup Menu for the menu raised by mouse button 3.
In Emacs-19.xx, S-mouse-3 raises the original
menu-bar as popup menu, which is a full-featured one. You can use
C-mouse-3 menu as it is in emacs-20.
This chapter deals with some caveats on the popup menus raised by mouse buttons 2 and 3.
Most of the entries in the menu raised by mouse-2 call ordinary
dired commands having
dired-do- prefix in
their function name. Thus, almost all of these `dired-compatible'
commands will work almost the same as you expect from normal
dired operations. At the same time, as a matter of course, the
same limitation of the
dired command is also applied: For
example, neither recursive copy of directory tree, nor moving directory
tree across different file systems is possible.
One exception is `Copy Recursive' entry (new from version 0.9) in
the menu raised by mouse-2 and mouse-3. This menu entry is
bound to functions `dired-dd-copy-recursive' (in case of
mouse-2), and `dired-dd-do-copy-recursive' (in case of
mouse-3). These `Copy Recursive' functions eventually call a
sub-shell command defined in a variable
dired-dd-copy-recursive-command, whose default value is `cp
-a', assuming it being GNU `cp' command.
If you do not have `cp' command which can be invoked as `cp -a file targetdir', install GNU fileutil, or write an equivalent script using `tar', `cpio' etc.
The menu entry `Copy Recursive' can copy files / directories fast across different file systems recursively, but do not work over FTP directory.
dired-dd-do-copy-recursive-regexp is also provided in
dired-dd. The command
dired-dd-do-copy-recursive, as well
dired-dd-do-copy-recursive-regexp can be bound to a key
similarly as in the case of standard
dired-do-xxx-regexp commands in
dired, for example:
(define-key dired-dd-mode-map "\eC" 'dired-dd-do-copy-recursive) (define-key dired-dd-mode-map "%c" 'dired-dd-do-copy-recursive-regexp)
(define-key dired-dd-mode-map "%R" 'dired-dd-do-copy-recursive-regexp)
These key bindings are not defined as a default in
because I do not think they are good ones. Choose any preferred key
bindings if you want to use these commands from keyboard as well.
`Move Recursive' is not supported in
dire-dd yet. If you do
not like to keep old directory after you have `copied recursive',
just erase it (the menu raised by mouse-3 has `Delete
The menu raised by mouse-3 has some more `dired-incompatible' commands. They are all conceived to provide convenience, but the in-compatibleness may irritate users. Just consider them as an example of customizable menu entry (see section Menu raised by Button 3).
From version 0.9.1.3, `Exec Related CMD' entry in mouse-2 menu
invokes shell command asynchronously. This menu item is compatible to
dired-dd-exec-command-directly). See section Click (Single).
From version 0.9.1.5, `Launch a Terminal' entry is the top item in the menu raised by mouse-3 no matter how the real emacs user hates it (or not). The `Refresh Listing' entry is moved down to the bottom accordingly.
This menu item runs shell command stored in variable
dired-dd-terminal-command, whose default value is `xterm',
or probably `kterm' depending upon environment variable
`LANG'. Set your favorite terminal emulator name in
dired-dd-terminal-command. Options may be included in
dired-dd-terminal-command, for example:
(setq dired-dd-terminal-command "rxvt -fn vga")
As in the case of
dired-dd-terminal-command may include
exec at the top of
its string value (e.g.
"exec rxvt -fn vga" for the example above)
to save memory, but this may not work in Emacs-19.xx (see section Bug, Caveats).
Mouse bindings below are enabled in
dired-dd minor mode:
diredkeyboard command w
(dired-copy-filename-as-kill)with nil prefix-arg.
diredkeyboard command w
diredkeyboard command *-!
(dired-unmark-all-marks)in emacs-20.xx, or M-DEL
(dired-unmark-all-files)RET in emacs-19.xx.
These bindings may be convenient in exchanging file name with `xterm', or `*shell*' buffer.
Further trivial functions may be bound to other mouse / key events. Try
C-h m (describe-mode) or C-h b (describe-bindings) in a
dired-dd enabled buffer.
This chapter deals with customizing of various
These variables controls various features of
The names are almost self-explanatory. Refer to the documentation string of the variables for detail (or see section Variable Index, for important variables are described in various places in this document) Hereafter, variables of reasonable importance are explained.
dired-dd-modeas default minor mode
dired-dd-mode-as-default determines if
dired-dd-mode should be automatically enabled or not when you
dired-mode with C-x d, C-x C-f, etc.
dired-dd-mode-as-default determines whether to add
dired-mode-hook or not.
Default value of
dired-dd-mode-as-default is t.
dired-dd-mode-as-default should be set before
actual loading of `dired-dd.elc' (if compiled) with expression such
(require 'dired-dd) or
See section Installation, and See section Dired-dd minor mode.
On running emacs, you can turn off
dired-dd-mode for forthcoming
dired-mode by evaluating
(remove-hook 'dired-mode-hook 'dired-dd-mode-enable)
or, turn it on again as default minor mode for
(add-hook 'dired-mode-hook 'dired-dd-mode-enable)
in `*scratch*' buffer, or M-: (ESC-ESC in emacs-19.xx).
In the default setting, if no suitable external shell command is
registered in association with the filename extention,
just one clicked file or directory even if any marked file (or
directory) exists in the
dired buffer. If you want to open the
marked files (not the clicked one), set variable
dired-dd-find-multiple-file to non-nil. This variable
dired-dd-find-multiple-file only affects the
dired-dd-find-file-or-exec, and has no effect on the
invoking the shell command (if any command is registered). If a shell
command is registered, double-mouse-1
dired-dd-find-file-or-exec) always invokes the registered shell
command over marked files. Also refer to the document string of
dired-dd-find-multiple-file with C-h v
You may want to setq
'dired-find-file-other-window, which emulates original
dired's mouse-2 binding (to
The default value of variable
relsymlink. According to this default, the object dragged and
dropped by S-drag-mouse-2 is linked relatively to the source path
of the object. Valid value is one of
relsymlink. For instance, if you want to link file(s) with
plain symbolic link, include
(setq dired-dd-default-link-method 'symlink)
in your `~/.emacs'.
dired-dd-default-symlink-method existed in older versions was
dired-dd-default-link-method, and is not used anymore.
If you have
dired-dd-default-symlink-method in your
`~/.emacs', rename it as well accordingly. Sorry for the
In older versions of
dired-dd, a drag-and-dropped file (or
directory) is just opend using target window if it is dropped into
non-directory buffer, but, from version 0.9.1.11, the behavior invoked
with such drag-and-drop operation can be customized.
User can define a prefered handler function to deal with the
drag-and-drop operation into non-directory buffer, and the handler
function can be registered in a variable
dired-dd-non-dired-drop-handlers (nil as default) in a list form.
Refer to `dired-dd-mew.el' included in
distribution. `Dired-dd-mew.el' contains an example of the handler
function and registering code. Also refer to
`dired-dd-insert-file.el', and `dired-dd-insert-fname.el',
which are yet other examples of the handler function.
`Dired-dd-mew.el' enables drag-and-dropping MIME attachment file(s) into Mew's draft buffer. `Dired-dd-insert-file.el' and `dired-dd-insert-fname.el' enable insert content, or filename of dropped file into a non-dired buffer respectively.
The handler functions registered in
dired-dd-non-dired-drop-handlers are called in the order of the
list until some of them succeeds from a function
dired-dd-exec-non-dired-drop-handlers, which is invokd from a
dired-dd-drop-from-to (a core part of drag-and-drop in
The handler function to be registered in
must accept one arg
ARGLIST, whose format is:
(FILENAME-LIST WINDOW MODIFIERS POINT)
The handler function can assume that current window/buffer is already switched to the target of the relevant drag-and-drop when it is called. It is responsibility of the handler function to examine whether the current window/buffer is suitable for its own job. The examination should be strict as possible, because it is not predictable that the user registers what sort of handler function in what order.
The handler function must return non-nil if its operation was successful, otherwise nil.
If the parameters included in the
ARGLIST is not enough, programmers can
access variables such as
etc., which are defined in upper functions. Refer to the upper functions
`dired-dd.el', for the meaning of those parameters.
I guess we might be allowed to indulge ourselves in being lisp programmers, in writing this sort of function for limited purpose.
Experimental code for playing sound upon drag and drop by mouse-2
is included, but this facility is disabled as a default. If you want to
play sound, set up these variables appropriately to match your
See the document strings of these variables. In future version, this sound facility may be removed (or not, I don't know).
Silly animation with X pointer is enabled by default (probably, if your
X display, or network between your X display and remote emacs is fast
enough). To turn off the animation, set
t. If the pointer
animation is disabled, the pointer shape (number) stored in variable
dired-dd-x-pointer-shape is used while dragging.
If you want to change the animation frames, modify variable
dired-dd-x-pointer-list which contains pointer shape as list.
The pointer number is defined in `$lisp/term/x-win.el'. To get the name of the x-pointer variables, M-x apropos ^x-pointer- RET will work. You can examine the shape of a x-pointer with an expression such as:
(let ((x-pointer-shape x-pointer-right-ptr)) (set-mouse-color nil))
Evaluate above expression in `*scratch*' buffer with C-j, or M-: (ESC-ESC in emacs-19.xx).
Further setting variable
dired-dd-awakening to non-nil (default:
nil) enables display of
dired-dd insignia upon every wake up of
dired-dd-mode. M-x dired-dd-version RET, or the last entry
"About dired-dd" in the menu raised by button 3 may display it as
well, in full format.
The entity of the
dired-dd insignia is
dired-dd-the-ball-of-fire. Code such as:
(autoload 'dired-dd-the-ball-of-fire "dire-dd" nil t) (add-hook 'find-file-hooks 'dired-dd-the-ball-of-fire)
will show you the road to awakening everywhere in emacs when you find new file.
The insignia may not be displayed if your X display or network between X display and remote machine running emacs is too slow. Sorry.
It may not be such a good idea to try to customize the menu raised by
Button 2. Currently variable
dired-dd-b2-menu, and its handler
routine are very nasty. Hack the source code, if you really want to
modify mouse-2 menu, but I might change the structure of
dired-dd-b2-menu (to normal keymap ?) totally in future version.
You can customize the menu raised by button 3 with modifying variable
dired-dd-b3-keymap is structured as a emacs keymap,
so you can use
define-key-after to customize
the menu as normal keymap.
dired-dd, the use of keymap is expanded (which may be an
`abuse'). You can define not only a normal menu keymap entry:
(define-key-after (lookup-key dired-dd-b3-keymap [file]) [open2] '("Open2" . find-file) 'o-other-win)
but also even an eval'able form (
(define-key-after (lookup-key dired-dd-b3-keymap [file]) [view2] '("View2" . (dired-view-file)) 'o-other-win)
Note that the second example above contains a non-command object as
dired-dd, if a key definition in the
is a symbol (
'find-file, in the first example above), the symbol
is called as command with passing marked filename(s) as a 1st argument
(repeatedly), while if the key definition is not a symbol (sexp
'(dired-view-file), in the second example above), it is just
Both the bindings above can only be handled by special function
dired-dd-x-popup-menu-out-of-keymap (and its upper function),
which acts similarly to
fed with non-keymap list as its 2nd argment.
Of course, you can undefine the unnecessary menu entry:
(define-key dired-dd-b3-keymap [arc lha-x] 'undefined) (define-key dired-dd-b3-keymap [arc lha-v] 'undefined)
dired-dd-b3-keymap can be inspected by evaluating
(x-popup-menu t dired-dd-b3-keymap)
(dired-dd-x-popup-menu-out-of-keymap t dired-dd-b3-keymap)
in `*scratch*' buffer.
Do not bind the variable
dired-dd-b3-keymap directly to
normal mouse / key event. That is useless.
Menu raised by button 3 may be too tall for your note pc. For example for 640x480 pc screen, include
mule*popup.font: -*-lucidatypewriter-medium-r-*-*-10-*-*-*-*-*-*-* emacs*popup.font: -*-lucidatypewriter-medium-r-*-*-10-*-*-*-*-*-*-*
in your `~/.Xdefaults' or `~/.Xresources'.
It is advisable to use
dired-dd-load-hook to change mouse (key)
binding. For example, if you prefer to bind the original
menu-bar menu to mouse-3, include binding code in the add-hook
(add-hook 'dired-dd-load-hook (function (lambda () (define-key dired-dd-mode-map [mouse-3] 'dired-dd-popmenu-map-func) (define-key dired-dd-mode-map [S-mouse-3] 'dired-dd-no-destination-handling))))
This example makes sense only in Emacs-19, but you can see how to change bindings.
This chapter deals with miscellaneous tips on using `dired-dd'.
dired-dd is very useful when you are browsing through directory trees. I know that keyboard is faster than bothering to move over to mouse, but sometimes I feel lazy and wish I could use mouse for browsing through file system.
dired-dd, my recommendation is to split an emacs frame
into several windows horizontally and/or vertically, or further into
several frames, select one of them as browsing window (frame), and the
dired window (frame). And, open file with drag and
dired window (frame) to browsing window (frame).
I prefer to use a window manager, but you can use emacs even without
window manager at all. Once I tried starting only emacs from .xinitrc
on a 1600x1200 sized
X's root window without any window manager,
and split it up to 5 to 6 windows for
dired and browsing buffers.
In such situation,
dired-dd works very nicely; `mldrag.el'
helped me a good deal in adjusting window configurations, and with
`windows.el', I could even handle multiple frames without window
manager (see section Other programs going well with dired-dd) at all.
I found that it is convenient if a command to kill or bury buffer
is bound to certain mouse event when you are
browsing through many files and directories. Or,
sometimes after root-drop, you may want to delete many frames, and
C-x 5 0 is really annoying if there are too may frames to be killed.
dired-dd-use-modeline-binding-global to non-nil enables these
(define-key global-map [mode-line C-mouse-3] 'mouse-kill-this-buffer) (define-key global-map [mode-line S-mouse-3] 'mouse-bury-buffer)) (define-key global-map [mode-line C-M-mouse-3] 'mouse-delete-frame)
mouse-delete-frame might be useless if you prefer your
window manager's delete-frame command... ). In
these bindings are enabled in its local map
regardless of the value of
Note that even if you setq
non-nil, the bindings above are not enabled until
dired-dd is loaded.
If you like these mouse binding, and want to use them globally from the
startup of emacs, include the binding codes above, and the function definitions
(defun mouse-kill-this-buffer (e) (interactive "@e") (kill-this-buffer)) (defun mouse-bury-buffer (e) (interactive "@e") (bury-buffer)) (defun mouse-delete-frame (e &optional arg) (interactive "@e\nP") (delete-frame (selected-frame) arg))
in your `~/.emacs', which is a surer solution. See also the
document string of
C-h v dired-dd-use-modeline-binding-global RET.
mouse-delete-frame are defined at the end of the
This section deals with the programs going well with
Dired can operate not only on local file system but also ftp
dired related programs are known to handle
both local and ftp directories transparently, and they are all
diredbuffer by issuing command such as
C-x dThe derived
diredbuffer can be operated as normal dired buffer, which means
dired-ddcan be used too. That is, you can ftp files with drag and drop. Find `url-to-ange.el' in `spinout' directory of
dired-dddistribution, which enables translation of URL expression into ange-ftp expression, or opens URL location already existing in emacs buffer. You can also find `bookmark-thief.el' in `spinout' directory which enables stealing bookmarkfile of `Mozilla' (Netscape Navigator) and opening URL via external or internal browser, or opening ftp URL via ange-ftp. `bookmark-thief.el' requires `browse-url.el' included in `html-helper-mode' package.
xarchie, or your favorite WWW search engine.
dired-dddistribution. Works like
find-dired, but it uses `locate' command instead of `find' in the original
find-dired. `locate.el' is included in emacs-20.2, but unlike `locate.el', `locate-dired.el' uses
dired-mode, so that you can use
dired-dd-modein the output buffer.
dired-dddistribution, pops up emacs bookmark menu (`stolen' from
menu-barkeymap) by C-M-mouse-2 and its jump menu by C-M-mouse-1.
For window / frame handling, or scrolling through, the mouse oriented programs listed below are found to be very useful:
Up to the time of drafting this info, `Spinout' directory of
dired-dd distribution contains small programs (some may be nice,
and some may be rough and ready) conceived to use with
These are all small programs and no info file is provided. Refer to the comment section at the top of the program files for usage.
closebutton of yes-no dialog box. It's not a
dired-ddbug, but might be a serious bug of emacs, or window manager. The author observed it in mule-2.3 (19.28) and emacs-20.2, on window managers WindowMaker, fvwm2, and AfterStep. It is safer not to decorate transient window or not to put
closebutton on it, if your window manager has such capability.
dired-guess-shell-alist-user. For example,
(setq dired-guess-shell-alist-user (cons (list "\\.r[ma]$\\|\\.ram$" "LD_LIBRARY_PATH=~/rvplayer5.0b2 ~/rvplayer5.0b2/rvplayer *") dired-guess-shell-alist-user))won't run (but runs good in emacs-20). In emacs-19, you must put
(setq dired-guess-shell-alist-user (cons (list "\\.r[ma]$\\|\\.ram$" "~/bin/Rvplayer *") dired-guess-shell-alist-user))with making the
"LD_LIBRARY_PATH=..."part as a shell script `~/bin/Rvplayer'. It seems that `=' is not correctly interpreted. This is not a
dired-ddspecific limitation, but applies also when you invoke related command with keyboard command ! from
dired-guess-shell-alist-user, for example in issuing command M-mouse-2 (
dired-dd-exec-command-directly). It is a shame, because sometimes you can save memory by amount of one shell with including
dired-ddunder a mouse-focus type of window manager setting, if a frame
Ais wrapped over a frame
Bas shown below, drag-and-drop from frame
Amay not work as you you expect always.
+-----------+ | | | b +-----------+ | | | | | | a2 | | | | | +------|- - + a1 | B | | +-----------+ AThat is, if you dropped object(s) from area
Aunderneath which frame
Bexists, this drop would be still regarded as a drop into frame
B. To avoid this problem, always drag object(s) from area
a1underneath which frame
Bdoes not exist, or, if you make the operation surer, simply raise frame
Aprior to the dragging.
track-mouseused in function
Track-mousecannot understand over-wrap situation of emacs frames, and knows out-of-the-frame status only by detecting simply if the mouse pointer is off the frame (the outline of the frame).
Diredpackage does not raise Yes-No dialog in overwrite-yes-or-no query, because dired-query does not use yes-or-no-p. Should I replace it ?
This document was generated on 4 April 1999 using the texi2html translator version 1.51.