[ESS] Care to critique some Emacs-ess slides?

Marc Schwartz marc_schwartz at me.com
Thu Aug 23 17:37:44 CEST 2012

On Aug 23, 2012, at 9:40 AM, Rodney Sparapani <rsparapa at mcw.edu> wrote:

> On 08/22/2012 06:22 PM, Paul Johnson wrote:
>> I told the students they have to use Emacs, and decided to write up
>> slides for that.
>> http://pj.freefaculty.org/guides/Rcourse/emacs-ess/emacs-ess.pdf
>> Title "Emacs Has No Learning Curve."
>> I argue against the general option, which seems to be that Emacs is
>> too difficult and we all need to use RStudio or other IDEs that are
>> designed to run on cell phones.
>> I think the Emacs tutorial and most Emacs help sheets are causing a
>> problem.  They try to teach people how to use Emacs without a mouse or
>> arrow keys or page down keys. At the current time, It is simply not
>> necessary for many users to remember how to change the active buffer
>> with a keyboard.  The mouse&  menu approach is good enough for most
>> people almost all the time.  If we put a few properly chosen settings
>> in .emacs, Emacs can be just about as convenient as any other editor
>> in the modern desktop world, and it is many times more powerful.
>> I wonder if this theme is bothersome to you?  If you were learning
>> Emacs today, would you really try to memorize keyboard navigation
>> keys?  Ex: C-v to go to the "next screen" (that's the first thing in
>> Emacs tutorial). I don't think somebody who finished high school after
>> 1990 has even the slightest idea of what "screen" means in a terminal
>> context. Just hit "page down" and forget about it!
>> If you have ideas for more ESS highlights, please let me know. I think
>> the C-c C-d and C-c C-l trick is the neatest feature ever.  But most
>> of the other ESS stuff is pretty obvious from the GUI layout. I did
>> not write anything about using gdb with C functions inside R packages.
>> If I ever master that, I suppose I'll have to write another slideshow.
>> pj
> Hi Paul:
> Very nice!  I agree with quite a lot of what you are saying.  What a
> lot of people don't seem to get is that RStudio is
> just for R.  The great power of emacs is/are modes.  We need to do all
> kinds of things besides R for which there are wonderful modes like
> C/C++, LaTeX, etc.  This is not meant to be a knock on RStudio as I
> really like what they are doing.  I have even more complaints
> about Eclipse and Xcode; they do allow plugins for other
> languages; but, they are really clumsy to use:  for those who have
> a hard time installing ESS try to get one of these other IDEs to
> work with a plugin!
> I want to put this link on the ESS web page.  Is that OK?
> Just a couple of minor comments on the slides...
> Slide 13: Alt = Meta is not a given.
> Slide 16: actually, I think there were function keys around at the
> time that emacs was invented since it started on Dec hardware which
> are famous for their function keys.
> Slide 21: the web page got put together with the last word in the 1st line
> Slide 28:  This is a big digression...
> I have been fond of IBM's Common User Access (CUA) for Cut/Copy/Paste
> which don't conflict with Emacs at all.
> http://en.wikipedia.org/wiki/Common_User_Access#Description
> Copy region: C-Insert
> Cut region:  Sh-Delete
> Paste region: Sh-Insert
> Unfortunately, I don't have a simple prescription for setting these,
> and my reading of the cua-mode documentation doesn't mention them.
> It seems to me that cua-mode is not really CUA at all.  Rather, it
> appears to be mimicking Apple's Human Interface Guidelines
> https://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AppleHIGuidelines/KeyboardShortcuts/KeyboardShortcuts.html
> Slide 45: if you hover over the beginning of the modeline, then you
> will see that you can toggle read-only by clicking the 4th character

Hi Paul,

I like what you have done as well.

Some comments on the slides:

1. pc-select mode has been deprecated in Emacs 24 and I believe superseded by shift-select-mode, which works in 23 also. I am not using Emacs 24 yet, due to previously reported issues with ESS and font lock.

2. Not sure if it worth mentioning the use of skeleton-pair mode, which automatically inserts pairs of characters, such as parens, braces, brackets and such. I have the following in my .emacs:

;; =============================================================
;; Set skeleton mode inserting pairs of characters =============
;; =============================================================

;; See http://www.emacswiki.org/emacs/EmacsSpeaksStatistics#toc3
  ;; enable skeleton-pair insert globally
   (setq skeleton-pair t)
   (global-set-key (kbd "(") 'skeleton-pair-insert-maybe)
   (global-set-key (kbd "[") 'skeleton-pair-insert-maybe)
   (global-set-key (kbd "{") 'skeleton-pair-insert-maybe)
   (global-set-key (kbd "\"") 'skeleton-pair-insert-maybe)
   (global-set-key (kbd "\'") 'skeleton-pair-insert-maybe)
   (global-set-key (kbd "\`") 'skeleton-pair-insert-maybe)

3. Would it be worth mentioning that Emacs has builtin support for version control using SVN and Git? Having used SVN for a number of years and now having moved to Git earlier this year, this is very helpful.

4. As with #2 above, would it be worth including the use of the highlight-parentheses package (http://www.emacswiki.org/HighlightParentheses), which enables highlighting nested paren pairs with colors? I have the following in my .emacs:

;; =============================================================
;; Set highlight Parentheses ===================================
;; =============================================================

(load "/MY.PATH.TO/HighlightParenthesis/highlight-parentheses")
(setq hl-paren-colors '("gold" "red" "blue" "green" "orange"))

(defun hpm-on ()
 (highlight-parentheses-mode t))
(add-hook 'ess-mode-hook 'hpm-on)
(add-hook 'inferior-ess-mode-hook 'hpm-on)
(add-hook 'ess-help-mode-hook 'hpm-on)
(add-hook 'tex-mode-hook 'hpm-on)
(add-hook 'text-mode-hook 'hpm-on)
(add-hook 'cperl-mode-hook 'hpm-on)
(add-hook 'Rd-mode-hook 'hpm-on)

5. There is also the windmove package, which is built into Emacs and allows one to define and use M-Cursor keys to quickly move between buffers in the main Emacs frame. I have the following in my .emacs:

;; =============================================================
;; Set keys for 'windmove', built into Emacs  ==================
;; =============================================================

(windmove-default-keybindings 'meta)

(global-set-key (kbd "M-<up>") 'windmove-up)
(global-set-key (kbd "M-<down>") 'windmove-down)
(global-set-key (kbd "M-<right>") 'windmove-right)
(global-set-key (kbd "M-<left>") 'windmove-left)

No doubt there are many approaches to introducing efficiencies into Emacs, which is of course a strength given the programmability of the application. Just thought I would mention a few here.


Marc Schwartz

More information about the ESS-help mailing list