Planet GNU

Aggregation of development blogs from the GNU Project

June 25, 2016

Riccardo Mottola

DataBasin - object inspector and updates

First, the underlying DataBasinKit framework got an important update.
[DBSoap update] now supports setting fields to null. That was quite a major detail missing: you could reset to blank even string fields.
This required me to fiddle a bit to generate the fieldsToNull list. Every field passed with an empty string value is considered to null.

<update xmlns="...">
<sobject xsi:type="sf:Account">
<id>....</id>
<fieldsToNull>AccountNumber</fieldsToNull>
<fieldsToNull>OtherCity</fieldsToNull>
<Name>New Name</Name>
</sobject>
</update>


The Object Inspector, the handy tool which allows you to inspect all field values of a record and knowing immediately their developer name given the Object Salesforce Id, how got update powers!



As the Screenshot (here on MacOS) shows, changed values show in a different color (non-updatable fields show in italics and their Cell is not editable). The total number of fields to be changed is summed up in the status field. Only fields marked as changed are updated when the Update button is pressed, other are left as-is and not overwritten for safety.

Further work has been done in the Inspector and full search filtering is now available!
Just entering a a sting will filter out the relevant rows. Both the Field Name or Developer Name are matched, as well as the content! It is thus super-easy to look for all fields (also fields not at layout) which have a certain Value. All fields false? easy as in the screenshot:



by Riccardo (noreply@blogger.com) at June 25, 2016 07:36 AM

gnuzilla @ Savannah

IceCat 38.8.0 release

GNUzilla is the GNU version of the Mozilla suite, and GNU IceCat is the GNU version of the Firefox browser. Its main advantage is an ethical one: it is entirely free software. While the Firefox source code from the Mozilla project is free software, they distribute and recommend non-free software as plug-ins and addons. Also their trademark license restricts distribution in several ways incompatible with freedom 0.
https://www.gnu.org/software/gnuzilla/

The user manual pages are at http://libreplanet.org/wiki/Group:IceCat/
You can contribute by joining the wiki and editing the manuals.

Source tarballs, binaries for generic GNU/Linux systems and translations are available at http://ftp.gnu.org/gnu/gnuzilla/
GPG key ID:D7E04784 GNU IceCat releases
Fingerprint: A573 69A8 BABC 2542 B5A0 368C 3C76 EED7 D7E0 4784
https://savannah.gnu.org/project/memberlist-gpgkeys.php?group=gnuzilla

Changes since v38.7.1

  • LibreJS updated to 6.0.13
  • HTTPS-Everywhere updated to 5.1.6
  • Updated ssl cypher settings
  • Spoof user-agent on Android as Firefox Mobile

by Ruben Rodriguez at June 25, 2016 03:54 AM

June 24, 2016

FSF Blogs

Tell Europe's regulators: Net neutrality isn't just for the US and India!

Free software activists and allies are fighting for net neutrality rules country by country, and we've had important victories in the US and India during the last year and a half.

Now Europeans are fighting for the same rights. The Body of European Regulators of Electronic Communications (BEREC) has followed the US and India by releasing draft net neutrality protections that would cover all countries in the EU. But they've left huge holes allowing some instances of neutrality-violating known as zero-rating (allowing access to certain sites or applications without affecting a customer's allotted data usage) and traffic throttling (intentionally slowing Internet service). Thankfully, we have a chance to fix this: BEREC has asked the public, along with industry leaders and entrepreneurs, to give feedback on its draft rules.

BEREC accepts comments from everyone, not just Europeans. Even if you don't live in Europe, it's important for the global free software community to take action in solidarity with Europeans; winning net neutrality there will set an important precedent.

Wherever you live, submit a comment now, demanding strong Net Neutrality protections for Europe. You can use the submission form created by our allies at savenetneutrality.eu. The form does not depend on proprietary JavaScript to work, but if you'd prefer to use email, you can send your comment to NN-Consultation@berec.europa.eu instead.

Do you administer a Web site or keep a blog? If so, we encourage you to join savenetneutrality.eu's symbolic "slowdown" by adding a loading icon that simulates an Internet slow lane in a future without net neutrality.*

Net neutrality is important to maintain free speech and a healthy economy on the Internet. But it's also crucial for free software's continued growth and success. Here's why:

Media distribution giants that use Digital Restrictions Management (DRM) and proprietary software to control what's on your computer have also been fighting to control the network. Without net neutrality, DRM-laden materials could be easier to access, while DRM-free competitors could be stuck in the slow lane. Web-based free software projects like GNU MediaGoblin could also suffer the slow treatment while competitors like YouTube shell out big bucks for speedier service. The bottom line -- an Internet where the most powerful interests can pay for speed advantages could push free software projects off the map and make it harder for decentralized projects to flourish. That's not good for free software, and it's not good for other innovative voices for change in the digital world.

Tell BEREC now: Europe needs real net neutrality.

* We recommend the animated gif version at the bottom of the page. As of the time of writing, the JavaScript version is freely licensed, but it does not work with LibreJS, so it is less friendly to those committed to preserving their freedom and security online. Don't know what we're talking about? Learn more about our Free JavaScript campaign and the LibreJS browser extension.

June 24, 2016 09:11 PM

June 23, 2016

FSF Blogs

Friday Free Software Directory IRC meetup: June 24

Participate in supporting the Free Software Directory by adding new entries and updating existing ones. We will be on IRC in the #fsf channel on freenode.

Tens of thousands of people visit directory.fsf.org each month to discover free software. Each entry in the Directory contains a wealth of useful information, from basic category and descriptions, to providing detailed info about version control, IRC channels, documentation, and licensing info that has been carefully checked by FSF staff and trained volunteers.

While the Free Software Directory has been and continues to be a great resource to the world over the past decade, it has the potential of being a resource of even greater value. But it needs your help!

If you are eager to help and you can't wait or are simply unable to make it onto IRC on Friday, our participation guide will provide you with all the information you need to get started on helping the Directory today! There are also weekly FSD Meetings pages that everyone is welcome to contribute to before, during, and after each meeting.

June 23, 2016 01:53 PM

FSF Events

Richard Stallman - « Informatique et Droit: quelles politiques seraient justes ? » (Choisy-le-Roi, France)

Richard Stallman prendra la parole à PSESHSF. Son discours ne sera pas technique, l'entrée sera libre, et tout le monde est invité à assister.

Lieu: Salle Le Royal, 13 avenue Anatole France, 94600 Choisy-le-Roi, France

Veuillez complèter notre formulaire de contact, pour que nous puissions vous annoncer de futurs événements dans la région parisienne.

June 23, 2016 11:10 AM

June 22, 2016

GNUnet News

Rust implementation of GNUnet with GSoC - Mid-term progress

The GSoC mid-term evaluation is happening now, so this is a good time to write up the work I've done so far. My contributions are threefold. The files mentioned below can be found in the async branch (https://github.com/kc1212/gnunet-rs/tree/async).

by kc1212 at June 22, 2016 10:17 AM

parallel @ Savannah

GNU Parallel 20160622 ('Orlando') released

GNU Parallel 20160622 ('Orlando') has been released. It is available for download at: http://ftp.gnu.org/gnu/parallel/

Haiku of the month:

Does path on remote
not include GNU Parallel?
Try --env PATH.
-- Ole Tange

New in this release:

  • $PATH can now be exported using --env PATH. Useful if GNU Parallel is not in your path on remote machines.
  • If --block is left out, --pipepart will use a block size that will result in 10 jobs per jobslot.
  • The cookie from 2016-01-04 was won by Morgan Rodgers on the 2016-06-06 after 5 months.
  • Bug fixes and man page updates.

GNU Parallel - For people who live life in the parallel lane.

About GNU Parallel

GNU Parallel is a shell tool for executing jobs in parallel using one or more computers. A job can be a single command or a small script that has to be run for each of the lines in the input. The typical input is a list of files, a list of hosts, a list of users, a list of URLs, or a list of tables. A job can also be a command that reads from a pipe. GNU Parallel can then split the input and pipe it into commands in parallel.

If you use xargs and tee today you will find GNU Parallel very easy to use as GNU Parallel is written to have the same options as xargs. If you write loops in shell, you will find GNU Parallel may be able to replace most of the loops and make them run faster by running several jobs in parallel. GNU Parallel can even replace nested loops.

GNU Parallel makes sure output from the commands is the same output as you would get had you run the commands sequentially. This makes it possible to use output from GNU Parallel as input for other programs.

You can find more about GNU Parallel at: http://www.gnu.org/s/parallel/

You can install GNU Parallel in just 10 seconds with: (wget -O - pi.dk/3 || curl pi.dk/3/) | bash

Watch the intro video on http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Walk through the tutorial (man parallel_tutorial). Your commandline will love you for it.

When using programs that use GNU Parallel to process data for publication please cite:

O. Tange (2011): GNU Parallel - The Command-Line Power Tool, ;login: The USENIX Magazine, February 2011:42-47.

If you like GNU Parallel:

  • Give a demo at your local user group/team/colleagues
  • Post the intro videos on Reddit/Diaspora*/forums/blogs/ Identi.ca/Google+/Twitter/Facebook/Linkedin/mailing lists
  • Get the merchandise https://gnuparallel.threadless.com/designs/gnu-parallel
  • Request or write a review for your favourite blog or magazine
  • Request or build a package for your favourite distribution (if it is not already there)
  • Invite me for your next conference

If you use programs that use GNU Parallel for research:

  • Please cite GNU Parallel in you publications (use --citation)

If GNU Parallel saves you money:

About GNU SQL

GNU sql aims to give a simple, unified interface for accessing databases through all the different databases' command line clients. So far the focus has been on giving a common way to specify login information (protocol, username, password, hostname, and port number), size (database and table size), and running queries.

The database is addressed using a DBURL. If commands are left out you will get that database's interactive shell.

When using GNU SQL for a publication please cite:

O. Tange (2011): GNU SQL - A Command Line Tool for Accessing Different Databases Using DBURLs, ;login: The USENIX Magazine, April 2011:29-32.

About GNU Niceload

GNU niceload slows down a program when the computer load average (or other system activity) is above a certain limit. When the limit is reached the program will be suspended for some time. If the limit is a soft limit the program will be allowed to run for short amounts of time before being suspended again. If the limit is a hard limit the program will only be allowed to run when the system is below the limit.

by Ole Tange at June 22, 2016 02:55 AM

June 21, 2016

FSF Blogs

Building a better LibrePlanet: What we learned from the conference surveys

LibrePlanet 2016

Creative Commons License
This work by Kori Feener is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Based on a work at https://u.fsf.org/1u8.

Our samples are usually about sixty to seventy respondents, and self-selecting -- from their responses, we can say with confidence that LibrePlanet attendees feel we're doing a decent job organizing the conference. The questions "How much did you enjoy the sessions you attended, compared to those at other conferences you have attended?" and "How likely is it that you will return to LibrePlanet next year?" received an average of about 3.5 out of 4 each of the last three years.

Here are some more takeaways:

  • Many LibrePlaneters want a quieter space where they can socialize and hack after the conference programming ends for the day. We organize parties after sessions wrap up, and will continue to do so, but parties aren't everyone's cup of tea. We're exploring ways to provide a comfortable, after-hours space in future years.

  • Our community tends to prefer that the sessions start at 9:45, not earlier. 9:45 is a little on the late side for a conference, but many attendees like to stay up late hacking, and need their sleep.

  • We have many newcomers each year at LibrePlanet -- about half of survey respondents say they are attending for the first time. Newcomers seems to have a good experience. About two-thirds of respondents answer yes to "If you are a beginner or intermediate hacker, did you find enough activities to match your skill level?" This is encouraging: one of the conference's core purposes is to provide a welcoming stepping-stone to our community.

  • It's important to have more coffee than we think we need. In years when we run out early, we hear about it on the survey.

Designing a good survey takes practice and, yes, people to give feedback on the survey's design. Though we keep a few core questions the same year-to-year, we adjust each survey based on things we've learned, like:

  • Don't use two-part or "double-barreled" questions. For example, one year, we tried to refine the question "If you are a beginner or intermediate hacker, did you find enough activities to match your skill level?" by rephrasing it as "Are you a newcomer to the free software community? If so, did you find enough sessions that were accessible and engaging for you?" Some people responded to the first part of that compound question, and some responded to the second part, making the results not very useful.

  • The survey has a subtler, secondary purpose: It shows attendees that we care about the LibrePlanet experience, and gives them a space to reflect on it. Easy access to the survey -- online and on paper -- helps achieve this.

It's important to us to make LibrePlanet better every year, and we appreciate your help. The community doesn't just provide feedback -- we do the planning, but you supply presentations, hallway conversations, and new projects to discuss each year.

We are working to finalize the dates for LibrePlanet 2017. Join the LibrePlanet announcements list on the conference site to receive updates. In the meantime, you can:

We hope to see you at LibrePlanet 2017!

June 21, 2016 07:33 PM

Do you GNU? Attend the GNU Hackers' Meeting in France this summer!

You are invited to the 2016 GNU Hackers' Meeting, which will take place in Rennes, Brittany, France, August 18-20, 2016 and is hosted by Inria (map).

The GNU Hackers' Meeting is a friendly, semi-formal forum to discuss technical, social, and organizational issues concerning free software and GNU. This is a great opportunity to meet GNU maintainers and active contributors. This meeting will feature:

  • a dinner on the evening of the 17th,
  • public talks on the 18th and 19th,
  • an exploration of Brittany during the day on the 20th, followed by a GNU maintainers-only session in the evening.

The call for participation is open now. You are encouraged to submit proposals for GNU-ish presentations, including title, abstract, and duration of sesion to ghm2016@gnunet.org.

To register, follow these instructions.

You will find full details on the meeting, including a detailed schedule TBA, here.

June 21, 2016 07:22 PM

June 19, 2016

guile @ Savannah

GNU Guile 2.1.3 released (beta)

We are delighted to announce GNU Guile release 2.1.3, the next pre-release in what will become the 2.2 stable series.

This release rewrites the ports facility to better support non-blocking concurrent input and output. See the newly rewritten "Input and Output" section of the manual for all details, and the release announcement for a download link.

by Andy Wingo at June 19, 2016 09:53 AM

June 16, 2016

FSF Blogs

Friday Free Software Directory IRC meetup: June 17th

Join the FSF and friends Friday, June 17th, from 12pm to 3pm EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.

Participate in supporting the Free Software Directory by adding new entries and updating existing ones. We will be on IRC in the #fsf channel on freenode.

Tens of thousands of people visit directory.fsf.org each month to discover free software. Each entry in the Directory contains a wealth of useful information, from basic category and descriptions, to providing detailed info about version control, IRC channels, documentation, and licensing info that has been carefully checked by FSF staff and trained volunteers.

While the Free Software Directory has been and continues to be a great resource to the world over the past decade, it has the potential of being a resource of even greater value. But it needs your help!

If you are eager to help and you can't wait or are simply unable to make it onto IRC on Friday, our participation guide will provide you with all the information you need to get started on helping the Directory today! There are also weekly FSD Meetings pages that everyone is welcome to contribute to before, during, and after each meeting.

June 16, 2016 03:50 PM

The Licensing and Compliance Lab interviews Brett Smith of dtrx

Brett Smith has been using free software since 1998. He worked in several roles at the Free Software Foundation (FSF) from 2002-2004, and then worked in its GPL Compliance Lab from 2006-2012. Dtrx stands for “Do the Right Extraction:” it extracts all kinds of archive files in a consistent way, so you always get the same results no matter how the author built the archive.

What inspired you to create dtrx?

The idea actually came about while I was working in the FSF’s GPL Compliance Lab. In the course of investigating violations and verifying that provided source was complete, I often found myself downloading files and then repeating the same steps over and over: figure out a file’s real type, extract it, move extracted files around to keep things organized, fix permissions. I wrote dtrx to automate that part of the job, so I could stay focused on compliance itself.

How are people using it?

I think most people who install dtrx use it to extract all archives they download. I know I do: it’s nice to type a single, short command that I know will do the right thing, no matter what kind of archive it is or how it’s organized.

What features do you think really sets dtrx apart from similar software?

When you extract an archive with most of the native tools like tar, they tend to prioritize extracting the files in exactly the same state they were archived in. For good reason: if the archive is a system backup, you wouldn’t appreciate it if the tool started reorganizing the data or changing permissions. Dtrx assumes you’re extracting an archive someone else made, so its top priority is to make it easy for you to access the data inside. Both use cases are important, but now that it’s so common for people to distribute all kinds of files in archives over the Internet, I think dtrx’s focus is what most people want most of the time.

Why did you choose the GPLv3 as dtrx's license?

I’m a strong believer in copyleft, and GPLv3 (along with its cousin AGPLv3) does more to ensure the software stays free than any other license. The strongest patent defenses in a free software license, broad compatibility with other licenses—why would I choose anything else?

How can users (technical or otherwise) help contribute to dtrx?

I’ve received a lot of great bug reports and feature requests over the years, and those are always helpful. Dtrx tries to make archives as easy as possible for people, so if it does something unexpected with an archive, or is missing an important feature, that’s as much a bug as crashing. I’m always happy to receive feedback by e-mail.

What's the next big thing for dtrx?

I’m slowly planning out a version 8 which will work the same way for users, but improve a lot under the hood. It will try to extract an archive with multiple tools, so you don’t have to install one specific tool to extract an archive type, as long as you have any tool installed that knows how to do it. It will also run in Python 3, so users don’t have to keep installing a crufty Python 2.7 to run dtrx.

Enjoy this interview? Check out our previous entry in this series, featuring Kees Verruijt of CANboat.

June 16, 2016 01:50 PM

June 15, 2016

FSF Blogs

Licensing resources series: A Quick Guide to GPLv3

One of our main goals here in the Free Software Foundation's Licensing & Compliance Lab is education. Over the years we have created a wide breadth of tools and resources to help users and developers understand free software licenses and related legal issues. We've been doing this for so long that some resources, published some years ago but still very relevant, aren't consulted as often as they could be. With all these great tools available, we thought it would be good to take some time to highlight individual resources that you may not know about. With that, we are starting a regular series of articles, each promoting a particular tool or resource to help you understand the legal side of free software.

GPLv3

In this inaugural edition, we'd like to share with you A Quick Guide to GPLv3. Released around the launch of the GNU General Public License version 3, the guide walks you through a basic understanding of many of the changes made from previous versions. From fighting back against Digital Restrictions Management to smoothing the process of returning to compliance, GPLv3 has quite a few improvements in the way it protects and promotes the rights of users. With so many projects upgrading to GPLv3, it's important to know how it differs from the GPLv2. The guide goes over all the major changes, and even comes with a beautifully constructed PDF version that you can print out to share at conferences or meetups.

The guide finishes by highlighting more resources to help you understand what was new in GPLv3. The Licensing & Compliance Lab provides a wide variety of tools on this and many other topics, so keep a look out for the next edition of our licensing resource series.

  • You can keep up to date on this series and more free software news by subscribing to our newsletter, the Free Software Supporter and subscribing to our RSS feed.
  • You can help fund our work in creating these licensing resources by becoming a member or by making a donation.

June 15, 2016 01:28 PM

FSF Events

Richard Stallman to speak in Montreal, Canada

Richard Stallman will be speaking at the World Social Forum (2016-08-09–14). His speech will be nontechnical, and the public is encouraged to attend.

Speech topic to be determined.

Location: to be determined.

Please fill out our contact form, so that we can contact you about future events in and around Montreal.

June 15, 2016 10:45 AM

June 14, 2016

GNUtls

GnuTLS 3.5.1

Released GnuTLS 3.5.1 a feature update release in the next stable branche.

by Nikos Mavrogiannopoulos (nmav@gnutls.org) at June 14, 2016 12:00 AM

June 13, 2016

FSF News

LulzBot TAZ 6 3D printer now FSF-certified to respect your freedom

In October 2012, the LulzBot AO-100 3D printer became the first hardware product to be awarded use of the FSF's RYF certification mark. Since that time, Aleph Objects, Inc. has continued to release new and improved successors to the AO-100 model, including the AO-101, the Mini, and five successor TAZ models. The latest model, which can be purchased from LulzBot.com, has numerous hardware improvements, including a self-leveling printing bed made of borosilicate glass with a PEI surface, a self-cleaning nozzle system, and an integrated power supply. It uses 100% free software: from the low-level firmware that controls the motors and heats the printing bed, to end-user software, including Cura LulzBot Edition, which allows users to both prepare 3D digital objects for printing as well as control the operation of the 3D printer itself.

"Aleph Objects, Inc. continues to be one of the most innovative and impressive makers of desktop 3D printers in the world, and they have done it without compromising their core values and commitment to computer user freedom," said Joshua Gay, FSF licensing & compliance manager.

"The Free Software Foundation is the preeminent voice advancing technology that respects user freedom. It is a privilege to receive their seal of approval on the new LulzBot TAZ 6 desktop 3D printer," said Jeff Moe, president of Aleph Objects, Inc.

To learn more about the Respects Your Freedom hardware certification program visit https://fsf.org/ryf.

Hardware sellers interested in applying for certification can consult https://www.fsf.org/resources/hw/endorsement/criteria.

About the Free Software Foundation

The Free Software Foundation, founded in 1985, is dedicated to promoting computer users' right to use, study, copy, modify, and redistribute computer programs. The FSF promotes the development and use of free (as in freedom) software -- particularly the GNU operating system and its GNU/Linux variants -- and free documentation for free software. The FSF also helps to spread awareness of the ethical and political issues of freedom in the use of software, and its Web sites, located at fsf.org and gnu.org, are an important source of information about GNU/Linux. Donations to support the FSF's work can be made at https://donate.fsf.org. Its headquarters are in Boston, MA, USA.

More information about the FSF, as well as important information for journalists and publishers, is at https://www.fsf.org/press.

Media Contacts

Joshua Gay
Licensing & Compliance Manager
Free Software Foundation
+1 (617) 542 5942
licensing@fsf.org

Kara Sawinska
Media Contact
Aleph Objects, Inc.
+1 (970) 377 1111
press@lulzbot.com

June 13, 2016 02:55 PM

FSF Events

Forum - GNU Hackers' Meeting (Rennes, France)

The GNU Hackers' Meeting is a friendly, semi-formal forum to discuss technical, social and organizational issues concerning free software and GNU. This is a great opportunity to meet GNU maintainers and active contributors. This meeting will feature:

  • a dinner on the evening of the 17th,
  • public talks on the 18th and 19th,
  • an exploration of Brittany during the day on the 20th, followed by a GNU maintainers–only session in the evening.

The call for participation is open now. You are encouraged to submit proposals for GNU-ish presentations, including title, abstract, and duration of session to ghm2016@gnunet.org.

Detailed location: to be determined.

Register for the event.

Please fill out our contact form, so that we can contact you about future events in and around Rennes.

June 13, 2016 02:10 PM

Gary Benson

Infinity Full-System Preview NOW AVAILABLE

If you’ve been following Infinity and would like to, you know, download some code and try it out… well, now you can!

by gbenson at June 13, 2016 11:56 AM

June 12, 2016

Lonely Cactus

A Pipboy-like terminal application in Guile: Part 3 - labels and progress bars

So, in trying to put together a new release of the ncurses binding for GNU Guile, I decided I'd try to make a Pip-Boy like application that runs in a terminal emulator like xterm or Gnome Terminal  This is just for the nonsense of it, and the challenge.

FYI, Ncurses is a library for text user interfaces.  Guile is an implementation of the Scheme programming language.  And a Pip Boy is a fictional computer that appears in the Fallout video games.

In the first two parts of this little series of nonsense (part 1part 2), I wrote about how rendering a string -- turning a logical string into a display string -- got very complicated once you tried to word break properly with non-English and non-ASCII text, deal with control characters, and think about bi-directionality. Unicode is hard.  I pulled in two libraries, GNU Fribidi and GNU Libunistring, to create this procedure to wrap a string.  So much coder's blood spilled to do something so apparently simple... 

(define (string-render str tabsize n-cells alignment bidi)
  "Given a string STR, this converts the string into a list of strings
with each string contining N-CELLS cells or fewer.  Tabs are expanded
into TABSIZE spaces.  Other Unicode spaces are replace with the common
space character.  Any control characters are replaced with replacement glyphs.  If alignment is 'left, lines are padded with spaces at the end of each string to take up N-CELLS.  If ALIGNMENT is 'right, lines are padded with spaces on the left. ALIGNMENT can also be 'center. If BIDI is true, strings are converted from logical order to visual order."

So anyway, I bashed out a couple of widgets.
  • A "label" is some wrapped text in a box, possibly with a border
  • A "progress bar" is short text followed by a colored bar whose length is a representation 0% to 100%.
There isn't much to say about the code, which is here.  It is all very rough and boring and workman-like and verbose.  To render these widgets, I settled on an outside-in drawing model.
  1. The ncurses panel's size is determined first.
  2. Any border is on the outside edge of the panel, reducing the available window size by 1 on all four sides.
  3. Inside of that is a user-defined padding width.
  4. What remains inside of that is available for content.


Here's more Unicode and xterm trivia, which excites me because I am a weirdo.

Boxes

There are a few usable sets of border drawing characters.  These should be well aligned if you have a proper monospace font in your browser.

;; Light box
;; ┌─┐
;; │ │
;; └─┘
(define *box-chars-light* "┌─┐│ │└─┘")
;; Light round box
;; ╭─╮
;; │ │
;; ╰─╯
(define *box-chars-rounded* "╭─╮│ │╰─╯")
;; Heavy box
;; ┏━┓
;; ┃ ┃
;; ┗━┛
(define *box-chars-heavy* "┏━┓┃ ┃┗━┛")
;; Double box
;; ╔═╗
;; ║ ║
;; ╚═╝
(define *box-chars-double* "╔═╗║ ║╚═╝")
;; Block-char box
;; ▛▀▜
;; ▌ ▐
;; ▙▄▟

(define *box-chars-block* "▛▀▜▌ ▐▙▄▟")

xterm 256-color palette

If you want a good all-green palette from the xterm 256-color palette without modifying the xterm colors, you have about ~10 available colors.


With the above widgets and colors, I was able to make the following with just a few (very long) lines of code.

Next Time

Before I get to the interactive widgets, I want to get to the audio design.  In Fallout 4, there are tiny click noises when you scroll or select an object on the GUI, which is very satisfying from a UX perspective.  So I have to figure out how to do some audio.  I guess I'm going to have to dig into GStreamer, which is always daunting...

by Mike (noreply@blogger.com) at June 12, 2016 04:17 PM

June 11, 2016

gettext @ Savannah

make @ Savannah

GNU Make 4.2.1 Released!

GNU Make 4.2.1, a bug-fix release for GNU Make 4.2, has been released and is available in the usual locations.

by Paul D. Smith at June 11, 2016 01:27 PM

June 10, 2016

FSF Blogs

Intel & ME, and why we should get rid of ME

Architecturally, the ME varies from model to model, and over the past decade it has been growing in complexity. In general, it consists of of one or more processor cores, memory, system clock, internal bus, and reserved protected memory used as part of its own cryptography engine. It has its own operating system and suite of programs, and it has access to the main system's memory, as well as access to the network through the Intel Gigabit Ethernet Controller. If you had control over the ME, then it would be a powerful subsystem that could be used for security and administration of your device.

The ME firmware runs various proprietary programs created by Intel for the platform, including its infamous Active Management Technology (AMT), Intel's Boot Guard, and an audio and video Digital Restrictions Management system specifically for ultra-high definition media called "Intel Insider." While some of this technology is marketed to provide you with convenience and protection, what it requires from you, the user, is to give up control over your computer. This control benefits Intel, their business partners, and large media companies. Intel is effectively leasing-out to the third-parties the rights to control how, if, and when you can access certain data and software on your machine.

Leah Woods of GNU Libreboot states that the "Intel Management Engine with its proprietary firmware has complete access to and control over the PC: it can power on or shut down the PC, read all open files, examine all running applications, track all keys pressed and mouse movements, and even capture or display images on the screen. And it has a network interface that is demonstrably insecure, which can allow an attacker on the network to inject rootkits that completely compromise the PC and can report to the attacker all activities performed on the PC. It is a threat to freedom, security, and privacy that can't be ignored."

At this time, developing free replacement firmware for the ME is basically impossible. The only entity capable of replacing the ME firmware is Intel and its OEM partners. And, since the ME is a control hub for your machine, you can no longer simply disable the ME like you could on earlier models, such as the Libreboot X200 laptop.

This means that if in the future we want more hardware that can achieve Respects Your Freedom certification, we will need to make it a "High-Priority" to support the work of those who are getting GNU Libreboot and 100% free system distributions running on other architectures, such as ARM, MIPS, and POWER8.

June 10, 2016 06:50 PM

Lonely Cactus

Mapping xterm 256-color palette colors to X11 color names

Here is a table that might be of some use to somebody, someday.

The xterm-like terminals all have pretty similar predefined colors in their 256-color palettes.  The 1st eight colors seem to vary since they often get replaced with system colors, but the remainder are quite stable among 256-color terminal emulators claiming xterm compliance.

Unrelated to this, X11 has long included a file called /usr/share/X11/rgb.txt that has names of colors.  I wondered what overlap there was between these two things.

So, this is a list of the xterm 256-color palette indices vs X11 RGB color names.  To declare something a match, I chose the closest X11 color to the xterm palette color in LAB coordinates, but, never searched farther that 6.9 units of difference in LAB space.  Under those criteria, 129 of 256 xterm colors approximate named X11 RGB colors.



0: BLACK
1: WEBMAROON
2: WEBGREEN
3: OLIVE
4: NAVY, NAVYBLUE
5: WEBPURPLE
6: TEAL
7: SILVER
8: WEBGRAY, WEBGREY
9: RED, RED1
10: GREEN, LIME, X11GREEN, GREEN1
11: YELLOW, YELLOW1
12: BLUE, BLUE1
13: MAGENTA, FUCHSIA, MAGENTA1
14: CYAN, AQUA, CYAN1
15: WHITE
16: BLACK
18: BLUE4, DARKBLUE
20: MEDIUMBLUE, BLUE3
21: BLUE, BLUE1
22: DARKGREEN
24: DEEPSKYBLUE4
26: ROYALBLUE
28: GREEN4
30: CYAN4, DARKCYAN
37: LIGHTSEAGREEN
40: GREEN3
44: CYAN3
46: GREEN, LIME, X11GREEN, GREEN1
48: SPRINGGREEN, SPRINGGREEN1
51: CYAN, AQUA, CYAN1
54: INDIGO
59: GRAY37, GREY37
62: SLATEBLUE3
65: DARKSEAGREEN4
66: PALETURQUOISE4
68: CORNFLOWERBLUE
74: SKYBLUE3
75: STEELBLUE1
76: CHARTREUSE3
78: SEAGREEN3
79: MEDIUMAQUAMARINE, AQUAMARINE3
80: MEDIUMTURQUOISE
86: AQUAMARINE, AQUAMARINE1
88: RED4, DARKRED
89: MAROON4
90: MAGENTA4, DARK MAGENTA, DARKMAGENTA
92: DARKVIOLET
94: DARKGOLDENROD4
95: LIGHTPINK4
96: PLUM4
100: YELLOW4
102: GRAY53, GREY53
108: DARKSEAGREEN
110: SKYBLUE3
114: PALEGREEN3
116: DARKSLATEGRAY3
117: LIGHTSKYBLUE
118: CHARTREUSE, CHARTREUSE1
122: AQUAMARINE, AQUAMARINE1
123: DARKSLATEGRAY1
134: MEDIUMORCHID3
136: DARKGOLDENROD
138: ROSYBROWN
141: MEDIUMPURPLE1
143: DARKKHAKI
145: GRAY69, GREY69
149: DARKOLIVEGREEN3
152: POWDERBLUE
154: GREENYELLOW
159: PALETURQUOISE1
160: RED3
162: VIOLETRED
164: MAGENTA3
167: INDIANRED
171: MEDIUMORCHID1
172: ORANGE3
173: LIGHTSALMON3
178: GOLD3
180: BURLYWOOD3
184: YELLOW3
186: KHAKI3
187: LEMONCHIFFON3
188: GRAY84, GREY84
195: LIGHTCYAN, LIGHTCYAN1
196: RED, RED1
198: DEEPPINK, DEEPPINK1
201: MAGENTA, FUCHSIA, MAGENTA1
203: INDIANRED1
205: HOTPINK
208: DARKORANGE
209: SALMON1
210: LIGHTCORAL
211: PALEVIOLETRED1
213: ORCHID1
214: DARKGOLDENROD1
215: SANDYBROWN
217: LIGHTPINK1
220: GOLD, GOLD1
223: PEACHPUFF, PEACHPUFF1
224: MISTYROSE, MISTYROSE1, MISTYROSE2
225: THISTLE1
226: YELLOW, YELLOW1
230: LIGHTGOLDENRODYELLOW
231: WHITE
232: GRAY3, GREY3
233: GRAY7, GREY7
234: GRAY11, GREY11
235: GRAY15, GREY15
236: GRAY19, GREY19
237: GRAY23, GREY23
238: GRAY27, GREY27
239: GRAY30, GREY30, GRAY31, GREY31
240: GRAY34, GREY34, GRAY35, GREY35
241: GRAY38, GREY38, GRAY39, GREY39
242: GRAY42, GREY42
243: GRAY46, GREY46
244: WEBGRAY, WEBGREY
245: GRAY54, GREY54
246: GRAY58, GREY58
247: GRAY62, GREY62
248: GRAY66, GREY66
249: GRAY70, GREY70
250: GRAY74, GREY74
251: GRAY78, GREY78
252: GRAY81, GREY81, GRAY82, GREY82
253: GRAY85, GREY85, GRAY86, GREY86
254: GRAY89, GREY89, GRAY90, GREY90
255: GRAY93, GREY93

by Mike (noreply@blogger.com) at June 10, 2016 12:16 AM

June 09, 2016

gettext @ Savannah

denemo @ Savannah

Release 2.0.10 is imminent!

Please test
Download the source or use the binaries labelled 0.0.0 at
http://www.denemo.org/~jjbenham/gub/uploads

The new features are these:

More Conditional Settings
Apply conditions to score directives
Use for page breaks between movements, margins etc
Lyrics Pane Improvements
Save directly from verse
Navigate verses from keyboard
Hidden Staff Improvements
Now auto-show when the cursor moves on them
Can be navigated with the mouse as well as keyboard
Settings stored with score
New Commands
Create Click-Track
Auto-filled with beats
Custom fill available
Create Intro
Handles upbeat
Create Multi-Measure rests in bulk
Auto-open Source File
First link opened on file open
Bug Fixes
Nth time bar numbers match font
Undo/Redo fixed for several bugs

by Richard Shann at June 09, 2016 06:40 PM

wget @ Savannah

GNU wget 1.18 released

Noteworthy changes

  • By default, on server redirects to a FTP resource, use the original URL to get the local file name. Close CVE-2016-4971. This introduces a backward-incompatibility for HTTP->FTP redirects and

any script that relies on the old behaviour must use --trust-server-names.

  • Check the HSTS file is not world-writable before using it.
  • Parse <img srcset> attributes on a recursive download.
  • Fix problem with SNI server names having trailing dot(s)
  • New options --bind-dns-address and --dns-servers.
  • When Wget is built with libiconv, it now converts non-ASCII URIs to the locale's codeset when it creates files. The encoding of the remote files and URIs is taken from --remote-encoding, defaulting to UTF-8. The result is that non-ASCII URIs and files downloaded via HTTP/HTTPS and FTP will have names on the local filesystem that correspond to their remote names.

by Giuseppe Scrivano at June 09, 2016 04:33 PM

FSF Blogs

Friday Free Software Directory IRC meetup: June 10th

Join the FSF and friends Friday, June 10th, from 12pm to 3pm EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.

Participate in supporting the Free Software Directory by adding new entries and updating existing ones. We will be on IRC in the #fsf channel on freenode.

Tens of thousands of people visit directory.fsf.org each month to discover free software. Each entry in the Directory contains a wealth of useful information, from basic category and descriptions, to providing detailed info about version control, IRC channels, documentation, and licensing info that has been carefully checked by FSF staff and trained volunteers.

While the Free Software Directory has been and continues to be a great resource to the world over the past decade, it has the potential of being a resource of even greater value. But it needs your help!

If you are eager to help and you can't wait or are simply unable to make it onto IRC on Friday, our participation guide will provide you with all the information you need to get started on helping the Directory today! There are also weekly FSD Meetings pages that everyone is welcome to contribute to before, during, and after each meeting.

June 09, 2016 02:20 PM

June 06, 2016

GNUtls

GnuTLS 3.4.13

Released GnuTLS 3.4.13 a bug fix release on the current stable branch.

Added GnuTLS-SA-2016-1 security advisory.

by Nikos Mavrogiannopoulos (nmav@gnutls.org) at June 06, 2016 12:00 AM

June 05, 2016

GNU Remotecontrol

Newsletter – June 2016

THIS MONTH…..

  • TRENDS
  • EYE CATCHING
  • DISCUSSIONS
  • WORK PACKAGE PHASES
  • PROJECT NEEDS
  • EXISTING CODE
  • LASTLY
TRENDS

United States Electricity Price per KWH
Present and Past

EYE CATCHING

Demand Response
An article reporting Opower is financially declining, the press release Oracle purchased Opower, and the statement Opower reads sixty million utility end customers. A press release announcing Johnson Controls has sold their integrated demand response business unit. A white paper offering utilities a five-step blueprint to successfully managing distributed resources. An article to identity who remains in the next generation energy distribution industry. An article considering the financial merit of the American Recovery and Reinvestment Act of 2009. An announcement Weather Bug has launched a residential energy efficiency program along with an optional offering to normalize data.

GNU remotecontrol has stopped tracking the number of Smart Grid projects launched in the past six months. The numbers are staggering to consider. The industry experiencing a large number of mergers and acquisitions, along with considerable financial expenditure in the past decade, provide abundant evidence many financial currencies are moving at a rapid velocity in the energy distribution and efficiency segments. Substantial electronics supplier shifts and security compromises are also occurring.

Nest
We devote a section of focused communication in this newsletter edition regarding Nest Labs by considering their organizational structure. Nest announced they have over fifty business partners provided valued-added offerings to residential customers. Greg Duffy accused Tony Fadell of “insulting” Dropcam employees who had joined Nest as part of the takeover. An article considered if Nest is going to survive in light of their organizational strategy. The announcement Fadell has resigned came with both scrutiny and concern.

The electronics industry designs and manufactures HVAC thermostats. The absence of an internationally accepted technology standard for the residential network connected HVAC thermostat prohibits interoperability across technology implementations. Our June 2014 edition addressed Dynamic Demand Response. We have repeatedly addressed the need to develop an internationally accepted technology standard for the residential network connected HVAC thermostat. If the dominant player in the residential network connected HVAC thermostat arena cannot successfully operate their organization, then the market will experience a new dominant player. The resulting market shifts will ripple into waves.

Smart Grid – Consumer
An article reporting 2007 and 2015 residential power sales accounted for 37.7% of all retail electricity sales with a 1.1% sales decrease in 2015. An article identifying massive strides accomplished by Singapore for establishing a Smart City. Both the UK and Australia have launched new Smart Grid efforts.

Smart Grid – Producer
The International Trade Associations 2016 Smart Grid Top Markets report ranks thirty-four international markets in terms of growth potential for the United States Smart Grid industry. The United States Supreme Court will hear oral arguments in a consolidated case examining state incentives to construct new power plants and whether those incentives would distort federal power markets under the jurisdiction of the Federal Energy Regulatory Committee. This case does not seem to redefine the Federal Energy Regulatory Committee but could based upon the case ruling.

Smart Grid – Security
The documented events of a team compromising electrical grid security with a video overview. The Energy Systems Integration group presented insecure field devices on the Smart Grid involving risks, damage potential, and practical solutions by using the Ukraine and Crimea security compromises as an example. The United States Congress held hearings on Smart Grid security to understand the US position in light of the Ukraine and Crimea events. The hearings have determined the utility industry members saying it is a matter of several hours to a few days to resolve the type of attack experienced by Ukraine and Crimea. The same hearings found the information technology industry members saying it is a matter of several days to a few weeks to resolve the type of attack experienced by Ukraine and Crimea. The differences between hours, days, and weeks show the utility and information technology industries are not in agreement.

DISCUSSIONS

RELEASED
GNU remotecontrol version 2.0 is released. Announcements were made by both email and news postings. The user manual explains the many improvements and new features. We identified in the March 2016 newsletter edition the next steps for the software project. The combined legislative, court, and market events leave no doubt the desire for interconnection of residential HVAC thermostats will become commonplace.

WORK PACKAGE PHASES

GNU remotecontrol accomplishes productive work output through structured work packages. This approach helps to organize our efforts and keep things on track to achieve publishing our work. We have ten different phases for our work packages.

GNU remotecontrol Work Package Phases

Order Label Name
1 REQ Requirements
2 DSG Design
3 DEV Development
4 UNT Unit Testing
5 SYS System Testing
6 UAT User Acceptance Testing
7 DOC Documentation
8 RLS Release
9 TRN Training
10 SPT Support

The GNU remotecontrol team does not perform any work output outside of structured work packages.

PROJECT NEEDS

Staffing
GNU remotecontrol Project Help Wanted

https://savannah.gnu.org/people/?group=remotecontrol

New Thermostats
Many people have asked us about adding other types of thermostats to GNU remotecontrol. There are three questions that need to be answered before we can offer GNU remotecontrol support for any IP thermostat. These questions are:

  • How to CONNECT to it (NETWORK).
  • How to READ from it (CODE).
  • How to WRITE to it (CODE).

It is our hope to have dozens and dozens of thermostat types that work with GNU remotecontrol.

EXISTING CODE

BUGS
We have 0 new bugs and 0 fixed bugs since our last Blog posting. Please review these changes and apply to your GNU remotecontrol installation, as appropriate.

TASKS
We have 0 new tasks and 0 completed tasks since our last Blog posting. Please review these changes and apply to your GNU remotecontrol installation, as appropriate.

LASTLY

Whatever you do…..don’t get beat up over your Energy Management strategy. GNU remotecontrol is here to help simplify your life, not make it more complicated. Talk to us if you are stuck or cannot figure out the best option for your GNU remotecontrol framework. The chances are the answer you need is something we have already worked through. We would be happy to help you by discussing your situation with you.

…..UNTIL NEXT MONTH!

Why the Affero GPL?

GNU Affero General Public License LOGO

GNU remotecontrol LOGO


by gnuremotecontrol at June 05, 2016 06:49 PM

June 04, 2016

Lonely Cactus

A Pipboy-like terminal application in Guile: Part 2 - more on strings

Hello again. I'm back to talk about recreating some Pip Boy like terminal widgets in ncurses.

Last time, I started talking about the remedial problems of how to *render* a string for a character cell console, e.g., how to convert a logical string to a list of visual strings that can be displayed on a terminal.  So far, I said that you need to
  • Put the string in Unicode NFC normalization, because NFC normalized strings are more likely to be prepared glyphs on a terminal and not overstruck glyphs.  Unicode normalization is discussed in http://www.unicode.org/reports/tr15/
  • Convert tabs to spaces
  • Replace almost all of the control characters or Private Use Area characters with replacement glyphs.  This hygiene is necessary since some unhandled control character could garble the terminal display.  Some control characters that don't get removed are the 5 line separators (CR, LF, NEL, PS, and LS) and the 8 bidirectional  formatting characters (LRE, RLE, LRO, RLO, PDF, LRI, RLI, FSI, PDI, LRM, RLM, and ALM) because we'll use them in a second.
So that just leaves

Bidirectional text

First off, I'm not qualified to talk about this, but here's the highlights.

Most European languages are written left to right.  The big right-to-left alphabets are Arabic and Hebrew.  Here in the Los Angeles, I'd guess the most common right-to-left languages are probably Persian, Hebrew, Arabic, and Yiddish.

But Scheme strings are normally encoded in logical order: e.g. the beginning of a string is the part of the string that would be read first by a human.  If a string contained a line of French, the first character would be the left-most character to be displayed on a screen.  If it contained Arabic, the first character would be the right-most character to be displayed on a screen.

Terminal emulators generally take one of two strategies when given strings to display. They either
  • Display the text from left-to-right regardless of the contents of the text
  • Or, try to be context sensitive when they display the text, switching from left-to-right and right-to-left depending on the apparent language of the text
Weirdly, in a ncurses application, neither strategy is particularly helpful.  If a terminal does the former, it becomes the programmers' responsibility to convert the string from logical order to visual order.  If it does the latter, and you ask ncurses to write a string at a given (y,x) position, it is hard to know if that x is columns counted from the left or columns counted from the right.

Consider the following program, and its output on the Cygwin terminal.  It starts ncurses, prints a line of Latin text starting at column 30, row 1, and prints a word in the Hebrew alphabet starting at column 30, row 2.  Both lines are supposed to begin a column 30, but, the terminal tries to be helpful and makes the second line print in the 30th column from the right, which is unlikely to be the intention of the programmer.

(use-modules (ncurses curses))
(setlocale LC_ALL "")
(define win (initscr))
(addstr win "LATIN TEXT" #:x 30 #:y 1)
(addstr win (string #\ט\# ק\# ס\# ט ) #:x 30 #:y 2)
(refresh win)
(sleep 10)
(endwin)



So, what to do?

To complicate matters, Unicode has some explicit control characters that can be embedded in strings when one wants to explicitly state the directionality of all or part of the text.  They can be used to explicitly indicate the direction of a run of text, or override the current general direction of the text. The 8 bidirectional  formatting characters (LRE, RLE, LRO, RLO, PDF, LRI, RLI, FSI, PDI, LRM, RLM, and ALM) need to be interpreted.  See Unicode TR#9 for details.

One strategy is to
  1. Use a library like GNU FriBiDi to convert the string from logical to visual order
  2. Set the terminal program to *not* try to help with bidirectionalization.
So, the FriBiDi function fribidi_log2vis is the important function for this.  There needs to be a Guile function that wraps up the FriBiDi functionality.  There isn't one yet.

Arabic Shaping

Arabic shaping is another one of those topics about which I know almost nothing, but, here's the highlights.

The same Arabic letter can have a different glyph depending on where it appears in a word.  If it appears in the middle of a word, the glyph should join smoothly to its neighboring letters, like English cursive letters.  If it appears at the beginning or end of a word it has a different form.  And it might also look different when it is a single letter not in a word.


Some new terminal emulators are smart enough to do this shaping for you. If it detects an Arabic letter in the middle of a work, it uses the correct glyph.  But if you've asked your terminal to *not* help with bidirectionalization so that the behavior of the ncurses screen locations is still predictable, it is still going to do Arabic letter shaping for you?  I don't know.  It is a mess.

There are other complications.  There are Unicode controls that exist to encourage characters to be joined (ZWJ, for example) or to discourage it (ZWNJ).

In any case, if you need to do shaping manually instead of leaving it to your terminal emulator, again GNU FriBiDi is your goto library for this.  And someone needs to package that for Guile, too.

Line Length and Line Breaking

OK.  You have your string.  It is NFC, untabified, has no nasty control characters in it, and you've decided upon some strategy for bidirectional text.  Next up, we need to figure out how much screen real estate each string takes up, and whether the lines need to be wrapped.

For console programs, each character takes up zero, one, or two cells. Latin letters usually take one cell. Chinese, Japanese, and Korean letters usually take two, as in the following pic.



So how do you tell how many cells a glyph is going to take?  Basically the C library function wcwidth is the basis for this.  It will tell you if a codepoint has a glyph that takes up one cell or two.  Unicode has their own explanation over here: http://unicode.org/reports/tr11/

Guile needs a function to compute the screen width of a line of text.  I like u32_strwidth from GNU Libunistring, and that's a function that needs to be made available to Guile, too.

But this also has some problems.  Some characters have a width that is ambiguous, and should be 2 cells on a screen that mostly consists of CJK text, or should be 1 on a screen that mostly consists of Latin text.  Some example ambiguous width characters are some punctuation or math symbols.  Not all terminals agree on what to do about ambiguous width characters. But I'm not going to solve this problem.

But once one knows how many screen cells a line of text is going to take, it would seem fairly easy to then construct a line-breaking algorithm.  Line breaks need to be put in at all the explicit line breaks of the five line breaking characters CR, LF, NEL, PS, and LS. Remember that CR+LF counts as just a single line break.  And then lines that exceed a desired number of columns need to be broken at plausible locations at the end of words.

There are some other complications.  There are some Unicode characters that are there to prevent line breaking or encourage line breaking: various hyphens, soft hyphens, double hyphens, word joiners.

Hopefully this convinces you that line breaking is not really something you should treat casually.    See Unicode TR #14 for its generic line breaking algorithm.  It is actually quite complex.  In any case, I'm not going to engineer a console line-wrapping algorithm.  I like the one in GNU Libunistring called u32_width_linebreaks() described here. And, again, this isn't available to Guile yet, so I need to package that, too.

But if there were such a function, it would take a string and break it into a list of strings, where each element of the list had one screen line of text.

Alignment and Padding

Alright, now we're at the end of this process.  The last step is padding the string to get the desired alignment.

The default alignment for Latin console text should be to have an aligned left margin and a ragged right margin.  For RTL text is should be to have an aligned right margin and a ragged left margin.  So you need a function that tries to determine the general directionality of a paragraph.

If you want a paragraph of text to be right-aligned or center-aligned, you need to pad the strings on the left with spaces.  To know how many spaces to pad a line, you need to know how many cells a line occupies on the screen.  Again it all goes back to wcwidth and  u32_strwidth as described above.

Next

So I'll come back when I have all the above functionality in some library somewhere, and we'll finally be ready to put some green text in a green box.

by Mike (noreply@blogger.com) at June 04, 2016 04:30 PM