diff options
author | Richard M. Stallman <rms@gnu.org> | 1996-01-26 19:49:01 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1996-01-26 19:49:01 +0000 |
commit | 706629741ff40e65834172eff85a8cb1301b31be (patch) | |
tree | e82732239184ef4fd914db1e84f9e163dfa98767 /lisp/dos-fns.el | |
parent | b5e89ed1d70dfec2b857466ec3980ca63ce52e23 (diff) | |
download | emacs-706629741ff40e65834172eff85a8cb1301b31be.tar.gz |
(mode25): Moved from `src/dosfns.c' for backward compatibility.
(mode4350): Moved from `src/dosfns.c' for backward compatibility.
(convert-standard-filename): Preserve ~ as last char.
(convert-standard-filename): Don't do anything if the
argument is empty, or isn't a string; leave alone characters with
ASCII codes above 127 and special characters legal in DOS filenames.
Diffstat (limited to 'lisp/dos-fns.el')
-rw-r--r-- | lisp/dos-fns.el | 96 |
1 files changed, 64 insertions, 32 deletions
diff --git a/lisp/dos-fns.el b/lisp/dos-fns.el index b7202d9c2c7..9032e64ef5e 100644 --- a/lisp/dos-fns.el +++ b/lisp/dos-fns.el @@ -49,38 +49,51 @@ This function's standard definition is trivial; it just returns the argument. However, on some systems, the function is redefined with a definition that really does change some file names." - (let ((dir (file-name-directory filename)) - (string (copy-sequence (file-name-nondirectory filename))) - i firstdot) - ;; Change a leading period to a leading underscore. - (if (= (aref string 0) ?.) - (aset string 0 ?_)) - ;; Get rid of invalid characters. - (while (setq i (string-match "[^a-zA-Z0-9_.%~]" string)) - (aset string i ?_)) - ;; If we don't have a period, - ;; and we have a dash or underscore that isn't the first char, - ;; change that to a period. - (if (and (not (string-match "\\." string)) - (setq i (string-match "[-_]" string 1))) - (aset string i ?\.)) - ;; If we don't have a period in the first 8 chars, insert one. - (if (> (or (string-match "\\." string) - (length string)) - 8) - (setq string - (concat (substring string 0 8) - "." - (substring string 8)))) - (setq firstdot (or (string-match "\\." string) (1- (length string)))) - ;; Truncate to 3 chars after the first period. - (if (> (length string) (+ firstdot 4)) - (setq string (substring string 0 (+ firstdot 4)))) - ;; Change all periods except the first one into underscores. - (while (string-match "\\." string (1+ firstdot)) - (setq i (string-match "\\." string (1+ firstdot))) - (aset string i ?_)) - (concat dir string))) + (let* ((dir (file-name-directory filename)) + (string (copy-sequence (file-name-nondirectory filename))) + (lastchar (aref string (1- (length string)))) + i firstdot) + ;; If the argument is empty, just return it. + (if (or (not (stringp filename)) + (string= filename "") + (string= string "")) + filename + (progn + ;; Change a leading period to a leading underscore. + (if (= (aref string 0) ?.) + (aset string 0 ?_)) + ;; Get rid of invalid characters. + (while (setq i (string-match + "[^-a-zA-Z0-9_.%~^$!#&{}@`'()\200-\376]" + string)) + (aset string i ?_)) + ;; If we don't have a period, + ;; and we have a dash or underscore that isn't the first char, + ;; change that to a period. + (if (and (not (string-match "\\." string)) + (setq i (string-match "[-_]" string 1))) + (aset string i ?\.)) + ;; If we don't have a period in the first 8 chars, insert one. + (if (> (or (string-match "\\." string) + (length string)) + 8) + (setq string + (concat (substring string 0 8) + "." + (substring string 8)))) + (setq firstdot (or (string-match "\\." string) (1- (length string)))) + ;; Truncate to 3 chars after the first period. + (if (> (length string) (+ firstdot 4)) + (setq string (substring string 0 (+ firstdot 4)))) + ;; Change all periods except the first one into underscores. + (while (string-match "\\." string (1+ firstdot)) + (setq i (string-match "\\." string (1+ firstdot))) + (aset string i ?_)) + ;; If the last character of the original filename was `~', + ;; make sure the munged name ends with it also. + (if (equal lastchar ?~) + (aset string (1- (length string)) lastchar)) + (concat dir string))))) (defvar file-name-buffer-file-type-alist '( @@ -257,6 +270,25 @@ given by `ps-lpr-switches', which see.") (setq ps-lpr-switches '("-q" "-dNOPAUSE" "-sDEVICE=epson" "-r240x60" "-sOutputFile=LPT1" "-")) +;; Backward compatibility for obsolescent functions which +;; set screen size. + +(defun mode25 () + "Changes the number of screen rows to 25." + (interactive) + (set-frame-size (selected-frame) 80 25)) + +(defun mode4350 () + "Changes the number of rows to 43 or 50. +Emacs always tries to set the screen height to 50 rows first. +If this fails, it will try to set it to 43 rows, on the assumption +that your video hardware might not support 50-line mode." + (interactive) + (set-frame-size (selected-frame) 80 50) + (if (eq (frame-height (selected-frame)) 50) + nil ; the original built-in function returned nil + (set-frame-size (selected-frame) 80 43))) + (provide 'dos-fns) ; dos-fns.el ends here |