~a-roehler/python-mode/XEmacs-compat-test

« back to all changes in this revision

Viewing changes to devel/python-mode-utils.el.moved

  • Committer: Andreas Roehler
  • Date: 2012-01-25 20:31:09 UTC
  • Revision ID: andreas.roehler@online.de-20120125203109-cfag2pbgyrxyh3xa
renamed: tools/ => devel/

make visible these files are not for common usage











Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
;;; python-mode-shell-install.el --- Installing python, python3, ipython and other python shells
 
2
 
 
3
;; Copyright (C) 2011  Andreas Roehler
 
4
 
 
5
;; Author: Andreas Roehler <andreas.roehler@online.de>
 
6
;; Keywords: languages, processes, python, oop
 
7
 
 
8
;; Python-components-mode started from python-mode.el
 
9
;; and python.el, where Tim Peters, Barry A. Warsaw,
 
10
;; Skip Montanaro, Ken Manheimer, Dave Love and many
 
11
;; others wrote major parts. Author of ipython.el's
 
12
;; stuff merged is Alexander Schmolck.
 
13
 
 
14
;; This program is free software; you can redistribute it and/or modify
 
15
;; it under the terms of the GNU General Public License as published by
 
16
;; the Free Software Foundation, either version 3 of the License, or
 
17
;; (at your option) any later version.
 
18
 
 
19
;; This program is distributed in the hope that it will be useful,
 
20
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 
21
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
22
;; GNU General Public License for more details.
 
23
 
 
24
;; You should have received a copy of the GNU General Public License
 
25
;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
26
 
 
27
;;; Commentary:
 
28
 
 
29
;; Provides utilities creating python-mode commands
 
30
 
 
31
;;; Code:
 
32
 
 
33
(defcustom py-shells
 
34
  '("python" "python2" "python2.7" "python3" "python3.2" "ipython" "jython")
 
35
  "Python-mode will generate commands opening shells mentioned here. Edit this list \w resp. to your machine. "
 
36
  :type '(repeat string)
 
37
  :group 'python)
 
38
 
 
39
(setq py-shells '("python" "python2" "python2.7" "python3" "python3.2" "ipython" "jython"))
 
40
 
 
41
(defun py-provide-installed-shells-commands ()
 
42
  "Reads py-shells, provides commands opening these shell. "
 
43
  (interactive)
 
44
  (let ((temp-buffer "*Python Shell Install Buffer*"))
 
45
    (set-buffer (get-buffer-create temp-buffer))
 
46
    (erase-buffer) 
 
47
    (insert ";;; Python named shells")
 
48
    (newline)
 
49
    (dolist (ele py-shells)
 
50
      (insert (concat "(defun " ele " (&optional argprompt)
 
51
  \"Start an "))
 
52
      (if (string= "ipython" ele)
 
53
          (insert "IPython")
 
54
        (insert (capitalize ele)))
 
55
      (insert (concat " interpreter in another window.
 
56
   With optional \\\\[universal-argument] user is prompted
 
57
    for options to pass to the "))
 
58
      (if (string= "ipython" ele)
 
59
          (insert "IPython")
 
60
        (insert (capitalize ele)))
 
61
      (insert (concat " interpreter. \"
 
62
  (interactive)
 
63
  (py-set-shell-completion-environment)
 
64
  (py-shell argprompt nil \"" ele "\"))\n\n")))
 
65
    (insert ";; dedicated\n")
 
66
    (dolist (ele py-shells)
 
67
      (insert (concat "(defun " ele "-dedicated (&optional argprompt)
 
68
  \"Start an "))
 
69
      (if (string= "ipython" ele)
 
70
          (insert "IPython")
 
71
        (insert (capitalize ele)))
 
72
      (insert (concat " dedicated interpreter in another window.
 
73
   With optional \\\\[universal-argument] user is prompted
 
74
    for options to pass to the "))
 
75
      (if (string= "ipython" ele)
 
76
          (insert "IPython")
 
77
        (insert (capitalize ele)))
 
78
      (insert (concat " interpreter. \"
 
79
  (interactive)
 
80
  (py-set-shell-completion-environment)
 
81
  (py-shell argprompt t \"" ele "\"))\n\n"))))
 
82
  (emacs-lisp-mode)
 
83
  (switch-to-buffer (current-buffer)))
 
84
 
 
85
(defun py-write-beginning-position-forms ()
 
86
  (interactive)
 
87
  (set-buffer (get-buffer-create "py-write-beginning-position-forms"))
 
88
  (erase-buffer)
 
89
      (dolist (ele py-shift-forms)
 
90
        (insert "
 
91
(defun py-beginning-of-" ele "-position ()
 
92
  \"Returns beginning of " ele " position. \"
 
93
  (interactive)
 
94
  (save-excursion
 
95
    (let ((erg (py-beginning-of-" ele ")))
 
96
      (when (interactive-p) (message \"%s\" erg))
 
97
      erg)))
 
98
")))
 
99
 
 
100
(defun py-write-end-position-forms ()
 
101
  (interactive)
 
102
  (set-buffer (get-buffer-create "py-write-end-position-forms"))
 
103
  (erase-buffer)
 
104
      (dolist (ele py-shift-forms)
 
105
        (insert "
 
106
(defun py-end-of-" ele "-position ()
 
107
  \"Returns end of " ele " position. \"
 
108
  (interactive)
 
109
  (save-excursion
 
110
    (let ((erg (py-end-of-" ele ")))
 
111
      (when (interactive-p) (message \"%s\" erg))
 
112
      erg)))
 
113
")))
 
114
 
 
115
(setq py-shift-forms (list "paragraph" "block" "clause" "def" "class" "line" "statement"))
 
116
 
 
117
(defun py-write-shift-forms ()
 
118
  " "
 
119
  (interactive)
 
120
  (set-buffer (get-buffer-create "py-shift-forms"))
 
121
  (erase-buffer)
 
122
      (dolist (ele py-shift-forms)
 
123
        (insert (concat "
 
124
\(defun py-shift-" ele "-right (&optional arg)
 
125
  \"Indent " ele " by COUNT spaces.
 
126
 
 
127
COUNT defaults to `py-indent-offset',
 
128
use \\[universal-argument] to specify a different value.
 
129
 
 
130
Returns outmost indentation reached. \"
 
131
  (interactive \"\*P\")
 
132
  (let ((erg (py-shift-forms-base \"" ele "\" (or arg py-indent-offset))))
 
133
        (when (interactive-p) (message \"%s\" erg))
 
134
    erg))
 
135
 
 
136
\(defun py-shift-" ele "-left (&optional arg)
 
137
  \"Dedent " ele " by COUNT spaces.
 
138
 
 
139
COUNT defaults to `py-indent-offset',
 
140
use \\[universal-argument] to specify a different value.
 
141
 
 
142
Returns outmost indentation reached. \"
 
143
  (interactive \"\*P\")
 
144
  (let ((erg (py-shift-forms-base \"" ele "\" (- (or arg py-indent-offset)))))
 
145
    (when (interactive-p) (message \"%s\" erg))
 
146
    erg))
 
147
"))
 
148
  (emacs-lisp-mode)
 
149
  (switch-to-buffer (current-buffer))))
 
150
 
 
151
(setq py-down-forms (list "block" "clause" "block-or-clause" "def" "class" "def-or-class"))
 
152
 
 
153
(defun py-write-down-forms-lc ()
 
154
  " "
 
155
  (interactive)
 
156
  (set-buffer (get-buffer-create "py-down-forms-lc.el"))
 
157
  (erase-buffer)
 
158
      (dolist (ele py-down-forms)
 
159
        (insert (concat "
 
160
\(defun py-down-" ele "-lc ()
 
161
  \"Goto beginning of line following end of " ele ".
 
162
  Returns position reached, if successful, nil otherwise.
 
163
 
 
164
\\\"-lc\\\" stands for \\\"left-corner\\\" - a complementary command travelling left, whilst `py-end-of-" ele "' stops at right corner.
 
165
 
 
166
See also `py-down-" ele "': down from current definition to next beginning of " ele " below. \"
 
167
  (interactive)
 
168
  (let ((erg (py-end-of-" ele ")))
 
169
    (when erg
 
170
      (unless (eobp)
 
171
        (forward-line 1)
 
172
        (beginning-of-line)
 
173
        (setq erg (point))))
 
174
  (when (interactive-p) (message \"%s\" erg))
 
175
  erg))
 
176
"))
 
177
        (emacs-lisp-mode)
 
178
        (switch-to-buffer (current-buffer))))
 
179
 
 
180
(defun py-write-down-forms ()
 
181
  " "
 
182
  (interactive)
 
183
  (set-buffer (get-buffer-create "py-down-forms.el"))
 
184
  (erase-buffer)
 
185
      (dolist (ele py-down-forms)
 
186
        (insert (concat "
 
187
\(defun py-down-" ele " ()
 
188
  \"Go to the beginning of next " ele " below in buffer.
 
189
 
 
190
Returns indentation if " ele " found, nil otherwise. \"
 
191
  (interactive)
 
192
  (let\* ((orig (point))
 
193
         erg)
 
194
    (if (eobp)
 
195
        (setq erg nil)
 
196
      (while (and (setq erg (py-down-statement))(or (py-in-string-or-comment-p)(not (looking-at py-" ele "-re))))))
 
197
    (when (interactive-p) (message \"%s\" erg))
 
198
    erg))
 
199
"))
 
200
        (emacs-lisp-mode)
 
201
        (switch-to-buffer (current-buffer))))
 
202
 
 
203
(defun py-write-up-forms ()
 
204
  " "
 
205
  (interactive)
 
206
  (set-buffer (get-buffer-create "py-up-forms"))
 
207
  (erase-buffer)
 
208
  (dolist (ele py-down-forms)
 
209
    (insert (concat "
 
210
\(defun py-up-" ele " ()
 
211
  \"Goto end of line preceding beginning of " ele ".
 
212
  Returns position reached, if successful, nil otherwise.
 
213
 
 
214
A complementary command travelling right, whilst `py-beginning-of-" ele "' stops at left corner. \"
 
215
  (interactive)
 
216
  (let ((erg (py-beginning-of-" ele ")))
 
217
    (when erg
 
218
      (unless (bobp)
 
219
        (forward-line -1)
 
220
        (end-of-line)
 
221
        (skip-chars-backward \" \\t\\r\\n\\f\")
 
222
        (setq erg (point))))
 
223
  (when (interactive-p) (message \"%s\" erg))
 
224
  erg))
 
225
"))
 
226
    (emacs-lisp-mode)
 
227
    (switch-to-buffer (current-buffer))))
 
228
 
 
229
(defun py-write-specifying-shell-forms ()
 
230
  " "
 
231
  (interactive)
 
232
  (set-buffer (get-buffer-create "specifying-shell-forms"))
 
233
  (erase-buffer)
 
234
  (dolist (ele py-shells)
 
235
    (insert (concat "
 
236
(defun py-execute-region-" ele " (start end &optional async)
 
237
  \"Send the region to a common shell calling the " ele " interpreter. \"
 
238
  (interactive \"r\\nP\")
 
239
  (py-execute-base start end async \"" ele "\"))
 
240
 
 
241
(defun py-execute-region-" ele "-switch (start end &optional async)
 
242
  \"Send the region to a common shell calling the " ele " interpreter.
 
243
Ignores setting of `py-shell-switch-buffers-on-execute', output-buffer will being switched to. \"
 
244
  (interactive \"r\\nP\")
 
245
  (let ((py-shell-switch-buffers-on-execute t))
 
246
    (py-execute-base start end async \"" ele "\")))
 
247
 
 
248
(defun py-execute-region-" ele "-no-switch (start end &optional async)
 
249
  \"Send the region to a common shell calling the " ele " interpreter.
 
250
Ignores setting of `py-shell-switch-buffers-on-execute', output-buffer will not being switched to.\"
 
251
  (interactive \"r\\nP\")
 
252
  (let ((py-shell-switch-buffers-on-execute))
 
253
    (py-execute-base start end async \"" ele "\")))
 
254
"))
 
255
    (emacs-lisp-mode)
 
256
    (switch-to-buffer (current-buffer))))
 
257
 
 
258
(provide 'python-mode-shell-install)
 
259
;;; python-mode-shell-install.el ends here