[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: over-engineered (and under-standardized) inferior interfaces

From: Andreas Röhler
Subject: Re: over-engineered (and under-standardized) inferior interfaces
Date: Fri, 22 Aug 2014 07:57:11 +0200
User-agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Icedove/24.7.0

On 22.08.2014 05:45, Stefan Monnier wrote:
Just some comments on the default bindings. I understand these are the
historically-available ones, but I do feel that if we create a new mode
like this, it might be worthwhile to rethink them.

Sure.  prog-proc-mode is really just an experiment, and I'm quite open
to changes, both in terms of UI and implementation.

With the availability of an "active region", I think it would be nice
to consolidate send-buffer and send-region to a single binding.


Using a nice binding like C-c C-c for a somewhat less-common command
like "compile the current file in the REPL" (as opposed to using M-x
(re)compile) seems like a waste.

FWIW under sml-mode, C-c C-c runs a "make"-like command (but it's
a command passed to the inferior process rather than being a separate
process like in M-x compile).

So I'd suggest using C-c C-c for a new prog-proc-send-region-or-buffer.

I think "send the current buffer" is not good enough, except for those
rare systems where a single file is all you need.

I'm also unsure about using up too many C-c C-X bindings in this minor
mode; the major mode that activates it won't be able to easily override
those bindings locally, so it might be a good idea to be a bit more
conservative with the default bindings, providing the commands but not
the bindings for the less common use cases (load, compile, region,

My memory failed me: if you look at the code, you'll see that
prog-proc-mode is not a minor mode but a major-mode, to be used as
parent mode (in place of prog-mode, from which it derives).
So major modes can very easily override those bindings.
But yes: we shouldn't use too many such bindings.



very interesting move, thanks all.

Started some weeks o project "general-key", which seems to point into the very 
same direction.

Below the README:


For common items like `line', `word' or `symbol' Emacs' language modes
commonly don't touch the keybinding.

That way `backward-word', `copy-word', `forward-word',
`kill-word', `mark-word' etc. don't need configuration.

However, with programming, there are a couple of common cases,
not dealt with yet.

- statements, for example assigments
- conditionals resp. loops
- combinations of that, i.e. functions

for example WRT to function we might have for all modes


If general-key-mode provides key-binding for basic types, these keys must
not be changed or configured again by language-modes.

Now it would be at the modes, for example WRT python-mode.el:

(setq general-key-function-backward 'py-backward-def-or-class)
(setq general-key-function-copy 'py-copy-def-or-class)
(setq general-key-function-forward 'py-forward-def-or-class)
(setq general-key-function-kill 'py-kill-def-or-class)
(setq general-key-function-mark 'py-mark-def-or-class)

Respective with block, statement and expression maybe.

(setq general-key-block-backward 'py-backward-block)

A second group of commands simplified that way deals with braces,
brakcets, parenthesis or does a trim.

(setq general-key-region-brace 'ar-brace-region-atpt)
(setq general-key-region-bracket 'ar-bracket-region-atpt)
(setq general-key-region-trim 'ar-trim-region-atpt)
(setq general-key-region-parentize 'ar-parentize-region-atpt)

If a region might be braced, parenthized etc. in a suitable way, these
objects also should be easy to mark, copy, delete resp. kill and moved

Here an example using the parentized form:

(setq general-key-parentized-backward 'ar-beginning-of-parentized-atpt)
(setq general-key-parentized-copy 'ar-copy-parentized-atpt)
(setq general-key-parentized-trim 'ar-trim-parentized-atpt)
(setq general-key-parentized-forward 'ar-forward-parentized-atpt)
(setq general-key-parentized-kill 'ar-kill-parentized-atpt)
(setq general-key-parentized-mark 'ar-mark-parentized-atpt)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]