| www.delorie.com/archives/browse.cgi | search |
| X-Recipient: | archive-cygwin AT delorie DOT com |
| DomainKey-Signature: | a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id |
| :list-unsubscribe:list-subscribe:list-archive:list-post | |
| :list-help:sender:mime-version:from:date:message-id:subject:to | |
| :content-type; q=dns; s=default; b=at21bwR7XZr3lzdnaoG7mg8S8FCjb | |
| zwBKxMoIW4uZSpWpjpS0yq+RT510MnsktDnZRN5pC/OriU7RArvIWZbt6tj+JhtJ | |
| //ORg0mI5uVIivG855fz82oIz09x3hgV7S1q3ap7ggkF+tJ/czarulPDw+OARwir | |
| W21Y10dlZkDRiU= | |
| DKIM-Signature: | v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id |
| :list-unsubscribe:list-subscribe:list-archive:list-post | |
| :list-help:sender:mime-version:from:date:message-id:subject:to | |
| :content-type; s=default; bh=54A6mN3bIWUnSFwo+hLOidRbAHI=; b=HJM | |
| ZjuNtnA3nQxTqk1AdgDFWqLo5qyv8EgMqS9KUlg4kTSSD/v/Zc01a272aP5hhvNr | |
| SgCKSMz4SO2Udhf/iHcBYfbnbEZY4CUPqEhxiLec7f+LeFyFaWmh12Fdyq0x+Quz | |
| UtLubIA1G7U95PRMg1ayQ3uJtMeTn3AbA4Ij1DPQ= | |
| Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
| List-Id: | <cygwin.cygwin.com> |
| List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> |
| List-Archive: | <http://sourceware.org/ml/cygwin/> |
| List-Post: | <mailto:cygwin AT cygwin DOT com> |
| List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs> |
| Sender: | cygwin-owner AT cygwin DOT com |
| Mail-Followup-To: | cygwin AT cygwin DOT com |
| Delivered-To: | mailing list cygwin AT cygwin DOT com |
| Authentication-Results: | sourceware.org; auth=none |
| X-Virus-Found: | No |
| X-Spam-SWARE-Status: | No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 |
| X-HELO: | mail-ob0-f175.google.com |
| X-Received: | by 10.202.183.70 with SMTP id h67mr5215764oif.19.1414183418235; Fri, 24 Oct 2014 13:43:38 -0700 (PDT) |
| MIME-Version: | 1.0 |
| From: | Jacob Niehus <jacob DOT niehus AT gmail DOT com> |
| Date: | Fri, 24 Oct 2014 13:43:18 -0700 |
| Message-ID: | <CACvCDBp9DstQR87zPWjz+FD=S3Ob4M7f5+28om+u_O+WCtqj8Q@mail.gmail.com> |
| Subject: | cygclang.dll breaks terminal output when used in Python bindings |
| To: | cygwin AT cygwin DOT com |
I use a Vim plugin called clang_complete for C/C++ code completion which
interfaces with Clang using Clang's python bindings. After updating Cygwin,
the terminal output of Vim is garbled as soon as the plugin uses the Clang
Python bindings.
I tracked down the exact revision (188615) of LLVM/Clang which cause the
problem and the diff for that revision is at the bottom of this message.
Basically it changes the way it looks up terminal capabilities in such a way
that it think Cygwin can't display colors which causes it to change terminal
output settings.
I was able to fix the problem by installing the libncurses-devel package and
recompiling LLVM/Clang. Should libncurses-devel be a dependency of libclang or
is there another way to fix this problem?
Thanks,
Jacob Niehus
--- lib/Support/Unix/Process.inc (revision 188614)
+++ lib/Support/Unix/Process.inc (revision 188615)
@@ -240,10 +240,12 @@
}
#ifdef HAVE_TERMINFO
-// We manually declare these two extern functions because finding the correct
+// We manually declare these extern functions because finding the correct
// headers from various terminfo, curses, or other sources is harder than
// writing their specs down.
extern "C" int setupterm(char *term, int filedes, int *errret);
+extern "C" struct term *set_curterm(struct term *termp);
+extern "C" int del_curterm(struct term *termp);
extern "C" int tigetnum(char *capname);
#endif
@@ -272,7 +274,15 @@
//
// The 'tigetnum' routine returns -2 or -1 on errors, and might return 0 if
// the terminfo says that no colors are supported.
- if (tigetnum(const_cast<char *>("colors")) > 0)
+ bool HasColors = tigetnum(const_cast<char *>("colors")) > 0;
+
+ // Now extract the structure allocated by setupterm and free its memory
+ // through a really silly dance.
+ struct term *termp = set_curterm((struct term *)0);
+ (void)del_curterm(termp); // Drop any errors here.
+
+ // Return true if we found a color capabilities for the current terminal.
+ if (HasColors)
return true;
#endif
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |