17
17
may be used to endorse or promote products derived from this software
18
18
without specific prior written permission.
20
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND
21
21
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
22
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE
24
24
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
25
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26
26
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35
35
#include <stdlib.h>
36
36
#include <string.h>
40
#include "uim-compat-scm.h"
41
#include "uim-internal.h"
40
/* valid-key-symbols in key.scm has also to be updated if you add new
41
* key definition to key_tab
48
static struct key_entry key_tab[] = {
47
49
{UKey_Backspace, "backspace"},
48
50
{UKey_Delete, "delete"},
49
51
{UKey_Escape, "escape"},
57
59
{UKey_Next, "next"},
58
60
{UKey_Home, "home"},
60
{UKey_Zenkaku_Hankaku, "zenkaku-hankaku"},
62
{UKey_Insert, "insert"},
61
63
{UKey_Multi_key, "Multi_key"},
62
64
{UKey_Mode_switch, "Mode_switch"},
65
{UKey_Kanji, "Kanji"},
66
{UKey_Muhenkan, "Muhenkan"},
63
67
{UKey_Henkan_Mode, "Henkan_Mode"},
64
{UKey_Muhenkan, "Muhenkan"},
68
{UKey_Romaji, "romaji"},
69
{UKey_Hiragana, "hiragana"},
70
{UKey_Katakana, "katakana"},
71
{UKey_Hiragana_Katakana, "hiragana-katakana"},
72
{UKey_Zenkaku, "zenkaku"},
73
{UKey_Hankaku, "hankaku"},
74
{UKey_Zenkaku_Hankaku, "zenkaku-hankaku"},
75
{UKey_Touroku, "touroku"},
76
{UKey_Massyo, "massyo"},
77
{UKey_Kana_Lock, "kana-lock"},
78
{UKey_Kana_Shift, "kana-shift"},
79
{UKey_Eisu_Shift, "eisu-shift"},
80
{UKey_Eisu_toggle, "eisu-toggle"},
157
int uim_key_sym_to_int(uim_lisp sym);
141
uim_key_sym_to_int(LISP sym_)
160
uim_key_sym_to_int(uim_lisp sym_)
143
char *sym = uim_get_c_string(sym_);
162
char *sym = uim_scm_refer_c_str(sym_);
146
165
for (i = 0; key_tab[i].key; i++) {
148
167
res = key_tab[i].key;
175
define_valid_key_symbols(void)
179
UIM_EVAL_STRING(NULL, "(define valid-key-symbols ())");
180
for (i = 0; key_tab[i].key; i++) {
181
UIM_EVAL_FSTRING1(NULL,
182
"(set! valid-key-symbols (cons '%s valid-key-symbols))",
191
const char *res = NULL;
160
192
for (i = 0; key_tab[i].key; i++) {
161
193
if (key_tab[i].key == key) {
162
194
res = key_tab[i].str;
184
handle_key(uim_context uc, char *p, int key, int state)
216
handle_key(uim_context uc, const char *p, int key, int state)
236
268
return uc->commit_raw_flag;
240
define_key(LISP args, LISP env)
272
define_key(uim_lisp args, uim_lisp env)
242
LISP define_key_internal, predicate_sym, sources;
244
define_key_internal = leval(rintern("define-key-internal"), env);
245
predicate_sym = car(args);
246
sources = NULLP(args) ? NIL : car(CDR(args));
248
sources = leval(sources, env);
249
return funcall2(define_key_internal, predicate_sym, sources);
274
uim_lisp form, predicate_sym, sources;
276
predicate_sym = uim_scm_car(args);
277
sources = uim_scm_nullp(args) ? uim_scm_null_list() : uim_scm_cadr(args);
278
form = uim_scm_list3(uim_scm_make_symbol("define-key-internal"),
279
uim_scm_quote(predicate_sym),
282
return uim_scm_eval(form);
253
286
uim_init_key_subrs(void)
255
init_fsubr("define-key", define_key);
288
define_valid_key_symbols();
289
uim_scm_init_fsubr("define-key", define_key);