2009-12-11 9 views
4

Je voudrais obtenir le mode emacs sql-mysql fonctionnant dans Windows XP. Je suis en mesure d'entrer en mode sql-mysql et de me connecter à la base de données mysql avec succès. Le problème est que le tampon SQL n'affiche pas l'invite "mysql>". En d'autres termes, il n'interagit pas avec mysql.exe.Comment forcer mysql.exe à fonctionner en mode "interactif"?

je pense qu'il est parce que le programme mysql.exe va en mode « non interactif » quand il a commencé dans les coulisses par emacs.

Aucun des mysql options semble être d'une aide quelconque.

Des idées sur la façon de résoudre ce problème? Je peux voir que c'est un problème pour emacs mode de comint interagir avec d'autres utilitaires de ligne de commande dans les fenêtres, donc peut-être il ya une solution au niveau de l'os?

Répondre

3

Le problème est que la borne de commande interne emacs utilise des tuyaux de parler au processus client. Mysql.exe est un programme Windows natif, donc isatty() vérifie si le descripteur/handle de fichier en question est une console. Cela échoue sur les tuyaux, par conséquent, mysql passe en mode batch. Je ne vois pas non plus un moyen de forcer le mode interactif. Honte, car il serait probablement trivial à mettre en œuvre.

Exécution en xterm ou un autre terminal sur la base ptys Cygwin montrera le même problème, parce que l'émulation Cygwin est pty basé sur des tuyaux Windows.

+0

Eh bien, pas la réponse que j'espérais, mais merci pour l'explication. – Upgradingdave

1

Il n'y a en fait aucun moyen si vous ne l'exécutez pas à partir d'un terminal (pseudo). Il vérifie les descripteurs de fichiers 0 1 par isatty et définit le mode de traitement par lots si au moins l'un d'entre eux n'est pas un terminal. De l'autre côté, vous pouvez forcer le mode batch.

Quoi qu'il en soit cela a un sens tout à fait, parce que readline qui est utilisé pour inciter a besoin d'un terminal pour fonctionner raisonnablement. Donc, la bonne façon de résoudre ce problème est de l'exécuter dans un pseudoterminal.

+0

Merci pour l'info, Michal. Je commence emacs de cygwin. Une idée sur comment je peux dire à emacs d'exécuter mysql dans un pseudo-terminal? Ou peut-être que je peux tromper isatty pour toujours revenir 1? (Je ne suis pas très familier avec cygwin, comme vous pouvez probablement le dire) – Upgradingdave

+0

Exécutez-le à l'intérieur de xterm ou quelque chose comme ça. Je ne connais pas vraiment Cygwin. –

Questions connexes