[ESS] how to organize init.el for both python and R/ESS? Your workflow?

Tyler Smith ty|er @end|ng |rom p|@nt@rum@c@
Tue Oct 29 18:38:36 CET 2019


On Tue, Oct 29, 2019, at 12:58 PM, Paul Johnson via ESS-help wrote:
> 
> I put in a bunch of python bells and whistles and now ESS and R sessions
> don't work the same.  I've got interference from flymake and something has
> entirely broken the "_" to create <-.

This *shouldn't* happen - I have only done a little Python coding, but elpy and friends shouldn't do anything to ESS and friends.

> I need to understand how to write init.el as a sequence of files so that I
> can load the ESS part when I need to write R, or the python part if I work
> on that. Can you share your strategies for dealing with that?

You can load files via:

    (load "~/path/to/my/elisp.el")

So you could to something like this in your init:

    (load "~/.emacs.d/my-python-config.el")
    (load "~/.emacs.d/my-ess-config.el")

(using require/provides and modifying your load-path is probably more idiomatic for elisp, but not necessary here)

It might be useful to break your code into files more granularly, using different files for common stuff, keyboard config etc - basically each section in your init.el. The benefit here is, once you've parceled out all the code, it will be very easy to comment out each section in turn and find out where the problems are coming from. As I mentioned before, you really should be able to have ESS and elpy together in the same config without them breaking each other.

This might help if you want to do more troubleshooting:


Best,

Tyler



> 
> my init.el now:
> 
> (require 'package)
> (let* ((no-ssl (and (memq system-type '(windows-nt ms-dos))
>                     (not (gnutls-available-p))))
>        (proto (if no-ssl "http" "https")))
>   (when no-ssl
>     (warn "\
> Your version of Emacs does not support SSL connections,
> which is unsafe because it allows man-in-the-middle attacks.
> There are two things you can do about this warning:
> 1. Install an Emacs version that does support SSL and be safe.
> 2. Remove this warning from your init file so you won't see it again."))
>   ;; Comment/uncomment these two lines to enable/disable MELPA and MELPA
> Stable as desired
>   (add-to-list 'package-archives (cons "melpa" (concat proto "://
> melpa.org/packages/")) t)
>   ;;(add-to-list 'package-archives (cons "melpa-stable" (concat proto "://
> stable.melpa.org/packages/")) t)
>   (when (< emacs-major-version 24)
>     ;; For important compatibility libraries like cl-lib
>     (add-to-list 'package-archives (cons "gnu" (concat proto "://
> elpa.gnu.org/packages/")))))
> ;; for stable packages, use this instead
> ;;add-to-list 'package-archives
> ;;             '("melpa-stable" . "https://stable.melpa.org/packages/") t)
> 
> (package-initialize)
> 
> ;for the window-purpose package
> (purpose-mode)
> ; C-c, D: `purpose-toggle-window-buffer-dedicated`
> 
> ;; ; Python settings
> ;; ; see
> http://emacs.stackexchange.com/questions/24453/weird-shell-output-when-using-ipython-5
> ;; ;; ;; Some python things I use, you may not need
> (elpy-enable)
> ;; ;; recommended in elpy docs
> (setq python-shell-interpreter "jupyter"
>        python-shell-interpreter-args "console --simple-prompt"
>        python-shell-prompt-detect-failure-warning nil)
> (add-to-list 'python-shell-completion-native-disabled-interpreters
>              "jupyter")
> ;; ;
> https://stackoverflow.com/questions/25154809/how-can-i-stop-elpy-from-overriding-some-of-my-keybindings/25159354
> ;; ; 
> https://emacs.stackexchange.com/questions/46247/cannot-bind-m-s-left
> (eval-after-load "elpy"
>   '(progn
>      (define-key elpy-mode-map [(control return)] nil)
>      (define-key elpy-mode-map [(shift return)]
> 'elpy-shell-send-statement-and-step)
>      (define-key elpy-mode-map (kbd "\M-\t") nil)
>      (define-key elpy-mode-map (kbd "s-<tab>") 'elpy-company-backend)
>  )
> )
> (setq elpy-rpc-timeout 10)
> 
> 
> ;; Org-mode with R doesn't work without this
> ;; http://orgmode.org/worg/org-contrib/babel/how-to-use-Org-Babel-for-R.html
> (custom-set-variables
>  ;; custom-set-variables was added by Custom.
>  ;; If you edit it by hand, you could mess it up, so be careful.
>  ;; Your init file should contain only one such instance.
>  ;; If there is more than one, they won't work right.
>  '(ansi-color-names-vector
>    ["#2e3436" "#a40000" "#4e9a06" "#c4a000" "#204a87" "#5c3566" "#729fcf"
> "#eeeeec"])
>  '(column-number-mode t)
>  '(cua-auto-tabify-rectangles nil)
>  '(cua-mode t nil (cua-base))
>  '(custom-enabled-themes (quote (whiteboard)))
>  '(inferior-R-args "--no-restore-history --no-save")
>  '(package-selected-packages
>    (quote
>     (ivy window-purpose pyenv-mode py-autopep8 math-symbol-lists
> material-theme ein ess-smart-underscore htmlize polymode
> org-link-minor-mode markdown-mode julia-mode elpy dash)))
>  '(show-paren-mode t))
> 
> (setq-default indent-tabs-mode nil)
> (setq default-tab-width 4)
> 
> 
> ;; https://www.emacswiki.org/emacs/SmoothScrolling#toc1
> ;; scroll one line at a time (less "jumpy" than defaults)
>     (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a
> time
>     (setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling
>     (setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse
>     (setq scroll-step 1) ;; keyboard scroll one line at a time
> 
> 
> 
> ;; Section II. Keyboard and mouse customization
> ;; Mouse and cursor in the usual Mac/Windows way
> (delete-selection-mode t)
> ;;
> http://stackoverflow.com/questions/13036155/how-to-to-combine-emacs-primary-clipboard-copy-and-paste-behavior-on-ms-windows
> (setq select-active-regions t)
> ;; Trying to make mouse middle-click only paste from primary
> ;; X11 selection, not clipboard and kill ring:
> (global-set-key [mouse-2] 'mouse-yank-primary)
> ;; highlight does not alter Kill ring:
> (setq mouse-drag-copy-region nil)
> ;; windows style binding C-x, C-v, C-c, C-z:
> (cua-mode t)
> ;; Don't tabify after rectangle commands:
> (setq cua-auto-tabify-rectangles nil)
> 
> ;; Section III. Programming conveniences:
> ;; light-up matching parens:
> (show-paren-mode t)
> ;; turn on syntax highlighting:
> (global-font-lock-mode t)
> ;; Auto fill is TRUE in text modes:
> (setq text-mode-hook (quote (turn-on-auto-fill text-mode-hook-identify)))
> 
> 
> ;; Section IV. ESS Emacs Statistics
> 
> (require 'ess-site)
> ;; soft require: no error if package not found
> ;;(require 'ess-smart-underscore nil 'noerror)
> 
> ;;(require 'poly-R)
> ;;(require 'poly-markdown)
> 
> ;;(add-to-list 'auto-mode-alist '("\\.Rmd" . poly-markdown+r-mode))
> ;; start R in current working directory, don't let R ask user:
> (setq ess-ask-for-ess-directory nil)
> 
> ;; Change shortcut "run this line" to use Shift-Return
> ;; Suggested by Vitalie Spinu 2013-09-30 to co-exist with Windows Emacs
> (eval-after-load "ess"
>  '(progn
>    (define-key ess-mode-map [(control return)] nil)
>    ;;(define-key ess-mode-map [(shift return)]
> 'ess-eval-region-or-line-and-step))
>    (define-key ess-mode-map [(shift return)]
> 'ess-eval-region-or-line-visibly-and-step))
> )
> ;; Help in frames? Consider
> ;; 1) create a new frame for each help instance
> ;; (setq ess-help-own-frame t)
> ;; or 2) If you want all help buffers to go into one frame do:
> (setq ess-help-own-frame 'one)
> 
> ;; I want the *R* process in its own frame
> (setq inferior-ess-own-frame t)
> (setq inferior-ess-same-window nil)
> 
> ;; Problem in Windows about menus not displaying
> ;; https://stat.ethz.ch/pipermail/ess-help/2012-September/008207.html
> ;;(if (eq system-type 'windows-nt)
>   (defun my-R-execute-options ()
> (ess-command "options(menu.graphics = FALSE)\n"))
> (add-hook 'ess-R-post-run-hook 'my-R-execute-options)
> ;;)
> 
> ;; Put # flush left
> ;; See gmail thread in ESS group, this from Ista
> (add-hook 'ess-mode-hook
>  (lambda()
>             ;; don't indent comments
>             (setq ess-indent-with-fancy-comments nil)
>             ;; turn on outline mode
>             (setq-local outline-regexp "[# ]+")
>             (outline-minor-mode t)))
> 
> ;; Section V. Frames oriented Emacs
> ;; Discourage Emacs from horizontal splitting:
> ;; http://www.gnu.org/software/emacs/elisp/html_node/Choosing-Window.html
> ;;(setq split-window-preferred-function nil)
> 
> ;; (setq pop-up-windows nil)
> 
> ;; Make files opened from the menu bar appear in their own
> ;; frames. Adapted from Emacs menu-bar.el
> (defun menu-find-existing ()
>   "Edit the existing file FILENAME."
>   (interactive)
>   (let* ((mustmatch (not (and (fboundp 'x-uses-old-gtk-dialog)
>                               (x-uses-old-gtk-dialog))))
>          (filename (car (find-file-read-args "Find file: " mustmatch))))
>     (if mustmatch
>         (find-file-other-frame filename)
>       (find-file filename))))
> (define-key menu-bar-file-menu [new-file]
>   '(menu-item "Open/Create" find-file-other-frame
>  :enable (menu-bar-non-minibuffer-window-p)
>  :help "Create a new file"))
> (define-key menu-bar-file-menu [open-file]
>   '(menu-item ,(purecopy "Open File...") menu-find-existing
>               :enable (menu-bar-non-minibuffer-window-p)
>               :help ,(purecopy "Read an existing file into an Emacs
> buffer")))
> 
> 
> ;; Open directory list in new frame.
> (define-key menu-bar-file-menu [dired]
>   '(menu-item "Open Directory..." dired-other-frame
>      :help "Read a directory; operate on its files (Dired)"
>      :enable (not (window-minibuffer-p (frame-selected-window
> menu-updating-frame)))))
> 
> 
> 
> 
> 
> 
> 
> ;; Section VI: Miscellaneous convenience
> ;; Remove Emacs "splash screen" http://fuhm.livejournal.com/
> (defadvice command-line-normalize-file-name
> (before kill-stupid-startup-screen activate)
>   (setq inhibit-startup-screen t))
> (setq inhibit-splash-screen t)
> 
> ;; Show file name in title bar
> ;; http://www.thetechrepo.com/main-articles/549
> (setq frame-title-format "%b - Emacs")
> 
> ;; Make Emacs scroll smoothly with down arrow key.
> ;; faq 5.45
> http://www.gnu.org/s/emacs/emacs-faq.html#Modifying-pull_002ddown-menus
> ;;(setq scroll-conservatively most-positive-fixnum)
> 
> ;; adjust the size of the frames, uncomment this, adjust values
> ;;(setq default-frame-alist '((width . 90) (height . 65)))
> 
> 
> ;; Remember password when connected to remote sites via Tramp
> ;;
> http://stackoverflow.com/questions/840279/passwords-in-emacs-tramp-mode-editing
> ;; Emacs "tramp" service (ssh connection) constantly
> ;; asks for the log in password without this
> (setq password-cache-expiry nil)
> 
> 
> ;; Emacs shells work better
> ;; http://snarfed.org/why_i_run_shells_inside_emacs
> (setq ansi-color-for-comint-mode 'filter)
> (setq comint-prompt-read-only t)
> (setq comint-scroll-to-bottom-on-input t)
> (setq comint-scroll-to-bottom-on-output t)
> (setq comint-move-point-for-output t)
> 
> 
> 
> 
> ;; A stata stanza from Brendan Halpin
> 
> ;; Stata equivalent of ess-eval-region
> 
> (defun delimit-do (start end toggle &optional clear message)
>   "Send the current region to the inferior ESS process, Stata do-editor
> style.
> Creates a temporary file, \"do\"-es it, deletes it.
> With prefix argument toggle the meaning of `ess-eval-visibly-p';
> this does not apply when using the S-plus GUI, see
> `ess-eval-region-ddeclient'."
>   (interactive "r\nP")
>   (ess-force-buffer-current "Process to use: ")
>   (message "Starting evaluation...")
>   (setq message (or message "Eval region"))
> 
>   (save-excursion
>     ;; don't send new lines (avoid screwing the debugger)
>     (goto-char start)
>     (skip-chars-forward "\n\t ")
>     (setq start (point))
> 
>     (unless mark-active
>       (ess-blink-region start end))
> 
>     ;; don't send new lines at the end (avoid screwing the debugger)
>     (goto-char end)
>     (skip-chars-backward "\n\t ")
>     (setq end (point)))
> 
>   (let* (delimit
>          (commands (buffer-substring-no-properties start end))
>          (delimit-do-file (make-temp-file "delimit-do" nil ".do"))
>          (proc (get-process ess-local-process-name))
>          (visibly (if toggle (not ess-eval-visibly-p) ess-eval-visibly-p))
>          (dev-p (process-get proc 'developer))
>          (tb-p  (process-get proc 'tracebug)))
>     ;; Go to the start of the section and look back for #delimit
>     ;; if found set delimit unless the delimiter is not ";"
>     (save-excursion
>       (goto-char start)
>       (setq delimit (re-search-backward "^#delimit +\\(.+\\)$" nil t))
>       (if delimit
>           (if (not (string-match ";" (match-string 1))) (setq delimit
> nil))))
> 
>     (with-temp-buffer
>       (if clear (insert "clear\n"))
>       (if delimit (insert "#delimit ;\n"
>                           commands
>                           "\n#delimit cr\n")
>         (insert commands "\n"))
>       (write-file delimit-do-file nil)
>       (kill-buffer (current-buffer)))
> 
>     (process-send-string
>      (get-ess-process ess-current-process-name)
>      (format "do %s\nrm %s\n" delimit-do-file delimit-do-file))
>     )
>   (if (and (fboundp 'deactivate-mark) ess-eval-deactivate-mark)
>       (deactivate-mark))
>   ;; return value
>   (list start end))
> 
> 
> 
> ; 20161115: Things I was using in Emacs25 to do
> ; org-mode documents
> ;http://vislab-ccom.unh.edu/~schwehr/rt/9-bash-scripting.html
> ;(require 'org-install)
> (org-babel-do-load-languages
>    'org-babel-load-languages
>    '(
>      (shell . t) ;; emacs-26.1
>      (R . t)
>      ;;(sh . t) ;; pre-emacs 26.1
>     )
> )
> 
> ;;
> https://www.reddit.com/r/emacs/comments/tbj09/using_shift_selection_in_orgmode_buffers_without/
> ;
> ;; (defadvice org-call-for-shift-select (before
> org-call-for-shift-select-cua activate)
> ;;   (if (and cua-mode
> ;;            org-support-shift-select
> ;;            (not (use-region-p)))
> ;;      (cua-set-mark)))
> ;; (require 'ox-md nil t)
> 
> 
> ; See: http://mescal.imag.fr/membres/arnaud.legrand/misc/init.php
> 
> ;(setq org-hide-leading-stars t)
> ;(setq org-alphabetical-lists t)
> ;(setq org-src-fontify-natively t)  ;; you want this to activate coloring
> in blocks
> ;(setq org-src-tab-acts-natively t) ;; you want this to have completion in
> blocks
> ;(setq org-hide-emphasis-markers t) ;; to hide the *,=, or / markers
> ;(setq org-pretty-entities t)       ;; to have \alpha, \to and others
> display as utf8 http://orgmode.org/manual/Special-symbols.html
> ;
> 
> 
> 
> ;   (require 'yasnippet)
> ;   (yas-global-mode 1)
> 
> 
> (load "auctex.el" nil t t)
> (load "preview-latex.el" nil t t)
> (custom-set-faces
>  ;; custom-set-faces was added by Custom.
>  ;; If you edit it by hand, you could mess it up, so be careful.
>  ;; Your init file should contain only one such instance.
>  ;; If there is more than one, they won't work right.
>  )
> 
> 
> 
> 
> 
> 
> 
> -- 
> Paul E. Johnson   http://pj.freefaculty.org
> Director, Center for Research Methods and Data Analysis http://crmda.ku.edu
> 
> To write to me directly, please address me at pauljohn at ku.edu.
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> ESS-help using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/ess-help
>



More information about the ESS-help mailing list