...................... Cut between dotted lines and save ...................... $!............................................................................. $! VAX/VMS archive file created by VMS_SHAR V-5.04-WJM-AGH 29-SEP-1988 $! which was written by Michael Bednarek (U3369429@ucsvc.dn.mu.oz.au) $! and modified by W.J.Moeller $! To unpack, simply save and execute (@) this file. $! $! This archive was created by BEEBE $! on Saturday 22-OCT-1988 12:08:07.89 $! $! ATTENTION: To keep each article below 51200 bytes, this program $! has been transmitted in 3 parts. $! You should concatenate ALL parts to ONE file and execute (@) that file. $! $! It contains the following 6 files: $! DIRED.EL FILES.EL FILL.EL SITE-INIT.EL VMS-PATCH.EL VMSPROC.EL $!============================================================================= $ Set Symbol/Scope=(NoLocal,NoGlobal) $ Version=F$GetSYI("VERSION") ! See what VMS version we have here: $ If Version.ges."V4.4" then goto Version_OK $ Write SYS$Output "Sorry, you are running VMS ",Version, - ", but this procedure requires V4.4 or higher." $ Exit 44 $Version_OK: CR[0,8]=13 $ Pass_or_Failed="failed!,passed." $ Goto Start $Convert_File: $ Read/Time_Out=0/Error=No_Error1/Prompt="creating ''File_is'" SYS$Command ddd $No_Error1: Define/User_Mode SYS$Output NL: $ Edit/TPU/NoSection/NoDisplay/Command=SYS$Input/Output='File_is' - VMS_SHAR_DUMMY.DUMMY f:=Get_Info(Command_Line,"File_Name");b:=Create_Buffer("",f); o:=Get_Info(Command_Line,"Output_File");Set(Output_File,b,o); Position(Beginning_of(b));a:=0;Loop ExitIf Mark(None)=End_of(b); x:=Erase_Character(1);if x="V" then i:=LENGTH(CURRENT_LINE); if i<>78 then MOVE_HORIZONTAL(i);if i>78 then ERASE_CHARACTER(78-i);endif; if i<78 then COPY_TEXT(FAO("!#* ",78-i));endif; Move_Horizontal(-Current_Offset);endif;endif;if a then Append_Line; Move_Horizontal(-Current_Offset);endif;a:=(x="V");Move_Vertical(1);EndLoop; POSITION(BEGINNING_OF(b));p:=" "&LINE_END;loop x:=SEARCH(p,Forward,Exact); exitif x=0;POSITION(END_OF(x));s:=CURRENT_LINE;EDIT(s,Trim_trailing,Off); ERASE_CHARACTER(LENGTH(s)-CURRENT_OFFSET);endloop;Position(Beginning_of(b)); Loop x:=Search("`",Forward,Exact);ExitIf x=0;Position(x);Erase_Character(1); If Current_Character='`' then Move_Horizontal(1);else Copy_Text(ASCII(INT(Erase_Character(3))));EndIf;EndLoop;Exit; $ Delete VMS_SHAR_DUMMY.DUMMY;* $ Checksum 'File_is $ Success=F$Element(Check_Sum_is.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)+CR $ Read/Time_Out=0/Error=No_Error2/Prompt=" CHECKSUM ''Success'" SYS$Command ddd $No_Error2: Return $Start: $ File_is="DIRED.EL" $ Check_Sum_is=1730455605 $ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY X;;; Missing: P command, sorting, setting file modes. X;;; Dired buffer containing multiple directories gets totally confused X;;; Implement insertion of subdirectories in situ --- tree dired X;;; Added [22-Oct-88]: support for VAX VMS X X;; DIRED commands for Emacs X;; Copyright (C) 1985, 1986 Free Software Foundation, Inc. X X;; This file is part of GNU Emacs. X X;; GNU Emacs is distributed in the hope that it will be useful, X;; but WITHOUT ANY WARRANTY. No author or distributor X;; accepts responsibility to anyone for the consequences of using it X;; or for whether it serves any particular purpose or works at all, X;; unless he says so in writing. Refer to the GNU Emacs General Public X;; License for full details. X X;; Everyone is granted permission to copy, modify and redistribute X;; GNU Emacs, but only under the conditions described in the X;; GNU Emacs General Public License. A copy of this license is X;; supposed to have been given to you along with GNU Emacs so you X;; can know your rights and responsibilities. It should be in a X;; file named COPYING. Among other things, the copyright notice X;; and this notice must be preserved on all copies. X X X;In loaddefs.el X;(defvar dired-listing-switches "-al" X; "Switches passed to ls for dired. MUST contain the 'l' option. X;CANNOT contain the 'F' option.") X X(defvar dired-directory-command X "DIRECTORY/SIZE/DATE/OWNER/WIDTH=(FILENAME=32,SIZE=5)" X "Directory command for dired") X X(if (eq system-type 'vax-vms) X (setq dired-listing-switches "")) X X(defun dired-readin (dirname buffer) X (save-excursion X (message "Reading directory %s..." dirname) X (set-buffer buffer) X (let ((buffer-read-only nil)) X (widen) X (erase-buffer) X`009 (dired-read-directory dirname buffer) X (goto-char (point-min)) X (while (not (eobp)) X`009(insert " ") X`009(forward-line 1)) X (goto-char (point-min))) X (message "Reading directory %s...done" dirname))) X X(defun dired-read-directory (dirname buffer) X (if (eq system-type 'vax-vms) X (progn X`009(subprocess-command-to-buffer (concat X`009`009`009`009 dired-directory-command " " X`009`009`009`009 dirname) buffer) X`009(save-excursion X`009 (replace-regexp " *$" ""))) X ;; otherwise UNIX style X (setq dirname (expand-file-name dirname)) X (if (file-directory-p dirname) X`009(call-process "ls" nil buffer nil X`009`009 dired-listing-switches dirname) X (let ((default-directory (file-name-directory dirname))) X`009(call-process shell-file-name nil buffer nil X`009`009 "-c" (concat "ls " dired-listing-switches " " X`009`009`009`009 (file-name-nondirectory dirname)))))) X ) X X(defun dired-find-buffer (dirname) X (let ((blist (buffer-list)) X`009found) X (while blist X (save-excursion X (set-buffer (car blist)) X`009(if (and (eq major-mode 'dired-mode) X`009`009 (equal dired-directory dirname)) X`009 (setq found (car blist) X`009`009 blist nil) X`009 (setq blist (cdr blist))))) X (or found X`009(create-file-buffer (directory-file-name dirname))))) X X(defun dired (dirname) X "\"Edit\" directory DIRNAME--delete, rename, print, etc. some files in it. XDired displays a list of files in DIRNAME. XYou can move around in it with the usual commands. XYou can flag files for deletion with C-d Xand then delete them by typing ``x'. XType ``h' after entering dired for more info." X (interactive (list (read-file-name "Dired (directory): " X`009`009`009`009 nil default-directory nil))) X (switch-to-buffer (dired-noselect dirname))) X X(defun dired-other-window (dirname) X "\"Edit\" directory DIRNAME. Like M-x dired but selects in another window." X (interactive (list (read-file-name "Dired in other window (directory): " X`009`009`009`009 nil default-directory nil))) X (switch-to-buffer-other-window (dired-noselect dirname))) X X(defun dired-noselect (dirname) X "Like M-x dired but returns the dired buffer as value, does not select it." X;;; (or dirname (setq dirname default-directory)) X;;; (setq dirname (expand-file-name (directory-file-name dirname))) X;;; (if (file-directory-p dirname) X;;; (setq dirname (file-name-as-directory dirname))) X (setq dirname (dired-fix-directory dirname)) X (let ((buffer (dired-find-buffer dirname))) X (save-excursion X (set-buffer buffer) X (dired-readin dirname buffer) X (dired-move-to-filename) X (dired-mode dirname)) X buffer)) X X(defun dired-fix-directory (dirname) X "Fix up dirname to be a valid directory name and return it" X (or dirname (setq dirname default-directory)) X (if (eq system-type 'vax-vms) X (progn X`009(or dirname (setq dirname default-directory)) X`009(setq dirname (expand-file-name dirname))) X ;; else UNIX style X (if (string-match "./$" dirname) X`009(setq dirname (substring dirname 0 -1))) X (setq dirname (expand-file-name dirname)) X (and (not (string-match "/$" dirname)) X`009 (file-directory-p dirname) X`009 (setq dirname (concat dirname "/"))) X dirname X )) X X(defun dired-revert (&optional arg noconfirm) X (let ((opoint (point)) X`009(ofile (dired-get-filename t t)) X`009(buffer-read-only nil)) X (erase-buffer) X (dired-readin dired-directory (current-buffer)) X (or (and ofile (re-search-forward (concat " " (regexp-quote ofile) "$") X`009`009`009`009 nil t)) X`009(goto-char opoint)) X (beginning-of-line))) X X(defvar dired-match-date V `009 "\\(Jan\\`124Feb\\`124Mar\\`124Apr\\`124May\\`124Jun\\`124Jul\\`124Aug X\\`124Sep\\`124Oct\\`124Nov\\`124Dec\\)[ ]+[0-9]+" X`009 "Regexp to match the date on a filename") X X(defvar dired-mode-map nil "Local keymap for dired-mode buffers.") X(if dired-mode-map X nil X (setq dired-mode-map (make-keymap)) X (suppress-keymap dired-mode-map) X (define-key dired-mode-map "r" 'dired-rename-file) X (define-key dired-mode-map "\C-d" 'dired-flag-file-deleted) X (define-key dired-mode-map "d" 'dired-flag-file-deleted) X (define-key dired-mode-map "v" 'dired-view-file) X (define-key dired-mode-map "e" 'dired-find-file) X (define-key dired-mode-map "f" 'dired-find-file) X (define-key dired-mode-map "o" 'dired-find-file-other-window) X (define-key dired-mode-map "u" 'dired-unflag) X (define-key dired-mode-map "x" 'dired-do-deletions) X (define-key dired-mode-map "\177" 'dired-backup-unflag) X (define-key dired-mode-map "?" 'dired-summary) X (define-key dired-mode-map "c" 'dired-copy-file) X (define-key dired-mode-map "#" 'dired-flag-auto-save-files) X (define-key dired-mode-map "`126" 'dired-flag-backup-files) X (define-key dired-mode-map "." 'dired-clean-directory) X (define-key dired-mode-map "h" 'describe-mode) X (define-key dired-mode-map " " 'dired-next-line) X (define-key dired-mode-map "\C-n" 'dired-next-line) X (define-key dired-mode-map "\C-p" 'dired-previous-line) X (define-key dired-mode-map "n" 'dired-next-line) X (define-key dired-mode-map "p" 'dired-previous-line) X (define-key dired-mode-map "g" 'revert-buffer) X (define-key dired-mode-map "C" 'dired-compress) X (define-key dired-mode-map "U" 'dired-uncompress) X (define-key dired-mode-map "B" 'dired-byte-recompile) X (define-key dired-mode-map "M" 'dired-chmod) X (define-key dired-mode-map "G" 'dired-chgrp) X (define-key dired-mode-map "O" 'dired-chown)) X X X;; Dired mode is suitable only for specially formatted data. X(put 'dired-mode 'mode-class 'special) X X(defun dired-mode (&optional dirname) X "Mode for \"editing\" directory listings. XIn dired, you are \"editing\" a list of the files in a directory. XYou can move using the usual cursor motion commands. XLetters no longer insert themselves. XInstead, type d to flag a file for Deletion. XType u to Unflag a file (remove its D flag). X Type Rubout to back up one line and unflag. XType x to eXecute the deletions requested. XType f to Find the current line's file X (or Dired it, if it is a directory). XType o to find file or dired directory in Other window. XType # to flag temporary files (names beginning with #) for Deletion. XType `126 to flag backup files (names ending with `126) for Deletion. XType . to flag numerical backups for Deletion. X (Spares dired-kept-versions or its numeric argument.) XType r to rename a file. XType c to copy a file. XType v to view a file in View mode, returning to Dired when done. XType g to read the directory again. This discards all deletion-flags. XSpace and Rubout can be used to move down and up by lines. XAlso: C -- compress this file. U -- uncompress this file. X B -- byte compile this file. X M, G, O -- change file's mode, group or owner. X\\`123dired-mode-map`125" X (interactive) X (kill-all-local-variables) X (make-local-variable 'revert-buffer-function) X (setq revert-buffer-function 'dired-revert) X (setq major-mode 'dired-mode) X (setq mode-name "Dired") X (make-local-variable 'dired-directory) X (setq dired-directory (or dirname default-directory)) X (if dirname X (setq default-directory X`009 (if (file-directory-p dirname) X`009`009dirname (file-name-directory dirname)))) X (setq mode-line-buffer-identification '("Dired: %17b")) X (setq case-fold-search nil) X (setq buffer-read-only t) X (use-local-map dired-mode-map) X (run-hooks 'dired-mode-hook)) X`012 X(defun dired-repeat-over-lines (arg function) X (beginning-of-line) X (while (and (> arg 0) (not (eobp))) X (setq arg (1- arg)) X (save-excursion X (beginning-of-line) X (and (bobp) (looking-at " total") X`009 (error "No file on this line")) X (funcall function)) X (forward-line 1) X (dired-move-to-filename)) X (while (and (< arg 0) (not (bobp))) X (setq arg (1+ arg)) X (forward-line -1) X (dired-move-to-filename) X (save-excursion X (beginning-of-line) X (funcall function)))) X X(defun dired-flag-file-deleted (arg) X "In dired, flag the current line's file for deletion. XWith arg, repeat over several lines." X (interactive "p") X (dired-repeat-over-lines arg X '(lambda () X (let ((buffer-read-only nil)) X`009 (delete-char 1) X`009 (insert "D"))))) X X(defun dired-summary () X (interactive) V ;>> this should check the key-bindings and use substitute-command-keys if no Xn-standard X (message V "d-elete, u-ndelete, x-ecute, f-ind, o-ther window, r-ename, c-opy, v-iew") X) X X(defun dired-unflag (arg) X "In dired, remove the current line's delete flag then move to next line." X (interactive "p") X (dired-repeat-over-lines arg X '(lambda () X (let ((buffer-read-only nil)) X`009 (delete-char 1) X`009 (insert " ") X`009 (forward-char -1))))) X X(defun dired-backup-unflag (arg) X "In dired, move up a line and remove deletion flag there." X (interactive "p") X (dired-unflag (- arg))) X X(defun dired-next-line (arg) X "Move down ARG lines then position at filename." X (interactive "p") X (next-line arg) X (dired-move-to-filename)) X X(defun dired-previous-line (arg) X "Move up ARG lines then position at filename." X (interactive "p") X (previous-line arg) X (dired-move-to-filename)) X X(defun dired-find-file () X "In dired, visit the file or directory named on this line." X (interactive) X (find-file (dired-get-filename))) X X(defun dired-view-file () X "In dired, examine a file in view mode, returning to dired when done." X (interactive) X (if (file-directory-p (dired-get-filename)) X (dired (dired-get-filename)) X (view-file (dired-get-filename)))) X X(defun dired-find-file-other-window () X "In dired, visit this file or directory in another window." X (interactive) X (find-file-other-window (dired-get-filename))) X X(defun dired-get-filename (&optional localp no-error-if-not-filep) X "In dired, return name of file mentioned on this line. XValue returned normally includes the directory name. XA non-nil 1st argument means do not include it. A non-nil 2nd argument Xsays return nil if no filename on this line, otherwise an error occurs." X (let (eol) X (save-excursion X (end-of-line) X (setq eol (point)) X (beginning-of-line) X (if (eq system-type 'vax-vms) X`009 (progn X`009 (if (and (not (looking-at "..Directory ")) X`009`009 (not (looking-at "..Total ")) X`009`009 (re-search-forward "`094..\\([][.A-Z-0-9_$;<>]+\\)" X`009`009`009`009`009eol t)) X`009`009(progn X`009`009 (buffer-substring (match-beginning 1) (match-end 1)) X`009`009 ) X`009 (if no-error-if-not-filep nil X`009`009(error "No file on this line")))) X`009;; else UNIX style X`009(if (re-search-forward dired-match-date X`009`009`009 eol t) X`009 (progn (skip-chars-forward " ") X`009`009 (skip-chars-forward "`094 " eol) X`009`009 (skip-chars-forward " " eol) X`009`009 (let ((beg (point))) X`009`009 (skip-chars-forward "`094 \n") X`009`009 (if localp X`009`009`009 (buffer-substring beg (point)) X`009`009 ;; >> uses default-directory, could lose on cd, multiple. X`009`009 (concat default-directory X`009`009`009 (buffer-substring beg (point)))))) X`009 (if no-error-if-not-filep nil X`009 (error "No file on this line")))) X ))) X X(defun dired-move-to-filename () X "In dired, move to first char of filename on this line. XReturns position (point) or nil if no filename on this line." X (let ((eol (progn (end-of-line) (point)))) X (beginning-of-line) X (if (re-search-forward V`009 "\\(Jan\\`124Feb\\`124Mar\\`124Apr\\`124May\\`124Jun\\`124Jul\\`124Aug\\` X124Sep\\`124Oct\\`124Nov\\`124Dec\\)[ ]+[0-9]+" X`009 eol t) X`009(progn X`009 (skip-chars-forward " ") X`009 (skip-chars-forward "`094 " eol) X`009 (skip-chars-forward " " eol) X`009 (point))))) X X(defun dired-map-dired-file-lines (fn) X "perform fn with point at the end of each non-directory line: Xarguments are the short and long filename" X (save-excursion X (let (filename longfilename (buffer-read-only nil)) X (goto-char (point-min)) X (while (not (eobp)) X`009(save-excursion X`009 (and (not (looking-at " d")) X`009 (not (eolp)) X`009 (setq filename (dired-get-filename t t) X`009`009 longfilename (dired-get-filename nil t)) X`009 (progn (end-of-line) X`009`009 (funcall fn filename longfilename)))) X`009(forward-line 1))))) X`012 X(defun dired-flag-auto-save-files () X "Flag for deletion files whose names suggest they are auto save files." X (interactive) X (save-excursion X (let ((buffer-read-only nil)) X (goto-char (point-min)) X (while (not (eobp)) X (and (not (looking-at " d")) X`009 (not (eolp)) X`009 (if (fboundp 'auto-save-file-name-p) X`009`009(let ((fn (dired-get-filename t t))) X`009`009 (if fn (auto-save-file-name-p fn))) X`009 (if (dired-move-to-filename) X`009`009 (looking-at "#"))) X`009 (progn (beginning-of-line) X`009`009 (delete-char 1) X`009`009 (insert "D"))) X (forward-line 1))))) X X(defun dired-clean-directory (keep) X "Flag numerical backups for Deletion. XSpares dired-kept-versions latest versions, and kept-old-versions oldest. XPositive numeric arg overrides dired-kept-versions; Xnegative numeric arg overrides kept-old-versions with minus the arg." X (interactive "P") X (setq keep (if keep (prefix-numeric-value keep) dired-kept-versions)) X (let ((early-retention (if (< keep 0) (- keep) kept-old-versions)) X`009(late-retention (if (<= keep 0) dired-kept-versions keep)) X`009(file-version-assoc-list ())) X ;; Look at each file. X ;; If the file has numeric backup versions, X ;; put on file-version-assoc-list an element of the form X ;; (FILENAME . VERSION-NUMBER-LIST) X (dired-map-dired-file-lines 'dired-collect-file-versions) X ;; Sort each VERSION-NUMBER-LIST, X ;; and remove the versions not to be deleted. X (let ((fval file-version-assoc-list)) X (while fval X`009(let* ((sorted-v-list (cons 'q (sort (cdr (car fval)) '<))) X`009 (v-count (length sorted-v-list))) X`009 (if (> v-count (+ early-retention late-retention)) X`009 (rplacd (nthcdr early-retention sorted-v-list) X`009`009 (nthcdr (- v-count late-retention) X`009`009`009 sorted-v-list))) X`009 (rplacd (car fval) X`009`009 (cdr sorted-v-list))) X`009(setq fval (cdr fval)))) X ;; Look at each file. If it is a numeric backup file, X ;; find it in a VERSION-NUMBER-LIST and maybe flag it for deletion. X (dired-map-dired-file-lines 'dired-trample-file-versions))) X X(defun dired-collect-file-versions (ignore fn) X "If it looks like fn has versions, we make a list of the versions. XWe may want to flag some for deletion." X (let* ((base-versions X`009 (concat (file-name-nondirectory fn) ".`126")) X`009 (bv-length (length base-versions)) X`009 (possibilities (file-name-all-completions X`009`009`009 base-versions X`009`009`009 (file-name-directory fn))) X`009 (versions (mapcar 'backup-extract-version possibilities))) X (if versions X`009 (setq file-version-assoc-list (cons (cons fn versions) X`009`009`009`009`009 file-version-assoc-list))))) X X(defun dired-trample-file-versions (ignore fn) X (let* ((start-vn (string-match "\\.`126[0-9]+`126$" fn)) X`009 base-version-list) X (and start-vn X`009 (setq base-version-list`009; there was a base version to which X`009 (assoc (substring fn 0 start-vn)`009; this looks like a X`009`009 file-version-assoc-list))`009; subversion X`009 (not (memq (string-to-int (substring fn (+ 2 start-vn))) X`009`009 base-version-list))`009; this one doesn't make the cut X`009 (dired-flag-this-line-for-DEATH)))) X X(defun dired-flag-this-line-for-DEATH () X (beginning-of-line) X (delete-char 1) X (insert "D")) X X(defun dired-flag-backup-files () X "Flag all backup files (names ending with `126) for deletion." X (interactive) X (save-excursion X (let ((buffer-read-only nil)) X (goto-char (point-min)) X (while (not (eobp)) X (and (not (looking-at " d")) X`009 (not (eolp)) X`009 (if (fboundp 'backup-file-name-p) X`009`009(let ((fn (dired-get-filename t t))) X`009`009 (if fn (backup-file-name-p fn))) X`009 (end-of-line) X`009 (forward-char -1) X`009 (looking-at "`126")) X`009 (progn (beginning-of-line) X`009`009 (delete-char 1) X`009`009 (insert "D"))) X (forward-line 1))))) X X(defun dired-flag-backup-and-auto-save-files () X "Flag all backup and temporary files for deletion. XBackup files have names ending in `126. Auto save file names usually Xstart with #." X (interactive) X (dired-flag-backup-files) X (dired-flag-auto-save-files)) X`012 X(defun dired-rename-file (to-file) X "Rename this file to TO-FILE." X (interactive X (list (read-file-name (format "Rename %s to: " X`009`009`009`009 (file-name-nondirectory (dired-get-filename))) X`009`009`009 nil (dired-get-filename)))) X (setq to-file (expand-file-name to-file)) X (rename-file (dired-get-filename) to-file) X (let ((buffer-read-only nil)) X (beginning-of-line) X (delete-region (point) (progn (forward-line 1) (point))) X (setq to-file (expand-file-name to-file)) X (dired-add-entry (file-name-directory to-file) X`009`009 (file-name-nondirectory to-file)))) X X(defun dired-copy-file (to-file) X "Copy this file to TO-FILE." X (interactive "FCopy to: ") X (copy-file (dired-get-filename) to-file) X (setq to-file (expand-file-name to-file)) X (dired-add-entry (file-name-directory to-file) X`009`009 (file-name-nondirectory to-file))) X X(defun dired-add-entry (directory filename) X ;; If tree dired is implemented, this function will have to do X ;; something smarter with the directory. Currently, just check X ;; default directory, if same, add the new entry at point. With tree X ;; dired, should call 'dired-current-directory' or similar. Note X ;; that this adds the entry 'out of order' if files sorted by time, X ;; etc. X (if (string-equal directory default-directory) X (let ((buffer-read-only nil)) X`009(beginning-of-line) X`009(call-process "ls" nil t nil X`009`009 "-d" dired-listing-switches (concat directory filename)) X`009(forward-line -1) X`009(insert " ") X`009(dired-move-to-filename) X`009(let* ((beg (point)) X`009 (end (progn (end-of-line) (point)))) X`009 (setq filename (buffer-substring beg end)) X`009 (delete-region beg end) X`009 (insert (file-name-nondirectory filename))) X`009(beginning-of-line)))) X`012 X(defun dired-compress () X "Compress this file." X (interactive) X (let* ((buffer-read-only nil) X`009 (from-file (dired-get-filename)) X`009 (to-file (concat from-file ".Z"))) X (if (string-match "\\.Z$" from-file) X`009(error "%s is already compressed!" from-file)) X (message "Compressing %s..." from-file) X (call-process "compress" nil nil nil "-f" from-file) X (message "Compressing %s... done" from-file) X (dired-redisplay to-file))) X X(defun dired-uncompress () X "Uncompress this file." X (interactive) X (let* ((buffer-read-only nil) X`009 (from-file (dired-get-filename)) X`009 (to-file (substring from-file 0 -2))) X (if (string-match "\\.Z$" from-file) nil X`009(error "%s is not compressed!" from-file)) X (message "Uncompressing %s..." from-file) X (call-process "uncompress" nil nil nil from-file) X (message "Uncompressing %s... done" from-file) X (dired-redisplay to-file))) X X(defun dired-byte-recompile () X "Byte recompile this file." X (interactive) X (let* ((buffer-read-only nil) X`009 (from-file (dired-get-filename)) X`009 (to-file (substring from-file 0 -3))) X (if (string-match "\\.el$" from-file) nil X`009(error "%s is uncompilable!" from-file)) X (byte-compile-file from-file))) X X(defun dired-chmod (mode) X "Change mode of this file." X (interactive "sChange to Mode: ") X (let ((buffer-read-only nil) X`009(file (dired-get-filename))) X (call-process "/bin/chmod" nil nil nil mode file) X (dired-redisplay file))) X X(defun dired-chgrp (group) X "Change group of this file." X (interactive "sChange to Group: ") X (let ((buffer-read-only nil) X`009(file (dired-get-filename))) X (call-process "/bin/chgrp" nil nil nil group file) X (dired-redisplay file))) X X(defun dired-chown (owner) X "Change Owner of this file." X (interactive "sChange to Owner: ") X (let ((buffer-read-only nil) X`009(file (dired-get-filename))) X (call-process "/etc/chown" nil nil nil owner file) X (dired-redisplay file))) X X(defun dired-redisplay (file) "Redisplay this line." X (beginning-of-line) X (delete-region (point) (progn (forward-line 1) (point))) X (if file (dired-add-entry (file-name-directory file) X`009`009`009 (file-name-nondirectory file))) X (dired-move-to-filename)) X`012 X(defun dired-do-deletions () X "In dired, delete the files flagged for deletion." X (interactive) X (let (delete-list answer) X (save-excursion X (goto-char 1) X (while (re-search-forward "`094D" nil t) X (setq delete-list X`009 (cons (cons (dired-get-filename t) (1- (point))) X`009`009 delete-list)))) X (if (null delete-list) X`009(message "(No deletions requested)") X (save-window-excursion X (switch-to-buffer " *Deletions*") X (erase-buffer) X (setq fill-column 70) X (let ((l (reverse delete-list))) X`009 ;; Files should be in forward order for this loop. X`009 (while l X`009 (if (> (current-column) 59) X`009 (insert ?\n) X`009 (or (bobp) X`009`009 (indent-to (* (/ (+ (current-column) 19) 20) 20) 1))) X`009 (insert (car (car l))) X`009 (setq l (cdr l)))) X (goto-char (point-min)) X (setq answer (yes-or-no-p "Delete these files? "))) X (if answer X`009 (let ((l delete-list) X`009`009failures) X`009 ;; Files better be in reverse order for this loop! X`009 ;; That way as changes are made in the buffer X`009 ;; they do not shift the lines still to be changed. X`009 (while l X`009 (goto-char (cdr (car l))) X`009 (let ((buffer-read-only nil)) X`009`009(condition-case () X`009`009 (let ((fn (concat default-directory (car (car l))))) X`009`009 (if (file-directory-p fn) X`009`009`009 (progn X`009`009`009 (call-process "rmdir" nil nil nil fn) X`009`009`009 (if (file-exists-p fn) (delete-file fn))) X`009`009`009(delete-file fn)) X`009`009 (delete-region (point) X`009`009`009`009 (progn (forward-line 1) (point)))) X`009`009 (error (delete-char 1) X`009`009`009 (insert " ") X`009`009`009 (setq failures (cons (car (car l)) failures))))) X`009 (setq l (cdr l))) X`009 (if failures X`009`009(message "Deletions failed: %s" X`009`009`009 (prin1-to-string failures)))))))) X X(provide 'dired) $ GoSub Convert_File $ Goto Part2