(defun python-partial-symbol () "Return the partial symbol before point (for completion)." (let ((end (point)) (start (save-excursion (and (re-search-backward (rx (or buffer-start (regexp "[^[:alnum:]._]")) (group (1+ (regexp "[[:alnum:]._]"))) point) nil t) (match-beginning 1))))) (if start (buffer-substring-no-properties start end)))) (defun my-python-documentation (w) "Launch PyDOC on the Word at Point" (interactive (list (let* ((word (python-partial-symbol)) (input (read-string (format "pydoc entry%s: " (if (not word) "" (format " (default %s)" word )))))) (if (string= input "") (if (not word) (error "No pydoc args given") word) ;sinon word input)))) ;sinon input (shell-command (concat "c:/python25/python" " -c \"from pydoc import help;help(\'" w "\'\")") "*PYDOCS*") ;;(shell-command (concat "c:/python25/python c:/elisp/mkemacs.py h "w) "*PYDOCS*") (view-buffer-other-window "*PYDOCS*" t 'kill-buffer-and-window)) (defun python-symbol-completions (symbol) "Return a list of completions of the string SYMBOL from Python process. The list is sorted. Uses `python-imports' to load modules against which to complete." (when symbol (let ((completions (condition-case () (car (read-from-string ;(mapcar #'symbol-name (car (read-from-string ;"(Ttk.Ttk Ttk.TtkDialog)"))) (shell-command-to-string (format "c:/python25/python c:/elisp/p-m/emacs.py c %s" symbol)))) (error nil) ))) (sort ;; We can get duplicates from the above -- don't know why. (delete-dups completions) #'string<) ))) (defun my-python-complete-symbol () "Perform completion on the Python symbol preceding point. Repeating the command scrolls the completion window." (interactive) (let ((window (get-buffer-window "*Completions*"))) (if (and (eq last-command this-command) (window-live-p window) (window-buffer window) (buffer-name (window-buffer window))) (with-current-buffer (window-buffer window) (if (pos-visible-in-window-p (point-max) window) (set-window-start window (point-min)) (save-selected-window (select-window window) (scroll-up)))) ;; Do completion. (let* ((end (point)) (symbol (python-partial-symbol)) (completions (python-symbol-completions symbol)) ;; (qq(shell-command ;; (format "echo %s %s" symbol completions))) (completion (if completions (try-completion symbol completions) ))) (when symbol (cond ((eq completion t)) ((null completion) (message "Can't find completion for \"%s\"" symbol) (ding)) ((not (string= symbol completion)) (delete-region (- end (length symbol)) end) (insert completion)) (t (message "Making completion list...") (with-output-to-temp-buffer "*Completions*" (display-completion-list completions symbol)) (message "Making completion list...%s" "done"))))))))