[w3m-dev 02870] don't kill migemo by SIGINT

* main.c (w3m_exit): init_migemo() to kill migemo
* search.c: #include <unistd.h>
* search.c (migemo_active): added
* search.c (migemo_pid): added
* search.c (init_migemo): migemo_active = use_migemo
* search.c (init_migemo): kill migemo_pid
* search.c (open_migemo): s/pid/migemo_pid/
* search.c (open_migemo): setpgrp()
* search.c (open_migemo): s/use_migemo/migemo_active/
* search.c (migemostr): ditto
* search.c (forwardSearch): ditto
* search.c (backwardSearch): ditto
From: Fumitoshi UKAI  <ukai@debian.or.jp>
This commit is contained in:
Fumitoshi UKAI
2002-01-17 15:05:43 +00:00
parent 48c6df47d0
commit 7fe83699ea
3 changed files with 40 additions and 11 deletions

View File

@@ -1,8 +1,9 @@
/* $Id: search.c,v 1.14 2002/01/17 10:29:14 ukai Exp $ */
/* $Id: search.c,v 1.15 2002/01/17 15:05:43 ukai Exp $ */
#include "fm.h"
#include "regex.h"
#include <signal.h>
#include <errno.h>
#include <unistd.h>
static void
set_mark(Line *l, int pos, int epos)
@@ -14,15 +15,21 @@ set_mark(Line *l, int pos, int epos)
#ifdef USE_MIGEMO
/* Migemo: romaji --> kana+kanji in regexp */
static FILE *migemor, *migemow;
static int migemo_active;
static int migemo_pid;
void
init_migemo()
{
migemo_active = use_migemo;
if (migemor != NULL)
fclose(migemor);
if (migemow != NULL)
fclose(migemow);
migemor = migemow = NULL;
if (migemo_pid)
kill(migemo_pid, SIGTERM);
migemo_pid = 0;
}
static int
@@ -30,7 +37,7 @@ open_migemo(char *migemo_command)
{
int fdr[2];
int fdw[2];
int pid;
if (pipe(fdr) < 0)
goto err0;
if (pipe(fdw) < 0)
@@ -38,12 +45,15 @@ open_migemo(char *migemo_command)
flush_tty();
/* migemow:fdw[1] -|-> fdw[0]=0 {migemo} fdr[1]=1 -|-> fdr[0]:migemor */
pid = fork();
if (pid < 0)
migemo_pid = fork();
if (migemo_pid < 0)
goto err2;
if (pid == 0) {
if (migemo_pid == 0) {
/* child */
signal(SIGINT, SIG_IGN);
#ifdef HAVE_SETPGRP
setpgrp();
#endif
close_tty();
close(fdr[0]);
close(fdw[1]);
@@ -65,7 +75,7 @@ open_migemo(char *migemo_command)
close(fdr[0]);
close(fdr[1]);
err0:
use_migemo = 0;
migemo_active = 0;
return 0;
}
@@ -94,7 +104,7 @@ migemostr(char *str)
err:
/* XXX: backend migemo is not working? */
init_migemo();
use_migemo = 0;
migemo_active = 0;
return str;
}
#endif /* USE_MIGEMO */
@@ -108,7 +118,7 @@ forwardSearch(Buffer *buf, char *str)
int pos;
#ifdef USE_MIGEMO
if (use_migemo) {
if (migemo_active) {
if (((p = regexCompile(migemostr(str), IgnoreCase)) != NULL)
&& ((p = regexCompile(str, IgnoreCase)) != NULL)) {
message(p, 0, 0);
@@ -186,7 +196,7 @@ backwardSearch(Buffer *buf, char *str)
int pos;
#ifdef USE_MIGEMO
if (use_migemo) {
if (migemo_active) {
if (((p = regexCompile(migemostr(str), IgnoreCase)) != NULL)
&& ((p = regexCompile(str, IgnoreCase)) != NULL)) {
message(p, 0, 0);