unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* mykie.el
@ 2014-01-03 20:09 Ted Zlatanov
  2014-01-03 21:37 ` mykie.el Bozhidar Batsov
                   ` (2 more replies)
  0 siblings, 3 replies; 66+ messages in thread
From: Ted Zlatanov @ 2014-01-03 20:09 UTC (permalink / raw)
  To: emacs-devel; +Cc: cokesboy

I was intrigued by https://github.com/yuutayamada/mykie-el by Yato
Yamada (CC here).  It's GPL v3.

Here's an example of context-dependent usage:

(mykie:global-set-key "C-j"
   :default  '(progn
                (delete-trailing-whitespace)
                (case major-mode
                  (org-mode (org-return-indent))
                  (t        (newline-and-indent))))
   :C-u&eolp '(fill-region (point-at-bol) (point-at-eol))
   :region   'query-replace-regexp)

(many other keywords are available, e.g. :prog for activating only in
programming modes)
   
I think it's worth considering either making this part of
`global-set-key' or at least putting mykie.el in the Emacs core.  Unlike
most ELPA packages (GNU or otherwise), I think this one should be
available by default, like CUA.  I don't know if Yamada-san wants to
assign copyright and sign the Emacs contributor papers, but I hope he
does.

Ted




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-03 20:09 mykie.el Ted Zlatanov
@ 2014-01-03 21:37 ` Bozhidar Batsov
  2014-01-04  1:08   ` mykie.el Yuta Yamada
  2014-01-04  2:02   ` mykie.el Yuta Yamada
  2014-01-04  4:34 ` mykie.el Stefan Monnier
  2014-01-06  5:31 ` mykie.el Yuta Yamada
  2 siblings, 2 replies; 66+ messages in thread
From: Bozhidar Batsov @ 2014-01-03 21:37 UTC (permalink / raw)
  To: emacs-devel; +Cc: cokesboy

[-- Attachment #1: Type: text/plain, Size: 1198 bytes --]

I was also intrigued by this package. Enhancing `global-set-key' in a
similar manner might be a huge win (after all - there are only so many good
keybindings available...).


On 3 January 2014 22:09, Ted Zlatanov <tzz@lifelogs.com> wrote:

> I was intrigued by https://github.com/yuutayamada/mykie-el by Yato
> Yamada (CC here).  It's GPL v3.
>
> Here's an example of context-dependent usage:
>
> (mykie:global-set-key "C-j"
>    :default  '(progn
>                 (delete-trailing-whitespace)
>                 (case major-mode
>                   (org-mode (org-return-indent))
>                   (t        (newline-and-indent))))
>    :C-u&eolp '(fill-region (point-at-bol) (point-at-eol))
>    :region   'query-replace-regexp)
>
> (many other keywords are available, e.g. :prog for activating only in
> programming modes)
>
> I think it's worth considering either making this part of
> `global-set-key' or at least putting mykie.el in the Emacs core.  Unlike
> most ELPA packages (GNU or otherwise), I think this one should be
> available by default, like CUA.  I don't know if Yamada-san wants to
> assign copyright and sign the Emacs contributor papers, but I hope he
> does.
>
> Ted
>
>
>

[-- Attachment #2: Type: text/html, Size: 1808 bytes --]

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-03 21:37 ` mykie.el Bozhidar Batsov
@ 2014-01-04  1:08   ` Yuta Yamada
  2014-01-06 22:47     ` mykie.el, mykie.el Ted Zlatanov
  2014-01-04  2:02   ` mykie.el Yuta Yamada
  1 sibling, 1 reply; 66+ messages in thread
From: Yuta Yamada @ 2014-01-04  1:08 UTC (permalink / raw)
  To: emacs-devel

Hello emacssen, I'm author of the mykie.el.
I'm not sure this is correct way to reply this article.
Let's me know if this way is any problem by yours.


I'm glad someone interested about this package.
But about assigning copyright and signing the Emacs contributor papers is
I'm just worried whether I can keep developing at GitHub.
Is that ok? Or do I need something if I change this package's code?

Even if it's no, I don't care to assign copyright and sign the Emacs
contributor papers. But I'm just wondered.

BTW my name is Yuta Yamada. Not Yato.
(I'm not angry. don't worry Mr.Ted)

Yuta



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-03 21:37 ` mykie.el Bozhidar Batsov
  2014-01-04  1:08   ` mykie.el Yuta Yamada
@ 2014-01-04  2:02   ` Yuta Yamada
  1 sibling, 0 replies; 66+ messages in thread
From: Yuta Yamada @ 2014-01-04  2:02 UTC (permalink / raw)
  To: emacs-devel

I sent same message from my mailer on Emacs, but it seems not reached
to this place. so I re-sent same message from web.
Sorry if you see same message again.

Hello emacssen, I'm author of the mykie.el.
I'm not sure this is correct way to reply this article.
Let's me know if this way is any problem by yours.

I'm glad someone interested about this package.
But about assigning copyright and signing the Emacs contributor papers is
I'm just worried whether I can keep developing at GitHub.
Is that ok? Or do I need something if I change this package's code?

Even if it's no, I don't care to assign copyright and sign the Emacs
contributor papers. But I'm just wondered.

BTW my name is Yuta Yamada. Not Yato.
(I'm not angry. don't worry Mr.Ted)

Yuta




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-03 20:09 mykie.el Ted Zlatanov
  2014-01-03 21:37 ` mykie.el Bozhidar Batsov
@ 2014-01-04  4:34 ` Stefan Monnier
  2014-01-04  8:36   ` mykie.el Leo Liu
                     ` (3 more replies)
  2014-01-06  5:31 ` mykie.el Yuta Yamada
  2 siblings, 4 replies; 66+ messages in thread
From: Stefan Monnier @ 2014-01-04  4:34 UTC (permalink / raw)
  To: emacs-devel

> Here's an example of context-dependent usage:

> (mykie:global-set-key "C-j"
>    :default  '(progn
>                 (delete-trailing-whitespace)
>                 (case major-mode
>                   (org-mode (org-return-indent))
>                   (t        (newline-and-indent))))
>    :C-u&eolp '(fill-region (point-at-bol) (point-at-eol))
>    :region   'query-replace-regexp)

> (many other keywords are available, e.g. :prog for activating only in
> programming modes)

Is that really much better than:

  (global-set-key "\C-j"
     (lambda ()
       (interactive)
       (cond
        (current-prefix-arg (fill-region (point-at-bol) (point-at-eol)))
        ((and (use-region-p) (eolp))
         (call-interactively 'query-replace-regexp))
        (t
         (delete-trailing-whitespace)
         (case major-mode
           (org-mode (org-return-indent))
           (t        (newline-and-indent)))))))

IIUC the need for "context dependent bindings" becomes more interesting
when you want the different cases to be specified independently.
As in

  (my-global-set-key "\C-j"
                     :predicate current-prefix-arg
                     :action (fill-region (point-at-bol) (point-at-eol)))

  (my-global-set-key "\C-j"
                     :predicate (and (use-region-p) (eolp))
                     :action 'query-replace-regexp)

I'm not sure exactly how best to do that, tho.


        Stefan



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-04  4:34 ` mykie.el Stefan Monnier
@ 2014-01-04  8:36   ` Leo Liu
  2014-01-05  8:10   ` mykie.el Mitchel Humpherys
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 66+ messages in thread
From: Leo Liu @ 2014-01-04  8:36 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

On 2014-01-04 12:34 +0800, Stefan Monnier wrote:
> Is that really much better than:
>
>   (global-set-key "\C-j"
>      (lambda ()
>        (interactive)
>        (cond
>         (current-prefix-arg (fill-region (point-at-bol) (point-at-eol)))
>         ((and (use-region-p) (eolp))
>          (call-interactively 'query-replace-regexp))
>         (t
>          (delete-trailing-whitespace)
>          (case major-mode
>            (org-mode (org-return-indent))
>            (t        (newline-and-indent)))))))

My thought exactly. Elisp is the best DSL for emacs.

Leo



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-04  4:34 ` mykie.el Stefan Monnier
  2014-01-04  8:36   ` mykie.el Leo Liu
@ 2014-01-05  8:10   ` Mitchel Humpherys
  2014-01-05 10:29     ` mykie.el Leo Liu
  2014-01-06 16:09   ` mykie.el Nicolas Richard
  2014-01-06 22:38   ` mykie.el Ted Zlatanov
  3 siblings, 1 reply; 66+ messages in thread
From: Mitchel Humpherys @ 2014-01-05  8:10 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

On Fri, Jan 03 2014 at 08:34:01 PM, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
>> Here's an example of context-dependent usage:
>
>> (mykie:global-set-key "C-j"
>>    :default  '(progn
>>                 (delete-trailing-whitespace)
>>                 (case major-mode
>>                   (org-mode (org-return-indent))
>>                   (t        (newline-and-indent))))
>>    :C-u&eolp '(fill-region (point-at-bol) (point-at-eol))
>>    :region   'query-replace-regexp)
>
>> (many other keywords are available, e.g. :prog for activating only in
>> programming modes)
>
> Is that really much better than:
>
>   (global-set-key "\C-j"
>      (lambda ()
>        (interactive)
>        (cond
>         (current-prefix-arg (fill-region (point-at-bol) (point-at-eol)))
>         ((and (use-region-p) (eolp))
>          (call-interactively 'query-replace-regexp))
>         (t
>          (delete-trailing-whitespace)
>          (case major-mode
>            (org-mode (org-return-indent))
>            (t        (newline-and-indent)))))))

Define "better". It's cool that yours is just vanilla Elisp but it took
me about 5 seconds to fully parse the mykie version and about 20 seconds
to fully parse your version.


-- 
Mitch



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-05  8:10   ` mykie.el Mitchel Humpherys
@ 2014-01-05 10:29     ` Leo Liu
  0 siblings, 0 replies; 66+ messages in thread
From: Leo Liu @ 2014-01-05 10:29 UTC (permalink / raw)
  To: Mitchel Humpherys; +Cc: Stefan Monnier, emacs-devel

On 2014-01-05 16:10 +0800, Mitchel Humpherys wrote:
> Define "better". It's cool that yours is just vanilla Elisp but it took
> me about 5 seconds to fully parse the mykie version and about 20 seconds
> to fully parse your version.

For me it is the other way around. The elisp syntax flows so smoothly
and gives me a sense of beauty and reassurance...

Don't get me wrong. I have nothing against mykie. It is perfectly fine
to introduce some syntax helper for writing the staff you want to write.
But this doesn't need to be in emacs core.

Leo



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-03 20:09 mykie.el Ted Zlatanov
  2014-01-03 21:37 ` mykie.el Bozhidar Batsov
  2014-01-04  4:34 ` mykie.el Stefan Monnier
@ 2014-01-06  5:31 ` Yuta Yamada
  2 siblings, 0 replies; 66+ messages in thread
From: Yuta Yamada @ 2014-01-06  5:31 UTC (permalink / raw)
  To: emacs-devel

Hello, mykie.el was updated recently to v0.1.1.
Let's me introduce little bit to advance discussion.

New version mykie can change order by each keybinds like this:

(setq mykie:use-lazy-order t) ; <- this is requirement
(mykie:set-keys nil ; <- nil means registering global-map
   "C-0"
   :default '(message "hi")
   :C-u*2   '(message "howdy")
   :C-u     '(message "hello")
   :C-u*3   '(message "hey") ; <- you can't see
   "C-1"
   :default '(message "hi")
   :C-u*3   '(message "howdy")
   :C-u     '(message "hello")
   :C-u*2   '(message "hey")) ; <- you can't see

As you can see above example is reverse part of :C-u*2 and :C-u*3.
This example is prior above :keyword and function pair without :default
when you set t to `mykie:use-lazy-order'.
So if you do this example, you can't execute C-0's :C-u*3 function and
C-1's :C-u*2 function.
Since mykie will execute :C-u's function.(:C-u*2 and :C-u*3 satisfy
:C-u's condition too)

This function can control order without conditional.
I don't know how many people like this future,
but I think it's easy to understand the function's structure.

Yuta

P.S. new version is added :err, :C-u&err, :region&err that activate
function when current state have flymake or flycheck error too.



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-04  4:34 ` mykie.el Stefan Monnier
  2014-01-04  8:36   ` mykie.el Leo Liu
  2014-01-05  8:10   ` mykie.el Mitchel Humpherys
@ 2014-01-06 16:09   ` Nicolas Richard
  2014-01-06 22:38   ` mykie.el Ted Zlatanov
  3 siblings, 0 replies; 66+ messages in thread
From: Nicolas Richard @ 2014-01-06 16:09 UTC (permalink / raw)
  To: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:
> IIUC the need for "context dependent bindings" becomes more interesting
> when you want the different cases to be specified independently.

One could check the predicate while looking up the key sequence in
active keymaps. AIUI, currently, keymaps are checked and if the sequence
is bound to a command it is used, otherwise lookup continues. My
suggestion is to change the condition "is bound" to "is bound *and* some
predicate is non nil". [I must say that since this likely requires
changes to C code, I don't have even the beginning of a patch.]

-- 
Nico.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-04  4:34 ` mykie.el Stefan Monnier
                     ` (2 preceding siblings ...)
  2014-01-06 16:09   ` mykie.el Nicolas Richard
@ 2014-01-06 22:38   ` Ted Zlatanov
  2014-01-07  0:37     ` mykie.el Stefan Monnier
  3 siblings, 1 reply; 66+ messages in thread
From: Ted Zlatanov @ 2014-01-06 22:38 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Yuta Yamada, emacs-devel

On Fri, 03 Jan 2014 23:34:01 -0500 Stefan Monnier <monnier@iro.umontreal.ca> wrote: 

SM> Is that really much better than [vanilla Emacs lisp]?

Yes.  The difference is huge for a beginner.

SM> IIUC the need for "context dependent bindings" becomes more interesting
SM> when you want the different cases to be specified independently.
...
SM> I'm not sure exactly how best to do that, tho.

Me neither.  Maybe Yuta Yamada can suggest, or mykie.el does it already.

Ted



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el, Re: mykie.el
  2014-01-04  1:08   ` mykie.el Yuta Yamada
@ 2014-01-06 22:47     ` Ted Zlatanov
  2014-01-06 23:00       ` enable MELPA & Marmalade by defaul [was: mykie.el] Drew Adams
  0 siblings, 1 reply; 66+ messages in thread
From: Ted Zlatanov @ 2014-01-06 22:47 UTC (permalink / raw)
  To: Yuta Yamada; +Cc: emacs-devel

On Fri, 03 Jan 2014 20:08:46 -0500 (EST) Yuta Yamada <cokesboy@gmail.com> wrote: 

YY> Hello emacssen, I'm author of the mykie.el.
YY> I'm not sure this is correct way to reply this article.
YY> Let's me know if this way is any problem by yours.

We got it :)

YY> I'm glad someone interested about this package.
YY> But about assigning copyright and signing the Emacs contributor papers is
YY> I'm just worried whether I can keep developing at GitHub.
YY> Is that ok? Or do I need something if I change this package's code?

Yes.  You need to have contributor papers on file, then your code can be
part of Emacs itself or in the GNU ELPA (enabled by default with Emacs,
unlike MELPA or Marmalade).

I am firmly in favor of putting mykie.el in the default set of packages
so new users can immediately use it.  I don't know how many others will
support this, and it may require some changes to the function calls and
to the internals.  But I'd love to show these examples in the Emacs docs
in addition to the current define-key examples that lack nuance.

This would happen after the code freeze in any case, so there's time.

The final approval rests with Stefan but I'm sure he will see reason ;)

YY> Even if it's no, I don't care to assign copyright and sign the Emacs
YY> contributor papers. But I'm just wondered.

Please do, I'm sure we'd love to have you in the developer group :)

YY> BTW my name is Yuta Yamada. Not Yato.
YY> (I'm not angry. don't worry Mr.Ted)

Heh heh.  I was careful but somehow wrote it wrong, sorry.

On Mon, 06 Jan 2014 00:31:23 -0500 Yuta Yamada <cokesboy@gmail.com> wrote: 

YY> Hello, mykie.el was updated recently to v0.1.1.
YY> Let's me introduce little bit to advance discussion.

YY> New version mykie can change order by each keybinds like this:

YY> (setq mykie:use-lazy-order t) ; <- this is requirement
YY> (mykie:set-keys nil ; <- nil means registering global-map
YY>    "C-0"
YY>    :default '(message "hi")
YY>    :C-u*2   '(message "howdy")
YY>    :C-u     '(message "hello")
YY>    :C-u*3   '(message "hey") ; <- you can't see
YY>    "C-1"
YY>    :default '(message "hi")
YY>    :C-u*3   '(message "howdy")
YY>    :C-u     '(message "hello")
YY>    :C-u*2   '(message "hey")) ; <- you can't see

YY> As you can see above example is reverse part of :C-u*2 and :C-u*3.
YY> This example is prior above :keyword and function pair without :default
YY> when you set t to `mykie:use-lazy-order'.
YY> So if you do this example, you can't execute C-0's :C-u*3 function and
YY> C-1's :C-u*2 function.
YY> Since mykie will execute :C-u's function.(:C-u*2 and :C-u*3 satisfy
YY> :C-u's condition too)

YY> This function can control order without conditional.
YY> I don't know how many people like this future,
YY> but I think it's easy to understand the function's structure.

I don't think it's a major difference for most users.  I think mykie.el
is primarily for beginners, who really need a simple way to define
context-sensitive keys without too much nuance.

YY> P.S. new version is added :err, :C-u&err, :region&err that activate
YY> function when current state have flymake or flycheck error too.

Oh that is *nice*.  Really nice.

Ted



^ permalink raw reply	[flat|nested] 66+ messages in thread

* enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-06 22:47     ` mykie.el, mykie.el Ted Zlatanov
@ 2014-01-06 23:00       ` Drew Adams
  2014-01-06 23:42         ` Óscar Fuentes
  2014-01-07 16:16         ` Ted Zlatanov
  0 siblings, 2 replies; 66+ messages in thread
From: Drew Adams @ 2014-01-06 23:00 UTC (permalink / raw)
  To: emacs-devel

> GNU ELPA (enabled by default with Emacs, unlike MELPA or Marmalade).

Apropos: Why shouldn't GNU Emacs enable all three by default?

That would help GNU Emacs users more, I think.



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-06 23:00       ` enable MELPA & Marmalade by defaul [was: mykie.el] Drew Adams
@ 2014-01-06 23:42         ` Óscar Fuentes
  2014-01-07  0:29           ` Drew Adams
       [not found]           ` <<a62bb795-44d9-44dd-b17a-d5294c21d2b0@default>
  2014-01-07 16:16         ` Ted Zlatanov
  1 sibling, 2 replies; 66+ messages in thread
From: Óscar Fuentes @ 2014-01-06 23:42 UTC (permalink / raw)
  To: emacs-devel

Drew Adams <drew.adams@oracle.com> writes:

>> GNU ELPA (enabled by default with Emacs, unlike MELPA or Marmalade).
>
> Apropos: Why shouldn't GNU Emacs enable all three by default?
>
> That would help GNU Emacs users more, I think.

One easy answer is that MELPA and Marmalade are non under the control of
the Emacs prooject.

A more serious concern is that some (all?) of the packages MELPA offers
are development versions (i.e. unreleased, mostly untested). I know of
at least one case where unwary users obtained from MELPA a broken
package, causing much grief among users and developers alike.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* RE: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-06 23:42         ` Óscar Fuentes
@ 2014-01-07  0:29           ` Drew Adams
  2014-01-07  1:08             ` Eric Brown
  2014-01-07 16:53             ` Richard Stallman
       [not found]           ` <<a62bb795-44d9-44dd-b17a-d5294c21d2b0@default>
  1 sibling, 2 replies; 66+ messages in thread
From: Drew Adams @ 2014-01-07  0:29 UTC (permalink / raw)
  To: Óscar Fuentes, emacs-devel

> >> GNU ELPA (enabled by default with Emacs, unlike MELPA or
> >> Marmalade).
> >
> > Apropos: Why shouldn't GNU Emacs enable all three by default?
> >
> > That would help GNU Emacs users more, I think.
> 
> One easy answer is that MELPA and Marmalade are non under the
> control of the Emacs prooject.

So?  GNU Emacs is not responsible for whatever it might be that
those repos have or do.  And I think we (should) know by now
that most, if not all, of what they do can be helpful for Emacs
users.

> A more serious concern is that some (all?) of the packages MELPA
> offers are development versions (i.e. unreleased, mostly untested).

Even if that were true - so what?  And what's a "development
version"?  What does "unreleased" mean?  How tested is "tested"?

The fact that you would even think of writing "(all?)" is, I think,
indicative of how far off the mark you are on this.

> I know of at least one case where unwary users obtained from MELPA
> a broken package, causing much grief among users and developers
> alike.

So what?  See above.  GNU Emacs is not responsible for those repos
just because it might include their names in the list of repos 
available by default.  (If you want, provide a `parental-control'
command that lets a Mother Hen remove certain repos from the list
as a preventative measure. ;-))

When you buy a Samsung TV and it comes enabled for use by Netflix
(provided you subscribe), does that make Samsung responsible for
something that Netflix might offer?  Good luck with a law suit
that makes that claim.

Should `eww' give users access, by default, only to web sites
that GNU Emacs Dev (TM) has vetted ("tested", "released"...)?
Who will do all the vetting?

Think users, not lawyers.  This is not GNanny, or at least it
did not used to be.



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-06 22:38   ` mykie.el Ted Zlatanov
@ 2014-01-07  0:37     ` Stefan Monnier
  2014-01-07 23:21       ` mykie.el Ted Zlatanov
  0 siblings, 1 reply; 66+ messages in thread
From: Stefan Monnier @ 2014-01-07  0:37 UTC (permalink / raw)
  To: emacs-devel; +Cc: Yuta Yamada

SM> Is that really much better than [vanilla Emacs lisp]?
> Yes.  The difference is huge for a beginner.

I'm far from convinced.  The beginner will have to learn the
mykie-specific sublanguage.  Maybe it's slightly simpler, but then this
effort won't help him understand other code.

Making it easier to customize Emacs is great, but it's better if it also
gets you some way towards hacking on Emacs so as to become a contributor.

Of course, there are cosmetic issues in the mykie.el syntax that rub me
the wrong way.  Most obvious is the need to quote code.  I already spend
enough time telling people not to quote their lambdas and trying to fix
code that abuses `eval' in all kinds of useless ways.

Starting from

(mykie:global-set-key "C-j"
   :default  '(progn
                (delete-trailing-whitespace)
                (case major-mode
                  (org-mode (org-return-indent))
                  (t        (newline-and-indent))))
   :C-u&eolp '(fill-region (point-at-bol) (point-at-eol))
   :region   'query-replace-regexp)

I'd suggest to first get rid of the quotes and the
`mykie:global-set-key' (so that it can be used with
local-set-key, define-key, you name it):

   (global-set-key "C-j"
      (smkie
       :default  (progn
                  (delete-trailing-whitespace)
                  (case major-mode
                    (org-mode (org-return-indent))
                    (t        (newline-and-indent))))
       :C-u&eolp (fill-region (point-at-bol) (point-at-eol))
       :region   'query-replace-regexp))

Then I suggest we use a parenthesized syntax, and descriptive name, to
be more Lispish:

   (global-set-key "C-j"
      (sm-combined-command
       (:default
        (delete-trailing-whitespace)
        (case major-mode
          (org-mode (org-return-indent))
          (t        (newline-and-indent))))
       (:C-u&eolp (fill-region (point-at-bol) (point-at-eol)))
       (:region   'query-replace-regexp)))

Also, since the user knows about "t is default" from "case", we might as
well get rid of ":default":

   (global-set-key "C-j"
      (sm-combined-command
       (:C-u&eolp (fill-region (point-at-bol) (point-at-eol)))
       (:region   'query-replace-regexp)
       (t
        (delete-trailing-whitespace)
        (case major-mode
          (org-mode (org-return-indent))
          (t        (newline-and-indent))))))

And sm-combined-command is a very simple macro:

  (defconst sm-combined-command-predicates
    '((:region . (use-region-p))
      (:C-u . current-prefix-arg)
      (:C-u&eolp . (and current-prefix-arg (eolp)))
      ...))

  (defmacro sm-combined-command (branches)
    `(lambda ()
       (interactive)
       (cond
        ,@(mapcar (lambda (branch)
                    `(,(or (cdr (assq (car branch)
                                      sm-combined-command-predicates))
                           (car branch))
                      ,@(pcase (cdr branch)
                          (`(',cmd) `((call-interactively ',cmd)))
                          (,cmds cmds))))
                  branches))))
          
-- Stefan



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07  0:29           ` Drew Adams
@ 2014-01-07  1:08             ` Eric Brown
  2014-01-07  5:39               ` Drew Adams
  2014-01-07 16:53             ` Richard Stallman
  1 sibling, 1 reply; 66+ messages in thread
From: Eric Brown @ 2014-01-07  1:08 UTC (permalink / raw)
  To: Drew Adams; +Cc: Óscar Fuentes, emacs-devel

Hi Drew,

Drew Adams <drew.adams@oracle.com> writes:

>> >> GNU ELPA (enabled by default with Emacs, unlike MELPA or
>> >> Marmalade).
>> >
>> > Apropos: Why shouldn't GNU Emacs enable all three by default?
>> >
>> > That would help GNU Emacs users more, I think.
>> 
>> One easy answer is that MELPA and Marmalade are non under the
>> control of the Emacs prooject.
>
> So?  GNU Emacs is not responsible for whatever it might be that
> those repos have or do.  And I think we (should) know by now
> that most, if not all, of what they do can be helpful for Emacs
> users.

I think this falls into the category of "should a GNU project recommend
repositories that contain non-free software?"

(vide, inter alia, "Real Men Do Not Attack Straw Men")

RMS and his defense of the FSF position (and composure in the face of
very shabby treatment) are remarkable.

> Should `eww' give users access, by default, only to web sites
> that GNU Emacs Dev (TM) has vetted ("tested", "released"...)?
> Who will do all the vetting?
>

If Emacs (or any GNU/FSF program) actively prevented the installation of
software, or surfing to a site of the users' choice, that would be
censorship.

It is another matter entirely to _recommend_ the software sites, because
the FSF believes that this constitutes some form of complicity in
leading someone astray. (Whether the end-user believes it is
immaterial.)

> Think users, not lawyers.  This is not GNanny, or at least it
> did not used to be.

It is trivial for a user to enable these repositories.

What is not trivial is endeavoring to maintain a libre software
installation, but having non-free repositories enabled.  It is truly
shocking that proprietary "feature-enhancing" extensions can get
installed onto a system by package managers, though the selected
software package (e.g. Chromium) was in fact libre.

From another perspective, it makes it difficult to develop software
systems for commercial purposes, because can't be sure that my company
can use for any purpose or redistribute the codes.  In principle, a repo
author may rise like a submarine, when he discovers that he could strike
it rich because of (unintended) license violations.  IANAL, but I
believe that unless otherwise stated, all rights are reserved.

Best regards,
Eric



^ permalink raw reply	[flat|nested] 66+ messages in thread

* RE: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07  1:08             ` Eric Brown
@ 2014-01-07  5:39               ` Drew Adams
  2014-01-07  8:33                 ` Nic Ferrier
                                   ` (2 more replies)
  0 siblings, 3 replies; 66+ messages in thread
From: Drew Adams @ 2014-01-07  5:39 UTC (permalink / raw)
  To: Eric Brown; +Cc: Óscar Fuentes, emacs-devel

Hi Eric,

> >> > Why shouldn't GNU Emacs enable all three by default?
> >> > That would help GNU Emacs users more, I think.
> >>
> >> One easy answer is that MELPA and Marmalade are non under the
> >> control of the Emacs prooject.
> >
> > So?  GNU Emacs is not responsible for whatever it might be that
> > those repos have or do.  And I think we (should) know by now
> > that most, if not all, of what they do can be helpful for Emacs
> > users.
> 
> I think this falls into the category of "should a GNU project
> recommend repositories that contain non-free software?"

Putting them in the available-by-default list does *not*
recommend them, IMO.  And it is certainly possible for GNU
Emacs to post a big banner saying that the ONLY repository
it recommends is its own ELPA repository, genuine GNU ELPA.
Nothing wrong with that.  Would that satisfy your
recommendation worry?

And anyway, nothing says that those repositories involve much
non-free software, or even any at all.

Without looking, I'd bet that the *overwhelming mass* of packages
in those two repositories are free software (GPL'd).  Why make
users jump through extra hoops to access all that free software,
even if there might also be a non-free package there somewhere?

Do you think that a downloading user cannot tell whether some
software is free or not?  If so, is this about trying to hide
that non-free software from their unsuspecting hands, so they
cannot make the awful mistake of not recognizing it?

If so, that kind of protection-by-ignorance is doomed to be
ineffective and even counterproductive in the long run, IMHO.

> RMS and his defense of the FSF position (and composure in
> the face of very shabby treatment) are remarkable.

Agreed 100%.  And so?  Has RMS said that listing those two
repositories would hurt free software?  Maybe a lawyer from
the FSF will chime in.  (As if we didn't get enough
software-development-by-legal-department these days..., but
I digress.)

> If Emacs (or any GNU/FSF program) actively prevented the
> installation of software, or surfing to a site of the users'
> choice, that would be censorship.

I did not suggest that.  I suggested listing those repos
by default.  That neither censors access to them nor
particularly recommends them (IMO).

How about my Samsung - Netflix analogy?  Do you think you'd
stand a chance if you sued Samsung because one of Netflix's
films offended you?  Is Samsung liable for bad Netflix films
because it makes Netflix available by default on your new TV?

Your public library (that nasty socialist institution!) no
doubt has some books that some people might find objectionable.
The library does make a selection - it decides what to make
available.  But that does not mean that the library censors
those books that are not in its catalog.  And it does not mean
that the library necessarily recommends each of its books for
each of its readers.

Some users perhaps should not read some books or install some
software packages, at least not until they feel they are ready
and want to do so.  That does not mean that books or software
that might be helpful to other users (even perhaps most users)
should not be made easily available to them.

It is my guess that the vast majority of packages in those two
repositories (a) are useful to at least _some_ Emacs users,
(b) are probably not poisonous to _any_ Emacs users, and (c)
are likely not at all problematic for _most_ Emacs users.
Do you have a different guess in this regard?  (Please note
the qualifiers, in particular "vast majority".)

If that is the case (folks here can make that judgment/guess),
then is it more helpful to users to add those two repositories
to the default list?  I think so. You are welcome to disagree.

> It is another matter entirely to _recommend_ the software
> sites, because the FSF believes that this constitutes some
> form of complicity in leading someone astray. (Whether the
> end-user believes it is immaterial.)

Sorry, I really do not see it that way.  But then, I am not
a lawyer.  I'm thinking about what could be most helpful for
most users (in my judgment).

I do not see simply listing MELPA by default as constituting
a blanket endorsement of everything on MELPA.  I cannot
imagine that any user would see it that way.  (A lawyer who
wants to make his job easier might see it that way, or at
least say that he does.)

> > Think users, not lawyers.  This is not GNanny, or at
> > least it did not used to be.
> 
> It is trivial for a user to enable these repositories.

Maybe so, but I have seen questions here and there about
doing so.  List them and it becomes even more trivial.
And no doubt it is just as trivial to remove one from the
list, or to simply ignore it, no?

And to enable them, they need to know they exist.  Listing
them by default obviates a separate discovery step: here
they are.

Just what are you trying to protect users or GNU Emacs
from?  It's a serious question.  I'd like to get a
specific answer.

So far, we've heard about the bogeyman of "(all?)" MELPA
packages destroying a user's environment or whatever
(nothing about free software in that scarefest).  That's
one extremely vague anecdote from Oscar about one user
having had one bad experience.  Sheesh.

And now we've gotten a vague catastrophe scenario from you
about free software being somehow polluted and dragged down
to depravity and degradation by inadvertent downloading of
non-free software.

But seriously, what is the *real track record* for the 1487
packages on MELPA and the *hundreds of thousands* of package
downloads from MELPA so far?  Any knowledge of mass suffering?
Any statistics about non-free software corrupting
free-software environments or users?

The experiment has been running for a while now.  Surely
we should know by now if there is a big problem here that
really needs preventing.  No?  What's the story - real
danger or not?

> What is not trivial is endeavoring to maintain a libre software
> installation, but having non-free repositories enabled.  It is truly
> shocking that proprietary "feature-enhancing" extensions can get
> installed onto a system by package managers, though the selected
> software package (e.g. Chromium) was in fact libre.

Any evidence that that has anything to do with the question
at hand?
 
> From another perspective, it makes it difficult to develop software
> systems for commercial purposes, because can't be sure that my
> company can use for any purpose or redistribute the codes.

I think you are really exaggerating there (but I am not a lawyer).

That sounds very much like the kind of thing one sometimes hears
in commercial companies about GNU (!) and why GNU software should
be avoided like the plague by companies because it supposedly
sucks all of the company's own software into a free-software
tainted purgatory.  Dueling bogeymen.

> In principle, a repo author may rise like a submarine, when he
> discovers that he could strike it rich because of (unintended)
> license violations.  IANAL, but I believe that unless otherwise
> stated, all rights are reserved.

Sounds like we need to hear from a law expert about this.
All of that sounds wildly exaggerated to me.

Just because a repository might have some packages (and is that
even sure?) that are not free software, even if it also has
hundreds of useful free-software packages (which I think is the
case), is it the end of the world for GNU Emacs to list that
repository?

In that scenario, I would say that the benefit (to users, and
to Emacs itself) would *FAR* outweigh whatever cost you imagine
to free software.

But perhaps (no doubt) I am not grasping the seriousness of the
threat to free software posed by listing these two repositories.
So far, I've seen nothing specific - only bogeymen and vague
Chicken Little alarmism.  Where's the beef?

I do appreciate the concern.  I suspect that it is misplaced.
But I, like you, am not a lawyer.  I realize that I am likely
seeing a small part of a bigger picture.  Lawyer input welcome.



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07  5:39               ` Drew Adams
@ 2014-01-07  8:33                 ` Nic Ferrier
  2014-01-07  8:38                 ` David Kastrup
  2014-01-07 14:41                 ` Grim Schjetne
  2 siblings, 0 replies; 66+ messages in thread
From: Nic Ferrier @ 2014-01-07  8:33 UTC (permalink / raw)
  To: Drew Adams; +Cc: =?iso-8859-1?B?03NjYXIgRnVlbnRlcw==?=, Eric Brown, emacs-devel

Drew Adams <drew.adams@oracle.com> writes:

> I do appreciate the concern.  I suspect that it is misplaced.
> But I, like you, am not a lawyer.  I realize that I am likely
> seeing a small part of a bigger picture.  Lawyer input welcome.

I am not a lawyer either. I do run marmalade though.

Doing this is a terrible idea. Marmalade and MELPA don't co-operate
well.

Using an external repository, AT THIS STAGE, should still be a
deliberate choice for Emacs users IMO.


Nic Ferrier



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07  5:39               ` Drew Adams
  2014-01-07  8:33                 ` Nic Ferrier
@ 2014-01-07  8:38                 ` David Kastrup
  2014-01-07 14:41                 ` Grim Schjetne
  2 siblings, 0 replies; 66+ messages in thread
From: David Kastrup @ 2014-01-07  8:38 UTC (permalink / raw)
  To: emacs-devel

Drew Adams <drew.adams@oracle.com> writes:

> Hi Eric,
>
>> >> > Why shouldn't GNU Emacs enable all three by default?
>> >> > That would help GNU Emacs users more, I think.
>> >>
>> >> One easy answer is that MELPA and Marmalade are non under the
>> >> control of the Emacs prooject.
>> >
>> > So?  GNU Emacs is not responsible for whatever it might be that
>> > those repos have or do.  And I think we (should) know by now
>> > that most, if not all, of what they do can be helpful for Emacs
>> > users.
>> 
>> I think this falls into the category of "should a GNU project
>> recommend repositories that contain non-free software?"
>
> Putting them in the available-by-default list does *not*
> recommend them, IMO.

No, it endorses them.  Much stronger.

-- 
David Kastrup




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07  5:39               ` Drew Adams
  2014-01-07  8:33                 ` Nic Ferrier
  2014-01-07  8:38                 ` David Kastrup
@ 2014-01-07 14:41                 ` Grim Schjetne
  2014-01-07 15:12                   ` Stephen Berman
                                     ` (2 more replies)
  2 siblings, 3 replies; 66+ messages in thread
From: Grim Schjetne @ 2014-01-07 14:41 UTC (permalink / raw)
  To: emacs-devel

Drew Adams <drew.adams@oracle.com> writes:

> Putting them in the available-by-default list does *not*
> recommend them, IMO.  And it is certainly possible for GNU
> Emacs to post a big banner saying that the ONLY repository
> it recommends is its own ELPA repository, genuine GNU ELPA.
> Nothing wrong with that.  Would that satisfy your
> recommendation worry?

A reluctant endorsement is still an endorsement.

> And anyway, nothing says that those repositories involve much
> non-free software, or even any at all.

I viewed a random package in Marmalade and it had no indication of a
license whatsoever. Perhaps the author intended to release it as free
software or could easily be convinced to do so, but as it stands now,
Marmalade is not completely free software.

> Without looking, I'd bet that the *overwhelming mass* of packages
> in those two repositories are free software (GPL'd).  Why make
> users jump through extra hoops to access all that free software,
> even if there might also be a non-free package there somewhere?
>
> Do you think that a downloading user cannot tell whether some
> software is free or not?  If so, is this about trying to hide
> that non-free software from their unsuspecting hands, so they
> cannot make the awful mistake of not recognizing it?

It seems like a reasonable assumption that the overwhelming mass is
licensed under the GPL, but I absolutely do think a user cannot tell
whether an unlabelled package is free or not, at least I can't, not
without consulting the author.

> If so, that kind of protection-by-ignorance is doomed to be
> ineffective and even counterproductive in the long run, IMHO.
>
>> RMS and his defense of the FSF position (and composure in
>> the face of very shabby treatment) are remarkable.
>
> Agreed 100%.  And so?  Has RMS said that listing those two
> repositories would hurt free software?  Maybe a lawyer from
> the FSF will chime in.  (As if we didn't get enough
> software-development-by-legal-department these days..., but
> I digress.)

You're suggesting it's a legal issue. I don't see how it is. It's not
illegal to recommend non-free software.

> How about my Samsung - Netflix analogy?  Do you think you'd
> stand a chance if you sued Samsung because one of Netflix's
> films offended you?  Is Samsung liable for bad Netflix films
> because it makes Netflix available by default on your new TV?

As far as I know it's not illegal to include Netflix in your products
either. It's a social problem, not a legal one, and yes, Samsung should
be held responsible for it. If they were distributing Busybox without
the source, that would be both a social and a legal issue.

> I think you are really exaggerating there (but I am not a lawyer).
>
> That sounds very much like the kind of thing one sometimes hears
> in commercial companies about GNU (!) and why GNU software should
> be avoided like the plague by companies because it supposedly
> sucks all of the company's own software into a free-software
> tainted purgatory.  Dueling bogeymen.

Although unrelated to the current discussion, Bradley Kuhn does a good
job explaining why some companies oppose copyleft software of which they
are not sole copyright holders:
http://ebb.org/bkuhn/blog/2009/10/16/open-core-shareware.html

--
GS



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07 14:41                 ` Grim Schjetne
@ 2014-01-07 15:12                   ` Stephen Berman
  2014-01-07 17:44                     ` Drew Adams
  2014-01-08 14:02                     ` Stefan Monnier
  2014-01-07 17:44                   ` enable MELPA & Marmalade by defaul [was: mykie.el] Drew Adams
  2014-01-08  3:23                   ` Stephen J. Turnbull
  2 siblings, 2 replies; 66+ messages in thread
From: Stephen Berman @ 2014-01-07 15:12 UTC (permalink / raw)
  To: Grim Schjetne; +Cc: emacs-devel

On Tue, 07 Jan 2014 15:41:28 +0100 Grim Schjetne <gs@schjetne.se> wrote:

> Drew Adams <drew.adams@oracle.com> writes:
>
>> And anyway, nothing says that those repositories involve much
>> non-free software, or even any at all.
>
> I viewed a random package in Marmalade and it had no indication of a
> license whatsoever. Perhaps the author intended to release it as free
> software or could easily be convinced to do so, but as it stands now,
> Marmalade is not completely free software.
>
>> Without looking, I'd bet that the *overwhelming mass* of packages
>> in those two repositories are free software (GPL'd).  Why make
>> users jump through extra hoops to access all that free software,
>> even if there might also be a non-free package there somewhere?
>>
>> Do you think that a downloading user cannot tell whether some
>> software is free or not?  If so, is this about trying to hide
>> that non-free software from their unsuspecting hands, so they
>> cannot make the awful mistake of not recognizing it?
>
> It seems like a reasonable assumption that the overwhelming mass is
> licensed under the GPL, but I absolutely do think a user cannot tell
> whether an unlabelled package is free or not, at least I can't, not
> without consulting the author.

Is it even "legal" to distribute any elisp code that is not at least
compatible with the GPL?  After all, any elisp code will have to link
with Emacs to be usable.

Steve Berman



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-06 23:00       ` enable MELPA & Marmalade by defaul [was: mykie.el] Drew Adams
  2014-01-06 23:42         ` Óscar Fuentes
@ 2014-01-07 16:16         ` Ted Zlatanov
  2014-01-07 17:44           ` Drew Adams
  1 sibling, 1 reply; 66+ messages in thread
From: Ted Zlatanov @ 2014-01-07 16:16 UTC (permalink / raw)
  To: emacs-devel

On Mon, 6 Jan 2014 15:00:37 -0800 (PST) Drew Adams <drew.adams@oracle.com> wrote: 

>> GNU ELPA (enabled by default with Emacs, unlike MELPA or Marmalade).
DA> Apropos: Why shouldn't GNU Emacs enable all three by default?

I would be against that by default.

But they could be made easier to enable, maybe as pre-canned options you
can check to enable in the Customize view of `package-archives'.  I'd be
in favor of that.

Ted




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07  0:29           ` Drew Adams
  2014-01-07  1:08             ` Eric Brown
@ 2014-01-07 16:53             ` Richard Stallman
  2014-01-08  3:15               ` Stephen J. Turnbull
  1 sibling, 1 reply; 66+ messages in thread
From: Richard Stallman @ 2014-01-07 16:53 UTC (permalink / raw)
  To: Drew Adams; +Cc: ofv, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

    So?  GNU Emacs is not responsible for whatever it might be that
    those repos have or do.

We are not looking for excuses to be irresponsible, so we will
maintain control over what code GNU Emacs recommends to users.  We
will therefore not recommend repositories that are maintained outside
of the GNU Project.

Mentioning a repository constitutes recommending it.

    When you buy a Samsung TV and it comes enabled for use by Netflix
    (provided you subscribe), does that make Samsung responsible for
    something that Netflix might offer?

This example is cogent, because the Netflix app is nonfree software:
immoral and unjust.  Even nastier, it implements DRM.  To distribute
that is wrong, and even recommending it is wrong.

How can we make sure we don't recommend an Emacs library to run
Netflix (perhaps by fork and exec)?  By maintaining control over
what we recommend.

There are various reasons we might not want to recommend something,
so we will make we sure remain in a position to decide.

-- 
Dr Richard Stallman
President, Free Software Foundation
51 Franklin St
Boston MA 02110
USA
www.fsf.org  www.gnu.org
Skype: No way! That's nonfree (freedom-denying) software.
  Use Ekiga or an ordinary phone call.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* RE: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07 14:41                 ` Grim Schjetne
  2014-01-07 15:12                   ` Stephen Berman
@ 2014-01-07 17:44                   ` Drew Adams
  2014-01-08  3:41                     ` Richard Stallman
  2014-01-08  3:23                   ` Stephen J. Turnbull
  2 siblings, 1 reply; 66+ messages in thread
From: Drew Adams @ 2014-01-07 17:44 UTC (permalink / raw)
  To: Grim Schjetne, emacs-devel

Hi Grim,

> > Putting them in the available-by-default list does *not*
> > recommend them, IMO.  And it is certainly possible for GNU
> > Emacs to post a big banner saying that the ONLY repository
> > it recommends is its own ELPA repository, genuine GNU ELPA.
> > Nothing wrong with that.  Would that satisfy your
> > recommendation worry?
> 
> A reluctant endorsement is still an endorsement.

Where do you see an endorsement in that - reluctant or enthusiastic?

> > And anyway, nothing says that those repositories involve much
> > non-free software, or even any at all.
> 
> I viewed a random package in Marmalade and it had no indication
> of a license whatsoever.

How many times did you pick a "random" package?  Once?
What proportion of Marmalade packages have no license?

> Perhaps the author intended to release it as free software or
> could easily be convinced to do so, but as it stands now,
> Marmalade is not completely free software.

I never claimed that either MELPA or Marmalade is completely
free software.  Is there some free software there?  Is it useful?

> > Without looking, I'd bet that the *overwhelming mass* of packages
> > in those two repositories are free software (GPL'd).  Why make
> > users jump through extra hoops to access all that free software,
> > even if there might also be a non-free package there somewhere?
> >
> > Do you think that a downloading user cannot tell whether some
> > software is free or not?  If so, is this about trying to hide
> > that non-free software from their unsuspecting hands, so they
> > cannot make the awful mistake of not recognizing it?
> 
> It seems like a reasonable assumption that the overwhelming mass is
> licensed under the GPL, but I absolutely do think a user cannot tell
> whether an unlabelled package is free or not, at least I can't, not
> without consulting the author.

I'm no expert on package.el.  But perhaps it is a current limitation
if it does not either (a) provide a command that shows the license
(e.g., by searching the file header) or (b) let you easily browse
(at least) the main file of the package (which presumably has a
license) before downloading (or perhaps before installing).

IOW, I agree that it would be good for a user to be able to see
such info before hand, while browsing the repository.  Likewise,
to see the name of the author/maintainer.  Whether that is a
(missing) package.el feature or a (missing) repository feature,
I don't know.

> > If so, that kind of protection-by-ignorance is doomed to be
> > ineffective and even counterproductive in the long run, IMHO.
> >
> >> RMS and his defense of the FSF position (and composure in
> >> the face of very shabby treatment) are remarkable.
> >
> > Agreed 100%.  And so?  Has RMS said that listing those two
> > repositories would hurt free software?  Maybe a lawyer from
> > the FSF will chime in.  (As if we didn't get enough
> > software-development-by-legal-department these days..., but
> > I digress.)
> 
> You're suggesting it's a legal issue. I don't see how it is. It's
> not illegal to recommend non-free software.

Please read what I wrote.  Did I say anything about illegality?

I'm not suggesting that.  I'm suggesting that perhaps RMS or FSF
would not want to list those repos by default because of legal
considerations.  And "legal considerations" does not mean that
something is illegal.  Most commonly these days, it means "for
fear of a lawsuit", but it can also mean, "just to avoid any
possible legal problems."

But mainly I was saying that, so far, RMS and FSF have not
said anything about this.  They have not chimed in with any
objection.  This was in response to statements that presumably
this would go against software freedom.  If it does, then I
am sure we should hear from RMS/FSF soon enough about that.

> > How about my Samsung - Netflix analogy?  Do you think you'd
> > stand a chance if you sued Samsung because one of Netflix's
> > films offended you?  Is Samsung liable for bad Netflix films
> > because it makes Netflix available by default on your new TV?
> 
> As far as I know it's not illegal to include Netflix in your
> products either.

It really sounds like you are confusing law, which includes
civil and criminal law, with criminal law.  I spoke about law
suits, not illegality.

> It's a social problem, not a legal one, and yes, Samsung
> should be held responsible for it. 

Good luck with a law suit on that basis.

> If they were distributing Busybox without the source, that
> would be both a social and a legal issue.

Irrelevant.  No one is saying anything about distributing
GPL software (or any software) without the source code.  You
are off the mark here.

> > I think you are really exaggerating there (but I am not a lawyer).
> >
> > That sounds very much like the kind of thing one sometimes hears
> > in commercial companies about GNU (!) and why GNU software should
> > be avoided like the plague by companies because it supposedly
> > sucks all of the company's own software into a free-software
> > tainted purgatory.  Dueling bogeymen.
> 
> Although unrelated to the current discussion, Bradley Kuhn does a
> good job explaining why some companies oppose copyleft software
> of which they are not sole copyright holders:
> http://ebb.org/bkuhn/blog/2009/10/16/open-core-shareware.html

Thanks for the info; interesting.

Regards,

  Drew



^ permalink raw reply	[flat|nested] 66+ messages in thread

* RE: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07 16:16         ` Ted Zlatanov
@ 2014-01-07 17:44           ` Drew Adams
  2014-01-08  3:41             ` Richard Stallman
  0 siblings, 1 reply; 66+ messages in thread
From: Drew Adams @ 2014-01-07 17:44 UTC (permalink / raw)
  To: emacs-devel

> > Why shouldn't GNU Emacs enable all three by default?
> 
> I would be against that by default.
> 
> But they could be made easier to enable, maybe as pre-canned options
> you can check to enable in the Customize view of `package-archives'.
> I'd be in favor of that.

Yes.  But it is less about the difficulty of enabling that it is
about lack of any indication that they even exist as possibilities.

Even just mentioning them in the interface would help users.
Yes, it would help them find (lots!) more *free software* that is
useful.



^ permalink raw reply	[flat|nested] 66+ messages in thread

* RE: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07 15:12                   ` Stephen Berman
@ 2014-01-07 17:44                     ` Drew Adams
  2014-01-07 20:55                       ` Stephen Berman
  2014-01-08 14:02                     ` Stefan Monnier
  1 sibling, 1 reply; 66+ messages in thread
From: Drew Adams @ 2014-01-07 17:44 UTC (permalink / raw)
  To: Stephen Berman, Grim Schjetne; +Cc: emacs-devel

> Is it even "legal" to distribute any elisp code that is not at least
> compatible with the GPL?  After all, any elisp code will have to
> link with Emacs to be usable.

Not sure why you put "legal" in quotes.  And it's not clear what you
have in mind by "compatible with", here.

But of course it is legal to distribute Emacs Lisp code that is not
under GPL.  GNU/FSF does not want to distribute such code itself,
naturally.  And it does not like anyone else to do so.  But it is
not illegal for someone to do that.



^ permalink raw reply	[flat|nested] 66+ messages in thread

* RE: enable MELPA & Marmalade by defaul  [was: mykie.el]
       [not found]             ` <<E1W0Zto-0000A5-VX@fencepost.gnu.org>
@ 2014-01-07 17:44               ` Drew Adams
  0 siblings, 0 replies; 66+ messages in thread
From: Drew Adams @ 2014-01-07 17:44 UTC (permalink / raw)
  To: rms; +Cc: ofv, emacs-devel

>     So?  GNU Emacs is not responsible for whatever it might be that
>     those repos have or do.
> 
> We are not looking for excuses to be irresponsible, so we will
> maintain control over what code GNU Emacs recommends to users.  We
> will therefore not recommend repositories that are maintained
> outside of the GNU Project.
> 
> Mentioning a repository constitutes recommending it.

OK, so there we have it: a clear statement.  End of story.  Thx.

I can certainly live with that decision (though I do not agree
at all that mentioning something constitutes recommending it).



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07 17:44                     ` Drew Adams
@ 2014-01-07 20:55                       ` Stephen Berman
  2014-01-08 11:52                         ` Tassilo Horn
  0 siblings, 1 reply; 66+ messages in thread
From: Stephen Berman @ 2014-01-07 20:55 UTC (permalink / raw)
  To: Drew Adams; +Cc: Grim Schjetne, emacs-devel

On Tue, 7 Jan 2014 09:44:32 -0800 (PST) Drew Adams <drew.adams@oracle.com> wrote:

>> Is it even "legal" to distribute any elisp code that is not at least
>> compatible with the GPL?  After all, any elisp code will have to
>> link with Emacs to be usable.
>
> Not sure why you put "legal" in quotes.

Just a hedge, since I'm not sure of the legal status of the GPL, whether
in the US or any other jurisdiction.

>                                          And it's not clear what you
> have in mind by "compatible with", here.

I meant code with a license whose terms contradict (in whole or part)
the GPL.  Since you cannot (IIUC) distribute Emacs (or a fork of it)
under a license that contradicts the GPL, it seems to follow that any
elisp code, which must link with Emacs to be executed, also cannot be
distributed under a license that contradicts the GPL.  Or maybe it just
follows that any such code could not be part of Emacs.  Anyway, I'm not
interested in such code and was more or less just idly speculating.

Steve Berman



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-07  0:37     ` mykie.el Stefan Monnier
@ 2014-01-07 23:21       ` Ted Zlatanov
  2014-01-08  3:24         ` mykie.el Stefan Monnier
  0 siblings, 1 reply; 66+ messages in thread
From: Ted Zlatanov @ 2014-01-07 23:21 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Yuta Yamada, emacs-devel

On Mon, 06 Jan 2014 19:37:01 -0500 Stefan Monnier <monnier@iro.umontreal.ca> wrote: 

SM> Is that really much better than [vanilla Emacs lisp]?
>> Yes.  The difference is huge for a beginner.

SM> I'm far from convinced.  The beginner will have to learn the
SM> mykie-specific sublanguage.  Maybe it's slightly simpler, but then this
SM> effort won't help him understand other code.

That's a problem with anything that hides code complexity, and yet we do
it all the time.  I doubt beginners can handle `pcase' and the
subtleties of context-sensitive key definitions, so I think for this
specific case the simplification is necessary.

SM> Making it easier to customize Emacs is great, but it's better if it also
SM> gets you some way towards hacking on Emacs so as to become a contributor.

I completely disagree with that line of thinking.

SM> Of course, there are cosmetic issues in the mykie.el syntax that rub me
SM> the wrong way.  Most obvious is the need to quote code.  I already spend
SM> enough time telling people not to quote their lambdas and trying to fix
SM> code that abuses `eval' in all kinds of useless ways.

That's a good point.

...
SM>    (global-set-key "C-j"
SM>       (sm-combined-command
SM>        (:C-u&eolp (fill-region (point-at-bol) (point-at-eol)))
SM>        (:region   'query-replace-regexp)
SM>        (t
SM>         (delete-trailing-whitespace)
SM>         (case major-mode
SM>           (org-mode (org-return-indent))
SM>           (t        (newline-and-indent))))))

SM> And sm-combined-command is a very simple macro:

SM>   (defconst sm-combined-command-predicates
SM>     '((:region . (use-region-p))
SM>       (:C-u . current-prefix-arg)
SM>       (:C-u&eolp . (and current-prefix-arg (eolp)))
SM>       ...))

SM>   (defmacro sm-combined-command (branches)
SM>     `(lambda ()
SM>        (interactive)
SM>        (cond
SM>         ,@(mapcar (lambda (branch)
SM>                     `(,(or (cdr (assq (car branch)
SM>                                       sm-combined-command-predicates))
SM>                            (car branch))
SM>                       ,@(pcase (cdr branch)
SM>                           (`(',cmd) `((call-interactively ',cmd)))
SM>                           (,cmds cmds))))
SM>                   branches))))

That's very nice (you and your pcase :).  I think it's fairly difficult
to explain *how* it works to a beginner and would need lots of
documentation, but from the user's standpoint it's exactly what I was
hoping to bring out of mykie.el.  The developers can then contribute
more predicates and the users can happily use them.

The important question for you and Yamada-san is, would you be
interested in something like `sm-combined-command' in the Emacs core,
regardless of how mykie.el evolves?  Then mykie.el can remain a place
for experimentation and perhaps it can use `sm-combined-command'
internally, enriching it with special extensions that maybe don't make
sense in the core.

The other way I imagine is to put mykie.el in the GNU ELPA, but I would
rather enable this facility by default if there are no objections.

Ted



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07 16:53             ` Richard Stallman
@ 2014-01-08  3:15               ` Stephen J. Turnbull
  2014-01-08  9:27                 ` Richard Stallman
  0 siblings, 1 reply; 66+ messages in thread
From: Stephen J. Turnbull @ 2014-01-08  3:15 UTC (permalink / raw)
  To: rms; +Cc: ofv, Drew Adams, emacs-devel

Richard Stallman writes:

 > Mentioning a repository constitutes recommending it.

[...]

 > This example is cogent, because the Netflix app

Newsflash!  RMS recommends Netflix![1]  ;-)

Please say "enabling access constitutes recommendation."

Allowing the user to specify a generic base URL in the package access
software is a very weak recommendation, since it "recommends" everything
on the web.  Adding a specific :choice element to the defcustom is a
clear recommendation IMO.  Enabling by default is a strong
recommendation.

Anyone who feels that strongly about the issue can create a file
"repo-registry" which adds the other repos to the defcustom and even
enables them by default, and interested users can download and use
that file.  Possibly even from MELPA or Marmalade.


Footnotes: 
[1]  N.B. The deliberate taking from context is to make the point
about the word "mention", but remember the politician's proverb, "Call
me anything you like, but spell my name correctly."  The context
doesn't really help to weaken any implicit recommendation, as when it
comes to decrying non-free software, RMS is likely to choose the
best-of-breed as the example.



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07 14:41                 ` Grim Schjetne
  2014-01-07 15:12                   ` Stephen Berman
  2014-01-07 17:44                   ` enable MELPA & Marmalade by defaul [was: mykie.el] Drew Adams
@ 2014-01-08  3:23                   ` Stephen J. Turnbull
  2014-01-08 10:32                     ` David Kastrup
  2 siblings, 1 reply; 66+ messages in thread
From: Stephen J. Turnbull @ 2014-01-08  3:23 UTC (permalink / raw)
  To: Grim Schjetne; +Cc: emacs-devel

Grim Schjetne writes:

 > I viewed a random package in Marmalade and it had no indication of a
 > license whatsoever. Perhaps the author intended to release it as free
 > software

If so, it *is* free software.  It's just very risky for users, because
without a verifiable statement of license, the author could change his
mind and the users would have no recourse.

True, failing to post a license violates best practices, but it's
unlikely that even a patent shark would upload a file to Marmalade in
the hopes that they could sue users for enough money to pay court
costs.  It would be nice if the repos would enforce a policy of
removing packages that do not contain an explicit statement of
license.



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-07 23:21       ` mykie.el Ted Zlatanov
@ 2014-01-08  3:24         ` Stefan Monnier
  2014-01-08 15:44           ` mykie.el Ted Zlatanov
  0 siblings, 1 reply; 66+ messages in thread
From: Stefan Monnier @ 2014-01-08  3:24 UTC (permalink / raw)
  To: emacs-devel; +Cc: Yuta Yamada

SM> Making it easier to customize Emacs is great, but it's better if it also
SM> gets you some way towards hacking on Emacs so as to become a contributor.
> I completely disagree with that line of thinking.

I can't begin to imagine why you'd disagree with it.

> The important question for you and Yamada-san is, would you be
> interested in something like `sm-combined-command' in the Emacs core,

You could add it to subr-x.el (after 24.4),


        Stefan



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07 17:44           ` Drew Adams
@ 2014-01-08  3:41             ` Richard Stallman
  0 siblings, 0 replies; 66+ messages in thread
From: Richard Stallman @ 2014-01-08  3:41 UTC (permalink / raw)
  To: Drew Adams; +Cc: emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

    Yes.  But it is less about the difficulty of enabling that it is
    about lack of any indication that they even exist as possibilities.

Yes, exactly.  We are selective about which packages we mention
as possibilities, so we decline to indirect that to a list maintained
by someone else.

If you'd like your package to be mentioned as a possibility,
you should make arrangements to get it into the GNU ELPA.

-- 
Dr Richard Stallman
President, Free Software Foundation
51 Franklin St
Boston MA 02110
USA
www.fsf.org  www.gnu.org
Skype: No way! That's nonfree (freedom-denying) software.
  Use Ekiga or an ordinary phone call.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07 17:44                   ` enable MELPA & Marmalade by defaul [was: mykie.el] Drew Adams
@ 2014-01-08  3:41                     ` Richard Stallman
  2014-01-08  4:26                       ` Bob Bobeck
  2014-01-08 10:50                       ` Nic Ferrier
  0 siblings, 2 replies; 66+ messages in thread
From: Richard Stallman @ 2014-01-08  3:41 UTC (permalink / raw)
  To: Drew Adams; +Cc: gs, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

    How many times did you pick a "random" package?  Once?
    What proportion of Marmalade packages have no license?

A program with no license notice is not free software.
(See http://gnu.org/licenses/license-list.html#NoLicense.)
It is very bad practice for a repository to permits nonfree programs.
Every repository should have a policy not to do that.

    > It seems like a reasonable assumption that the overwhelming mass is
    > licensed under the GPL, but I absolutely do think a user cannot tell
    > whether an unlabelled package is free or not, at least I can't, not
    > without consulting the author.

If a source file doesn't have a license notice then it is nonfree.

Maybe this policy results from a misunderstanding on the part
of whoever runs Marmalade.  We should try explaining the facts
about missing licenses and see if the maintainer of Marmalade
will change the policy to stop allowing them.  Can someone put me
in touch with the right people?

-- 
Dr Richard Stallman
President, Free Software Foundation
51 Franklin St
Boston MA 02110
USA
www.fsf.org  www.gnu.org
Skype: No way! That's nonfree (freedom-denying) software.
  Use Ekiga or an ordinary phone call.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul [was: mykie.el]
  2014-01-08  3:41                     ` Richard Stallman
@ 2014-01-08  4:26                       ` Bob Bobeck
  2014-01-08 10:50                       ` Nic Ferrier
  1 sibling, 0 replies; 66+ messages in thread
From: Bob Bobeck @ 2014-01-08  4:26 UTC (permalink / raw)
  To: rms; +Cc: esr, gs, Drew Adams, emacs-devel

When you talk to them, don't forget to mention the BSD 2-Clause
License as an option: http://opensource.org/licenses/BSD-2-Clause

On 1/7/14, Richard Stallman <rms@gnu.org> wrote:
> [[[ To any NSA and FBI agents reading my email: please consider    ]]]
> [[[ whether defending the US Constitution against all enemies,     ]]]
> [[[ foreign or domestic, requires you to follow Snowden's example. ]]]
>
>     How many times did you pick a "random" package?  Once?
>     What proportion of Marmalade packages have no license?
>
> A program with no license notice is not free software.
> (See http://gnu.org/licenses/license-list.html#NoLicense.)
> It is very bad practice for a repository to permits nonfree programs.
> Every repository should have a policy not to do that.
>
>     > It seems like a reasonable assumption that the overwhelming mass is
>     > licensed under the GPL, but I absolutely do think a user cannot tell
>     > whether an unlabelled package is free or not, at least I can't, not
>     > without consulting the author.
>
> If a source file doesn't have a license notice then it is nonfree.
>
> Maybe this policy results from a misunderstanding on the part
> of whoever runs Marmalade.  We should try explaining the facts
> about missing licenses and see if the maintainer of Marmalade
> will change the policy to stop allowing them.  Can someone put me
> in touch with the right people?
>
> --
> Dr Richard Stallman
> President, Free Software Foundation
> 51 Franklin St
> Boston MA 02110
> USA
> www.fsf.org  www.gnu.org
> Skype: No way! That's nonfree (freedom-denying) software.
>   Use Ekiga or an ordinary phone call.
>
>
>



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-08  3:15               ` Stephen J. Turnbull
@ 2014-01-08  9:27                 ` Richard Stallman
  0 siblings, 0 replies; 66+ messages in thread
From: Richard Stallman @ 2014-01-08  9:27 UTC (permalink / raw)
  To: Stephen J. Turnbull; +Cc: ofv, drew.adams, emacs-devel

[[[ To any NSA and FBI agents reading my email: please consider    ]]]
[[[ whether defending the US Constitution against all enemies,     ]]]
[[[ foreign or domestic, requires you to follow Snowden's example. ]]]

     > Mentioning a repository constitutes recommending it.

    [...]

     > This example is cogent, because the Netflix app

    Newsflash!  RMS recommends Netflix![1]  ;-)

We were talking about mentioning a repository as an option for people
to use.  I didn't make sure to repeat that in full, I said just
"mentioning", but I think you could have understood the intended
meaning from the context.

    Allowing the user to specify a generic base URL in the package access
    software is a very weak recommendation, since it "recommends" everything
    on the web.

A general facility like that doesn't recommend anything in particular.
Listing particular programs or collections leads people towards them;
that's what we need to be selective about.

-- 
Dr Richard Stallman
President, Free Software Foundation
51 Franklin St
Boston MA 02110
USA
www.fsf.org  www.gnu.org
Skype: No way! That's nonfree (freedom-denying) software.
  Use Ekiga or an ordinary phone call.




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-08  3:23                   ` Stephen J. Turnbull
@ 2014-01-08 10:32                     ` David Kastrup
  0 siblings, 0 replies; 66+ messages in thread
From: David Kastrup @ 2014-01-08 10:32 UTC (permalink / raw)
  To: emacs-devel

"Stephen J. Turnbull" <stephen@xemacs.org> writes:

> Grim Schjetne writes:
>
>  > I viewed a random package in Marmalade and it had no indication of a
>  > license whatsoever. Perhaps the author intended to release it as free
>  > software
>
> If so, it *is* free software.  It's just very risky for users, because
> without a verifiable statement of license, the author could change his
> mind and the users would have no recourse.

A user does not have a "recourse" anyway.  The author can always change
his mind even with a verifiable statement of license and sue.  A
verifiable statement of license is no help against that, but it is a
good defense.  Note that in the U.S.A., the financial risk of even a
meritless lawsuit is enough of a detraction for anybody: only in the
case of _frivolous_ lawsuits (and the barrier for that is rather high)
does the defendant get to reclaim his court fees and attorney costs.

> True, failing to post a license violates best practices, but it's
> unlikely that even a patent shark would upload a file to Marmalade in
> the hopes that they could sue users for enough money to pay court
> costs.

That's not the shark model for small fry.  The shark model is to sue
and/or send a cease and desist letter, then settle out of court for less
than the cost of a successful defense.

> It would be nice if the repos would enforce a policy of removing
> packages that do not contain an explicit statement of license.

Yes, definitely.

-- 
David Kastrup




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-08  3:41                     ` Richard Stallman
  2014-01-08  4:26                       ` Bob Bobeck
@ 2014-01-08 10:50                       ` Nic Ferrier
  2014-01-08 17:54                         ` Achim Gratz
  1 sibling, 1 reply; 66+ messages in thread
From: Nic Ferrier @ 2014-01-08 10:50 UTC (permalink / raw)
  To: rms; +Cc: gs, Drew Adams, emacs-devel

Richard Stallman <rms@gnu.org> writes:

> [[[ To any NSA and FBI agents reading my email: please consider    ]]]
> [[[ whether defending the US Constitution against all enemies,     ]]]
> [[[ foreign or domestic, requires you to follow Snowden's example. ]]]
>
> A program with no license notice is not free software.
> (See http://gnu.org/licenses/license-list.html#NoLicense.)
> It is very bad practice for a repository to permits nonfree programs.
> Every repository should have a policy not to do that.
>
>     > It seems like a reasonable assumption that the overwhelming mass is
>     > licensed under the GPL, but I absolutely do think a user cannot tell
>     > whether an unlabelled package is free or not, at least I can't, not
>     > without consulting the author.
>
> If a source file doesn't have a license notice then it is nonfree.
>
> Maybe this policy results from a misunderstanding on the part
> of whoever runs Marmalade.  We should try explaining the facts
> about missing licenses and see if the maintainer of Marmalade
> will change the policy to stop allowing them.  Can someone put me
> in touch with the right people?

I run marmalade.

It is not a misunderstanding on my part.

You and I have spoken about it already on email.

My position is that I *do* want to add licence functionality to
marmalade.


The functionality will:

* allow package authors to choose what licence they distribute their
  code under (hopefully without any extra effort if the licence is
  stated in the code in the usual Emacs way) 

* allow users of marmalade to choose to use a repository which is
  exclusively:

** Free software only
** or GPL only
** or GPL + LGPL


But I am not ready to introduce those features yet. I am still
struggling with getting marmalade even functional (it is very bad code
that I inherited).


I am (slowly) getting there.

I said earlier in this thread that I thought recommending a package
archive other than ELPA was a very bad idea. The licence issue is just
one reason.

Another is control and understanding of who wrote what package. MELPA is
anarchy in this regard (which some think is a good thing). Marmalade is
not much better.

Signed packages are being worked on. When I have introduced signed
package functionality to marmalade and when I have introduced the
licence features then I would be happy for marmalade to be included as a
recommendation in an Emacs distribution.

Till then, as the maintainer of Marmalade I would ask you not to do
that.


Nic Ferrier




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07 20:55                       ` Stephen Berman
@ 2014-01-08 11:52                         ` Tassilo Horn
  2014-01-08 13:19                           ` David Kastrup
  0 siblings, 1 reply; 66+ messages in thread
From: Tassilo Horn @ 2014-01-08 11:52 UTC (permalink / raw)
  To: Stephen Berman; +Cc: Grim Schjetne, Drew Adams, emacs-devel

Stephen Berman <stephen.berman@gmx.net> writes:

>>> Is it even "legal" to distribute any elisp code that is not at least
>>> compatible with the GPL?  After all, any elisp code will have to
>>> link with Emacs to be usable.
>>
>> Not sure why you put "legal" in quotes.
>
> Just a hedge, since I'm not sure of the legal status of the GPL,
> whether in the US or any other jurisdiction.

At least here in Germany, the GPL has been confirmed several times by
German courts.

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-08 11:52                         ` Tassilo Horn
@ 2014-01-08 13:19                           ` David Kastrup
  0 siblings, 0 replies; 66+ messages in thread
From: David Kastrup @ 2014-01-08 13:19 UTC (permalink / raw)
  To: emacs-devel

Tassilo Horn <tsdh@gnu.org> writes:

> Stephen Berman <stephen.berman@gmx.net> writes:
>
>>>> Is it even "legal" to distribute any elisp code that is not at least
>>>> compatible with the GPL?  After all, any elisp code will have to
>>>> link with Emacs to be usable.
>>>
>>> Not sure why you put "legal" in quotes.
>>
>> Just a hedge, since I'm not sure of the legal status of the GPL,
>> whether in the US or any other jurisdiction.
>
> At least here in Germany, the GPL has been confirmed several times by
> German courts.

Whatever you may consider "confirmed".  The point is just that the
defense against GPL violations is rather weak.  "Your honor, we consider
the GPL to be invalid and ourselves not bound by it."  Which is
perfectly fine, and the GPL explicitly allows for it.  The problem is
that the followup question then is "Ok, let's put aside the GPL.  What
_other_ permission did you have for using this software?"  And things go
downhill from there.  The ultimate position tends to be something along
the line of "no reasonable person could have expected the license to
mean what it says".

And getting a judge to swallow that is a challenge.

It's not as much the GPL that is confirmed in such cases, but rather
copyright as such.  One reason there is more confirmation in Germany
might be that in Germany, "loser pays all".  In the U.S., it is much
more expensive to defend what is obviously yours.

-- 
David Kastrup




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-07 15:12                   ` Stephen Berman
  2014-01-07 17:44                     ` Drew Adams
@ 2014-01-08 14:02                     ` Stefan Monnier
  2014-01-08 17:19                       ` enable MELPA & Marmalade by defaul Glenn Morris
  1 sibling, 1 reply; 66+ messages in thread
From: Stefan Monnier @ 2014-01-08 14:02 UTC (permalink / raw)
  To: Stephen Berman; +Cc: Grim Schjetne, emacs-devel

> Is it even "legal" to distribute any elisp code that is not at least
> compatible with the GPL?

I think it is indeed "not legal", but I don't think this has been tested
in court, nor have I even heard any rumor of a lawyer expressing an
opinion on the issue.


        Stefan



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-08  3:24         ` mykie.el Stefan Monnier
@ 2014-01-08 15:44           ` Ted Zlatanov
  2014-01-08 16:11             ` mykie.el Stefan Monnier
  2014-01-08 21:21             ` mykie.el Yuta Yamada
  0 siblings, 2 replies; 66+ messages in thread
From: Ted Zlatanov @ 2014-01-08 15:44 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Yuta Yamada, emacs-devel

On Tue, 07 Jan 2014 22:24:16 -0500 Stefan Monnier <monnier@iro.umontreal.ca> wrote: 

SM> Making it easier to customize Emacs is great, but it's better if it also
SM> gets you some way towards hacking on Emacs so as to become a contributor.
>> I completely disagree with that line of thinking.

SM> I can't begin to imagine why you'd disagree with it.

Because hacking should be an exploration, not a guided expedition.
Anyhow, I didn't mean to sidetrack things, I think we agree on this.

>> The important question for you and Yamada-san is, would you be
>> interested in something like `sm-combined-command' in the Emacs core,

SM> You could add it to subr-x.el (after 24.4),

Wonderful, thanks.  Yamada-san, WDYT?  Do you want to work on the
approach Stefan suggested in the Emacs core and integrate mykie.el with
it, or would you rather keep mykie.el separate from this work?

Shall I name this `define-key-contextual' or something else?

Ted



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-08 15:44           ` mykie.el Ted Zlatanov
@ 2014-01-08 16:11             ` Stefan Monnier
  2014-01-08 16:38               ` mykie.el Ted Zlatanov
  2014-01-09  8:13               ` mykie.el Tassilo Horn
  2014-01-08 21:21             ` mykie.el Yuta Yamada
  1 sibling, 2 replies; 66+ messages in thread
From: Stefan Monnier @ 2014-01-08 16:11 UTC (permalink / raw)
  To: emacs-devel; +Cc: Yuta Yamada

> Shall I name this `define-key-contextual' or something else?

I don't see anything "define-key ish" in there.  It's a macro that lets
you define a *command*.


        Stefan



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-08 16:11             ` mykie.el Stefan Monnier
@ 2014-01-08 16:38               ` Ted Zlatanov
  2014-01-08 17:24                 ` mykie.el Stefan Monnier
  2014-01-09  8:13               ` mykie.el Tassilo Horn
  1 sibling, 1 reply; 66+ messages in thread
From: Ted Zlatanov @ 2014-01-08 16:38 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Yuta Yamada, emacs-devel

On Wed, 08 Jan 2014 11:11:04 -0500 Stefan Monnier <monnier@iro.umontreal.ca> wrote: 

>> Shall I name this `define-key-contextual' or something else?
SM> I don't see anything "define-key ish" in there.  It's a macro that lets
SM> you define a *command*.

Assuming we're not moving to a megalomaniacal[1] `sm-*' prefix for new
additions, what name you you like me to use for this macro?

Ted

[1] not that there's anything wrong with that



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul
  2014-01-08 14:02                     ` Stefan Monnier
@ 2014-01-08 17:19                       ` Glenn Morris
  0 siblings, 0 replies; 66+ messages in thread
From: Glenn Morris @ 2014-01-08 17:19 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Grim Schjetne, Stephen Berman, emacs-devel

Stefan Monnier wrote:

>> Is it even "legal" to distribute any elisp code that is not at least
>> compatible with the GPL?
>
> I think it is indeed "not legal", but I don't think this has been tested
> in court, nor have I even heard any rumor of a lawyer expressing an
> opinion on the issue.

rms has said at least twice (IIRC) that he was asking a lawyer this
question, but I never seen an answer. Eg:

http://lists.gnu.org/archive/html/emacs-devel/2008-04/msg01368.html

(I think there was a more recent repeat than that, but I can't find it
now.)



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-08 16:38               ` mykie.el Ted Zlatanov
@ 2014-01-08 17:24                 ` Stefan Monnier
  0 siblings, 0 replies; 66+ messages in thread
From: Stefan Monnier @ 2014-01-08 17:24 UTC (permalink / raw)
  To: Yuta Yamada; +Cc: emacs-devel

> Assuming we're not moving to a megalomaniacal[1] `sm-*' prefix for new
> additions, what name you you like me to use for this macro?

No idea.  "make-combo-command"?
Sounds pretty poor, but at least it describes somewhat what it does.


        Stefan



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-08 10:50                       ` Nic Ferrier
@ 2014-01-08 17:54                         ` Achim Gratz
  2014-01-09  3:00                           ` Andy Moreton
  2014-01-09  7:55                           ` Tassilo Horn
  0 siblings, 2 replies; 66+ messages in thread
From: Achim Gratz @ 2014-01-08 17:54 UTC (permalink / raw)
  To: emacs-devel

Nic Ferrier writes:
> I said earlier in this thread that I thought recommending a package
> archive other than ELPA was a very bad idea. The licence issue is just
> one reason.

Currently, if multiple package archives offer the same packages, then
the archive offering the highest version number wins (which is always
MELPA, based on how they construct their version numbers).  All other
issues aside, a user would reasonably expect that an installed package
should not switch archives on updates automatically and that it is
possible to specify which archive is considered a valid source (in
general and for specific packages).


Regards,
Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

SD adaptation for Waldorf microQ V2.22R2:
http://Synth.Stromeko.net/Downloads.html#WaldorfSDada




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-08 15:44           ` mykie.el Ted Zlatanov
  2014-01-08 16:11             ` mykie.el Stefan Monnier
@ 2014-01-08 21:21             ` Yuta Yamada
  1 sibling, 0 replies; 66+ messages in thread
From: Yuta Yamada @ 2014-01-08 21:21 UTC (permalink / raw)
  To: emacs-devel; +Cc: tzz, monnier

> > SM> You could add it to subr-x.el (after 24.4),
> 
> > Wonderful, thanks.  Yamada-san, WDYT?  Do you want to work on the
> > approach Stefan suggested in the Emacs core and integrate mykie.el with
> > it, or would you rather keep mykie.el separate from this work?
> 
> 

Oh, I misunderstood meaning.
(Sorry I'm English learner yet.)

That means mykie can in the Emacs core if mykie fixed the cosmetic
problems. right?
If it's yes.
I would like mykie to in the Emacs core.

I already fixed some cosmetic issues at future branch.
done:
 - delete needless quotation
 - treat 't symbol as default function
almost done:
 - delete wrong eval(remaining two eval...)
yet:
 - use parenthesized syntax to lispish
 - mykie:global-set-key -> other name

However current mykie took just different approach to check conditions.
Below function is mykie's core logic.

(defun* mykie (&rest args &allow-other-keys)
  (catch 'done
    ;;    ↓ check wheter ignore major-mode overriding
    (loop initially (when (eq 'exit (mykie:init args)) (return))
          ;; collect user specified keywords
          with keywords = (loop for arg in args if (keywordp arg) collect arg)
          ;; conditions separate three group: region, C-u, otherwise
          for conditions in mykie:group-conditions
          ;; check region-acitive-p or current-prefix-arg if needed
          if (funcall mykie:precheck-function conditions) do
          (loop with conds = (symbol-value conditions)
                for keyword in keywords
                ;; conds is like (:C-u&eolp . (eolp))
                if (and (loop for (expect . c) in conds
                              if (or (eq expect keyword)
                                     ;; irregular case for :MAJOR-MODE
                                     ;; C-u*N, M-N
                                     (and (stringp expect)
                                          (string-match
                                           expect (symbol-name keyword))))
                              do (return t))
                        (mykie:predicate conds keyword))
                do (progn (setq mykie:current-state keyword)
                          ;; do specific command
                          (mykie:execute (plist-get args keyword))
                          (throw 'done 'done)))
          ;; do :default or t's function if function was not found
          finally (mykie:execute (or (plist-get args :default)
                                     (plist-get args t)))))
  ;; for :repeat
  (unless (mykie:repeat-p)
    (setq mykie:current-point (point))))

I like pre check function that can ignore needless conditions.
Is it ok?
There is a merit. User don't need useless (region-active-p) or
current-prefix-arg when user register user's condition.

About remaining cosmetic issues,
 - mykie:global-set-key -> ather name and use combind macro

Above mykie function can call like this
(mykie :default '(message "default") :C-u '(message "C-u"))

I don't have much experience of lisp macro.
So I can't say correctly whether it can implement by lisp macro.
But can we use like this?:

(defmacro sm-combind-command (&rest branches)
  `(lambda ()
     (interactive)
     (apply 'mykie ,branches)))

I tried above macro, but I couldn't use correctly.
Could someone help me?
Or Is it impossible?

yet:
 - use parenthesized syntax to lispish

I prefer without parenthesized syntax.
But if we can use above macro then it's easy to create parenthesized
syntax or not too.

Sorry long sentence.
I want to know current mykie can use at next Emacs core.
Or do I need more change?

Yuta



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-08 17:54                         ` Achim Gratz
@ 2014-01-09  3:00                           ` Andy Moreton
  2014-01-09  6:55                             ` Nic Ferrier
  2014-01-09  7:55                           ` Tassilo Horn
  1 sibling, 1 reply; 66+ messages in thread
From: Andy Moreton @ 2014-01-09  3:00 UTC (permalink / raw)
  To: emacs-devel

On Wed 08 Jan 2014, Achim Gratz wrote:

> Nic Ferrier writes:
>> I said earlier in this thread that I thought recommending a package
>> archive other than ELPA was a very bad idea. The licence issue is just
>> one reason.
>
> Currently, if multiple package archives offer the same packages, then
> the archive offering the highest version number wins (which is always
> MELPA, based on how they construct their version numbers).  All other
> issues aside, a user would reasonably expect that an installed package
> should not switch archives on updates automatically and that it is
> possible to specify which archive is considered a valid source (in
> general and for specific packages).

With multiple independent package archives, packages with the same name
are not necessarily related in any way at all. This means that packages
names should be qualified by the archive they were installed from.

    AndyM




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-09  3:00                           ` Andy Moreton
@ 2014-01-09  6:55                             ` Nic Ferrier
  0 siblings, 0 replies; 66+ messages in thread
From: Nic Ferrier @ 2014-01-09  6:55 UTC (permalink / raw)
  To: Andy Moreton; +Cc: emacs-devel

Andy Moreton <andrewjmoreton@gmail.com> writes:

> On Wed 08 Jan 2014, Achim Gratz wrote:
>
>> Nic Ferrier writes:
>>> I said earlier in this thread that I thought recommending a package
>>> archive other than ELPA was a very bad idea. The licence issue is just
>>> one reason.
>>
>> Currently, if multiple package archives offer the same packages, then
>> the archive offering the highest version number wins (which is always
>> MELPA, based on how they construct their version numbers).  All other
>> issues aside, a user would reasonably expect that an installed package
>> should not switch archives on updates automatically and that it is
>> possible to specify which archive is considered a valid source (in
>> general and for specific packages).
>
> With multiple independent package archives, packages with the same name
> are not necessarily related in any way at all. This means that packages
> names should be qualified by the archive they were installed from.

I don't agree with that. 

With your proposal we would be moving away from the very simple
but effective system we have now into much more complex territory.

As can be seen from package stores like Debian, some people want to
upgrade a package from different stores and some people want to pin.

It's not as easy as just being able to say "let's do it only one way".


But again, we're getting away from the point. The point was should Emacs
distribute a pointer to Marmalade or MELPA.

I reiterate that as the maintainer of Marmalade, I don't think it is.


Nic Ferrier



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-08 17:54                         ` Achim Gratz
  2014-01-09  3:00                           ` Andy Moreton
@ 2014-01-09  7:55                           ` Tassilo Horn
  2014-01-09 11:24                             ` chad
  2014-01-09 18:15                             ` Achim Gratz
  1 sibling, 2 replies; 66+ messages in thread
From: Tassilo Horn @ 2014-01-09  7:55 UTC (permalink / raw)
  To: Achim Gratz; +Cc: emacs-devel

Achim Gratz <Stromeko@nexgo.de> writes:

>> I said earlier in this thread that I thought recommending a package
>> archive other than ELPA was a very bad idea. The licence issue is
>> just one reason.
>
> Currently, if multiple package archives offer the same packages, then
> the archive offering the highest version number wins (which is always
> MELPA, based on how they construct their version numbers).

Is that true?  I have MELPA enabled, and for packages that appear both
in GNU ELPA and MELPA, I get for example

  diff-hl            1.5.1        available  gnu        Highlight uncommitted changes
  diff-hl            20131114.53  available  melpa      Highlight uncommitted changes

so that I can decide to either use the stable release or the bleeding
edge version.

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-08 16:11             ` mykie.el Stefan Monnier
  2014-01-08 16:38               ` mykie.el Ted Zlatanov
@ 2014-01-09  8:13               ` Tassilo Horn
  2014-01-09 15:29                 ` mykie.el Stefan Monnier
  1 sibling, 1 reply; 66+ messages in thread
From: Tassilo Horn @ 2014-01-09  8:13 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Yuta Yamada, emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> Shall I name this `define-key-contextual' or something else?
>
> I don't see anything "define-key ish" in there.  It's a macro that
> lets you define a *command*.

FWIW, I'd much prefer the define-key-like approach you've suggested
earlier this thread (sorry, can't look it up right now), i.e., where you
can add different clauses separately.  Ideally, it would be cool if it
allowed to define the same key in different keymaps and still be working
as expected.  E.g.:

  (define-context-key outline-minor-mode-map (kbd "TAB")
    :predicate outline-heading-p
    :action org-cycle)

  (define-context-key emacs-lisp-mode-map (kbd "TAB")
    :predicate beginning-of-defun-p
    :action eval-defun)

And then in a elisp buffer with outline-minor-mode enabled, if I'm on a
outline heading, it would cycle through the outline states, if I'm at
the beginning of a defun, if would eval it, and if I'm on neither of
those, then it does what TAB would do usually.

I already do have such a macro, but it doesn't allow defining multiple
separate predicate-action combos for the same key.  Falling back to the
"do what TAB would do by default" does work, however.  (Actually, you
helped me implementing it.)

--8<---------------cut here---------------start------------->8---
(defmacro th/define-context-key (keymap key dispatch)
  "Define KEY in KEYMAP to execute according to DISPATCH.

DISPATCH is a form that is evaluated and should return the
command to be executed.

If DISPATCH returns nil, then the command normally bound to KEY
will be executed.

Example:

  (th/define-context-key hs-minor-mode-map
     (kbd \"<C-tab>\")
     (cond
      ((not (hs-already-hidden-p))
       'hs-hide-block)
      ((hs-already-hidden-p)
       'hs-show-block)))

This will make <C-tab> show a hidden block.  If the block is
shown, then it'll be hidden."
  `(define-key ,keymap ,key
     `(menu-item "context-key" ignore
                 :filter ,(lambda (&optional ignored)
                            ,dispatch))))
--8<---------------cut here---------------end--------------->8---

Bye,
Tassilo



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-09  7:55                           ` Tassilo Horn
@ 2014-01-09 11:24                             ` chad
  2014-01-09 18:15                             ` Achim Gratz
  1 sibling, 0 replies; 66+ messages in thread
From: chad @ 2014-01-09 11:24 UTC (permalink / raw)
  To: Tassilo Horn; +Cc: Achim Gratz, Emacs developers


On 08 Jan 2014, at 23:55, Tassilo Horn <tsdh@gnu.org> wrote:

> Achim Gratz <Stromeko@nexgo.de> writes:
> 
>> Currently, if multiple package archives offer the same packages, then
>> the archive offering the highest version number wins (which is always
>> MELPA, based on how they construct their version numbers).
> 
> Is that true?  I have MELPA enabled, and for packages that appear both
> in GNU ELPA and MELPA, I get for example
> 
>  diff-hl            1.5.1        available  gnu        Highlight uncommitted changes
>  diff-hl            20131114.53  available  melpa      Highlight uncommitted changes
> 
> so that I can decide to either use the stable release or the bleeding
> edge version.

I believe that this feature is in HEAD but not yet any release.

Hope that helps,
~Chad




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-09  8:13               ` mykie.el Tassilo Horn
@ 2014-01-09 15:29                 ` Stefan Monnier
  2014-01-09 18:43                   ` mykie.el Yuta Yamada
  2014-01-11 20:23                   ` mykie.el Yuta Yamada
  0 siblings, 2 replies; 66+ messages in thread
From: Stefan Monnier @ 2014-01-09 15:29 UTC (permalink / raw)
  To: emacs-devel; +Cc: Yuta Yamada

> can add different clauses separately.  Ideally, it would be cool if it
> allowed to define the same key in different keymaps and still be working
> as expected.  E.g.:

>   (define-context-key outline-minor-mode-map (kbd "TAB")
>     :predicate outline-heading-p
>     :action org-cycle)

>   (define-context-key emacs-lisp-mode-map (kbd "TAB")
>     :predicate beginning-of-defun-p
>     :action eval-defun)

AFAIK we don't know how to implement it.


        Stefan



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: enable MELPA & Marmalade by defaul  [was: mykie.el]
  2014-01-09  7:55                           ` Tassilo Horn
  2014-01-09 11:24                             ` chad
@ 2014-01-09 18:15                             ` Achim Gratz
  1 sibling, 0 replies; 66+ messages in thread
From: Achim Gratz @ 2014-01-09 18:15 UTC (permalink / raw)
  To: emacs-devel

Tassilo Horn writes:
> Is that true?  I have MELPA enabled, and for packages that appear both
> in GNU ELPA and MELPA, I get for example
>
>   diff-hl            1.5.1        available  gnu        Highlight uncommitted changes
>   diff-hl            20131114.53  available  melpa      Highlight uncommitted changes
>
> so that I can decide to either use the stable release or the bleeding
> edge version.

Yes, but once you have installed the 1.5.1 version, the information
which package archive you installed it from is gone and the next update
from package manager will switch you to melpa because it has a higher
version.  I've just tested it again with an Emacs from trunk a few days
old.


Regards,
Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

Wavetables for the Waldorf Blofeld:
http://Synth.Stromeko.net/Downloads.html#BlofeldUserWavetables




^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-09 15:29                 ` mykie.el Stefan Monnier
@ 2014-01-09 18:43                   ` Yuta Yamada
  2014-01-11 20:23                   ` mykie.el Yuta Yamada
  1 sibling, 0 replies; 66+ messages in thread
From: Yuta Yamada @ 2014-01-09 18:43 UTC (permalink / raw)
  To: emacs-devel; +Cc: Ted Zlatanov, Stefan Monnier, Tassilo Horn

Sorry, I forgot to conform a problem when we define keybind by
anonymous function to [a-z] key of self-insert-command.

rubikitch who contribute mykie.el about this problem pull-requested :
https://github.com/yuutayamada/mykie-el/pull/5

If we define contextual-command by anonymous function, cannot use
Mew.el.
I'm not sure the detail.
But actually I couldn't use old version mykie's keybind related
self-insert-command at Mew.el.
(I heard Mew.el make sure keybind's name from @rubikitch on twitter)

Old version mykie.el registration form is like this:
※ this form can use current version too
(global-set-key "a"
                (lambda ()
                  (interactive)
                  (mykie :default 'self-insert-command
                         :C-u     '(message "C-u"))))

Current version(future branch):

(mykie:define-key-with-self-key "a"
  ;; we don't need self-insert-command
  :C-u     (message "C-u"))

Or

(mykie:global-set-key "a"
  ;; you can specify t instead of :default too
  :default self-insert-command
  :C-u     (message "C-u"))

Or

(mykie:define-key global-map "a"
  :default self-insert-command
  :C-u     (message "C-u"))

Or

Below function is more convenient than others.
This function can register multiple keybinds.

(mykie:set-keys 'with-self-key
  "a" :C-u     (message "C-u of a")
  "b" :C-u     (message "C-u of b"))

You can specify specific keymap instead of 'with-self-key.
If you specified nil then register keybinds to global-map.

(mykie:set-keys emacs-lisp-mode-map

  "C-0"
  :default (message "default of C-0")
  :C-u     (message "C-u of C-0")

  "C-1"
  :default (message "default of C-1")
  :C-u     (message "C-u of C-1")
  ;; you can add more keybinds
  )



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-09 15:29                 ` mykie.el Stefan Monnier
  2014-01-09 18:43                   ` mykie.el Yuta Yamada
@ 2014-01-11 20:23                   ` Yuta Yamada
  2014-01-12 14:45                     ` mykie.el Stefan Monnier
  1 sibling, 1 reply; 66+ messages in thread
From: Yuta Yamada @ 2014-01-11 20:23 UTC (permalink / raw)
  To: emacs-devel; +Cc: Ted Zlatanov, Stefan Monnier

Hi, I asked someone about how to implement `mykie' function by using
macro. But somehow I could implement by myself. Sorry bother you.
And I could add parenthesized syntax too at feature branch.
https://github.com/yuutayamada/mykie-el/tree/feature
(I mistyped branch name, so renamed from future -> feature)

Mykie parenthesized syntax:
;; use * to use parenthesized syntax
(mykie:define-key* global-map "C-j"
   (:default (message "default")
             (message "second line"))
   (:C-u     (message "C-u function")))



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-11 20:23                   ` mykie.el Yuta Yamada
@ 2014-01-12 14:45                     ` Stefan Monnier
  2014-01-12 18:32                       ` mykie.el Yuta Yamada
  0 siblings, 1 reply; 66+ messages in thread
From: Stefan Monnier @ 2014-01-12 14:45 UTC (permalink / raw)
  To: Yuta Yamada; +Cc: Ted Zlatanov, emacs-devel

> (mykie:define-key* global-map "C-j"

Why this instead of

  (define-key global-map "C-j" (mykie


-- Stefan



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-12 14:45                     ` mykie.el Stefan Monnier
@ 2014-01-12 18:32                       ` Yuta Yamada
  2014-01-12 19:46                         ` mykie.el Stefan Monnier
  0 siblings, 1 reply; 66+ messages in thread
From: Yuta Yamada @ 2014-01-12 18:32 UTC (permalink / raw)
  To: monnier; +Cc: tzz, emacs-devel

> > (mykie:define-key* global-map "C-j"

> Why this instead of

>   (define-key global-map "C-j" (mykie

There is a problem.
Mew.el that is Emacs mailer check function name whether the name
contain self-insert-command.(http://www.mew.org/en/)
(I don't know how many program does check global map's function-name.)

If we set keybind to self-insert-command like [a-z],
then Mew occur an error.

To solve this problem, mykie create function name automatically.
But to create function name, use keymap name and key name.

If I create the solving function. setting is like this?

(define-key global-map (kbd "a")
  (mykie:combined-command global-map "a"
    :default self-insert-command
    :C-u     (message "C-u + a")))

User needs extra argument...

Or use `advice' to global-set-key, define-key?
I might can write more simply.

But if nobody care function name, then I could write:

(defmacro mykie:combined-command (&rest args)
  `(lambda ()
     (interactive)
     (mykei:core (quote ,args))))

(global-set-key (kbd "C-0")
   (mykie:combined-command :default (message "foo")))

Using anonymous function or named function, which is recommending?
I think we might create function to lookup the keybind information if
we choose named function.

Yuta



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-12 18:32                       ` mykie.el Yuta Yamada
@ 2014-01-12 19:46                         ` Stefan Monnier
  2014-01-12 22:51                           ` mykie.el Yuta Yamada
  0 siblings, 1 reply; 66+ messages in thread
From: Stefan Monnier @ 2014-01-12 19:46 UTC (permalink / raw)
  To: Yuta Yamada; +Cc: tzz, emacs-devel

>> (define-key global-map "C-j" (mykie
                           ^^^
                           \C-j

Sorry.

> There is a problem.
> Mew.el that is Emacs mailer check function name whether the name
> contain self-insert-command.(http://www.mew.org/en/)
> (I don't know how many program does check global map's function-name.)
> If we set keybind to self-insert-command like [a-z],
> then Mew occur an error.

I don't understand.


        Stefan



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-12 19:46                         ` mykie.el Stefan Monnier
@ 2014-01-12 22:51                           ` Yuta Yamada
  2014-01-13  3:38                             ` mykie.el Stefan Monnier
  0 siblings, 1 reply; 66+ messages in thread
From: Yuta Yamada @ 2014-01-12 22:51 UTC (permalink / raw)
  To: monnier; +Cc: tzz, emacs-devel

> > There is a problem.
> > Mew.el that is Emacs mailer check function name whether the name
> > contain self-insert-command.(http://www.mew.org/en/)
> > (I don't know how many program does check global map's function-name.)
> > If we set keybind to self-insert-command like [a-z],
> > then Mew occur an error.

> I don't understand.

Sorry my information lacked details.

Mew.el can change folder by pushing "g" key at mew-summary-mode.
(Mew binds mew-summary-goto-folder function to the "g" key)
To make sure that problem, I set following configuration:

(define-key global-map
  "a" (lambda () (interactive)
        (call-interactively 'self-insert-command)))

(defmacro mykie:combined-command (&rest args)
  `(lambda ()
     (interactive)
     (mykie:core (quote ,args))))

(define-key global-map
  "b" (mykie:combined-command
       :default self-insert-command
       :C-u     (message "C-u + b")))

And then I typed "g" at mew-summary-mode after I boot mew.
And then when I typed a or b, I saw following error on minibuffer.

-- error message
mew-input-folder-self-insert: Wrong type argument: symbolp, #[nil "ÀÁ!‡" [call-interactively self-insert-command] 2 nil nil]
--

I extracted partial code from mew-minibuf.el, you can see full code
here: https://github.com/kazu-yamamoto/Mew/blob/master/mew-minibuf.el

--- from mew-minibuf.el ---
(defun mew-input-folder-self-insert ()
  "This function normally inserts its bound key to minibuffer.
When in folder search mode, this function searches a candidate
folder and displays it in addition to its bound key."
  (interactive)
  (let ((key (this-command-keys))
        last-str gfunc)
    (cond
     ((stringp key)
      (setq last-str key)
      (setq gfunc (lookup-key (current-global-map) key)))
     ((vectorp key)
      (setq gfunc (lookup-key (current-global-map) key))
      (unless gfunc
        (setq key (lookup-key function-key-map key))
        (cond
         ((vectorp key) ;; normal Emacs
         (setq gfunc (lookup-key (current-global-map) key)))
         ((stringp key) ;; Meadow
         (setq last-str key)
         (setq gfunc (lookup-key (current-global-map) key)))))))
    (if mew-input-folder-search-direction
        (cond
         ((or (equal key "\177") (equal key [127])
         (equal key 'delete) (equal key 'backspace))
         (if (null mew-input-folder-search-key)
         (mew-input-folder-display "not allowed")
         (setq mew-input-folder-search-key
                 (substring mew-input-folder-search-key 0 -1))
         (when (string= mew-input-folder-search-key "")
         (setq mew-input-folder-search-key nil)
         (setq mew-input-folder-search-match nil)
         (with-current-buffer mew-input-folder-search-buf
                (cond
                 ((eq mew-input-folder-search-direction 'forward)
                 (goto-char (point-min)))
                 ((eq mew-input-folder-search-direction 'backward)
                 (goto-char (point-max))))))
         (mew-input-folder-display)))
         ((not (string-match "self-insert-command" (symbol-name gfunc)))
         (mew-input-folder-display "not allowed"))
         ((eq mew-input-folder-search-direction 'forward)
         (setq mew-input-folder-search-key
                (concat mew-input-folder-search-key last-str))
         (mew-input-folder-search-forward-1))
         ((eq mew-input-folder-search-direction 'backward)
         (setq mew-input-folder-search-key
                (concat mew-input-folder-search-key last-str))
         (mew-input-folder-search-backward-1)))
      (cond
       ((null gfunc)
        ())
       ((string-match "self-insert-command" (symbol-name gfunc))
        (insert last-command-event))
       ((and (fboundp gfunc) (commandp gfunc))
        (call-interactively gfunc))))))
--- END ----

I think below part seems problem codes.

---
  ;; gfunc is current global-map's function
  ((not (string-match "self-insert-command" (symbol-name gfunc)))
   (mew-input-folder-display "not allowed"))
---

Yuta

^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-12 22:51                           ` mykie.el Yuta Yamada
@ 2014-01-13  3:38                             ` Stefan Monnier
  2014-01-13  4:59                               ` mykie.el Yuta Yamada
  0 siblings, 1 reply; 66+ messages in thread
From: Stefan Monnier @ 2014-01-13  3:38 UTC (permalink / raw)
  To: Yuta Yamada; +Cc: tzz, emacs-devel

>   ;; gfunc is current global-map's function
>   ((not (string-match "self-insert-command" (symbol-name gfunc)))
>    (mew-input-folder-display "not allowed"))

That's a bug in Mew.  We don't need to worry about it (but do report
it, of course, so the Mew guys can fix it),


        Stefan



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-13  3:38                             ` mykie.el Stefan Monnier
@ 2014-01-13  4:59                               ` Yuta Yamada
  2014-01-13 14:03                                 ` mykie.el Stefan Monnier
  0 siblings, 1 reply; 66+ messages in thread
From: Yuta Yamada @ 2014-01-13  4:59 UTC (permalink / raw)
  To: monnier; +Cc: tzz, emacs-devel

> >   ;; gfunc is current global-map's function
> >   ((not (string-match "self-insert-command" (symbol-name gfunc)))
> >    (mew-input-folder-display "not allowed"))

> That's a bug in Mew.  We don't need to worry about it (but do report
> it, of course, so the Mew guys can fix it),

I see.
That's means Emacs devel or common emacser do not restrict user keybind
of self-insert-command, isn't it?

Anyway I'll report or pull-req to Mew's developer about it.
Thank you for advice!

Yuta



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-13  4:59                               ` mykie.el Yuta Yamada
@ 2014-01-13 14:03                                 ` Stefan Monnier
  2014-01-13 16:09                                   ` mykie.el Yuta Yamada
  0 siblings, 1 reply; 66+ messages in thread
From: Stefan Monnier @ 2014-01-13 14:03 UTC (permalink / raw)
  To: Yuta Yamada; +Cc: tzz, emacs-devel

> That's means Emacs devel or common emacser do not restrict user keybind
> of self-insert-command, isn't it?

This has nothing to do with self-insert-command, really.  Mew assumes
that the key-binding it gets is either nil or a symbol, whereas
a command can also be a byte-code vector, a plain vector, or a list
(representing an interpreted lambda expression).  So Mew's code needs
a `symbolp' test before calling `symbol-name'.


        Stefan



^ permalink raw reply	[flat|nested] 66+ messages in thread

* Re: mykie.el
  2014-01-13 14:03                                 ` mykie.el Stefan Monnier
@ 2014-01-13 16:09                                   ` Yuta Yamada
  0 siblings, 0 replies; 66+ messages in thread
From: Yuta Yamada @ 2014-01-13 16:09 UTC (permalink / raw)
  To: monnier; +Cc: tzz, emacs-devel

> > That's means Emacs devel or common emacser do not restrict user keybind
> > of self-insert-command, isn't it?

> This has nothing to do with self-insert-command, really.  Mew assumes
> that the key-binding it gets is either nil or a symbol, whereas
> a command can also be a byte-code vector, a plain vector, or a list
> (representing an interpreted lambda expression).  So Mew's code needs
> a `symbolp' test before calling `symbol-name'.

Sorry, I misunderstood.
(And I pull-requested fixed commit to Mew)

Yuta



^ permalink raw reply	[flat|nested] 66+ messages in thread

end of thread, other threads:[~2014-01-13 16:09 UTC | newest]

Thread overview: 66+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-03 20:09 mykie.el Ted Zlatanov
2014-01-03 21:37 ` mykie.el Bozhidar Batsov
2014-01-04  1:08   ` mykie.el Yuta Yamada
2014-01-06 22:47     ` mykie.el, mykie.el Ted Zlatanov
2014-01-06 23:00       ` enable MELPA & Marmalade by defaul [was: mykie.el] Drew Adams
2014-01-06 23:42         ` Óscar Fuentes
2014-01-07  0:29           ` Drew Adams
2014-01-07  1:08             ` Eric Brown
2014-01-07  5:39               ` Drew Adams
2014-01-07  8:33                 ` Nic Ferrier
2014-01-07  8:38                 ` David Kastrup
2014-01-07 14:41                 ` Grim Schjetne
2014-01-07 15:12                   ` Stephen Berman
2014-01-07 17:44                     ` Drew Adams
2014-01-07 20:55                       ` Stephen Berman
2014-01-08 11:52                         ` Tassilo Horn
2014-01-08 13:19                           ` David Kastrup
2014-01-08 14:02                     ` Stefan Monnier
2014-01-08 17:19                       ` enable MELPA & Marmalade by defaul Glenn Morris
2014-01-07 17:44                   ` enable MELPA & Marmalade by defaul [was: mykie.el] Drew Adams
2014-01-08  3:41                     ` Richard Stallman
2014-01-08  4:26                       ` Bob Bobeck
2014-01-08 10:50                       ` Nic Ferrier
2014-01-08 17:54                         ` Achim Gratz
2014-01-09  3:00                           ` Andy Moreton
2014-01-09  6:55                             ` Nic Ferrier
2014-01-09  7:55                           ` Tassilo Horn
2014-01-09 11:24                             ` chad
2014-01-09 18:15                             ` Achim Gratz
2014-01-08  3:23                   ` Stephen J. Turnbull
2014-01-08 10:32                     ` David Kastrup
2014-01-07 16:53             ` Richard Stallman
2014-01-08  3:15               ` Stephen J. Turnbull
2014-01-08  9:27                 ` Richard Stallman
     [not found]           ` <<a62bb795-44d9-44dd-b17a-d5294c21d2b0@default>
     [not found]             ` <<E1W0Zto-0000A5-VX@fencepost.gnu.org>
2014-01-07 17:44               ` Drew Adams
2014-01-07 16:16         ` Ted Zlatanov
2014-01-07 17:44           ` Drew Adams
2014-01-08  3:41             ` Richard Stallman
2014-01-04  2:02   ` mykie.el Yuta Yamada
2014-01-04  4:34 ` mykie.el Stefan Monnier
2014-01-04  8:36   ` mykie.el Leo Liu
2014-01-05  8:10   ` mykie.el Mitchel Humpherys
2014-01-05 10:29     ` mykie.el Leo Liu
2014-01-06 16:09   ` mykie.el Nicolas Richard
2014-01-06 22:38   ` mykie.el Ted Zlatanov
2014-01-07  0:37     ` mykie.el Stefan Monnier
2014-01-07 23:21       ` mykie.el Ted Zlatanov
2014-01-08  3:24         ` mykie.el Stefan Monnier
2014-01-08 15:44           ` mykie.el Ted Zlatanov
2014-01-08 16:11             ` mykie.el Stefan Monnier
2014-01-08 16:38               ` mykie.el Ted Zlatanov
2014-01-08 17:24                 ` mykie.el Stefan Monnier
2014-01-09  8:13               ` mykie.el Tassilo Horn
2014-01-09 15:29                 ` mykie.el Stefan Monnier
2014-01-09 18:43                   ` mykie.el Yuta Yamada
2014-01-11 20:23                   ` mykie.el Yuta Yamada
2014-01-12 14:45                     ` mykie.el Stefan Monnier
2014-01-12 18:32                       ` mykie.el Yuta Yamada
2014-01-12 19:46                         ` mykie.el Stefan Monnier
2014-01-12 22:51                           ` mykie.el Yuta Yamada
2014-01-13  3:38                             ` mykie.el Stefan Monnier
2014-01-13  4:59                               ` mykie.el Yuta Yamada
2014-01-13 14:03                                 ` mykie.el Stefan Monnier
2014-01-13 16:09                                   ` mykie.el Yuta Yamada
2014-01-08 21:21             ` mykie.el Yuta Yamada
2014-01-06  5:31 ` mykie.el Yuta Yamada

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).