unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: smartquotes.el -- Insertion of unicode quotes in text documents
       [not found] <1b151690708252221j7177cea1xe8916c52a1110190@mail.gmail.com>
@ 2007-08-26 22:47 ` Richard Stallman
  2007-08-27  4:46   ` Martin Blais
  2007-08-27  5:08   ` David Kastrup
  0 siblings, 2 replies; 12+ messages in thread
From: Richard Stallman @ 2007-08-26 22:47 UTC (permalink / raw)
  To: Martin Blais, handa; +Cc: emacs-devel

    ;; - C-" inserts then cycles through the fancier double quotes;

    ;; - C-' inserts then cycles through the fancier single quotes;

    ;; - Inserting four dots inserts an ellipsis character. Inserting an additional
    ;;   fourth dot resumes with a string of dots;

    ;; - Inserting four hyphens inserts an mdash (a long dash character), then an
    ;;   ndash (an inter-word dash character), and then resumes with a string of
    ;;   normal hyphens.

I can see why it is useful, but we already have a similar facility:
Quail.  What about using Quail for this?

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

* Re: smartquotes.el -- Insertion of unicode quotes in text documents
  2007-08-26 22:47 ` smartquotes.el -- Insertion of unicode quotes in text documents Richard Stallman
@ 2007-08-27  4:46   ` Martin Blais
       [not found]     ` <E1IPj9g-0003Zm-8v@fencepost.gnu.org>
  2007-08-27  5:08   ` David Kastrup
  1 sibling, 1 reply; 12+ messages in thread
From: Martin Blais @ 2007-08-27  4:46 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel, handa

On 8/26/07, Richard Stallman <rms@gnu.org> wrote:
>     ;; - C-" inserts then cycles through the fancier double quotes;
>
>     ;; - C-' inserts then cycles through the fancier single quotes;
>
>     ;; - Inserting four dots inserts an ellipsis character. Inserting an additional
>     ;;   fourth dot resumes with a string of dots;
>
>     ;; - Inserting four hyphens inserts an mdash (a long dash character), then an
>     ;;   ndash (an inter-word dash character), and then resumes with a string of
>     ;;   normal hyphens.
>
> I can see why it is useful, but we already have a similar facility:
> Quail.  What about using Quail for this?

Hi Richard

I fail to see how Quail can be used to do what smartquotes.el does.

1. I need special bindings for the fancy quotes and double quotes
2. I'm modifying the meanings of . and - (I don't know how to do this
with Quail)

Sometimes it takes less effort to write something simple for yourself
than to learn something more complex. In this case, I simply did not
remember or know Quail enough to check it out first (I will).

Bisous,



PS I still did not find time to clean up rst.el to send you the final
version for inclusion...  it's still on my list.

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

* Re: smartquotes.el -- Insertion of unicode quotes in text documents
  2007-08-26 22:47 ` smartquotes.el -- Insertion of unicode quotes in text documents Richard Stallman
  2007-08-27  4:46   ` Martin Blais
@ 2007-08-27  5:08   ` David Kastrup
  2007-08-27 21:16     ` Composition of Quail IMs (was: smartquotes.el -- Insertion of unicode quotes in text documents) Stefan Monnier
  1 sibling, 1 reply; 12+ messages in thread
From: David Kastrup @ 2007-08-27  5:08 UTC (permalink / raw)
  To: rms; +Cc: Martin Blais, emacs-devel, handa

Richard Stallman <rms@gnu.org> writes:

>     ;; - C-" inserts then cycles through the fancier double quotes;
>
>     ;; - C-' inserts then cycles through the fancier single quotes;
>
>     ;; - Inserting four dots inserts an ellipsis character. Inserting an additional
>     ;;   fourth dot resumes with a string of dots;
>
>     ;; - Inserting four hyphens inserts an mdash (a long dash character), then an
>     ;;   ndash (an inter-word dash character), and then resumes with a string of
>     ;;   normal hyphens.
>
> I can see why it is useful, but we already have a similar facility:
> Quail.  What about using Quail for this?

Can Quail support multiple input methods at once?  Because it would be
inconvenient to be able to use such a feature only when no other input
method is used.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

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

* Re: smartquotes.el -- Insertion of unicode quotes in text documents
       [not found]     ` <E1IPj9g-0003Zm-8v@fencepost.gnu.org>
@ 2007-08-27 18:53       ` David Kastrup
       [not found]         ` <E1IQ3Hl-0008FI-LE@fencepost.gnu.org>
  0 siblings, 1 reply; 12+ messages in thread
From: David Kastrup @ 2007-08-27 18:53 UTC (permalink / raw)
  To: rms; +Cc: Martin Blais, handa, emacs-devel

Richard Stallman <rms@gnu.org> writes:

>     I fail to see how Quail can be used to do what smartquotes.el does.
>
> It ought to be able to translate sequences of periods and hyphens
> into other text.  And it could have another similar mechanism for
> entering the various kinds of quotations.
>
> I am not saying I am sure this is better than your approach.  But it
> has the advantage of being more coherent with the rest of Emacs,
> i.e., not being another ad hoc feature.  We should not adopt the ad
> hoc approach without giving this one a try too.

I think this might need a way to have several Quail methods active at
once.  I have considered using Quail for some things in AUCTeX, but
not being able to use other input methods at the same time is a
showstopper.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

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

* Composition of Quail IMs (was: smartquotes.el -- Insertion of unicode quotes in text documents)
  2007-08-27  5:08   ` David Kastrup
@ 2007-08-27 21:16     ` Stefan Monnier
  0 siblings, 0 replies; 12+ messages in thread
From: Stefan Monnier @ 2007-08-27 21:16 UTC (permalink / raw)
  To: David Kastrup; +Cc: Martin Blais, handa, rms, emacs-devel

>> I can see why it is useful, but we already have a similar facility:
>> Quail.  What about using Quail for this?

> Can Quail support multiple input methods at once?  Because it would be
> inconvenient to be able to use such a feature only when no other input
> method is used.

Indeed, it currently cannot.  And it's a good reason not to use quail for
this package.  The problem showed up a few years ago already (probably when
discussing something around C-x 8 which should really be a combination of
quail's latin-1postfix and latin-1-prefix, shifted to the C-x 8 prefix) and
I wrote a naive proof of concept:

   (defun quail-merge-maps (map1 &rest maps)
     (if (null maps) map1
       (let* ((map2 (pop maps))
              (h1 (pop map1))
              (h2 (pop map2)))
         (apply 'quail-merge-maps
                (cons
                 (if (and h1 h2)
                     (vconcat (if (vectorp h1) h1 (vector h1))
                              (if (vectorp h2) h2 (vector h2)))
                   (or h1 h2))
                 (let ((tail nil) conflict)
                   (dolist (entry map1)
                     (setq conflict (assq (car entry) map2))
                     (push (if (not conflict) entry
                             (setq map2 (delq conflict map2))
                             (cons (car entry)
                                   (quail-merge-maps (cdr entry) (cdr conflict))))
                           tail))
                   (append map2 tail)))
                maps))))

but I don't know and understand enough of Quail's facilities to be able to
make this work reliably even for complex input methods.

I think compositionality of Quail input methods would be a great
improvement, but I don't think I'm up to doing it,


        Stefan

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

* Re: smartquotes.el -- Insertion of unicode quotes in text documents
       [not found]         ` <E1IQ3Hl-0008FI-LE@fencepost.gnu.org>
@ 2007-08-30  8:12           ` Kenichi Handa
  2007-08-30  8:29             ` David Kastrup
  2007-08-31  7:35             ` Richard Stallman
  0 siblings, 2 replies; 12+ messages in thread
From: Kenichi Handa @ 2007-08-30  8:12 UTC (permalink / raw)
  To: rms; +Cc: blais, emacs-devel

In article <E1IQ3Hl-0008FI-LE@fencepost.gnu.org>, Richard Stallman <rms@gnu.org> writes:

>     I think this might need a way to have several Quail methods active at
>     once.

> You may be right.  Handa-san, can you implement that easily?

Activating multiple input methods itself won't be that
difficult, but there are many subtle matters to be solved.

What kind of user interface should be provided for
activating and deactivating multiple input methods?
What to do for C-h C-\?
What to show in the modeline?
etc.

I need more time to consider it.

By the way, merging multiple quail maps is the different
thing, and is very difficult considering the current
stracture of a quail map.

---
Kenichi Handa
handa@m17n.org

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

* Re: smartquotes.el -- Insertion of unicode quotes in text documents
  2007-08-30  8:12           ` Kenichi Handa
@ 2007-08-30  8:29             ` David Kastrup
  2007-08-30 11:46               ` Kenichi Handa
  2007-08-31  7:35             ` Richard Stallman
  1 sibling, 1 reply; 12+ messages in thread
From: David Kastrup @ 2007-08-30  8:29 UTC (permalink / raw)
  To: Kenichi Handa; +Cc: blais, rms, emacs-devel

Kenichi Handa <handa@m17n.org> writes:

> In article <E1IQ3Hl-0008FI-LE@fencepost.gnu.org>, Richard Stallman <rms@gnu.org> writes:
>
>>     I think this might need a way to have several Quail methods active at
>>     once.
>
>> You may be right.  Handa-san, can you implement that easily?
>
> Activating multiple input methods itself won't be that
> difficult, but there are many subtle matters to be solved.
>
> What kind of user interface should be provided for
> activating and deactivating multiple input methods?
> What to do for C-h C-\?
> What to show in the modeline?
> etc.

I think that we should distinguish between user-visible
language-related input methods, and the quail mechanism being
available to minor modes internally.

The relation is similar between major and minor buffer modes: while
you usually don't have more than one major mode active, minor modes
are on _top_ of that, and often multiple such modes make sense.

-- 
David Kastrup

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

* Re: smartquotes.el -- Insertion of unicode quotes in text documents
  2007-08-30  8:29             ` David Kastrup
@ 2007-08-30 11:46               ` Kenichi Handa
  2007-08-30 12:32                 ` David Kastrup
  2007-08-31  7:36                 ` Richard Stallman
  0 siblings, 2 replies; 12+ messages in thread
From: Kenichi Handa @ 2007-08-30 11:46 UTC (permalink / raw)
  To: David Kastrup; +Cc: blais, rms, emacs-devel

In article <86abs9juh5.fsf@lola.quinscape.zz>, David Kastrup <dak@gnu.org> writes:

> Kenichi Handa <handa@m17n.org> writes:
> > In article <E1IQ3Hl-0008FI-LE@fencepost.gnu.org>, Richard Stallman <rms@gnu.org> writes:
> >
>>> I think this might need a way to have several Quail methods active at
once.
> >
>>> You may be right.  Handa-san, can you implement that easily?
> >
> > Activating multiple input methods itself won't be that
> > difficult, but there are many subtle matters to be solved.
> >
> > What kind of user interface should be provided for
> > activating and deactivating multiple input methods?
> > What to do for C-h C-\?
> > What to show in the modeline?
> > etc.

> I think that we should distinguish between user-visible
> language-related input methods, and the quail mechanism being
> available to minor modes internally.

> The relation is similar between major and minor buffer modes: while
> you usually don't have more than one major mode active, minor modes
> are on _top_ of that, and often multiple such modes make sense.

I'm not sure it is good to associate input methods with a
minor mode.  We may have to have stacked input methods, and
turn on and off them at once.

---
Kenichi Handa
handa@m17n.org

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

* Re: smartquotes.el -- Insertion of unicode quotes in text documents
  2007-08-30 11:46               ` Kenichi Handa
@ 2007-08-30 12:32                 ` David Kastrup
  2007-08-31  7:36                 ` Richard Stallman
  1 sibling, 0 replies; 12+ messages in thread
From: David Kastrup @ 2007-08-30 12:32 UTC (permalink / raw)
  To: Kenichi Handa; +Cc: blais, rms, emacs-devel

Kenichi Handa <handa@m17n.org> writes:

> In article <86abs9juh5.fsf@lola.quinscape.zz>, David Kastrup <dak@gnu.org> writes:
>
>> I think that we should distinguish between user-visible
>> language-related input methods, and the quail mechanism being
>> available to minor modes internally.
>
>> The relation is similar between major and minor buffer modes: while
>> you usually don't have more than one major mode active, minor modes
>> are on _top_ of that, and often multiple such modes make sense.
>
> I'm not sure it is good to associate input methods with a
> minor mode.  We may have to have stacked input methods, and
> turn on and off them at once.

AUCTeX has something like LaTeX-math-mode (a proper minor mode) which
offers shortcuts for inputting math macros.  It also has some magic
surrounding various dash and quote combinations depending on Babel
package options (those don't form or warrant minor modes).

Having those work in read-string calls with INHERIT-INPUT-METHOD set
would be quite less surprising to the user.

-- 
David Kastrup

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

* Re: smartquotes.el -- Insertion of unicode quotes in text documents
  2007-08-30  8:12           ` Kenichi Handa
  2007-08-30  8:29             ` David Kastrup
@ 2007-08-31  7:35             ` Richard Stallman
  2007-09-04  6:48               ` Kenichi Handa
  1 sibling, 1 reply; 12+ messages in thread
From: Richard Stallman @ 2007-08-31  7:35 UTC (permalink / raw)
  To: Kenichi Handa; +Cc: blais, emacs-devel

    What kind of user interface should be provided for
    activating and deactivating multiple input methods?

Here's one idea: the user enables and disables one input method,
directly, and the others are enabled or disabled by a Lisp interface.
That Lisp interface can be called by other commands.

Does this solve that one problem?

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

* Re: smartquotes.el -- Insertion of unicode quotes in text documents
  2007-08-30 11:46               ` Kenichi Handa
  2007-08-30 12:32                 ` David Kastrup
@ 2007-08-31  7:36                 ` Richard Stallman
  1 sibling, 0 replies; 12+ messages in thread
From: Richard Stallman @ 2007-08-31  7:36 UTC (permalink / raw)
  To: Kenichi Handa; +Cc: blais, emacs-devel

    I'm not sure it is good to associate input methods with a
    minor mode.  We may have to have stacked input methods, and
    turn on and off them at once.

That stack limitation would not be a good thing, and I am sure
it is possible to avoid it.

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

* Re: smartquotes.el -- Insertion of unicode quotes in text documents
  2007-08-31  7:35             ` Richard Stallman
@ 2007-09-04  6:48               ` Kenichi Handa
  0 siblings, 0 replies; 12+ messages in thread
From: Kenichi Handa @ 2007-09-04  6:48 UTC (permalink / raw)
  To: rms; +Cc: blais, emacs-devel

In article <E1IR12U-0000a1-Fv@fencepost.gnu.org>, Richard Stallman <rms@gnu.org> writes:

>     What kind of user interface should be provided for
>     activating and deactivating multiple input methods?

> Here's one idea: the user enables and disables one input method,
> directly, and the others are enabled or disabled by a Lisp interface.
> That Lisp interface can be called by other commands.

> Does this solve that one problem?

Yes.  I implemented it as an add-on code (with a little bit
tricky way).  Once it is found that it works well, I'll
merge the code into mule-cmds.el while cleaning the code.

Please try the attached code with the latest
emacs-unicode-2.  The Lisp interfaces are the functions
activate-preposition-input-method and
inactivate-preposition-input-method.

---
Kenichi Handa
handa@m17n.org

(defvar local-input-method-list nil
  "List of local preposition input methods.")
(make-variable-buffer-local 'local-input-method-list)
(defvar global-input-method-list nil
  "List of global preposition input methods.")
(defvar normal-input-method nil
  "Currently active normal (i.e. non-preposion) input method.")

(defun multi-input-method-function (event)
  "Input method function used while some preposition input method is active."
  (let ((disable-input-method-hook t)
	unread-command-events)
    (dolist (elt (append global-input-method-list
			 local-input-method-list))
      (let (input-method-history default-input-method)
	(activate-input-method elt)
	(setq unread-command-events
	      (nreverse (funcall input-method-function event)))
	(setq event (car unread-command-events)
	      unread-command-events (cdr unread-command-events))))
    (let (input-method-history)
      (inactivate-input-method))
    (setq current-input-method nil
	  current-input-method-title nil)
    (unwind-protect
	(if normal-input-method
	    (progn
	      (activate-input-method normal-input-method)
	      (append (funcall input-method-function event)
		      unread-command-events))
	  (cons event unread-command-events))
      (setq input-method-function 'multi-input-method-function))))

;; If non-nil, disable input-method-hook.
(defvar disable-input-method-hook nil)

;; A function for input-method-active-hook used while some preposition
;; input method is active.
(defun input-method-activate-hook ()
  (unless disable-input-method-hook
    (setq normal-input-method current-input-method)
    (if (or local-input-method-list global-input-method-list)
	(setq input-method-function 'multi-input-method-function))))
	      
;; A function for input-method-inactivate-hook used while some
;; preposition input method is active.
(defun input-method-inactivate-hook ()
  (unless disable-input-method-hook
    (setq normal-input-method nil)
    (if (or local-input-method-list global-input-method-list)
	(setq input-method-function 'multi-input-method-function))))

(defun activate-preposition-input-method (input-method global)
  "Activate a preposition INPUT-METHOD.
INPUT-METHOD is handled before a normal input method.
If the second arg GLOBAL is non-nil, activate it for all buffers.
Otherwise, activate it only for the current buffer."
  (if (and input-method (symbolp input-method))
      (setq input-method (symbol-name input-method)))
  (or (assoc input-method input-method-alist)
      (error "Unknown input method: %s" input-method))
  (unless (assoc-string input-method 
			(if global global-input-method-list
			  local-input-method-list))
    (or global-input-method-list
	local-input-method-list
	(progn
	  (add-hook 'input-method-activate-hook
		    'input-method-activate-hook)
	  (add-hook 'input-method-inactivate-hook
		    'input-method-inactivate-hook)))
    (setq normal-input-method current-input-method)
    (if global
	(progn
	  (push input-method global-input-method-list)
	  (setq-default input-method-function 'multi-input-method-function))
      (push input-method local-input-method-list))
    (make-local-variable 'input-method-function)
    (setq input-method-function 'multi-input-method-function)))

(defun inactivate-preposition-input-method (input-method global)
  "Inactivate a proposition INPUT-METHOD.
If the second arg GLOBAL is non-nil, inactivate it for all buffers.
Otherwise, inactivate it only for the curren buffer."
  (if (and input-method (symbolp input-method))
      (setq input-method (symbol-name input-method)))
  (if global
      (setq global-input-method-list
	    (delete input-method global-input-method-list))
    (setq local-input-method-list
	  (delete input-method local-input-method-list)))
  (or global-input-method-list
      local-input-method-list
      (progn
	(remove-hook 'input-method-activate-hook
		     'input-method-activate-hook)
	(remove-hook 'input-method-inactivate-hook
		     'input-method-inactivate-hook)
	(setq input-method-function nil)
	(when normal-input-method
	  (inactivate-input-method)
	  (activate-input-method normal-input-method)))))

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

end of thread, other threads:[~2007-09-04  6:48 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1b151690708252221j7177cea1xe8916c52a1110190@mail.gmail.com>
2007-08-26 22:47 ` smartquotes.el -- Insertion of unicode quotes in text documents Richard Stallman
2007-08-27  4:46   ` Martin Blais
     [not found]     ` <E1IPj9g-0003Zm-8v@fencepost.gnu.org>
2007-08-27 18:53       ` David Kastrup
     [not found]         ` <E1IQ3Hl-0008FI-LE@fencepost.gnu.org>
2007-08-30  8:12           ` Kenichi Handa
2007-08-30  8:29             ` David Kastrup
2007-08-30 11:46               ` Kenichi Handa
2007-08-30 12:32                 ` David Kastrup
2007-08-31  7:36                 ` Richard Stallman
2007-08-31  7:35             ` Richard Stallman
2007-09-04  6:48               ` Kenichi Handa
2007-08-27  5:08   ` David Kastrup
2007-08-27 21:16     ` Composition of Quail IMs (was: smartquotes.el -- Insertion of unicode quotes in text documents) Stefan Monnier

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).