(py-emacs-features): Test for working make-temp-name, which is broken
on NTEmacs 19.34.6.
(py-serial-number): New variable.
(py-execute-region): If make-temp-name is broken, simply append a
serial number to the string "python-" to get a temporary file name.
It's possible concurrent NTEmacs can step on each others toes, but it
makes no sense to further coddle a busted NTEmacs.
diff --git a/Misc/python-mode.el b/Misc/python-mode.el
index 94dadf6..dc6e738 100644
--- a/Misc/python-mode.el
+++ b/Misc/python-mode.el
@@ -8,7 +8,7 @@
;; Created: Feb 1992
;; Keywords: python languages oop
-(defconst py-version "3.0"
+(defconst py-version "$Revision$"
"`python-mode' version number.")
;; This software is provided as-is, without express or implied
@@ -231,16 +231,19 @@
;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;; NO USER DEFINABLE VARIABLES BEYOND THIS POINT
-(defconst py-emacs-features ()
+(defconst py-emacs-features
+ (let (features)
+ ;; NTEmacs 19.34.6 has a broken make-temp-name; it always returns
+ ;; the same string.
+ (let ((tmp1 (make-temp-name ""))
+ (tmp2 (make-temp-name "")))
+ (if (string-equal tmp1 tmp2)
+ (push 'broken-temp-names features)))
+ ;; return the features
+ features)
"A list of features extant in the Emacs you are using.
There are many flavors of Emacs out there, each with different
-features supporting those needed by CC Mode. Here's the current
-supported list, along with the values for this variable:
-
- XEmacs 19: ()
- XEmacs 20: ()
- Emacs 19: ()
-")
+features supporting those needed by CC Mode.")
(defvar python-font-lock-keywords
(let* ((keywords '("and" "assert" "break" "class"
@@ -1009,6 +1012,9 @@
(setq py-file-queue nil)
(message "%d pending files de-queued." n)))
+;; only used when (memq 'broken-temp-names py-emacs-features)
+(defvar py-serial-number 0)
+
(defun py-execute-region (start end &optional async)
"Execute the the region in a Python interpreter.
The region is first copied into a temporary file (in the directory
@@ -1032,7 +1038,11 @@
(or (< start end)
(error "Region is empty"))
(let* ((proc (get-process "Python"))
- (temp (make-temp-name "python"))
+ (temp (if (memq 'broken-temp-names py-emacs-features)
+ (prog1
+ (format "python-%d" py-serial-number)
+ (setq py-serial-number (1+ py-serial-number)))
+ (make-temp-name "python")))
(file (concat (file-name-as-directory py-temp-directory) temp))
(outbuf "*Python Output*"))
(write-region start end file nil 'nomsg)