diff options
| author | Jim Blandy <jimb@redhat.com> | 1991-10-31 08:30:58 +0000 | 
|---|---|---|
| committer | Jim Blandy <jimb@redhat.com> | 1991-10-31 08:30:58 +0000 | 
| commit | 5bbbceb1dea7c7a7387fe451f606cb2b1d6faa0a (patch) | |
| tree | f031a44097983ac27126b44feecae16136593a08 /lisp/files.el | |
| parent | f798d950c80153954676635b032b3a894b307b1d (diff) | |
| download | emacs-5bbbceb1dea7c7a7387fe451f606cb2b1d6faa0a.tar.gz | |
*** empty log message ***
Diffstat (limited to 'lisp/files.el')
| -rw-r--r-- | lisp/files.el | 112 | 
1 files changed, 84 insertions, 28 deletions
diff --git a/lisp/files.el b/lisp/files.el index 9aea76377df..2deba0db011 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -186,7 +186,10 @@ after you find a file.  If you explicitly request such a scan with      (if (file-executable-p dir)  	(setq default-directory dir)        (error "Cannot cd to %s:  Permission denied" dir))) -  (pwd)) +  ;; We used to call pwd at this point.  That's not terribly helpful +  ;; when we're invoking cd interactively, and the new cmushell-based +  ;; shell has its own (better) facilities for this. +)  (defun load-file (file)    "Load the Lisp file named FILE." @@ -205,6 +208,12 @@ This is an interface to the function `load'."    (let ((pop-up-windows t))      (pop-to-buffer buffer t))) +(defun switch-to-buffer-other-screen (buffer) +  "Switch to buffer BUFFER in another screen." +  (interactive "BSwitch to buffer in other screen: ") +  (let ((pop-up-screens t)) +    (pop-to-buffer buffer))) +  (defun find-file (filename)    "Edit file FILENAME.  Switch to a buffer visiting file FILENAME, @@ -219,6 +228,13 @@ See the function `display-buffer'."    (interactive "FFind file in other window: ")    (switch-to-buffer-other-window (find-file-noselect filename))) +(defun find-file-other-screen (filename) +  "Edit file FILENAME, in another screen. +May create a new screen, or reuse an existing one. +See the function `display-buffer'." +  (interactive "FFind file in other screen: ") +  (switch-to-buffer-other-screen (find-file-noselect filename))) +  (defun find-file-read-only (filename)    "Edit file FILENAME but don't allow changes.  Like \\[find-file] but marks buffer as read-only. @@ -235,6 +251,14 @@ Use \\[toggle-read-only] to permit editing."    (find-file filename)    (setq buffer-read-only t)) +(defun find-file-read-only-other-screen (filename) +  "Edit file FILENAME in another screen but don't allow changes. +Like \\[find-file-other-screen] but marks buffer as read-only. +Use \\[toggle-read-only] to permit editing." +  (interactive "fFind file read-only other screen: ") +  (find-file-other-screen filename) +  (setq buffer-read-only t)) +  (defun find-alternate-file (filename)    "Find file FILENAME, select its buffer, kill previous buffer.  If the current buffer now contains an empty file that you just visited @@ -277,6 +301,26 @@ otherwise a string <2> or <3> or ... is appended to get an unused name."  	(setq lastname filename))      (generate-new-buffer lastname))) +(defun generate-new-buffer (name) +  "Create and return a buffer with a name based on NAME. +Choose the buffer's name using generate-new-buffer-name." +  (get-buffer-create (generate-new-buffer-name name))) + +(defun abbreviate-file-name (filename) +  "Return a version of FILENAME shortened using directory-abbrev-alist. +This also substitutes \"~\" for the user's home directory. +See \\[describe-variable] directory-abbrev-alist RET for more information." +  (let ((tail directory-abbrev-alist)) +    (while tail +      (if (string-match (car (car tail)) filename) +	  (setq filename +		(concat (cdr (car tail)) (substring filename (match-end 0))))) +      (setq tail (cdr tail))) +    (if (string-match (concat "^" (expand-file-name "~")) filename) +	(setq filename +	      (concat "~" (substring filename (match-end 0))))) +    filename)) +  (defun find-file-noselect (filename &optional nowarn)    "Read file FILENAME into a buffer and return the buffer.  If a buffer exists visiting FILENAME, return that one, but @@ -288,13 +332,7 @@ The buffer is not selected, just returned to the caller."  	   (file-exists-p (file-name-directory  			   (substring filename (1- (match-end 0))))))        (setq filename (substring filename (1- (match-end 0))))) -  ;; Perform any appropriate abbreviations specified in directory-abbrev-alist. -  (let ((tail directory-abbrev-alist)) -    (while tail -      (if (string-match (car (car tail)) filename) -	  (setq filename -		(concat (cdr (car tail)) (substring filename (match-end 0))))) -      (setq tail (cdr tail)))) +  (setq filename (abbreviate-file-name filename))    (if (file-directory-p filename)        (if find-file-run-dired  	  (dired-noselect filename) @@ -373,7 +411,19 @@ Finishes by calling the functions in `find-file-hooks'."  		  ((file-attributes (directory-file-name default-directory))  		   "File not found and directory write-protected")  		  (t -		   "File not found and directory doesn't exist")))) +		   ;; If the directory the buffer is in doesn't exist, +		   ;; offer to create it.  It's better to do this now +		   ;; than when we save the buffer, because we want +		   ;; autosaving to work. +		   (setq buffer-read-only nil) +		   (or (file-exists-p (file-name-directory buffer-file-name)) +		       (if (yes-or-no-p +			    (format +			     "The directory containing %s does not exist.  Create? " +			     (abbreviate-file-name buffer-file-name))) +			   (make-directory-path +			    (file-name-directory buffer-file-name)))) +		   nil))))        (if msg  	  (progn  	    (message msg) @@ -546,23 +596,13 @@ if you wish to pass an empty string as the argument."  	(unlock-buffer)))    (setq buffer-file-name filename)    (if filename				; make buffer name reflect filename. -      (let ((new-name (file-name-nondirectory buffer-file-name)) -	    (old-name (buffer-name (current-buffer)))) +      (let ((new-name (file-name-nondirectory buffer-file-name)))  	(if (string= new-name "")  	    (error "Empty file name"))  	(if (eq system-type 'vax-vms)  	    (setq new-name (downcase new-name)))  	(setq default-directory (file-name-directory buffer-file-name)) -	(and (get-buffer new-name) -	     (setq new-name -		   (buffer-name (create-file-buffer buffer-file-name))) -	     (kill-buffer new-name)) -	(rename-buffer new-name) -	(if (string= (prog1 (setq new-name (buffer-name (create-file-buffer -							 buffer-file-name))) -		       (kill-buffer new-name)) -		     old-name) -	    (rename-buffer old-name)))) +	(rename-buffer new-name t)))    (setq buffer-backed-up nil)    (clear-visited-file-modtime)    ;; write-file-hooks is normally used for things like ftp-find-file @@ -716,7 +756,7 @@ Value is a list whose car is the name for the backup file  			   (file-name-directory fn)))  	   (versions (sort (mapcar 'backup-extract-version possibilities)  			   '<)) -	   (high-water-mark (apply 'max (cons 0 versions))) +	   (high-water-mark (apply 'max 0 versions))  	   (deserve-versions-p  	    (or version-control  		(> high-water-mark 0))) @@ -907,12 +947,11 @@ the last real save, but optional arg FORCE non-nil means delete anyway."  	(run-hooks 'after-save-hooks))      (message "(No changes need to be saved)"))) - -(require 'map-ynp) -  (defun save-some-buffers (&optional arg exiting)    "Save some modified file-visiting buffers.  Asks user about each one. -With argument, saves all with no questions." +Optional argument (the prefix) non-nil means save all with no questions. +Optional second argument EXITING means ask about certain non-file buffers + as well as about file buffers."    (interactive "P")    (if (zerop (map-y-or-n-p  	      (function @@ -923,7 +962,7 @@ With argument, saves all with no questions."  		       (and exiting  			    (save-excursion  			      (set-buffer buffer) -			      buffer-offer-save (> (buffer-size) 0)))) +			      (and buffer-offer-save (> (buffer-size) 0)))))  		      (if arg  			  t  			(if (buffer-file-name buffer) @@ -1003,6 +1042,19 @@ or multiple mail buffers, etc."      (kill-buffer new-buf)      (rename-buffer name)      (set-buffer-modified-p (buffer-modified-p)))) ; force mode line update + +(defun make-directory-path (path) +  "Create all the directories along path that don't exist yet." +  (interactive "Fdirectory path to create: ") +  (let ((path (directory-file-name (expand-file-name path))) +	create-list) +    (while (not (file-exists-p path)) +      (setq create-list (cons path create-list)	     +	    path (directory-file-name (file-name-directory path)))) +    (while create-list +      (make-directory (car create-list)) +      (setq create-list (cdr create-list))))) +  (put 'revert-buffer-function 'permanent-local t)  (defvar revert-buffer-function nil @@ -1045,7 +1097,7 @@ If `revert-buffer-function' value is non-nil, it is called to do the work."  	     ;; If file was backed up but has changed since,  	     ;; we shd make another backup.  	     (and (not auto-save-p) -		  (not (verify-visited-file-modtime)) +		  (not (verify-visited-file-modtime (current-buffer)))  		  (setq buffer-backed-up nil))  	     ;; Get rid of all undo records for this buffer.  	     (or (eq buffer-undo-list t) @@ -1254,3 +1306,7 @@ With prefix arg, silently save all file-visiting buffers, then kill."  (define-key ctl-x-4-map "r" 'find-file-read-only-other-window)  (define-key ctl-x-4-map "\C-f" 'find-file-other-window)  (define-key ctl-x-4-map "b" 'switch-to-buffer-other-window) + +(define-key ctl-x-3-map "b" 'switch-to-buffer-other-screen) +(define-key ctl-x-3-map "f" 'find-file-other-screen) +(define-key ctl-x-3-map "r" 'find-file-read-only-other-screen)  | 
