* X11 umlaut pasting
@ 2002-08-25 14:34 Daniel Pfeiffer
2002-08-25 15:54 ` Eli Zaretskii
2002-08-26 7:05 ` Kenichi Handa
0 siblings, 2 replies; 5+ messages in thread
From: Daniel Pfeiffer @ 2002-08-25 14:34 UTC (permalink / raw
In GNU Emacs 21.1.1 (i686-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
of 2002-02-21 on pfdabpc
Important settings:
value of $LC_ALL: nil
value of $LC_COLLATE: POSIX
value of $LC_CTYPE: nil
value of $LC_MESSAGES: nil
value of $LC_MONETARY: nil
value of $LC_NUMERIC: nil
value of $LC_TIME: nil
value of $LANG: de_DE@euro
locale-coding-system: iso-latin-9
default-enable-multibyte-characters: t
I opened a file containing only ascii (modeline --:--) and started writing a text in german with umlauts (ä, ö, ü, ß) and pasted the text with the mouse to sylpheed (a Gtk+ 1 app). All umlauts disappeared. To my amazement the portuguese word abraço got pasted without a hitch!
When pasting the same text to an Opera (a Qt 2 app) textarea, everything works fine. If I then mark and paste it from there to sylpheed it also works.
I must admit I don't understand codesets and languages (also how to type unicode) in emacs. Maybe part of the problem is the lack of a good tutorial on this mysterious but very important topic!
best regards
Daniel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: X11 umlaut pasting
2002-08-25 14:34 X11 umlaut pasting Daniel Pfeiffer
@ 2002-08-25 15:54 ` Eli Zaretskii
2002-08-26 7:05 ` Kenichi Handa
1 sibling, 0 replies; 5+ messages in thread
From: Eli Zaretskii @ 2002-08-25 15:54 UTC (permalink / raw
Cc: bug-gnu-emacs
> From: Daniel Pfeiffer <occitan@esperanto.org>
> Date: Sun, 25 Aug 2002 16:34:39 +0200
>
> When pasting the same text to an Opera (a Qt 2 app) textarea, everything works fine. If I then mark and paste it from there to sylpheed it also works.
Does it help to say "C-x RET x latin-1 RET" before pasting the text
from Emacs into the other apps?
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: X11 umlaut pasting
2002-08-25 14:34 X11 umlaut pasting Daniel Pfeiffer
2002-08-25 15:54 ` Eli Zaretskii
@ 2002-08-26 7:05 ` Kenichi Handa
2002-08-26 18:41 ` Daniel Pfeiffer
1 sibling, 1 reply; 5+ messages in thread
From: Kenichi Handa @ 2002-08-26 7:05 UTC (permalink / raw
Cc: bug-gnu-emacs
In article <20020825163439.7575ec4d.occitan@esperanto.org>, Daniel Pfeiffer <occitan@esperanto.org> writes:
> In GNU Emacs 21.1.1 (i686-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
> of 2002-02-21 on pfdabpc
[...]
> I opened a file containing only ascii (modeline --:--) and
> started writing a text in german with umlauts (ä, ö, ü, ß)
> and pasted the text with the mouse to sylpheed (a Gtk+ 11
> app). All umlauts disappeared. To my amazement the
> portuguese word abraço got pasted without a hitch!
We recently fixed some cut&paste problem on XFree86 4.?.
Could you please try the latest CVS code?
---
Ken'ichi HANDA
handa@etl.go.jp
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: X11 umlaut pasting
2002-08-26 7:05 ` Kenichi Handa
@ 2002-08-26 18:41 ` Daniel Pfeiffer
2002-08-27 1:34 ` Kenichi Handa
0 siblings, 1 reply; 5+ messages in thread
From: Daniel Pfeiffer @ 2002-08-26 18:41 UTC (permalink / raw
Cc: bug-gnu-emacs
"Eli Zaretskii" <eliz@is.elta.co.il> skribis:
> > From: Daniel Pfeiffer <occitan@esperanto.org>
> > Date: Sun, 25 Aug 2002 16:34:39 +0200
> > When pasting the same text to an Opera (a Qt 2 app) textarea,
> > everything works fine. If I then mark and paste it from there to
> > sylpheed it also works.
> Does it help to say "C-x RET x latin-1 RET" before pasting the text
> from Emacs into the other apps?
(I had to figure that one out with emacs -q since I have a different C-x RET.) Yes and no. It inverted the problem, german umlauts work fine, ç no longer does.
Kenichi Handa <handa@etl.go.jp> skribis:
> In article <20020825163439.7575ec4d.occitan@esperanto.org>, Daniel
> Pfeiffer <occitan@esperanto.org> writes:
> > I opened a file containing only ascii (modeline --:--) and
> > started writing a text in german with umlauts (ä, ö, ü, ß)
> > and pasted the text with the mouse to sylpheed (a Gtk+ 11
> > app). All umlauts disappeared. To my amazement the
> > portuguese word abraço got pasted without a hitch!
> We recently fixed some cut&paste problem on XFree86 4.?.
> Could you please try the latest CVS code?
Sorry, I appreciate the great work on XFree, but this one is too big for me. Glad you fix things, though!
coralament / best Grötens / liebe Grüße / best regards / elkorajn salutojn
Daniel Pfeiffer
--
-- SEX sells! See the XXX rated sawfish page ;-)
--
-- http://dapfy.bei.t-online.de/sawfish/sexyfish/
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: X11 umlaut pasting
2002-08-26 18:41 ` Daniel Pfeiffer
@ 2002-08-27 1:34 ` Kenichi Handa
0 siblings, 0 replies; 5+ messages in thread
From: Kenichi Handa @ 2002-08-27 1:34 UTC (permalink / raw
Cc: eliz, bug-gnu-emacs
In article <20020826204159.46a58c57.occitan@esperanto.org>, Daniel Pfeiffer <occitan@esperanto.org> writes:
>> > I opened a file containing only ascii (modeline --:--) and
>> > started writing a text in german with umlauts (ä, ö, ü, ß)
>> > and pasted the text with the mouse to sylpheed (a Gtk+ 11
>> > app). All umlauts disappeared. To my amazement the
>> > portuguese word abraço got pasted without a hitch!
>> We recently fixed some cut&paste problem on XFree86 4.?.
>> Could you please try the latest CVS code?
> Sorry, I appreciate the great work on XFree, but this one
> is too big for me. Glad you fix things, though!
As I'm not native English, I may be misunderstanding, but...
We don't fix any code of XFree86. We just fix Emacs to work
better on XFree86. So, what you need is it to use the
latest Emacs, not the latest XFree86.
If you really mean that downloading Emacs is too big, the
attached are the patches to lisp/select.el, src/xselect.c,
src/xterm.c, src/xterm.h.
---
Ken'ichi HANDA
handa@etl.go.jp
Index: select.el
===================================================================
RCS file: /cvs/emacs/lisp/select.el,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -c -r1.17 -r1.18
cvs server: conflicting specifications of output style
*** select.el 5 Jun 2002 17:14:16 -0000 1.17
--- select.el 14 Aug 2002 00:57:55 -0000 1.18
***************
*** 133,161 ****
;;; for TIMESTAMP, which is a special case.
(defun xselect-convert-to-string (selection type value)
! (cond ((stringp value)
! ;; Return the type as well, so that xselect.c could honor
! ;; requests whose type is STRING.
! (cons type value))
! ((overlayp value)
! (save-excursion
! (or (buffer-name (overlay-buffer value))
! (error "selection is in a killed buffer"))
! (set-buffer (overlay-buffer value))
! (buffer-substring (overlay-start value)
! (overlay-end value))))
! ((and (consp value)
! (markerp (car value))
! (markerp (cdr value)))
! (or (eq (marker-buffer (car value)) (marker-buffer (cdr value)))
! (signal 'error
! (list "markers must be in the same buffer"
! (car value) (cdr value))))
! (save-excursion
! (set-buffer (or (marker-buffer (car value))
! (error "selection is in a killed buffer")))
! (buffer-substring (car value) (cdr value))))
! (t nil)))
(defun xselect-convert-to-length (selection type value)
(let ((value
--- 133,216 ----
;;; for TIMESTAMP, which is a special case.
(defun xselect-convert-to-string (selection type value)
! (let (str coding)
! ;; Get the actual string from VALUE.
! (cond ((stringp value)
! (setq str value))
!
! ((overlayp value)
! (save-excursion
! (or (buffer-name (overlay-buffer value))
! (error "selection is in a killed buffer"))
! (set-buffer (overlay-buffer value))
! (setq str (buffer-substring (overlay-start value)
! (overlay-end value)))))
! ((and (consp value)
! (markerp (car value))
! (markerp (cdr value)))
! (or (eq (marker-buffer (car value)) (marker-buffer (cdr value)))
! (signal 'error
! (list "markers must be in the same buffer"
! (car value) (cdr value))))
! (save-excursion
! (set-buffer (or (marker-buffer (car value))
! (error "selection is in a killed buffer")))
! (setq str (buffer-substring (car value) (cdr value))))))
!
! (when str
! ;; If TYPE is nil, this is a local request, thus return STR as
! ;; is. Otherwise, encode STR.
! (if (not type)
! str
! (setq coding (or next-selection-coding-system selection-coding-system))
! (if coding
! (setq coding (coding-system-base coding))
! (setq coding 'raw-text))
! ;; Suppress producing escape sequences for compositions.
! (remove-text-properties 0 (length str) '(composition nil) str)
! (cond
! ((eq type 'TEXT)
! (if (not (multibyte-string-p str))
! ;; Don't have to encode unibyte string.
! (setq type 'STRING)
! ;; If STR contains only ASCII, Latin-1, and raw bytes,
! ;; encode STR by iso-latin-1, and return it as type
! ;; `STRING'. Otherwise, encode STR by CODING. In that
! ;; case, the returing type depends on CODING.
! (let ((charsets (find-charset-string str)))
! (setq charsets
! (delq 'ascii
! (delq 'latin-iso8859-1
! (delq 'eight-bit-control
! (delq 'eight-bit-graphic charsets)))))
! (if charsets
! (setq str (encode-coding-string str coding)
! type (if (memq coding '(compound-text
! compound-text-with-extensions))
! 'COMPOUND_TEXT
! 'STRING))
! (setq type 'STRING
! str (encode-coding-string str 'iso-latin-1))))))
!
! ((eq type 'COMPOUND_TEXT)
! (setq str (encode-coding-string str coding)))
!
! ((eq type 'STRING)
! (if (memq coding '(compound-text
! compound-text-with-extensions))
! (setq str (string-make-unibyte str))
! (setq str (encode-coding-string str coding))))
!
! ((eq type 'UTF8_STRING)
! (setq str (encode-coding-string str 'utf-8)))
!
! (t
! (error "Unknow selection type: %S" type))
! ))
!
! (setq next-selection-coding-system nil)
! (cons type str))))
!
(defun xselect-convert-to-length (selection type value)
(let ((value
***************
*** 304,309 ****
--- 359,365 ----
'((TEXT . xselect-convert-to-string)
(COMPOUND_TEXT . xselect-convert-to-string)
(STRING . xselect-convert-to-string)
+ (UTF8_STRING . xselect-convert-to-string)
(TARGETS . xselect-convert-to-targets)
(LENGTH . xselect-convert-to-length)
(DELETE . xselect-convert-to-delete)
Index: xselect.c
===================================================================
RCS file: /cvs/emacs/src/xselect.c,v
retrieving revision 1.123
retrieving revision 1.124
diff -u -c -r1.123 -r1.124
cvs server: conflicting specifications of output style
*** xselect.c 15 Jul 2002 00:00:41 -0000 1.123
--- xselect.c 14 Aug 2002 00:58:39 -0000 1.124
***************
*** 40,46 ****
static Atom symbol_to_x_atom P_ ((struct x_display_info *, Display *,
Lisp_Object));
static void x_own_selection P_ ((Lisp_Object, Lisp_Object));
! static Lisp_Object x_get_local_selection P_ ((Lisp_Object, Lisp_Object));
static void x_decline_selection_request P_ ((struct input_event *));
static Lisp_Object x_selection_request_lisp_error P_ ((Lisp_Object));
static Lisp_Object queue_selection_requests_unwind P_ ((Lisp_Object));
--- 40,46 ----
static Atom symbol_to_x_atom P_ ((struct x_display_info *, Display *,
Lisp_Object));
static void x_own_selection P_ ((Lisp_Object, Lisp_Object));
! static Lisp_Object x_get_local_selection P_ ((Lisp_Object, Lisp_Object, int));
static void x_decline_selection_request P_ ((struct input_event *));
static Lisp_Object x_selection_request_lisp_error P_ ((Lisp_Object));
static Lisp_Object queue_selection_requests_unwind P_ ((Lisp_Object));
***************
*** 96,101 ****
--- 96,102 ----
QATOM_PAIR;
Lisp_Object QCOMPOUND_TEXT; /* This is a type of selection. */
+ Lisp_Object QUTF8_STRING; /* This is a type of selection. */
Lisp_Object Qcompound_text_with_extensions;
***************
*** 182,187 ****
--- 183,189 ----
if (EQ (sym, QTIMESTAMP)) return dpyinfo->Xatom_TIMESTAMP;
if (EQ (sym, QTEXT)) return dpyinfo->Xatom_TEXT;
if (EQ (sym, QCOMPOUND_TEXT)) return dpyinfo->Xatom_COMPOUND_TEXT;
+ if (EQ (sym, QUTF8_STRING)) return dpyinfo->Xatom_UTF8_STRING;
if (EQ (sym, QDELETE)) return dpyinfo->Xatom_DELETE;
if (EQ (sym, QMULTIPLE)) return dpyinfo->Xatom_MULTIPLE;
if (EQ (sym, QINCR)) return dpyinfo->Xatom_INCR;
***************
*** 264,269 ****
--- 266,273 ----
return QTEXT;
if (atom == dpyinfo->Xatom_COMPOUND_TEXT)
return QCOMPOUND_TEXT;
+ if (atom == dpyinfo->Xatom_UTF8_STRING)
+ return QUTF8_STRING;
if (atom == dpyinfo->Xatom_DELETE)
return QDELETE;
if (atom == dpyinfo->Xatom_MULTIPLE)
***************
*** 350,363 ****
/* Given a selection-name and desired type, look up our local copy of
the selection value and convert it to the type.
The value is nil or a string.
! This function is used both for remote requests
! and for local x-get-selection-internal.
This calls random Lisp code, and may signal or gc. */
static Lisp_Object
! x_get_local_selection (selection_symbol, target_type)
Lisp_Object selection_symbol, target_type;
{
Lisp_Object local_value;
Lisp_Object handler_fn, value, type, check;
--- 354,368 ----
/* Given a selection-name and desired type, look up our local copy of
the selection value and convert it to the type.
The value is nil or a string.
! This function is used both for remote requests (LOCAL_REQUEST is zero)
! and for local x-get-selection-internal (LOCAL_REQUEST is nonzero).
This calls random Lisp code, and may signal or gc. */
static Lisp_Object
! x_get_local_selection (selection_symbol, target_type, local_request)
Lisp_Object selection_symbol, target_type;
+ int local_request;
{
Lisp_Object local_value;
Lisp_Object handler_fn, value, type, check;
***************
*** 404,410 ****
pair = XVECTOR (pairs)->contents [i];
XVECTOR (pair)->contents [1]
= x_get_local_selection (XVECTOR (pair)->contents [0],
! XVECTOR (pair)->contents [1]);
}
return pairs;
}
--- 409,416 ----
pair = XVECTOR (pairs)->contents [i];
XVECTOR (pair)->contents [1]
= x_get_local_selection (XVECTOR (pair)->contents [0],
! XVECTOR (pair)->contents [1],
! local_request);
}
return pairs;
}
***************
*** 421,427 ****
handler_fn = Fcdr (Fassq (target_type, Vselection_converter_alist));
if (!NILP (handler_fn))
value = call3 (handler_fn,
! selection_symbol, target_type,
XCAR (XCDR (local_value)));
else
value = Qnil;
--- 427,433 ----
handler_fn = Fcdr (Fassq (target_type, Vselection_converter_alist));
if (!NILP (handler_fn))
value = call3 (handler_fn,
! selection_symbol, (local_request ? Qnil : target_type),
XCAR (XCDR (local_value)));
else
value = Qnil;
***************
*** 801,807 ****
/* Convert lisp objects back into binary data */
converted_selection
! = x_get_local_selection (selection_symbol, target_symbol);
if (! NILP (converted_selection))
{
--- 807,813 ----
/* Convert lisp objects back into binary data */
converted_selection
! = x_get_local_selection (selection_symbol, target_symbol, 0);
if (! NILP (converted_selection))
{
***************
*** 1758,1799 ****
}
else if (STRINGP (obj))
{
! /* Since we are now handling multilingual text, we must consider
! sending back compound text. */
! int stringp;
! extern Lisp_Object Qcompound_text;
!
! if (NILP (Vnext_selection_coding_system))
! Vnext_selection_coding_system = Vselection_coding_system;
!
! *format_ret = 8;
! /* If the requested type is STRING, we must encode the selected
! text as a string, even if the coding system set by the user
! is ctext or its derivatives. */
! if (EQ (type, QSTRING)
! && (EQ (Vnext_selection_coding_system, Qcompound_text)
! || EQ (Vnext_selection_coding_system,
! Qcompound_text_with_extensions)))
! {
! Lisp_Object unibyte_string;
!
! unibyte_string = string_make_unibyte (obj);
! *data_ret = SDATA (unibyte_string);
! *nofree_ret = 1;
! *size_ret = SBYTES (unibyte_string);
! }
! else
! {
! *data_ret = x_encode_text (obj, Vnext_selection_coding_system, 1,
! (int *) size_ret, &stringp);
! *nofree_ret = (*data_ret == SDATA (obj));
! }
if (NILP (type))
! type = (stringp ? QSTRING : QCOMPOUND_TEXT);
! Vlast_coding_system_used = (*nofree_ret
! ? Qraw_text
! : Vnext_selection_coding_system);
! Vnext_selection_coding_system = Qnil;
}
else if (SYMBOLP (obj))
{
--- 1764,1776 ----
}
else if (STRINGP (obj))
{
! xassert (! STRING_MULTIBYTE (obj));
if (NILP (type))
! type = QSTRING;
! *format_ret = 8;
! *size_ret = SBYTES (obj);
! *data_ret = SDATA (obj);
! *nofree_ret = 1;
}
else if (SYMBOLP (obj))
{
***************
*** 2025,2031 ****
#endif
CHECK_SYMBOL (target_type);
! val = x_get_local_selection (selection_symbol, target_type);
if (NILP (val))
{
--- 2002,2008 ----
#endif
CHECK_SYMBOL (target_type);
! val = x_get_local_selection (selection_symbol, target_type, 1);
if (NILP (val))
{
***************
*** 2446,2451 ****
--- 2423,2429 ----
QTIMESTAMP = intern ("TIMESTAMP"); staticpro (&QTIMESTAMP);
QTEXT = intern ("TEXT"); staticpro (&QTEXT);
QCOMPOUND_TEXT = intern ("COMPOUND_TEXT"); staticpro (&QCOMPOUND_TEXT);
+ QUTF8_STRING = intern ("UTF8_STRING"); staticpro (&QUTF8_STRING);
QTIMESTAMP = intern ("TIMESTAMP"); staticpro (&QTIMESTAMP);
QDELETE = intern ("DELETE"); staticpro (&QDELETE);
QMULTIPLE = intern ("MULTIPLE"); staticpro (&QMULTIPLE);
Index: xterm.c
===================================================================
RCS file: /cvs/emacs/src/xterm.c,v
retrieving revision 1.749
retrieving revision 1.750
diff -u -c -r1.749 -r1.750
cvs server: conflicting specifications of output style
*** xterm.c 5 Aug 2002 16:28:41 -0000 1.749
--- xterm.c 14 Aug 2002 00:59:01 -0000 1.750
***************
*** 15017,15022 ****
--- 15017,15024 ----
= XInternAtom (dpyinfo->display, "TEXT", False);
dpyinfo->Xatom_COMPOUND_TEXT
= XInternAtom (dpyinfo->display, "COMPOUND_TEXT", False);
+ dpyinfo->Xatom_UTF8_STRING
+ = XInternAtom (dpyinfo->display, "UTF8_STRING", False);
dpyinfo->Xatom_DELETE
= XInternAtom (dpyinfo->display, "DELETE", False);
dpyinfo->Xatom_MULTIPLE
Index: xterm.h
===================================================================
RCS file: /cvs/emacs/src/xterm.h,v
retrieving revision 1.133
retrieving revision 1.134
diff -u -c -r1.133 -r1.134
cvs server: conflicting specifications of output style
*** xterm.h 27 Jul 2002 18:56:36 -0000 1.133
--- xterm.h 14 Aug 2002 00:59:15 -0000 1.134
***************
*** 289,295 ****
/* More atoms, which are selection types. */
Atom Xatom_CLIPBOARD, Xatom_TIMESTAMP, Xatom_TEXT, Xatom_DELETE,
! Xatom_COMPOUND_TEXT,
Xatom_MULTIPLE, Xatom_INCR, Xatom_EMACS_TMP, Xatom_TARGETS, Xatom_NULL,
Xatom_ATOM_PAIR;
--- 289,295 ----
/* More atoms, which are selection types. */
Atom Xatom_CLIPBOARD, Xatom_TIMESTAMP, Xatom_TEXT, Xatom_DELETE,
! Xatom_COMPOUND_TEXT, Xatom_UTF8_STRING,
Xatom_MULTIPLE, Xatom_INCR, Xatom_EMACS_TMP, Xatom_TARGETS, Xatom_NULL,
Xatom_ATOM_PAIR;
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2002-08-27 1:34 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-08-25 14:34 X11 umlaut pasting Daniel Pfeiffer
2002-08-25 15:54 ` Eli Zaretskii
2002-08-26 7:05 ` Kenichi Handa
2002-08-26 18:41 ` Daniel Pfeiffer
2002-08-27 1:34 ` Kenichi Handa
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).