pax_global_header00006660000000000000000000000064147515150060014516gustar00rootroot0000000000000052 comment=f9c906d1378b473ba62af1b0611c240c14a4172f vifm-0.14/000077500000000000000000000000001475151500600124035ustar00rootroot00000000000000vifm-0.14/.gitignore000066400000000000000000000010761475151500600143770ustar00rootroot00000000000000# local automatically generated files /data/vim/doc/app/tags /data/vim/doc/plugin/tags /data/vifm-help.txt /src/compile_info.c /src/runtests /src/test-suite.log # created during build/test process /tests/bin/ /tests/sandbox/ # autotools generated files /autom4te.cache/ /build-aux/config.h /build-aux/config.h.in~ /build-aux/stamp-h1 /src/Makefile /src/runtests.log /src/runtests.trs /Makefile /config.log /config.status .deps/ .dirstamp # *nix executables /src/vifm # compiler output *.o *.d *.gch # code coverage *.gcda *.gcno # windows specific src/*.exe src/*.res vifm-0.14/AUTHORS000066400000000000000000000130271475151500600134560ustar00rootroot00000000000000All suggestions or complaints should be sent to xaizek@posteo.net. Current author is xaizek (since 2011). Original author is Ken Steen (2001 - 2011). The pauseme script (removed in 0.6.3) was from the tkdesk program. Some of the code is from emelfm by Michael Clark. The screen-open-region-with-program and screen-ren-program-in-region were written by Miciah Dashiel Butler Masters. The file sorting function is from the git program by Tudor Hulubei and Andrei Pitis. A patch for filetypes detection was written by Stefan Walter. FreeBSD and NetBSD ports by Stefan Walter. Debian package by Edelhard Becker. Terry Brown wrote part of the keybinding code. Gentoo package by Peter Johanson. Ralf Arens added the configurable color code and rewrote the bookmarks code. Dmitry Suzdalev fixed the :! bug. MacOSX Fink package by Damien Ferrand Karsten Schoelzel - submitted a patch to fix the handling of files with a % in the name. Ali Gholami Rudi - submitted patch fixing buffer overflow in colorschemes. Ondrej Martinak - Patch to fix handling of directories with spaces. Patch for file sizes larger than 4 Gb and to correct typos. pld-linux group patch for malloc in colorschemes Woody Kiang - command completion and wide character support in :commands. Minozake - start vifm --help fix Dan Price - wrote the human friendly file size and the ascending and descending sort. from fork of wsdookadr (Petrea Stefan Corneliu): - %b - unmount all FUSE mounts on exit - functional keys in user mappings - idea of temporary blocking inotify events from very active files seatest is written by Keith Nicholas Patches for Vim plugin and handling of errors from external applications without temporary files by Colin Cartade. Patch that fixes using of invalid (or at least strange) item names in the stat structure by Kaspars Bankovskis. Chris Yuen provided a patch to fix compilation on Mac OS X. Chris Skalenda wrote a patch to allow setting the trash directory location. Miles (pkordy) provided a patch to fix opening of tagged (selected) symbolic links to a directory. Gentoo ebuild by Oleg Gordienko (gordio). Seth VanHeulen (a.k.a. svanheulen) added integration with tmux. MadMaverick9 provided patches for various fixes. lyuts fixed trash emptying in csh-like shells. Patches for Vim plugin by Jonathan Da Silva. More human-friendly (xterm-like) names for 256 colors by Michael Vetter (a.k.a. jubalh). Some build system fixes/updates/best practices by Hendrik Jaeger (a.k.a. henk). Shell completions and patches for Vim plugin, vifm-screen-split, documentation and code by filterfalse. Christian Fillion (a.k.a. cfillion) fixed crash on navigation to end of line in command-line mode. %FOREGROUND FUSE mount flag by Johannes (a.k.a. johannesmeng). Brian Callahan (a.k.a. ibara) fixed build on OpenBSD. Cosmin Popescu (a.k.a. cosminadrianpopescu) added "*" to 'slowfs', match numbers to search messages, :shell!, extension sorting fix, fileext sorting key, dynamic view column alignment. Michel Normand fixed compilation for PowerPC where PAGE_SIZE isn't defined. Dennis Hamester fixed interaction with emacsclient due to reopening terminal as /dev/tty. Svyatoslav Mishyn (a.k.a. juef) aligned options in conflict resolution dialog. oo- added shortcuts to dialogs. Dmitry Frank (a.k.a. dimonomid) provided multiple patches. John Shea (a.k.a. coachshea) provided fix for the plugin related to neovim. Daniel Mueller fixed CWD of the process not matching current view after vifm picked up change in file system and on startup. Ma_Sys.ma implemented 'syncregs' option which defines group of instances that share registers. Konst Mayer (a.k.a. cdlscpmv) dropped leading space from value of 'timefmt'. rbong authored a number of changes that extend functionality of the Vim plugin originally as a separate plugin for neovim, later merged into the main one. zsugabubus provided multiple patches. Von Welch submitted vifm-media-osx script. Richard Benson provided icon for the project (since October 2013). Roman Plášil (a.k.a. Quiark) authored script for converting Vim's color scheme into a Vifm's one. Bas Bossink (a.k.a. basbossink) fixed issues with non-tiny 'shellcmdflag' on Windows. Stephen Horst (a.k.a. sjhorst) fixed adding files with spaces in their names as e-mail attachments in the plugin. Hans Bieshaar added HardLink highlight group. Alborz Jafari added rate and progress bar to progress dialog. pkgs/AppImage/* provided by michaellee8. M Kelly fixed inability to map escape sequences due to extended keys in terminfo database and added notation for some shifted keys. Phil Runninger helped to provide target information for drives in :volumes menu. qsmodo contributed multiple patches. Hescalalu provided icon for the project (since July 2021). Completion for fish shell by Hoang Nguyen (a.k.a. FollieHiyuki). Alexandr Keyp (a.k.a. IAmKapuze) contributed improvements for :compare. 高浩亮 (a.k.a. haolian9) enabled mouse handling, fixed displaying and completion of foreign :commands in `:[del]command` and allowed mapping to Ctrl-Z. Zhipeng Xue fixed a couple of potential NULL dereferences. Rostislav Tolushkin (a.k.a. nullptr-deref) implemented :regedit command. Marcin Kurczewski (a.k.a. rr-) fixed limited size of IPC buffer. voh9eepah fixed available file-system space size on FreeBSD. Vadim Curcă added middle ellipsis to view columns and fixed search match highlighting when the match is cut off due lack of space. Ivan Shapovalov fixed running external commands which start with a dash. vifm-0.14/BUGS000066400000000000000000000025301475151500600130660ustar00rootroot00000000000000* Better to check for existence of $HOME. * Duplicate detection lags in custom views on :substitute. * filextype is useless on OS X. * :clone! is useless. * Hard copies of files are counted multiple times for ga/gA. * Paths beyond MAX_PATH limit are not processed with 'syscalls'. * :change->Name renames only one file even when several are selected. * There is no sshfs like FUSE for servers that provide only scp. * inotify fails to recognize change of replaced directory. * Trailing "\ " in :map commands prevents cutting of the space. * noremap shows wrong keys? * "*" at the beginning of a glob doesn't match empty string. * :filetype checks don't expand ~ and environment variables. * 'chaselinks' resolves mount points on Windows, should it? * :apropos command doesn't escape its arguments. * gid/uid are displayed as -1 on some file systems. * Command-line doesn't work well with file names in encoding that doesn't match locale when they fail to convert to wide encoding. * On systems with BSD-like chmod, setting executable bit for directories only doesn't work. * Access time of directories might not be preserved on OpenBSD on copying when 'syscalls' is on, this is some subtle issue, because the code looks fine. * Commands starting with a dash don't work in fish shell and maybe some other non-POSIX shells which have `-c` option accept a value. vifm-0.14/COPYING000066400000000000000000000432541475151500600134460ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. vifm-0.14/COPYING.3party000066400000000000000000000336141475151500600146660ustar00rootroot00000000000000Sections bellow separated with `======` list files affected by some copyright with that copyright following. ================================================================================ src/compat/getopt_int.h -------------------------------------------------------------------------------- src/compat/getopt.h -------------------------------------------------------------------------------- src/compat/getopt.c -------------------------------------------------------------------------------- src/compat/getopt1.c -------------------------------------------------------------------------------- Copyright (C) 1987-2015 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . ================================================================================ src/compat/mntent.c -------------------------------------------------------------------------------- Copyright (c) 1980, 1989, 1993, 1994 The Regents of the University of California. All rights reserved. Copyright (c) 2001 David Rufino Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by the University of California, Berkeley and its contributors. 4. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================================================ src/compat/mntent.h -------------------------------------------------------------------------------- Copyright (c) 2001 David Rufino All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================================================ src/compat/reallocarray.c -------------------------------------------------------------------------------- Copyright (c) 2008 Otto Moerbeek Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ================================================================================ src/compat/wcwidth.c -------------------------------------------------------------------------------- src/utils/utils.c (unichar_bisearch() function) -------------------------------------------------------------------------------- Copyright (C) Markus Kuhn -- 2007-05-26 (Unicode 5.0) Permission to use, copy, modify, and distribute this software for any purpose and without fee is hereby granted. The author disclaims all warranties with regard to this software. Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c ================================================================================ src/lua/lua/* -------------------------------------------------------------------------------- Copyright (C) 1994-2020 Lua.org, PUC-Rio. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================================================ src/utils/xxhash.c -------------------------------------------------------------------------------- src/utils/xxhash.h -------------------------------------------------------------------------------- xxHash - Extremely Fast Hash algorithm Copyright (C) 2012-2020 Yann Collet BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. You can contact the author at: - xxHash homepage: https://www.xxhash.com - xxHash source repository: https://github.com/Cyan4973/xxHash ================================================================================ src/utils/parson.c -------------------------------------------------------------------------------- src/utils/parson.h -------------------------------------------------------------------------------- SPDX-License-Identifier: MIT Parson 1.0.2 ( http://kgabis.github.com/parson/ ) Copyright (c) 2012 - 2019 Krzysztof Gabis Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================================================ src/helpztags -------------------------------------------------------------------------------- Author: Jakub Turski Artur R. Czechowski ================================================================================ data/plugins/zsh-complete/capture.zsh -------------------------------------------------------------------------------- The MIT License (MIT) Copyright (c) 2015 Vincent Breitmoser Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================================================ src/utils/utf8proc.c src/utils/utf8proc.h src/utils/utf8proc_data.inc -------------------------------------------------------------------------------- /* * Copyright (c) 2014-2021 Steven G. Johnson, Jiahao Chen, Peter Colberg, * Tony Kelman, Scott P. Jones, and other contributors. * Copyright (c) 2009 Public Software Group e. V., Berlin, Germany * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ /* * This library contains derived data from a modified version of the * Unicode data files. * * The original data files are available at * https://www.unicode.org/Public/UNIDATA/ */ vifm-0.14/ChangeLog000066400000000000000000007304311475151500600141650ustar00rootroot000000000000000.14-beta to 0.14 (2025-02-08) Improved documentation on zh/zl menu keys a bit. Corrected documentation on how the use of different preview macros affects classification of a previewer. Say "changed" when describing the meaning of "showdifferent" of :compare. Thanks to aleksejrs. Improved wording of descriptions for :compare's show* parameters. Fixed absolute paths comparing equal to similar relative paths (regression in 0.14-beta). Fixed single quotes escaping for completion of option values via `opt='` (related to a change in 0.14-beta). Fixed quotes not being escaped on completion of option values via `opt=`. Fixed output of :highlight command truncating names of some colors. 0.13 to 0.14-beta (2025-01-19) Changed --with-gtk flag to --with-glib (old name is still available). GTK was pulled in by mistake, only GIO/GLib was ever used... Changed %N macro to not be mutually exclusive with most of other macros (the limitation wasn't documented and didn't make much sense). Thanks to James Dietrich. Changed handling of Ctrl-Z to not suspend the application if a corresponding user mapping exists. Patch 高浩亮 (a.k.a. haolian9). Changed behaviour on failure to evaluate an expression of :if or :elseif. Previously this resulted in trying to execute any commands until and including :endif (all branches taken). Now everything up to :endif will not be executed (no branches taken). Thanks to Ed Pavlov. Changed default value of 'findprg' to avoid the use of syntax specific to GNU find. The only difference is that now one can see "Permission denied" errors which weren't displayed before. Sample vifmrc files contain detection of GNU find on startup. Thanks to Jose Riha (a.k.a. jose1711). Changed initialization to not create a copy of rendered man page at $VIFM/vifm-help.txt, :help now opens the original file. Thanks to intelfx. Changed filetype() to accept path in its first parameter. This means that passing it something like "15abc" will no longer be interpreted as 15. Thanks to MikeLemon. Added command-line history to menu mode. Added "mchistory" value to 'vifminfo' and 'sessionoptions' option. It manages storing of command-line history of menus. Added ":history mcmd" menu for displaying command-line history of menus. Added :col[der] and :cnew[er] commands to menu mode to traverse history of navigation menus. Added :chi[story] command that opens a menu of saved menus. Added :chi[story] command to menu mode. Added 'hloptions' option to configure which view colums get affected by file highlighting. Thanks to qsmodo. Added "column:{name}" form of argument to :highlight command to specify style of a separate column. Thanks to Anton Gepting. Added "millersep:" value to 'fillchars' that allows customizing the border between miller columns. Thanks to Shuo (a.k.a. shenqshuoh). Added :gr[ep] command to menu mode. Allows (re)running grep command on the same set of files without leaving the mode. Added :fin[d] command to menu mode. Allows (re)running find command on the same set of files without leaving the mode. Added middle view column alignment (specified by "^" in 'viewcolumns' option). Part of the text is replaced with ellipsis to keep both start and end visible. Patch by Vadim Curcă. Added escape() builtin function to escape specific characters in strings. Thanks to The Cyberduck. Added :wingo command to navigate to a view by substring matching against its title or path. Thanks to iSeeU816 and Alexandre Viau. Added :cal[l] command to run a function discarding its return value. Thanks to anyone asking about simply running a function. Added :o[pen] command to open current file, selection or range as if Enter was pressed. Thanks to Safal Piya (a.k.a. mrsafalpiya). Added 'wildinc' option that defines which :commands should be completed as they are edited. Added WildBox highlight group. It can be used to set background of completion window. Added a statusbar message and a dialog to warn about an upcoming fix for strings in conditional expressions (e.g., `if $VAR` checks for `$VAR` being non empty instead of converting it to an integer). Thanks to justpretending2. Added handling of Enter/Escape keys to prompts and error dialogs. Thanks to laur89, Alexandre Viau and multiple other users who asked about this. Added global variables (with "g:" prefix) to avoid using environment variables in their place as a workaround. Added inode number to File Info dialog. Added selected() builtin function which returns number of currently selected files. Added [S and ]S shortcuts as wrapping versions of [s and ]s. Thanks to aksr. Added v:version builtin variable that exposes version as an integer which can be meaningfully compared. Thanks to an anonymous at Vifm Q2A site. Added a way to insert "}" inside of %{expr} macro of 'statusline'. Thanks to vuenn. Added 'uioptions' option with possible "iodetails" value to display progress dialog by default. Thanks to Ralf Schmitt. Don't draw right padding on a truncated rightmost column of a transposed ls-like view. Made register's content being listed in normal rather then reversed order in :registers/:display menu. Don't attempt clearing graphics when menu-like mode is active. The graphics should have been hidden on entering the mode. Allowed wild menu popup to take up up to 40% of the screen. Made documentation of 'vifminfo' more readable. Rewrote "Menus and dialogs" part of the documentation. Increase line length limit used during formatting output of :highlight command to allow longer strings. Display number of color pairs in use in :version/:vifm menu. Don't show a message at the end of 'incsearch' if the cursor was moved not by the search. Patch by filterfalse. Clarified documentation on column literals and escaping. Thanks to chelovechishko. Allow and skip !/!! prefix of custom external :commands for more macros (%S, %q, %i, %m, %M, %s, %v, %u, %U, %Iu, %IU). Slightly expanded documentation on %N macro. Thanks to James Dietrich. Made Tab and Shift-Tab in interactive search prompts (including when navigating) move cursor to next/previous search match. Thanks to David Sierra DiazGranados (a.k.a. davidsierradz). Somewhat improved documentation on functional keys. Updated autotools scripts to their newer versions. Thanks to phanium (a.k.a. phanen). Perform sorting of completion items after doing Unicode normalization. Perform sorting of file names after doing Unicode normalization. Thanks to hacksenwerk. Made :compare treat non-regular files (pipes, sockets, etc.) as empty. Slightly improved performance of comparing files by content. Configure 'vifminfo' in sample vifmrcs to store most of the things in vifminfo by default (add missing histories and tabs). Thanks to Christoph Schmidpeter. Adjusted heuristic for determining previewer type to allow use of %px and %py with %pd without any implications. Thanks to iambumblehead. Document how the use of different preview macros affects classification of a previewer. Thanks to iambumblehead. When processing multiple files in background, show current position in the list on the job bar. Shorten home directory in paths shown on the job bar. Commented out one of MC-like shortcuts in sample vifmrc files, Ctrl-U, to avoid confusing Vim users with default configuration. Thanks to midrare. Made vifm-media not offer partitioned drives as they aren't mountable as a whole. Extended vifm-media script to support MTP devices if simple-mtpfs tool is installed. Thanks to FlyCat (a.k.a. yanwh0311) and Alexandre Viau. Allowed moving files via :rename (requires an interactive confirmation). Thanks to aleksejrs. Made completion of an option with its current value work not only on `opt=`, but also on `opt='` and `opt="`. Thanks to aleksejrs. Provide numerical value of a color as a description of a completion item for it. Made :goto preserve custom and tree views. Thanks to Svetlozar Iliev (a.k.a. asmodeus812). Improved error message on trying to :unlet a builtin variable. Extended logging on spawning a command via a shell. Thanks to Henrik Holst (a.k.a. hholst80). Expand environment variables in the arguments of :mark command. Thanks to an anonymous at Vifm Q2A site. Improved detection and reporting of invalid mark name by :mark command. Updated ncurses in AppImage to 6.5. Don't overwrite $TERMINFO in AppImage, set/append to $TERMINFO_DIRS instead. Thanks to anonymous at Vifm Q2A site. Upgraded to PDCurses 3.9 (was 3.8) for Windows. Combined with some other changes this improves the situation with handling of CJK characters. Thanks to zzx41375004, vodbyte, Jeremy Yuan and others. Constrained background error dialogs to appear only in normal mode when not much is going on. Fixed line number column not including padding to the left of it. Fixed local options not being loaded on Ctrl-W x. Fixed graphics of view mode not being hidden on activating menu, more or file info modes. Fixed descriptions of exit :commands in menus (visible during popup completion). Fixed statusbar output not being preserved on running commands from :history menus. Fixed not being able to pick a symbolic link to a directory via --choose-files or --on-choose by selecting and opening it. Fixed 'slowfs' option not being applied to targets of symbolic links on operations related to directory sizes. Thanks to rok (a.k.a. aca). Fixed running long shell commands when fish is used. Caused by its inability to understand that "${var}" is the same as "$var". Thanks to aleksejrs. Fixed a historical omission of Ctrl-G not being available in some prompts: file rename on conflict; owner, group and symbolic link target change. Thanks to Branislav Gerazov. Fixed display issues or a crash when using a terminal with more than 32768 color pairs. Thanks to iboggs and itshog. Fixed performance degradation after preview consumes lots of color pairs. Fixed running tests with musl libc. Thanks to Henrik Holst (a.k.a. hholst80). Fixed IPC payloads larger than 8155 bytes. Patch by Marcin Kurczewski (a.k.a. rr-). Fixed abort on instance sending something over IPC to itself. Thanks to Marcin Kurczewski (a.k.a. rr-). Fixed "N files selected" message appearing in menus on waiting for multikey input (regression in 0.12-beta). Fixed %a 'statusline' macro on FreeBSD producing wrong values. Patch by voh9eepah. Fixed %a 'statusline' macro producing wrong values on non-Linux Unix-like systems. Thanks to voh9eepah. Fixed graphics not being cleared on switching to single-pane view. Thanks to ret2src. Fixed merging directories on copying not asking for overwrite confirmations. Thanks to aleksejrs. Fixed skipping of file move during merging aborting the whole operation. Thanks to aleksejrs. Fixed expansion of abbrevs that leave command-line mode. Patch by filterfalse. Fixed completion of :cabbrev not using bracket notation in expansion. Fixed `<` not being turned to `` on displaying right-hand sides. Fixed description of empty abbreviations being empty instead of ``. Fixed tiny memory leak on trying to list abbreviations when there are none. Fixed `:[un]select !` treating "" as an external command. Fixed !! not affecting commands that include %s or %v macro. Thanks to James Dietrich. Fixed parsing of comma-separated lists hanging on empty last element and skipping leading commas. Fixed output formatting of :autocmd (pattern negation broke column alignment and wrapping). Fixed environment variables not being expanded on checking that a :file[x]type or :fileviewer command exists in $PATH. Thanks to Ben Elan. Fixed search match highlighting when the match is cut off due lack of space. Patch by Vadim Curcă. Fixed running tests with locales that use comma for decimal point. Thanks to PRESFIL. Fixed foreign commands missing from `:command {prefix}` output. Patch by 高浩亮 (a.k.a. haolian9). Fixed foreign commands missing from completion of `:[del]command {prefix}`. Patch by 高浩亮 (a.k.a. haolian9). Fixed documentation on yy, Y, dd and DD not mentioning how "s" flag of 'cpoptions' affects their behaviour. Thanks to James Dietrich. Fixed FUSE mounter error message dialog missing newlines (regression in 0.13-beta). Fixed "Querying... (??%)" message on :compare having an extra space in parenthesis. Fixed potential integer overflows on sorting. Fixed weird sorting of filenames with non-Latin characters when 'sortnumbers' option is set and strverscmp() is not provided by the system (like on Windows). Fixed :compare hanging on trying to compare non-regular files like pipes by contents. Fixed :compare reporting identical files as changed when there were more than a couple of files with identical size and 4096-byte prefix. A regression in 0.13-beta. Thanks to Alexandr Keyp (a.k.a. IAmKapuze). Fixed stream redirection issues with background jobs on Windows (those created via `:!cmd &` or in Lua) if the application was closing one of standard streams. Fixed colors sometimes (rarely) changing in seemingly random ways. Fixed :jobs showing some already dead jobs as running. Fixed running external commands which start with a dash. Patch by Ivan Shapovalov. Fixed absolute paths not being completed when 'autocd' option is enabled. Mind that it can't work on Windows due to ambiguity between a command and a full path there. Thanks to Taras Halturin (a.k.a. halturin). Fixed individual error messages when 'syscalls' is on lacking system error string which is present when errors are aggregated at the end of an operation. Thanks to an anonymous at Vifm Q2A site. Fixed `data/vifmrc` next to vifm.exe being used as global vifmrc file on Windows. Thanks to midrare. Fixed vifm-media script not listing external drives with udevil and udisks. Fixed vifm-media script not listing removable drives with udisks marked as non-removable by udisks. Fixed incorrectly determining whether a directory is writable on Windows (primarily C:\ could be reported as non-writable). Thanks to theorlangur and bitraid. Fixed :substitute, :tr, gu* and gU* detecting a non-existent target name conflict when rename in a custom view would produce an identically named files in different directories. Thanks to aleksejrs. Fixed lack of a redraw after running :substitute, :tr, gu* or gU* in a custom view. Fixed a leak of error message string when using `:rename new-names...`. Fixed :rename not recognizing identical paths in source and destination lists if they were edited (e.g., to contain extra slashes, "./" or "../"). Fixed weird character appearing on Ctrl-Space combination in command-line mode. Fixed :restart leaving histories disabled unless 'history' is set to a non-default value in vifmrc. Thanks to James Dietrich. Fixed processing of file names and paths that undergo escaping in the UI, like inability to externally rename them (regression in 0.12.1 beta). Thanks to jc-SpaceXp. Fixed rules for handling of selection by :file[x]type not taking %"c/%"C/%"f/%"F macros into account (relevant mostly to Windows). Thanks to smoothdad. Fixed unreliable internal checks for %pd, %px, %py, %pc and %r macros. Previously they could be found in something like "%%pd", which should not be interpreted as %pd. Fixed registers' content of multiple instances not being synchronized on use of %"r macro. Fixed a crash after a memory corruption when running an external command via expansion of an environment variable when 'fastrun' is set (e.g., `!$EDITOR`). Thanks to Quaddroo. Fixed :elseif evaluating its expression even if an earlier conditional branch was already taken. Fixed loading a session with global tabs when 'tabscope' is "pane" resulting in global tabs being invisible. Fixed statusline having invalid colors when 'wildstyle' is "bar" and completion is initiated by Shift-Tab. Fixed Ctrl-A and Ctrl-E in command-line mode not stopping completion unlike other similar keys. Fixed directories not being accounted for in estimates. Thanks to justpretending2. Fixed global version of 'viewcolumns' not validating its value. Thanks to Vadim Curcă. Fixed `&&` operator which was acting as binary `&` (in terms of evaluation, the result was properly boolean). Thanks to justpretending2. Fixed use of environment variables in :if in sample vifmrc file. Checking for an empty string should be done explicitly with `==` or `!=`. Thanks to justpretending2. Fixed Escape being handled as Ctrl-C in prompts which suppresses future errors. Fixed outdated documentation on the behaviour of n/N when 'hlsearch' is enabled since the introduction of highlighting of search matches. Thanks to James Dietrich. Fixed /usr/share/terminfo not being consulted when running from an AppImage. Thanks to anonymous at Vifm Q2A site. Fixed system() and term() not taking 'shell'/'shellcmdflag' into account on Windows. Thanks to spence91. Fixed a race condition on displaying errors of a job in :jobs menu. 0.13-beta to 0.13 (2023-04-04) Made "withicase" and "withrcase" affect how files are sorted before comparison, otherwise they might not produce the intended effect. Reduced cursor flickering during incremental search in visual mode. Patch by filterfalse. Fixed segfault on trying to expand "~username" path prefix with a huge length of the user name. Fixed user mappings replacing a mapping from Lua in an incomplete way which could lead to assertion or some unpredictable behaviour. Fixed map menus not listing mappings that accept a selector. Fixed handling mouse events in normal and view modes in single pane mode. Fixed :hideui not hiding anything on Windows. Thanks to Ed Pavlov. Fixed segfaults on changing sibling directory or previewing directories in miller view while global sorting by groups is active. Patch by filterfalse. Fixed cl processing selection it was used previously on instead of file under cursor when you run it twice in succession. Fixed graphics from miller view preview remaining visible when displaying dialogs, entering menus, switching tabs, activating more or file info modes. Fixed "rpreview:" of 'milleroptions' not being copied to new tabs. Fixed selection not being stashed by do and dp. Fixed memory issues inside ncurses when dialog is displayed in menu mode after resizing the terminal. 0.12.1 to 0.13-beta (2023-03-17) Changed implementation of `:compare grouppaths` to juxtapose only files with identical relative paths. Patch by Alexandr Keyp (a.k.a. IAmKapuze). Changed use of `$(filter-out)` in src/Makefile.am to `$(var:from=to)` substitution to get rid of a warning on configuration. Changed how pthread support is detected by configure script to handle more cases. Thanks to Markus Elfring (a.k.a. elfring). Changed configure script to fail if neither perl nor vim is available instead of failing to generate tags for Vim-style documentation. Thanks to Sergei Trofimovich (a.k.a. trofi). Changed %N macro to also not start a process group for a command. Thanks to Oskar Grunning (a.k.a. sQVe). Changed error reporting for some of the :commands such that now their failures cause a dialog to appear on sourcing, previously those errors were printed only to status bar. Added "withicase" and "withrcase" to :compare that force ignoring and respecting case respectively on comparing file names and paths. Thanks to Jose Riha (a.k.a. jose1711). Added printing stats while in :compare mode. Patch by Alexandr Keyp (a.k.a. IAmKapuze). Added "columncount:" value to 'lsoptions' to always display fixed number of columns. Thanks to Aleksandr Vysotskiy (a.k.a. loki1368). Added show* arguments to :compare command to control/switch which sets of files are displayed (toggling is done by :compare!). Patch by Alexandr Keyp (a.k.a. IAmKapuze). Added builtin handling of mouse events. Patch by 高浩亮 (a.k.a. haolian9). Thanks to ranousse, Sergei Shilovsky and user451421541757324. Added 'mouse' option to control when mouse input is handled (not handled by default). Added input() builtin function to prompt user for input. Thanks to Artur F. (a.k.a. arturfabriciohahaedgy). Added ETA to detailed progress dialog. Thanks to Jose Riha (a.k.a. jose1711). Added `--plugins-dir` command-line option which allows specifying additional places to look for plugins. Thanks to 高浩亮 (a.k.a. haolian9). Added Ctrl-Y key to command-line mode. It activates fast navigation that allows entering deep paths by a series of searches for individual path components. Thanks to Henrik Holst (a.k.a. hholst80) and dmocek. Added Ctrl-J key to command-line navigation. It leaves the mode without opening a file/directory. Thanks to filterfalse. Added Ctrl-O key to command-line navigation that goes to parent directory. Added Ctrl-N/P keys to command-line navigation to move view cursor up/down. Thanks to Henrik Holst (a.k.a. hholst80) and dmocek. Added Arrows/Home/End/Page Up/Page Down keys to command-line navigation to move view cursor. Thanks to Henrik Holst (a.k.a. hholst80) and dmocek. Added :amap, :anoremap and :aunmap commands to configure mappings in navigation mode. Thanks to Henrik Holst (a.k.a. hholst80) and dmocek. Added 'navoptions' option to allow tweaking navigation mode a bit. Thanks to filterfalse. Added "rpreview:files" to 'milleroptions'. Thanks to aksr. Added r key to :jobs menu, which reloads the list of jobs. Thanks to Sylwia Ptasinska (a.k.a. SylEleuth). Added :regedit command for external editing of register contents. Thanks to Daniel J. Perry (BioBox). Patch by Rostislav Tolushkin (a.k.a. nullptr-deref). Added additional User10..User20 highlight groups and corresponding %10*-%20* macros. Thanks to Sylwia Ptasinska (a.k.a. SylEleuth). Added 'tabline' option to specify format of the tab line. Added filereadable() builtin function mainly as a way to check file's presence. Reduced amount of memory consumed by `:compare groupids`. Made `:compare bycontents` not bother reading content of files which have unique size. Provide basic instructions in the documentation on how mappings work. Thanks to dmocek. Extended do and dp keys to process selection. Thanks to Mark S. (a.k.a. Markuzcha). Apply file highlighting to "ext" and "fileext" view columns. Thanks to aleksejrs. Made instances running inside AppImage consider contents of `/etc/vifm`. Thanks to aleksejrs. Made Ctrl-E/Ctrl-Y scroll transposed ls-like view horizontally by one column. Install icons also to ${prefix}/share/icons. It's not clear that using ${prefix}/share/pixmaps will always be handled properly. Thanks to Szilárd Andai. Made feedback after pressing dd in :jobs more prominent. Thanks to Sylwia Ptasinska (a.k.a. SylEleuth). Merged file conflict comparison dialog into the main conflict dialog. Thanks to aleksejrs. Made file conflict more concise. Thanks to aleksejrs. Update Default-256 to differentiate between more file types. Thanks to aleksejrs. Don't move cursor on search failure during search with a count. Patch by filterfalse. Specified a few more cases when to show a search message with search highlighting turned on: if found a match, if wrapping is turned on, and in visual mode. Patch by filterfalse. A regular search logic showing messages is applied to n/N. Patch by filterfalse. Made aborting deletion abort the operation on the rest of files when deleting multiple files. Fixed segfault on trying to use pipe from Lua after its parent VifmJob object was garbage-collected. Thanks to PRESFIL. Fixed check for broken symlinks in :edit command. Fixed positioning hardware cursor in transposed ls-like view. Fixed width of file names that don't fit into ls-like column being larger than the width of other files. Fixed ellipses being lost in side columns of miller view. Fixed 'previewprg' not being respected on switching to view mode (regression in 0.12-beta). Thanks to Sitaram Chamarty. Fixed $VIFM_APPDIR_ROOT being ignored by :help command, which made it not work properly from AppImage. Thanks to infinitewhileloop. Fixed escaping of file paths when using 'vicmd' or 'vixcmd' to open a file on Windows. Thanks to Phil Runninger. Fixed :locate never escaping its arguments (should be done unless the first one starts with a dash). This is a regression in 0.7.6. Fixed trash directory being created at default location on :restart. Fixed abort due to assertion failure on using zx normal mode key after leaving tree in some cases. Thanks to Mark S. (a.k.a. Markuzcha). Fixed asynchronous previewing of symbolic links, which required manual redraw. Thanks to Alexandre Viau. Fixed fish completion not completing paths for `--choose-files` and `--choose-dir` options. Fixed a "benign" data race on ga/gA. Fixed error of :cunabbrev not being visible to the user. Fixed segfault on passing invalid tag to :delbmarks. Fixed :echo printing previous message when invoked without arguments. Fixed Ctrl-E in visual mode not doing anything when view is scrolled to its top. Fixed 'milleroptions' not recovering value of "rpreview:" on error. Fixed FUSE mounting assuming `2>` redirection is supported by the shell, which isn't true at least for csh and tcsh. Thanks to Evgeniy (a.k.a. iron-udjin). Fixed :media not redrawing on reloading ("r" key) and also wasn't repositioning cursor properly when menu length shrinks as a result of a reload. Fixed stashing visual mode selection on transition from visual amend mode to regular visual mode (av -> v). Patch by filterfalse. Fixed dropping normal selection on incremental search in visual amend mode. Patch by filterfalse. Fixed input bar not being updated in visual mode if any status bar message has been shown. Patch by filterfalse. Fixed error/prompt dialogs not reaching maximum allowed height. Fixed "<>" message in dialogs reporting wrong number of lines and sometimes hiding a single line. Fixed dialogs not handling non-latin characters well. Fixed :source producing too many errors when specified path doesn't exist. Fixed n/N not moving the cursor without prior search in visual mode. Patch by filterfalse. Fixed showing wrong match number instead of error message on search in visual mode. Patch by filterfalse. Fixed resetting 'hlsearch' during incremental search in visual mode. Patch by filterfalse. Fixed dropping selected files on empty input during incremental search in visual mode. Patch by filterfalse. Fixed resetting count to 1 during incremental search in normal mode. Patch by filterfalse. Fixed description of %i macro in the documentation to mention that it runs command in background. Fixed the last search direction not being saved on search performed from non-normal mode. Patch by filterfalse. 0.12.1-beta to 0.12.1 (2022-09-21) Added shell completion for fish shell. Patch by Hoang Nguyen (a.k.a. FollieHiyuki). Permit directories with trailing slashes supplied by external commands in `:[un]select !cmd`. Patch by filterfalse. Fixed prefix mappings being left after removing a key (e.g., "a" remaining after mapping and unmapping "ab"). Patch by filterfalse. Fixed infinite loop on restoring visual selection after changing the order of files to the opposite (`:invert o`). Patch by filterfalse. Fixed 'sort' and 'sortorder' string representations not being updated after `:invert o`. Patch by filterfalse. Fixed memory leak on using 'cdpath'. Fixed NULL pointer dereference on parsing desktop files, if no MIME type recognizers are available. Patch by filterfalse. Fixed "load" subcommand of :plugin not being completed. Fixed not being highlighted after :cnoremap and :cmap. Fixed parts of graphics being left on entering menu mode. Fixed %i without " &" preventing some applications from running by closing their standard output and error. Thanks to Daniel J. Perry (a.k.a. BioBox). 0.12 to 0.12.1-beta (2022-09-05) Changed conflict dialog to offer "Merge all" option even for files if there are some directories left to process. Thanks to dalvand. Changed how location of trash directory is determined. Now starting `vifm --no-configs` won't mess anything up if you're using `~/.vifm`. Can potentially cause some trouble for existing configurations, but shouldn't. Changed [c and ]c to also traverse added/missing entries. Thanks to qsmodo. Added 'autocd' option. Makes invalid :commands be interpreted as an implicit :cd command. Thanks to Taras Halturin (a.k.a. halturin). Added %N macro that prevents detaching viewers from current session. Thanks to emorozov. Added cl key visual mode (similar to its function in normal mode). Added handling of "-" in :session for switching to a previous session. Added %pu macro that disables caching of viewer's output. Thanks to b0x4it. Added comparison action to conflict resolution dialog. Thanks to anonymous at Vifm Q2A site and dalvand. Added :keepsel command. Changes default behaviour after running a :command to not reset selection of a view. Thanks to dalvand and sharklasers996. Added -skip parameter to :copy/:move/:alink/:rlink. Makes the commands automatically skip files that exist at destination instead of refusing to proceed. Thanks to Jose Riha (a.k.a. jose1711). Added "datasync" value to 'iooptions' option to configure whether writes on file copying when 'syscalls' is on are synchronized periodically. Thanks to Andrew Savchenko and Afz. Added angle-bracket notation for alpha keys with Alt and Shift modifiers (<[am]-s-[a-z]>, ). Thanks to Reece Petersen. Added angle-bracket notation for numeric keys with Alt modifier (<[am]-[0-9]>). Thanks to anonymous at Vifm Q2A site. Added expression pseudo-register (Ctrl-R =) for command-line mode. Thanks to Marcos Cruz and Jiji from Vifm Q2A site. Added "ehistory" value to 'vifminfo' and 'sessionoptions' option. It manages storing of expression register history. Added ":history exprreg" menu for displaying history of expression register values. Added optional border for horizontal split layout controlled by newly added "hborder" in 'fillchars'. Patch by qsmodo. Added "maxtreedepth" value to 'previewoptions' option, which allows limiting depths of the displayed tree. Thanks to Afz. Added %o macro to 'statusline', which expands to Unix permissions in octal form (and to nothing on Windows). Thanks to iSeeU816. Added initial support for Yori shell on Windows (not everything might work well at this point). Thanks to LinArcX. Added angle-bracket notation for some shifted grey keys: , , , , , , , , , . Patch by M Kelly. Added %l/%"l and %L/%"L macros for the list of selected files. %f is not empty if there is no selection, which is not always desirable. Thanks to ratnamhof. Added parsing of \c and \C sequences in regular expressions to force case ignoring or matching respectively. Thanks to filterfalse and Safal Piya (a.k.a. mrsafalpiya). Added :PeditVifm command (and corresponding :PeditVim) to the plugin. Thanks to Mukund Mauji (a.k.a. maujim). Added CmpUnmatched and CmpBlank highlight groups. Thanks to qsmodo. Extended optimizations for globs to cover `something*` and `some*thing` cases. Updated xxHash to 0.8.0 and switched to XXH3 variant. Extended has() builtin function to check for Lua handlers. Extended cl normal mode key to handle selection of multiple files. Thanks to aleksejrs. Hide graphics when displaying dialogs or entering menus, more or file info modes. Thanks to heelsleeh and PRESFIL. More consistent spelling of "status bar" and "status line" in documentation. Thanks to tcftbl. Document that key might correspond to . Thanks to dalvand. Don't expand() macros in environment variables. Patch by filterfalse. Try several editors and then $EDITOR for 'vim' option in sample vifmrc files. Thanks to Janek (a.k.a. xeruf) and Muhammed Zakir. Include unprintable Unicode code points in the set of characters escaped in file names and start escaping them in file view. Patch by MadMaverick9. Escape unreadable characters in menus, command-line mode, dialogs and statusbar messages. Thanks to MadMaverick9. Set `title` option by default if $TERM is foot* as its terminfo entry might lack tsl and fsl attributes. Thanks to nobodyatandnothing. Display permissions in octal form in File Info dialog and group them with owner/group info. Thanks to iSeeU816. Made gs normal mode key remember selection for up to 10 last entered directories. Thanks to ratnamhof and Matthias Braun (a.k.a. mb720). Reformat File Info dialog to be more compact. Thanks to chelovechishko. Do not reset selection on :view command. Thanks to Alexandre Viau. Fixed cursor appearing at random places on entering command-line mode. Fixed flicker and loosing parts of input on incremental search in menus. Fixed ruler flickering on typing during incremental search in menus. Fixed severe performance degradation after measuring size of large directory trees. Fixed building when fdatasync() call isn't available. Thanks to Schrijvers Luc (a.k.a. Begasus). Fixed flicker of status line on editing in command-line mode. Fixed resolving symlinks to symlinks on checks for regular file. Thanks to Olmo Kramer. Fixed :goto command not positioning cursor correctly if provided on command-line. Thanks to Toan Nguyen (a.k.a. toan2406). Fixed --remote and --remote-expr failing if $TERM isn't valid (regression in 0.11-beta). Thanks to b0x4it. Fixed `:compare listunique` yielding different results depending on which view is active due to not processing bottom files in the current view in some situations. Fixed information about implicit file selection (count or ranges) being lost due to the use of expand() builtin function in 'statusline'. It was fixed previously, but the fix got undone prior to the release. Thanks to dalvand. Fixed expand() requiring backslashes to be escaped twice (once for environment variable expansion and once for macro expansion), which isn't convenient nor intuitive. Fixed truncation of the dollar sign during expansion of non-existent environment variables. Patch by filterfalse. Fixed assertion failure on processing mappings with RHS of the form "{mapping with selector}{something else}". Thanks to dalvand. Fixed search and local filter values set from :history menu being split at bar (|) and each piece applied in turn. Fixed losing visual mode selection after executing two command-line commands where the first one enters visual mode and the second one implicitly resets selection. Thanks to dalvand. Fixed background :copy/:move handling broken symlinks as non-existent files during the operation (which wasn't happening if such file was there initially). Fixed write to a pipe of a closed process in Lua causing SIGPIPE and termination of the application. Fixed :. incorrectly checking for one path being parent of another and producing weird results ("/pa" was considered parent of "/path", with "th" being the result). Thanks to Dennis Preiser (a.k.a. 0xDP). Fixed displaying empty matches at the start/end of menu items. Fixed displaced search highlighting when horizontal scrolling hid multi byte text. Fixed completion of broken filenames (those for which encoding to wide character fails) causing memory corruption. Fixed running :set from autocommands triggered during processing of vifmrc changing options for all views. Thanks to Alexandre Viau. Fixed handling errors on :mkdir with 'syscalls' set. They weren't displayed and retry/ignore/abort prompt wasn't presented. Fixed segfault on ignoring an error from :touch with 'syscalls' set. Fixed operations ignored via retry/ignore/abort prompt still being added to undo history. Fixed graphics not being cleared properly on switching between viewers in view mode. Fixed externally edited prompt not being saved to history. Fixed completion of command-line prompts breaking input at pipe symbol (|). Fixed resetting 'fillchars' option and separate values. Again, this one is cursed. Fixed borders not being filled after loading an empty color scheme. Fixed directory preview resetting after detaching from it. Thanks to Luka Markušić (a.k.a. mark2185). Fixed conflict dialog offering merging on rl and al normal mode commands. Fixed :restart creating trash directory in incorrect location on Windows in some cases. Fixed argument escaping issues for foreground programs on Windows. Thanks to fohrums. Fixed slashes being doubled in macros like %"c on Windows with cmd.exe as a shell. Thanks to Toby Hawkins (a.k.a. HawkinsT). Fixed auto-detection of GUI programs on Windows, which prevents Vifm from waiting on them to finish. Thanks to Azin Sharaf. Fixed 'trashdir' expanding ~ only of the first entry. Fixed `start` in file[x]type commands on Windows not being considered as present. Fixed selection created prior to running av in normal mode showing up after switching to a regular visual mode via v key and moving cursor over it. Fixed processing of extended keys on OpenBSD. Fixed memory error in :media menu on an unlikely error path. Thanks to dcb314. Fixed memory leak from bar in progress dialog. Fixed checking version of GNU coreutils at build time. 0.12-beta to 0.12 (2021-09-29) Made :VifmCs of the plugin handle 24-bit colors. Collect desktop files also from ~/.local/share/applications. Thanks to Jose Riha (a.k.a. jose1711). Align output of :highlight better. Fixed maximum number of arguments for :highlight command. Thanks to Yuriy Artemyev (a.k.a. anuvyklack). Fixed binary data messing up TUI. Fixed new "combine" highlight attribute not being completed or displayed by :highlight command. Fixed garbage being printed sometimes after doing search in a menu. Fixed miller preview blinking too much. Thanks to filterfalse. 0.11 to 0.12-beta (2021-09-15) Changed semantics of light* color groups to add bold attribute only for terminals with less than 16 colors. Aligns the behaviour with Vim. Affects you only if you relied on that implicit bold attribute. Thanks to Jose Riha (a.k.a. jose1711). Added experimental Lua plugins support. Added :plugins command that opens plugins menu. Added %P macro to 'rulerformat' (and thus to 'statusline'), which expands to All, Top, xx% or Bot to indicate position within the view. Thanks to iSeeU816. Added progress indication to the ruler of the view mode (corresponds to new %P macro of 'rulerformat'). Thanks to iSeeU816. Added i view mode key that toggles raw mode (ignoring of defined viewers). Thanks to j-xella. Added a and A view mode keys that switch to next and previous viewer of current file correspondingly. Thanks to j-xella. Added 'previewoptions' option to allow tweaking graphics preview a bit. Thanks to Joshua Jensch (a.k.a. patroclos) and flux242. Added "toptreestats" value to 'previewoptions' option, which makes stats appear before the tree. Patch by qsmodo. Added :plugin command that manages plugins. Added network mount and `subst` targets to :volumes menu. Patch by Phil Runninger. Added "combine" pseudo-attribute to "cterm" parameter of :highlight command. It changes behaviour from overwriting attributes of a parent highlight group (within their hierarchy) to appending to it. Thanks to Andrew Savchenko. Added literal values to 'viewcolumns' option. Thanks to Jose Riha (a.k.a. jose1711), chelovechishko, DieSpinne and rwtallant13. Added shortcuts for toggling flags in permissions dialog on *nix. Patch by qsmodo. Added %v macro for vertical splitting in terminal multiplexers. Patch by qsmodo. Added %Pl and %Pz macros for redirecting list of files to standard input of commands. Thanks to PRESFIL. Added %N macro to 'statusline' option, which adds a line break and increases height of the status line. Thanks to Jose Riha (a.k.a. jose1711), qsmodo and jcarreja. Added interactive re-editing of file names in external editor. Format now supports comments for displaying last error and original file names. Thanks to Jose Riha (a.k.a. jose1711) and Diogo Lemos (a.k.a. dmlemos). Added "l" and "r" flags to the 'tuioptions' option. It controls truncation of view titles. Patch by qsmodo. Added periodic forced flushing of data on copying data when 'syscalls' is set. Thanks to Matthias Braun (a.k.a. mb720). Added :st[op] command that behaves like Ctrl-Z. It's to be used in mappings. Thanks to GummyGun. Added zx normal mode key to fold/unfold directories in tree views. The implementation is not optimal at this moment though. Thanks to filterfalse, Ben Lu (a.k.a. ayroblu), RR0925 and Alexandre Viau. Added "depth=N" parameter to the :tree command. Thanks to filterfalse. Added support for direct/"true"/24-bit colors for ncurses 6.0 or later. Thanks to Anton Kochkov (a.k.a. XVilka) and IvanBarsukov. Added "gui", "guifg" and "guibg" parameters to :highlight command. Added some additional information about instance to the :version/:vifm menu. Added %c 'statusline' macro that displays size of current file-system. Thanks to Jose Riha (a.k.a. jose1711). Made :VifmCs of the plugin fail when 'termguicolors' produces a 24-bit color value. Thanks to AtomToast. Don't list inaccessible instances on --server-list. Made contents of map menus easier to comprehend by adding captions. Include shortcut prefix in title of map menus. Document how %i macro affects background jobs. Made it possible to build AppImage for Vifm. Patch by michaellee8. Started using quickview's cache in view mode. Extended cache of viewer's output to contain multiple entries (initial version of the cache was added to skip redrawing graphics). Implemented asynchronous previewing for textual and pass-through (think sixel) viewers. Thanks to StillSteal, laur89, Joshua Jensch (a.k.a. patroclos) and p-kolacz. Run background programs detached from a terminal. Thanks to Miguel Madrid Mencía (a.k.a. mimame). Allow exploring empty files or output of viewers. Thanks to Andrew Savchenko. Allow user-defined commands to include numbers in their names. Thanks to anonymous at Vifm Q2A site. Make :compare obey file name filters. Patch by qsmodo. Always display UID/GID in numeric form in File Info dialog (in parenthesis if the id was resolved to a string). Updated logo of the project. Thanks to Hescalalu for making it. Detect broken links on preview and report them as such. Fixed pointing 'trashdir' to a symbolic link to a directory causing issues. Thanks to ChongChong He. Fixed lack of error message when overwriting of file fails with 'syscalls' turned off. Thanks to anonymous on SourceForge discussion forum. Fixed an issue with packaging on one system (Linux in this case) and building on the other (OS X). Thanks to chenrui333. Fixed information about implicit file selection (count or ranges) being lost due to the use of expand() builtin function in 'statusline'. Thanks to DieSpinne. Fixed presence of %q macro causing second round of macro expansion. Fixed quickview not being redrawn after leaving File Info dialog or more mode. Fixed pane tabs being created after the last one instead of after current tab. Thanks to anonymous and n.e. at Vifm Q2A site. Fixed hang on using previewer that takes over control over the terminal (like 7z does to read password). Thanks to PRESFIL. Fixed inability to map escape sequences due to extended keys in terminfo database. Patch by M Kelly. Fixed not being able to view really long file names in full in File Info dialog. Thanks to 702b. Fixed compilation on AIX. Thanks to Jose Riha (a.k.a. jose1711). Fixed mounting and directory replacement not being detected as directory change when inotify is used. Thanks to Jakob Helmecke and PRESFIL. Fixed :empty leaving empty directories on Windows. Thanks to Grueslayer. Fixed losing files as a result of executing ":copy! &" or ":move! &" when both panes show the same directory. Thanks to Hans Bieshaar. Fixed a memory leak possible on formatting tab titles and status line. Fixed possible crash after changing 'classify' and then switching to inactive tab. Fixed attempts to complete nonsensical arguments to :set removing those arguments. Fixed some scrolling keys in view mode when there is only one visible line. Fixed backward search of view mode not reporting failure if there was a match at the very first line. Fixed running tests as root user. Thanks to Michka Popoff (a.k.a. iMichka). Fixed graphical preview of files in the right column of miller view not being properly cleared on directory change. Thanks to CosmosAtlas. Fixed vifm-convert-dircolors dropping copies of entries that differ only by case. Thanks to flux242. Fixed permission dialog on *nix systems not showing all information correctly after a redraw. Fixed incorrect colors on redrawing wild menu popup on terminal resize. Fixed order of checks on :copy?/:move?/:alink?/:rlink?. Now custom view is checked for duplicates before prompting for list of files. Fixed refusing to :copy/move/alink/rlink identically-named files from custom views even if list of new names is supplied. Fixed cw key of visual mode not being documented. Fixed copying of executable files not working on FreeBSD. Thanks to makijato. Fixed :chmod lacking a reload, which is needed because attribute change might not be detected. Fixed :goto not working with backslashes on Windows. Thanks to Grueslayer. Fixed full path patterns ({{globs}} and //regexp//) not working in tree views. Fixed number of filtered files not being updated in tree views on pressing zf key. Fixed "Building tree..." message not restoring contents of status bar in command-line mode. Thanks to filterfalse. Fixed issues with displaying composite characters. Thanks to Dennis Preiser (a.k.a. 0xDP). Fixed some file operations not being blocked in custom trees even though they can't handle them (custom views in general can't). Thanks to filterfalse. Fixed graphical preview of files in the right column of miller view not being properly cleared on switching to a directory preview. Thanks to TheMystifyingCharacter. Fixed sample :zip command to work with multiple files. Thanks to Branislav Gerazov. Fixed handling of broken links that exist at destination on putting files. Thanks to aleksejrs. Fixed zj not working before the last entry if it's an empty directory. Thanks to filterfalse. Fixed processing of keypad keys on Windows. Thanks to Roland. 0.11-beta to 0.11 (2020-09-24) Recommend against setting 'shellcmdflag' to "-ic" value. Made it possible to escape commas in patterns (as usual, by doubling). Thanks to filterfalse. Don't display number of hard links in File Info dialog on Windows. It's always zero there. Follow targets of .lnk-files on Windows on gF. Fixed ga and gA on symlinks to directories on their own (regression in 0.11-beta) and as part of selection. Thanks to filterfalse. Fixed an issue with undesired cache invalidation for symbolic link to directories, which caused performance issue (regression in 0.11-beta). Fixed `:sync! all` not synchronizing local filter of a tree with `set cvoptions=localfilter`. Thanks to filterfalse. Fixed documentation in Vim format linking section about globs instead of section on patterns in the description of :filetype, :filextype and :fileviewer commands. Fixed zd adding ".." directory even with 'dotdirs' not containing "treeleafsparent". Fixed tab labels of pane tabs being messed up (regression in 0.11-beta). Fixed highlighting of search matches in preview (regression in 0.11-beta). 0.10.1 to 0.11-beta (2020-09-10) Added :VifmCs command to the plugin for "converting" Vim's color scheme into a Vifm's one. Patch by Roman Plášil (a.k.a. Quiark). Added references to "Menus and dialogs" section of documentation from :commands and keys which open menus and dialogs detailed there. Added "tabs" value to 'vifminfo' option. It enables persistent tabs. Thanks to Cosmin Popescu (a.k.a. cosminadrianpopescu), filterfalse and Neil Griffin (a.k.a. ngriffin7a). Added :tabo[nly] command that closes all tabs but the current one. Added "v" flag to the 'tuioptions' option. It controls whether width of middle border is adjusted to equalize view sizes. Thanks to Matthias Braun (a.k.a. mb720). Added 'tablabel' option that specifies format of a single tab's label when non-empty. Thanks to aleksejrs. Added three MC-like shortcuts to sample vifmrc files (Alt-I, Alt-O and Ctrl-U). Thanks to Hans Bieshaar. Added HardLink highlight group for regular files with more than one hard link. Patch by Hans Bieshaar. Added 'sessionoptions' option, which is an alternative to 'vifminfo' for session files. Added :session and :delsession commands to manage sessions. Thanks to Marcos Cruz. Added v:session builtin variable that provides name of current session or is set to an empty string. Added global Default-256 color scheme to be used in terminals that support 256-color palette (automatically in sample vifmrc). Thanks to Shakil Akhtar. Added rate and progress bar to progress dialog. Patch by Alborz Jafari. Added "treeleafsparent" value to 'dotdirs' option. Thanks to filterfalse and Melandel. Added LineNr highlight group for highlighting line number column of views. Thanks to Anton Gepting. Added OddLine highlight group for highlighting every second entry line of a pane. Thanks to iSeeU816. Added v:jobcount builtin variable that provides number of active jobs (number of lines in :jobs menu). Thanks to iSeeU816. Added basic support for using PowerShell on Windows (pausing doesn't work). Thanks to Fang (a.k.a. peromage). Added 'tabprefix' and 'tabsuffix' options that allow customizing tabline separators. Thanks to CoreCube. Added real (fully resolved) path to the File Info dialog. Thanks to Alexandre Viau. Added number of hard links to the File Info dialog. Added gF normal mode key which acts like gf, but goes all the way to the ultimate target of the chain of symbolic links. Thanks to Alexandre Viau. Added optional "full" parameter for the :restart command, which makes it discard essentially all context. This is useful with persistent tabs. Thanks to Yusuf Aktepe. Made documentation of :command more comprehensible. Explicitly documented that macros are expanded in user defined commands. Thanks to gcmt. Clean up tests directory on "make clean" in the top of the tree. Avoid interposing system's reallocarray(), when it's present. Thanks to Ben Boeckel (a.k.a. mathstuf). Install only one version of sample config and media script, the one which corresponds to operating system being used. Thanks to Michael Vetter (a.k.a. jubalh) and Ondrej Novy (a.k.a. onovy). Don't force view reload after every :command that resets selection when there was non-empty selection. This might make metadata of files less up-to-date, but should increase overall performance. Thanks to Jose Riha (a.k.a. jose1711). Avoid reloading source file list after copy or move operation when possible. Thanks to Jose Riha (a.k.a. jose1711). Document that user must disable netrw plugin on his own when enabling g:vifm_replace_netrw. Vifm's plugin can't do it, because it's loaded after plugins shipped with Vim. Significantly improved performance of adding files to registers that contain thousands of files. As a result contents of registers is sorted now. Thanks to Typo. Significantly improved performance of adding files to trash that contains thousands of files. As a result contents of trash is sorted now. Thanks to Typo. Documented how selection is handled on launching files (like on l or Enter keys). Don't reset histories of views in inactive tabs on :restart. Invalidate textual quickview cache if it contains fewer lines than window height and is incomplete. Do not require "dhistory" to be present in 'vifminfo' for "savedirs" to work. Abort menu, more or file information modes before processing remote commands. Thanks to kangshugang. Improve navigation on gf key. Do fewer refreshes and disable filters to make target visible. Follow targets of .lnk-files on Windows. Thanks to Alexandre Viau. Display targets of .lnk-files in file information dialog on Windows. Limit length of custom file list title to 80 character positions. Thanks to filterfalse. Make displaying of spaces in mappings more intelligent by using at the start or end of lhs or rhs. Prevent internally selected files (e.g., via a range of a :command) from appearing selected in user interface. Thanks to filterfalse. Make 'title' option work in all terminals which contain "tsl" and "fsl" capabilities. Thanks to m-kru. Use global color scheme for preview on the other pane ignoring its directory-specific color scheme. Improve documentation on "bycontents" of :compare. Thanks to maxigaz. Make comparing files by contents (`:compare bycontents`) somewhat faster. Thanks to maxigaz. Use the same label for :grep and :find custom lists as the one used for :grep and :find menus. Thanks to filterfalse. Use unexpanded command for title of custom file lists produced using %u or %U macros. Thanks to filterfalse. Use unexpanded command for title of a menus produced using %m or %M macros. Update terminal title when in menus. Thanks to filterfalse. Escape some characters as ^X in view and tab titles, custom menu titles, on status line and in terminal title. Thanks to filterfalse. Use name of user-defined command in titles of custom views and menus. Thanks to filterfalse. Preserve more information in the title on turning custom view into tree using :tree. Thanks to filterfalse. Decrease number of UI updates on file operation to prevent cursor flickering. Improve cursor positioning after file operations. More sensible merging of histories from multiple instances in vifminfo file. Improved handling of long or unknown escape sequences in previews. Thanks to bratekarate. Significantly improved speed of sourcing files (includes processing configuration on startup and :restart). Significantly improved speed of handling typical globs (and therefore mime-type matchers) and reduced amount of memory they take up. Thanks to yanzhang0219. Implemented capturing output of background applications on Windows. Thanks to Gene Zharov. Detect being run under Wayland (relevant for :filextype commands). Thanks to mhdzli. Somewhat improved documentation on 'ignorecase' and 'smartcase' options. Thanks to filterfalse. Invalidate cached directory information (size or number of files) on inode change. Thanks to Jose Riha (a.k.a. jose1711). Invalidate cached directory size when using it to compute size of some parent directory. Reduce width of top line when side borders are hidden (`set tuioptions-=s`). Thanks to Svyatoslav Mishyn (a.k.a. juef). Create $VIFM/colors directory with default color scheme only on the first run. Thanks to ranousse. Improve differentiation between association and list forms of :colorscheme command on startup. This is important if list contains name of color scheme that doesn't exist. Try harder to preserve position of the splitter. Avoid its drift on terminal resizes and preserve ratio of windows on startup and tab switches. Thanks to Shakil Akhtar. Improve performance of mime-type detection by caching the results. Deduplicate elements of the :file menu. Use mime-types in associations in sample vifmrc. Thanks to Shakil Akhtar. Fixed symbolic link as FUSE mount point not being removed on systems with FreeBSD kernel. Thanks to Ondrej Novy (a.k.a. onovy). Fixed confirmation dialog not working on systems with unsigned char. Thanks to nandox. Fixed crash on trying to do descending sorting by groups. Thanks to rafasc. Fixed descending sorting by groups not being implemented. Thanks to rafasc. Fixed `:move subdir &` renaming file in the process and doing weird stuff to multiple files. Thanks to 45jqlakjrf87ayte7hy34ter4nguijauzl4eitk. Fixed gf key on relative symbolic links when current path has symbolic links in it. Thanks to emarsk. Fixed gf key on symbolic links that point to broken symbolic links. Fixed incorrect displaying of size of files larger than 4 GiB on Windows. Got broken in 0.8.1. Thanks to Allison McNulty (a.k.a. allora). Fixed positioning of hardware cursor after startup and switching panes. Got broken in 0.10.1. Thanks to Daniel Mueller (a.k.a. d-e-s-o). Fixed test for very long file name hitting dynamic file-system limit on file name length. Thanks to ovk. Fixed UI glitches on top left and right when top line got hidden by status bar or status line on status line taking up all or all but one lines of the screen. Fixed Alt key combinations being broken on Windows since v0.9. Fixed running non-cmd shells on Windows broken by adding 'shellcmdflag' in 0.10.1. Fixed issues with non-tiny 'shellcmdflag' on Windows. Patch by Bas Bossink (a.k.a. basbossink). Fixed adding files with spaces in their names as e-mail attachments in the plugin. Thanks to Stephen Horst (a.k.a. sjhorst). Fixed trash "forgetting" about deleted file when there it already contains a file deleted at the same path. Fixed printing "Terminal is too small message." on startup, when TUI was already initialized and wasn't disabled for printing. Fixed generation of :highlight command for OtherWin on writing $VIFM/colors/Default.vifm. The bug caused white background of inactive pane. Thanks to Stas Malavin. Fixed confusing printing of attributes of OtherLine, OtherWin, AuxWin and User1..User9 highlight groups by :highlight command. Fixed documentation on external background commands. Thanks to Gene Zharov. Fixed possible crash after changing 'history' when there are inactive tabs and then populating history of those tabs. Fixed local options being copied on creating tabs even when target path is different. Fixed DirEnter autocommand not being called on creating tabs. Fixed pane tabs of inactive pane reappearing after changing 'tabscope' to "global" and then back to "pane". Fixed it being possible to activate view mode while in a single pane mode. Thanks to filterfalse. Fixed 'title' messing up the TUI on very long title by limiting its maximum length. Thanks to filterfalse. Fixed command-line commands not being saved in history when command-line mode was entered and left by two different mappings (as opposed to a single mapping in which case this behaviour is expected). Thanks to filterfalse. Fixed detection of non-regular files in quickview, when previewing symbolic links. Thanks to m-kru. Fixed directory-specific color scheme not being applied to newly created tabs. Fixed selection being lost or incorrectly preserved on changes of local filter in custom views. Thanks to filterfalse. Fixed status bar message not being cleared sometimes. Thanks to filterfalse. Fixed graphics preview not being cleared on switching tabs or starting external applications (including on :shell). Fixed number of selected files not being updated after filtering files out using zd normal mode key. Fixed omission in details about keys in documentation on 'runexec' option. Thanks to m-kru. Fixed invalid background in more mode after opening a menu. Thanks to filterfalse. Fixed mapped keys being reinterpreted as builtin keys if RHS of the mapping failed at some point (e.g., contained an unmapped key). Thanks to Seok Won Lee (a.k.a. ijleesw). Fixed issues with the plugin when Vim has no :drop command. Thanks to Normen Hansen (a.k.a. normen). Fixed use of :catch in Vim plugin. Thanks to Normen Hansen (a.k.a. normen). Fixed %a 'statusline' macro on OS X producing wrong values. Thanks to yanzhang0219. Fixed 'z mark being treated as a special pane-specific mark (like '< and '>). Thanks to Marcos Cruz. Fixed '< and '> marks being shared by views in different tabs. Fixed exploring files on pseudo file systems which reported "Nothing to explore" despite quickview showed file contents fine. Fixed local filter not obeying updated values of 'ignorecase' and 'smartcase' options when 'incsearch' is off. Thanks to filterfalse. Fixed dialogs not being visible when UI updates are silenced via mappings. Fixed Default color scheme not being available on processing sample vifmrc on first run of the application. Fixed `:highlight {new-pattern}` not being immediately applied due to caching. Fixed detecting presence of :file[x]type commands on Windows when backslashes are present in path. Thanks to anonymous and n.e. at Vifm Q2A site. Fixed running tests on OS X, which were broken due to `/home/` being a symbolic link. Thanks to Jason Dreisbach (a.k.a. jtdreisb). Fixed opening non-top-level ".." in a :tree incorrectly behaving as `:cd ..`. Fixed user mappings not being resolved for suggestions. Thanks to TornaxO7. Fixed selectors not being suggested if there are matches among commands. Thanks to iSeeU816. Fixed commented line following `fileviewer *.ext` not being highlighted appropriately. Fixed panic on some redraw operations mixing with file operations during terminal resizing. Thanks to aca. Fixed highlighting of `fileviewer .*/,*/` as if it contains a pattern. Fixed highlighting of status line being shifted due to unmatched `%[`. Fixed weird tabline layout on very large number of tabs. Fixed highlighting of regex patterns. They could consume too much and would stop at `\/`. Fixed highlighting of multiline matchers for :filetype, :filextype and :fileviewer commands. Fixed only one level of symbolic links being resolved for mime-type detection. Fixed :wincmd being affected by mappings (e.g., of Ctrl-W key). Thanks to Philipp at Vifm Q2A site. Fixed columns in a :file menu being misaligned for mix of entries with and without description. Fixed creating symbolic links on Windows with 'syscalls' being turned on. Fixed creating symbolic links on Windows with spaces in source or target paths. Fixed 'chaselinks' on Windows (symbolic links weren't resolved). Fixed highlighting of comments after some commands. Fixed %p macro of 'findprg' missing from Vim version of the documentation. 0.10.1-beta to 0.10.1 (2019-07-29) Added "space" and "nospace" values to 'sizefmt' option. Patch by zsugabubus. Added autodetection of *.vifm files as files with "vifm" filetype to the plugin. Patch by Anton Kochkov (a.k.a. XVilka). Made udisks2 part of vifm-media script compatible with python3. Patch by zsugabubus. Assume that any $TERM value that starts with "xterm-", "rxvt-" or "screen-" supports terminal title. Thanks to Matthias Braun (a.k.a. mb720). Documented $TERM values for which 'title' option works. Thanks to Matthias Braun (a.k.a. mb720). Fixed assertion failure on resetting 'classify' option when 'millerview' is on (reproducing it is harder than that, but that's the idea). Patch by zsugabubus. Fixed info= not having higher priority than label= in 'mediaprg'. Fixed item not being redrawn on the screen after pressing t key to toggle its selection. Fixed missing screen update after some startup commands. Thanks to zsugabubus. 0.10 to 0.10.1-beta (2019-07-15) Added example of using xsel to sample vifmrc file. Thanks to chelovechishko. Added "fileroot" view column, which displays full name of directories and symbolic links to directories and only root of name for everything else. Thanks to chelovechishko. Added :cds command that navigates to path obtained by substitution in the current path. Thanks to j-xella. Added one more invocation format of :colorscheme command, which picks the first available color scheme that is supported by the terminal. Thanks to Jose Riha (a.k.a. jose1711). Added :hideui command that hides interface to show previous commands' output. Thanks to dikiy. Added 'shellcmdflag' option that allows customizing how shell is invoked. Enables running it in interactive mode, which can make shell aliases and functions work. Thanks to Ink (a.k.a. inknoir), John Shea (a.k.a. coachshea) and randomizedthinking. Added "L" flag to 'shortmess' option to display only last directory in tab line instead of full path. Thanks to chelovechishko. Added caching to quickview for a single file to avoid fileviewer being called more often than needed. Thanks to agguser. Added "rpreview:" key to 'milleroptions' option that allows enabling preview of files. Thanks to Svadkos and Tom Jansen. Added ^= operation for string list options. Thanks to SearyBlue. Added ^= operation for options of set kind. Added %pd macro that makes preview output directly affect terminal circumventing curses, which could be used to display sixel images. Thanks to Tom Jansen. Added :Vifm command to the plugin as an alias for :EditVifm. Patch by rbong. Added optional splitting of the embedded terminal in the plugin (g:vifm_embed_split). Has support for Vim's and . Patch by rbong. Added option to the plugin to synchronize working directory of the embedded instance of vifm with the Vim host (g:vifm_embed_cwd). Patch by rbong. Added ability to the plugin to replace netrw with vifm (g:vifm_replace_netrw and g:vifm_replace_netrw_cmd). Patch by rbong. Added OtherWin highlight group for highlighting inactive pane. Thanks to John Fred Fadrigalan (a.k.a. cevhyruz). Added indication of entry's availability to :file, :file[x]type and :fileviewer menus. Added udisks2 backend to vifm-media script (bundled script for managing media). Requires python and dbus module for it to be installed (because udisks2 and dbus are too shitty to be used on command-line). Thanks to Tykin. Added FUSE_MOUNT3 filetype format, which is equivalent to FUSE_MOUNT, but doesn't perform unmounting. Helpful to use with something like avfs. Thanks to Jose Riha (a.k.a. jose1711). Added "info=" field to parser of 'mediaprg' output. It provides custom message for the media. Patch by zsugabubus. Added [ and ] bindings to :media menu that provide navigation between devices. Patch by zsugabubus. Added decorations to :media menu. Patch by zsugabubus. Added extcached() builtin function, which can be used to improve performance of file queries by caching results of external commands. Thanks to Matthias Braun (a.k.a. mb720). Added %p macro to 'findprg' option. It works as a mix between %a and %A macros: usually contains arguments passed to :find command, but unlike %a doesn't include any predicates. Thanks to Sitaram Chamarty and Tuan Bui (a.k.a. tuanbass). Added vifm-media-osx script that is configured to be used (via 'mediaprg') on OS X. Patch by Von Welch. Resolve symbolic links for mime-type matchers. Thanks to Vigi. Try to preserve symbolic links in current path when starting vifm by checking value of $PWD. Thanks to Vigi. Better documentation for TabLine and TabLineSel highlighting groups. Thanks to mwgkgk. Always preserve tabs on :restart. Thanks to mwgkgk. Clearer documentation/description for :*unmap commands and 'vicmd'/'vixcmd' options. Thanks to chelovechishko. Preserve extended attributes on copying files. Thanks to hutou. Improved to do not forcefully update screen after the mapping if no screen updates were skipped. Try to avoid superfluous screen updates related to cursor position. Improve documentation of patterns and globs. Thanks to afsheenb. Don't throw away errors that were ignored by the user, display them at the end of operation. Complete user name in paths after initial tilde (e.g., `:cd ~r` => `:cd ~root`). Consume input during foreground file operations. Otherwise it remains buffered and is processed after the operation is over, which might not be the intent of the user. Drop leading space implicitly added to time columns in views. Thanks to laggardkernel. Try to determine widths of printed character more accurately. Reduce number of options available on file conflict when source and destination are the same to avoid confusion (options that overwrite do nothing in this case). Thanks to aleksejrs. Refuse to compare directory against itself via :compare command. Thanks to Jose Riha (a.k.a. jose1711) Generate faster regular expressions by vifm-convert-dircolors. Thanks to Gomme Bidule. Remember when file doesn't match any file-specific highlighting groups for better performance. Thanks to Gomme Bidule. Renamed filename filter to "permanent filter" consisting of "explicit" (ex-manual) and "implicit" (ex-automatic) parts. Thanks to Sitaram Chamarty. Improved documentation on filters. Thanks to Sitaram Chamarty. Do not add leading comma to string list options on `set opt+=item`. Clear preview before displaying suggestions. Thanks to ks1c. Do not check for view changes while suggestions are visible. It can mess up TUI, especially in combination with preview. Thanks to ks1c. Do not complain about empty output of a graphics previewer for view mode. Upgraded to PDCurses 3.8 (was 3.4) for Windows. This allows using 256 colors inside ConEmu. Note that ConEmu has issues processing 256 colors on the last line of the screen, so avoid using them for status line. Thanks to dancread. Enable 'vimhelp' in sample vifmrc file by default. Changed file rename prompt to indicate whether full name or only its root is being changed. Removed empty line from :file and similar menus for case when vifm was configured with --disable-desktop-files flag (second time). Document more details about expansion of FUSE macros. Properly remove FUSE mount points if they are symbolic links. Don't create trash directory on startup if 'trash' is off. Patch by zsugabubus. Don't error on trash creation failure due to read-only file system. Patch by zsugabubus. Error stream from 'mediaprg' isn't considered anymore when deciding if mounting/unmounting was successful. While technically an incompatible change, it's unlikely to cause any issues. Spawn 'mediaprg' in foreground to allow interactions with the user, like providing a password. Patch by zsugabubus. React to Enter in :media menu on device lines, mount on "not mounted" line and do nothing otherwise. Patch by zsugabubus. Show empty lines in :media only if there is enough vertical space. Patch by zsugabubus. Make documentation of 'findprg' more readable. Fixed `:tabnew ..` not working due to use of uninitialized data. Fixed access to uninitialized memory on clearing view after graphical preview. Fixed possible crashes after certain patterns of using view mode and closing tabs. Fixed some resources (like output pipe for --choose-files and --choose-dir) being inherited by child processes. Thanks to Vigi. Fixed CWD of the process not always matching current view right after startup. Patch by Daniel Mueller. Fixed global substitution with patterns beginning with a caret again. Fixed cursors not being synchronized in compare view when scrolling one of them with Ctrl-U or Ctrl-D. Fixed command-line completion with non-latin characters. Thanks to dikiy. Fixed crashes when starting vifm with an empty environment (no environment variables set). Fixed directory-specific color scheme being turn into primary color scheme on copying from pane with directory-specific cs. Fixed directory-specific color scheme being lost on switching location of views. Fixed incorrect cursor positioning on reloading view with directory-specific color scheme. Fixed :siblnext/:siblprev not updating quickview. Fixed file move confirmation being shown twice in some cases. Fixed vifm not making use of large number of color pairs when they are available. Thanks to Jose Riha (a.k.a. jose1711) and Hans Petter Jansson (a.k.a. hpjansson). Fixed completion of :tabnew listing files instead of only directories. Fixed postponed view redrawing or reloading being skipped sometimes on multiple simultaneous requests. Fixed DirEnter autocommand not being called on entering a custom view even with 'cvoptions' containing "autocmds". Fixed textual output of graphical previewers not being displayed in view mode. Thanks to agguser. Fixed graphics leftovers after leaving explore mode. Fixed DirEnter autocommand being called with view being in a mixed state of old and new location. Thanks to Kendrick Taylor (a.k.a. sixcircuit). Fixed issues (could lead to crash) on resizing on Windows. Thanks to Tim Schaeffer (a.k.a. Numeromancer). Fixed wrapped lines in quickview/view mode sometimes losing their colorization. Fixed occasional test failures due to use of uninitialized curses. Thanks to Diogo Lemos (a.k.a. dmlemos). Fixed losing files on failed move operation. Source files were deleted assuming they were copied successfully, even when errors regarding some of them were ignored by the user. Thanks to zsugabubus. Fixed building incorrect relative paths on symlinking, when path being operated on contain symlinks. Resolve to real paths before computing relative path. Thanks to zsugabubus. Fixed highlighting of the first file entry being used to fill empty part of miller columns. Thanks to Konst Mayer (a.k.a. cdlscpmv). Fixed reading file list from standard input (`dir /b /s | vifm -`) on Windows 10. Thanks to dancread. Fixed crash on startup on trying to show a menu in vifmrc (didn't show up in most setups). Thanks to Christian Fillion (a.k.a. cfillion). Fixed documentation incorrectly stating that background operations can't be cancelled. Thanks to Jose Riha (a.k.a. jose1711). Fixed color pairs being exhausted on Windows when "default" color ends up being used often, this caused highlighting to go awry. Thanks to dancread. Fixed assertion failure on removing items from file-specific highlighting with some tabs that use it being hidden. Fixed :finish inside :if statements causing a warning on sourcing files. Fixed last character of borders in vertical layout not being drawn when global tab line is visible. Fixed retrying file overwrite on :copy! not overwriting a file after reason why it can't be deleted is gone. Fixed outdated comment about 'vimhelp' in sample vifmrc file. Thanks to Tiago. Fixed status bar clearing messages when inside directories with directory-specific color scheme. Fixed reading data past initialized region on printing control message of dialogs. Patch by zsugabubus. Fixed syntax highlighting of angle-bracket notation inside right-hand side of mappings that contain some :commands (they were highlighted, but for fewer number of commands). Fixed missing syntax highlighting of :let command in right-hand side of mappings. 0.10-beta to 0.10 (2018-11-11) Display list of files in removal confirmation dialog. Thanks to ovk. Support embedded terminal in the plugin for newer Vim. Return "broken" from filetype({fnum}, 1) for inaccessible link target. Thanks to filterfalse. Avoid unnecessary reloading file list after pressing "=" to enter local filter. Fixed crash on pasting elements of paths that contain broken UTF-8 sequences into command-line using Ctrl-X + key. Thanks to Jose Riha (a.k.a. jose1711). Fixed extra unlisted buffer beeing kept around in neovim on :*Vifm commands. Thanks to randomizedthinking. Fixed invalid treatment of numerical arguments of filetype(). Thanks to filterfalse. Fixed crash on previewing contents of directory without execute right in miller view. Thanks to filterfalse. Fixed status line highlighting being broken by wide characters. 0.9.1 to 0.10-beta (2018-10-28) Added support for arbitrary expressions in 'statusline': '%{...}', e.g. '%{&sort}' evaluates to the value of the sort option. Patch by Dmitry Frank (a.k.a. dimonomid). Added TabLine highlight group for highlighting tab line. Added 'tabscope' option that controls style of tabs. Thanks to Cosmin Popescu (a.k.a. cosminadrianpopescu). Added :tabnew command that creates a new tab. Thanks to Cosmin Popescu (a.k.a. cosminadrianpopescu). Added :tabname command that updates name of the current tab. Added :tabc[lose] command that closes current tab unless it's the last one. Added :qa[ll], :wqa[ll] and :xa[ll] commands that always try to exit vifm no matter how many tabs are open. Added gt and gT normal mode shortcuts that switch between tabs in both directions. Added 'showtabline' option that controls visibility of tab line. Added TabLineSel highlight group for highlighting tip of the selected tab on the tab line. Added :goto command that navigates to specified file/directory. Thanks to mateusz28 and Dmitry Frank (a.k.a. dimonomid). Added addition and subtraction operations to the parser. Added tabpagenr() function that retrieves number of current or last tab page. Thanks to filterfalse. Added :tabm[ove] command that moves tabs. Thanks to filterfalse. Added "M" flag to 'shortmess' option to control shortening of titles in windows of terminal multiplexers created by vifm down to file name instead of using full path. Thanks to mateusz28. Added 'histcursor' option that gives partial control over when cursor is positioned in accordance with record of directory history. Thanks to filterfalse and Dmitry Frank (a.k.a. dimonomid). Added 'quickview' option that controls visibility of quick view (:view). Thanks to Jochen Schweizer (a.k.a. durcheinandr). Added fnameescape() builtin function, which can be used to escape paths on construction of :commands. Thanks to filterfalse. Added 'syncregs' option which defines group of instances that share registers. Patch by Ma_Sys.ma. Added angle bracket notation. Thanks to j-xella. Added r key to :undolist menu, which resets position in the undo list to group under the cursor. Thanks to mini-turtle. Added grouping via parentheses to expressions. Thanks to Konst Mayer (a.k.a. cdlscpmv). Added User1..User9 highlight groups and corresponding %[0-9]* 'statusline' macro, which makes it possible to colorize parts of status line differently. Thanks to GeorgeHJ. Added :*map argument that postpones UI updates until RHS is completely processed. Probably not all updates are postponed, to be improved as unhandled cases are discovered. Added angle bracket notation making it possible to map Ctrl-Space key. Thanks to anonymous at Vifm Q2A site. Added second optional parameter to filetype() builtin function that is treated as a boolean and specifies whether symbolic links should be resolved. Added :*map argument, which resolves prefix conflicts of user-defined mappings and builtin keys in favour of user-defined mappings. Thanks to Paweł Smolak (a.k.a. psmolak). Added :regular command that leaves custom view. Thanks to gammaray. Added :media menu that can list and perform basic operations on removable media (requires helper to be available, see 'mediaprg'). Only for *nix systems. Thanks to Bruce Hunsaker (a.k.a. hunsakerbn) and others. Added 'mediaprg' option that can be used to specify helper for managing removable media. One such helper with support of udevil and udisks is provided. Only for *nix systems. Added :tabn[ext] and :tabp[revious] commands, which work as gt and gT normal mode shortcuts correspondingly. Thanks to Cosmin Popescu (a.k.a. cosminadrianpopescu). :quit, :wq, :exit, :xit, ZZ and ZQ now try to close current tab before closing the application. More explicit documentation about leaving custom views. Thanks to tagwint. Use historical cursor position upon startup by default when 'autochpos' is on, this is now independent from "savedirs" in 'vifminfo' option. Thanks to filterfalse. Use historical cursor position on navigating to a mark that doesn't specify a file by default when 'autochpos' is on. Thanks to filterfalse. Sort entries of :bmarks menu. Thanks to anonymous at Vifm Q2A site. Drop unfinished if-else statements on leaving command-line mode. Thanks to Marcin Kurczewski (a.k.a. rr-). Move cursor after p and P to one of files that were moved or to a cause of last conflict. Thanks to filterfalse and ranousse. Less strict parsing of output of external command by :[un]select commands. Similar to %u/%U and menus allow [:[:[:]] ] format. Thanks to j-xella. Support italics in quickview/view mode and in :highlight when curses implementation provides corresponding extension. PDCurses doesn't implement it on Windows. Fallback is to use "reversed" attribute. Thanks to GeorgeHJ. Escape "=" at the beginning of paths (has special meaning in zsh). Thanks to agguser. More accurate error message on handling non directories passed to :cd. Slightly better formatting in :undolist menu. Report missing closing quote for ""-strings in expressions. Make :echo and :execute report parsing errors in more detail than just "invalid expression". Update status line when cursor is moved on typing local filter when 'incsearch' is on. Empty input stream before asking user for return on :!! or when :!command ends with an error. Correct terminal state before asking user to press return after execution of an external command. Thanks to Jose Riha (a.k.a. jose1711). Do not reset selection before executing a :command from :commands menu. Thanks to Jose Riha (a.k.a. jose1711). Allow passing numerical positions to filetype() function. Try to preserve file owner/group on copying. Thanks to willemw12. Disallow registering user-defined commands with "!" or "?" suffix that won't be called, due to existence of a builtin that accepts custom separators (they have higher priority than user-defined commands). Issue a warning if file system lists several files with identical names in the same directory. It used to be assumed that it can't happen. Thanks to Jose Riha (a.k.a. jose1711). Make :cabbrev and :cnoreabbrev always treat bar (`|`) as part of their arguments, just like :*map commands do. Thanks to filterfalse. Make :tree! toggle view in and out of tree mode. Thanks to gammaray. Fixed preview command not being run with correct working directory on startup (e.g., when preview was on in vifminfo). Fixed completion for commands that follow "|" when they are preceded by commands with complicated syntax like :substitute. Fixed "|" not preceded with space being ignored as command separator for some commands. Fixed memory leak on `:highlight clear {file-specific-group}`. Fixed file-specific highlighting being added even when :highlight command contains syntax error. Fixed highlight group being partially updated by :highlight command with incorrect syntax. Fixed parsing of :highlight command when tabulation is used to separate arguments. Thanks to Robert Pergl (a.k.a. perglr). Fixed number of elements in a directory ("nitems") not being updated. Thanks to filterfalse. Fixed local filter not being applied to the view after q=. Thanks to filterfalse. Fixed hang of a remote instance after receiving at least two consecutive packages that cause an error message to be displayed. Thanks to filterfalse. Fixed absence of error on doing `--remote` to a server that doesn't exist. Fixed flickering on Windows. Thanks to Alexandre Viau and randomizedthinking. Fixed other view sometimes not being updated on scrolling via Ctrl-F/B keys in cases like compare view or when quickview is on. Thanks to Alexandre Viau. Fixed other view not being updated in visual mode in cases like compare view or when quickview is on. Fixed search highlight in menu not being reset after clearing the pattern. Fixed doubling of "%" on expanding environment variables in arguments of :commands. Thanks to filterfalse. Fixed canonicalization of paths that include entries that end with multiple dots. `/dir../..` was not turned into `/` since 0.8.2. Thanks to aleksejrs. Fixed part of dialog messages being still visible in quickview after dialog was closed. Thanks to Alexandre Viau. Fixed ruler not being displayed when cursor is on a fake entry in :compare view. Fixed crash due to linking to wrong version of libtinfo. Thanks to Ruslan Osmanov (a.k.a. rosmanov) and Chema Alonso Josa (a.k.a. nimiux). Fixed stdin stream not being closed for commands run for obtaining their output since previous release (e.g. `!read i%q` would wait for input). Also close it the same way on Windows too. Fixed graphical applications on Windows not being detected as such, which caused vifm to wait until they finish running. Was broken since 0.9. Thanks to r0ck. Fixed cursor marker in inactive window not being highlighted according to CmpMismatch highlight group in :compare mode. Fixed missing quote in an expression error message not displaying the broken string. Fixed syntax highlighting of strings in double quotes and comments in :let statements. Fixed status line showing information about previously selected file after clearing search pattern when 'incsearch' is on. Fixed status bar mode message not being changed from "-- VISUAL --" to "-- VISUAL (append) --" on pressing av in visual mode. Thanks to Paweł Smolak (a.k.a. psmolak). Fixed memory corruption on clearing user defined :commands from a user defined command. Thanks to Jose Riha (a.k.a. jose1711). Fixed selection issues in some terminals when in command-line mode. Thanks to Jose Riha (a.k.a. jose1711). Fixed slowed down directory traversal due to listing contents of directories internally. Thanks to Coco 17dec. Fixed assertion failure on parsing lists of expressions with broken syntax. Thanks to Jose Riha (a.k.a. jose1711). Fixed parsing state not being properly reinitialized, which could cause unstable parsing outcome for lists of expressions. Thanks to Jose Riha (a.k.a. jose1711). Fixed error messages from put operation being postponed until the next put operation. Got broken in 0.9. Fixed memory leak on d/D normal mode keys if deletion wasn't confirmed. Fixed confirmation not being requested on :delete. Thanks to anonymous at Vifm Q2A site. Fixed 'relativenumber' being effectively ignored in inactive pane on UI redraw from active pane. Thanks to filterfalse. Fixed bar (`|`) being treated as command separator in /pattern/ passed to :[un]select. Thanks to filterfalse. Fixed abbreviations of :commands with `!` or `?` as custom separator (e.g. `:s!a!b!`) being resolved incorrectly. Fixed bar (`|`) being treated as command separator in /pattern/ passed to :commands using custom separators (e.g., in `:s!//|//!`). Fixed bar (`|`) not being treated as command separator in commands which can take /pattern/ arguments. Fixed crash on feeding multi-byte string to :commands that fail to convert it to wide representation. Thanks to Jose Riha (a.k.a. jose1711). Fixed non-empty read-only directories not being deleted by :empty command. 0.9.1-beta to 0.9.1 (2018-02-05) Fixed :clone and :copy refusing to copy broken symbolic links, even though C and p keys copy them. Fixed C key not checking readability of a single unselected file, like :clone does. Fixed possible crash on `:highlight clear {pattern}` and highlights not being updated. Fixed reported free space on *nix. (make it consistent with what 'df' reports). Patch by Dmitry Frank (a.k.a. dimonomid). 0.9 to 0.9.1-beta (2018-01-22) Added "inode" sorting key, which sorts entries by inode number. Thanks to eco0414. Added retry/ignore/abort prompt for file copying and directory/file/symlink creation when 'syscalls' is on. Thanks to einhander. Added AuxWin highlight group for highlighting auxiliary parts of windows. Added 'millerview' option that enables cascading columns interface for the view. Thanks to sudo-nice. Added 'milleroptions' option that configures miller view. Added [r/]r/[R/]R normal mode shortcuts that map to :siblprev and :siblnext with and without wrapping correspondingly. Thanks to filterfalse. Added 'lsoptions' option that allows to get transposed grid in ls-like view. Thanks to Dmitry Frank (a.k.a. dimonomid). Added ability to remove filename-specific highlighting rules with `:highlight clear {pattern}`. Thanks to aleksejrs. Added completion of filename-specific highlight groups for :highlight command. Added term() builtin function, which differs from system() only by its ability to run interactive applications without confusing vifm's interactions with the terminal. Thanks to Dmitry Frank (a.k.a. dimonomid). Added 'previewprg' option, which can be used to override :fileviewer commands either temporarily or permanently. Thanks to svenn71. Added v:count and v:count1 builtin variables. They are assigned to count passed to : command. Added %x macro to 'rulerformat' (and thus to 'statusline') as new name for %-, which conflicts with alignment specification and requires explicit width specifier (%0-). Thanks to Marcos Cruz. Added :histnext/:histprev commands, which are analogous to Ctrl-I/Ctrl-O. Patch by Dmitry Frank (a.k.a. dimonomid). Added {root} key to 'viewcolumns' option (complements {ext}). Thanks to Oleg Gordienko (a.k.a. gordio). Added "u" flag to the 'tuioptions' option. It enables use of Unicode characters in the TUI (Unicode ellipsis instead of "..."). Thanks to Oleg Gordienko (a.k.a. gordio). Added "foldsubkeys" value to the 'suggestoptions' option. It folds multiple suggestions with common prefix into one entry. Thanks to AndreaHasani. Added `--remote-expr` command-line option, which gives ability to query state of an instance. Thanks to Marcin Kurczewski (a.k.a. rr-). Changed :filter command to accept pattern (//, ////, {} or {{}}). Thanks to rbong. Improved parsing of optional numbers in vifminfo. Thanks to Aris Fergadis (a.k.a. afergadis). Indicate preview created with %q with "Command: cmd". Better detection of write errors on file copying. The error was reported, but it wasn't treated as a hard error in a specific case related to caching. Made :siblnext and :siblprev commands respect dot and name filters. Disabled spell checking of vifm files in Vim except for comments. H/M/L keys in ls-like view now account for columns. Made :siblnext and :siblprev accept [count] range. Thanks to filterfalse. Made :tree pick up list of files from custom view. Thanks to filterfalse. Do not go to start of line on Ctrl-U/Ctrl-D/Ctrl-F/Ctrl-B/G in ls-like view. Documented more details about 'vicmd' and 'vixcmd' options. Thanks to Sebastian Cyprych. Made :highlight update file-specific group on exact match of the pattern instead of appending new rule. Thanks to aleksejrs. Extend width of the cursor in ls-like view to the width of the cell. Thanks to Dmitry Frank (a.k.a. dimonomid). Don't trigger DirEnter event with previous directory on startup when list of files is specified on stdin. Thanks to filterfalse. Improved performance of mime-type detection when using libmagic (now might be about seven times faster by avoiding reinitialization of the library). Don't force file list reload after `:!` and rely on change detection. This should result in somewhat better performance. Thanks to opennota. Duplicate status bar error in dialog that reports sourcing error. Will need to get rid of errors on status bar later. Instead of invalidating directory size previously calculated via ga/gA on detecting changes in the directory recalculate its size and propagate update through its parents. Thanks to filterfalse. Remove empty directories which are specified in 'trashdir' with %r and/or %u automatically on :empty. Thanks to Marcin Kurczewski (a.k.a. rr-). Fixed positioning cursor in directory :history when inside custom view. Thanks to filterfalse. Fixed compilation of modes/view.c when build is configured with `--disable-extended-keys`. Thanks to Bearcat M. Şándor (a.k.a. bearcatsandor). Fixed crashes discovered via fuzzing, most of which require rather unusual kind of input. Fixed running commands with arguments on Windows when 'shell' isn't cmd.exe. Fixed ".." not being preserved in path loaded into custom view. Thanks to filterfalse. Fixed directory size in status line. Patch by Dmitry Frank (a.k.a. dimonomid). Fixed extra width of inactive cursor in ls-like view when 'classify' contains Unicode characters. Fixed stopping of put operation after copying symbolic link that's broken on destination. Thanks to filterfalse. Fixed formatting of root directory in custom view, it displayed too many slashes. Thanks to filterfalse. Fixed not recording last visited directory on leaving custom view. Thanks to filterfalse. Fixed displaying of wild menu popup when status bar is more than single line in height. Fixed weird view scrolling after zO (hard to notice) and Ctrl-A/X. Fixed assertion failure on renaming files with Ctrl-A/Ctrl-X when cursor is positioned on certain file from the range. Fixed a "race" with file system when we could load outdated file list and thus miss some file system updates. Fixed hardware cursor blinking in view for interactive queries. Fixed handling Tab and Shift-Tab on search prompt as if they are command prompts. Fixed horrible flickering of multiline status bar for interactive queries. Fixed :normal command resetting selection. Thanks to filterfalse. Fixed consuming 100% of CPU on certain pattern of running background processes. Thanks to petRUShka. Fixed losing error message from a short-lived background processes when long-lived one is present. Fixed centering title of attributes change dialog (cp normal mode command) for non-ascii file names. Fixed turning quickview into explore view when preview command doesn't contain macros. Was broken since 0.8. Fixed the plugin in neovim. Patch by John Shea (a.k.a. coachshea). Fixed CWD of the process not matching current view after vifm picked up change in file system. Patch by Daniel Mueller (a.k.a. d-e-s-o). Fixed cloning of files like `.name` to produce `.name(1)` instead of `(1).name`. Thanks to filterfalse. 0.9-beta to 0.9 (2017-06-18) Escape $ and ` in %" macros on *nix systems. Thanks to filterfalse. Don't use :filextype in sample vifmrc for OS X, we can't tell whether graphical system is running. Thanks to piotryordanov. Do not add extra slash to path on picking files in the root. Thanks to filterfalse. Properly escape newline when passing things into shell. Thanks to filterfalse. View current directory on ".." for quickview/view mode only if no viewer matches such entry. Expand macros in :[un]select !{command}. Thanks to Michael Corvin. Update the other view after file deletion (that file might be visible there too). Execute startup commands in directory of current pane. Fixed ruler being updated when it shouldn't even be visible. Thanks to filterfalse. Fixed incorrect existence check for files that end with forward slash on *nix. Thanks to filterfalse. Fixed treating `--select -` as `-` on command-line. Thanks to filterfalse. Fixed ignoring `-` when `--no-configs` is specified. Thanks to filterfalse. Fixed choosing files in custom views with --on-choose. Fixed redrawing view after loading custom list in case when cursor is positioned on ".." entry. Thanks to filterfalse. Fixed restoring of excluded items from custom view if local filter isn't empty. Thanks to filterfalse. Fixed incorrect cursor positioning on removing elements from custom view with local filter. 0.8.2 to 0.9-beta (2017-06-04) Removed -Werror in tests from non-developer builds. Added tree view. Thanks to filterfalse and Kornel. Added :tree command that converts current view into a tree. Added :dmap, :dnoremap and :dunmap commands to configure mappings in dialogs. Thanks to Sassan Haradji (a.k.a. sassanh). Added "tree" parameter to :sync! that enables synchronization of tree view. Thanks to filterfalse. Added :compare command to perform comparison in one or two directory trees. Thanks to anonymous on SourceForge discussion forum and aleksejrs. Added CmpMismatch highlight group for highlighting mismatched files on side-by-side comparison. Added %Iu and %IU macros, which are %u and %U equivalents, but work better if external command is interactive and changes terminal state. Added v:servername variable, which provides access to server name of the running instance used by --remote feature. Thanks to Marcin Kurczewski (a.k.a. rr-). Added dd key to :jobs menu, which requests cancellation of background operation. Background :put, :copy, :move, :delete, size calculation with ga and gA as well as applications started in background can be cancelled this way. Thanks to blurm. Added 'dotfiles' (local) option, which exposes dot files filter as an option. Thanks to filterfalse. Added %q macro that redirects command output into quick view. Thanks to svenn71. Added shell completion for bash and zsh. Patches by filterfalse. Added e key to :jobs menu that displays list of errors issues by that jobs, if any. h key goes back to :jobs menu. Added :copen command to restore last menu that supports navigation. Thanks to Sassan Haradji (a.k.a. sassanh). Added % key to menu mode, which navigates to [count]-th percent of the list. Added 'caseoptions' option that enables more fine-grained control over case sensitivity. Thanks to Alexandru Geana (a.k.a. alegen). Added [d and ]d shortcuts to navigate to previous/next directory entry. Thanks to filterfalse. Added [s and ]s shortcuts to navigate to previous/next selected entry. Thanks to filterfalse. Added [z and ]z shortcuts to navigate to first/last sibling in a tree. Thanks to filterfalse. Added zj and zk shortcuts to navigate to next/previous directory sibling in a tree. Thanks to filterfalse. Added [c and ]c shortcuts to navigate to previous/next mismatch in directory comparison view. Thanks to filterfalse. Added :screen! form that enables terminal multiplexers support (instead of toggling it as :screen does). Thanks to Marcos Cruz. Added do and dp keys to compare views for applying changes in files. Thanks to filterfalse. Added %f 'statusline' macro that inserts relative path of the entry, which might be useful for non-regular views. Thanks to filterfalse. Added meaning to [count] of cp shortcut, which is now processed as numerical argument for non-recursive `chmod` command. Thanks to sudo-nice. Added 'sizefmt' option that configures formatting of human-friendly size. Thanks to sudo-nice. Added :siblnext and :siblprev commands. They change directory to next or previous sibling directories of current path (in global sorting order of current pane). Thanks to sudo-nice. Added %D 'statusline' macro that displays path of the other pane in single-pane layout. Thanks to sudo-nice. Added %T 'statusline' macro that displays symbolic link target. Thanks to sudo-nice. Added %a 'statusline' macro that displays amount of free space available at current partition. Thanks to sudo-nice. Changed size formatting to round from zero (matches behaviour of e.g. `ls`). Enable restoring files from trash from custom views. View current directory on ".." for quickview/view mode. Thanks to filterfalse. Make :put, :touch and :mkdir accept [line] range, which can be used to specify target position in tree-view. Thanks to filterfalse. Enable cancellation of tree preview construction. Thanks to filterfalse. Partially return progress report for menus. Was disabled by introduction of null byte heuristic. Accept paths in :touch, not just file names. Thanks to filterfalse. Consider trailing slash for directories or symbolic links that point to directories in 'classify' patterns by file name (e.g., this works now: `[::*/::]`). Do not resolve symbolic links in directory preview. Thanks to filterfalse. getpanetype() got new value ("tree") to indicate tree-view. Thanks to filterfalse. Disallow applying :chmod on ".." entry. Disallow moving/copying/linking files into custom view (put is forbidden, so makes sense to forbid these too). Disallow selecting ".." entry with :select command. Display path to the conflicting file in conflict resolution dialog. Provide better messages on i/o errors with 'syscalls'. Thanks to Behrooz. Remove background commands from the :jobs list when corresponding processes get terminated by a signal. Use /data/colors as global storage of color schemes on Windows. Thanks to r44083. Don't disable preview on `--remote --select` if it doesn't hide updated pane. Thanks to Marcin Kurczewski (a.k.a. rr-). Handle terminal resize on Windows 10. Thanks to randomizedthinking. Escape first tilde in paths that go to the shell. Thanks to Marius Schmidl. Make +{num} and similar options work (actually affect cursor of the view). Thanks to filterfalse. Treat "+" option the same way as Vim (like :$). Thanks to filterfalse. Read error output of background commands independently of main thread (prevents blocking of tools which produce huge amount of output). Thanks to Stas Malavin. Limited maximum height of message popup, just print how many lines we're skipping. No vifminfo merging if file change isn't detected. Might result in faster quitting in some cases. Not accounting for some changes is still possible when multiple instances quit simultaneously, but same could happen without this change. Improve performance of startup and exit by omitting file existence checks. The cost is possibly old files staying in the state, but it should be for long time. Thanks to Marcin Kurczewski (a.k.a. rr-). Resolve symbolic link for listing associated programs from desktop-files. Thanks to filterfalse. Don't move cursor off "../" before start of local filtering. Thanks to filterfalse. Put hardware cursor according to current mode and cursor within it. Thanks to Tyler Spivey. Made search consider trailing slash for directories and symbolic links that point to directories. Thanks to filterfalse. Made IPC unit more fault-tolerant regarding inability to create files. Thanks to filterfalse. Make temporary rename files accessible only by the user. Thanks to aleksejrs. Better handling of setting 'fillchars' to incorrect or excessive value. Prevent clearing filters on zM if there were no zO preceding it. Thanks to sudo-nice. Work around :drop command being disabled in the plugin. Thanks to Phil Runninger. Try harder to move files by not giving up on getting permission error, which isn't always a reliable indication of actual permission error. Only when 'syscalls' is on. Thanks to Marcin Kurczewski (a.k.a. rr-). Improved sorting performance in the presence of huge amount of symbolic links. Thanks to Marcin Kurczewski (a.k.a. rr-). Properly recover from invalid/strange UNC root on Windows. Don't end up with empty filelist. Fixed redirecting stdout of background commands to /dev/null, which could be unwritable descriptor. Thanks to c02y. Fixed inconsistent file name demangling on moving files from trash in custom view. Fixed decreasing number of selected files after zd operation. Fixed wrong whole value completion of string list options if entered value contains a comma (,). Fixed displaying of previous status bar message on 'hlsearch' 'noincsearch' when match occurs. Thanks to filterfalse. Fixed incorrect completion of non-first option name of the :set command. Fixed assertion failure on file rename of specific pattern (renaming files 1, 2 via `:rename 2 3` is the shortest example). Thanks to aleksejrs. Fixed rejecting to clone files in custom view, when name is specified explicitly (form without arguments was properly disabled before). Fixed changing attributes of files in custom views on Windows. Fixed counting selected files after `:invert s` if there is ".." entry. Fixed :pushd and :dirs in custom views. Fixed ruler update on `--remote --select`. Thanks to Marcin Kurczewski (a.k.a. rr-). Fixed small leak after aborting on name conflict. Fixed possible data loss on moving/copying files over their own parent or child directories via p, P, :move, :copy, :alink and :rlink. Thanks to Marius Schmidl. Fixed concatenation of error lists without separator (newline). Thanks to Behrooz. Fixed possible memory leak on querying file mime-type (when it wasn't obtained). Fixed buffer overflow on obtaining file mime-type. Thanks to Abdó Roig-Maranges (a.k.a. aroig). Fixed previewing symbolic links, which not always were resolved to their target (even reachable one). Thanks to Abdó Roig-Maranges (a.k.a. aroig). Fixed bogus "fuse mount was cancelled" message on %FOREGROUND mount failing. Fixed determining location of distributed files on Windows (help file and sample vifmrc weren't installed). Thanks to r44083. Fixed drawing file list in single-pane layout when 'scrollbind' set (parts of the other view were visible when 'relativenumber' is set). Thanks to filterfalse. Fixed resetting custom view title to "(null)" when loading another custom view in the same pane failed. Fixed restoring custom list on removing or changing local filter when 'incsearch' is off. Fixed losing original custom list of files after failed load of new custom list if local filter isn't empty. Fixed some blinking on redrawing screen when middle border isn't visible. Fixed cloning of broken links. Fixed assertion renaming of file into name of broken link. Thanks to Svyatoslav Mishyn (a.k.a. juef). Fixed F, f, ; and , keys in visual mode. Fixed detection of too-small-terminal state. Fixed memory leak of forgotten history entries after going back in history. Fixed updating progress when performing operations on empty files. Fixed selection of current file on cancelled go or gp. Thanks to filterfalse. Fixed treating characters like š and ć (with low Unicode values, just above 0x100) as functional keys on input. Thanks to granderil. Fixed recursive permanent removal of directories on Windows when 'syscalls' isn't set, which could fail for no reason. Fixed inconsistency of using environment variables from different sources (internal state versus runtime). Thanks to Jochen Schweizer (a.k.a. durcheinandr). Fixed n/N not restarting search in custom views. Fixed full path patterns ({{globs}} and //regexp//) not working with file highlighting in :highlight. Thanks to granderil. Fixed view columns when column with dynamic alignment is not the first one. Fixed :pwd in custom views to make it display main directory (didn't display anything). Thanks to filterfalse. Fixed :noremap, which didn't accept ! and didn't reject less than two arguments. Fixed backslash in arguments for :*[un]map commands (required \ to be written as \\). Thanks to filterfalse. Fixed use of uninitialized memory on parsing commands that end with backslash. Fixed 'wordchars' parsing to process range end as inclusive. Thanks to filterfalse. Fixed 'wordchars' parsing to handle non-ascii input without memory violation. Fixed incorrect 'sort' state after :restart. Thanks to sudo-nice. Fixed possible skewing of relative files positions in history by :restart. Fixed off-by-one error on reducing history size, which could led to loosing last directory history element. Fixed parsing of 'classify' when it includes an entry with empty prefix. Thanks to filterfalse. Fixed navigation from menus on Windows. Fixed tilde expansion and expansion of environment variables when checking command existence. Thanks to sudo-nice. Fixed displaying separator in `:*map prefix` menus. Thanks to nicodebo. Fixed truncation of file names of length NAME_MAX in some cases. Thanks to aleksejrs. Fixed crash due to assertion on answering y/n/Enter/Ctrl-C in prompt dialog that doesn't provide such options. Thanks to aleksejrs. Fixed inconsistent behaviour of :EditVifm in plugin with regard to "[No Name]" buffer. Thanks to Phil Runninger. Fixed operations which involve changing current working directory on Windows when path includes non-latin characters. Thanks to khaoos-abominable. Fixed processing of non-latin characters provided in command-line options on Windows. Fixed processing of environment variables containing non-latin characters on Windows. Fixed printing ^L character for --choose-dir on Windows. Thanks to Phil Runninger. Fixed updating CWD on switching views. Thanks to Svyatoslav Mishyn (a.k.a. juef). Fixed plugin in versions of Vim where :argadd without argument doesn't work. Thanks to eco0414. 0.8.2-beta to 0.8.2 (2016-07-16) Added support for matchit to filetype plugin. Patch by filterfalse. Fixed processing of root directory (completion, :cd). Thanks to filterfalse. Fixed completion of commands after :!. Thanks to filterfalse. Fixed formatting/wording/outdated notes in documentation. Patches by filterfalse. 0.8.1a to 0.8.2-beta (2016-07-02) Added highlighting of search matches in menus. Added :noh[lsearch] command to menu mode. Added quick shortcuts to dialogs. Patch by oo-. Added 'wildstyle' option to control the way wild menu is displayed. Enables displaying it as a menu with one item per line. Thanks to santhoshr and octos. Added 'suggestoptions' option to control displaying of suggestions. Added description of builtin keys to :map menus. Added SuggestBox highlight group for key suggestion box. Added :write command to menus, that writes all menu lines into specified file. Thanks to gtors. Added support of patterns to 'classify' option, so that files can now be decorated based on their names. Thanks to elricbk. Added "filelist" parameter to :sync! that enables synchronization of custom view. Thanks to filterfalse. Added 'cvoptions' option to control when entering/leaving custom views is considered to be equal to entering/leaving directories. Thanks to filterfalse. Added "target" sorting key, which sorts files by symbolic link targets. Thanks to Marcos Cruz. Added negation to patterns with explicitly specified type (surrounded by {} or //). Put exclamation mark to invert pattern match. Thanks to Marcos Cruz. Added :select and :unselect commands. Thanks to filterfalse, Russell Urquhart and Marcos Cruz. Added chooseopt() builtin function that retrieves various parameters of file choosing. Thanks to Von Welch. Added mime type patterns ([!]). Thanks to Ross Hadden (a.k.a. rosshadden). Added %z 'statusline' macro that inserts text of a short tip picked at random. Thanks to qinghao (a.k.a. haobug). Added pattern ANDing. Just list decorated patterns one after another and such composite pattern will much when each of them matches. Thanks to filterfalse. Added pattern ORing for :file[x]type and :fileviewer commands implemented as a comma-separated list. Thanks to filterfalse. Added heuristic that uses null byte as separator for file lists if there is at least one such byte, otherwise normal line separators are used. This affects :[un]select, `vifm -`, %u, %U, %m and %M. Thanks to filterfalse. Added cancellation (handling of Ctrl-C) for quick view and view mode loading. Thanks to kalterfive. Added completion of :wincmd argument. Added indication of wrong pattern and absence of matches to command-prompt for interactive search/filtering. Changed order of initialization to perform autocommands before startup commands on launch. Changed type of 'confirm' option. Now it's a set that picks which operations should be confirmed. Thanks to Losiara and mvucBmM0. Changed ga/gA effect on ".." entry to calculate size of current directory. Thanks to aleksejrs. Do not reset completion on terminal resize. Expand environment variables for :edit. Thanks to filterfalse. Don't print just table header on `:cabbr something`, print message that no matches found instead. Display as only at the beginning of key sequence. Better terminal buffer title for plugin in neovim. Thanks to randomizedthinking. Enabled wildmenu for menus. Skip UTF-8 BOM for file preview. Allow suffixes and prefixes in 'classify' to be of up to eight characters in length. Thanks to elricbk. Use original (before custom view) cursor position on :sync! in custom views. Thanks to filterfalse. Never add parent entry (..) to very custom view (%U). Thanks to filterfalse. Removed caret escaping on Windows... Thanks to Reva Revadigar. Silently ignore tries to remove parent entry (..). Thanks to aleksejrs. A bit better delete confirmation messages with number of files to be deleted. Improved syntax highlighting of patterns. Automatically update custom view entries on rename of their parent directory in the same custom view. Some corrections of when completion happens for :find and :grep. Avoid displaying useless search messages about incorrect pattern during interactive search in menus (those that user can't see, but that are shown in :messages). Fixed kind of a duplicate of first history element on =. Fixed displaying size for symbolic links to directories on changing views and determining whether they point to a directory in custom views. Fixed backward search in menus, which was performed in the opposite direction. Fixed hanging on sudden terminal loss. Thanks to aleksejrs. Fixed crash on using extremely long function name. Fixed overwriting files after editing destination file name. Thanks to rbong. Fixed querying file information on 64-bit Windows. Thanks to santhoshr. Fixed crash on very long option value on :set. Thanks to aleksejrs. Fixed displaying non-latin characters in LHS of mapping in map menus. Thanks to filterfalse. Fixed updating view columns after local options synchronization via :sync!. Thanks to filterfalse. Fixed possible crash on Windows on displaying job bar (e.g. after :empty). Thanks to Reva Revadigar. Fixed escaping on Windows when opening files via :edit. Fixed UTF8 <-> UTF16 conversion on Windows, which didn't always work (on surrogate characters it seems). Thanks to Reva Revadigar. Fixed possible unexpectedly long timeouts when waiting for a key on Windows (due to limitation of pdcurses). Fixed displaying of wide (CJK) characters in pdcurses on Windows. Thanks to Reva Revadigar. Fixed functioning on architectures on which `char` is unsigned by default. Thanks to Ondrej Novy (a.k.a. onovy). Fixed unconditional resetting of executable permission when using cp dialog. Thanks to Svyatoslav Mishyn (a.k.a. juef). Fixed updating view columns on leaving very custom view (%U) which set sort option. Thanks to filterfalse. Fixed remote feature on cygwin. Thanks to Cosmin Popescu (a.k.a. cosminadrianpopescu). Fixed search match highlighting of non-ascii characters in right aligned file names. Fixed capturing output of external applications on Windows when 'shell' is "cmd". Was broken since v0.8 in an attempt to make cmd work better with Unicode (but its /U flag affects only input and output streams). Fixed completion of command-line of this format: `:!~/...`. Fixed epic bug in processing selectors followed by other commands in a mapping. Command which accepted selector was called after tail of sequence is processed. Fixed possible issues with escaping on retrieving file type/mime-type using `file` utility. Thanks to filterfalse. Fixed cutting off path prefix from :!~/path/exec when 'fastrun' is on. Fixed putting unmatched %[ into status line at wrong position. Fixed incorrect work with symbolic links in paths to custom view entries, on completion of paths, changing directory via :cd or :sync, processing arguments of :mkdir, :bmarks, :delbmarks, :colorscheme, :clone. Fixed weird completion effects for :colorscheme, :sync!, :delbmark, :bmark!. Fixed changing owner/group in custom views. Fixed small memory leak on using %u/%U with :grep, :find or :locate. Fixed possible off cursor after cmdline insertions of text with wide characters via Ctrl-X combinations or dot completion. Fixed quite strange behaviour if command-line is too fill the whole screen (it's less strange now, resized to maximum). 0.8.1 to 0.8.1a (2016-02-10) Added c key to menus that inserts parts of menu line into command-line. Thanks to filterfalse. Added { and } keys to normal and visual modes. They act similar to ( and ), but always consider whether entry is a file or directory. Thanks to octos. Apply local filter on picking element of `:history filter` menu. Added --disable-build-timestamp option to configure script to perform reproducible build. Thanks to Hendrik Jaeger (a.k.a. henk). Display more meaningful message on failure to extract option name (unknown option: string). Handle register specified for gs normal mode command. Select files listed in that register. Thanks to filterfalse. More accurate parsing of bar not surrounded with whitespace. Be consistent with regard to when local state is changed and do not reset neither local options nor local filter on entering/leaving custom view. Thanks to filterfalse. Disallow adding duplicated filetype/fileviewer entries (just ignore them as they wouldn't be used due to order priority anyway). Expand tilde in first argument of :bmark! command. Thanks to Marcos Cruz. Truncate menu titles that don't feet the screen. Thanks to aleksejrs. Fixed redrawing message dialog when 'relativenumber' option is on. Thanks to aleksejrs. Fixed resetting status bar contents on displaying message dialog. Fixed parsing background mark after quote (as in `:put " &`). Fixed using plugin in neovim, which has broken `system()` and :! commands. Thanks to Artur Shaik (a.k.a. artur-shaik). Fixed polluting screen of server with messages about invalid arguments. Fixed duplicated filetype entries in vifminfo. Thanks to aleksejrs. Fixed switching views via :wincmd. Thanks to fogine. Fixed executing commands on new view after switching it (related to sequences of commands separated via bar symbol). Fixed --with-dyn-x11 configuration option, which failed to enable dynamic use of the library. Thanks to Badalisc and Hendrik Jaeger (a.k.a. henk). Fixed handling of doubled commas on reading/writing filetypes from/to vifminfo. Fixed displaying of extra file line in quick view when 'tuioptions' doesn't contain "p" flag. Thanks to aleksejrs. Fixed description of 'sort' to reflect rename of "type" into "dir". Thanks to Marcos Cruz. Fixed tab completion for single-executable Windows build, which didn't work in the last release and could cause crash. Thanks to Reva Revadigar. Fixed memory leak on resolving symlinked path on Windows. Thanks to Hendrik Jaeger (a.k.a. henk). Fixed TUI glitches in the form of borders after shrinking terminal to smallest possible height and restoring it back. Fixed processing of path regexps for filetypes when operating on selection. Thanks to aleksejrs. Fixed running multiple files in custom view. 0.8.1-beta to 0.8.1 (2016-01-17) Added summary to builtin tree implementation. Thanks to aleksejrs. Added more filetype definitions into sample vifmrc. Thanks to aleksejrs. Added 'title' option to control whether title of terminal should be set. Enabled by default if old title can be restored. Thanks to Svyatoslav Mishyn (a.k.a. juef). Case insensitive completion of autocommand name for :autocmd command. Allow /**/ in :autocmd pattern to match end of the path. Thanks to aleksejrs. Don't trigger DirEnter on exiting custom-view (when we technically stay in the same directory). Thanks to aleksejrs. Somewhat align options in conflict resolution dialog. Patch by Svyatoslav Mishyn (a.k.a. juef). Copy timestamps and permissions on merging directories. Thanks to willemw12. Less blinking on resorting. Annoying if directory is resorted from autocommand. Fixed reopening controlling terminal across users. Thanks to aleksejrs. Fixed :autocmd being not whole line command (was terminated by |). Thanks to aleksejrs. Fixed possible crash on writing vifminfo file on exiting. Fixed memory corruption on handling empty matches of searches in view mode. Thanks to filterfalse. Fixed secondary column of very custom view (%U). Thanks to filterfalse. Fixed reopening terminal for output, read-only mode somehow caused hangs. Thanks to aleksejrs. Fixed possible (effectively) hang on reading directory change events. Fixed parsing of commands which names are not followed by spaces with regard to pipe symbols (|). Thanks to aleksejrs. Fixed extending second :tr argument, which could cause failure in build with assertions. Thanks to octos. 0.8 to 0.8.1-beta (2016-01-02) Turned remote commands back on by default after their rewrite using named pipes instead of insecure UDP sockets. Removed vifmrc-converter. It's been around for four years and not needed any more. Thanks to filterfalse. Removed contents of autoconf.sh, autoreconf covers what was there (there is a notice in that script now about it just in case). Thanks to Hendrik Jaeger (a.k.a. henk). Changed 'fusehome' default from temporary directory to data directory (that is $XDG_DATA_HOME/.local/share/fuse/ or $VIFM/fuse/ depending on which parent directory exists, the second one exists by definition, but first might not). Thanks to aleksejrs and to Hendrik Jaeger (a.k.a. henk). Added :winc[md] command-line command. Thanks to fogine. Added layoutis() builtin function that answers queries about current interface configuration. Thanks to fogine. Added paneisat() builtin function that answers queries about current pane position. Thanks to fogine. Added %pc macro that splits preview command in two pices: preview command and clear command. Thanks to Tomek K. (a.k.a. TomiCode). Added set of :*Vim commands to vifm run from Vim plugin, which overrule initial :*Vifm command behaviour. Thanks to Ross Hadden (a.k.a. rosshadden). Added special treatment for "*" as value of 'slowfs', which might be useful in case of very slow handling of requests to mounts enumeration. Patch by Cosmin Popescu (a.k.a. cosminadrianpopescu). Added handling of "-" command-line argument specified in place of directory path as instruction to read list of files from stdin. Added B key to menus, which acts like b, but creates unsorted (very custom) view. Thanks to filterfalse. Added match numbers to search messages on status bar. Patch by Cosmin Popescu (a.k.a. cosminadrianpopescu). Added exclamation mark to :shell to suppress spawning new teminal multiplexer pane. Patch by Cosmin Popescu (a.k.a. cosminadrianpopescu). Added fileext sorting key, which sorts files by extensions and directories by name. Patch by Cosmin Popescu (a.k.a. cosminadrianpopescu). Added :setl[ocal] and :setg[lobal] commands to manage values of local options that are specific to current directory and are reset on directory change, similar to local options of Vim. Added zr normal mode key to reset local filter. Thanks to filterfalse. Added named bookmarks (paths are associated with tags). This adds :bmark, :bmarks, :bmgo and :delbmarks command-line commands. Also there is new "bmarks" value for 'vifminfo'. Thanks to Schmalzhaf Stefan. Added handling of dd in :trashes, :trashes? and :lstrashes, which either deletes an item in trash or empties trash. Thanks to Svyatoslav Mishyn (a.k.a. juef). Added dynamic view column alignment (specified by "*", just like "-" for left alignment). Patch by Cosmin Popescu (a.k.a. cosminadrianpopescu). Added --server-list and --server-name command-line options that enumerates names of currently running vifm servers and sets name of target/this instance respectively. Added optional %u and %U macros to 'findprg', 'grepprg', and 'locateprg' that allow immediate redirection of command output into custom view without opening a menu. Thanks to filterfalse. Added builtin directory preview. Thanks to Damian Ariel Perticone and Alexandre Viau. Added :pu[t] command that inserts files into current directory. Thanks to mvucBmM0. Added --with-sanitize=basic|thread|leak option to configure script. Added "more" mode that is used to handle status bar content that doesn't fit on the screen. Thanks to Bruce Hunsaker (a.k.a. hunsakerbn) and Svyatoslav Mishyn (a.k.a. juef). Added 'dirsize' option to control how size of directories is displayed in file views. This enables one to see number of files in a directory rather than its size. Thanks to Martin Fischer. Added missing script that's necessary for %s macro in GNU screen. Was lost for a long time. Added retry/ignore/abort prompt for file/directory removal when 'syscalls' is on. Thanks to Robert Sarkozi. Added "nitems" sorting, which sorts by number of items in a directory. Thanks to filterfalse. Added getpanetype() builtin function that retrieves type of current pane. Thanks to filterfalse. Added 'iooptions' option to configure file system operations. Contains only "fastfilecloning" for btrfs so far. Thanks to aleksejrs. Added "v" key to menu mode that loads current contents into quickfix list of editor (Vim compatible one is assumed). Thanks to filterfalse. Added && and || operators to expression parser. Thanks to filterfalse. Added autocommands (DirEnter event and :au[tocmd] command). Thanks to filterfalse. Added 'sortgroups' option and "groups" sorting key, which allow sorting by parts of file names. Thanks to aleksejrs. Added "nlinks" sorting key to display number of hard links to a file on *nix systems. Thanks to filterfalse. Added 'deleteprg' option, which specifies program to run on files that are permanently removed. Added inline comments to allow less verbose commenting in configuration. Added :elseif command. Thanks to filterfalse. Added :set foo+=bar syntax for string options (append value). Added &option syntax for :let command. Added optional argument for --logging parameter that specifies path to startup log. Thanks to Cosmin Popescu (a.k.a. cosminadrianpopescu). Added handling of "%u" in trash specification on *nix, which is replaced with real user ID. Thanks to Regis. Changed default value of 'trashdir' on *nix again, this time to "%r/.vifm-Trash-%u,$VIFM/Trash,%r/.vifm-Trash". This way it's safer for privacy, although using %r is not very safe in general. Thanks to Regis. Do not finish argument parsing after finding --help or --version, continue and validate the rest of command-line. Thanks to Svyatoslav Mishyn (a.k.a. juef). Warn about --remote command being disabled at build-time. Thanks to Svyatoslav Mishyn (a.k.a. juef). Make --select option more prominent in documentation. Thanks to Svyatoslav Mishyn (a.k.a. juef). Accept [count] for "h" and "gh". Normalize surrounding spaces in menu and dialog titles. Work around compilation on systems where MAX_ARG_STRLEN is defined, but unusable. Thanks to Marcin Juszkiewicz (a.k.a. hrw), Michel Normand and Michael Vetter (a.k.a. jubalh). Document %= for 'statusline' and 'rulerformat'. Proper recovery from loading of color scheme unsupported by the terminal at startup. Thanks to Svyatoslav Mishyn (a.k.a. juef). Automatically create ~/.vifm/scripts containing small README file if the directory doesn't exist on startup. Thanks to fogine. Consider control message when deciding width for a dialog, also don't let it disappear on narrow terminals. Provide conflict resolution options in a dialog rather than on the command-line, which is hard to read with so many options. Choose "middle" of the list of even length closer to the top (M key). Thanks to Svyatoslav Mishyn (a.k.a. juef). Update cursor position on file disappearing in more predictable way. Use the closes file to the previously active one that still exists. Thanks to ranousse. Make :set, :filter and :normal zo (and alike) in vifmrc affect all views, thus obsoleting use of :winrun or :windo for this purpose (they still work, the new way is a simpler and more obvious one). This is related to commands executed during vifmrc processing (not those in the right-hand side of mappings, commands, etc.). Display lower bound on item count in status bar progress messages (e.g. on :grep). Do not shrink progress dialog (only make it wider), this is more predictable and easier to follow. Thanks to Robert Sarkozi. More hints for Debian-based systems on installation. Thanks to Bernhard Grotz. Expand "~" in menus on navigation. Use `-f` on calling editor instead of `--nofork` (should be more universal). Thanks to kazufukurou. Changed default colorscheme to invert colors of the current line. Display directory size on Windows more correctly. Lower minimum supported terminal width and height from 30x10 to 20x5. Preserve file timestamps on copying files with 'syscalls' on. Thanks to mvucBmM0. Employ inotify on GNU/Linux for more precise watching directories for changes. Display incomplete file name on rename instead of failing with error on Unicode conversion issues. Assume UTF-8 sequences can be broken. Thanks to Svyatoslav Mishyn (a.k.a. juef). Check file system sensitivity on OS X. Thanks to loongw. Allow 'shell' to specify a shell argument on *nix. Thanks to loongw. Make "p" in 'tuioptions' affect padding in quick view and view mode. Documented difference between paths in menu with and without trailing slash. Thanks to filterfalse. Save location before loading custom view into view directory history. Thanks to filterfalse. Invalidate directory size (calculated via ga/gA) if noticed that directory was changed. This affects all parent directories as well, way easier to see what needs recalculation after file moving/removal. Ctrl-W | and Ctrl-W _ now can set window size to given count. Thanks to filterfalse. Make sure confirmation dialog doesn't appear for background operations. Display confirmation on ":delete! &" before initiating the operation. Somewhat more informative error titles on issues during file operations. Made setting title inside terminal multiplexers (when terminal type is "screen*") work. Make use of file cloning feature of btrfs when possible and enabled in 'iooptions'. Thanks to aleksejrs. Changed plugin to do not depend on location of vifm. g:vifm_home is ignored from now on. Thanks to aleksejrs. Rewrote expression parser to prevent side-effects from occurring until syntax is checked. Put right-hand side of user-defined commands into separate scope of if-else-endif expressions. This prevents affecting of regular input by malformed user-defined command. Fixed resetting "vborder" of 'fillchars' after it has been set to something (as in `:set fillchars=vborder:\* fillchars&`). Fixed crash after color scheme load failure possible in scenarios where file name specific highlights are used. Fixed use of uninitialized value which could affect whether pattern is matches whole path or only its name part. Fixed tests failures when run with root privileges. Thanks to Ondrej Novy (a.k.a. onovy). Fixed running backgrounded commands with non-latin characters on Windows (that end with " &", should be OK to just drop it on Windows and get correct behaviour on 0.8). Thanks to Stas Malavin. Fixed running of executables with spaces in paths on Windows with cmd. Thanks to Stas Malavin. Fixed choosing user vs. default shell on Windows (was reversed), related to %S, %i and alike macros. Fixed losing view sorting on failed attempt to load custom view. Thanks to filterfalse. Fixed not restoring 'sort' value on leaving unsorted custom view. Fixed possible crash on startup when 'vifminfo' includes "options". Thanks to Aurelio Sanabria (a.k.a. Sufrostico). Fixed checking for symbolic link target on target change commands in custom view. Fixed slashes type on Windows on loading custom view with relative paths. Fixed unstable extension sorting for dot files. Patch by Cosmin Popescu (a.k.a. cosminadrianpopescu). Fixed check for availability of FUSE mount point. Thanks to fogine. Fixed small memory leak and possible corruption after :sync! localopts. Fixed checking for changes in charset options on :set (without arguments), used to print unchanged options as if they were changed. Fixed estimation text in dialog (was almost single line). Fixed recovery after a try to assign ill-formed value to 'viewcolumns' option. Fixed unintentional filters resetting on menu navigation to paths that have trailing slash. Fixed losing name of controlling terminal on reopening it. Thanks to Dennis Hamester. Fixed one command in sample vifmrc, which is not supported in Windows version. Thanks to Alexandre Viau. Fixed possible vifminfo shrinking (some data were removed from it) if an error occurs during initialization. Fixed highlight not being updated after file rename. Fixed possible hang during startup on Windows after removal of last visited directory. Fixed running background commands on Windows that require shell expansions. Fixed swapped absolute/relative link creation on :alink/:rlink commands. Patch by MadMaverick9. Fixed dialog box redraw in menu after terminal resize. Fixed leaving background threads in zombie state. Fixed check for broken link existence in custom views (were dereferenced). Fixed missing check for duplicated source file names in custom views on file operations. Thanks to filterfalse. Fixed navigation to broken link from a menu. Fixed group completion for :chown command. Fixed cursor positioning in custom view with identically named files on local filter updates. Fixed restoring selection in custom view in presence of identically named files. Thanks to filterfalse. Fixed navigation to file in custom view in presence of identically named files there. Thanks to filterfalse. Fixed remapping of builtin keys that are followed by selectors (e.g. `:nnoremap d y`). Thanks to mvucBmM0. Fixed 'chaselinks' causing invalid path resolution on going directory up (".."). Thanks to filterfalse. Fixed :mkdir! on absolute paths, used to create relative paths anyway. Thanks to filterfalse. Fixed `:cd one two` to use current directory as base for both relative paths. Thanks to filterfalse. Fixed ranges for :yank. Thanks to Marius Schmidl. Fixed enabling sorting on loading regular custom view after very custom view. Fixed turning of very custom view into sorted one after :restart. Fixed memory leak related to :colorscheme command. Fixed redraw of invisible pane on :sync! on single-pane mode. Thanks to filterfalse. Fixed Ctrl-W _ in top panel, which hid the bottom panel completely. Thanks to filterfalse. Fixed crash on copy-like operations that move several files into subdirectory of another view. Thanks to Marius Schmidl. Fixed running external commands when custom view is active and vifm is running inside GNU screen. Fixed running vifm on Windows 10. Thanks to th1rdey3. Fixed leaking memory on collecting error messages on file operations via system calls. Fixed navigation back in history from custom view. Fixed tokens mangling inside strings ('!=' turned into '='). Fixed creation of intermediate directories on merging directories. Thanks to willemw12. Fixed inconsistency in processing | escapes for whole line commands (e.g. for :!). Fixed incorrect treating of files with colons in their names for menus and custom views. Thanks to aleksejrs. Fixed not squashing double commas in description of :file[x]type commands. Fixed ".." item of a custom view having empty directory (can be seen via File Info dialog). Thanks to filterfalse. Fixed small leak on :write (on exit too, but leaks before exit don't matter). Fixed processing if-statements with multiple else branches. Fixed accepting non-alpha first character for environment variable name in :let command. Fixed completion of &-terms, which didn't always list all found matches. Fixed silent (effectively) ignoring of incomplete regexp argument (as in :filter/something, this is different from :s/a). Fixed forgetting of broken symbolic links that went into trash. Fixed silent ignoring of unmatched quote among :set arguments. Fixed picking wrong partition for deletion under symlinked paths. Thanks to aleksejrs. 0.8-beta to 0.8 (2015-07-09) Added handling of Ctrl-L to sort dialog. Thanks to filterfalse. Added device id (major and minor numbers) to file info dialog. Added script to update timestamps, so that build system won't be regenerated without real reason. One might want to run it when building from git checkout, which doesn't preserve correct timestamps. Append unused space in view columns to the last one with percent sizing type if any. Thanks to fogine. Drastically increased performance of custom view composing. Be more accurate when deciding whether view displays graphics, particularly rely on %px and %py, because %pw and %ph might be useful for text viewers as well. Thanks to Svyatoslav Mishyn (a.k.a. juef). Less flicker on preview window update. Clean occasional graphics leftovers after disabling preview. Ignore file decorations ('classify') on sorting custom views. Thanks to filterfalse. Do not invoke vifmrc-converter to update color scheme names if no color schemes were found. Display 2822 date without time zone in file info. Thanks to Svyatoslav Mishyn (a.k.a. juef). Disallow creating user-defined command with "?" or "!" suffix if this would hide builtin command. Redefining commands without suffixes is not allowed, thus this shouldn't be allowed too. Better "all" pseudo-option parsing and support of resetting it. Do not display same path twice in detailed progress information (after both "file" and "from"). Shorten paths in "file" and "from" in progress dialog. Sync approximate and accurate forms of progress dialogs. Fixed pane titles update on switching panes. Fixed build on OpenBSD. Patch by Brian Callahan (a.k.a. ibara). Fixed redrawing of dialogs requested via startup commands. Thanks to filterfalse. Fixed removal of original directories during merging with 'syscalls' on. Thanks to willemw12. Fixed directory merging when 'syscalls' is off. Thanks to willemw12. Fixed option completion to do not provide completion for "noall" or "invall", which isn't valid. Fixed dialog message centering which could be off by one. Fixed work on OpenBSD (at least to some degree that curses implementation there allows). There are still some troubles with non-ascii characters. Thanks to hofheinz. Fixed possible constant view reload when built on some systems. Thanks to hofheinz. Fixed error reporting on builtin function argument parsing in rhs of :let expression. Thanks to Svyatoslav Mishyn (a.k.a. juef). Fixed truncating viewed file on 'wrap', 'tabstop' > 2 and line wrapping caused by tabulation. Thanks to Svyatoslav Mishyn (a.k.a. juef). Fixed copying of fifo, socket and device files with 'syscalls' enabled. Thanks to Svyatoslav Mishyn (a.k.a. juef). Fixed compilation with musl. Thanks to Svyatoslav Mishyn (a.k.a. juef). Fixed build on FreeBSD. Thanks to bsdmp. Fixed not drawing local colorscheme once after setting global one. Fixed priority of abbreviations for user-defined commands with trailing "!" or "?", which shouldn't be preferred over corresponding builtin abbreviation. Fixed "(n + 1) of n" in detailed progress dialog. Fixed infinite loop or crash on empty match on search in view mode (e.g. on /$). Fixed crash/leak on processing of background jobs. Thanks to Christian Fillion (a.k.a. cfillion). Fixed several memory access errors and leaks. 0.7.8 to 0.8-beta (2015-06-19) Removed per-view last search pattern. Don't worry, you probably won't even notice it: this doesn't affect regular use case, rather more exotic one, which is hard to notice. Map and to different key codes. Thanks to fogine. Added angle bracket notation (less-than character, '<'). Thanks to filterfalse. Added K mapping to Vim plugin (quick navigation to documentation, e.g. from vifmrc). Patch by filterfalse. Aligned columns in :jobs menu. Added 'chaselinks' option to automatically expand all symbolic links in path of a view (might not work on Windows). Thanks to filterfalse. Added %FOREGROUND FUSE mounting option, which supersedes %CLEAR and fixes issue with passing input to FUSE mounter. Thanks to Johannes (a.k.a. johannesmeng). Added %[ and %] macros for status line/ruler. Thanks to ranousse. Added single-argument form of :file[x]type and :fileviewer commands that lists (in menu mode) currently registered patterns that match specified file name. Added filename specific highlight. Thanks to Ink (a.k.a. inknoir), filterfalse and Michael Maddern (a.k.a. madders). Added dircolors -> vifm conversion script. Thanks to Ink (a.k.a. inknoir), Hendrik Jaeger (a.k.a. henk) and Michael Maddern (a.k.a. madders). Added F key to less-like (file view) mode, which acts similar to `tail -F` or F key in less. Thanks to Daniel Dettlaff (a.k.a. dmilith). Added 'mintimeout' option. It enables controlling responsiveness on external events by Vifm. Thanks to hofheinz. Added Ctrl-X / (slash) key to command-line mode that inserts last search pattern into current cursor position. Thanks to filterfalse. Added custom views, which contrary to regular views can contain files that do not belong to the same directory. Added b key to menu mode that creates custom view filled with menu items filtering out those that are not paths. Added zd normal and visual modes key to exclude items from custom views. Added %u and %U macros to redirect command output directly into custom view. The second one allows for more customization of file list, which is absence of sorting for now. Thanks to filterfalse. Added --delimiter command-line option. Configures delimiter string on writing out list of paths (like on `-f` switch). Thanks to Jeet Sukumaran (a.k.a. jeetsukumaran). Added --choose-files and --choose-dir command-line switches to specify output location for names of selected files or last visited directory respectively. Thanks to Jeet Sukumaran (a.k.a. jeetsukumaran). Added :cq[uit] command to exit with non-zero exit code and also abort directory choosing. Thanks to Jeet Sukumaran (a.k.a. jeetsukumaran). Added --on-choose command-line switch to execute a command on selection rather than opening it. Thanks to Ross Hadden (a.k.a. rosshadden). Added system() builtin function that executes command via shell and returns its output. Added Ctrl-] command-line key to trigger abbreviation expansion. Added 'wordchars' option to specify which characters in command-line mode should be considered as part of a word. Thanks to filterfalse. Added command-line mode abbreviations and :cabbrev, :cnoreabbrev and :cunabbrev commands to manage them. Thanks to filterfalse. Added per-file overwrite confirmation on directory merging. Thanks to willemw12. Added optional per-file progress in dialog mode activated by hitting "i" while operation is being performed. Added OS X version of sample vifmrc file. Now this one will be used on first run on OS X. Thanks to Larry Hynes (a.k.a. larryhynes). Added --enable-coverage option to configure script. Added ^= operation for charset options. Added job bar that displays backgrounded file operations if any. Thanks to geo909. Added JobLine highlight group for the job bar. Added :redr[aw] command to force immediate redraw. Thanks to filterfalse. Added search match highlight for file names. Thanks to Svyatoslav Mishyn (a.k.a. juef) and willemw12. Added fallback to use "XDG Base Directory Specification" when failed to find configuration in other places. Thanks to Miodrag Tokić (a.k.a. loonies). Added %px, %py, %pw and %ph macros that describe location and dimensions of preview area to use in external commands. Thanks to Stephano (a.k.a. cao). Added lookup for mandoc on *nix to perform manual page to plain text transformation. Thanks to Svyatoslav Mishyn (a.k.a. juef). Added :trashes? to display sizes of each non-empty trash directories. Thanks to Svyatoslav Mishyn (a.k.a. juef). Added global configuration {prefix}/etc/vifm/vifmrc and color schemes {prefix}/etc/vifm/colors/*. Thanks to astrell and Michael Vetter (a.k.a. jubalh). Added one more light color scheme to assets (in two variations astrell-root and astrell-user). Thanks to astrell. Added regexp patterns to :file[x]type and :fileviewer commands. Thanks to filterfalse. Added full path patterns ({{globs}} and //regexp//). Thanks to astrell. Added detailed list of errors when 'syscalls' is used. Thanks to willemw12. Added .vifm extension to color schemes (initial rename is performed automatically). Thanks Michael Vetter (a.k.a. jubalh). Allowed having multiple file viewers with same rules for choosing them at run-time as for file associations. Thanks to filterfalse. Added "p" to 'shortmess' option to control tilde shortening of paths in view titles. Thanks to Martin Fischer. Changed default value of 'trashdir' from "$VIFM/Trash" to "%r/.vifm-Trash,$VIFM/Trash". Thanks to Joseph LP (a.k.a. ootput). Made calculation of directory size visible in :jobs menu. Made tests less dependent on environment. Thanks to Hendrik Jaeger (a.k.a. henk). Removed unnecessary command existence checks from vifm.vim. Thanks to filterfalse. Auto-resize position field on the status bar to fit the text. Thanks to ranousse. Switch to utf-8 internal representation of paths on Windows. This fixes issues when file name encoding doesn't match system encoding. Thanks to Stas Panteleev. Made leaving wrong (unexpectedly removed) directory more robust. Thanks to willemw12. Significantly reduced amount of work performed by Vifm in idle state. Thanks to hofheinz. Made message dialogs interact better with everything else on the screen. E.g. redraw properly after terminal resize. United last pattern of :substitute command with search history. Thanks to filterfalse. Made configure script lookup curs_set in libtinfo. Redirect both standard output and error streams from viewers (already was the case for Windows). Don't lose previously saved filter on repeated resetting (pressing zO twice in a row caused previous filter values to be lost). Extended :sync command to support selective synchronization (user can choose among location, cursor position, local options and filters). Thanks to filterfalse. Automatically install sample vifmrc and help file on first start on Windows. Redraw UI on resize during file operation when 'syscalls' is set. Quit fast on --help/--version. Thanks to Svyatoslav Mishyn (a.k.a. juef). Parse paths that start with plus sign as command-line arguments more carefully (don't treat them as startup commands). Moved checks for build-time tools existence from Makefile to configure script. Report signal that killed Vifm when that happens. Thanks to Svyatoslav Mishyn (a.k.a. juef). Report error on wrong expression in :if statement and misplaced :else/:endif on file sourcing. Define $VIFM_FUSE_FILE environment variable for external commands to communicate path to file used to initiate FUSE mounting of directory we're in. Thanks to astrell. Allow non-printable characters to be arguments of :commands. Thanks to filterfalse. Prevent inserting odd characters on terminal resize while in command-line mode. Throw away dead directories in directory histories on merging vifminfo files. Otherwise clearing such directories on :history is almost useless. Display calculated size of directory for symbolic links that point to it. Handle commands that are too long to be passed directly to the shell by breaking them into list of arguments if possible. Thanks to filterfalse. Install AUTHORS, COPYING, ChangeLog, INSTALL, NEWS, README and TODO to {prefix}/share/doc/vifm. Install color schemes to {prefix}/share/vifm/colors. Otherwise these are not available after installation. Break ties on case insensitive sort deterministically. Dynamic dialog dimensions (minimum %30 percent of the screen rather than screen-wide all the time). Thanks to Svyatoslav Mishyn (a.k.a. juef). Try harder to start in valid directory (go upwards if last visited one doesn't have search permission) or leave the one that's not available anymore. Do not depend on UTF-8 locale on making plain text version of documentation. Thanks to Svyatoslav Mishyn (a.k.a. juef). Normalized sorting keys/view column names: "type" -> "dir", display real mode in octal for "mode", make "type" actually display file type (as "mode" did before). Thanks to Michal Belica (a.k.a. beli-sk). Complete `clear` subcommand of :highlight. Parse output of mandoc version of apropos in :apropos. Thanks to Svyatoslav Mishyn (a.k.a. juef). Error on wrong combinations of macros and background mark in commands. No more unjustified inconsistency in processing macros in :! and :file[x]type commands. Thanks to Miodrag Tokić (a.k.a. loonies). Manual page fixes/improvements. Thanks to Svyatoslav Mishyn (a.k.a. juef). Wrapped option names with single quotes in the man page to make it easier to search for options by their names. Display error on failed conversion to Unicode (say if file name includes broken UTF-8 sequence). Thanks to Svyatoslav Mishyn (a.k.a. juef). Do not move cursor on trying to go one directory up in root of the file system. Thanks to Martin Fischer. Fixed search messages in menus (nth time...). Fixed automatic finishing in some situation when no terminal is available. Thanks to tYGjQCsvVI. Fixed crash on navigation to end of line in command-line mode. Thanks to Christian Fillion (a.k.a. cfillion). Fixed quite rare UI glitch right after updating 'classify'. Fixed UI glitch related to considering 'classify' option for ".." entry in directories without files. Fixed 'lsview' layout calculation for non-ascii names, which used too much space. Fixed 'lsview' entry highlight minor glitch related to symbolic links to directories. Fixed `:help` (no arguments) when 'vimhelp' is on and automatically installed Vim documentation is used. Thanks to ranousse. Fixed occasional file skipping on moving files from trash directory. Fixed gf normal mode key on following symbolic links that target files by path that has symbolic links to directories. Thanks to filterfalse. Fixed failing with error on changing case (gu*/gU*) when target file exists. Fixed undesired file removal on overwriting them with themselves (data loss after confirmation of overwriting files when destination matches source). Thanks to Сергей Соловьёв (Sergej Soloviov). Fixed parsing of %E without field width in 'statusline'. Thanks to willemw12. Fixed 'syscalls' documentation, which inverted its meaning. Thanks to willemw12. Fixed current file number in progress message on moving files across file systems when 'syscalls' is on. Thanks to filterfalse. Fixed memory leak related to list of filetypes. Fixed unexpected path resolution on Windows under path containing symbolic links. Fixed case change renames on Windows when 'syscalls' is set. Fixed file name case change undoing/redoing on Windows. Fixed view background update on ":highlight Win ...". Thanks to hofheinz. Fixed nesting of if-else statements with file sourcing. Thanks to filterfalse. Fixed segmentation faults on displaying binary files in menu mode. Fixed counting number of filtered out files. Local filter reset number of files filtered out by other filters. Thanks to filterfalse. Fixed exponential percent sign escaping on command line completion. Thanks to filterfalse. Fixed percent sign escaping on completion with no input (e.g. :cd ). Fixed absence of "Z" drive in :volumes menu on Windows. Thanks to obtroston. Fixed invalid FUSE mounter exit code on OS X and added lookup for `fusermount` command availability (should use `umount` on OS X). Thanks to Michael Maddern, a.k.a. madders. Fixed compilation on systems where __USE_BSD is defined and WEXITSTATUS() uses compound literals. Thanks to Jeet Sukumaran (a.k.a. jeetsukumaran). Fixed missing "r" characters on generating vifm-help.txt file on some systems. Thanks to Jeet Sukumaran (a.k.a. jeetsukumaran). Fixed current line highlight glitch on scrolling in ls-like view. Fixed completion of file names which start with a space. Fixed command execution in network share on Windows. cmd.exe fails for UNC paths, trick it by running command in temporary directory. Thanks to Robert Sarkozi. Fixed UI glitch when one could notice cursor blinking in the view while typing search pattern on the command-line with 'incsearch' being set. Fixed crash on :sync! when filters of two panels differ and resulting number of files is not the same. Thanks to filterfalse. Fixed navigation to the bottom of the screen with non-zero 'scrolloff', which lifted cursor when it shouldn't. Fixed inconsistency in running :!commands where %i, %m, %M or %S caused command to be executed with default system shell (/bin/sh) rather than with 'shell'. Thanks to filterfalse. Fixed completion of executables by full paths after :!. Thanks to filterfalse. Fixed menu drawing after commands like ":win something !cmd%m". Thanks to filterfalse. Fixed "[a]ppend" shortcut for name conflict resolution, which was still using "p" from older "a[p]pend". Fixed sorting change in ls-like view with empty 'viewcolumns'. Thanks to filterfalse. Fixed estimation calculation on file putting after cancellation. Thanks to Svyatoslav Mishyn (a.k.a. juef). Fixed wrong single character drawing in ls-like view. Thanks to Svyatoslav Mishyn (a.k.a. juef). Fixed displaying ls-like view as list of dots after :restart. Thanks to Svyatoslav Mishyn (a.k.a. juef). Fixed title UI glitch with disappearing last character on disabled side borders. Thanks to Svyatoslav Mishyn (a.k.a. juef). Fixed small view title glitch in CJK directories. Fixed some command-line cursor positioning issues related to non-printable characters. Fixed crash on starting command-line completion with Shift-Tab after stopping on completion item with lower number during previous completion. Fixed last space trimming in user defined commands (quite unusual use case). Thanks to filterfalse. Fixed *nix 'shell' default, was "sh", but as kernel doesn't perform search is $PATH, it would never work. Luckily $SHELL is defined everywhere, so this probably didn't cause any trouble. Fixed background mark truncation for :commands in user-defined commands. Fixed ":vs .." which used to use wrong base directory. Fixed gU, gu and ignore case name sort on filenames with non-latin characters. Fixed missing error messages related to command parsing on sourcing files. Thanks to Damian Ariel Perticone. Fixed placing right aligned ellipsis for CJK characters in one case. Fixed assertion on including "type" in 'viewcolumns' value. Thanks to Michal Belica (a.k.a. beli-sk). Fixed writing current color scheme as the default one, should use builtin colors instead. Thanks to Karol M. Langner (a.k.a. langner). Fixed running filetype commands with background mark and no macros. Thanks to Martin Fischer. Fixed displaying in :map menu (it's new line, which was treated in a special way). Thanks to fogine. 0.7.8-beta to 0.7.8 (2014-10-25) Added ga and gA keys to visual mode. Thanks to geo909. Added "[S]kip all" conflict resolution option. Thanks to Miodrag Tokić (a.k.a. loonies). Highlight "highlight clear". Returned accidentally lost "Merge all" (from message only) conflict resolution message. Made "make clean" remove "tags" files for Vim documentation generated during build. Thanks to Hendrik Jaeger (a.k.a. henk). Taught ga/gA commands to handle selection. Thanks to geo909. More accurate scheduling of view updates. Updated how tags are generated on build. Thanks to Hendrik Jaeger (a.k.a. henk). Updated sample vifmrc file. Fixed extension extraction for column view (wasn't consistent with filename modifiers). Thanks to ranousse. Fixed navigation to filtered-out files (e.g. from menus). Cursor wasn't moved to the file. Fixed parsing of ":cmd &|cmd" pattern on the command-line. Fixed error handling regarding vifmrc-converter. Thanks to Hendrik Jaeger (a.k.a. henk). Fixed dumping Default colorscheme with regard to OtherLine highlight group. Fixed ignoring just installed sample vifmrc on first run. Fixed cursor update in inactive view (say, after ga/gA finished). 0.7.7 to 0.7.8-beta (2014-10-11) Removed ltmain.sh script, which is part of libtool, which is not used anymore. Thanks to Hendrik Jaeger (a.k.a. henk). Added executable() builtin function that checks whether executable exists at given path or in one of directories listed in $PATH. Added one more :if command example to documentation. Thanks to John Magolske. Added more human-friendly (xterm-like) names for 256 colors. Thanks to Michael Vetter (a.k.a. jubalh). Added i and I flags to :filter command to control filter case sensitivity. Thanks to filterfalse. Added filter flags to output of :filter? command and formatted output as a table. Added cancellation (handling of Ctrl-C) for FUSE mounting (but not unmounting). Added multiblock "selection" (in quotes because it's also block deselection and inversion of selection for completeness). Thanks to ranousse, Michelle Bonk (a.k.a. unixtechie). Added av normal mode shortcut that activates selection amending mode. Added/updated av/v/V visual mode keys to switch type of current visual mode. Added Ctrl-G key to visual selection amending mode, which switches kind of amending (append/remove/invert). Added ":highlight clear" to reset to builtin colors. This balances change in resetting color scheme to default one. Useful for building color schemes that are partially based on the builtin one. Added full command names to the manual page to ease searching them. Thanks to y2kbugger. Added 'syscalls' boolean option. It makes Vifm prefer to perform file-system operations with external applications on rather then with system calls. {EXPERIMENTAL}, {WORK-IN-PROGRESS}. The option will be eventually removed. Mostly *nix-like systems are affected. Added implementation for directory and file removal, copying, moving, file, directory and symbolic link creation with system calls. Advanced stuff like ACL is not supported at least not at the moment. Available only if 'syscalls' option is set. Added 'cdpath' option. Thanks to Bruce Hunsaker (a.k.a. hunsakerbn). Added progress for file system operations. Available only if 'syscalls' option is set. Added =pattern special form of user-defined command that sets local filter to the given value (alike "/pattern" and "filter value"). Thanks to filterfalse. Added "[a]ppend the end" conflict resolution option (appends the rest of file, e.g. if previous operation was terminated). Available only if 'syscalls' option is set. Thanks to Sergei Shilovsky. Added OtherLine highlight group for cursor of inactive pane. Thanks to Svyatoslav Mishyn (a.k.a. juef). Added 'tuioptions' option. Controls padding of file lists in panels and visibility of side borders. Thanks to Bruce Hunsaker (a.k.a. hunsakerbn) and Svyatoslav Mishyn (a.k.a. juef). Added 'fillchars' option. Configures fill character for vertical borders. Thanks Svyatoslav Mishyn (a.k.a. juef). Added Vim plugin directory to share/vifm/vim on `make install`. Thanks Svyatoslav Mishyn (a.k.a. juef). Added has() builtin function that checks whether particular property is enabled (two properties for now: "unix" and "win"). Thanks to filterfalse. Added logical NOT unary operator ("!"). Added function name completion on command-line. Added file renaming filetype plugin for Vim. It displays list of original file names in a vertical split. Thanks to Factorial Prime. Added file additional mail filetype plugin for Vim. It allows one to pick attachments via Vifm on a shortcut. Thanks to Pavneet Arora. Added merge all option for name conflict resolution. Same as "merge", but remember the choice for future conflicts of directories. Thanks to willemw12. Highlight environment variables in :source command. Do not highlight option names in the right-hand side of assignments of :set command. Highlight numbers and all operators (most were missing) in expressions. Highlight wrapped :! commands properly. Various syntax highlight improvements related to handling of command arguments. Make Vim plugin use cmd.exe as default shell on Windows. Thanks to Jonathan Da Silva. Provided additional repository for Vim plugin (see the README for URL). Documented how to use 256 colors in :highlight command. Thanks to Michael Vetter (a.k.a. jubalh). Rewrote trash content removal with system calls in background thread to omit unportable invocation of shells. It's also visible in :jobs menu. Thanks to lyuts and ckester. Ignore trailing whitespace after background mark (" &") in command-line mode. Made :filter command consider trailing slash for symbolic links that point to directories. Thanks to filterfalse. Do not reset selection on navigating to a mark in current directory. Thanks to filterfalse. Display error on encountering unknown values assigned to 'sort' option. Allowed use of :filter syntax in user-defined filter commands (e.g. "command conf filter/.*\.cfg$/"). Do not reset color scheme to default one on :restart if another existing one is stored in vifminfo file. Allowed tabulation to be used as arguments separators in command-line commands. Thanks to y2kbugger. Renamed "default color scheme" to "primary color scheme" in documentation to avoid confusion. Separate visual selection marks ('<' and '>'), which allows to restore it via "gv" in both panes. Thanks to filterfalse. Reset search results on toggling 'hlsearch' to apply new option value on the next search query (/, ?, n, N). Include regular expression in search error message that says that it's wrong. Avoid displaying useless search messages (those that user can't see, but that are shown in :messages). Implement "(" and ")" keys for "perms" and "type" sorting keys. Thanks to filterfalse. Smart paths completion that allows completion of quoted arguments (both ' and " types of quotes) and considers argument type context by performing escaping when needed. Documented environment variables used by vifm separately as usually done in documentation for other applications. Made +/- operands after semicolon in command-line range adjust base range end position rather than base cursor position as Vim does. Thanks to filterfalse. Documented connection between local filter and 'incsearch'. Thanks to filterfalse. Repeat search with last used search pattern on empty pattern of the search mode. Automatically remove non-existent directories from directory history on :history command to speed up future operations (this clean up is very cheap on composing menu). Optimized speed of checking existence of a directory (important on displaying directory history). Skip nonexistent directories on Ctrl-O/Ctrl-I. Extended 'slowfs' option format to allow path prefixes (in particular, it's useful for autofs). Thanks to Евгений Жаров (a.k.a. ezharov). Renamed configure.in to configure.ac. Thanks to Hendrik Jaeger (a.k.a. henk). Made it possible to hide Vifm's documentation from Vim when it's not run by Vifm's :help command. Thanks to ranousse. Separated Vifm's vimdoc from plugin documentation. Do not store temporary messages of command-line in history (progress messages). Hidden misleading error message from git during successful build. Made expand() builtin function expand environment variables. Thanks to filterfalse. Do not show dead entries in :lstrash menu. Hide files from previously used trash directories in :lstrash. Thanks to filterfalse. Changed "overwrite all" key from "a" to "O" for consistency. Thanks to willemw12. Fixed odd creation of ~/.vifm/Trash directory even when it's redefined in vifmrc using 'trashdir' option. Fixed segmentation fault on running vifm with single argument if restored cursor is in the right pane. Thanks to Svyatoslav Mishyn (a.k.a. juef). Fixed visual glitch for long wide character (CJK) file names with disabled cropping. Thanks to anonymous from linux.org.ru. Fixed trash emptying when csh-like shell is in use. Thanks to lyuts. Fixed "$APPDATA/Vifm" directory existence check for Vim plugin on Windows. Thanks to Jonathan Da Silva. Fixed running external commands with long titles inside terminal multiplexers. Invoked shell in current directory. Fixed processing of marks command followed by anything in right-hand side of a mapping. Thanks to filterfalse. Fixed a minor UI glitch with drawing rightmost character position of the stat window after startup. Fixed segmentation fault during startup in a small terminal on OS X. Thanks to Daniel Dettlaff (a.k.a. dmilith). Fixed right aligned cropping for CJK (e.g. viewcolumns={name}..,{} could print one more character position or fail due to assertion). Fixed unexpectedly broken compilation on FreeBSD. Thanks to Daniel Dettlaff (a.k.a. dmilith). Fixed view update after :restart in some cases. Thanks to filterfalse. Fixed UI glitches and most of flickering of the TUI on :restart. Fixed check for wrong color number in :highlight. Thanks to y2kbugger. Fixed :highlight command recovery. Thanks to y2kbugger. Fixed :!! command, seems to be not working for a while. Fixed segmentation fault on no view history and ":set autochpos" in vifmrc. Thanks to ranousse. Fixed small visual multiline status bar update issue. Thanks to ranousse. Fixed non-updated single character of status line for multiline status bar. Fixed processing file names with sharp sign for some shells. Thanks to Flaviu Tamas (a.k.a. flaviut). Fixed message about wrong search pattern regular expression. Fixed Ctrl-C detection, false positives occurred on resizing terminal (both come as signals into program). Fixed some small issues and UI glitches related to 'lsview' and 'viewcolumns' options. Fixed operations with directories that have very long names. Fixed stripping special sequences from vifm-help.txt on OS X. Thanks to Stephen L. Holtz (a.k.a. stephenholtz). Fixed ga and gA commands for files bigger than 4 GiB on 32-bit operating systems. Thanks to filterfalse. Fixed some buffer overrun bugs discovered on OS X and made tests more BSD-utils friendly. Fixed segmentation fault on Alt-. command in command-line mode (since 0.7.7). Fixed wrong single file selection after applying local filter (also wrong number of selected files on status bar). Thanks to filterfalse. Fixed tracking of files in trash on Windows. Thanks to filterfalse. 0.7.7-beta to 0.7.7 (2014-05-16) Improved documentation on :file[x]type commands and time sorting keys. Thanks to Stas Malavin. Updated zenburn color scheme (by Svyatoslav Mishyn, a.k.a. juef). Fixed drawing "*" mark for cursor in inactive pane. Thanks to Svyatoslav Mishyn, a.k.a. juef. Fixed selecting file on navigation from menus with filelists. Fixed processing of backward slashes in menus with filelists on Windows. Fixed navigation to menu items with full paths on Windows. Thanks to Robert Sarkozi. Fixed following overwrite all option on file operation conflict resolution. Thanks to Stas Malavin. 0.7.6 to 0.7.7-beta (2014-04-30) Added Ctrl-W z key to normal and view modes, which closes preview pane or view modes. Thanks to filterfalse. Added %A macro to 'findprg' and 'grepprg' options, which is expanded to unmodified list of arguments. Thanks to Robert Sarkozi. Added handling of paths with backward slashes for :find/:locate/:grep/%M menus on Windows. Thanks to Robert Sarkozi. Added sample light color scheme. Patch by Daniel R. (a.k.a. reicheltd). Added :lstrash command-line command, which displays list of files in trash. Thanks to Sergei Shilovsky. Added :trashes command-line command, which lists all non-empty trash directories. Thanks to Sergei Shilovsky. Added cancellation handling for file system operations and invocations of external applications (works best on *nix systems). Thanks to Milan Svoboda, a.k.a. tex. Added "type" key to the 'sort' option to allow controlling grouping of directories. Thanks to Daniel R. (a.k.a. reicheltd). Added &option syntax for expressions (returns value of an option). Added angle bracket notation. Thanks to filterfalse. Added 'number', 'relativenumber' and 'numberwidth' options to control displaying of file numbers. Thanks to filterfalse and greye. Added "gf" (go to file) and "e" (open in editor) keys to :grep, :find, :locate and user menu with navigation (%M macro). Added --enable-remote-cmd switch to configure script disabled by default, as current implementation of the feature is insecure. Thanks to astrell. Added Ctrl-X a/c/d/e/m/r/t/= keys to command-line mode that insert parts of file names and values of filters (see related documentation). Thanks to ranousse and filterfalse. Added %n macro which suppresses using of terminal multiplexer in a command (user-defined :command, :!command or :file[x]type action). Added sample dark solarized color scheme (provided by Stéphane, a.k.a. istib). Added zenburn color scheme (provided by Svyatoslav Mishyn, a.k.a. juef). Extended 'trashdir' to handle list of path, some of which can specify location of trash directories local to each mount point. Thanks to smpolymen and Sergei Shilovsky. Extended parser to support integer number constants and unary minus and plus operators. Extended parser to support <, <=, >= and > comparison operators for strings and integers. Treat semicolon (";") as a valid range separator for command-line commands. Allow empty ranges for command without name (as in :4). Don't reset view selection on :if and :else commands. Optimized file name comparison on sorting. Improved documentation on bookmarks (documented special bookmarks). Don't select parent directory automatically for local filter. Thanks to filterfalse and jtbm37. Display error message when :delmarks! is followed by arguments. Made bookmarks merging smarter by storing timestamps. Removing bookmarks now works as expected. Bookmarks overwriting by another instance shouldn't happen anymore. Thanks to Michael Maddern, a.k.a. madders. Disabled command-line commands auto-completion in local filter prompt. Allowed disabling quickview while its pane is hidden. Display value of local filter in the output of :filter? command. Handle backspace in preview window as a terminal. Thanks to Svenn Are Bjerkem, a.k.a. svenn. Do not use terminal multiplexer for internal edit operations (editing of file names or command-line). Skip empty and whitespace only error messages, they are of no use. Highlight environment variables in :unlet command. Thanks to filterfalse. Fixed file descriptor leak on finishing background tasks. Thanks to anonymous from linux.org.ru. Fixed displaying of search messages in menus. Fixed check for whether temporary files with list of file names is changed during bulk rename operation. Thanks to Daniel R (a.k.a. reicheltd). Fixed reset of charset options (like 'cpoptions'), which could result in segmentation faults. Fixed memory leaks on :restart command. Fixed format arguments parsing on displaying "Invalid expression" error message for :echo and :execute commands. Fixed overwrite of previously visited directory on view update (made `:cd -` and '' useless after, for instance, switching panes). Fixed error message on navigating to a wrong bookmark. Fixed possible removing files at destination on restoring files from trash manually. Fixed ignoring command-line commands that entered by a mapping: ignore only commands entirely entered by a mapping, not finished by one. Thanks to Евгений Жаров (a.k.a. ezharov). Fixed segmentation failure when invalid bookmark name is used with quote command as a motion. Fixed processing of some forms of nested :if statements. Fixed segmentation fault for operating systems that have gigantic maximum length of argument list. Thanks to Jiri Wiesner. Fixed situation when oldest elements of histories were not available even though they were present in vifminfo file. Fixed number of selected files after ":invert s" command. Thanks to filterfalse. Fixed q= which displayed history of search by mistake. Thanks to filterfalse. Fixed merging directories on delete then paste. Fixed wrong file name cropping on moving/copying files from trash. Thanks to kazufukurou. Fixed extra escaping on prompt filename completion on Windows. Fixed drawing of hidden view in explore mode over active one. Thanks to filterfalse. Fixed missing title of quickview pane after entering view mode (e.g. with Ctrl-W W). Fixed titles update when one of panes is in view mode (active and inactive highlighting wasn't always right). Fixed segmentation fault caused by uninitialized type field of filelist entry (shared directory in virtual machine in this case). Thanks to Milan Svoboda, a.k.a. tex. Fixed navigation to non-readable directories from a menu. Fixed selection borders UI glitch. Thanks to Svyatoslav Mishyn, a.k.a. juef. Fixed issues discovered by cppcheck, Clang static analyzer and Coverity scan tools. Fixed updating terminal title for some environments. Thanks to filterfalse. Fixed extending filetypes that are missing macro on Windows when cmd.exe shell is used. Thanks to Daniel Polanco, a.k.a. dlpolanco. Fixed work with filenames contining special symbols on Windows with cmd.exe shell. Thanks to Daniel Polanco, a.k.a. dlpolanco. Fixed testing whether application uses GUI on Windows when path contains spaces. Fixed crash on a sequence of :let/:unlet statements. Thanks to filterfalse. 0.7.6-beta2 to 0.7.6 (2013-10-31) Removed check for stdscr from the configure. Thanks to jtbm37. Made command name column of the :command menu automatically expand for long names. Thanks to MadMaverick9. Provided better error messages on entering view mode. Made local filter work when 'incsearch' is not set. Fixed partial displaying of binary data in view mode. Fixed displaying of non-printable characters in preview and view mode. Fixed redrawing ruler on terminal resize while being in explore mode. Fixed small drawing issue with menu lines containing Control+x characters. Fixed search result highlighting of view mode on line edges. Fixed backward search in view mode for the first line. Fixed view mode highlighting for multi-byte characters. Thanks to filterfalse. Fixed segmentation fault on exploring same file in both views. Thanks to filterfalse. Fixed unexpected view redraw on :sync command with view mode active in the other pane. Thanks to filterfalse. 0.7.6-beta to 0.7.6-beta2 (2013-10-24) Made building for Windows64 platform possible. Consider initial filter inversion value in user defined filter command. Thanks to filterfalse. Several minor fixes/updates in documentation and sample vifmrc. Thanks to filterfalse. Display error after sourcing file with unmatched :if/:endif statements. Thanks to filterfalse. Fixed displaying of barely visible false error messages on the status bar on some rename operations. Fixed running executables without specifying their extension on Windows. Thanks to filterfalse. Fixed viewing of files with custom viewers on Windows. Thanks to filterfalse. Fixed issues with reading files on Windows. Thanks to Robert Sarkozi. 0.7.5 to 0.7.6-beta (2013-10-17) Added "f" flag to 'cpoptions' option. It controls initial state of filename filter inversion for :filter[!] {regex} command (in other words, it inverts meaning of exclamation mark). Thanks to filterfalse. Added helptags for 'cpoptions' flags in documentation in Vim format. Added --with-curses-name=NAME option to the configure script to allow specifying name of the curses library to link against. Thanks to Russell Urquhart. Added "Globs" section to the documentation. Added 'aproposprg', 'findprg', 'grepprg' and 'locateprg' options to specify external commands format. Added optional argument for :invert command. Thanks to filterfalse. Added editing command-line using Vim (like command window in Vim). Thanks to filterfalse. Added Ctrl-G command-line key to start editing command-line in external editor (for editing command, search pattern and new file names). Added q:, q/, q? and q= normal and visual modes keys (except q=, which is defined for normal mode only) to prompt for command-line in external editor. Added local to directory temporary file name filter. Thanks to Alexandre Viau and filterfalse. Added "=" normal mode key, which activates file name filtering. Added "fhistory" to 'vifminfo', which controls storing of local filter history. Added "=" and "filter" values for :history command, to show history of local filter. Added integration with tmux. Thanks to Seth VanHeulen (a.k.a. svanheulen). Added merge option for name conflict resolution, which allows merging two directories overwriting files with matching names. Added desktop entry file. Thanks to Richard Benson. Updated application icon. Thanks to Richard Benson for making it. Updated config.guess and config.sub files to their latest versions. Thanks to Hendrik Jaeger (a.k.a. henk). Removed deprecated acconfig.h file. Thanks to Hendrik Jaeger (a.k.a. henk). Replace compile symbolic link with actual file. Distinguish files and directories in filename filter by appending a slash to names of directories. Use last search pattern as filename filter when :filter command gets an empty argument (:filter//, :filter"", :filter''). Thanks to filterfalse. Don't complete commands like :filter, :tr, :substitute, etc. Match only filename against global in :fileviewer instead of full path. Removed check for WINDOW type in curses.h from configure script (didn't work for OS X and cygwin). Thanks to filterfalse. Updated syntax file to ignore non-sense characters in front of some commands (e.g. :set, :let, :highlight). Thanks to filterfalse. Updated syntax file to highlight arguments of the :execute command as expressions. Updated syntax file to highlight arguments of all map and for :command commands smarter than before. Filter in case insensitive way on Windows. Updated syntax file to highlight . Thanks to filterfalse. Updated syntax file to highlight and environment variables in argument list of the :cd command. Thanks to filterfalse. Updated syntax file to highlight :normal when it's not first in the line and treat its arguments as command-line if it starts with a colon. Thanks to filterfalse. Updated syntax file to do not highlight anything inside quoted strings except when they are part of an expression. Remove escape-codes from generated plain-text documentation on cygwin. Thanks to filterfalse. Do not reset selection on search when 'hlsearch' is reset. Thanks to filterfalse. Preserve current cursor position on view resort. Don't let completion of the :history command eat all available memory. Made all Ctrl-W x keys available in view mode. Thanks to filterfalse. Expand environment variables in values of the 'fusehome' and 'trashdir' options. Thanks to filterfalse. Provided more adequate reaction on setting 'trashdir' variable to wrong value. From now on not absolute paths for the 'fusehome' options are rejected. Separated file name filter into manual and automatic mainly for convenience. Use AC_GNU_SOURCE macro in configure.in, which is the correct way to request for GNU extensions across various operating systems. Check whether current directory is writable on :mkdir command. Check destination path existence before changing directory to it on :sync command. Consider 'classify' option on displaying file name in the status bar. Don't overwrite directory stack stored in vifminfo on exit unless it was changed in current session. Better error messages on application run failure on Windows. Don't wait finishing of GUI applications on Windows. Thanks to Robert Sarkozi. Store cancelled prompt input in prompt history. Better order of command-line command checks. Show better error message on unmatched quotes in command arguments. Force split-view when two paths are specified on command-line. Thanks to filterfalse. Corrected view switching when vifm gets only one argument on command-line (didn't switch if pane was already at specified path). Process [count] passed to gUU, gU, gUgU, gu, guu and gugu commands. Changed meaning of the R key in view mode from redrawing view to reloading it preserving scroll position. Thanks to Robert Sarkozi. Documented how | is treated on command line by some commands. Thanks to Roger Bongers. Increased performance of (re)loading content for view mode. Thanks to Robert Sarkozi. Fixed configuration when set_escdelay() function is not available. Thanks to Russell Urquhart. Fixed building when wcscasecmp() and wcsncasecmp() functions are not available (just don't use those functions). Thanks to Russell Urquhart. Fixed reserving of about 1 GiB piece of memory on 256-color terminals. Fixed hanging on previewing files with long lines and code highlighting. Fixed running of executable with symbols that require escaping in their name (*nix only). Fixed terminal hang after executing several external commands in a row. Thanks to filterfalse. Fixed "No matches..." message for :apropos command, which accessed freed memory. Fixed displaying of search results message for different combinations of 'wrapscan' and 'hlsearch' options states. Fixed real/potential issues discovered using Coverity scanner. Fixed search of the first element in file list when displaying of parent directory is disabled. Fixed small memory leak in expression parser. Fixed local options after startup (could be loaded for wrong pane). Thanks to filterfalse. Fixed fails on using absolute path to executables when 'fastrun' option is on. Thanks to MadMaverick9. Fixed running external commands with 'fastrun' option set, in case when there are more than one executable with given name. Fixed cursor position of the other view after switching quick view off right after startup. Fixed storing directories passed as command-line parameters in directory history. Thanks to filterfalse. Fixed compilation for systems, where coreutils doesn't support -n flag. 0.7.5-beta to 0.7.5 (2013-05-10) Better Makefile for tests. Thanks to Hendrik Jaeger (a.k.a. henk). Make running tests of color manager depend less on type of terminal. Thanks to Hendrik Jaeger (a.k.a. henk). Don't link against libdl when it's not used. Thanks to Hendrik Jaeger (a.k.a. henk). Commit src/Makefile.in file as it is (do not remove odd trailing whitespace characters), it could cause issues with automated building. Thanks to Hendrik Jaeger (a.k.a. henk). Set locale for tests that rely on it explicitly. Thanks to Hendrik Jaeger (a.k.a. henk). Don't accept arguments to the :help command when 'vimhelp' option is off. Pause on Windows on failed execution of a help command. Thanks to filterfalse. Pause on Windows, when executing of shell command fails. Resize terminal window back to its original size after :help on Windows. Thanks to filterfalse. Fixed generation of vifm-help.txt file on Windows (all occurrences of the "[m" sequence were removed). Thanks to Sebastian Cyprych. Fixed cd'ing to a directory after showing "Directory Access Error" message. Fixed mapping of and on Windows. Thanks to filterfalse. Fixed Tab key description in documentation, the part related to 'cpoptions' flag. Thanks to filterfalse. Fixed potential issues pointed out by clang static analyzer. Fixed calling Vim on :help command without arguments on Windows. Thanks to filterfalse. Fixed calling Vim on :help command with 'vimhelp' option turned off and a path with spaces in vifm's configuration directory. Thanks to filterfalse. Fixed resetting of 'lines' and 'columns' options to their default values. Thanks to filterfalse. 0.7.4b to 0.7.5-beta (2013-04-22) Added Gentoo ebuild. Thanks to Oleg Gordienko (a.k.a. gordio). Added parsing of escape codes in the preview pane. Added parsing of escape codes in explore (less-like) mode. Added "perms" sorting key on *nix (proposed by Daniel Dettlaff, a.k.a. dmilith). Added sample color schemes (proposed by Daniel Dettlaff, a.k.a. dmilith). Added expand() builtin function to expand macros (thanks to Sebastian Cyprych for the use case). Allowed exclamation mark for the :sync command (to force synchronization of cursor position when used without arguments). Added macros that are expanded to register's content (thanks to Florian Baumann, a.k.a. derflob). Added 'shortmess' option and its first flag: "T" to shorten long status bar messages. Added --without/[with]-dyn-X11 flag to the configure script to control static/dynamic linking against libX11 library. Thanks to Hendrik Jaeger (a.k.a. henk) for the idea. Don't use libtool in build process on *nix platforms (thanks to Merovius). Less-like mode now highlights multiple matches in a line. Less-like mode is now updated immediately when one changes 'wrap' option. Don't redraw file list for explore window on resize. Less updates for window in explore mode on resize. Don't fallback to default colors on try to switch to a colorscheme, which is not supported by terminal. Made 'slowfs' option actually work on OS X (thanks to Daniel Dettlaff, a.k.a. dmilith). Made :execute process its arguments just like :echo command (thanks to Daniel Dettlaff, a.k.a. dmilith, which made me discover old behaviour). Save dot files filter state in vifminfo (thanks to Daniel Dettlaff, a.k.a. dmilith). Slightly updated plugin related documentation. Don't store last command-line command for the dot normal mode command between sessions. Also it doesn't depend on command-line history anymore and can be used with completely disabled history. Changed the way title of the permissions dialog is composed. Fixed configuration on OS X and FreeBSD because of unavailable mntent.h header and strverscmp() function. Thanks to Daniel R. (a.k.a. r1chelt) and Daniel Dettlaff (a.k.a. dmilith). Fixed configuration when libmagic is not available, but selected (tried to check its symbols). Fixed configuration on OS X when libncursesw is installed as libncurses. Now configure script checks for libncurses if libncursesw is not found. Thanks to Daniel R. (a.k.a. r1chelt). Fixed vifminfo file update on Windows (wasn't updated at all). Fixed "Press return..." message appearing always on OSX (yes, again; hope this is final fix). Thanks to Daniel R. (aka r1chelt). Fixed buffer overflow on composing very long list of sorting keys. Thanks to Christoph (a.k.a. informationen). Fixed reading very long lines from vifminfo file. Thanks to Christoph (a.k.a. informationen). Fixed displaying of very long lines correctly in explore mode when 'wrap' is off. Fixed displaying of very long lines correctly in menu mode. Fixed using of extra memory for menu items that are read from other program's output. Fixed segmentation fault on adding new elements to history after decreasing 'history' option. Thanks to Oleg Gordienko (a.k.a. gordio). Fixed determining of executable files on Windows (particularly parsing the last item of $PATHEXT environment variable). Fixed message displayed on invalid search pattern in explore mode. Fixed highlighting of search results that cross virtual line boundary in explorer mode when wrapping is on. Fixed file preview pane update on Ctrl-W X. Fixed segmentation fault on < or g keys in explore mode when file is fully visible. Fixed displaying of last lines in explore mode with wrapping turned on for texts that contain characters taking more than one character position. Fixed displaying of pane title for paths that contain characters taking more than one character position. Fixed displaying of bookmark menu for paths that contain characters taking more than one character position. Fixed displaying of status line for file names that contain characters taking more than one character position. Fixed displaying of menus for lines that contain characters taking more than one character position. Fixed screen update after v in explore mode. Fixed Ctrl-W H/J/K/L keys in less-like mode activated by . Fixed Ctrl-W H/J/K/L/X keys in normal mode when explore mode is active in the other pane. Fixed initial cursor position in the :colorscheme menu. Fixed mappings of sequences containing non-ascii characters (thanks to ksandr1v). Fixed strange behaviour of Ctrl-U on top of file list in visual and normal modes. Fixed a bug with loading multiline commands containing bars ('|') from a vifmrc file (thanks to Sebastian Cyprych). Fixed a bug with trailing characters on loading multiline commands containing bars ('|') from a vifmrc file. Fixed a very small issue with positioning of cursor mark in the other pane, which happened after starting vifm with another size of the terminal. Fixed a macro expansion in command-line on Windows when 'shell' is set to "cmd" (thanks to Sebastian Cyprych). Fixed a typo in configure.in file, which didn't allow to specify custom location of curses library. Fixed setting of value of $CPPFLAGS in configure.in, which didn't allow to specify custom location of curses library. Fixed cursor position right after entering fuse mount point when old cursor position is recalled from history and view has too few rows. Fixed occasional reset of cursor color to default after pane switching operations. Fixed displaying of search results message when 'incsearch' option is on. Fixed destination file name existence on rename operation. Fixed very rare crash on :chmod (thanks to Marton Balazs, a.k.a. balmar). Fixed chmod on files with long names (they were truncated and appended by ellipsis). Fixed processing of incomplete escape sequences in command-line (used to crash vifm). Thanks to Denis Protivenskiy. 0.7.4a to 0.7.4b (2013-01-21) Removed screen title forcing for shell commands. Fixed 'z' (thus 'Z') register, which was unavailable (apparently since 0.6.3). Fixed using of register name argument in :yank command (was ignored). Fixed error message on command errors in user defined command-line commands (e.g. on `:foo` after `:command foo :bar`). Fixed displaying of title of the other pane in one view mode. Fixed displaying of file names in Chinese and other languages that can have characters taking more than one position on the screen. Fixed command-line cursor positioning for Chinese and other languages that can have characters taking more than one position on the screen. Fixed segmentation fault on :colorscheme command with no color schemes installed. Fixed enumeration of colorschemes for some file systems. Fixed handling of doubled single quote in single quoted command argument. Fixed small bug with sorting numbers with and without leading zeroes. Fixed applying of 'classify' option to symbolic links to directories. Fixed running of external commands using screen on l or Enter key in the normal mode. Fixed Meta-. on Windows (didn't work because of pdcurses). Fixed `:cd ........` command on Windows (looks more like a Windows issue). Fixed silent ignoring issues on running executables on Windows. Fixed races on writing vifminfo file. 0.7.4 to 0.7.4a (2012-10-22) Don't redraw statbar until end of :restart command. Don't ignore wrong number of arguments in function calls, show an error. Don't build sources separately for tests. Better processing of count given to "!!" normal mode command. Handle integer overflow of huge count correctly. Make commands like d2d, y2y and D2D work as in Vim. Use linux native console specific settings if $TERM ends with "linux" (not only equals it). Check TMPDIR, TEMP, TEMPDIR and TMP environment variables to determine location of directory for temporary files. Made processing of value of 'fusehome' option more error prone. Fixed autotools configuration files. Fixed terminal size resetting after :restart. Fixed 'dotdirs' option on Windows. Fixed repetition of `bar` in `foo | bar` on "." command. Fixed segmentation faults on passing to big count to DD, dd or yy normal mode commands. Fixed displaying of filenames with non-latin characters in the view on Windows. 0.7.3a to 0.7.4 (2012-10-18) Removed compile-time compatibility mode (the compatibility-mode switch), now "f" flag in 'cpoptions' does the same. Replaced gl normal mode mapping for Windows with gr because of conflict. Added Ctrl-W H/J/K/L normal mode keys. Added status bar messages for :apropos, :find and :locate commands. Added 'viewcolumns' local option to control view columns. Added completion for :set option= even for options without variants. Added Ctrl-T handling in command line to swap characters. Added Meta-. handling in command line to paste last parts of previous commands. Added --without/[with]-X11 configure script option. Added 'lsview' option to control ls-like view look. Added gh, gj, gk and gl keys for normal and visual modes. Added 0, ^ and $ keys for normal and visual modes, which also work as selectors in normal mode. Added %E 'statusline' option macro, which means size of all selected files or current file, if no files are selected. Added light versions of color names. Added mapping commands for view and menu modes. Added :echo command. Added support for builtin functions and filetype() as the first one. Added support for `==` and `!=` operators. Added :if, :else and :endif commands. Added man pages for vifm-pause script and vifmrc-converter. Added :normal command. Added 'dotdirs' option to control displaying of "../" directory. Added "t" flag to 'cpoptions' option. Added 'classify' option to set prefixes and suffixes for different file types. Try the rest of the programs for an association when the default isn't found. Allow paths in :file[x]type command that contain spaces to be doublequoted on Windows. Escape pipe character during :file completion. Expand macros for user defined commands. Changed relative path base for :split and :vsplit commands. Complete only directory names for :split and :vsplit commands. Check current view of other pane on leaving FUSE mount directory an don't unmount if that file system is still in use. Complete :set for short and full option names like Vim does (e.g. 'so' should be expanded to 'sort', not only 'scrolloff'). Reduce delay between terminal resize and TUI redrawing. Check for used curses symbols in ./configure script. Check for libpthread presence in ./configure script. Check for pthread.h header and all its required elements in ./configure script. Check for magic.h header and required libmagic functions in ./configure script. Check for regex.h header and all functions, macro and types connected with it in ./configure script. Check for GTK headers and all related in ./configure script. Check for socket related headers and function in ./configure script. Check for a bunch of system headers, types and functions in ./configure script. Flicker less on :restart command. Don't show Ctrl-C part in information message boxes where it doesn't make sense. Remove automatically generated files on `make clean`. Don't pause on '0' after Ctrl-W (count cannot start with zero). Multiply counts in front and in the middle of commands with Ctrl-W (as Vim does). Multiply counts in front of command and its selector (as Vim does). Reduced memory consumption of view histories. Fixed background bold (light) colors in linux native console. Fixed segmentation fault on running vifm with one path in the argument list. Fixed directory content update on chain execution of several commands in mappings. Fixed partial drawing of file list over status line after expanding one line status bar to multiple lines. Fixed artifacts with bottom of the TUI after shrinking multiline status bar to one line. Fixed file overwriting issue. Fixed appearance of an empty filename in the :marks menu. Fixed filter resetting on following bookmarks. Fixed mapping of . Fixed "Press return..." message appearing always on OSX. Fixed segmentation fault on :move command with path containing slash. Fixed segmentatino fault on :restart during prompt history load. Fixed eternal looping on "(" or ")" in normal or visual mode and iname sort. Fixed segfault on `:set all=` completion try. Fixed displaying of 'columns' and 'lines' option values. Fixed ga and gA over sshfs. Fixed small issues with other pane position and mark update on startup and terminal resizing. Fixed extra slash in :registers menu for files in root directory. Fixed file viewer matching when symbolic link target is a directory. Fixed checks for required headers in ./configure script. Fixed checks for required functions in ./configure script. Fixed check for git command presence in src/Makefile.am. Fixed cursor position in menus, when 'scrolloff' is set. Fixed utf-8 issue in :marks menu. Fixed dd in :commands menu. Fixed invoking of menus from command-line (with -c or + argument). Fixed Ctrl-F and Ctrl-B in menus again (they probably didn't work correctly ever until now). Fixed unexpected file list drawing on switching between panes in one pane mode with view active. Fixed small issue with sorting files with numbers in names on *nix. Fixed parsing of double single quote in single quoted strings. Fixed description of installation to $HOME in the INSTALL file. Fixed assignment of empty value to a option of set type. Fixed small memory leak on restoring files from trash and putting files. Fixed small memory leak related to :messages command. Fixed small memory leak related to implicit single file selection. 0.7.3 to 0.7.3a (2012-06-23) Added a section about color schemes to the documentation. Added checks for correct value of 'tabstop' option. Added checks for correct value of 'timeoutlen' option. Expand tilde in the second argument of :colorscheme command. Better completion for :colorscheme command. Forbid relative paths in :colorscheme command until vifm is completely loaded. Documented that %m, %M, %s, %S and %i have bigger priority than &. Documented that %m, %M, %s, %S and %i are mutually exclusive. Allowed whitespace after option name in :set command. Documented treating of whitespace around option names in :set command. Reset value of 'columns' option to real number of columns. Reset value of 'lines' option to real number of lines. Reset value of 'scrolloff' option to zero on attempt to assign a negative value to it. Faster Ctrl-W x, Ctrl-W o, Ctrl-W s, Ctrl-W v, Ctrl-W =, Ctrl-W <, Ctrl-W >, Ctrl-W -, Ctrl-W +, Ctrl-W |, Ctrl-W _. Faster redraw on terminal resizing. Faster execution of `:set sort=foo sortorder sortnumbers` in vifmrc. Made file filtering using regular expressions work faster (matters when directory contains several thousands files). Draw quickview on startup only once. Faster redrawing of status bar with "-- VISUAL --" message after "Press Enter message". Show correct number of selected files in visual mode after n and N keys. Pass range given to alias to an aliased command. Fixed unexpected resetting of dot filter on following mark to root directory. Fixed loading file associations from vifminfo. Fixed small memory leak on displaying :file menu. Fixed saving of x file associations to vifminfo. Fixed segmentation fault on :file command on files without associations and vifm built with --enable-desktop-files. Fixed going to top of selection after Ctrl-A/X, C, i and zf in visual mode if visual mode was activated at least once before that. Fixed compilation with ncurses prior to 5.7 version. Fixed compilation warnings about unused result of fscanf. Fixed merging of directory history in vifminfo file (loosed relative positions of directories absent in history of running instance). Fixed history size issue, when real histories size diverged with the value of 'history' option. Fixed displaying of non-latin characters when panel width is only one character. Fixed selection of ../ directory on gv key. Fixed visual selection of the first file in the root directory. Fixed memory leak on `:[ncv]map foo`. Fixed restoring of file name filters. Fixed restoring of cursor position in the other view if quick view was opened too. Fixed selection of files on search in visual mode with 'incsearch' option turned off or n and N keys regardless of 'incsearch' state. Fixed search repeat in visual mode. Fixed search update with 'incsearch' on Ctrl- keys in search prompt. 0.7.2 to 0.7.3 (2012-06-03) Removed possibility of moving items in :file menu. Removed empty line from :file menu for case when vifm was configured with --disable-desktop-files flag. Added description for :filetype, :filextype and :fileviewer commands. Added --enable-desktop-files (enabled by default) configure option. Added completion for :touch command. Added macros expanding for :mkdir command. Added macros expanding for :touch command. Added completion for :clone command. Added completion for :copy, :move, :alink and :rlink commands. Added completion for :mkdir command. Added completion for :split and :vsplit commands. Added completion for :rename command. Added size of file in bytes in file info mode (Ctrl-G). Added "Y" key to visual mode as an alias for "yy". Added :finish command to use in sourced scripts. Added %i macro to completely ignore output of external commands. Added notes about automatic FUSE mounts to the documentation. Added Ctrl-L handling in file info (Ctrl-G) mode. Added vifm version and last modification date to vim documentation file. Added q key to close menus. Leave leading zeros on Ctrl-A/X commands. Check coreutils version on configuring to omit using of -n option with coreutils of versions prior to 7.1. Allow bookmarking of host names on Windows (e.g. //ZX-SPECTRUM). Show host's root in history menu (e.g. //ZX_SPECTRUM). Made :fileviewer command work on Windows. Open selected directories with l or Enter keys. Changed the way 'fastrun' works. Replace home directory with the tilde in terminal title. Improved :let command (allowed using of expressions at the right side of the statement). Properly handle when user alters PATH environment variable using :let command. Now vifm removes scripts ($VIFM/scripts/**) from PATH for :shell command. Less blinking of the screen in various scenarios. Corrected status bar messages about failed search. Use common search history for normal, visual and menu modes. Save last typed but not executed command in command-line mode (this also includes searches). Better handling of multiline messages in status bar. Increased directory modification stamp precision on *nix. Documented ./configure script options in the INSTALL file. Fixed bug with running Ctrl-A/Ctrl-X commands on directories. Fixed undoing of previous operation on error in current one. Fixed updating of views when they are in view mode. Fixed bug with failed assertion on not complete macro. Fixed error reporting on Ctrl-A/Ctrl-X commands on selection. Fixed work of Ctrl-A and Ctrl-X commands on selection. Fixed small issue with tabs in quick view and 'nowrap'. Fixed displaying of wrong drive paths in history menu ("d:" or "c:"). Fixed bug with plugin and parenthesis. Fixed getting list of associated programs using .desktop files when the file utility is used to obtain mime-type of a file. Fixed result of applying :p filename modifier in root of file system. Fixed opening of tagged (selected) symbolic links to a directory. Fixed problem with leaving socket alive on crash. Fixed compilation using cygwin. Fixed memory errors connected with Ctrl-A and Ctrl-X commands. Fixed using of uninitialized memory on :substitute. Fixed global substitution of patterns beginning with a caret. Fixed :cd (so and :pushd) with absolute path as second argument. Fixed case insensitive renames using :rename command on Windows. Fixed message about failed rename operation. Fixed renaming of files on Windows (sometimes files could be moved). Fixed infinite loop of filter inverting. Fixed adding of ellipsis into view title when it's actually don't needed. Fixed handling of equal sign after variable names in :unlet command. Fixed automatic refresh of view on Windows. Fixed displaying of cached directory size. Fixed trash elements duplication in vifminfo file. Fixed memory corruption if :restart command is called from key mapping. Fixed deadlock issue that caused vifm to freeze after running external commands in certain cases. Fixed wrong resizing of file info mode. Fixed saving of partially typed search pattern with 'incsearch' on. Fixed searching in visual mode with 'incsearch' on. Fixed artifacts at the bottom of screen on FUSE mountings. Fixed check for file existence on file running. Fixed running 'vicmd' on :rename and similar commands with ending \s+&. Fixed appearing of cursor in stat line on resize with active wildmenu. Fixed unexpected appearing of wildmenu on terminal resizing. Fixed running when /etc/mtab file doesn't exist. Fixed compiling with file tool (libmagic) of version 4.21 or older. Fixed work of ga/gA commands with huge files on Windows. Fixed terminal freezing on Ctrl-Z in vim launched from vifm. Fixed blinking of file list in the menu mode while working with command line with 'hlsearch' and 'incsearch' set. Fixed clearing of selection on search cancel in menus with 'hlsearch' and 'incsearch' set. Fixed selection of created directory on `:mkdir! dir1/dir2`. Fixed case of letters of Ctrl-W combinations in the documentation. Fixed copying of vifm-help.txt and sample vifmrc to ~/.vifm directory. 0.7.1 to 0.7.2 (2012-02-19) Added --select command line argument. Added g:vifm_exec_args variable for the plugin. Added write permissions to current directory on :touch. Added 'rulerformat' option. Added 'statusline' option. Added optional argument for the :sync command. Added support for character classes in globals. Added . Added support for running :cmap, :nmap and :vmap with one argument. Added :u filename modifier for UNC computer name (Windows only). Added --remote command line argument. Added recursive mode for :rename command. Added 'columns' and 'lines' options. Added :let and :unlet commands to work with environment variables. Added $VIFM and $MYVIFMRC environment variables. Added embedded icon on Windows. Added file properties dialog on Windows. Added file attributes in status bar and file info view. Added ctrl-w p, ctrl-w b and ctrl-w t normal mode keys. Added :windo and :winrun commands. Added 'trashdir' option. Restore terminal title on exit. Reset dot and filename filters if they hide bookmarked file. Show "Sorting directory..." message only for big directories on Windows. Now vifm will add all subdirectories of ~/.vifm/scripts to PATH. Made vifm react faster on external changes. Change console title on Windows. Made determining of home directory on Windows more intelligent. Better check for old-style color schemes file. Mention cterm :highlight command argument in generated color scheme files. Changed square brackets in yes/no of confirmation dialog. Made 'sortnumbers' work on Windows. Avoid unnecessary directory view updates on Windows (like after C key). Allow using of backward slashes in :rename command on Windows. Let :s and :gs filename modifiers change slash type on Windows. Never change active view on :restart command. Properly quit vifm on console closing on Windows. Removed odd sorting keys on Windows. Allowed using of macros with :clone command. Set left panel as active with one path passed as an argument. Fixed bug with fixed-length buffer for :grep command (when many files are selected). Fixed completion of ":set sort" (didn't complete 'sortnumbers' and 'sortorder'). Fixed several memory overflows and leaks. Fixed "Change" time, which is "Creation" time on Windows. Fixed creation of Trash dir if it doesn't exist in ~/.vifm/. Fixed status bar message after Ctrl-A/Ctrl-X on Windows. Fixed bug with drawing extra character after file list redraw (e.g. on za). Fixed bug with segfault on running background operation (e.g. :copy &). Fixed compilation on Mac OS X. Fixed running gvim on commands like :rename. Fixed renaming on Windows when only letter case is changed. Fixed terminal title blinking on startup. Fixed status bar attributes for searching. Fixed view update when 'incsearch' is on and user removes and types again one character. Fixed blinking of number of selected files on Escape key in search mode with 'hlsearch' turned on. Fixed redrawing of other view on 'sortnumbers' option toggle. Fixed misleading message about pattern not found on first search using n or N keys. Fixed bug with going to upper bound of visual selection. Fixed bug with :rename and 'vicmd' (or 'vixcmd') option with backgrounding. Fixed bug with :rename and screen support turned on. Fixed picking view on which ctrl_w+* keys operate in view mode. Fixed Ctrl-U/D/F/B keys in visual and menu modes one again. Fixed a typo in status bar message after :mkdir. Fixed sorting with ignoring case. Fixed read-only file removal on Windows. Fixed adding of "(1)" to name passed to :clone. Fixed messages about background operations in :jobs menu. Fixed %S macro and no command output. Fixed filtering of selected files with special symbols in their name. Fixed title in permission change dialog and files with long names. Fixed leaving inexistent directory on Windows. Fixed :empty command on Windows. Fixed delay after pressing Escape on *nix and ncurses. Fixed viewing of file with end-of-lines different from standard on running system. Fixed navigation to file (e.g. after :touch) when 'scrolloff' isn't 0. Fixed segfault on small window on Windows. Fixed bug with unfinished :s or :gs filename modifier. Fixed dumb black screen on :shell command after :screen when vifm is not running inside screen. 0.7.0 to 0.7.1 (2011-11-15) Added 'scrollbind' option. Added 'wrapscan' option. Added 'incsearch' option. Added support for more angle bracket notations in mappings (, , , , , , , , , , , , , , , ..., ). Added :split! to toggle between only and split view. Added :file to quick run one of associated commands. Added '(' and ')' keys for normal and visual modes. Added g:vifm_exec variable for the plugin. Added backgrounding of :copy, :move and :delete commands. Added Ctrl-n (j) and Ctrl-p (k) keys. Added 'cpoptions' option. Added 'laststatus' option. Added year in the file info dialog (on Ctrl-G). Added :delete!. Added , ..., , , ..., , , ..., , only for Windows. Added kind of portable mode on Windows. Added support for :substitute command without arguments. Added horizontal splitting of views (changed :split command, added :vsplit command, changed Ctrl-w s mapping). Added Ctrl-w j and Ctrl-w k keys. Added Ctrl-w <, Ctrl-w >, Ctrl-w + and Ctrl-w - keys. Added Ctrl-w | and Ctrl-w _ keys. Added completion of environment variables (:cd, :pushd, :! and :!!). Added support for using environment variables as :cd or :pushd arguments. Added Ctrl-A and Ctrl-X keys (normal and visual modes). Added as synonyms for (where X is a key). Added notation to run internal vifm commands from user defined commands. Added angle bracket notation and as synonyms for . Added Ctrl + Alt + letter combinations, only for *nix. Added view mode (see documentation). Added e key for normal mode. Added -c and + command line arguments. Added :source command. Added zh, zl, zH and zL keys for the menus (horizontal scrolling). Added ftdetect plugin for vim (now there is no need for modelines or changing .vimrc). Added more tags to the documentation in vim-help format. Added ZQ and ZZ keys to close menus and dialogs. Added 'tabstop' option. Added support of [count] for / and ?. Added :execute command. Make macros expand to paths with forward slashes on Windows. Clean selection after i key in normal mode. Don't clear terminal title on exit. Warn about symbolic links are not available. Make 'ignorecase' and 'smartcase' affect f and F. Don't show current file as selected after executing a :command and resizing terminal while it works. Show progress message (e.g. on :copy) after terminal is resized. Don't use position in the view on ' key, when 'autochpos' is off. Better check if directory was changed on Windows. Made ga and gA work in background. Don't change file extension on cloning. Better cW command. Show all shares on Windows (including private ones). Move cursor to clone of current file after file cloning. Smarter file name generation on cloning. Made i key work in visual mode. Allowed question mark for :mark command (to prevent bookmark overwriting). Made C command accept count. Made some messages about operations more correct. Allowed arguments for plugin's commands. Allowed exclamation mark for :view command (to prevent view closing). Fixed bug with stat window in the menu mode (for example after n of N keys). Fixed bug with disappearing of number of selected files in visual mode. Fixed leaving visual mode on cp key. Fixed clearing selection after :file menu. Fixed asterisk as first character in a global. Fixed running of user defined commands in the background. Fixed running external commands on Windows when 'shell' is 'cmd.exe'. Fixed bug with displaying bookmarks in the :marks menu on Windows. Fixed bug with saving bookmarks to vifminfo file. Fixed directory copying on Windows XP. Fixed permission check on copying files from a network on Windows. Fixed copying files from a network on Windows. Fixed removing of directories on Windows (at least on XP). Fixed plugin on Windows. Fixed a/c/m file time on Windows. Fixed displaying of local chars in C-G dialog on Windows. Fixed command-line shortcuts with Alt key and pdcurses library. Fixed redrawing in the :only mode. Fixed algorithm of finding vifm configuration directory on Windows. Fixed setting of numeric bookmarks (0-9). Fixed displaying of local chars in other window's title on Windows. Fixed check of directory write permissions on Windows. Fixed pausing on :!! on Windows. Fixed completion after // on Windows. Fixed quick view of files (printed "Cannot open file" sometimes). Fixed bug with processing keys (functional on Windows XP in particular). Fixed bug with showing quick view after :only command. Fixed with pdcurses. Fixed some bugs with UNC paths on Windows. Fixed displaying of local chars in the wild menu on Windows. Fixed parsing path arguments on Windows. Fixed small issue with sorting directory names. Fixed some issues with shell escaping. Fixed bug with showing name conflict message 2nd time. Fixed viewing files with UNC paths on Windows. Fixed bug with applying :s or :gs filename modifiers several times. Fixed loading long histories (search, prompt or command) from vifminfo file. Fixed gf command on Windows. Fixed some issues with zt/zb and 'scrolloff' in menus. Fixed copying of hidden and system files on Windows. Fixed Ctrl-C handling on Windows. 0.6.3 to 0.7.0 (2011-09-29) Removed :cmdhistory command. Use :history cmd or :history :. Removed 'savelocation' option. Use set vifminfo+=dhistory. Removed support of startup file, all commands will be moved to vifmrc. Removed '<,'> range from command line in visual mode (all work without this range, because files are selected). Removed CURR color from color schemes (was unused). Returned Change dialog. Added 'wildmenu' option. Added 'ignorecase' option. Added 'smartcase' option. Added support for multi line commands in startup file. Added 'hlsearch' option. Added abbreviations for :set options. Added check for broken links of selection on :edit. Added gf command (find link destination). Added :mark command. Added :delmarks command. Added :comclear command. Added :unmap, :cunmap, :nunmap and :vunmap commands. Added :noremap, :cnoremap, :nnoremap and :vnoremap commands. Added :filetype and :fileviewer commands. Added 'vifminfo' option. Added :filextype command. Added 'shell' option. Added 'vixcmd' option. Added :find command. Added broken link color to color schemes. Added top line and status line colors to color schemes. Added al command for symbolic links with absolute paths. Added rl command for symbolic links with relative paths. Added g:vifm_term variable for the plugin. Added :substitute command (for quick file rename operations). Added filename modifiers (:p, :~, :., :h, :t, :r, :e, :s and :gs). Added gs command to work with t selection like gv with visual mode selection. Added cl command to modify symbolic link target. Added :restart command. Added %M macro. Added prompt (cw, co, cg, name conflicts) history. Added :grep command. Added vifmrc syntax and filetype files for Vim. Added 'd' state for execute flags in permission dialog. Added search and prompt history to :history command. Added argument completion for :history command. Added 'autochpos' option. Added --no-configs argument. Added :tr command. Added q key to permissions, sort and fileinfo dialogs. Added 'timeoutlen' option. Added gu and gU commands (and their variations). Added :clone command. Added :copy command. Added :move command. Added :alink and :rlink commands. Added 'scrolloff' option. Added support for using ':' instead of '=' in :set command. Added Ctrl-_ command-line key to reject completion. Added :volumes command (only for MS-Windows). Added :version command as another name for :vifm. Added FIFO color to color scheme. Added color scheme color for error messages in status bar. Added :mkdir command. Added :touch command. Added support of question mark for :colorscheme command. Added :highlight command. Added 'gdefault' option. Added black hole register ("_). Added UNC names support (MS-Windows). Added TopLineSel highlight group. Added :chmod command. Added :chown command. Added macros that are expanded to paths enclosed in double quotes (%"c, %"C, %"f, %"F, %"b, %"d and %"D) Added completion for co and cg commands. Added %S macro. Added completion for cw and cW commands. Added 'slowfs' option. Added :messages command. Added gl normal mode key (only for MS-Windows). Added support for :set all. Added support for :set command without arguments. Now spaces between option name and '?' or '!' are allowed in :set command. Handle multi line output of :set command (for example, ":set confirm? fastrun?"). Corrected size units to be like in *nix utilities (KB = 1000, K = 1024...) Update more items on ga and gA. Changed file size format. Sort completion items. Shift-Tab command line key to perform completion in reversed order. Now vifm also accepts paths to files as the startup arguments. Let user go through directories with execute access, but no read access. Now users can place scripts for vifm to ~/.vifm/scripts, vifm modifies it's PATH environment variable to let user run scripts without specifying full path. Changed format of :delete and :yank (:cmd reg count). :filter?, :invert? and :screen? to display state. Made :display and :registers accept argument (like in Vim). Now vifm understands user name after tilde in paths. Made filetype understand star as in globals. Changed format of ~/.vifm/vifmrc and ~/.vifm/vifminfo files. Removed duplicates from command and directory history. Made C handle selection, check read permission and work in visual mode. Made /, ?, n and N work in visual mode. Moved file name from quick view window to view title. Made directory history persistent (when 'vifminfo' contains dhistory). Made command line history persistent (when 'vifminfo' contains chistory). Made search history persistent (when 'vifminfo' contains shistory). Made :locate and :find without arguments repeat last search. Changed the way l key handles selection. Made dirstack persistent (when 'vifminfo' contains dirstack). Made :! accept ranges. Made l key work in visual mode. Made registers persistent (when 'vifminfo' contains registers). Documented which commands accept ranges. Made :cd and :pushd accept two arguments or an exclamation mark. Made :set command understand &. Show search matches in the menus. Made :split accept path. Made Ctrl-W in command line mode work like in Vim. Made 'vicmd' and 'vixcmd' understand & at the end. Don't quit when terminal is too small (print message and ignore input). Better ranges (added support for '+' and '-'). Handle %m, %M and %s in the :! command. Modified pushd to accept empty argument list. Made :dirs menu interactive. Now keys can be used in mappings. Now case of color names in the colorscheme file is ignored. Documented command line keys. Handle color schemes with too many colors for terminal right. Made :apropos command accept empty argument list. Made :rename accept a list of new file names. Ownership is not preserved on copy operations anymore. Made F, f, ;, comma, n and N commands accept count. Better 'sort' option (support of multiple sort keys, added iname key). Let user use short forms of user-defined commands with "!". Made ':set option' equivalent to ':set option?' for all types of options except boolean. Made 'history' option control search, command line and prompt histories. Modify terminal emulator title. Fixed bug with name conflict of files and directories in the Trash. Fixed bug with broken symbolic links in the Trash. Fixed bug with stat_win in the menus. Fixed D when 'confirm' enabled. Fixed '< and '> after Enter key in visual mode. Fixed ga and gA bug with root directory size. Fixed bug with ":1 command". Fixed bug with gv in visual mode when '< and '> are undefined. Fixed bug with 'sortnumbers'. Fixed bug with f, F, comma and ;. Fixed bug with invalid value of %f for :udf. Fixed bug with shrinking of status bar. Fixed bug with displaying "1024 K". Fixed command line resizing in the menu mode. Fixed bug with :view and infinite loop. Fixed zR. Fixed color schemes problems. Fixed vifm freezing. Fixed bug with bookmarks. Fixed bug with undolist. Fixed :rename. Fixed cursor position after leaving directory mounted with FUSE_MOUNT2. Fixed Ctrl-D, Ctrl-U, Ctrl-F and Ctrl-B (made them work like in vim). Fixed utf8 characters treating on Ctrl-W and similar. 0.6.2 to 0.6.3 (2011-07-20) Added another format for filetype (FUSE_MOUNT2). Added %CLEAR FUSE mount parameter (see vifmrc for details). Added %c and %C macros (current file of current and other directories, not selected file or files). Added :rename command. Added undo list (u, Ctrl-R and :undolist commands; 'undolevels' option). Added small FAQ. Added gA command (like ga, but forces update). Added support for whole line comments (that start with double quote symbol). Added 'sortnumbers' option (natural sort of (version) numbers in filenames). Added :dirs command (shows directory stack). Added 'savelocation' option (start vifm in the last visited directory) which is off be default thus returning old behaviour when vifm is started with no argument. Added 'followlinks' option. Added 'fusehome' option. Added 'history' option. Added dialog to ask user about backwards range in command. Added primitive logging. Added :TabVifm command in Vim plugin. Added 'confirm' option. Added gv command for visual mode. Added :restore command. Added !! and ! normal mode commands. Enter key in visual mode will leave it saving selection. Visual mode now remembers direction of the last selection. Let builtin keys be remapped. Don't cancel file renaming if user presses backspace and line is empty. Don't change directory on unsuccessful FUSE mount. Don't change cursor position of other directory after disabling quick view. Hide file group and owner names when they collide with message about filtered files. Don't show error message when trying to delete something from Trash directory. Don't replace escape sequences for :! and :!! commands. Use only executables for :!./ completion. Complete :pushd like :cd. Now location of panes is saved in ~/.vifm/vifminfo instead of ~/.vifm/vifmrc Don't filter anything when filter is set to an empty string. Show message when :delcommand is called with no arguments. Handle broken links. :edit command can accept arguments now. :map don't affect command line mode, but :map! does. Let ranges modify %f macro for user defined commands. Skip spaces between numbers in range and a command. Skip colons and spaces at the begging of cmdline command. Filter string is empty by default now. Made f and F work with wide characters. | after ! means pipe, not command separator. | after com means pipe, not command separator. Made option parser handle quotes. Mapped Ctrl-W, S to :split. Made :cd - work like in shell. Now filter regular expression can be enclosed in slashes. Don't add additional spaces before %f, %F, %c and %C macros. Don't try to :cd into directory if we cannot. Leave visual mode when leaving cmdline mode started from visual mode. , keys to move through history like in Vim. No more cycling in history. Don't loose input when going through history. Rename files in Trash (to avoid name conflicts). Don't terminate background processes on vifm exit. Remove files that are in the Trash on :empty command from all registers. Don't ignore Ctrl-Z. Don't clear screen on shellout. Handle Ctrl-U, Ctrl-D, Ctrl-E, Ctrl-Y, H, L, M, zz, zt, zb, g and G in the menus. Let %, f, F, ;, comma and ' be used as selectors in normal mode. %, zb, zt, zz, gg, G, Ctrl+e, Ctrl+y, Ctrl+d, /Ctrl+u, f, F, ;, comma and ' in visual mode. Replaced pauseme script with vifm-pause. Replace /home/login by ~ in the view title. Handle multiple files in Vim plugin. Improved user mappings (mapping on k in k and k). Made : in normal mode accept count. Update " register on each yank/delete operation. Fixed %F, accidentally broken in v0.6.2. Fixed segmentation fault on %f or %F expanding. Fixed bug with Ctrl+W, X and quick view. Fixed bug with yanking the ".." directory (it shouldn't be possible). Fixed %b macro (added space between file names). Fixed directory leaving after FUSE error (go to mounted file, not just up). Fixed bug with selection and segmentation fault. Fixed reaction on Ctrl+C for error messages from background processes. Fixed ga command (skip symbolic links). Fixed processing of files with percent sign in their name. Fixed memory leak in directory stack module. Fixed bug when options from startup file were not applied after startup. Fixed bugs with color schemes. Fixed problem when vifm hanged without terminal. Fixed bug about truncation of the last character with selection and :e %f. Fixed some bugs with files with single and double quotes in their names. Yes, again. Fixed bug with sorting symbolic links by name. Fixed bug with losing selection before running command from visual mode. Fixed bugs with registers and segmentation fault. Fixed :d command, it is an abbreviation to :delete now. Fixed bug with :n Fixed bug with selecting last file in the view in visual mode. Fixed but with :delcommand. Fixed redraw of fileinfo dialog. Fixed some bugs with filters. Fixed :cmap. Fixed expanding of %d and %D macros in commands (quotes, again). Fixed refreshing after some commands. Fixed commands like :'<'>!echo %f Fixed one number ranges for command line commands (:2d, :4y). Fixed bug with too small inner buffer for shell commands. Fixed skipped range number (it should mean current position). Fixed p (it should move files from trash, not copy them). Fixed bug with user commands and exclamation mark. Fixed running of commands from :cmdhistory menu. Fixed execution of FUSE mount commands from :file menu. Fixed zb in normal mode (when pos < number on lines in a view). Fixed map menus (added user commands). Fixed recursion in user mappings. Fixed opening files containing spaces in their names using Vim plugin. Fixed command line size when initial message doesn't fit in one line. 0.6.1 to 0.6.2 (2011-06-19) Added map menus (run :cmap, :vmap, :nmap commands without arguments). Added :cmdhistory command. Added 'fastrun' option. Added o and O keys for Visual mode (go to other end of selection). Added gv normal mode command. Added support for spaces and functional keys in mappings ( and - ). Added mimetype to fileinfo dialog. Added %b command macro. Made filetype menu editable. Restore SIGINT (Ctrl+C) default behaviour on shellout. Replace escape sequences in quick view output with ^foo. Give options if a file already exists in destination directory. Implemented :colorscheme command. Unmount all FUSE mounts on exit. Implemented :vifm command. More verbose --version (and -v) output. Added Ctrl+C key handling to error message dialog. Implemented :yank command. Made command completion work with marks. Use file command when GTK+ and libmagic are disabled. Made :cd %D work. Better error messages. Use ga command results to sort by size. Fixed '< and '> marks handling. Fixed :!./ completion. Fixed paths in config.c to work with non standard install prefix. Fixed a bug with ':!!echo foo'. Fixed some title related small bugs. Fixed terminal resize when error message visible. Fixed yy when compatibility mode is off. Fixed some bugs with files with quotes in their names. Fixed segmentation fault on FUSE mount. Fixed missed status bar messages. 0.6 to 0.6.1 (2011-06-11) Added :set command. Added caching for results of ga command. Don't reload pane on ctrl-c or escape, just clean selection. Store commands separated by | as one history item. Don't add duplicates into command history. Don't add commands from startup file and mappings to command history. Use ! with :quit or :x to discard configuration changes. Use checksum to determine if configuration file has been modified. :write! will write config even if no setting was changed. Always save pane locations on exit except on :q!, :quit! and ZQ. Don't switch active pane on Ctrl+W X. Fixed bug with sorting (using sort type of invalid pane). Bug Fix. Don't change selected items on terminal resize. Fixed a couple of segmentation faults on unsuccessful FUSE mount. Fixed n and N commands (used to repeat wrong search pattern). Fixed a bug with relative paths in arguments. 0.5 to 0.6 (2011-06-10) Added :wq command. Added ZZ and ZQ commands. Added Ctrl+D and Ctrl+U commands. Added zb, zt and zz commands. Added Ctrl+E and Ctrl+Y commands. Added Ctrl+W W, Ctrl+W O, Ctrl+W V and Ctrl+W X commands. Added i command to force file opening even for executables. Added IEC abbreviations. Added Ctrl+U, Ctrl+N, Ctrl+P, Ctrl+K, Ctrl+W, Meta+F and Meta+B in command line mode. Added Home and End keys support in command line mode. Added backward search (?). Added :map, :nmap, :cmap, :vmap commands. Added co (change owner), cg (change group) and cp (change permissions) commands. Added utf8 support. Added support for motions with d and y commands. Added startup file. Added f, F, ; and normal mode commands. Added group to stat line. Added custom viewers for files. Added D normal mode command (deletes files omitting trash directory). Added P normal mode command (moves yanked files). Added :write command (write config file) with alias :w. Added progress messages for putting and deleting. Added users command completion for :delcommand and :command. Added a, s and S file selectors. Added --enable-extended-keys and --enable-compatibility-mode configure options. Added Ctrl+o and Ctrl+i normal mode commands to traverse through history. Added ! and !! completion. Added support for multiple commands per line (with | as delimiter). Added ga command (calculate directory size). Added cW command (change only name of file and leave old extension). Added :pushd and :popd commands. Added detection of file handlers with GTK+ or libmagic and .desktop files (it works only for :file command). Added C command (clone file). Changed keys input handling. Changed force dot files appear at the beginning of file list. Changed command line length limit. Changed history of visited directories. Changed ascending/descending sort for all types of criteria. Changed behavior of filename cell in stat line (automatic expands now). Changed :cd completion to use only directories. Changed permissions dialog to work with selected files. Fixed segmentation fault caused by newwin. Fixed segmentation fault caused by bookmarks menu. Fixed now view is updated after several commands. Fixed bug with empty command line. Fixed file renaming. Fixed ranges handling. Fixed behavior of n and N commands for different search directions. Fixed filename completion. Fixed user commands completion. Fixed memory allocation for history. Fixed work with registers. Fixed bug with disappearing pane cursor (for example after shellout). Fixed bug when trailing slash wasn't cut from directory name on macro expanding. Fixed running executables with spaces in their names. 0.4 to 0.5 (2009-08-07) Changed the file size to a human friendly notation. Added ascending and descending sort types. Changed the way symbolic directories are handled. Fixed possible buffer overflow in colorschemes. Fixed transparency in colorschemes. Changed writing to vifmrc file to query user if they would like to overwrite a file that has been modified. Added filetype settings for mounting files with fuse-zip. Pauseme script was changed to report errors. Command line input now accepts wide characters and tab completion now cycles through all possible matches. ncursesw is now required to build vifm. 0.3a to 0.4 (2008-06-16) Color schemes added - required a change to the vifmrc file. UTF-8 support Quick view of current file with :view command. Hopefully fixed bug when starting vifm with a directory on the command line. Changed executable file to check for filetypes. If you have vifm set to not run executable files, it will now first check for a filetype setting and if present will use the program you set to open the file. If no filetype is set it will open the file in vi. Fixed delete command when dd in :com window. 0.3 to 0.3a (2005-08-17) Files with % in the name should work now. The symlinks in the tarball were replaced with the actual scripts. 0.2 to 0.3 (2005-07-18) Added error message for shell commands that are too long. Added :split, :only for one window view. Added :ls command for screen and %s macro. Added . to repeat last command. This currently only works with :commands. When deleting or putting files the process is backgrounded but it now waits for the process to return so that the changes show up quicker in the file lists. Removed the code to change the xterm title. User commands and the builtin commands now work with expansion. :! and :!! now work with tab expansion. Changed waitpid to a loop. Removed the timing thread. Redirected error messages of processes run in the background. :jobs command shows menu of backgrounded processes. :!! segfault fixed by Dmitry Suzdalev. Readline like expansion of files now escapes the filename. Fixed menu scrolling bug when the menu list was the same size as window rows. 0.1 to 0.2 (2003-05-06) File names are now escaped before going to the shell. The menus are now searchable with / or ? and basic commands :45 or :quit. The current position was changed to a solid bar instead of an arrow. Basic readline file completion. Command and pattern history. Colors are now configurable. cw can be used to rename files. Added a keys pressed window in the status bar to show the first d of dd, numbers for 12G or 33j movement commands, and first y of yy. User commands are now sorted in alphabetical order so that they may be used in the shortest form that does not match another command. The :command parsing was rewritten. The default action on an executable file was changed to a configurable option. The default is now to view the file instead of executing it. New :commands :locate command uses locate. :apropos command - shows list of man pages in menu window. :sync command - changes the other panel to the same directory as the current panel. New Key bindings Normal mode: M - move to the middle of the window. L - move to the bottom of the window. H - move to the top of the window. V - switch to visual mode. Y - yank the currently selected files. Visual mode: M - select from the current position to the middle of the list. L - select from the current position to the bottom of the list. H - select from the current position to the top of the list. The bookmarks code was rewritten. The automatic updating of the file lists was rewritten. vifm-0.14/ChangeLog.LuaAPI000066400000000000000000000244251475151500600152360ustar00rootroot00000000000000The API is experimental and having a change log is useful to have for adjusting plugins as the implementation changes. During development of the API things should stay fairly stable to not cause breakage too often, but while stabilizing for v1.0 a bunch of breaking changes can happen at once. API sections marked {deprecated} will be removed. After that all changes will be documented in the regular ChangeLog. 0.13 to 0.14-beta (2025-01-19) Bumped API version to v0.2.0. Upgraded Lua from 5.4.4 to 5.4.7. Deprecated VifmView.currententry field in favour of VifmView.cursor.pos. Patch by filterfalse. Deprecated vifm.makepath() field in favour of vifm.fs.mkdir(). Added VifmView.cursor.pos that provides an index of an entry under the cursor. Patch by filterfalse. Added VifmView.cursor:entry() that provides VifmEntry under the cursor. This is a shortcut to VifmView:entry(VifmView.cursor.pos). Patch by filterfalse. Added ability to move the cursor within a view by assigning an integer to VifmView.cursor.pos. Patch by filterfalse. Added cursorpos field to selectors that moves the cursor within a view. Patch by filterfalse. Added vifm.abbrevs.add() that registers command-line abbreviations. Patch by filterfalse. Added vifm.stdout() to return stream to which Vifm's output was redirected (if it was redirected, i.e. original output wasn't connected to a TTY or character device on Windows). Thanks to gruvw. Added VifmJob:pid() to retrieve process ID of a job. Thanks to The Cyberduck and PRESFIL. Added VifmJob:terminate() to forcefully finish a job. Thanks to The Cyberduck. Added "pwd" parameter to vifm.startjob() that specifies initial directory of the process. Thanks to PRESFIL. Added vifm.cmds.add({ withrange }) flag which allows :commands implemented in Lua to handle ranges. Thanks to Moin Khan. Added vifm.fs table with file-system related operations: vifm.fs.cp(), vifm.fs.ln(), vifm.fs.mkdir(), vifm.fs.mkfile(), vifm.fs.mv(), vifm.fs.rm(), vifm.fs.rmdir(). Added VifmView:selected() that returns an iterator over selected entries. Added VifmView:entries() that returns an iterator over all entries. Added VifmView:focus() that makes the view the current one. Added VifmView:gotopath() that navigates to a file (like :goto or --select). Added VifmView:loadcustom() that sets list of paths as a custom view. Added index of Lua API to the documentation for easier overview/lookup. Added vifm.menus.loadcustom() that makes a menu out of a list of strings. Made VifmJob:errors() wait for receiving errors if the job has finished. Fixed jobs created via vifm.startjob() being displayed with "UNKNOWN" for description on the job bar. 0.13-beta to 0.13 (2023-04-04) Added VifmView:select() and VifmView:unselect() that select and unselect entries by indexes. 0.12.1 to 0.13-beta (2023-03-17) Bumped API version to v0.1.0 due to bug fixes and various additions. Additions to enabled standard libraries: * os.getenv() New things Lua can be used for: * write a 'tabline' generator * running code before exit and when a file operation is done * starting background jobs to do something when they're over Changed description of VifmTab:getview() without arguments to return active pane of a global tab, which is what it was actually doing. Added vifm.executable() that check for an executable file or command in $PATH. Added "onexit" callback for VifmJob. Added vifm.input() that prompts user for input via command-line prompt. Added events.listen() that registers a handler for an event. Added "app.exit" event that occurs before Vifm exits normally. Added "app.fsop" event that occurs after a successful execution of a file-system operation. Added VifmEntry.isdir field which is true if an entry is either a directory or a symbolic link to a directory. Added VifmView.custom table with information about custom file list. Close Lua job streams when job is done. Closed _G loophole a plugin could use to mess environment for other plugins. Protected against metatable manipulations in Lua. Fixed incorrect path in Lua's editor handler on Windows. Fixed VifmTab:getview() mistreating "pane" input field. Fixed modules loaded via vifm.plugin.require() not having `vifm` defined. 0.12 to 0.12.1 (2022-09-21) Upgraded Lua from 5.4.3 to 5.4.4. Additions to enabled standard libraries: * os.tmpname() New things Lua can be used for: * fully integrate an arbitrary editor by using a handler in 'vicmd' or 'vixcmd' * defining custom keys and selectors Added vifm.escape() that escapes input to make it suitable for use in an external command for current value of the 'shell' option. Added vifm.run() that runs an external command similar to :!. Added vifm.keys.add() that registers a user-defined key or selector. Added vifm.sessions.current() that retrieves name of the current session. Added vifm.tabs.get() that retrieves a tab. Added vifm.tabs.getcount() that retrieves number of open tabs. Added vifm.tabs.getcurrent() that retrieves index of current tab. Added VifmEntry:mimetype() that gets a MIME type. Added VifmTab:getlayout() that retrieves layout of a global tab or shared TUI state for a pane tab. Added VifmTab:getname() that retrieves name of the tab if it was set. Added VifmTab:getview() that returns view managed by the tab. Completors of a Lua-defined :command can now provide descriptions of completion items. 0.11 to 0.12 (2021-09-29) The following standard libraries are enabled: * basic (core global functions) * table manipulation (`tbl` table) * package library (`require` global and `package` table) * string manipulation (`string` table) * input and output (`io` table) * mathematical functions (`math` table) * time subset of OS facilities (`clock`, `date`, `difftime` and `time` elements of `os` table) This is what one can do by using Lua at the moment: * commands with completion * save and reset options (e.g., some kind of presets) * custom columns * filetype/filextype/fileviewer/%q handlers * 'statusline' generator * starting background jobs that appear on a job bar Added vifm.addcolumntype() that registers a new view column type to be used in 'viewcolumns' option. Added vifm.addhandler() that registers a new handler that will be accessible in viewers. Added vifm.currview() that retrieves a reference to current view. Added vifm.otherview() that retrieves a reference to other view. Added vifm.errordialog() that displays error dialog. Added vifm.expand() that expands environment variables and macros in a string. Added vifm.fnamemodify() that changes path according to modifiers. Added vifm.exists() that checks existence of a path without resolving symbolic links. Added vifm.makepath() that creates target path and missing intermediate directories. Added vifm.startjob() that launches an external command. Added vifm.cmds.add() that registers a new :command of a kind that's equivalent to builtin commands. Added vifm.cmds.command() that registers a new :command that works exactly as those registered using :command builtin command. Added vifm.cmds.delcommand() that removes :command added by vifm.cmds.command(), basically being an equivalent of :delcommand builtin command. Added vifm.opts.global table that provides access to global options. Added vifm.plugin.name field that provides name of the plugin. Added vifm.plugin.path field that provides full path to plugin's root directory. Added vifm.plugin.require() that serves as plugin-specific `require`, which loads Lua modules relative to plugin's root. Added vifm.plugins.all table that contains all plugins indexed by their names. Added vifm.sb.info() that displays a regular message on statusbar. Added vifm.sb.error() that displays an error message on statusbar. Added vifm.sb.quick() that displays a quick message on statusbar. Added vifm.version.app.str field that provides version of Vifm as a string. Added vifm.version.api.major field that provides major version of Lua API. Added vifm.version.api.minor field that provides minor version of Lua API. Added vifm.version.api.patch field that provides patch version of Lua API. Added vifm.version.api.has() that will check presence of features some day. Added vifm.version.api.atleast() that checks version of Lua API. Added VifmEntry.classify table that describes name decorations. Added VifmEntry.name field that provides name of the file. Added VifmEntry.location field that provides location of the file. Added VifmEntry.size field that provides size of the file in bytes. Added VifmEntry.atime field that provides file access time (e.g., read, executed). Added VifmEntry.ctime field that provides file change time (changes in metadata, like mode). Added VifmEntry.mtime field that provides file modification time (when file contents is changed). Added VifmEntry.type field that provides type of the entry. Added VifmEntry.folded field that shows whether this entry is folded. Added VifmEntry.selected field that shows whether this entry is selected. Added VifmEntry.match field that shows whether this entry is a search match. Added VifmEntry.matchstart field that provides start position of a substring found in file's name. Added VifmEntry.matchend field that provides end position of a substring found in file's name. Added VifmEntry:gettarget() that gets target of a symbolic link (not to be confused with real path resolution). Added VifmJob:wait() that waits for the job to finish. Added VifmJob:exitcode() that retrieves exit code of the job. Added VifmJob:stdin() that retrieves stream associated with standard input of the job. Added VifmJob:stdout() that retrieves stream associated with standard output of the job. Added VifmJob:errors() that retrieves data collected from error stream of the job. Added VifmView.locopts table of location-specific values of view-specific options. Added VifmView.viewopts table of "global" values of view-specific options. Added VifmView.currententry field that provides index of the current entry. Added VifmView.cwd field that provides location of the current view. Added VifmView.entrycount field that provides number of entries in the view. Added VifmView:cd() that changes location of the view. Added VifmView:entry() that retrieves an entry by index. vifm-0.14/FAQ000066400000000000000000000126671475151500600127510ustar00rootroot00000000000000Q: Vifm fails to display some files which present on file system, is it a bug? A: Most likely reason for missing files are name filters. Use `:filter?` command to see their state or try pressing zR shortcut to disable all filters (undo that with zM). You got there probably by pressing zf on a file by accident at some point. In this case the file will be missing only in one of the panes. If you don't have :filter in your vifmrc and 'vifminfo' includes "state" value, such accidental filtering will persist across restarts of Vifm until you use :filter command or press a key like zO that resets permanent filter. -------------------------------------------------------------------------------- Q: Vifm doesn't run executables, what's wrong with it? A: Nothing. Just set 'runexec' option on. It's off by default. -------------------------------------------------------------------------------- Q: How can I use SSH with Vifm? A: Follow this steps: 1) Download and install sshfs 2) Register an extension that will be used for connections over SSH. The format is: :filetype extensions FUSE_MOUNT2|some_mount_command using %PARAM and %DESTINATION_DIR variables A sample line might look like this: :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR %PARAM and %DESTINATION_DIR are filled in by Vifm at runtime. %PARAM value is filled from the first line of file (whole line). You can also add %CLEAR if you want to clear screen before running FUSE program. 3) Create a file with ssh extension that contains connection parameters in the first line. A sample first line could be: root@127.0.0.1:/ -------------------------------------------------------------------------------- Q: How to browse FTP in Vifm? A: Use CurlFTPFS FUSE filesystem on *nix, which you can find here: http://curlftpfs.sourceforge.net/ And on Windows you need to use FTPDrive, which will mount an FTP remote as a drive for you. Get it here: http://www.killprog.com/fdrve.html -------------------------------------------------------------------------------- Q: How can I customize Vifm? A: There are several ways to do that: - using vifmrc file (run `:goto $MYVIFMRC` to find it) This file can contain any of Vifm commands. You probably would like to set mappings and options here. Vifm will never change this file (it's similar to ~/.vimrc). - changing color scheme (run `:cd $VIFM/colors` to find color schemes) You can change colors of different TUI elements in existing color schemes or add a new one. -------------------------------------------------------------------------------- Q: What operations can be undone/redone? A: List of currently supported operations: - rename - move - copy - non-permanent removal (i.e., deletion to trash) - change of permissions (chmod) - owner change - group change - creation of symbolic links with absolute or relative paths - creation of directories -------------------------------------------------------------------------------- Q: How to execute Vifm commands after using :! ? A: The only way to do this is using :execute command. Example: :execute ':!shell command' | some-other-command-here -------------------------------------------------------------------------------- Q: Is there a way to copy/paste without sending to trash first? A: Yes, to do that, one should yank (copy) files as usual, but use "P" key (not "p") to put (paste) them into current directory. -------------------------------------------------------------------------------- Q: Vifm expands macros in a wrong way in user defined commands with Vifm's commands (like in `:command com :mkdir ~/tmp/%c:e | cd ~/tmp/%c:e`). How to fix it? A: Just double percent sign (%%). Why? Because user commands containing Vifm's command-line commands are parsed twice. First time to replace %a macro, and second time during command execution. So doubled percent sign will be parsed with single % during first parse and a %x macro will be expanded during second parse. -------------------------------------------------------------------------------- Q: Vifm expands range in a wrong way in user defined commands (like in `:command com :%yank`) and shows "Invalid command name" message. How to fix it? A: See answer to the previous question. -------------------------------------------------------------------------------- Q: How to make shell aliases and functions work in Vifm when running them like ":!foo"? A: Here is a solution for bash, other shells should allow to do something similar. 1. Add the following lines to ~/.bashrc shopt -s expand_aliases unset BASH_ENV 2. Add the following line to ~/.vifm/vifmrc let $BASH_ENV = '~/.bashrc' After following the steps above aliases and functions should work the same way as if they were typed in interactive shell by user. However, they won't be completed by completion. -------------------------------------------------------------------------------- Q: How can I help Vifm? A: Just use it and report any problems, bugs or suggestions to its developers by email or in bug trackers. You can also send your configuration and colorscheme files to developers. They can be collected and published on Vifm's web-site. Examples of configuration files can also show how Vifm is typically used and suggest improvements of common use cases. vifm-0.14/HACKING.md000066400000000000000000000416501475151500600137770ustar00rootroot00000000000000## Contributing ## It's a good idea to describe what it is you would like to implement before starting it. The are multiple reasons for this: - new feature might interact with other features in unexpected ways; - not all ways of implementing a feature are equal, some might be preferred just for the sake of keeping things consistent; - the code base is quite large and stuff that's already there might save you some time. Changes can be sent as a pull request on [github] or as a patch via [email]. Some information on development is available on the [wiki]. [github]: https://github.com/vifm/vifm/pulls [email]: mailto:xaizek@posteo.net [wiki]: https://wiki.vifm.info/index.php?title=Development#Code_repositories ## Setup for development ## To avoid possible issues with `autoconf` caused by skewed timestamps after `git clone` or `git checkout` execute `scripts/fix-timestamps`. Configure the project with `--enable-developer` flag to compile in debug mode and with `-Werror` (there is also `--enable-werror` that doesn't enable debug mode). Undo this if it breaks the build from `master` because of unexpected warnings. After making changes, don't forget to run tests (see below) to make sure they pass. It might be a good idea to start by running tests as well to see that they succeed without any changes. ## Tests ## Tests can be run with `make check` in the root, `src/` or `tests/` directory. When inside `tests/` directory, there are multiple ways to run specific tests in several different modes, see top comment of the `Makefile` file there for instructions. To use the same modes from `src/` directory (including when building out of tree, which is especially useful), auto-generated `./runtests` script can be used instead. ## ChangeLog format ## Releases are listed in newest to oldest order. Beta versions are considered to be separate releases, otherwise one would have to edit entries rather than add new ones on recording changes done since beta. Within each release entries are organized in groups of 4 kinds in this order: 1. Changed ... 2. Added ... 3. Everything else 4. Fixed ... A new entry is added at the end of a group, resulting in a chronological order of changes of each kind. ## Package contents ## . | |-- build-aux/ - part of autotools' machinery | |-- data/ - documentation, sample vifmrc, icons, etc. | | | |-- colors/ - sample color schemes | |-- graphics/ - icons and screenshots | |-- man/ - manual pages | |-- shell-completion/ - scripts implementing shell completion | `-- vim/ - plugin for Vim | |-- patches/ - patches for software vifm depends on | |-- pkgs/ - package build-scripts | |-- scripts/ - utility scripts for development | |-- src/ - the source code of vifm | | | |-- cfg/ - code related to configuration | | | | | |-- config.c - reads scripts and manages configuration | | |-- hist.c - convenient history list abstraction | | `-- info.c - read and write vifminfo | | | |-- compat/ - implementation of features that are missing on some OSes | | | | | |-- curses.c - emulation of some wide functions for OpenBSD | | |-- dentry.c - emulation of d_entry field of struct direntry | | |-- getopt.c - part of glibc to have getopt_long() everywhere | | |-- getopt1.c - getopt.c public interface implementation | | |-- mntent.c - compatibility file for FreeBSD-like systems | | |-- os.c - very thin abstraction layer over basic OS facilities | | |-- pthread.c - spinlock shim for OS X | | |-- reallocarray.c - more convenient and safe realloc() for arrays | | `-- wcwidth.c - wcwidth() implementation for Windows | | | |-- engine/ - the core of vi[m]-like functionality | | | | | |-- abbrevs.c - implementation of abbreviations | | |-- autocmds.c - implementation of autocommands | | |-- cmds.c - command line parsing core | | |-- completion.c - provides means to fill and get completion list | | |-- functions.c - provides support for builtin functions | | |-- keys.c - analyzes users input | | |-- mode.c - generic mode related routines | | |-- options.c - :set command | | |-- parsing.c - parses expressions | | |-- var.c - all needed to work with variables | | `-- variables.c - handles :let and :unlet commands | | | |-- int/ - integration with environment/external tools | | | | | |-- desktop.c - code that parses *.desktop files on *nix systems | | |-- ext_edit.c - managing of state related to external renaming | | |-- file_magic.c - determines programs associated with file using its | | | mime-type | | |-- fuse.c - provides support of FUSE filesystems | | |-- path_env.c - parses and modifies PATH environment variables | | |-- term_title.c - terminal title updates | | `-- vim.c - contains Vim integration functionality | | | |-- io/ - file system operations implementation | | | | | |-- private/ - internal part of i/o | | | | | | | |-- ioc.c - implementation of common i/o routines | | | |-- ioeta.c - internal part of i/o estimations | | | |-- ionotif.c - internal part of i/o notifications | | | `-- traverser.c - file system traversing routine | | | | | |-- ioeta.c - i/o estimations management | | |-- iop.c - implementation of i/o primitive | | `-- ior.c - implementation of recursive i/o operations | | | |-- lua/ - Lua interface | | | | | |-- lua/ - Lua 5.4.6 sources | | |-- common.c - common code for Lua API implementation | | |-- vifm.c - implementation of `vifm` | | |-- vifm_abbrevs.c - implementation of `vifm.abbrevs` | | |-- vifm_cmds.c - implementation of `vifm.cmds` | | |-- vifm_events.c - implementation of `vifm.events` | | |-- vifm_handlers.c - implementation of `vifm.addhandler` | | |-- vifm_tabs.c - implementation of `vifm.tabs` | | |-- vifm_viewcolumns.c - implementation of `vifm.addcolumntype` | | |-- vifmentry.c - implementation of VifmEntry | | |-- vifmjob.c - implementation of VifmJob | | |-- vifmtab.c - implementation of VifmTab | | |-- vifmview.c - implementation of VifmView | | |-- vlua.c - main Lua interface unit | | |-- vlua_cbacks.c - manager of callback functions | | `-- vlua_state.c - management of state of vlua.c unit | | | |-- menus/ - implementation of all menus | | | | | |-- apropos_menu.c - handles :apropos menu | | |-- bmarks_menu.c - handles :bmarks menu | | |-- cabbrevs_menu.c - handles :cabbrev and :cnoreabbrev menus | | |-- chistory_menu.c - handles :chistory menu | | |-- colorscheme_menu.c - handles :colorscheme menu | | |-- commands_menu.c - handles :command menu | | |-- dirhistory_menu.c - handles :history menu | | |-- dirstack_menu.c - handles :dirs menu | | |-- filetypes_menu.c - handles :file menu | | |-- find_menu.c - handles :file menu | | |-- grep_menu.c - hanldes :grep menu | | |-- history_menu.c - handles :history command menus except directory | | | history | | |-- jobs_menu.c - handles :jobs menu | | |-- locate_menu.c - handles :locale menu | | |-- trash_menu.c - handles :lstrash menu | | |-- trashes_menu.c - handles :trashes menu | | |-- map_menu.c - handles :map menu | | |-- marks_menu.c - handles :marks menu | | |-- media.c - handles :media menu | | |-- menus.c - handles all kinds of menus | | |-- plugins_menu.c - handles :plugins menu | | |-- registers_menu.c - handles :registers menu | | |-- undolist_menu.c - handles :undolist menu | | |-- users_menu.c - handles menus created by %m or %M macros | | |-- vifm_menu.c - handles :vifm (or :version) menu | | `-- volumes_menu.c - handles :volumes menu on MS Windows systems | | | |-- modes/ - implementation of all modes | | | | | |-- dialogs/ - dialog modes | | | | | | | |-- attr_dialog_nix.c - file permissions dialog for *nix systems | | | |-- attr_dialog_win.c - file properties dialog for MS Windows | | | | systems | | | |-- change_dialog.c - change dialog | | | |-- msg_dialog.c - information/error/prompt messages | | | `-- sort_dialog.c - dialog to choose sort type | | | | | |-- cmdline.c - command line mode | | |-- file_info.c - Control+G | | |-- menu.c - handles commands in menus | | |-- modes.c - general code (e.g. before and after key pressed) for | | | modes | | |-- more.c - more mode that views too much output on status bar | | |-- normal.c - normal mode commands | | |-- view.c - view mode commands | | `-- visual.c - implementation of visual mode commands | | | |-- ui/ - most of ui related code | | | | | |-- private/ - internal headers of ui | | |-- cancellation.c - managing operation cancellation | | |-- color_manager.c - manager of curses color pairs | | |-- color_scheme.c - color schemes | | |-- colored_line.c - text with %x* highlighting | | |-- column_view.c - column formatting unit | | |-- escape.c - escape sequences related stuff | | |-- fileview.c - display/redraw/manage file view | | |-- quickview.c - implementation of quick view | | |-- statusbar.c - managing status bar | | |-- statusline.c - status line formatting | | |-- tabs.c - implementation of tabs | | `-- ui.c - ui initialization and other ui related functions | | | |-- utils/ - miscellaneous utility functions and data types | | | | | |-- private/ - internal headers of utilities | | |-- cancellation.c - kind of cancellation token | | |-- darray.c - macros for managin dynamic arrays | | |-- dynarray.c - array reallocation with fewer memory copies | | |-- env.c - environment variables related functions | | |-- event_nix.c - pipe() wrapper to interrupt selector | | |-- event_win.c - event object of manual reset kind to interrupt | | | selector | | |-- fs.c - functions to deal with file system objects | | |-- fsdata.c - maps arbitrary data onto file system tree | | |-- fsddata.c - fsdata wrapper that takes care of dynamic memory | | |-- fswatch_nix.c - watches path in file system for changes on *nix | | |-- fswatch_win.c - watches path in file system for changes on Windows | | |-- file_streams.c - file stream reading related functions | | |-- filemon.c - file monitoring "object" | | |-- filter.c - small abstraction over filter driven by a regexp | | |-- globs.c - provides support of glob patterns | | |-- gmux_nix.c - implementation of named mutex on *nix | | |-- gmux_win.c - implementation of named mutex on Windows | | |-- int_stack.c - int stack "object" | | |-- log.c - primitive logging | | |-- matcher.c - file path/name matcher (glob/regexp/mime-type) | | |-- matchers.c - list of matchers (which are ANDed together) | | |-- mem.c - simple memory/array manipulation utilities | | |-- path.c - various functions to work with paths | | |-- regexp.c - regexp related | | |-- selector_nix.c - waiting for file descriptors to become readable | | |-- selector_win.c - waiting for file handles to become readable | | |-- shmem_nix.c - implementation of named shared memory on *nix | | |-- shmem_win.c - implementation of named shared memory on Windows | | |-- str.c - various string functions | | |-- string_array.c - functions to work with arrays of strings | | |-- trie.c - 3-way trie implementation | | |-- utf8.c - functions to handle utf8 strings | | |-- utf8proc.c - third-party implementation of UTF-8 Unicode handling | | |-- utils.c - various utilities | | |-- utils_nix.c - various utilities for *nix systems | | |-- utils_win.c - various utilities for MS Windows | | `-- xxhash.c - fast hashing algorithm | | | |-- args.c - command-line arguments parsing and processing | |-- background.c - runs commands in background | |-- bmarks.c - management of (named) bookmarks | |-- bracket_notation.c - list of bracket notation entries | |-- cmd_actions.c - reusable parts of action-like functionality | |-- cmd_completion.c - handles command line completion | |-- cmd_core.c - command line parsing | |-- cmd_handlers.c - handlers for command line commands | |-- compare.c - implementation of directory comparison | |-- dir_stack.c - for :pushd and :popd commands | |-- event_loop.c - event dispatching loop | |-- filelist.c - fill/update list of files | |-- filename_modifiers.c - expands filename modifiers | |-- filetype.c - stores filetype information from vifmrc | |-- filtering.c - managing file filters | |-- flist_hist.c - file list history related code | |-- flist_pos.c - most of file list scrolling/cursor positioning code | |-- flist_sel.c - most of file list selection handling code | |-- fops_common.c - shared functionality of high-level file operations | |-- fops_cpmv.c - copying/moving/linking of files | |-- fops_misc.c - most of high-level operations on files | |-- fops_put.c - putting of files | |-- fops_rename.c - renaming files in various ways | |-- instance.c - manages generic state of the instance | |-- ipc.c - handles communication across instances of vifm | |-- macros.c - code of macros expansion | |-- marks.c - stores information about marked directories | |-- ops.c - most of operations performed on file system | |-- opt_handlers.c - initialization of options and option change handlers | |-- plugins.c - plugin management | |-- registers.c - implementation of registers | |-- running.c - code of handing file and commands running | |-- search.c - code for / and ? commands of normal mode | |-- signals.c - handlers for different signals | |-- sort.c - sort function | |-- status.c - definition of global status structure | |-- tags.c - tags for :h completion | |-- trash.c - code that handles list of files in trash | |-- types.c - internal file type detection and conversions | |-- undo.c - stores and handles the undo list | |-- vcache.c - cache of viewers' output | |-- version.c - git hash and other version information | |-- viewcolumns_parser.c - contains code for parsing 'viewcolumns' option | |-- vifm.c - contains main initialization/termination code | `-- win_helper.c - needed for temporary rights elevation on Windows | |-- tests/ - testing infrastructure and test suites | |-- abbrevs/ - tests of src/engine/abbrevs.c | |-- autocmds/ - tests of src/engine/autocmds.c | |-- bmarks/ - tests of src/bmarks.c | |-- cmds/ - tests of src/engine/cmds.c | |-- colmgr/ - tests of src/ui/color_manager.c | |-- column_view/ - tests of src/ui/column_view.c | |-- commands/ - tests of src/cmd_*.c | |-- completion/ - tests of src/engine/completion.c | |-- escape/ - tests of src/ui/escape.c | |-- fileops/ - tests of src/fops_*.c | |-- filetype/ - tests of src/filetype.c | |-- filter/ - tests of src/utils/filter.c | |-- fuzz/ - fuzzy tests, built but not run (need a test driver) | |-- ioeta/ - tests of src/io/ioeta.c | |-- ionotif/ - tests of src/io/ionotif.h | |-- iop/ - tests of src/io/iop.c | |-- ior/ - tests of src/io/ior.c | |-- keys/ - tests of src/engine/keys.c | |-- lua/ - tests of src/lua/*.c | |-- menus/ - tests of src/menus/*.c | |-- misc/ - tests of things without a dedicated test suite | |-- options/ - tests of src/engine/options.c | |-- parsing/ - tests of src/engine/parsing.c | |-- regs_shmem_app/ - a helper for tests/misc/registers_shared_memory.c | |-- test-data/ - files used by tests in run-time | |-- test-support/ - test framework (stic) and common test functions | |-- text_buffer/ - tests of src/engine/text_buffer.c | |-- undo/ - tests of src/undo.c | |-- utils/ - tests of src/utils/*.c | |-- variables/ - tests of src/engine/variables.c | `-- viewcolumns_parser/ - tests of src/viewcolumns_parser.c | |-- AUTHORS - list of code contributors |-- BUGS - some of known issues |-- ChangeLog - list of changes |-- FAQ - some common questions |-- HACKING.md - this file |-- INSTALL - building instructions |-- NEWS - like the ChangeLog, but in more human-readable format |-- README - readme used for distribution |-- README.md - readme to be displayed by code hosting services |-- THANKS - thanks to people that help to improve vifm `-- TODO - what still needs to be implemented vifm-0.14/INSTALL000066400000000000000000000200531475151500600134340ustar00rootroot00000000000000Installation ~~~~~~~~~~~~ On *nix you need: A working version of ncursesw-compatible library. Hints for building on Debian-based systems (Debian/Ubuntu/Linux Mint): * ncurses package you need to build vifm is called "libncursesw5-dev" * also install either perl interpreter or vim to generate tags (done during build) * additional (optional) tools used in sample vifmrc: - sudo aptitude install sshfs curlftpfs fuse fuse-zip fusefat fuseiso - for a support of .rar-archive files see: https://gist.github.com/enberg/84710b619bdb0b10e945 *nix Installation (Cygwin emulates *nix environment, so follow these steps when building with Cygwin): If you checkout sources from git, run scripts/fix-timestamps script first to suppress any spurious build files regeneration. ./configure make ("su" if you don't have access to /usr/local/bin) make install ./configure has the following options (the value in square brackets is the default one): --disable/[enable]-extended-keys - controls whether to build vifm with support of extended keys (like arrows, home, end, etc.). If it's disabled, there absence of a delay after pressing escape is guaranteed for all curses implementations. --disable/[enable]-desktop-files - controls whether vifm will parse *.desktop files found on your system to get a list of programs associated with mimetype of a file. --disable/[enable]-remote-cmds - enable remote command sending. --[disable]/enable-developer - enables features of interest to developers: - debug information - debug-friendly optimizations - treating compilation warnings as errors --[disable]/enable-werror - pass -Werror flag to compiler. --[disable]/enable-coverage - enables code coverage generation. --disable/[enable]-build-timestamp - disables embedding compilation date into executable. --with-sanitize=basic|thread|leak - enables address and undefined, thread or leaks sanitizers respecitively. --without/[with]-glib - use GLib2/GIO to determine mimetypes if available. --without/[with]-gtk - old (incorrect) name of --without/[with]-glib. --without/[with]-libmagic - use libmagic to determine mimetypes if available. --without/[with]-X11 - use libX11 to get terminal window title before changing it to restore it on exit. --without/[with]-dyn-X11 - load libX11 dynamically --with-curses=[/usr] - path to installation root of curses library --with-curses-name=[ncursesw] - name of the curses library You can install vifm in your ~/ directory if you prefer. To do this manually copy the vifm and vifm-pause executables from the src/ directory to where you want to run them. Another possibility is to pass --prefix argument to the ./configure script, with path under the home directory, e.g. --prefix=$HOME/local. The first approach might cause vifm to find some files which are normally installed under /usr/ directory, but the application will be operational. After you start vifm for the first time, you can edit the configuration file. It will be at ~/.config/vifm/vifmrc unless ~/.vifm/ exists. See help for description of other files in configuration directory. On OS X you need: Some compatible curses implementation usually comes with the system. If not, get and install libscursesw or libncursesw. Proceed like in *nix Installation section. You might also want to pass --with-glib=no argument to ./configure script to omit unwanted error message when vifm starts. On Windows you need: Mingw The following libraries installed from dev-packages for Mingw (they should include DLL's): - Pdcurses for Mingw (with applied patches under patches/pdcurses*/) - Regex for Mingw - pthreads for Windows Cross-compiling for Windows using MXE (http://mxe.cc/): Required MXE packages: - gcc - pdcurses (put patches from patches/pdcurses*/ to src/ directory of MXE) - libgnurx - pthreads To build vifm using i686-pc-mingw32 toolchain: - add usr/bin/ directory of MXE to the PATH environment variable, e.g. PATH="$MXE_ROOT/usr/bin/:$PATH" - cd src/ - make -f Makefile.win CROSS=i686-pc-mingw32- Windows Installation (using Windows native API, not Cygwin): cd src (uncomment some lines in Makefile.win below 'config:' if you want) make -f Makefile.win Copy vifm.exe and win_helper.exe to where you want to run them (but they all should be in the same directory). You will also need to copy vifm help files and vifmrc file to %HOME%/.vifm/ or APPDATA%/Vifm/. In case you want to be able to create symbolic links, you should set a "Run as Administrator" attribute for the win_helper.exe. Note: symbolic links are supported on Windows starting from Windows Vista. If you use *nix shells copy vifm-pause to some directory that is included in the %PATH%. The better solution is to put it into %HOME%/.vifm/scripts or %APPDATA%/Vifm/scripts. On Windows you can also use vifm in a portable way (e.g. keep it on a removable device). To do that just put your vifmrc file where vifm.exe is and all configuration files will be stored there. Vim Specific Options: vim/ directory referred to below is: - {install_prefix}/share/vifm/vim/ on *nix-like systems; - data/vim/ on Windows. Recommended way of installing Vifm-Vim integration is to point Vim's 'runtimepath' option to the vim/ directory, like this set runtimepath+=/usr/share/vifm/vim/ in your .vimrc file. Such setup has an additional benefit of Vifm help being not visible unless Vim is started via :help command from Vifm. If it's not what you desire, just add vim-doc/ directory in a similar manner: set runtimepath+=/usr/share/vifm/vim-doc/ Alternatively, you can install whole vim/ directory into Vim or only some parts of it as described below. vim/doc/vifm.txt file should go to your ~/.vim/doc directory or the system vim/doc directory. Then launch Vim and give the command :helptags ~/.vim/doc or :helptags path/to/system/vim/doc depending on where you installed the vifm.txt file. Note that you have to have write permission to corresponding directory. You will also need to set 'vimhelp' option in ~/.vifm/vifmrc as the default setting is to use the plain text file. If you want to use syntax highlighting and file type plugin for vifmrc file and on editing command line command externally, copy vim/syntax/vifm.vim, vim/ftdetect/vifm.vim and all files in vim/ftplugin/ appropriately to either system wide or user syntax/ and ftplugin/ directories of Vim. One can also add to .vimrc file commands like, but using ftdetect/ directory is a cleaner way to achieve the same: autocmd BufNewFile,BufRead vifmrc :set filetype=vifm autocmd BufNewFile,BufRead ~/.vifm/colors/* :set filetype=vifm or when parsing of mode lines is enabled in Vim, add the following as the first or last line to configuration file and color schemes: " vim: set filetype=vifm : To use vifm.vim plugin install vim/plugin/vifm.vim script to Vim in the same way as described above. The script allows you to use Vifm from Vim to select files and open them in different ways (e.g. in splits, tabs). Note: you need at least Vim 7.3 to use it. Building with broken wide curses: OpenBSD used to have perverted ncursesw library, which had stubs with infinite loops instead of real wide functions. Vifm had a workaround for it. The situation on OpenBSD has improved since then and the workaround is now disabled by default. If you still need it to build on older OpenBSD or for some other system, run ./configure with "CFLAGS=-DBROKEN_WIDE_CURSES" argument. Mind that this is a workaround and it probably best works with Latin characters. vifm-0.14/Makefile.am000066400000000000000000000011021475151500600144310ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = src EXTRA_DIST = COPYING.3party ChangeLog.LuaAPI FAQ BUGS patches pkgs tests dist-hook: make -C "$(distdir)/tests" clean rm -f "$(distdir)/tests/.in.vim" # enable generating tags files in particular directories distcheck-hook: mkdir -p $(distdir)/data/vim/doc/app/ $(distdir)/data/vim/doc/plugin/ chmod u+w $(distdir)/data/vim/doc/app/ $(distdir)/data/vim/doc/plugin/ mostlyclean-local: +make -C "$(abs_top_srcdir)/tests" "B=$(abs_builddir)/tests/" clean coverage: force $(MAKE) -C src $@ force: ; vifm-0.14/Makefile.in000066400000000000000000000643461475151500600144650ustar00rootroot00000000000000# Makefile.in generated by automake 1.17 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2024 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = \ $(top_srcdir)/build-aux/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/build-aux/m4/ax_pthread.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/build-aux/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/compile \ $(top_srcdir)/build-aux/config.guess \ $(top_srcdir)/build-aux/config.h.in \ $(top_srcdir)/build-aux/config.sub \ $(top_srcdir)/build-aux/install-sh \ $(top_srcdir)/build-aux/missing AUTHORS COPYING ChangeLog \ INSTALL NEWS README THANKS TODO build-aux/compile \ build-aux/config.guess build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -700 -exec chmod u+rwx {} ';' \ ; rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" GZIP_ENV = -9 DIST_ARCHIVES = $(distdir).tar.bz2 DIST_TARGETS = dist-bzip2 # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = \ find . \( -type f -a \! \ \( -name .nfs* -o -name .smb* -o -name .__afs* \) \) -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ AWK_PROG = @AWK_PROG@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COL_PROG = @COL_PROG@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DATA_SUFFIX = @DATA_SUFFIX@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ GIT_PROG = @GIT_PROG@ HAVE_FILE_PROG = @HAVE_FILE_PROG@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IN_GIT_REPO = @IN_GIT_REPO@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANGEN_PROG = @MANGEN_PROG@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL_PROG = @PERL_PROG@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_LIBS = @PTHREAD_LIBS@ SANITIZERS_CFLAGS = @SANITIZERS_CFLAGS@ SED = @SED@ SED_PROG = @SED_PROG@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TESTS_CFLAGS = @TESTS_CFLAGS@ VERSION = @VERSION@ VIM_PROG = @VIM_PROG@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src EXTRA_DIST = COPYING.3party ChangeLog.LuaAPI FAQ BUGS patches pkgs tests all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): build-aux/config.h: build-aux/stamp-h1 @test -f $@ || rm -f build-aux/stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) build-aux/stamp-h1 build-aux/stamp-h1: $(top_srcdir)/build-aux/config.h.in $(top_builddir)/config.status $(AM_V_at)rm -f build-aux/stamp-h1 $(AM_V_GEN)cd $(top_builddir) && $(SHELL) ./config.status build-aux/config.h $(top_srcdir)/build-aux/config.h.in: $(am__configure_deps) $(AM_V_GEN)($(am__cd) $(top_srcdir) && $(AUTOHEADER)) $(AM_V_at)rm -f build-aux/stamp-h1 $(AM_V_at)touch $@ distclean-hdr: -rm -f build-aux/config.h build-aux/stamp-h1 # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) $(AM_V_at)$(MKDIR_P) "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip dist-zstd distcheck distclean distclean-generic \ distclean-hdr distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-local pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile dist-hook: make -C "$(distdir)/tests" clean rm -f "$(distdir)/tests/.in.vim" # enable generating tags files in particular directories distcheck-hook: mkdir -p $(distdir)/data/vim/doc/app/ $(distdir)/data/vim/doc/plugin/ chmod u+w $(distdir)/data/vim/doc/app/ $(distdir)/data/vim/doc/plugin/ mostlyclean-local: +make -C "$(abs_top_srcdir)/tests" "B=$(abs_builddir)/tests/" clean coverage: force $(MAKE) -C src $@ force: ; # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% vifm-0.14/NEWS000066400000000000000000011603311475151500600131070ustar00rootroot0000000000000008 February 2025 ================ Vifm v0.14 ---------- Thanks to everyone who tried out the beta. Highlights: - Somewhat incompatible changes. This release contains a number of changes which are technically non-backwards compatible. However, all of them should have very little negative impact (i.e., hard to notice the change without reading the changelog). At the same time, a bug, fixing which is likely to have an impact on user configuration, has been identified but not yet fixed to give a chance to update all affected `vifmrc` files. If a bug is likely to be relied on by the configuration, a dialog with the explanation and instructions will appear. - Sorting and non-Latin characters. Until this release Vifm has always used byte sorting (effectively, sorting of UTF-8 byte sequences). From now on a form of Unicode normalization is applied to strings when sorting views and completion results. The change can be expanded to other cases in future releases. The measured performance impact is negligible (several percent). Practically, this means that characters like `a` and `ä` are now grouped together regardless of the way in which diacritic is being encoded. Some characters can still appear in weird non-alphabetic positions because full Unicode normalization results in losing case sensitivity and is therefore not applied. - Addressing some longtime woes. For one reason or another some inconvenient peculiarities have accumulated over the years. Time has come to replace workarounds with something better: * global variables (`g:var`) replace the use of environmental variables for internal purposes, thus avoiding polluting environment of child processes * use of `:let` to invoke a builtin function discarding its result is superseded by a proper `:call` command * use of `execute 'normal! gl'` to run selection now has `:open` command as a better alternative * size of selection can now be queried via `selected()` (previous releases required `expand('%c') == expand('%f')` or an equivalent trick) * `%{expression}` macro in `'statusline'` can now have `}` embedded as `\}` (`\\` still means two slashes) * dialogs now recognize `Enter` and `Escape` keys as "yes" and "no" replies - More useful menus. `:copen` recalled last navigation menu for years, but that's not always enough. Now up to 25 such menus are stored after their use and can be navigated to via `:chistory`/`:colder`/`:cnewer`. In addition, `:grep` or `:find` can be rerun on the same set of commands right from the menu which previously required leaving the menu just to get back to it. History of command-line in menus is now also managed and stored, making staying in menu mode for longer a more pleasant experience. - UI improvements. Navigation between views/tabs via new `:wingo` command with optional incremental completion thanks to new `'wildinc'` option (applicable to any other command or all of them at once). Ability to highlight a view column (`:highlight column:size ...`), specify how highlighting applies (`'hloptions'`), set a separator between miller columns in `set fillchars+=millersep:'|'`, shorten columns in the middle (`^` in `'viewcolumn'`). Also, displaying of CJK characters on Windows should have much fewer issues now. - Lua API. Slowly adding new functionality. This batch comes with things like primitive file operations, ability to create custom views or menus and handling ranges of :commands. - Other. Search matches can be traversed via `Tab` and `Shift-Tab` while in the prompt (applies to navigation mode as well). An invalid expression in `:if` or `:elseif` no longer just skips that command, now all commands up to and including matching `:endif` are skipped to avoid executing half-random sequences of commands due to a mistake, which also results in better error messages. Previously, `:elseif` was also evaluating its expression even some earlier branch was already taken. `:rename` now asks whether file move is intended instead of assuming a user mistake and refusing to proceed. Support MTP devices by bundled `vifm-media` script if simple-mtpfs is installed. Also improve what devices are offered for mounting (e.g., don't offer a whole drive if it contains partitions). `v:version` to branch depending on release. - Fixes. Get preview graphics out of the way in more cases (like when opening menus). Terminals with more than 32768 color pairs should not cause visual defects or crashes anymore. Merging of directories was either not asking for confirmation or aborting after skipping a file. Paths with some unreadable characters were not processed due to a regression. Directories weren't counted in estimates of file operations. `&&` operator was always evaluating both branches instead of properly short-circuiting. `%a` macro of `'statusline'` was displaying wrong values on non-Linux Unix-like systems. `:compare` falsely claimed that files of identical size and with common prefix are identical. Building: - Changed --with-gtk flag to --with-glib (old name is still available). GTK was pulled in by mistake, only GIO/GLib was ever used... - Updated autotools scripts to their newer versions (thanks to phanium, a.k.a. phanen). - Fixed running tests with locales that use comma for decimal point (thanks to PRESFIL). - Fixed running tests with musl libc (thanks to Henrik Holst, a.k.a. hholst80). :set command and options: - Changed default value of 'findprg' to avoid the use of syntax specific to GNU find. The only difference is that now one can see "Permission denied" errors which weren't displayed before. Sample vifmrc files contain detection of GNU find on startup (thanks to Jose Riha, a.k.a. jose1711). - Added "mchistory" value to 'vifminfo' and 'sessionoptions' option. It manages storing of command-line history of menus. - Added 'hloptions' option to configure which view colums get affected by file highlighting (thanks to qsmodo). - Added "millersep:" value to 'fillchars' that allows customizing the border between miller columns (thanks to Shuo, a.k.a. shenqshuoh). - Added 'wildinc' option that defines which :commands should be completed as they are edited. - Added 'uioptions' option with possible "iodetails" value to display progress dialog by default (thanks to Ralf Schmitt). - Added middle view column alignment (specified by "^" in 'viewcolumns' option). Part of the text is replaced with ellipsis to keep both start and end visible (patch by Vadim Curcă). - Made completion of an option with its current value work not only on `opt=`, but also on `opt='` and `opt="` (thanks to aleksejrs). Command-line mode: - Added ":history mcmd" menu for displaying command-line history of menus. - Added :col[der] and :cnew[er] commands to menu mode to traverse history of navigation menus. - Added :chi[story] command that opens a menu of saved menus (available in all menus as well). - Added "column:{name}" form of argument to :highlight command to specify style of a separate column (thanks to Anton Gepting). - Added :wingo command to navigate to a view by substring matching against its title or path (thanks to iSeeU816 and Alexandre Viau). - Added :cal[l] command to run a function discarding its return value (thanks to anyone asking about simply running a function). - Added :o[pen] command to open current file, selection or range as if Enter was pressed (thanks to Safal Piya, a.k.a. mrsafalpiya). - Added a way to insert "}" inside of %{expr} macro of 'statusline' (thanks to vuenn). - Made :goto preserve custom and tree views (thanks to Svetlozar Iliev, a.k.a. asmodeus812). - Made :compare treat non-regular files (pipes, sockets, etc.) as empty. - Allowed moving files via :rename (requires an interactive confirmation) (thanks to aleksejrs). - Improved error message on trying to :unlet a builtin variable. - Expand environment variables in the arguments of :mark command (thanks to an anonymous at Vifm Q2A site). - Improved detection and reporting of invalid mark name by :mark command. - Made Tab and Shift-Tab in interactive search prompts (including when navigating) move cursor to next/previous search match (thanks to David Sierra DiazGranados, a.k.a. davidsierradz). Macros: - Allow and skip !/!! prefix of custom external :commands for more macros (%S, %q, %i, %m, %M, %s, %v, %u, %U, %Iu, %IU). - Adjusted heuristic for determining previewer type to allow use of %px and %py with %pd without any implications (thanks to iambumblehead). Core: - Changed initialization to not create a copy of rendered man page at $VIFM/vifm-help.txt, :help now opens the original file (thanks to intelfx). - Changed handling of Ctrl-Z to not suspend the application if a corresponding user mapping exists (patch 高浩亮, a.k.a. haolian9). - Perform sorting of completion items after doing Unicode normalization. - Perform sorting of file names after doing Unicode normalization (thanks to hacksenwerk). Normal and visual modes: - Added [S and ]S shortcuts as wrapping versions of [s and ]s (thanks to aksr). Integration: - Made vifm-media not offer partitioned drives as they aren't mountable as a whole. - Extended vifm-media script to support MTP devices if simple-mtpfs tool is installed (thanks to FlyCat, a.k.a. yanwh0311, and Alexandre Viau). - Fixed vifm-media script not listing external drives with udevil and udisks. - Fixed vifm-media script not listing removable drives with udisks marked as non-removable by udisks. AppImage: - Updated ncurses in AppImage to 6.5. - Don't overwrite $TERMINFO in AppImage, set/append to $TERMINFO_DIRS instead (thanks to anonymous at Vifm Q2A site). - Fixed /usr/share/terminfo not being consulted when running from an AppImage (thanks to anonymous at Vifm Q2A site). Menus and dialogs: - Added command-line history to menu mode. - Added :gr[ep] and :fin[d] commands to menu mode. They allow (re)running the commands on the same set of files without leaving the mode. - Added inode number to File Info dialog. - Added handling of Enter/Escape keys to prompts and error dialogs (thanks to laur89, Alexandre Viau and multiple other users who asked about this). - List register's content listed in normal rather then reversed order in :registers/:display menu. - Display number of color pairs in use in :version/:vifm menu. - Constrained background error dialogs to appear only in normal mode when not much is going on. Macros: - Changed %N macro to not be mutually exclusive with most of other macros (the limitation wasn't documented and didn't make much sense) (thanks to James Dietrich). Scripting: - Added a statusbar message and a dialog to warn about an upcoming fix for strings in conditional expressions (e.g., `if $VAR` checks for `$VAR` being non empty instead of converting it to an integer) (thanks to justpretending2). - Changed behaviour on failure to evaluate an expression of :if or :elseif. Previously this resulted in trying to execute any commands until and including :endif (all branches taken). Now everything up to :endif will not be executed (no branches taken) (thanks to Ed Pavlov). - Changed filetype() to accept path in its first parameter. This means that passing it something like "15abc" will no longer be interpreted as 15 (thanks to MikeLemon). - Added escape() builtin function to escape specific characters in strings (thanks to The Cyberduck). - Added selected() builtin function which returns number of currently selected files. - Added global variables (with "g:" prefix) to avoid using environment variables in their place as a workaround. - Added v:version builtin variable that exposes version as an integer which can be meaningfully compared (thanks to an anonymous at Vifm Q2A site). Performance: - Slightly improved performance of comparing files by content. - Fixed performance degradation after preview consumes lots of color pairs. Documentation: - Clarified documentation on column literals and escaping (thanks to chelovechishko). - Made documentation of 'vifminfo' more readable. - Rewrote "Menus and dialogs" section. - Document how the use of different preview macros affects classification of a previewer (thanks to iambumblehead). - Slightly expanded documentation on %N macro (thanks to James Dietrich). - Somewhat improved documentation on functional keys. - Fixed documentation on yy, Y, dd and DD not mentioning how "s" flag of 'cpoptions' affects their behaviour (thanks to James Dietrich). - Fixed outdated documentation on the behaviour of n/N when 'hlsearch' is enabled since the introduction of highlighting of search matches (thanks to James Dietrich). TUI (Text User Interface): - When processing multiple files in background, show current position in the list on the job bar. - Shorten home directory in paths shown on the job bar. - Provide numerical value of a color as a description of a completion item for it. - Don't attempt clearing graphics when menu-like mode is active. The graphics should have been hidden on entering the mode. - Allowed wild menu popup to take up up to 40% of the screen. Only on Windows: - Upgraded to PDCurses 3.9 (was 3.8). Combined with some other changes this improves the situation with handling of CJK characters (thanks to zzx41375004, vodbyte, Jeremy Yuan and others). - Fixed `data/vifmrc` next to vifm.exe being used as global vifmrc file (thanks to midrare). - Fixed incorrectly determining whether a directory is writable (primarily C:\ could be reported as non-writable) (thanks to theorlangur and bitraid). - Fixed system() and term() not taking 'shell'/'shellcmdflag' into account (thanks to spence91). Color schemes: - Added WildBox highlight group. It can be used to set background of completion window. Noteworthy fixes: - Fixed graphics of view mode not being hidden on activating menu, more or file info modes. - Fixed graphics not being cleared on switching to single-pane view (thanks to ret2src). - Fixed a historical omission of Ctrl-G not being available in some prompts: file rename on conflict; owner, group and symbolic link target change (thanks to Branislav Gerazov). - Fixed display issues or a crash when using a terminal with more than 32768 color pairs (thanks to iboggs and itshog). - Fixed %a 'statusline' macro producing wrong values on non-Linux Unix-like systems (thanks to voh9eepah). - Fixed merging directories on copying not asking for overwrite confirmations (thanks to aleksejrs). - Fixed skipping of file move during merging aborting the whole operation (thanks to aleksejrs). - Fixed `:[un]select !` treating "" as an external command. - Fixed environment variables not being expanded on checking that a :file[x]type or :fileviewer command exists in $PATH (thanks to Ben Elan). - Fixed weird sorting of filenames with non-Latin characters when 'sortnumbers' option is set and strverscmp() is not provided by the system (like on Windows). - Fixed :compare reporting identical files as changed when there were more than a couple of files with identical size and 4096-byte prefix. A regression in 0.13-beta (thanks to Alexandr Keyp, a.k.a. IAmKapuze). - Fixed :compare hanging on trying to compare non-regular files like pipes by contents. - Fixed :substitute, :tr, gu* and gU* detecting a non-existent target name conflict when rename in a custom view would produce an identically named files in different directories (thanks to aleksejrs). - Fixed :restart leaving histories disabled unless 'history' is set to a non-default value in vifmrc (thanks to James Dietrich). - Fixed processing of file names and paths that undergo escaping in the UI, like inability to externally rename them (regression in 0.12.1 beta) (thanks to jc-SpaceXp). - Fixed rules for handling of selection by :file[x]type not taking %"c/%"C/%"f/%"F macros into account (relevant mostly to Windows) (thanks to %smoothdad). - Fixed :elseif evaluating its expression even if an earlier conditional branch was already taken. - Fixed loading a session with global tabs when 'tabscope' is "pane" resulting in global tabs being invisible. - Fixed Ctrl-A and Ctrl-E in command-line mode not stopping completion unlike other similar keys. - Fixed directories not being accounted for in estimates (thanks to justpretending2). - Fixed Escape being handled as Ctrl-C in prompts which suppresses future errors. - Fixed !! not affecting commands that include %s or %v macro (thanks to James Dietrich). - Fixed a crash after a memory corruption when running an external command via expansion of an environment variable when 'fastrun' is set (e.g., `!$EDITOR`) (thanks to Quaddroo). - Fixed abort on instance sending something over IPC to itself (thanks to Marcin Kurczewski, a.k.a. rr-). - Fixed `&&` operator which was acting as binary `&` (in terms of evaluation, the result was properly boolean) (thanks to justpretending2). Other changes: - Configure 'vifminfo' in sample vifmrc files to store most of the things in vifminfo by default (add missing histories and tabs) (thanks to Christoph Schmidpeter). - Commented out one of MC-like shortcuts in sample vifmrc files, Ctrl-U, to avoid confusing Vim users with default configuration (thanks to midrare). See change log for the full list of changes and by whom they were suggested or implemented. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 19 January 2025 =============== Vifm v0.14 beta --------------- The beta stage will last about two weeks. In case any serious bugs are found during this period, another release candidate can be released. Highlights: - Somewhat incompatible changes. This release contains a number of changes which are technically non-backwards compatible. However, all of them should have very little negative impact (i.e., hard to notice the change without reading the changelog). At the same time, a bug, fixing which is likely to have an impact on user configuration, has been identified but not yet fixed to give a chance to update all affected `vifmrc` files. If a bug is likely to be relied on by the configuration, a dialog with the explanation and instructions will appear. - Sorting and non-Latin characters. Until this release Vifm has always used byte sorting (effectively, sorting of UTF-8 byte sequences). From now on a form of Unicode normalization is applied to strings when sorting views and completion results. The change can be expanded to other cases in future releases. The measured performance impact is negligible (several percent). Practically, this means that characters like `a` and `ä` are now grouped together regardless of the way in which diacritic is being encoded. Some characters can still appear in weird non-alphabetic positions because full Unicode normalization results in losing case sensitivity and is therefore not applied. - Addressing some longtime woes. For one reason or another some inconvenient peculiarities have accumulated over the years. Time has come to replace workarounds with something better: * global variables (`g:var`) replace the use of environmental variables for internal purposes, thus avoiding polluting environment of child processes * use of `:let` to invoke a builtin function discarding its result is superseded by a proper `:call` command * use of `execute 'normal! gl'` to run selection now has `:open` command as a better alternative * size of selection can now be queried via `selected()` (previous releases required `expand('%c') == expand('%f')` or an equivalent trick) * `%{expression}` macro in `'statusline'` can now have `}` embedded as `\}` (`\\` still means two slashes) * dialogs now recognize `Enter` and `Escape` keys as "yes" and "no" replies - More useful menus. `:copen` recalled last navigation menu for years, but that's not always enough. Now up to 25 such menus are stored after their use and can be navigated to via `:chistory`/`:colder`/`:cnewer`. In addition, `:grep` or `:find` can be rerun on the same set of commands right from the menu which previously required leaving the menu just to get back to it. History of command-line in menus is now also managed and stored, making staying in menu mode for longer a more pleasant experience. - UI improvements. Navigation between views/tabs via new `:wingo` command with optional incremental completion thanks to new `'wildinc'` option (applicable to any other command or all of them at once). Ability to highlight a view column (`:highlight column:size ...`), specify how highlighting applies (`'hloptions'`), set a separator between miller columns in `set fillchars+=millersep:'|'`, shorten columns in the middle (`^` in `'viewcolumn'`). Also, displaying of CJK characters on Windows should have much fewer issues now. - Lua API. Slowly adding new functionality. This batch comes with things like primitive file operations, ability to create custom views or menus and handling ranges of :commands. - Other. Search matches can be traversed via `Tab` and `Shift-Tab` while in the prompt (applies to navigation mode as well). An invalid expression in `:if` or `:elseif` no longer just skips that command, now all commands up to and including matching `:endif` are skipped to avoid executing half-random sequences of commands due to a mistake, which also results in better error messages. Previously, `:elseif` was also evaluating its expression even some earlier branch was already taken. `:rename` now asks whether file move is intended instead of assuming a user mistake and refusing to proceed. Support MTP devices by bundled `vifm-media` script if simple-mtpfs is installed. Also improve what devices are offered for mounting (e.g., don't offer a whole drive if it contains partitions). `v:version` to branch depending on release. - Fixes. Get preview graphics out of the way in more cases (like when opening menus). Terminals with more than 32768 color pairs should not cause visual defects or crashes anymore. Merging of directories was either not asking for confirmation or aborting after skipping a file. Paths with some unreadable characters were not processed due to a regression. Directories weren't counted in estimates of file operations. `&&` operator was always evaluating both branches instead of properly short-circuiting. `%a` macro of `'statusline'` was displaying wrong values on non-Linux Unix-like systems. `:compare` falsely claimed that files of identical size and with common prefix are identical. Building: - Changed --with-gtk flag to --with-glib (old name is still available). GTK was pulled in by mistake, only GIO/GLib was ever used... - Updated autotools scripts to their newer versions (thanks to phanium, a.k.a. phanen). - Fixed running tests with locales that use comma for decimal point (thanks to PRESFIL). - Fixed running tests with musl libc (thanks to Henrik Holst, a.k.a. hholst80). :set command and options: - Changed default value of 'findprg' to avoid the use of syntax specific to GNU find. The only difference is that now one can see "Permission denied" errors which weren't displayed before. Sample vifmrc files contain detection of GNU find on startup (thanks to Jose Riha, a.k.a. jose1711). - Added "mchistory" value to 'vifminfo' and 'sessionoptions' option. It manages storing of command-line history of menus. - Added 'hloptions' option to configure which view colums get affected by file highlighting (thanks to qsmodo). - Added "millersep:" value to 'fillchars' that allows customizing the border between miller columns (thanks to Shuo, a.k.a. shenqshuoh). - Added 'wildinc' option that defines which :commands should be completed as they are edited. - Added 'uioptions' option with possible "iodetails" value to display progress dialog by default (thanks to Ralf Schmitt). - Added middle view column alignment (specified by "^" in 'viewcolumns' option). Part of the text is replaced with ellipsis to keep both start and end visible (patch by Vadim Curcă). - Made completion of an option with its current value work not only on `opt=`, but also on `opt='` and `opt="` (thanks to aleksejrs). Command-line mode: - Added ":history mcmd" menu for displaying command-line history of menus. - Added :col[der] and :cnew[er] commands to menu mode to traverse history of navigation menus. - Added :chi[story] command that opens a menu of saved menus (available in all menus as well). - Added "column:{name}" form of argument to :highlight command to specify style of a separate column (thanks to Anton Gepting). - Added :wingo command to navigate to a view by substring matching against its title or path (thanks to iSeeU816 and Alexandre Viau). - Added :cal[l] command to run a function discarding its return value (thanks to anyone asking about simply running a function). - Added :o[pen] command to open current file, selection or range as if Enter was pressed (thanks to Safal Piya, a.k.a. mrsafalpiya). - Added a way to insert "}" inside of %{expr} macro of 'statusline' (thanks to vuenn). - Made :goto preserve custom and tree views (thanks to Svetlozar Iliev, a.k.a. asmodeus812). - Made :compare treat non-regular files (pipes, sockets, etc.) as empty. - Allowed moving files via :rename (requires an interactive confirmation) (thanks to aleksejrs). - Improved error message on trying to :unlet a builtin variable. - Expand environment variables in the arguments of :mark command (thanks to an anonymous at Vifm Q2A site). - Improved detection and reporting of invalid marks by :mark command. - Made Tab and Shift-Tab in interactive search prompts (including when navigating) move cursor to next/previous search match (thanks to David Sierra DiazGranados, a.k.a. davidsierradz). Macros: - Allow and skip !/!! prefix of custom external :commands for more macros (%S, %q, %i, %m, %M, %s, %v, %u, %U, %Iu, %IU). - Adjusted heuristic for determining previewer type to allow use of %px and %py with %pd without any implications (thanks to iambumblehead). Core: - Changed initialization to not create a copy of rendered man page at $VIFM/vifm-help.txt, :help now opens the original file (thanks to intelfx). - Changed handling of Ctrl-Z to not suspend the application if a corresponding user mapping exists (patch 高浩亮, a.k.a. haolian9). - Perform sorting of completion items after doing Unicode normalization. - Perform sorting of file names after doing Unicode normalization (thanks to hacksenwerk). Normal and visual modes: - Added [S and ]S shortcuts as wrapping versions of [s and ]s (thanks to aksr). Integration: - Made vifm-media not offer partitioned drives as they aren't mountable as a whole. - Extended vifm-media script to support MTP devices if simple-mtpfs tool is installed (thanks to FlyCat, a.k.a. yanwh0311, and Alexandre Viau). - Fixed vifm-media script not listing external drives with udevil and udisks. - Fixed vifm-media script not listing removable drives with udisks marked as non-removable by udisks. AppImage: - Updated ncurses in AppImage to 6.5. - Don't overwrite $TERMINFO in AppImage, set/append to $TERMINFO_DIRS instead (thanks to anonymous at Vifm Q2A site). - Fixed /usr/share/terminfo not being consulted when running from an AppImage (thanks to anonymous at Vifm Q2A site). Menus and dialogs: - Added command-line history to menu mode. - Added :gr[ep] and :fin[d] commands to menu mode. They allow (re)running the commands on the same set of files without leaving the mode. - Added inode number to File Info dialog. - Added handling of Enter/Escape keys to prompts and error dialogs (thanks to laur89, Alexandre Viau and multiple other users who asked about this). - List register's content listed in normal rather then reversed order in :registers/:display menu. - Display number of color pairs in use in :version/:vifm menu. - Constrained background error dialogs to appear only in normal mode when not much is going on. Macros: - Changed %N macro to not be mutually exclusive with most of other macros (the limitation wasn't documented and didn't make much sense) (thanks to James Dietrich). Scripting: - Added a statusbar message and a dialog to warn about an upcoming fix for strings in conditional expressions (e.g., `if $VAR` checks for `$VAR` being non empty instead of converting it to an integer) (thanks to justpretending2). - Changed behaviour on failure to evaluate an expression of :if or :elseif. Previously this resulted in trying to execute any commands until and including :endif (all branches taken). Now everything up to :endif will not be executed (no branches taken) (thanks to Ed Pavlov). - Changed filetype() to accept path in its first parameter. This means that passing it something like "15abc" will no longer be interpreted as 15 (thanks to MikeLemon). - Added escape() builtin function to escape specific characters in strings (thanks to The Cyberduck). - Added selected() builtin function which returns number of currently selected files. - Added global variables (with "g:" prefix) to avoid using environment variables in their place as a workaround. - Added v:version builtin variable that exposes version as an integer which can be meaningfully compared (thanks to an anonymous at Vifm Q2A site). Performance: - Slightly improved performance of comparing files by content. - Fixed performance degradation after preview consumes lots of color pairs. Documentation: - Clarified documentation on column literals and escaping (thanks to chelovechishko). - Made documentation of 'vifminfo' more readable. - Rewrote "Menus and dialogs" section. - Document how the use of different preview macros affects classification of a previewer (thanks to iambumblehead). - Slightly expanded documentation on %N macro (thanks to James Dietrich). - Somewhat improved documentation on functional keys. - Fixed documentation on yy, Y, dd and DD not mentioning how "s" flag of 'cpoptions' affects their behaviour (thanks to James Dietrich). - Fixed outdated documentation on the behaviour of n/N when 'hlsearch' is enabled since the introduction of highlighting of search matches (thanks to James Dietrich). TUI (Text User Interface): - When processing multiple files in background, show current position in the list on the job bar. - Shorten home directory in paths shown on the job bar. - Provide numerical value of a color as a description of a completion item for it. - Don't attempt clearing graphics when menu-like mode is active. The graphics should have been hidden on entering the mode. - Allowed wild menu popup to take up up to 40% of the screen. Only on Windows: - Upgraded to PDCurses 3.9 (was 3.8). Combined with some other changes this improves the situation with handling of CJK characters (thanks to zzx41375004, vodbyte, Jeremy Yuan and others). - Fixed `data/vifmrc` next to vifm.exe being used as global vifmrc file (thanks to midrare). - Fixed incorrectly determining whether a directory is writable (primarily C:\ could be reported as non-writable) (thanks to theorlangur and bitraid). - Fixed system() and term() not taking 'shell'/'shellcmdflag' into account (thanks to spence91). Color schemes: - Added WildBox highlight group. It can be used to set background of completion window. Noteworthy fixes: - Fixed graphics of view mode not being hidden on activating menu, more or file info modes. - Fixed graphics not being cleared on switching to single-pane view (thanks to ret2src). - Fixed a historical omission of Ctrl-G not being available in some prompts: file rename on conflict; owner, group and symbolic link target change (thanks to Branislav Gerazov). - Fixed display issues or a crash when using a terminal with more than 32768 color pairs (thanks to iboggs and itshog). - Fixed %a 'statusline' macro producing wrong values on non-Linux Unix-like systems (thanks to voh9eepah). - Fixed merging directories on copying not asking for overwrite confirmations (thanks to aleksejrs). - Fixed skipping of file move during merging aborting the whole operation (thanks to aleksejrs). - Fixed `:[un]select !` treating "" as an external command. - Fixed environment variables not being expanded on checking that a :file[x]type or :fileviewer command exists (thanks to Ben Elan). - Fixed weird sorting of filenames with non-Latin characters when 'sortnumbers' option is set and strverscmp() is not provided by the system (like on Windows). - Fixed :compare reporting identical files as changed when there were more than a couple of files with identical size and 4096-byte prefix. A regression in 0.13-beta (thanks to Alexandr Keyp, a.k.a. IAmKapuze). - Fixed :compare hanging on trying to compare non-regular files like pipes by contents. - Fixed :substitute, :tr, gu* and gU* detecting a non-existent target name conflict when rename in a custom view would produce an identically named files in different directories (thanks to aleksejrs). - Fixed :restart leaving histories disabled unless 'history' is set to a non-default value in vifmrc (thanks to James Dietrich). - Fixed processing of file names and paths that undergo escaping in the UI, like inability to externally rename them (regression in 0.12.1 beta) (thanks to jc-SpaceXp). - Fixed rules for handling of selection by :file[x]type not taking %"c/%"C/%"f/%"F macros into account (relevant mostly to Windows) (thanks to %smoothdad). - Fixed :elseif evaluating its expression even if an earlier conditional branch was already taken. - Fixed loading a session with global tabs when 'tabscope' is "pane" resulting in global tabs being invisible. - Fixed Ctrl-A and Ctrl-E in command-line mode not stopping completion or history search unlike other similar keys. - Fixed directories not being accounted for in estimates (thanks to justpretending2). - Fixed Escape being handled as Ctrl-C in prompts which suppresses future errors. - Fixed !! not affecting commands that include %s or %v macro (thanks to James Dietrich). - Fixed a crash after a memory corruption when running an external command via expansion of an environment variable when 'fastrun' is set (e.g., `!$EDITOR`) (thanks to Quaddroo). - Fixed abort on instance sending something over IPC to itself (thanks to Marcin Kurczewski, a.k.a. rr-). - Fixed `&&` operator which was acting as binary `&` (in terms of evaluation, the result was properly boolean) (thanks to justpretending2). Other changes: - Configure 'vifminfo' in sample vifmrc files to store most of the things in vifminfo by default (add missing histories and tabs) (thanks to Christoph Schmidpeter). - Commented out one of MC-like shortcuts in sample vifmrc files, Ctrl-U, to avoid confusing Vim users with default configuration (thanks to midrare). See change log for the full list of changes and by whom they were suggested or implemented. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 04 April 2023 ============= Vifm v0.13 ---------- Thanks to everyone who tried out the beta. Highlights: - Faster file-system navigation with a new searching/filtering submode. Hitting `` after `/` or `=` allows finding and opening consecutive path components without leaving command-line mode. In this mode keys like ``/``/``/``/``/etc. help to refine cursor position or go to parent directory if necessary. - More interactive :compare. You can now see stats about file comparison on the status bar and have an option to easily re-run the comparison while toggling visibility of some of the groups. Also, default file alignment is more natural now. `do` and `dp` handle selection. You can force ignoring or respecting case in paths. Performance and memory consumption have been improved in various cases. - Mouse support and TUI improvements. Once mouse support is enabled, you should be able to perform simple browsing with just your mouse for those cases when it's more convenient. Conflict dialog now always presents basic file metadata for comparison. Detailed progress dialog has ETA. Ls-like view can now have a fixed number of columns. - Other. Formatting of tabs and entry selection in Lua. Changing register's content via an editor. Explicitly prompting user for input via input() function. - Fixes. v0.12.1 was supposed to improve escaping on Windows, but it simultaneously made one old bug more prominent, effectively making things much worse in some cases. This release remedies that. %N macro has been adjusted to fix integration with image preview of Kitty v0.27+. Lots of fixes related to search and various combinations of 'hlsearch', 'incsearch' in different modes. Normal and visual modes: - made Ctrl-E/Ctrl-Y scroll transposed ls-like view horizontally by one column; - extended do and dp keys to process selection (thanks to Mark S., a.k.a. Markuzcha). :set command and options: - added 'mouse' option to control when mouse input is handled (not handled by default); - added 'navoptions' option to allow tweaking navigation mode a bit (thanks to filterfalse); - added 'tabline' option to specify format of the tab line; - added "columncount:" value to 'lsoptions' to always display fixed number of columns (thanks to Aleksandr Vysotskiy, a.k.a. loki1368); - added "rpreview:files" to 'milleroptions' (thanks to aksr). Command-line mode: - changed error reporting for some of the :commands such that now their failures cause a dialog to appear on sourcing, previously those errors were printed only to status bar; - changed implementation of `:compare grouppaths` to juxtapose only files with identical relative paths (patch by Alexandr Keyp, a.k.a. IAmKapuze); - added "withicase" and "withrcase" to :compare that force ignoring and respecting case respectively on comparing file names and paths (thanks to Jose Riha, a.k.a. jose1711); - added show* arguments to :compare command to control/switch which sets of files are displayed (toggling is done by :compare!) (patch by Alexandr Keyp, a.k.a. IAmKapuze); - added :amap, :anoremap and :aunmap commands to configure mappings in navigation mode (thanks to Henrik Holst, a.k.a. hholst80, and dmocek); - added :regedit command for external editing of register contents (thanks to Daniel J. Perry, a.k.a. BioBox; patch by Rostislav Tolushkin, a.k.a. nullptr-deref); - added Ctrl-Y key to command-line mode. It activates fast navigation that allows entering deep paths by a series of searches for individual path components (thanks to Henrik Holst, a.k.a. hholst80, and dmocek); - added Ctrl-J key to command-line navigation. It leaves the mode without opening a file/directory (thanks to filterfalse); - added Ctrl-O key to command-line navigation that goes to parent directory; - added Ctrl-N/P keys to command-line navigation to move view cursor up/down (thanks to Henrik Holst, a.k.a. hholst80, and dmocek); - added Arrows/Home/End/Page Up/Page Down keys to command-line navigation to move view cursor (thanks to Henrik Holst, a.k.a. hholst80, and dmocek). Core: - added printing stats while in :compare mode (patch by Alexandr Keyp, a.k.a. IAmKapuze); - don't move cursor on search failure during search with a count (patch by filterfalse); - specified a few more cases when to show a search message with search highlighting turned on: if found a match, if wrapping is turned on, and in visual mode (patch by filterfalse); - a regular search logic showing messages is applied to n/N (patch by filterfalse). File operations: - made aborting deletion abort the operation on the rest of files when deleting multiple files. Macros: - changed %N macro to also not start a process group for a command (thanks to Oskar Grunning, a.k.a. sQVe). Scripting: - added input() builtin function to prompt user for input (thanks to Artur F., a.k.a. arturfabriciohahaedgy); - added filereadable() builtin function mainly as a way to check file's presence. Menus and dialogs: - added r key to :jobs menu, which reloads the list of jobs (thanks to Sylwia Ptasinska, a.k.a. SylEleuth); - made feedback after pressing dd in :jobs more prominent (thanks to Sylwia Ptasinska, a.k.a. SylEleuth). TUI (Text User Interface): - added builtin handling of mouse events (thanks to ranousse, Sergei Shilovsky and user451421541757324; patch by 高浩亮, a.k.a. haolian9); - added ETA to detailed progress dialog (thanks to Jose Riha, a.k.a. jose1711); - apply file highlighting to "ext" and "fileext" view columns (thanks to aleksejrs); - merged file conflict comparison dialog into the main conflict dialog (thanks to aleksejrs); - made file conflict more concise (thanks to aleksejrs). Color schemes: - added additional User10..User20 highlight groups and corresponding %10*-%20* macros (thanks to Sylwia Ptasinska, a.k.a. SylEleuth); - update Default-256 to differentiate between more file types (thanks to aleksejrs). Invocation: - added `--plugins-dir` command-line option which allows specifying additional places to look for plugins (thanks to 高浩亮, a.k.a. haolian9). Performance: - reduced amount of memory consumed by `:compare groupids`; - made `:compare bycontents` not bother reading content of files which have unique size. Documentation: - provide basic instructions in the documentation on how mappings work (thanks to dmocek); - fixed description of %i macro in the documentation to mention that it runs command in background. Packaging: - changed use of `$(filter-out)` in src/Makefile.am to `$(var:from=to)` substitution to get rid of a warning on configuration; - changed how pthread support is detected by configure script to handle more cases (thanks to Markus Elfring, a.k.a. elfring); - changed configure script to fail if neither perl nor vim is available instead of failing to generate tags for Vim-style documentation (thanks to Sergei Trofimovich, a.k.a. trofi); - install icons also to ${prefix}/share/icons. It's not clear that using ${prefix}/share/pixmaps will always be handled properly (thanks to Szilárd Andai). Integration: - made instances running inside AppImage consider contents of `/etc/vifm` (thanks to aleksejrs); - fixed $VIFM_APPDIR_ROOT being ignored by :help command, which made it not work properly from AppImage (thanks to infinitewhileloop). Only on Windows: - fixed escaping of file paths when using 'vicmd' or 'vixcmd' to open a file on Windows (thanks to Phil Runninger). Noteworthy fixes: - fixed abort due to assertion failure on using zx normal mode key after leaving tree in some cases (thanks to Mark S., a.k.a. Markuzcha); - fixed asynchronous previewing of symbolic links, which required manual redraw (thanks to Alexandre Viau); - fixed FUSE mounting assuming `2>` redirection is supported by the shell, which isn't true at least for csh and tcsh (thanks to Evgeniy, a.k.a. iron-udjin); - fixed dialogs not handling non-latin characters well; - fixed :locate never escaping its arguments (should be done unless the first one starts with a dash). This is a regression in 0.7.6; - fixed n/N not moving the cursor without prior search (patch by filterfalse); - fixed resetting 'hlsearch' during incremental search in visual mode (patch by filterfalse); - fixed dropping selected files on empty input during incremental search in visual mode when 'hlsearch' is set (patch by filterfalse); - fixed segfault on trying to use a pipe from Lua after its parent VifmJob object was garbage-collected (thanks to PRESFIL); - fixed 'previewprg' not being respected on switching to view mode (regression in 0.12-beta) (thanks to Sitaram Chamarty). See change log for the full list of changes and by whom they were suggested or implemented. 17 March 2023 ============= Vifm v0.13 beta --------------- The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Highlights: - Faster file-system navigation with a new searching/filtering submode. Hitting `` after `/` or `=` allows finding and opening consecutive path components without leaving command-line mode. In this mode keys like ``/``/``/``/``/etc. help to refine cursor position or go to parent directory if necessary. - More interactive :compare. You can now see stats about file comparison on the status bar and have an option to easily re-run the comparison while toggling visibility of some of the groups. Also, default file alignment is more natural now. `do` and `dp` handle selection. You can force ignoring or respecting case in paths. Performance and memory consumption have been improved in various cases. - Mouse support and TUI improvements. Once mouse support is enabled, you should be able to perform simple browsing with just your mouse for those cases when it's more convenient. Conflict dialog now always presents basic file metadata for comparison. Detailed progress dialog has ETA. Ls-like view can now have a fixed number of columns. - Other. Formatting of tabs in Lua. Changing register's content via an editor. Explicitly prompting user for input via input() function. - Fixes. v0.12.1 was supposed to improve escaping on Windows, but it simultaneously made one old bug more prominent, effectively making things much worse in some cases. This release remedies that. %N macro has been adjusted to fix integration with image preview of Kitty v0.27+. Lots of fixes related to search and various combinations of 'hlsearch', 'incsearch' in different modes. Normal and visual modes: - made Ctrl-E/Ctrl-Y scroll transposed ls-like view horizontally by one column; - extended do and dp keys to process selection (thanks to Mark S., a.k.a. Markuzcha). :set command and options: - added 'mouse' option to control when mouse input is handled (not handled by default); - added 'navoptions' option to allow tweaking navigation mode a bit (thanks to filterfalse); - added 'tabline' option to specify format of the tab line; - added "columncount:" value to 'lsoptions' to always display fixed number of columns (thanks to Aleksandr Vysotskiy, a.k.a. loki1368); - added "rpreview:files" to 'milleroptions' (thanks to aksr). Command-line mode: - changed error reporting for some of the :commands such that now their failures cause a dialog to appear on sourcing, previously those errors were printed only to status bar; - changed implementation of `:compare grouppaths` to juxtapose only files with identical relative paths (patch by Alexandr Keyp, a.k.a. IAmKapuze); - added "withicase" and "withrcase" to :compare that force ignoring and respecting case respectively on comparing file names and paths (thanks to Jose Riha, a.k.a. jose1711); - added show* arguments to :compare command to control/switch which sets of files are displayed (toggling is done by :compare!) (patch by Alexandr Keyp, a.k.a. IAmKapuze); - added :amap, :anoremap and :aunmap commands to configure mappings in navigation mode (thanks to Henrik Holst, a.k.a. hholst80, and dmocek); - added :regedit command for external editing of register contents (thanks to Daniel J. Perry, a.k.a. BioBox; patch by Rostislav Tolushkin, a.k.a. nullptr-deref); - added Ctrl-Y key to command-line mode. It activates fast navigation that allows entering deep paths by a series of searches for individual path components (thanks to Henrik Holst, a.k.a. hholst80, and dmocek); - added Ctrl-J key to command-line navigation. It leaves the mode without opening a file/directory (thanks to filterfalse); - added Ctrl-O key to command-line navigation that goes to parent directory; - added Ctrl-N/P keys to command-line navigation to move view cursor up/down (thanks to Henrik Holst, a.k.a. hholst80, and dmocek); - added Arrows/Home/End/Page Up/Page Down keys to command-line navigation to move view cursor (thanks to Henrik Holst, a.k.a. hholst80, and dmocek). Core: - added printing stats while in :compare mode (patch by Alexandr Keyp, a.k.a. IAmKapuze); - don't move cursor on search failure during search with a count (patch by filterfalse); - specified a few more cases when to show a search message with search highlighting turned on: if found a match, if wrapping is turned on, and in visual mode (patch by filterfalse); - a regular search logic showing messages is applied to n/N (patch by filterfalse). File operations: - made aborting deletion abort the operation on the rest of files when deleting multiple files. Macros: - changed %N macro to also not start a process group for a command (thanks to Oskar Grunning, a.k.a. sQVe). Scripting: - added input() builtin function to prompt user for input (thanks to Artur F., a.k.a. arturfabriciohahaedgy); - added filereadable() builtin function mainly as a way to check file's presence. Menus and dialogs: - added r key to :jobs menu, which reloads the list of jobs (thanks to Sylwia Ptasinska, a.k.a. SylEleuth); - made feedback after pressing dd in :jobs more prominent (thanks to Sylwia Ptasinska, a.k.a. SylEleuth). TUI (Text User Interface): - added builtin handling of mouse events (thanks to ranousse, Sergei Shilovsky and user451421541757324; patch by 高浩亮, a.k.a. haolian9); - added ETA to detailed progress dialog (thanks to Jose Riha, a.k.a. jose1711); - apply file highlighting to "ext" and "fileext" view columns (thanks to aleksejrs); - merged file conflict comparison dialog into the main conflict dialog (thanks to aleksejrs); - made file conflict more concise (thanks to aleksejrs). Color schemes: - added additional User10..User20 highlight groups and corresponding %10*-%20* macros (thanks to Sylwia Ptasinska, a.k.a. SylEleuth); - update Default-256 to differentiate between more file types (thanks to aleksejrs). Invocation: - added `--plugins-dir` command-line option which allows specifying additional places to look for plugins (thanks to 高浩亮, a.k.a. haolian9). Performance: - reduced amount of memory consumed by `:compare groupids`; - made `:compare bycontents` not bother reading content of files which have unique size. Documentation: - provide basic instructions in the documentation on how mappings work (thanks to dmocek); - fixed description of %i macro in the documentation to mention that it runs command in background. Packaging: - changed use of `$(filter-out)` in src/Makefile.am to `$(var:from=to)` substitution to get rid of a warning on configuration; - changed how pthread support is detected by configure script to handle more cases (thanks to Markus Elfring, a.k.a. elfring); - changed configure script to fail if neither perl nor vim is available instead of failing to generate tags for Vim-style documentation (thanks to Sergei Trofimovich, a.k.a. trofi); - install icons also to ${prefix}/share/icons. It's not clear that using ${prefix}/share/pixmaps will always be handled properly (thanks to Szilárd Andai). Integration: - made instances running inside AppImage consider contents of `/etc/vifm` (thanks to aleksejrs); - fixed $VIFM_APPDIR_ROOT being ignored by :help command, which made it not work properly from AppImage (thanks to infinitewhileloop). Only on Windows: - fixed escaping of file paths when using 'vicmd' or 'vixcmd' to open a file on Windows (thanks to Phil Runninger). Noteworthy fixes: - fixed abort due to assertion failure on using zx normal mode key after leaving tree in some cases (thanks to Mark S., a.k.a. Markuzcha); - fixed asynchronous previewing of symbolic links, which required manual redraw (thanks to Alexandre Viau); - fixed FUSE mounting assuming `2>` redirection is supported by the shell, which isn't true at least for csh and tcsh (thanks to Evgeniy, a.k.a. iron-udjin); - fixed dialogs not handling non-latin characters well; - fixed :locate never escaping its arguments (should be done unless the first one starts with a dash). This is a regression in 0.7.6; - fixed n/N not moving the cursor without prior search (patch by filterfalse); - fixed resetting 'hlsearch' during incremental search in visual mode (patch by filterfalse); - fixed dropping selected files on empty input during incremental search in visual mode when 'hlsearch' is set (patch by filterfalse); - fixed segfault on trying to use a pipe from Lua after its parent VifmJob object was garbage-collected (thanks to PRESFIL); - fixed 'previewprg' not being respected on switching to view mode (regression in 0.12-beta) (thanks to Sitaram Chamarty). See change log for the full list of changes and by whom they were suggested or implemented. 21 September 2022 ================= Vifm v0.12.1 ------------ Thanks to everyone who tried out the beta. Changes overview: - Expression register for command-line prompts (Ctrl-R =). If you ever wanted to insert result of evaluating an expression into command-line, now you can. One of the most useful applications of this is pasting clipboard's contents without the risk of it being processed as user input (e.g., `:=system('xsel')`). - Selection handling improvements. New :keepsel command-prefix is meant to suppress clearing of selection done automatically after most of command-line commands thus avoiding the need for using `gs` command to restore it. As a common case, the behaviour for :view command has been changed to not drop selection. Restoring selection in a newly entered directory can now be done not just from a register populated ahead via yanking selection (`"rgs`), but just by executing `gs` to restore selection the directory had before it was left last time. Vifm remembers last 10 locations with non-empty selection. - An arbitrary editor can now be fully integrated via Lua. 'vicmd' and 'vixcmd' were always there, but commands specified in these options could receive Vim-specific arguments they don't expect. Writing a shell wrapper was an option, but it had to do guesswork while post-processing arguments meant for Vim, which is error prone. A Lua handler can now be used instead. It receives full context about editor invocation and can perfectly forward the request to an arbitrary editor. - TUI improvements. Escaping of unprintable characters, less of annoying flickering, slightly better File Info dialog. Conflict resolution dialog now provides a sub-dialog for comparing conflicting files and is also smarter at picking which actions to offer. - Lua API additions (still experimental). The API now gives some access to layout, tabs and keys. Unlike :*map commands, keys API allows defining custom selectors (like "2j" in "d2j"), keys that accept an argument (like "a" in "ma") and keys that accept selectors (custom or builtin). - Other. Bulk retargetting of links, optional implicit `:cd` on command line, macros that expand to non-empty selection, supporting more ``, completion for `fish` shell. - Fixes. Escaping of arguments and slashes in paths will now hopefully work better on Windows, which is generally an issue there. Yori shell is now also handled on Windows. New %N macro can be used to fix image preview in Kitty terminal. Core: - added expression pseudo-register (Ctrl-R =) for command-line mode (thanks to Marcos Cruz and Jiji from Vifm Q2A site); - added parsing of \c and \C sequences in regular expressions to force case ignoring or matching respectively (thanks to filterfalse and Safal Piya, a.k.a. mrsafalpiya). Configuration: - changed how location of trash directory is determined. Now starting `vifm --no-configs` won't mess anything up if you're using `~/.vifm`. Can potentially cause some trouble for existing configurations, but shouldn't. Command-line mode: - added :keepsel command. Changes default behaviour after running a :command to not reset selection of a view (thanks to dalvand and sharklasers996); - added -skip parameter to :copy/:move/:alink/:rlink. Makes the commands automatically skip files that exist at destination instead of refusing to proceed (thanks to Jose Riha, a.k.a. jose1711); - added handling of "-" in :session for switching to a previous session; - added ":history exprreg" menu for displaying history of expression register values; - do not reset selection on :view command (thanks to Alexandre Viau); - permit directories with trailing slashes supplied by external commands in `:[un]select !cmd` (patch by filterfalse). Normal and visual modes: - changed [c and ]c to also traverse added/missing entries (thanks to qsmodo); - added cl key visual mode (similar to its function in normal mode); - extended cl normal mode key to handle selection of multiple files (thanks to aleksejrs); - made gs normal mode key remember selection for up to 10 last entered directories (thanks to ratnamhof and Matthias Braun, a.k.a. mb720). :set command and options: - added 'autocd' option. Makes invalid :commands be interpreted as an implicit :cd command (thanks to Taras Halturin, a.k.a. halturin); - added %o macro to 'statusline', which expands to Unix permissions in octal form (and to nothing on Windows) (thanks to iSeeU816); - added "datasync" value to 'iooptions' option to configure whether writes on file copying when 'syscalls' is on are synchronized periodically (thanks to Andrew Savchenko and Afz); - added "ehistory" value to 'vifminfo' and 'sessionoptions' option. It manages storing of expression register history; - added optional border for horizontal split layout controlled by newly added "hborder" in 'fillchars' (patch by qsmodo); - added "maxtreedepth" value to 'previewoptions' option, which allows limiting depths of the displayed tree (thanks to Afz); - set 'title' option by default if $TERM is foot* as its terminfo entry might lack tsl and fsl attributes (thanks to nobodyatandnothing). Macros: - added %N macro that prevents detaching viewers from current session (thanks to emorozov); - added %pu macro that disables caching of viewer's output (thanks to b0x4it); - added %l/%"l and %L/%"L macros for the list of selected files. %f is not empty if there is no selection, which is not always desirable (thanks to ratnamhof). Angle bracket notation: - added angle-bracket notation for alpha keys with Alt and Shift modifiers (<[am]-s-[a-z]>, ) (thanks to Reece Petersen); - added angle-bracket notation for numeric keys with Alt modifier (<[am]-[0-9]>) (thanks to anonymous at Vifm Q2A site); - added angle-bracket notation for some shifted grey keys: , , , , , , , , , (patch by M Kelly). Scripting: - extended has() builtin function to check for Lua handlers; - don't expand() macros in environment variables (patch by filterfalse). Lua: - upgraded Lua from 5.4.3 to 5.4.4; - added sample plugin for using mpc; - added sample plugin for customizing editor; - added vifm.escape() function; - added vifm.run() function (similar to `:!`); - added vifm.sessions.current() function; - added vifm.keys.add() for adding mappings (can accept selectors or an argument like in `'a`) and selectors; - enable os.tmpname(); - exposed minimal API for tabs (includes layout). TUI (Text User Interface): - escape unreadable characters in menus, command-line mode, dialogs and statusbar messages (thanks to MadMaverick9); - hide graphics when displaying dialogs or entering menus, more or file info modes (thanks to heelsleeh and PRESFIL); - fixed multiple cases of cursor/UI flickering. Color schemes: - added CmpUnmatched and CmpBlank highlight groups (thanks to qsmodo). Menus and dialogs: - changed conflict dialog to offer "Merge all" option even for files if there are some directories left to process (thanks to dalvand); - added comparison action to conflict resolution dialog (thanks to anonymous at Vifm Q2A site and dalvand); - display permissions in octal form in File Info dialog and group them with owner/group info (thanks to iSeeU816); - reformat File Info dialog to be more compact (thanks to chelovechishko). Performance: - extended optimizations for globs to cover `something*` and `some*thing` cases. Vim-plugin: - added :PeditVifm command (and corresponding :PeditVim) to the plugin (thanks to Mukund Mauji, a.k.a. maujim). Only on Windows: - added initial support for Yori shell on Windows (not everything might work well at this point) (thanks to LinArcX); - fixed argument escaping issues for foreground programs on Windows (thanks to fohrums); - fixed auto-detection of GUI programs on Windows, which prevents Vifm from waiting on them to finish (thanks to Azin Sharaf); - fixed `start` in :file[x]type commands on Windows not being considered as present; - fixed slashes being doubled in macros like %"c on Windows with cmd.exe as a shell (thanks to Toby Hawkins, a.k.a. HawkinsT). Documentation: - documented that key might correspond to (thanks to dalvand). Noteworthy fixes: - fixed building when fdatasync() call isn't available (thanks to Schrijvers Luc, a.k.a. Begasus); - fixed severe performance degradation after measuring size of large directory trees; - fixed `:compare listunique` yielding different results depending on which view is active due to not processing bottom files in the current view in some situations; - fixed graphics not being cleared properly on switching between viewers in view mode; - fixed processing of extended keys on OpenBSD; - fixed :. file modifier incorrectly checking for one path being parent of another and producing weird results ("/pa" was considered parent of "/path", with "th" being the result) (thanks to Dennis Preiser, a.k.a. 0xDP); - fixed --remote and --remote-expr failing if $TERM isn't valid (regression in 0.11-beta) (thanks to b0x4it); - fixed directory preview resetting after detaching from it (thanks to Luka Markušić, a.k.a. mark2185). See change log for the full list of changes and by whom they were suggested or implemented. September 05, 2022 ================== Vifm v0.12.1 beta ----------------- The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Changes overview: - Expression register for command-line prompts (Ctrl-R =). If you ever wanted to insert result of evaluating an expression into command-line, now you can. One of the most useful applications of this is pasting clipboard's contents without the risk of it being processed as user input (e.g., `:=system('xsel')`). - Selection handling improvements. New :keepsel command-prefix is meant to suppress clearing of selection done automatically after most of command-line commands thus avoiding the need for using `gs` command to restore it. As a common case, the behaviour for :view command has been changed to not drop selection. Restoring selection in a newly entered directory can now be done not just from a register populated ahead via yanking selection (`"rgs`), but just by executing `gs` to restore selection the directory had before it was left last time. Vifm remembers last 10 locations with non-empty selection. - An arbitrary editor can now be fully integrated via Lua. 'vicmd' and 'vixcmd' were always there, but commands specified in these options could receive Vim-specific arguments they don't expect. Writing a shell wrapper was an option, but it had to do guesswork while post-processing arguments meant for Vim, which is error prone. A Lua handler can now be used instead. It receives full context about editor invocation and can perfectly forward the request to an arbitrary editor. - TUI improvements. Escaping of unprintable characters, less of annoying flickering, slightly better File Info dialog. Conflict resolution dialog now provides a sub-dialog for comparing conflicting files and is also smarter at picking which actions to offer. - Lua API additions (still experimental). The API now gives some access to layout, tabs and keys. Unlike :*map commands, keys API allows defining custom selectors (like "2j" in "d2j"), keys that accept an argument (like "a" in "ma") and keys that accept selectors (custom or builtin). - Other. Bulk retargetting of links, optional implicit `:cd` on command line, macros that expand to non-empty selection, supporting more ``. - Fixes. Escaping of arguments and slashes in paths will now hopefully work better on Windows, which is generally an issue there. Yori shell is now also handled on Windows. New %N macro can be used to fix image preview in Kitty terminal. Core: - added expression pseudo-register (Ctrl-R =) for command-line mode (thanks to Marcos Cruz and Jiji from Vifm Q2A site); - added parsing of \c and \C sequences in regular expressions to force case ignoring or matching respectively (thanks to filterfalse and Safal Piya, a.k.a. mrsafalpiya). Configuration: - changed how location of trash directory is determined. Now starting `vifm --no-configs` won't mess anything up if you're using `~/.vifm`. Can potentially cause some trouble for existing configurations, but shouldn't. Command-line mode: - added :keepsel command. Changes default behaviour after running a :command to not reset selection of a view (thanks to dalvand and sharklasers996); - added -skip parameter to :copy/:move/:alink/:rlink. Makes the commands automatically skip files that exist at destination instead of refusing to proceed (thanks to Jose Riha, a.k.a. jose1711); - added handling of "-" in :session for switching to a previous session; - added ":history exprreg" menu for displaying history of expression register values; - do not reset selection on :view command (thanks to Alexandre Viau). Normal and visual modes: - changed [c and ]c to also traverse added/missing entries (thanks to qsmodo); - added cl key visual mode (similar to its function in normal mode); - extended cl normal mode key to handle selection of multiple files (thanks to aleksejrs); - made gs normal mode key remember selection for up to 10 last entered directories (thanks to ratnamhof and Matthias Braun, a.k.a. mb720). :set command and options: - added 'autocd' option. Makes invalid :commands be interpreted as an implicit :cd command (thanks to Taras Halturin, a.k.a. halturin); - added %o macro to 'statusline', which expands to Unix permissions in octal form (and to nothing on Windows) (thanks to iSeeU816); - added "datasync" value to 'iooptions' option to configure whether writes on file copying when 'syscalls' is on are synchronized periodically (thanks to Andrew Savchenko and Afz); - added "ehistory" value to 'vifminfo' and 'sessionoptions' option. It manages storing of expression register history; - added optional border for horizontal split layout controlled by newly added "hborder" in 'fillchars' (patch by qsmodo); - added "maxtreedepth" value to 'previewoptions' option, which allows limiting depths of the displayed tree (thanks to Afz); - set 'title' option by default if $TERM is foot* as its terminfo entry might lack tsl and fsl attributes (thanks to nobodyatandnothing). Macros: - added %N macro that prevents detaching viewers from current session (thanks to emorozov); - added %pu macro that disables caching of viewer's output (thanks to b0x4it); - added %l/%"l and %L/%"L macros for the list of selected files. %f is not empty if there is no selection, which is not always desirable (thanks to ratnamhof). Angle bracket notation: - added angle-bracket notation for alpha keys with Alt and Shift modifiers (<[am]-s-[a-z]>, ) (thanks to Reece Petersen); - added angle-bracket notation for numeric keys with Alt modifier (<[am]-[0-9]>) (thanks to anonymous at Vifm Q2A site); - added angle-bracket notation for some shifted grey keys: , , , , , , , , , (patch by M Kelly). Scripting: - extended has() builtin function to check for Lua handlers; - don't expand() macros in environment variables (patch by filterfalse). Lua: - upgraded Lua from 5.4.3 to 5.4.4; - added sample plugin for using mpc; - added sample plugin for customizing editor; - added vifm.escape() function; - added vifm.run() function (similar to `:!`); - added vifm.sessions.current() function; - added vifm.keys.add() for adding mappings (can accept selectors or an argument like in `'a`) and selectors; - enable os.tmpname(); - exposed minimal API for tabs (includes layout). TUI (Text User Interface): - escape unreadable characters in menus, command-line mode, dialogs and statusbar messages (thanks to MadMaverick9); - hide graphics when displaying dialogs or entering menus, more or file info modes (thanks to heelsleeh and PRESFIL); - fixed multiple cases of cursor/UI flickering. Color schemes: - added CmpUnmatched and CmpBlank highlight groups (thanks to qsmodo). Menus and dialogs: - changed conflict dialog to offer "Merge all" option even for files if there are some directories left to process (thanks to dalvand); - added comparison action to conflict resolution dialog (thanks to anonymous at Vifm Q2A site and dalvand); - display permissions in octal form in File Info dialog and group them with owner/group info (thanks to iSeeU816); - reformat File Info dialog to be more compact (thanks to chelovechishko). Performance: - extended optimizations for globs to cover `something*` and `some*thing` cases. Vim-plugin: - added :PeditVifm command (and corresponding :PeditVim) to the plugin (thanks to Mukund Mauji, a.k.a. maujim). Only on Windows: - added initial support for Yori shell on Windows (not everything might work well at this point) (thanks to LinArcX); - fixed argument escaping issues for foreground programs on Windows (thanks to fohrums); - fixed auto-detection of GUI programs on Windows, which prevents Vifm from waiting on them to finish (thanks to Azin Sharaf); - fixed `start` in :file[x]type commands on Windows not being considered as present; - fixed slashes being doubled in macros like %"c on Windows with cmd.exe as a shell (thanks to Toby Hawkins, a.k.a. HawkinsT). Documentation: - documented that key might correspond to (thanks to dalvand). Noteworthy fixes: - fixed building when fdatasync() call isn't available (thanks to Schrijvers Luc, a.k.a. Begasus); - fixed severe performance degradation after measuring size of large directory trees; - fixed `:compare listunique` yielding different results depending on which view is active due to not processing bottom files in the current view in some situations; - fixed graphics not being cleared properly on switching between viewers in view mode; - fixed processing of extended keys on OpenBSD; - fixed :. file modifier incorrectly checking for one path being parent of another and producing weird results ("/pa" was considered parent of "/path", with "th" being the result) (thanks to Dennis Preiser, a.k.a. 0xDP); - fixed --remote and --remote-expr failing if $TERM isn't valid (regression in 0.11-beta) (thanks to b0x4it); - fixed directory preview resetting after detaching from it (thanks to Luka Markušić, a.k.a. mark2185). See change log for the full list of changes and by whom they were suggested or implemented. September 29, 2021 ================== Vifm v0.12 ---------- New version makes textual preview asynchronous, provides support for 24-bit colors, improves tree-view and introduces experimental Lua plugins support. Thanks to everyone who tried out the beta. Main changes: - color schemes and preview now support 24-bit colors; - depth of tree-view can now be limited and directories in it can be folded; - textual preview of files is now done asynchronously; - list of files can now be directly piped to programs via new macros; - external editing now asks for a re-edit after a failure; - status line can now take up several lines; - new keys for controlling viewer while in view mode; - view column separators; - Vifm has received a more advanced, but currently experimental, extension interface in a form of Lua plugins; - new logo. More detailed list of changes. Core: - added experimental Lua plugins support; - added interactive re-editing of file names in external editor. Format now supports comments for displaying last error and original file names (thanks to Jose Riha, a.k.a. jose1711 and Diogo Lemos (a.k.a. dmlemos)); - started using quickview's cache in view mode; - extended cache of viewer's output to contain multiple entries (initial version of the cache was added to skip redrawing graphics); - run background programs detached from a terminal (thanks to Miguel Madrid Mencía, a.k.a. mimame). File operations: - added periodic forced flushing of data on copying data when 'syscalls' is set (thanks to Matthias Braun, a.k.a. mb720). Invocation: - don't list inaccessible instances on --server-list. Important fixes: - fixed losing files as a result of executing ":copy! &" or ":move! &" when both panes show the same directory (thanks to Hans Bieshaar); - fixed copying of executable files not working on FreeBSD (thanks to makijato); - fixed inability to map escape sequences due to extended keys in terminfo database (patch by M Kelly); - fixed hang on using previewer that takes over control over the terminal (like 7z does to read password) (thanks to PRESFIL); - fixed vifm-convert-dircolors dropping copies of entries that differ only by case (thanks to flux242). Normal and visual modes: - added zx normal mode key to fold/unfold directories in tree views. The implementation is not optimal at this moment though (thanks to filterfalse, Ben Lu, a.k.a. ayroblu, RR0925 and Alexandre Viau). Key bindings: - added a and A view mode keys that switch to next and previous viewer of current file correspondingly (thanks to j-xella); - added i view mode key that toggles raw mode (ignoring of defined viewers) (thanks to j-xella). Command-line mode: - added :plugins command that opens plugins menu; - added :plugin command that manages plugins; - added :st[op] command what behaves like Ctrl-Z. It's to be used in mappings (thanks to GummyGun); - added "depth=N" parameter to the :tree command (thanks to filterfalse); - added "combine" pseudo-attribute to "cterm" parameter of :highlight command. It changes behaviour from overwriting attributes of a parent highlight group (within their hierarchy) to appending to it (thanks to Andrew Savchenko); - added "gui", "guifg" and "guibg" parameters to :highlight command; - added network mount and `subst` targets to :volumes menu (patch by Phil Runninger); - made :compare obey file name filters (patch by qsmodo); - allow user-defined commands to include numbers in their names (thanks to anonymous at Vifm Q2A site). :set command and options: - added %P macro to 'rulerformat' (and thus to 'statusline'), which expands to All, Top, xx% or Bot to indicate position within the view (thanks to iSeeU816); - added 'previewoptions' option to allow tweaking graphics preview a bit (thanks to Joshua Jensch, a.k.a., patroclos and flux242); - added "toptreestats" value to 'previewoptions' option, which makes stats appear before the tree (patch by qsmodo); - added literal values to 'viewcolumns' option (thanks to Jose Riha, a.k.a. jose1711, chelovechishko, DieSpinne and rwtallant13); - added %N macro to 'statusline' option, which adds a line break and increases height of the status line (thanks to Jose Riha, a.k.a. jose1711, qsmodo and jcarreja); - added "l" and "r" flags to the 'tuioptions' option. It controls truncation of view titles (patch by qsmodo); - added %c 'statusline' macro that displays size of current file-system (thanks to Jose Riha, a.k.a. jose1711). Macros: - added %Pl and %Pz macros for redirecting list of files to standard input of commands (thanks to PRESFIL); - added %v macro for vertical splitting in terminal multiplexers (patch by qsmodo). File preview: - allow exploring empty files or output of viewers (thanks to Andrew Savchenko); - implemented asynchronous previewing for textual and pass-through (think sixel) viewers (thanks to StillSteal, laur89, Joshua Jensch, a.k.a. patroclos and p-kolacz); - detect broken links on preview and report them as such. Color schemes: - changed semantics of light* color groups to add bold attribute only for terminals with less than 16 colors. Aligns the behaviour with Vim. Affects you only if you relied on that implicit bold attribute (thanks to Jose Riha, a.k.a. jose1711). Menus and dialogs: - added shortcuts for toggling flags in permissions dialog on *nix (patch by qsmodo); - added some additional information about instance to the :version/:vifm menu; - made contents of map menus easier to comprehend by adding captions; - include shortcut prefix in title of map menus; - always display UID/GID in numeric form in File Info dialog (in parenthesis if the id was resolved to a string). TUI (Text User Interface): - added support for direct/"true"/24-bit colors for ncurses 6.0 or later (thanks to Anton Kochkov, a.k.a. XVilka and IvanBarsukov); - added progress indication to the ruler of the view mode (corresponds to new %P macro of 'rulerformat') (thanks to iSeeU816). Documentation: - document how %i macro affects background jobs. Only on Windows: - fixed :goto not working with backslashes (thanks to Grueslayer); - fixed processing of keypad keys (thanks to Roland); - fixed :empty leaving empty directories (thanks to Grueslayer). Packaging: - made it possible to build AppImage for Vifm (patch by michaellee8); - fixed running tests as root user (thanks to Michka Popoff, a.k.a. iMichka); - fixed an issue with packaging on one system (Linux in this case) and building on the other (OS X) (thanks to chenrui333). Vim-plugin: - made :VifmCs of the plugin handle 24-bit colors. Other changes: - updated logo of the project (thanks to Hescalalu for making it). See change log for the full list of changes and by whom they were suggested or implemented. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ September 15, 2021 ================== Vifm v0.12 beta --------------- New version makes textual preview asynchronous, provides support for 24-bit colors, improves tree-view and introduces experimental Lua plugins support. The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Main changes: - color schemes and preview now support 24-bit colors; - depth of tree-view can now be limited and directories in it can be folded; - textual preview of files is now done asynchronously; - list of files can now be directly piped to programs via new macros; - external editing now asks for a re-edit after a failure; - status line can now take up several lines; - Vifm has received a more advanced, but currently experimental, extension interface in a form of Lua plugins. More detailed list of changes. Core: - added experimental Lua plugins support; - added interactive re-editing of file names in external editor. Format now supports comments for displaying last error and original file names (thanks to Jose Riha, a.k.a. jose1711 and Diogo Lemos (a.k.a. dmlemos)); - started using quickview's cache in view mode; - extended cache of viewer's output to contain multiple entries (initial version of the cache was added to skip redrawing graphics); - run background programs detached from a terminal (thanks to Miguel Madrid Mencía, a.k.a. mimame). File operations: - added periodic forced flushing of data on copying data when 'syscalls' is set (thanks to Matthias Braun, a.k.a. mb720). Invocation: - don't list inaccessible instances on --server-list. Important fixes: - fixed losing files as a result of executing ":copy! &" or ":move! &" when both panes show the same directory (thanks to Hans Bieshaar); - fixed copying of executable files not working on FreeBSD (thanks to makijato); - fixed inability to map escape sequences due to extended keys in terminfo database (patch by M Kelly); - fixed hang on using previewer that takes over control over the terminal (like 7z does to read password) (thanks to PRESFIL); - fixed vifm-convert-dircolors dropping copies of entries that differ only by case (thanks to flux242). Normal and visual modes: - added zx normal mode key to fold/unfold directories in tree views. The implementation is not optimal at this moment though (thanks to filterfalse, Ben Lu, a.k.a. ayroblu, RR0925 and Alexandre Viau). Key bindings: - added a and A view mode keys that switch to next and previous viewer of current file correspondingly (thanks to j-xella); - added i view mode key that toggles raw mode (ignoring of defined viewers) (thanks to j-xella). Command-line mode: - added :plugins command that opens plugins menu; - added :plugin command that manages plugins; - added :st[op] command what behaves like Ctrl-Z. It's to be used in mappings (thanks to GummyGun); - added "depth=N" parameter to the :tree command (thanks to filterfalse); - added "combine" pseudo-attribute to "cterm" parameter of :highlight command. It changes behaviour from overwriting attributes of a parent highlight group (within their hierarchy) to appending to it (thanks to Andrew Savchenko); - added "gui", "guifg" and "guibg" parameters to :highlight command; - added network mount and `subst` targets to :volumes menu (patch by Phil Runninger); - made :compare obey file name filters (patch by qsmodo); - allow user-defined commands to include numbers in their names (thanks to anonymous at Vifm Q2A site). :set command and options: - added %P macro to 'rulerformat' (and thus to 'statusline'), which expands to All, Top, xx% or Bot to indicate position within the view (thanks to iSeeU816); - added 'previewoptions' option to allow tweaking graphics preview a bit (thanks to Joshua Jensch, a.k.a., patroclos and flux242); - added "toptreestats" value to 'previewoptions' option, which makes stats appear before the tree (patch by qsmodo); - added literal values to 'viewcolumns' option (thanks to Jose Riha, a.k.a. jose1711, chelovechishko, DieSpinne and rwtallant13); - added %N macro to 'statusline' option, which adds a line break and increases height of the status line (thanks to Jose Riha, a.k.a. jose1711, qsmodo and jcarreja); - added "l" and "r" flags to the 'tuioptions' option. It controls truncation of view titles (patch by qsmodo); - added %c 'statusline' macro that displays size of current file-system (thanks to Jose Riha, a.k.a. jose1711). Macros: - added %Pl and %Pz macros for redirecting list of files to standard input of commands (thanks to PRESFIL); - added %v macro for vertical splitting in terminal multiplexers (patch by qsmodo). File preview: - allow exploring empty files or output of viewers (thanks to Andrew Savchenko); - implemented asynchronous previewing for textual and pass-through (think sixel) viewers (thanks to StillSteal, laur89, Joshua Jensch, a.k.a. patroclos and p-kolacz); - detect broken links on preview and report them as such. Color schemes: - changed semantics of light* color groups to add bold attribute only for terminals with less than 16 colors. Aligns the behaviour with Vim. Affects you only if you relied on that implicit bold attribute (thanks to Jose Riha, a.k.a. jose1711). Menus and dialogs: - added shortcuts for toggling flags in permissions dialog on *nix (patch by qsmodo); - added some additional information about instance to the :version/:vifm menu; - made contents of map menus easier to comprehend by adding captions; - include shortcut prefix in title of map menus; - always display UID/GID in numeric form in File Info dialog (in parenthesis if the id was resolved to a string). TUI (Text User Interface): - added support for direct/"true"/24-bit colors for ncurses 6.0 or later (thanks to Anton Kochkov, a.k.a. XVilka and IvanBarsukov); - added progress indication to the ruler of the view mode (corresponds to new %P macro of 'rulerformat') (thanks to iSeeU816). Documentation: - document how %i macro affects background jobs. Only on Windows: - fixed :goto not working with backslashes (thanks to Grueslayer); - fixed processing of keypad keys (thanks to Roland); - fixed :empty leaving empty directories (thanks to Grueslayer). Packaging: - made it possible to build AppImage for Vifm (patch by michaellee8); - fixed running tests as root user (thanks to Michka Popoff, a.k.a. iMichka); - fixed an issue with packaging on one system (Linux in this case) and building on the other (OS X) (thanks to chenrui333). Vim-plugin: - made :VifmCs of the plugin fail when 'termguicolors' produces a 24-bit color value (thanks to AtomToast). Other changes: - updated logo of the project (thanks to Hescalalu for making it). See change log for the full list of changes and by whom they were suggested or implemented. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ September 24, 2020 ================== Vifm v0.11 ---------- New version finally updates format of vifminfo file unblocking changes like persistent tabs, sessions and timestamp-based merging of histories. In addition to that there were a number of improvements in user interface and multiple performance-related improvements. Thanks to everyone who tried out the beta. Main changes: - added persistent tabs; - added sessions; - new format of vifminfo file (old version is imported on first run); - smarter merging of histories between runs that avoids dropping of new entries; - version of default color scheme for 256-color terminals; - make tab labels customizable; - try to keep ratio of pane sizes constant on resizes, restarts and tab switching; - various performance improvements. More detailed list of changes. Normal and visual modes: - added gF normal mode key which acts like gf, but goes all the way to the ultimate target of the chain of symbolic links (thanks to Alexandre Viau); - improve navigation on gf key. Do fewer refreshes and disable filters to make target visible. Core: - more sensible merging of histories from multiple instances in vifminfo file (avoids dropping of new entries); - invalidate cached directory information (size or number of files) on inode change (thanks to Jose Riha, a.k.a. jose1711); - invalidate cached directory size when using it to compute size of some parent directory; - improve cursor positioning after file operations; - made it possible to escape commas in patterns (as usual, by doubling) (thanks to filterfalse). Command-line mode: - added :tabo[nly] command that closes all tabs but the current one; - added :session and :delsession commands to manage sessions (thanks to Marcos Cruz); - added optional "full" parameter for the :restart command, which makes it discard essentially all context. This is useful with persistent tabs (thanks to Yusuf Aktepe); - don't reset histories of views in inactive tabs on :restart; - improve differentiation between association and list forms of :colorscheme command on startup. This is important if list contains name of color scheme that doesn't exist. :set command and options: - added "tabs" value to 'vifminfo' option. It enables persistent tabs (thanks to Cosmin Popescu, a.k.a. cosminadrianpopescu, filterfalse and Neil Griffin, a.k.a. ngriffin7a); - added "v" flag to the 'tuioptions' option. It controls whether width of middle border is adjusted to equalize view sizes (thanks to Matthias Braun, a.k.a. mb720); - added 'sessionoptions' option, which is an alternative to 'vifminfo' for session files; - added 'tablabel' option that specifies format of a single tab's label when non-empty (thanks to aleksejrs); - added 'tabprefix' and 'tabsuffix' options that allow customizing tabline separators (thanks to CoreCube); - added "treeleafsparent" value to 'dotdirs' option (thanks to filterfalse and Melandel); - do not require "dhistory" to be present in 'vifminfo' for "savedirs" to work. Menus and dialogs: - added rate and progress bar to progress dialog (patch by Alborz Jafari); - added real (fully resolved) path to the File Info dialog (thanks to Alexandre Viau); - added number of hard links to the File Info dialog; - abort menu, more or file information modes before processing remote commands (thanks to kangshugang); - deduplicate elements of the :file menu; - make displaying of spaces in mappings more intelligent by using at the start or end of lhs or rhs. File preview: - improve handling of long or unknown escape sequences in previews (thanks to bratekarate); - use global color scheme for preview on the other pane ignoring its directory-specific color scheme; - invalidate textual quickview cache if it contains fewer lines than window height and is incomplete. TUI (Text User Interface): - try harder to preserve position of the splitter. Avoid its drift on terminal resizes and preserve ratio of windows on startup and tab switches (thanks to Shakil Akhtar); - prevent internally selected files (e.g., via a range of a :command) from appearing selected in user interface (thanks to filterfalse); - reduce width of top line when side borders are hidden (`set tuioptions-=s`) (thanks to Svyatoslav Mishyn, a.k.a. juef); - escape some characters as ^X in view and tab titles, custom menu titles, on status line and in terminal title (thanks to filterfalse); - use the same label for :grep and :find custom lists as the one used for :grep and :find menus (thanks to filterfalse); - use unexpanded command for title of custom file lists produced using %u or %U macros and menus produced using %m or %M macros (thanks to filterfalse); - use name of user-defined command in titles of custom views and menus (thanks to filterfalse); - preserve more information in the title on turning custom view into tree using :tree (thanks to filterfalse); - limit length of custom file list title to 80 character positions (thanks to filterfalse). Integration: - detect being run under Wayland (relevant for :filextype commands) (thanks to mhdzli); - make 'title' option work in all terminals which contain "tsl" and "fsl" capabilities (thanks to m-kru); - update terminal title when in menus (thanks to filterfalse). Color schemes: - added HardLink highlight group for regular files with more than one hard link (patch by Hans Bieshaar); - added LineNr highlight group for highlighting line number column of views (thanks to Anton Gepting); - added OddLine highlight group for highlighting every second entry line of a pane (thanks to iSeeU816). Scripting: - added v:jobcount builtin variable that provides number of active jobs (number of lines in :jobs menu) (thanks to iSeeU816); - added v:session builtin variable that provides name of current session or is set to an empty string. Configuration: - added three MC-like shortcuts to sample vifmrc files (Alt-I, Alt-O and Ctrl-U) (thanks to Hans Bieshaar); - added global Default-256 color scheme to be used in terminals that support 256-color palette (automatically in sample vifmrc) (thanks to Shakil Akhtar); - create $VIFM/colors directory with default color scheme only on the first run (thanks to ranousse); - use mime-types in associations in sample vifmrc (thanks to Shakil Akhtar). Performance: - significantly improved performance of adding files to registers that contain thousands of files. As a result contents of registers is sorted now (thanks to Typo); - significantly improved performance of adding files to trash that contains thousands of files. As a result contents of trash is sorted now (thanks to Typo); - significantly improved speed of sourcing files (includes processing configuration on startup and :restart); - significantly improved speed of handling typical globs (and therefore mime-type matchers) and reduced amount of memory they take up (thanks to yanzhang0219); - improve performance of mime-type detection by caching the results; - make comparing files by contents (`:compare bycontents`) somewhat faster (thanks to maxigaz); - don't force view reload after every :command that resets selection when there was non-empty selection. This might make metadata of files less up-to-date, but should increase overall performance (thanks to Jose Riha, a.k.a. jose1711); - avoid reloading source file list after copy or move operation when possible (thanks to Jose Riha, a.k.a. jose1711). Vim-plugin: - added :VifmCs command to the plugin for "converting" Vim's color scheme into a Vifm's one (patch by Roman Plášil, a.k.a. Quiark); - multiple improvements of syntax highlighting. Documentation: - added references to "Menus and dialogs" section of documentation from :commands and keys which open menus and dialogs detailed there; - explicitly documented that macros are expanded in user defined commands (thanks to gcmt); - made documentation of :command more comprehensible; - document that user must disable netrw plugin on his own when enabling g:vifm_replace_netrw. Vifm's plugin can't do it, because it's loaded after plugins shipped with Vim; - documented how selection is handled on launching files (like on l or Enter keys); - improve documentation on "bycontents" of :compare (thanks to maxigaz); - somewhat improved documentation on 'ignorecase' and 'smartcase' options (thanks to filterfalse); - fixed Vim version of the documentation lacking description of %p macro of 'findprg'. Only on Windows: - added basic support for using PowerShell (pausing doesn't work) (thanks to Fang, a.k.a. peromage); - display targets of .lnk-files in file information dialog; - implemented capturing output of background applications (thanks to Gene Zharov); - follow targets of .lnk-files (thanks to Alexandre Viau); - fixed 'chaselinks' (symbolic links weren't resolved); - fixed creating symbolic links with 'syscalls' being turned on; - fixed creating symbolic links with spaces in source or target paths; - fixed Alt key combinations being broken since v0.9; - fixed running non-cmd shells being broken by adding 'shellcmdflag' in 0.10.1; - fixed issues with non-tiny 'shellcmdflag' (patch by Bas Bossink, a.k.a. basbossink); - fixed detecting presence of :file[x]type commands on Windows when backslashes are present in path (thanks to anonymous and n.e. at Vifm Q2A site). Packaging: - avoid interposing system's reallocarray(), when it's present (thanks to Ben Boeckel, a.k.a. mathstuf); - install only one version of sample config and media script, the one which corresponds to operating system being used (thanks to Michael Vetter, a.k.a. jubalh and Ondrej Novy, a.k.a. onovy); - clean up tests directory on "make clean" in the top of the tree. Important fixes: - fixed generation of :highlight command for OtherWin on writing $VIFM/colors/Default.vifm. The bug caused white background of inactive pane (thanks to Stas Malavin); - fixed `:move subdir &` renaming file in the process and doing weird stuff to multiple files (thanks to 45jqlakjrf87ayte7hy34ter4nguijauzl4eitk); - fixed graphics preview not being cleared on switching tabs or starting external applications (including on :shell); - fixed mapped keys being reinterpreted as builtin keys if RHS of the mapping failed at some point (e.g., contained an unmapped key) (thanks to Seok Won Lee, a.k.a. ijleesw); - fixed dialogs not being visible when UI updates are silenced via mappings; - fixed panic on some redraw operations mixing with file operations during terminal resizing (thanks to aca). See change log for the full list of changes and by whom they were suggested or implemented. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ September 10, 2020 ================== Vifm v0.11 beta --------------- New version finally updates format of vifminfo file unblocking changes like persistent tabs, sessions and timestamp-based merging of histories. In addition to that there were a number of improvements in user interface and multiple performance-related improvements. The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Main changes: - added persistent tabs; - added sessions; - new format of vifminfo file (old version is imported on first run); - smarter merging of histories between runs that avoids dropping of new entries; - version of default color scheme for 256-color terminals; - make tab labels customizable; - try to keep ratio of pane sizes constant on resizes, restarts and tab switching; - various performance improvements. More detailed list of changes. Normal and visual modes: - added gF normal mode key which acts like gf, but goes all the way to the ultimate target of the chain of symbolic links (thanks to Alexandre Viau); - improve navigation on gf key. Do fewer refreshes and disable filters to make target visible. Core: - more sensible merging of histories from multiple instances in vifminfo file (avoids dropping of new entries); - invalidate cached directory information (size or number of files) on inode change (thanks to Jose Riha, a.k.a. jose1711); - invalidate cached directory size when using it to compute size of some parent directory; - improve cursor positioning after file operations. Command-line mode: - added :tabo[nly] command that closes all tabs but the current one; - added :session and :delsession commands to manage sessions (thanks to Marcos Cruz); - added optional "full" parameter for the :restart command, which makes it discard essentially all context. This is useful with persistent tabs (thanks to Yusuf Aktepe); - don't reset histories of views in inactive tabs on :restart; - improve differentiation between association and list forms of :colorscheme command on startup. This is important if list contains name of color scheme that doesn't exist. :set command and options: - added "tabs" value to 'vifminfo' option. It enables persistent tabs (thanks to Cosmin Popescu, a.k.a. cosminadrianpopescu, filterfalse and Neil Griffin, a.k.a. ngriffin7a); - added "v" flag to the 'tuioptions' option. It controls whether width of middle border is adjusted to equalize view sizes (thanks to Matthias Braun, a.k.a. mb720); - added 'sessionoptions' option, which is an alternative to 'vifminfo' for session files; - added 'tablabel' option that specifies format of a single tab's label when non-empty (thanks to aleksejrs); - added 'tabprefix' and 'tabsuffix' options that allow customizing tabline separators (thanks to CoreCube); - added "treeleafsparent" value to 'dotdirs' option (thanks to filterfalse and Melandel); - do not require "dhistory" to be present in 'vifminfo' for "savedirs" to work. Menus and dialogs: - added rate and progress bar to progress dialog (patch by Alborz Jafari); - added real (fully resolved) path to the File Info dialog (thanks to Alexandre Viau); - added number of hard links to the File Info dialog; - abort menu, more or file information modes before processing remote commands (thanks to kangshugang); - deduplicate elements of the :file menu; - make displaying of spaces in mappings more intelligent by using at the start or end of lhs or rhs. File preview: - improve handling of long or unknown escape sequences in previews (thanks to bratekarate); - use global color scheme for preview on the other pane ignoring its directory-specific color scheme; - invalidate textual quickview cache if it contains fewer lines than window height and is incomplete. TUI (Text User Interface): - try harder to preserve position of the splitter. Avoid its drift on terminal resizes and preserve ratio of windows on startup and tab switches (thanks to Shakil Akhtar); - prevent internally selected files (e.g., via a range of a :command) from appearing selected in user interface (thanks to filterfalse); - reduce width of top line when side borders are hidden (`set tuioptions-=s`) (thanks to Svyatoslav Mishyn, a.k.a. juef); - escape some characters as ^X in view and tab titles, custom menu titles, on status line and in terminal title (thanks to filterfalse); - use the same label for :grep and :find custom lists as the one used for :grep and :find menus (thanks to filterfalse); - use unexpanded command for title of custom file lists produced using %u or %U macros and menus produced using %m or %M macros (thanks to filterfalse); - use name of user-defined command in titles of custom views and menus (thanks to filterfalse); - preserve more information in the title on turning custom view into tree using :tree (thanks to filterfalse); - limit length of custom file list title to 80 character positions (thanks to filterfalse). Integration: - detect being run under Wayland (relevant for :filextype commands) (thanks to mhdzli); - make 'title' option work in all terminals which contain "tsl" and "fsl" capabilities (thanks to m-kru); - update terminal title when in menus (thanks to filterfalse). Color schemes: - added HardLink highlight group for regular files with more than one hard link (patch by Hans Bieshaar); - added LineNr highlight group for highlighting line number column of views (thanks to Anton Gepting); - added OddLine highlight group for highlighting every second entry line of a pane (thanks to iSeeU816). Scripting: - added v:jobcount builtin variable that provides number of active jobs (number of lines in :jobs menu) (thanks to iSeeU816); - added v:session builtin variable that provides name of current session or is set to an empty string. Configuration: - added three MC-like shortcuts to sample vifmrc files (Alt-I, Alt-O and Ctrl-U) (thanks to Hans Bieshaar); - added global Default-256 color scheme to be used in terminals that support 256-color palette (automatically in sample vifmrc) (thanks to Shakil Akhtar); - create $VIFM/colors directory with default color scheme only on the first run (thanks to ranousse); - use mime-types in associations in sample vifmrc (thanks to Shakil Akhtar). Performance: - significantly improved performance of adding files to registers that contain thousands of files. As a result contents of registers is sorted now (thanks to Typo); - significantly improved performance of adding files to trash that contains thousands of files. As a result contents of trash is sorted now (thanks to Typo); - significantly improved speed of sourcing files (includes processing configuration on startup and :restart); - significantly improved speed of handling typical globs (and therefore mime-type matchers) and reduced amount of memory they take up (thanks to yanzhang0219); - improve performance of mime-type detection by caching the results; - make comparing files by contents (`:compare bycontents`) somewhat faster (thanks to maxigaz); - don't force view reload after every :command that resets selection when there was non-empty selection. This might make metadata of files less up-to-date, but should increase overall performance (thanks to Jose Riha, a.k.a. jose1711); - avoid reloading source file list after copy or move operation when possible (thanks to Jose Riha, a.k.a. jose1711). Vim-plugin: - added :VifmCs command to the plugin for "converting" Vim's color scheme into a Vifm's one (patch by Roman Plášil, a.k.a. Quiark); - multiple improvements of syntax highlighting. Documentation: - added references to "Menus and dialogs" section of documentation from :commands and keys which open menus and dialogs detailed there; - explicitly documented that macros are expanded in user defined commands (thanks to gcmt); - made documentation of :command more comprehensible; - document that user must disable netrw plugin on his own when enabling g:vifm_replace_netrw. Vifm's plugin can't do it, because it's loaded after plugins shipped with Vim; - documented how selection is handled on launching files (like on l or Enter keys); - improve documentation on "bycontents" of :compare (thanks to maxigaz); - somewhat improved documentation on 'ignorecase' and 'smartcase' options (thanks to filterfalse); - fixed Vim version of the documentation lacking description of %p macro of 'findprg'. Only on Windows: - added basic support for using PowerShell (pausing doesn't work) (thanks to Fang, a.k.a. peromage); - display targets of .lnk-files in file information dialog; - implemented capturing output of background applications (thanks to Gene Zharov); - follow targets of .lnk-files (thanks to Alexandre Viau); - fixed 'chaselinks' (symbolic links weren't resolved); - fixed creating symbolic links with 'syscalls' being turned on; - fixed creating symbolic links with spaces in source or target paths; - fixed Alt key combinations being broken since v0.9; - fixed running non-cmd shells being broken by adding 'shellcmdflag' in 0.10.1; - fixed issues with non-tiny 'shellcmdflag' (patch by Bas Bossink, a.k.a. basbossink); - fixed detecting presence of :file[x]type commands on Windows when backslashes are present in path (thanks to anonymous and n.e. at Vifm Q2A site). Packaging: - avoid interposing system's reallocarray(), when it's present (thanks to Ben Boeckel, a.k.a. mathstuf); - install only one version of sample config and media script, the one which corresponds to operating system being used (thanks to Michael Vetter, a.k.a. jubalh and Ondrej Novy, a.k.a. onovy); - clean up tests directory on "make clean" in the top of the tree. Important fixes: - fixed generation of :highlight command for OtherWin on writing $VIFM/colors/Default.vifm. The bug caused white background of inactive pane (thanks to Stas Malavin); - fixed `:move subdir &` renaming file in the process and doing weird stuff to multiple files (thanks to 45jqlakjrf87ayte7hy34ter4nguijauzl4eitk); - fixed graphics preview not being cleared on switching tabs or starting external applications (including on :shell); - fixed mapped keys being reinterpreted as builtin keys if RHS of the mapping failed at some point (e.g., contained an unmapped key) (thanks to Seok Won Lee, a.k.a. ijleesw); - fixed dialogs not being visible when UI updates are silenced via mappings; - fixed panic on some redraw operations mixing with file operations during terminal resizing (thanks to aca). See change log for the full list of changes and by whom they were suggested or implemented. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ July 29, 2019 ============= vifm v0.10.1 ------------ This version provides additions and improvements for media management feature, several enhancements related to text user interface, extra features to Vim plugin thanks to merging in neovim-vifm plugin and various small changes. Thanks to everyone who tried out the beta. Main changes: - added file preview to miller mode; - added preview macro to directly output to terminal, which enables use of Sixel graphics for previewing; - added udisks2 backend to vifm-media script (bundled script for managing media) and version of the script for OS X; - updated code to make use of large amount of color pairs when available; - functionality of previously separate neovim-vifm plugin got merged into the main plugin; - multiple improvements to :media menu; - improved performance in several use cases (quickview, lots of unhighlighted files, unnecessary cursor updates and redraws). More detailed list of changes. Command-line mode: - added :cds command that navigates to path obtained by substitution in the current path (thanks to j-xella); - added :hideui command that hides interface to show previous commands' output (thanks to dikiy); - added one more invocation format of :colorscheme command, which picks the first available color scheme that is supported by the terminal (thanks to Jose Riha, a.k.a. jose1711); - always preserve tabs on :restart (thanks to mwgkgk); - refuse to compare directory against itself via :compare command (thanks to Jose Riha, a.k.a. jose1711). :set command and options: - added fileroot view column, which displays full name of directories and symbolic links to directories and only root of name for everything else (thanks to chelovechishko); - added 'shellcmdflag' option that allows customizing how shell is invoked. Enables running it in interactive mode, which can make shell aliases and functions work (thanks to Ink (a.k.a. inknoir), John Shea (a.k.a. coachshea) and randomizedthinking); - added L flag to 'shortmess' option to display only last directory in tab line instead of full path (thanks to chelovechishko); - added ^= operation for string list options (thanks to SearyBlue); - added ^= operation for options of set kind; - added rpreview: key to 'milleroptions' option that allows enabling preview of files (thanks to Svadkos and Tom Jansen); - added %p macro to 'findprg' option. It works as a mix between %a and %A macros: usually contains arguments passed to :find command, but unlike %a doesn't include any predicates (thanks to Sitaram Chamarty and Tuan Bui, a.k.a. tuanbass); - added "space" and "nospace" values to 'sizefmt' option (patch by zsugabubus); - do not add leading comma to string list options on set opt+=item; - don't create trash directory on startup if 'trash' is off (patch by zsugabubus). Key bindings: - improved to do not forcefully update screen after the mapping if no screen updates were skipped. Completion: - complete user name in paths after initial tilde (e.g., :cd ~r => :cd ~root). Macros: - added %pd macro that makes preview output directly affect terminal circumventing curses interface, which could be used to display sixel images (thanks to Tom Jansen). Color schemes: - added OtherWin highlight group for highlighting inactive pane (thanks to John Fred Fadrigalan, a.k.a. cevhyruz). Menus and dialogs: - added indication of entry's availability to :file, :file[x]type and :fileviewer menus; - added [ and ] bindings to :media menu that provide navigation between devices (patch by zsugabubus); - added decorations to :media menu (patch by zsugabubus); - react to Enter in :media menu on device lines, mount on "not mounted" line and do nothing otherwise (patch by zsugabubus); - show empty lines in :media only if there is enough vertical space (patch by zsugabubus); - removed empty line from :file and similar menus for case when vifm was configured with --disable-desktop-files flag (second time). Scripting: - added extcached() builtin function, which can be used to improve performance of file queries by caching results of external commands (thanks to Matthias Braun, a.k.a. mb720). Invocation: - try to preserve symbolic links in current path when starting vifm by checking value of $PWD (thanks to Vigi). Core: - resolve symbolic links for mime-type matchers (thanks to Vigi); - do not check for view changes while suggestions are visible. It can mess up TUI, especially in combination with preview (thanks to ks1c). File operations: - preserve extended attributes on copying files (thanks to hutou); - don't throw away errors that were ignored by the user, display them at the end of operation; - consume input during foreground file operations. Otherwise it remains buffered and is processed after the operation is over, which might not be the intent of the user; - reduce number of options available on file conflict when source and destination are the same to avoid confusion (options that overwrite do nothing in this case) (thanks to aleksejrs). File preview: - do not complain about empty output of a graphics previewer for view mode; - clear preview before displaying suggestions (thanks to ks1c). TUI (Text User Interface): - renamed filename filter to "permanent filter" consisting of "explicit" (ex-manual) and "implicit" (ex-automatic) parts (thanks to Sitaram Chamarty); - changed file rename prompt to indicate whether full name or only its root is being changed; - try to determine widths of printed character more accurately; - drop leading space implicitly added to time columns in views (thanks to laggardkernel). Integration: - added info= field to parser of 'mediaprg' output. It provides custom message for the media (patch by zsugabubus); - added udisks2 backend to vifm-media script (bundled script for managing media). Requires python and dbus module for it to be installed (because udisks2 and dbus are too shitty to be used on command-line) (thanks to Tykin); - added FUSE_MOUNT3 filetype format, which is equivalent to FUSE_MOUNT, but doesn't perform unmounting. Helpful to use something like avfs (thanks to Jose Riha, a.k.a. jose1711); - added vifm-media-osx script that is configured to be used (via 'mediaprg') on OS X (patch by Von Welch); - error stream from 'mediaprg' isn't considered anymore when deciding if mounting/unmounting was successful. While technically an incompatible change, it's unlikely to cause any issues; - spawn 'mediaprg' in foreground to allow interactions with the user, like providing a password (patch by zsugabubus); - properly remove FUSE mount points if they are symbolic links; - assume that any $TERM value that starts with "xterm-", "rxvt-" or "screen-" supports terminal title (thanks to Matthias Braun, a.k.a. mb720). Documentation: - better documentation for TabLine and TabLineSel highlighting groups (thanks to mwgkgk); - clearer documentation/description for :*unmap commands and 'vicmd'/'vixcmd' options (thanks to chelovechishko); - improve documentation of patterns and globs (thanks to afsheenb); - improved documentation on filters (thanks to Sitaram Chamarty); - document more details about expansion of FUSE macros; - make documentation of 'findprg' more readable. Vim-plugin: - added :Vifm command as an alias for :EditVifm (patch by rbong); - added optional splitting of the embedded terminal (g:vifm_embed_split). Has support for Vim's and (patch by rbong); - added option to synchronize working directory of the embedded instance of vifm with the Vim host (g:vifm_embed_cwd) (patch by rbong); - added ability to replace netrw with vifm (g:vifm_replace_netrw and g:vifm_replace_netrw_cmd) (patch by rbong); - added autodetection of *.vifm files as files with "vifm" filetype to the plugin (patch by Anton Kochkov, a.k.a. XVilka). Configuration: - added example of using xsel to sample vifmrc file (thanks to chelovechishko); - enabled 'vimhelp' in sample vifmrc file by default. Performance: - added caching to quickview for a single file to avoid fileviewer being called more often than needed (thanks to agguser); - try to avoid superfluous screen updates related to cursor position; - remember when file doesn't match any file-specific highlighting groups for better performance (thanks to Gomme Bidule); - generate faster regular expressions by vifm-convert-dircolors (thanks to Gomme Bidule). Only on Windows: - upgraded to PDCurses 3.8 (was 3.4) for Windows. This allows using 256 colors inside ConEmu. Note that ConEmu has issues processing 256 colors on the last line of the screen, so avoid using them for status line (thanks to dancread). Other changes: - don't error on trash creation failure due to read-only file system (patch by zsugabubus). Important fixes: - fixed losing files on failed move operation. Source files were deleted assuming they were copied successfully, even when errors regarding some of them were ignored by the user (thanks to zsugabubus); - fixed vifm not making use of large number of color pairs when they are available (thanks to Jose Riha (a.k.a. jose1711) and Hans Petter Jansson (a.k.a. hpjansson)); - fixed color pairs being exhausted on Windows when default color ends up being used often, this caused highlighting to go awry (thanks to dancread); - fixed textual output of graphical previewers not being displayed in view mode (thanks to agguser); - fixed DirEnter autocommand being called with view being in a mixed state of old and new location (thanks to Kendrick Taylor, a.k.a. sixcircuit). See change log for the full list of changes and by whom they were suggested or implemented. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ July 15, 2019 ============= vifm v0.10.1 beta ----------------- This version provides additions and improvements for media management feature, several enhancements related to text user interface, extra features to Vim plugin thanks to merging in neovim-vifm plugin and various small changes. The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Main changes: - added file preview to miller mode - added preview macro to directly output to terminal, which enables use of Sixel graphics for previewing; - added udisks2 backend to vifm-media script (bundled script for managing media) and version of the script for OS X; - updated code to make use of large amount of color pairs when available; - functionality of previously separate neovim-vifm plugin got merged into the main plugin; - multiple improvements to :media menu; - improved performance in several use cases (quickview, lots of unhighlighted files, unnecessary cursor updates and redraws). More detailed list of changes. Command-line mode: - added :cds command that navigates to path obtained by substitution in the current path (thanks to j-xella); - added :hideui command that hides interface to show previous commands' output (thanks to dikiy); - added one more invocation format of :colorscheme command, which picks the first available color scheme that is supported by the terminal (thanks to Jose Riha, a.k.a. jose1711); - always preserve tabs on :restart (thanks to mwgkgk); - refuse to compare directory against itself via :compare command (thanks to Jose Riha, a.k.a. jose1711). :set command and options: - added fileroot view column, which displays full name of directories and symbolic links to directories and only root of name for everything else (thanks to chelovechishko); - added 'shellcmdflag' option that allows customizing how shell is invoked. Enables running it in interactive mode, which can make shell aliases and functions work (thanks to Ink (a.k.a. inknoir), John Shea (a.k.a. coachshea) and randomizedthinking); - added L flag to 'shortmess' option to display only last directory in tab line instead of full path (thanks to chelovechishko); - added ^= operation for string list options (thanks to SearyBlue); - added ^= operation for options of set kind; - added rpreview: key to 'milleroptions' option that allows enabling preview of files (thanks to Svadkos and Tom Jansen); - added %p macro to 'findprg' option. It works as a mix between %a and %A macros: usually contains arguments passed to :find command, but unlike %a doesn't include any predicates (thanks to Sitaram Chamarty and Tuan Bui, a.k.a. tuanbass); - do not add leading comma to string list options on set opt+=item; - don't create trash directory on startup if 'trash' is off (patch by zsugabubus). Key bindings: - improved to do not forcefully update screen after the mapping if no screen updates were skipped. Completion: - complete user name in paths after initial tilde (e.g., :cd ~r => :cd ~root). Macros: - added %pd macro that makes preview output directly affect terminal circumventing curses interface, which could be used to display sixel images (thanks to Tom Jansen). Color schemes: - added OtherWin highlight group for highlighting inactive pane (thanks to John Fred Fadrigalan, a.k.a. cevhyruz). Menus and dialogs: - added indication of entry's availability to :file, :file[x]type and :fileviewer menus; - added [ and ] bindings to :media menu that provide navigation between devices (patch by zsugabubus); - added decorations to :media menu (patch by zsugabubus); - react to Enter in :media menu on device lines, mount on "not mounted" line and do nothing otherwise (patch by zsugabubus); - show empty lines in :media only if there is enough vertical space (patch by zsugabubus); - removed empty line from :file and similar menus for case when vifm was configured with --disable-desktop-files flag (second time). Scripting: - added extcached() builtin function, which can be used to improve performance of file queries by caching results of external commands (thanks to Matthias Braun, a.k.a. mb720). Invocation: - try to preserve symbolic links in current path when starting vifm by checking value of $PWD (thanks to Vigi). Core: - resolve symbolic links for mime-type matchers (thanks to Vigi); - do not check for view changes while suggestions are visible. It can mess up TUI, especially in combination with preview (thanks to ks1c). File operations: - preserve extended attributes on copying files (thanks to hutou); - don't throw away errors that were ignored by the user, display them at the end of operation; - consume input during foreground file operations. Otherwise it remains buffered and is processed after the operation is over, which might not be the intent of the user; - reduce number of options available on file conflict when source and destination are the same to avoid confusion (options that overwrite do nothing in this case) (thanks to aleksejrs). File preview: - do not complain about empty output of a graphics previewer for view mode; - clear preview before displaying suggestions (thanks to ks1c). TUI (Text User Interface): - renamed filename filter to "permanent filter" consisting of "explicit" (ex-manual) and "implicit" (ex-automatic) parts (thanks to Sitaram Chamarty); - changed file rename prompt to indicate whether full name or only its root is being changed; - try to determine widths of printed character more accurately; - drop leading space implicitly added to time columns in views (thanks to laggardkernel). Integration: - added info= field to parser of 'mediaprg' output. It provides custom message for the media (patch by zsugabubus); - added udisks2 backend to vifm-media script (bundled script for managing media). Requires python and dbus module for it to be installed (because udisks2 and dbus are too shitty to be used on command-line) (thanks to Tykin); - added FUSE_MOUNT3 filetype format, which is equivalent to FUSE_MOUNT, but doesn't perform unmounting. Helpful to use something like avfs (thanks to Jose Riha, a.k.a. jose1711); - added vifm-media-osx script that is configured to be used (via 'mediaprg') on OS X (patch by Von Welch); - error stream from 'mediaprg' isn't considered anymore when deciding if mounting/unmounting was successful. While technically an incompatible change, it's unlikely to cause any issues; - spawn 'mediaprg' in foreground to allow interactions with the user, like providing a password (patch by zsugabubus); - properly remove FUSE mount points if they are symbolic links. Documentation: - better documentation for TabLine and TabLineSel highlighting groups (thanks to mwgkgk); - clearer documentation/description for :*unmap commands and 'vicmd'/'vixcmd' options (thanks to chelovechishko); - improve documentation of patterns and globs (thanks to afsheenb); - improved documentation on filters (thanks to Sitaram Chamarty); - document more details about expansion of FUSE macros; - make documentation of 'findprg' more readable. Vim-plugin: - added :Vifm command as an alias for :EditVifm (patch by rbong); - added optional splitting of the embedded terminal (g:vifm_embed_split). Has support for Vim's and (patch by rbong); - added option to synchronize working directory of the embedded instance of vifm with the Vim host (g:vifm_embed_cwd) (patch by rbong); - added ability to replace netrw with vifm (g:vifm_replace_netrw and g:vifm_replace_netrw_cmd) (patch by rbong). Configuration: - added example of using xsel to sample vifmrc file (thanks to chelovechishko); - enabled 'vimhelp' in sample vifmrc file by default. Performance: - added caching to quickview for a single file to avoid fileviewer being called more often than needed (thanks to agguser); - try to avoid superfluous screen updates related to cursor position; - remember when file doesn't match any file-specific highlighting groups for better performance (thanks to Gomme Bidule); - generate faster regular expressions by vifm-convert-dircolors (thanks to Gomme Bidule). Only on Windows: - upgraded to PDCurses 3.8 (was 3.4) for Windows. This allows using 256 colors inside ConEmu. Note that ConEmu has issues processing 256 colors on the last line of the screen, so avoid using them for status line (thanks to dancread). Other changes: - don't error on trash creation failure due to read-only file system (patch by zsugabubus). Important fixes: - fixed losing files on failed move operation. Source files were deleted assuming they were copied successfully, even when errors regarding some of them were ignored by the user (thanks to zsugabubus); - fixed vifm not making use of large number of color pairs when they are available (thanks to Jose Riha (a.k.a. jose1711) and Hans Petter Jansson (a.k.a. hpjansson)); - fixed color pairs being exhausted on Windows when default color ends up being used often, this caused highlighting to go awry (thanks to dancread); - fixed textual output of graphical previewers not being displayed in view mode (thanks to agguser); - fixed DirEnter autocommand being called with view being in a mixed state of old and new location (thanks to Kendrick Taylor, a.k.a. sixcircuit). See change log for the full list of changes and by whom they were suggested or implemented. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ November 11, 2018 ================= vifm v0.10 ---------- New version includes long awaited tabs and support for managing media. The first one comes in two flavours: tabs either include layout or don't. The latter relies on a helper script, whose job is to adapt existing tools to make them usable by vifm. The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Main changes: - added tabs which either operate on the level of layout or level of individual panes; - added ability to synchronize contents of registers among multiple instances; - added menu for managing media (relies on helper that does the managing); - improved cursor positioning and control over it; - ability to colorize status line. More detailed list of changes. Command-line mode: - added :tabc[lose] command that closes current tab unless it's the last one; - added :tabm[ove] command that moves tabs (thanks to filterfalse); - added :tabname command that updates name of the current tab; - added :tabnew command that creates a new tab (thanks to Cosmin Popescu, a.k.a. cosminadrianpopescu); - added :tabn[ext] and :tabp[revious] commands, which work as gt and gT normal mode shortcuts correspondingly (thanks to Cosmin Popescu, a.k.a. cosminadrianpopescu); - added :qa[ll], :wqa[ll] and :xa[ll] commands that always try to exit vifm no matter how many tabs are open; - added :goto command that navigates to specified file/directory (thanks to mateusz28 and Dmitry Frank, a.k.a. dimonomid); - added :regular command that leaves custom view (thanks to gammaray); - :quit, :wq, :exit, :xit, ZZ and ZQ now try to close current tab before closing the application; - make :echo and :execute report parsing errors in more detail than just "invalid expression"; - make :cabbrev and :cnoreabbrev always treat bar (`|`) as part of their arguments, just like :*map commands do (thanks to filterfalse); - make :tree! toggle view in and out of tree mode (thanks to gammaray); - more accurate error message on handling non directories passed to :cd. :set command and options: - added 'tabscope' option that controls style of tabs (thanks to Cosmin Popescu, a.k.a. cosminadrianpopescu); - added 'showtabline' option that controls visibility of tab line; - added 'histcursor' option that gives partial control over when cursor is positioned in accordance with record of directory history (thanks to filterfalse and Dmitry Frank, a.k.a. dimonomid); - added 'quickview' option that controls visibility of quick view (:view) (thanks to Jochen Schweizer, a.k.a. durcheinandr); - added 'syncregs' option which defines group of instances that share registers (patch by Ma_Sys.ma); - added 'mediaprg' option that can be used to specify helper for managing removable media. One such helper with support of udevil and udisks is provided. Only for *nix systems; - added support for arbitrary expressions in 'statusline': '%{...}', e.g. '%{&sort}' evaluates to the value of the sort option (patch by Dmitry Frank, a.k.a. dimonomid); - added "M" flag to 'shortmess' option to control shortening of titles in windows of terminal multiplexers created by vifm down to file name instead of using full path (thanks to mateusz28). File operations: - try to preserve file owner/group on copying (thanks to willemw12). Normal and visual modes: - added gt and gT normal mode shortcuts that switch between tabs in both directions. Key bindings: - added :*map argument that postpones UI updates until RHS is completely processed. Probably not all updates are postponed, to be improved as unhandled cases are discovered; - added :*map argument, which resolves prefix conflicts of user-defined mappings and builtin keys in favour of user-defined mappings (thanks to Paweł Smolak, a.k.a. psmolak). Angle bracket notation: - added angle bracket notation (thanks to j-xella); - added angle bracket notation making it possible to map Ctrl-Space key (thanks to anonymous at Vifm Q2A site). File list: - use historical cursor position upon startup by default when 'autochpos' is on, this is now independent from "savedirs" in 'vifminfo' option (thanks to filterfalse); - use historical cursor position on navigating to a mark that doesn't specify a file by default when 'autochpos' is on (thanks to filterfalse); - move cursor after p and P to one of files that were moved or to a cause of last conflict (thanks to filterfalse and ranousse); - issue a warning if file system lists several files with identical names in the same directory. It used to be assumed that it can't happen (thanks to Jose Riha, a.k.a. jose1711). File preview: - support italics in quickview/view mode and in :highlight when curses implementation provides corresponding extension. PDCurses doesn't implement it on Windows. Fallback is to use "reversed" attribute (thanks to GeorgeHJ). Integration: - escape "=" at the beginning of paths (has special meaning in zsh) (thanks to agguser). Menus and dialogs: - added :media menu that can list and perform basic operations on removable media (requires helper to be available, see 'mediaprg'). Only for *nix systems (thanks to Bruce Hunsaker, a.k.a. hunsakerbn and others); - added r key to :undolist menu, which resets position in the undo list to group under the cursor (thanks to mini-turtle); - sort entries of :bmarks menu (thanks to anonymous at Vifm Q2A site); - slightly better formatting in :undolist menu; - do not reset selection before executing a :command from :commands menu (thanks to Jose Riha, a.k.a. jose1711); - less strict parsing of output of external command by :[un]select commands. Similar to %u/%U and menus allow [:[:[:]] ] format (thanks to j-xella). Color schemes: - added TabLine highlight group for highlighting tab line; - added TabLineSel highlight group for highlighting tip of the selected tab on the tab line; - added User1..User9 highlight groups and corresponding %[0-9]* 'statusline' macro, which makes it possible to colorize parts of status line differently (thanks to GeorgeHJ). TUI (Text User Interface): - display list of files in removal confirmation dialog (thanks to ovk). Scripting: - added tabpagenr() function that retrieves number of current or last tab page (thanks to filterfalse); - added fnameescape() builtin function, which can be used to escape paths on construction of :commands (thanks to filterfalse); - added second optional parameter to filetype() builtin function that is treated as a boolean and specifies whether symbolic links should be resolved; - added addition and subtraction operations to the parser; - added grouping via parentheses to expressions (thanks to Konst Mayer, a.k.a. cdlscpmv); - allow passing numerical positions to filetype() function. Documentation: - more explicit documentation about leaving custom views (thanks to tagwint). Vim-plugin: - support embedded terminal in the plugin for newer Vim. Only on Windows: - fixed flickering on Windows (thanks to Alexandre Viau and randomizedthinking); - fixed graphical applications on Windows not being detected as such, which caused vifm to wait until they finish running. Was broken since 0.9 (thanks to r0ck). Important fixes: - fixed error messages from put operation being postponed until the next put operation. Got broken in 0.9; - fixed confirmation not being requested on :delete (thanks to anonymous at Vifm Q2A site). See change log for the full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ October 28, 2018 ================ vifm v0.10 beta --------------- New version includes long awaited tabs and support for managing media. The first one comes in two flavours: tabs either include layout or don't. The latter relies on a helper script, whose job is to adapt existing tools to make them usable by vifm. The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Main changes: - added tabs which either operate on the level of layout or level of individual panes; - added ability to synchronize contents of registers among multiple instances; - added menu for managing media (relies on helper that does the managing); - improved cursor positioning and control over it; - ability to colorize status line. More detailed list of changes. Command-line mode: - added :tabc[lose] command that closes current tab unless it's the last one; - added :tabm[ove] command that moves tabs (thanks to filterfalse); - added :tabname command that updates name of the current tab; - added :tabnew command that creates a new tab (thanks to Cosmin Popescu, a.k.a. cosminadrianpopescu); - added :tabn[ext] and :tabp[revious] commands, which work as gt and gT normal mode shortcuts correspondingly (thanks to Cosmin Popescu, a.k.a. cosminadrianpopescu); - added :qa[ll], :wqa[ll] and :xa[ll] commands that always try to exit vifm no matter how many tabs are open; - added :goto command that navigates to specified file/directory (thanks to mateusz28 and Dmitry Frank, a.k.a. dimonomid); - added :regular command that leaves custom view (thanks to gammaray); - :quit, :wq, :exit, :xit, ZZ and ZQ now try to close current tab before closing the application; - make :echo and :execute report parsing errors in more detail than just "invalid expression"; - make :cabbrev and :cnoreabbrev always treat bar (`|`) as part of their arguments, just like :*map commands do (thanks to filterfalse); - make :tree! toggle view in and out of tree mode (thanks to gammaray); - more accurate error message on handling non directories passed to :cd. :set command and options: - added 'tabscope' option that controls style of tabs (thanks to Cosmin Popescu, a.k.a. cosminadrianpopescu); - added 'showtabline' option that controls visibility of tab line; - added 'histcursor' option that gives partial control over when cursor is positioned in accordance with record of directory history (thanks to filterfalse and Dmitry Frank, a.k.a. dimonomid); - added 'quickview' option that controls visibility of quick view (:view) (thanks to Jochen Schweizer, a.k.a. durcheinandr); - added 'syncregs' option which defines group of instances that share registers (patch by Ma_Sys.ma); - added 'mediaprg' option that can be used to specify helper for managing removable media. One such helper with support of udevil and udisks is provided. Only for *nix systems; - added support for arbitrary expressions in 'statusline': '%{...}', e.g. '%{&sort}' evaluates to the value of the sort option (patch by Dmitry Frank, a.k.a. dimonomid); - added "M" flag to 'shortmess' option to control shortening of titles in windows of terminal multiplexers created by vifm down to file name instead of using full path (thanks to mateusz28). File operations: - try to preserve file owner/group on copying (thanks to willemw12). Normal and visual modes: - added gt and gT normal mode shortcuts that switch between tabs in both directions. Key bindings: - added :*map argument that postpones UI updates until RHS is completely processed. Probably not all updates are postponed, to be improved as unhandled cases are discovered; - added :*map argument, which resolves prefix conflicts of user-defined mappings and builtin keys in favour of user-defined mappings (thanks to Paweł Smolak, a.k.a. psmolak). Angle bracket notation: - added angle bracket notation (thanks to j-xella); - added angle bracket notation making it possible to map Ctrl-Space key (thanks to anonymous at Vifm Q2A site). File list: - use historical cursor position upon startup by default when 'autochpos' is on, this is now independent from "savedirs" in 'vifminfo' option (thanks to filterfalse); - use historical cursor position on navigating to a mark that doesn't specify a file by default when 'autochpos' is on (thanks to filterfalse); - move cursor after p and P to one of files that were moved or to a cause of last conflict (thanks to filterfalse and ranousse); - issue a warning if file system lists several files with identical names in the same directory. It used to be assumed that it can't happen (thanks to Jose Riha, a.k.a. jose1711). File preview: - support italics in quickview/view mode and in :highlight when curses implementation provides corresponding extension. PDCurses doesn't implement it on Windows. Fallback is to use "reversed" attribute (thanks to GeorgeHJ). Integration: - escape "=" at the beginning of paths (has special meaning in zsh) (thanks to agguser). Menus and dialogs: - added :media menu that can list and perform basic operations on removable media (requires helper to be available, see 'mediaprg'). Only for *nix systems (thanks to Bruce Hunsaker, a.k.a. hunsakerbn and others); - added r key to :undolist menu, which resets position in the undo list to group under the cursor (thanks to mini-turtle); - sort entries of :bmarks menu (thanks to anonymous at Vifm Q2A site); - slightly better formatting in :undolist menu; - do not reset selection before executing a :command from :commands menu (thanks to Jose Riha, a.k.a. jose1711); - less strict parsing of output of external command by :[un]select commands. Similar to %u/%U and menus allow [:[:[:]] ] format (thanks to j-xella). Color schemes: - added TabLine highlight group for highlighting tab line; - added TabLineSel highlight group for highlighting tip of the selected tab on the tab line; - added User1..User9 highlight groups and corresponding %[0-9]* 'statusline' macro, which makes it possible to colorize parts of status line differently (thanks to GeorgeHJ). Scripting: - added tabpagenr() function that retrieves number of current or last tab page (thanks to filterfalse); - added fnameescape() builtin function, which can be used to escape paths on construction of :commands (thanks to filterfalse); - added second optional parameter to filetype() builtin function that is treated as a boolean and specifies whether symbolic links should be resolved; - added addition and subtraction operations to the parser; - added grouping via parentheses to expressions (thanks to Konst Mayer, a.k.a. cdlscpmv); - allow passing numerical positions to filetype() function. Documentation: - more explicit documentation about leaving custom views (thanks to tagwint). Only on Windows: - fixed flickering on Windows (thanks to Alexandre Viau and randomizedthinking); - fixed graphical applications on Windows not being detected as such, which caused vifm to wait until they finish running. Was broken since 0.9 (thanks to r0ck). Important fixes: - fixed error messages from put operation being postponed until the next put operation. Got broken in 0.9; - fixed confirmation not being requested on :delete (thanks to anonymous at Vifm Q2A site). See change log for the full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ February 05, 2018 ================= vifm v0.9.1 ----------- This version adds to the list of ways for viewing files by introducing miller columns view and transposed ls-like view (table view). Other developments are related to integration between builtin features as well as with external applications. Thanks to everyone who tried out the beta. Main changes: - introduced file view mode known as miller columns or cascading lists; - added ability to transpose ls-like view to make it fill by columns; - more natural behaviour of movement keys in ls-like view; - new `--remote-expr` command-line option can be used to query state of running instances; - extended retry/ignore/abort query to all file operations; - more control over highlight groups via `:highlight` suitable for interactive changes; - mostly eliminated the need for repeating ga/gA commands through automatic size recalculation. More detailed list of changes. File operations: - added retry/ignore/abort prompt for file copying and directory/file/symlink creation when 'syscalls' is on (thanks to einhander); - better detection of write errors on file copying. The error was reported, but it wasn't treated as a hard error in a specific case related to caching. Command-line mode: - added :histnext/:histprev commands, which are analogous to Ctrl-I/Ctrl-O (patch by Dmitry Frank, a.k.a. dimonomid); - added ability to remove filename-specific highlighting rules with `:highlight clear {pattern}` (thanks to aleksejrs); - changed :filter command to accept pattern (//, ////, {} or {{}}) (thanks to rbong); - made :siblnext and :siblprev commands respect dot and name filters; - made :siblnext and :siblprev accept [count] range (thanks to filterfalse); - made :tree pick up list of files from custom view (thanks to filterfalse); - made :highlight update file-specific group on exact match of the pattern instead of appending new rule (thanks to aleksejrs); - remove empty directories which are specified in 'trashdir' with %r and/or %u automatically on :empty (thanks to Marcin Kurczewski, a.k.a. rr-). :set command and options: - added "inode" sorting key, which sorts entries by inode number (thanks to eco0414); - added 'millerview' option that enables cascading columns interface for the view (thanks to sudo-nice); - added 'milleroptions' option that configures miller view; - added 'lsoptions' option that allows to get transposed grid in ls-like view (thanks to Dmitry Frank, a.k.a. dimonomid); - added 'previewprg' option, which can be used to override :fileviewer commands either temporarily or permanently (thanks to svenn71); - added {root} key to 'viewcolumns' option (complements {ext}) (thanks to Oleg Gordienko, a.k.a. gordio); - added "u" flag to the 'tuioptions' option. It enables use of Unicode characters in the TUI (Unicode ellipsis instead of "...") (thanks to Oleg Gordienko, a.k.a. gordio); - added "foldsubkeys" value to the 'suggestoptions' option. It folds multiple suggestions with common prefix into one entry (thanks to AndreaHasani). Normal and visual modes: - added [r/]r/[R/]R normal mode shortcuts that map to :siblprev and :siblnext with and without wrapping correspondingly (thanks to filterfalse); - do not go to start of line on Ctrl-U/Ctrl-D/Ctrl-F/Ctrl-B/G in ls-like view; - H/M/L keys in ls-like view now account for columns; - instead of invalidating directory size previously calculated via ga/gA on detecting changes in the directory recalculate its size and propagate update through its parents (thanks to filterfalse). Macros: - added %x macro to 'rulerformat' (and thus to 'statusline') as a new name for %-, which conflicts with alignment specification and requires explicit width specifier (%0-) (thanks to Marcos Cruz). Scripting: - added term() builtin function, which differs from system() only by its ability to run interactive applications without confusing vifm's interactions with the terminal (thanks to Dmitry Frank, a.k.a. dimonomid); - added v:count and v:count1 builtin variables. They are assigned to count passed to : command; - don't trigger DirEnter event with previous directory on startup when list of files is specified on stdin (thanks to filterfalse). Invocation: - added `--remote-expr` command-line option, which gives ability to query state of an instance (thanks to Marcin Kurczewski, a.k.a. rr-). Completion: - added completion of filename-specific highlight groups for :highlight command. Color schemes: - added AuxWin highlight group for highlighting auxiliary parts of windows. TUI (Text User Interface): - extend width of the cursor in ls-like view to the width of the cell (thanks to Dmitry Frank, a.k.a. dimonomid); - indicate preview created with %q with "Command: cmd"; - duplicate status bar error in dialog that reports sourcing error. Will need to get rid of errors on status bar later. Performance: - improved performance of mime-type detection when using libmagic (now might be about seven times faster by avoiding reinitialization of the library); - don't force file list reload after `:!` and rely on change detection. This should result in somewhat better performance (thanks to opennota). Documentation: - documented more details about 'vicmd' and 'vixcmd' options (thanks to Sebastian Cyprych). Vim-plugin: - disabled spell checking of vifm files in Vim except for comments. Only on Windows: - fixed running commands with arguments on Windows when 'shell' isn't cmd.exe. Important fixes: - fixed consuming 100% of CPU on certain pattern of running background processes (thanks to petRUShka); - fixed turning quickview into explore view when preview command doesn't contain macros. Was broken since 0.8; - fixed the plugin in neovim (patch by John Shea, a.k.a. coachshea); - fixed cloning of files like `.name` to produce `.name(1)` instead of `(1).name` (thanks to filterfalse); - fixed directory size in status line (patch by Dmitry Frank, a.k.a. dimonomid); - fixed CWD of the process not matching current view after vifm picked up change in file system (patch by Daniel Mueller); - fixed :normal command resetting selection (thanks to filterfalse); - fixed stopping of put operation after copying symbolic link that's broken on destination (thanks to filterfalse); - fixed a "race" with file system when we could load outdated file list and thus miss some file system updates. See change log for the full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ January 22, 2018 ================ vifm v0.9.1 beta ---------------- This version adds to the list of ways for viewing files by introducing miller columns view and transposed ls-like view (table view). Other developments are related to integration between builtin features as well as with external applications. The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Main changes: - introduced file view mode known as miller columns or cascading lists; - added ability to transpose ls-like view to make it fill by columns; - more natural behaviour of movement keys in ls-like view; - new `--remote-expr` command-line option can be used to query state of running instances; - extended retry/ignore/abort query to all file operations; - more control over highlight groups via `:highlight` suitable for interactive changes; - mostly eliminated the need for repeating ga/gA commands through automatic size recalculation. More detailed list of changes. File operations: - added retry/ignore/abort prompt for file copying and directory/file/symlink creation when 'syscalls' is on (thanks to einhander); - better detection of write errors on file copying. The error was reported, but it wasn't treated as a hard error in a specific case related to caching. Command-line mode: - added :histnext/:histprev commands, which are analogous to Ctrl-I/Ctrl-O (patch by Dmitry Frank, a.k.a. dimonomid); - added ability to remove filename-specific highlighting rules with `:highlight clear {pattern}` (thanks to aleksejrs); - changed :filter command to accept pattern (//, ////, {} or {{}}) (thanks to rbong); - made :siblnext and :siblprev commands respect dot and name filters; - made :siblnext and :siblprev accept [count] range (thanks to filterfalse); - made :tree pick up list of files from custom view (thanks to filterfalse); - made :highlight update file-specific group on exact match of the pattern instead of appending new rule (thanks to aleksejrs); - remove empty directories which are specified in 'trashdir' with %r and/or %u automatically on :empty (thanks to Marcin Kurczewski, a.k.a. rr-). :set command and options: - added "inode" sorting key, which sorts entries by inode number (thanks to eco0414); - added 'millerview' option that enables cascading columns interface for the view (thanks to sudo-nice); - added 'milleroptions' option that configures miller view; - added 'lsoptions' option that allows to get transposed grid in ls-like view (thanks to Dmitry Frank, a.k.a. dimonomid); - added 'previewprg' option, which can be used to override :fileviewer commands either temporarily or permanently (thanks to svenn71); - added {root} key to 'viewcolumns' option (complements {ext}) (thanks to Oleg Gordienko, a.k.a. gordio); - added "u" flag to the 'tuioptions' option. It enables use of Unicode characters in the TUI (Unicode ellipsis instead of "...") (thanks to Oleg Gordienko, a.k.a. gordio); - added "foldsubkeys" value to the 'suggestoptions' option. It folds multiple suggestions with common prefix into one entry (thanks to AndreaHasani). Normal and visual modes: - added [r/]r/[R/]R normal mode shortcuts that map to :siblprev and :siblnext with and without wrapping correspondingly (thanks to filterfalse); - do not go to start of line on Ctrl-U/Ctrl-D/Ctrl-F/Ctrl-B/G in ls-like view; - H/M/L keys in ls-like view now account for columns; - instead of invalidating directory size previously calculated via ga/gA on detecting changes in the directory recalculate its size and propagate update through its parents (thanks to filterfalse). Macros: - added %x macro to 'rulerformat' (and thus to 'statusline') as a new name for %-, which conflicts with alignment specification and requires explicit width specifier (%0-) (thanks to Marcos Cruz). Scripting: - added term() builtin function, which differs from system() only by its ability to run interactive applications without confusing vifm's interactions with the terminal (thanks to Dmitry Frank, a.k.a. dimonomid); - added v:count and v:count1 builtin variables. They are assigned to count passed to : command; - don't trigger DirEnter event with previous directory on startup when list of files is specified on stdin (thanks to filterfalse). Invocation: - added `--remote-expr` command-line option, which gives ability to query state of an instance (thanks to Marcin Kurczewski, a.k.a. rr-). Completion: - added completion of filename-specific highlight groups for :highlight command. Color schemes: - added AuxWin highlight group for highlighting auxiliary parts of windows. TUI (Text User Interface): - extend width of the cursor in ls-like view to the width of the cell (thanks to Dmitry Frank, a.k.a. dimonomid); - indicate preview created with %q with "Command: cmd"; - duplicate status bar error in dialog that reports sourcing error. Will need to get rid of errors on status bar later. Performance: - improved performance of mime-type detection when using libmagic (now might be about seven times faster by avoiding reinitialization of the library); - don't force file list reload after `:!` and rely on change detection. This should result in somewhat better performance (thanks to opennota). Documentation: - documented more details about 'vicmd' and 'vixcmd' options (thanks to Sebastian Cyprych). Vim-plugin: - disabled spell checking of vifm files in Vim except for comments. Only on Windows: - fixed running commands with arguments on Windows when 'shell' isn't cmd.exe. Important fixes: - fixed consuming 100% of CPU on certain pattern of running background processes (thanks to petRUShka); - fixed turning quickview into explore view when preview command doesn't contain macros. Was broken since 0.8; - fixed the plugin in neovim (patch by John Shea, a.k.a. coachshea); - fixed cloning of files like `.name` to produce `.name(1)` instead of `(1).name` (thanks to filterfalse); - fixed directory size in status line (patch by Dmitry Frank, a.k.a. dimonomid); - fixed CWD of the process not matching current view after vifm picked up change in file system (patch by Daniel Mueller); - fixed :normal command resetting selection (thanks to filterfalse); - fixed stopping of put operation after copying symbolic link that's broken on destination (thanks to filterfalse); - fixed a "race" with file system when we could load outdated file list and thus miss some file system updates. See change log for the full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ June 18, 2017 ============= vifm v0.9 --------- New version brings two new ways of viewing and processing file lists, namely tree-view and directory-comparison. As usual, previously existing facilities were extended and improved to become more useful. Thanks to everyone who tried out the beta, especially filterfalse. Main changes: - introduced tree-like representation of files; - added directory comparison facilities; - added ability to restore last navigation menu; - background operations and programs can now be cancelled; - dismissed error output of external programs can now be queried; - added shell completion for bash and zsh; - now it's possible to configure mappings in dialogs. More detailed list of changes. Packaging: - Removed -Werror in tests from non-developer builds. Command-line mode: - added :tree command that converts current view into a tree (thanks to filterfalse and Kornel); - added :dmap, :dnoremap and :dunmap commands to configure mappings in dialogs (thanks to Sassan Haradji, a.k.a. sassanh); - added "tree" parameter to :sync! that enables synchronization of tree view (thanks to filterfalse); - added :compare command to perform comparison in one or two directory trees (thanks to anonymous on SourceForge discussion forum and aleksejrs); - added :copen command to restore last menu that supports navigation (thanks to Sassan Haradji, a.k.a. sassanh); - added :screen! form that enables terminal multiplexers support (instead of toggling it as :screen does) (thanks to Marcos Cruz); - added :siblnext and :siblprev commands. They change directory to next or previous sibling directories of current path (in global sorting order of current pane) (thanks to sudo-nice); - made :put, :touch and :mkdir accept [line] range, which can be used to specify target position in tree-view (thanks to filterfalse); - accept paths in :touch, not just file names (thanks to filterfalse); - disallow applying :chmod on ".." entry; - disallow selecting ".." entry with :select command; - expand macros in `:[un]select !{command}` (thanks to Michael Corvin). Macros: - added %Iu and %IU macros, which are %u and %U equivalents, but work better if external command is interactive and changes terminal state; - added %q macro that redirects command output into quick view (thanks to svenn71). :set command and options: - added 'dotfiles' (local) option, which exposes dot files filter as an option (thanks to filterfalse); - added 'caseoptions' option that enables more fine-grained control over case sensitivity (thanks to Alexandru Geana, a.k.a. alegen); - added 'sizefmt' option that configures formatting of human-friendly size (thanks to sudo-nice); - added %f 'statusline' macro that inserts relative path of the entry, which might be useful for non-regular views (thanks to filterfalse); - added %D 'statusline' macro that displays path of the other pane in single-pane layout (thanks to sudo-nice); - added %T 'statusline' macro that displays symbolic link target (thanks to sudo-nice); - added %a 'statusline' macro that displays amount of free space available at current partition (thanks to sudo-nice); - consider trailing slash for directories or symbolic links that point to directories in 'classify' patterns by file name (e.g., this works now: `[::*/::]`); - better handling of setting 'fillchars' to incorrect or excessive value. Normal and visual modes: - added [d and ]d shortcuts to navigate to previous/next directory entry (thanks to filterfalse); - added [s and ]s shortcuts to navigate to previous/next selected entry (thanks to filterfalse); - added [z and ]z shortcuts to navigate to first/last sibling in a tree (thanks to filterfalse); - added zj and zk shortcuts to navigate to next/previous directory sibling in a tree (thanks to filterfalse); - added [c and ]c shortcuts to navigate to previous/next mismatch in directory comparison view (thanks to filterfalse); - added do and dp keys to compare views for applying changes in files (thanks to filterfalse). Menus and dialogs: - added dd key to :jobs menu, which requests cancellation of background operation. Background :put, :copy, :move, :delete, size calculation with ga and gA as well as applications started in background can be cancelled this way (thanks to blurm); - added e key to :jobs menu that displays list of errors issues by that jobs, if any. h key goes back to :jobs menu; - added % key to menu mode, which navigates to [count]-th percent of the list; - added meaning to [count] of cp shortcut, which is now processed as numerical argument for non-recursive `chmod` command (thanks to sudo-nice); - partially return progress report for menus. Was disabled by introduction of null byte heuristic. File operations: - enable restoring files from trash from custom views; - disallow moving/copying/linking files into custom view (put is forbidden, so makes sense to forbid these too); - try harder to move files by not giving up on getting permission error, which isn't always a reliable indication of actual permission error. Only when 'syscalls' is on (thanks to Marcin Kurczewski, a.k.a. rr-). File preview: - view current directory on ".." for quickview/view mode if no viewer matches such entry (thanks to filterfalse); - enable cancellation of tree preview construction (thanks to filterfalse); - do not resolve symbolic links in directory preview (thanks to filterfalse). Security: - make temporary rename files accessible only by the user (thanks to aleksejrs). Performance: - improve performance of startup and exit by omitting file existence checks. The cost is possibly old files staying in the state, but it should be for long time (thanks to Marcin Kurczewski, a.k.a. rr-); - improved sorting performance in the presence of huge amount of symbolic links (thanks to Marcin Kurczewski, a.k.a. rr-). Invocation: - don't disable preview on `--remote --select` if it doesn't hide updated pane (thanks to Marcin Kurczewski, a.k.a. rr-); - make +{num} and similar options work (actually affect cursor of the view) (thanks to filterfalse); - treat "+" option the same way as Vim (like :$) (thanks to filterfalse). Scripting: - added v:servername variable, which provides access to server name of the running instance used by --remote feature (thanks to Marcin Kurczewski, a.k.a. rr-); - getpanetype() got new value ("tree") to indicate tree-view (thanks to filterfalse). TUI (Text User Interface): - limited maximum height of message popup, just print how many lines we're skipping; - put hardware cursor according to current mode and cursor within it (thanks to Tyler Spivey); - display path to the conflicting file in conflict resolution dialog; - provide better messages on i/o errors with 'syscalls' (thanks to Behrooz). File filtering: - don't move cursor off "../" before start of local filtering (thanks to filterfalse); - prevent clearing filters on zM if there were no zO preceding it (thanks to sudo-nice). Color schemes: - added CmpMismatch highlight group for highlighting mismatched files on side-by-side comparison. Integration: - added completion scripts for bash and zsh (patches by filterfalse); - escape first tilde in paths that go to the shell (thanks to Marius Schmidl); - resolve symbolic link for listing associated programs from desktop-files (thanks to filterfalse). Vim-plugin: - work around :drop command being disabled in the plugin (thanks to Phil Runninger); - fixed inconsistent behaviour of :EditVifm in plugin with regard to "[No Name]" buffer (thanks to Phil Runninger); - fixed plugin in versions of Vim where :argadd without argument doesn't work (thanks to eco0414). Only on Windows: - use /data/colors as global storage of color schemes on Windows (thanks to r44083); - handle terminal resize on Windows 10 (thanks to randomizedthinking); - properly recover from invalid/strange UNC root on Windows. Don't end up with empty filelist; - fixed use of non-latin characters in environment variables and command-line options (thanks to khaoos-abominable). Important fixes: - fixed redirecting stdout of background commands to /dev/null, which could be unwritable descriptor (thanks to c02y); - fixed possible data loss on moving/copying files over their own parent or child directories via p, P, :move, :copy, :alink and :rlink (thanks to Marius Schmidl); - fixed detection of too-small-terminal state; - fixed treating characters like š and ć (with low Unicode values, just above 0x100) as functional keys on input (thanks to granderil). Other changes: - changed size formatting to round from zero (matches behaviour of e.g. `ls`); - read error output of background commands independently of main thread (prevents blocking of tools which produce huge amount of output) (thanks to Stas Malavin); - no vifminfo merging if file change isn't detected. Might result in faster quitting in some cases. Not accounting for some changes is still possible when multiple instances quit simultaneously, but same could happen without this change; - made search consider trailing slash for directories and symbolic links that point to directories (thanks to filterfalse); - don't use :filextype in sample vifmrc for OS X, we can't tell whether graphical system is running (thanks to piotryordanov). See change log for the full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ June 04, 2017 ============= vifm v0.9 beta -------------- New version brings two new ways of viewing and processing file lists, namely tree-view and directory-comparison. As usual, previously existing facilities were extended and improved to become more useful. The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Main changes: - introduced tree-like representation of files; - added directory comparison facilities; - added ability to restore last navigation menu; - background operations and programs can now be cancelled; - dismissed error output of external programs can now be queried; - added shell completion for bash and zsh; - now it's possible to configure mappings in dialogs. More detailed list of changes. Packaging: - Removed -Werror in tests from non-developer builds. Command-line mode: - added :tree command that converts current view into a tree (thanks to filterfalse and Kornel); - added :dmap, :dnoremap and :dunmap commands to configure mappings in dialogs (thanks to Sassan Haradji, a.k.a. sassanh); - added "tree" parameter to :sync! that enables synchronization of tree view (thanks to filterfalse); - added :compare command to perform comparison in one or two directory trees (thanks to anonymous on SourceForge discussion forum and aleksejrs); - added :copen command to restore last menu that supports navigation (thanks to Sassan Haradji, a.k.a. sassanh); - added :screen! form that enables terminal multiplexers support (instead of toggling it as :screen does) (thanks to Marcos Cruz); - added :siblnext and :siblprev commands. They change directory to next or previous sibling directories of current path (in global sorting order of current pane) (thanks to sudo-nice); - made :put, :touch and :mkdir accept [line] range, which can be used to specify target position in tree-view (thanks to filterfalse); - accept paths in :touch, not just file names (thanks to filterfalse); - disallow applying :chmod on ".." entry; - disallow selecting ".." entry with :select command. Macros: - added %Iu and %IU macros, which are %u and %U equivalents, but work better if external command is interactive and changes terminal state; - added %q macro that redirects command output into quick view (thanks to svenn71). :set command and options: - added 'dotfiles' (local) option, which exposes dot files filter as an option (thanks to filterfalse); - added 'caseoptions' option that enables more fine-grained control over case sensitivity (thanks to Alexandru Geana, a.k.a. alegen); - added 'sizefmt' option that configures formatting of human-friendly size (thanks to sudo-nice); - added %f 'statusline' macro that inserts relative path of the entry, which might be useful for non-regular views (thanks to filterfalse); - added %D 'statusline' macro that displays path of the other pane in single-pane layout (thanks to sudo-nice); - added %T 'statusline' macro that displays symbolic link target (thanks to sudo-nice); - added %a 'statusline' macro that displays amount of free space available at current partition (thanks to sudo-nice); - consider trailing slash for directories or symbolic links that point to directories in 'classify' patterns by file name (e.g., this works now: `[::*/::]`); - better handling of setting 'fillchars' to incorrect or excessive value. Normal and visual modes: - added [d and ]d shortcuts to navigate to previous/next directory entry (thanks to filterfalse); - added [s and ]s shortcuts to navigate to previous/next selected entry (thanks to filterfalse); - added [z and ]z shortcuts to navigate to first/last sibling in a tree (thanks to filterfalse); - added zj and zk shortcuts to navigate to next/previous directory sibling in a tree (thanks to filterfalse); - added [c and ]c shortcuts to navigate to previous/next mismatch in directory comparison view (thanks to filterfalse); - added do and dp keys to compare views for applying changes in files (thanks to filterfalse). Menus and dialogs: - added dd key to :jobs menu, which requests cancellation of background operation. Background :put, :copy, :move, :delete, size calculation with ga and gA as well as applications started in background can be cancelled this way (thanks to blurm); - added e key to :jobs menu that displays list of errors issues by that jobs, if any. h key goes back to :jobs menu; - added % key to menu mode, which navigates to [count]-th percent of the list; - added meaning to [count] of cp shortcut, which is now processed as numerical argument for non-recursive `chmod` command (thanks to sudo-nice); - partially return progress report for menus. Was disabled by introduction of null byte heuristic. File operations: - enable restoring files from trash from custom views; - disallow moving/copying/linking files into custom view (put is forbidden, so makes sense to forbid these too); - try harder to move files by not giving up on getting permission error, which isn't always a reliable indication of actual permission error. Only when 'syscalls' is on (thanks to Marcin Kurczewski, a.k.a. rr-). File preview: - view current directory on ".." for quickview/view mode (thanks to filterfalse); - enable cancellation of tree preview construction (thanks to filterfalse); - do not resolve symbolic links in directory preview (thanks to filterfalse). Security: - make temporary rename files accessible only by the user (thanks to aleksejrs). Performance: - improve performance of startup and exit by omitting file existence checks. The cost is possibly old files staying in the state, but it should be for long time (thanks to Marcin Kurczewski, a.k.a. rr-); - improved sorting performance in the presence of huge amount of symbolic links (thanks to Marcin Kurczewski, a.k.a. rr-). Invocation: - don't disable preview on `--remote --select` if it doesn't hide updated pane (thanks to Marcin Kurczewski, a.k.a. rr-); - make +{num} and similar options work (actually affect cursor of the view) (thanks to filterfalse); - treat "+" option the same way as Vim (like :$) (thanks to filterfalse). Scripting: - added v:servername variable, which provides access to server name of the running instance used by --remote feature (thanks to Marcin Kurczewski, a.k.a. rr-); - getpanetype() got new value ("tree") to indicate tree-view (thanks to filterfalse). TUI (Text User Interface): - limited maximum height of message popup, just print how many lines we're skipping; - put hardware cursor according to current mode and cursor within it (thanks to Tyler Spivey); - display path to the conflicting file in conflict resolution dialog; - provide better messages on i/o errors with 'syscalls' (thanks to Behrooz). File filtering: - don't move cursor off "../" before start of local filtering (thanks to filterfalse); - prevent clearing filters on zM if there were no zO preceding it (thanks to sudo-nice). Color schemes: - added CmpMismatch highlight group for highlighting mismatched files on side-by-side comparison. Integration: - added completion scripts for bash and zsh (patches by filterfalse); - escape first tilde in paths that go to the shell (thanks to Marius Schmidl); - resolve symbolic link for listing associated programs from desktop-files (thanks to filterfalse). Vim-plugin: - work around :drop command being disabled in the plugin (thanks to Phil Runninger); - fixed inconsistent behaviour of :EditVifm in plugin with regard to "[No Name]" buffer (thanks to Phil Runninger); - fixed plugin in versions of Vim where :argadd without argument doesn't work (thanks to eco0414). Only on Windows: - use /data/colors as global storage of color schemes on Windows (thanks to r44083); - handle terminal resize on Windows 10 (thanks to randomizedthinking); - properly recover from invalid/strange UNC root on Windows. Don't end up with empty filelist; - fixed use of non-latin characters in environment variables and command-line options (thanks to khaoos-abominable). Important fixes: - fixed redirecting stdout of background commands to /dev/null, which could be unwritable descriptor (thanks to c02y); - fixed possible data loss on moving/copying files over their own parent or child directories via p, P, :move, :copy, :alink and :rlink (thanks to Marius Schmidl); - fixed detection of too-small-terminal state; - fixed treating characters like š and ć (with low Unicode values, just above 0x100) as functional keys on input (thanks to granderil). Other changes: - changed size formatting to round from zero (matches behaviour of e.g. `ls`); - read error output of background commands independently of main thread (prevents blocking of tools which produce huge amount of output) (thanks to Stas Malavin); - no vifminfo merging if file change isn't detected. Might result in faster quitting in some cases. Not accounting for some changes is still possible when multiple instances quit simultaneously, but same could happen without this change; - made search consider trailing slash for directories and symbolic links that point to directories (thanks to filterfalse). See change log for the full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ July 16, 2016 ============= vifm v0.8.2 ----------- This release brings a bit of user-friendliness in form of key suggestions and various descriptions provided in the interface. Matching of files has been extended in many ways and become significantly more powerful than before. Menu mode also got several enhancements. Thanks to everyone who found time to try the beta. Main changes: - key suggestions in the interface on ambiguous input (e.g. "g"); - helpful shortcuts for dialogs (for sort dialog in particular); - key descriptions in :map menus and %z macro for 'statusline' to display some tips; - description of all :commands, 'options' and their values for new multiline version of wildmenu; - ANDing, ORing and negating patterns for matching files and new mime-type matcher; - file prefixes and suffixes can now be multi-byte, which with extended 'classify' option allows specifying "icons" via custom fonts; - search result highlighting, enabled completion and a way to export the list for menus; - an indication of pattern correctness and match state for interactive prompts. - :select and :unselect commands to perform automatic file selection (possibly by using output of external application); - cancellation (handling of Ctrl-C) for quick view and view mode loading. Not sure if it was noticed, but HTTPS protocol is up for related sites since Let's Encrypt started their beta. Everything works fine, so all the links were updated to https protocol. If you ever wondered which keys are builtin for the command (normal) mode of Vifm, this cheatsheet will show you: https://next.vifm.info/cheatsheets.shtml In case you're into using neovim, you might be interesting into checking out alternative Vifm plugin for it: https://github.com/vifm/neovim-vifm More detailed list of changes. Core: - added heuristic that uses null byte as separator for file lists if there is at least one such byte, otherwise normal line separators are used. This affects :[un]select, `vifm -`, %u, %U, %m and %M (thanks to filterfalse); - changed order of initialization to perform autocommands before startup commands on launch. Normal and visual modes: - changed ga/gA effect on parent entry (..) to calculate size of current directory (thanks to aleksejrs). :set command and options: - added 'wildstyle' option to control the way wild menu is displayed. Enables displaying it as a menu with one item per line (thanks to santhoshr and octos); - added 'suggestoptions' option to control displaying of suggestions; - added support of patterns to 'classify' option, so that files can now be decorated based on their names (thanks to elricbk); - added 'cvoptions' option to control when entering/leaving custom views is considered to be equal to entering/leaving directories (thanks to filterfalse); - added "target" sorting key, which sorts files by symbolic link targets (thanks to Marcos Cruz); - added %z 'statusline' macro that inserts text of a short tip picked at random (thanks to qinghao, a.k.a. haobug); - changed type of 'confirm' option. Now it's a set that picks which operations should be confirmed (thanks to Losiara and mvucBmM0); - allow suffixes and prefixes in 'classify' to be of up to eight characters in length (thanks to elricbk). Command-line mode: - added "filelist" parameter to :sync! that enables synchronization of custom view (thanks to filterfalse); - added :select and :unselect commands (thanks to filterfalse, Russell Urquhart and Marcos Cruz); - added negation to patterns with explicitly specified type (surrounded by {} or //). Put exclamation mark to invert pattern match (thanks to Marcos Cruz); - added mime type patterns ([!]) (thanks to Ross Hadden, a.k.a. rosshadden); - added pattern ANDing. Just list decorated patterns one after another and such composite pattern will much when each of them matches (thanks to filterfalse); - added pattern ORing for :file[x]type and :fileviewer commands implemented as a comma-separated list (thanks to filterfalse); - expand environment variables for :edit (thanks to filterfalse); - don't print just table header on `:cabbr something`, print message that no matches found instead; - use original (before custom view) cursor position on :sync! in custom views (thanks to filterfalse). File preview: - added cancellation (handling of Ctrl-C) for quick view and view mode loading (thanks to kalterfive); - skip UTF-8 BOM for file preview. File list: - never add parent entry (..) to very custom view (%U) (thanks to filterfalse); - silently ignore tries to remove parent entry (..) (thanks to aleksejrs); - automatically update custom view entries on rename of their parent directory in the same custom view. Completion: - added completion of :wincmd argument; - do not reset completion on terminal resize; - some corrections of when completion happens for :find and :grep. Scripting: - added chooseopt() builtin function that retrieves various parameters of file choosing (thanks to Von Welch). Menus and dialogs: - added highlighting of search matches in menus; - added :noh[lsearch] command to menu mode; - added quick shortcuts to dialogs (patch by oo-); - added description of builtin keys to :map menus; - added :write command to menus, that writes all menu lines into specified file (thanks to gtors); - a bit better delete confirmation messages with number of files to be deleted; - avoid displaying useless search messages about incorrect pattern during interactive search in menus (those that user can't see, but that are shown in :messages); - enabled wildmenu for menus. TUI (Text User Interface): - added indication of wrong pattern and absence of matches to command-prompt for interactive search/filtering. Angle bracket notation: - display as only at the beginning of key sequence. Color schemes: - added SuggestBox highlight group for key suggestion box. Vim-plugin: - added support for matchit to filetype plugin (patch by filterfalse); - better terminal buffer title for plugin in neovim (thanks to randomizedthinking); - improved syntax highlighting of patterns. Only on Windows: - fixed escaping for cmd.exe again, for :edit and external command invocations (thanks to Reva Revadigar); - fixed querying file information on 64-bit Windows (thanks to santhoshr); - fixed possible crash on displaying job bar (e.g. after :empty) (thanks to Reva Revadigar); - fixed UTF8 <-> UTF16 conversion, which didn't always work (on surrogate characters it seems) (thanks to Reva Revadigar); - fixed possible unexpectedly long timeouts when waiting for a key (due to limitation of pdcurses); - fixed displaying of wide (CJK) characters in pdcurses (thanks to Reva Revadigar); - fixed capturing output of external applications when 'shell' is "cmd". Was broken since v0.8 in an attempt to make cmd work better with Unicode (but its /U flag affects only input and output streams). Packaging: - fixed functioning on architectures on which `char` is unsigned by default (thanks to Ondrej Novy, a.k.a. onovy). Important fixes: - fixed hanging on sudden terminal loss (regression) (thanks to aleksejrs); - fixed using original file names after a prompt for new destination name (thanks to rbong); - fixed unconditional resetting of executable permission when using cp dialog (thanks to Svyatoslav Mishyn, a.k.a. juef); - fixed remote feature on cygwin (thanks to Cosmin Popescu, a.k.a. cosminadrianpopescu); - fixed epic bug in processing selectors followed by other commands in a mapping. Command which accepted selector was called after tail of sequence is processed. Such case isn't very likely, so it probably didn't affect anyone. See change log for the full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ July 02, 2016 ============= vifm v0.8.2 beta testing has started ------------------------------------ This release brings a bit of user-friendliness in form of key suggestions and various descriptions provided in the interface. Matching of files has been extended in many ways and become significantly more powerful than before. Menu mode also got several enhancements. Main changes: - key suggestions in the interface on ambiguous input (e.g. "g"); - helpful shortcuts for dialogs (for sort dialog in particular); - key descriptions in :map menus and %z macro for 'statusline' to display some tips; - description of all :commands, 'options' and their values for new multiline version of wildmenu; - ANDing, ORing and negating patterns for matching files and new mime-type matcher; - file prefixes and suffixes can now be multi-byte, which with extended 'classify' option allows specifying "icons" via custom fonts; - search result highlighting, enabled completion and a way to export the list for menus; - an indication of pattern correctness and match state for interactive prompts. - :select and :unselect commands to perform automatic file selection (possibly by using output of external application); - cancellation (handling of Ctrl-C) for quick view and view mode loading. Not sure if it was noticed, but HTTPS protocol is up for related sites since Let's Encrypt started their beta. Everything works fine, so all the links were updated to https protocol. If you ever wondered which keys are builtin for the command (normal) mode of Vifm, this cheatsheet will show you: https://next.vifm.info/cheatsheets.shtml In case you're into using neovim, you might be interesting into checking out alternative Vifm plugin for it: https://github.com/vifm/neovim-vifm More detailed list of changes. Core: - added heuristic that uses null byte as separator for file lists if there is at least one such byte, otherwise normal line separators are used. This affects :[un]select, `vifm -`, %u, %U, %m and %M (thanks to filterfalse); - changed order of initialization to perform autocommands before startup commands on launch. Normal and visual modes: - changed ga/gA effect on parent entry (..) to calculate size of current directory (thanks to aleksejrs). :set command and options: - added 'wildstyle' option to control the way wild menu is displayed. Enables displaying it as a menu with one item per line (thanks to santhoshr and octos); - added 'suggestoptions' option to control displaying of suggestions; - added support of patterns to 'classify' option, so that files can now be decorated based on their names (thanks to elricbk); - added 'cvoptions' option to control when entering/leaving custom views is considered to be equal to entering/leaving directories (thanks to filterfalse); - added "target" sorting key, which sorts files by symbolic link targets (thanks to Marcos Cruz); - added %z 'statusline' macro that inserts text of a short tip picked at random (thanks to qinghao, a.k.a. haobug); - changed type of 'confirm' option. Now it's a set that picks which operations should be confirmed (thanks to Losiara and mvucBmM0); - allow suffixes and prefixes in 'classify' to be of up to eight characters in length (thanks to elricbk). Command-line mode: - added "filelist" parameter to :sync! that enables synchronization of custom view (thanks to filterfalse); - added :select and :unselect commands (thanks to filterfalse, Russell Urquhart and Marcos Cruz); - added negation to patterns with explicitly specified type (surrounded by {} or //). Put exclamation mark to invert pattern match (thanks to Marcos Cruz); - added mime type patterns ([!]) (thanks to Ross Hadden, a.k.a. rosshadden); - added pattern ANDing. Just list decorated patterns one after another and such composite pattern will much when each of them matches (thanks to filterfalse); - added pattern ORing for :file[x]type and :fileviewer commands implemented as a comma-separated list (thanks to filterfalse); - expand environment variables for :edit (thanks to filterfalse); - don't print just table header on `:cabbr something`, print message that no matches found instead; - use original (before custom view) cursor position on :sync! in custom views (thanks to filterfalse). File preview: - added cancellation (handling of Ctrl-C) for quick view and view mode loading (thanks to kalterfive); - skip UTF-8 BOM for file preview. File list: - never add parent entry (..) to very custom view (%U) (thanks to filterfalse); - silently ignore tries to remove parent entry (..) (thanks to aleksejrs); - automatically update custom view entries on rename of their parent directory in the same custom view. Completion: - added completion of :wincmd argument; - do not reset completion on terminal resize; - some corrections of when completion happens for :find and :grep. Scripting: - added chooseopt() builtin function that retrieves various parameters of file choosing (thanks to Von Welch). Menus and dialogs: - added highlighting of search matches in menus; - added :noh[lsearch] command to menu mode; - added quick shortcuts to dialogs (patch by oo-); - added description of builtin keys to :map menus; - added :write command to menus, that writes all menu lines into specified file (thanks to gtors); - a bit better delete confirmation messages with number of files to be deleted; - avoid displaying useless search messages about incorrect pattern during interactive search in menus (those that user can't see, but that are shown in :messages); - enabled wildmenu for menus. TUI (Text User Interface): - added indication of wrong pattern and absence of matches to command-prompt for interactive search/filtering. Angle bracket notation: - display as only at the beginning of key sequence. Color schemes: - added SuggestBox highlight group for key suggestion box. Vim-plugin: - better terminal buffer title for plugin in neovim (thanks to randomizedthinking); - improved syntax highlighting of patterns. Only on Windows: - fixed escaping for cmd.exe again, for :edit and external command invocations (thanks to Reva Revadigar); - fixed querying file information on 64-bit Windows (thanks to santhoshr); - fixed possible crash on displaying job bar (e.g. after :empty) (thanks to Reva Revadigar); - fixed UTF8 <-> UTF16 conversion, which didn't always work (on surrogate characters it seems) (thanks to Reva Revadigar); - fixed possible unexpectedly long timeouts when waiting for a key (due to limitation of pdcurses); - fixed displaying of wide (CJK) characters in pdcurses (thanks to Reva Revadigar); - fixed capturing output of external applications when 'shell' is "cmd". Was broken since v0.8 in an attempt to make cmd work better with Unicode (but its /U flag affects only input and output streams). Packaging: - fixed functioning on architectures on which `char` is unsigned by default (thanks to Ondrej Novy, a.k.a. onovy). Important fixes: - fixed hanging on sudden terminal loss (regression) (thanks to aleksejrs); - fixed using original file names after a prompt for new destination name (thanks to rbong); - fixed unconditional resetting of executable permission when using cp dialog (thanks to Svyatoslav Mishyn, a.k.a. juef); - fixed remote feature on cygwin (thanks to Cosmin Popescu, a.k.a. cosminadrianpopescu); - fixed epic bug in processing selectors followed by other commands in a mapping. Command which accepted selector was called after tail of sequence is processed. Such case isn't very likely, so it probably didn't affect anyone. See change log for the full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ February 10, 2016 ================= vifm v0.8.1a ------------ This is a bugfix release to primarily address messed up single-executable builds for Windows. Tab completion doesn't work there and can cause crashes. Also 64-bit build somehow contains 32-bit executables. Thanks to Reva Revadigar for reporting the issue. On the bright side, this gives a chance for fixing bugs discovered after the release. There was also time to add some functional changes, which also made it into this release: - added c key to menus that inserts parts of menu line into command-line (thanks to filterfalse); - added { and } keys to normal and visual modes. They act similar to ( and), but always consider whether entry is a file or directory (thanks to octos); - added --disable-build-timestamp option to configure script to perform reproducible build (thanks to Hendrik Jaeger, a.k.a. henk); - apply local filter on picking element of `:history filter` menu; - handle register specified for gs normal mode command. Select files listed in that register (thanks to filterfalse); - be consistent with regard to when local state is changed and do not reset neither local options nor local filter on entering/leaving custom view (thanks to filterfalse); - disallow adding duplicated filetype/fileviewer entries (just ignore them as they wouldn't be used due to order priority anyway). Other notable fixes: - fixed storing filetypes in vifminfo, which could create duplicates (thanks to aleksejrs); - fixed --with-dyn-x11 configuration option, which failed to enable dynamic use of the library (thanks to Badalisc and Hendrik Jaeger, a.k.a. henk); - fixed using plugin in neovim, which has broken `system()` and :! commands (thanks to Artur Shaik, a.k.a. artur-shaik). See change log for the full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ January 17, 2016 ================ vifm v0.8.1 ----------- New minor version delivers primarily various small improvements of different kinds. There is also improvement of navigation via named bookmarks (or tags), which can ease keeping track of what is where, and an ability to apply settings to specific directories or sub-trees (via combination of autocommands and local options). Thanks to everyone who was reporting issues during beta period. Main changes: - added local options, which work until directory change; - added named bookmarks (paths are associated with tags); - added autocommands (with DirEnter event); - added ability to sort by regexp-extracted part of file name; - added builtin directory preview (similar to `tree`); - added a way to communicate menu contents to Vim quickfix; - added "more" mode that is used to handle status bar content that doesn't fit on the screen; - IPC got new (safe) implementation with listing/targeting of active instances, it's enabled by default again; - updating local view settings from vifmrc now affects both panes (:windo is not necessary); - more predictive cursor updates on directory reload; - improvements related to expression and command parsing. More detailed list of changes. Command-line mode: - added :setl[ocal] and :setg[lobal] commands to manage values of local options that are specific to current directory and are reset on directory change, similar to local options of Vim; - added :pu[t] command that inserts files into current directory (thanks to mvucBmM0); - added :winc[md] command-line command (thanks to fogine); - added exclamation mark to :shell to suppress spawning new teminal multiplexer pane (patch by Cosmin Popescu, a.k.a. cosminadrianpopescu). :set command and options: - added :set foo+=bar syntax for string options (append value); - added 'deleteprg' option, which specifies program to run on files that are permanently removed; - added 'dirsize' option to control how size of directories is displayed in file views. This enables one to see number of files in a directory rather than its size (thanks to Martin Fischer); - added optional %u and %U macros to 'findprg', 'grepprg', and 'locateprg' that allow immediate redirection of command output into custom view without opening a menu (thanks to filterfalse); - added 'iooptions' option to configure file system operations. Contains only "fastfilecloning" for btrfs so far (thanks to aleksejrs); - added special treatment for "*" as value of 'slowfs', which might be useful in case of very slow handling of requests to mounts enumeration (patch by Cosmin Popescu, a.k.a. cosminadrianpopescu); - added handling of "%u" in trash specification on *nix, which is replaced with real user ID (thanks to Regis); - allow 'shell' to specify a shell argument on *nix (thanks to loongw); - added 'sortgroups' option and "groups" sorting key, which allow sorting by parts of file names (thanks to aleksejrs); - added 'title' option to control whether title of terminal should be set. Enabled by default if old title can be restored (thanks to Svyatoslav Mishyn, a.k.a. juef); - make "p" in 'tuioptions' affect padding in quick view and view mode; - changed 'fusehome' default from temporary directory to data directory (that is $XDG_DATA_HOME/.local/share/fuse/ or $VIFM/fuse/ depending on which parent directory exists, the second one exists by definition, but first might not) (thanks to aleksejrs and to Hendrik Jaeger, a.k.a. henk); - changed default value of 'trashdir' on *nix again, this time to "%r/.vifm-Trash-%u,$VIFM/Trash,%r/.vifm-Trash". This way it's safer for privacy, although using %r is not very safe in general (thanks to Regis). Configuration: - make :set, :filter and :normal zo (and alike) in vifmrc affect all views, thus obsoleting use of :winrun or :windo for this purpose (they still work, the new way is a simpler and more obvious one). This is related to commands executed during vifmrc processing (not those in the right-hand side of mappings, commands, etc.); - automatically create ~/.vifm/scripts containing small README file if the directory doesn't exist on startup (thanks to fogine). Core: - added autocommands (DirEnter event and :au[tocmd] command) (thanks to filterfalse). File operations: - added retry/ignore/abort prompt for file/directory removal when 'syscalls' is on (thanks to Robert Sarkozi); - make use of file cloning feature of btrfs when possible and enabled in 'iooptions' (thanks to aleksejrs); - preserve file timestamps on copying files with 'syscalls' on (thanks to mvucBmM0); - employ inotify on GNU/Linux for more precise watching directories for changes; - copy timestamps and permissions on merging directories (thanks to willemw12). Navigation: - added named bookmarks (paths are associated with tags). This adds :bmark, :bmarks, :bmgo and :delbmarks command-line commands. Also there is new "bmarks" value for 'vifminfo' (thanks to Schmalzhaf Stefan). Normal and visual modes: - accept [count] for "h" and "gh"; - added zr normal mode key to reset local filter (thanks to filterfalse); - ctrl-W | and Ctrl-W _ now can set window size to given count (thanks to filterfalse). Key bindings: - remapping of builtin keys that are followed by selectors (e.g. `:nnoremap d y`) (thanks to mvucBmM0). Color schemes: - changed default colorscheme to invert colors of the current line. Documentation: - documented %= for 'statusline' and 'rulerformat'; - make --select option more prominent in documentation (thanks to Svyatoslav Mishyn, a.k.a. juef); - documented difference between paths in menu with and without trailing slash (thanks to filterfalse). Macros: - added %pc macro that splits preview command in two pices: preview command and clear command (thanks to Tomek K., a.k.a. TomiCode). Menus and dialogs: - added B key to menus, which acts like b, but creates unsorted (very custom) view (thanks to filterfalse); - added "v" key to menu mode that loads current contents into quickfix list of editor (Vim compatible one is assumed) (thanks to filterfalse); - added handling of dd in :trashes, :trashes? and :lstrashes, which either deletes an item in trash or empties trash (thanks to Svyatoslav Mishyn, a.k.a. juef); - somewhat more informative error titles on issues during file operations; - provide conflict resolution options in a dialog rather than on the command-line, which is hard to read with so many options; - expand "~" in menus on navigation. Packaging: - removed vifmrc-converter. It's been around for four years and not needed any more (thanks to filterfalse); - removed contents of autoconf.sh, autoreconf covers what was there (there is a notice in that script now about it just in case) (thanks to Hendrik Jaeger, a.k.a. henk); - added --with-sanitize=basic|thread|leak option to configure script; - added missing script that's necessary for %s macro in GNU screen. Was lost for a long time; - work around compilation on systems where MAX_ARG_STRLEN is defined, but unusable (thanks to Marcin Juszkiewicz, a.k.a. hrw, Michel Normand and Michael Vetter, a.k.a. jubalh); - put right-hand side of user-defined commands into separate scope of if-else-endif expressions. This prevents affecting of regular input by malformed user-defined command. Scripting: - added :elseif command (thanks to filterfalse); - added &option syntax for :let command; - added && and || operators to expression parser (thanks to filterfalse); - added getpanetype() builtin function that retrieves type of current pane (thanks to filterfalse); - added layoutis() builtin function that answers queries about current interface configuration (thanks to fogine); - added paneisat() builtin function that answers queries about current pane position (thanks to fogine); - added inline comments to allow less verbose commenting in configuration; - rewrote expression parser to prevent side-effects from occurring until syntax is checked. TUI (Text User Interface): - added match numbers to search messages on status bar (patch by Cosmin Popescu, a.k.a. cosminadrianpopescu); - added dynamic view column alignment (specified by "*", just like "-" for left alignment) (patch by Cosmin Popescu, a.k.a. cosminadrianpopescu); - added "more" mode that is used to handle status bar content that doesn't fit on the screen (thanks to Bruce Hunsaker, a.k.a. hunsakerbn, and Svyatoslav Mishyn, a.k.a. juef); - added builtin directory preview (thanks to Damian Ariel Perticone and Alexandre Viau); - added "fileext" sorting key, which sorts files by extensions and directories by name (patch by Cosmin Popescu, a.k.a. cosminadrianpopescu); - added "nitems" sorting, which sorts by number of items in a directory (thanks to filterfalse); - added "nlinks" sorting key to display number of hard links to a file on *nix systems (thanks to filterfalse); - normalize surrounding spaces in menu and dialog titles; - lower minimum supported terminal width and height from 30x10 to 20x5; - update cursor position on file disappearing in more predictable way. Use the closes file to the previously active one that still exists (thanks to ranousse); - display lower bound on item count in status bar progress messages (e.g. on :grep). Important fixes: - assume UTF-8 sequences can be broken (thanks to Svyatoslav Mishyn, a.k.a. juef); - made setting title inside terminal multiplexers (when terminal type is "screen*") work; - check file system sensitivity on OS X (thanks to loongw); - fixed startup on Windows 10 (thanks to th1rdey3 and Robert Sarkozi); - fixed swapped absolute/relative link creation on :alink/:rlink commands (patch by MadMaverick9); - multiple fixes for custom views (thanks to filterfalse); - more careful treating of files with colons in their names for menus and custom views (thanks to aleksejrs); - fixed ranges for :yank, 0.8 regression (thanks to Marius Schmidl); - fixed crash on copy-like operations that move several files into subdirectory of another view (thanks to Marius Schmidl); - fixed creation of intermediate directories on merging directories (thanks to willemw12). Vim-plugin: - added set of :*Vim commands to vifm run from Vim plugin, which overrule initial :*Vifm command behaviour (thanks to Ross Hadden, a.k.a. rosshadden); - changed plugin to do not depend on location of vifm. g:vifm_home is ignored from now on (thanks to aleksejrs). Only on Windows: - display directory size on Windows more correctly; - improvements in running commands with special characters and/or spaces (thanks to Stas Malavin). Other changes: - added handling of "-" command-line argument specified in place of directory path as instruction to read list of files from stdin; - added --server-list and --server-name command-line options that enumerates names of currently running vifm servers and sets name of target/this instance respectively; - added optional argument for --logging parameter that specifies path to startup log (thanks to Cosmin Popescu, a.k.a. cosminadrianpopescu); - invalidate directory size (calculated via ga/gA) if noticed that directory was changed. This affects all parent directories as well, way easier to see what needs recalculation after file moving/removal; - warn about --remote command being disabled at build-time (thanks to Svyatoslav Mishyn, a.k.a. juef); - do not finish argument parsing after finding --help or --version, continue and validate the rest of command-line (thanks to Svyatoslav Mishyn, a.k.a. juef); - display incomplete file name on rename instead of failing with error on Unicode conversion issues. See change log for the full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ January 02, 2016 ================ vifm v0.8.1 beta testing has started ------------------------------------ New minor version delivers primarily various small improvements of different kinds. There is also improvement of navigation via named bookmarks (or tags), which can ease keeping track of what is where, and an ability to apply settings to specific directories or sub-trees (via combination of autocommands and local options). The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Main changes: - added local options, which work until directory change; - added named bookmarks (paths are associated with tags); - added autocommands (with DirEnter event); - added ability to sort by regexp-extracted part of file name; - added builtin directory preview (similar to `tree`); - added a way to communicate menu contents to Vim quickfix; - IPC got new (safe) implementation with listing/targeting of active instances, it's enabled by default again; - updating local view settings from vifmrc now affects both panes (:windo is not necessary); - more predictive cursor updates on directory reload; - improvements related to expression and command parsing. More detailed list of changes. Command-line mode: - added :setl[ocal] and :setg[lobal] commands to manage values of local options that are specific to current directory and are reset on directory change, similar to local options of Vim; - added :pu[t] command that inserts files into current directory (thanks to mvucBmM0); - added :winc[md] command-line command (thanks to fogine); - added exclamation mark to :shell to suppress spawning new teminal multiplexer pane (patch by Cosmin Popescu, a.k.a. cosminadrianpopescu). :set command and options: - added :set foo+=bar syntax for string options (append value); - added 'deleteprg' option, which specifies program to run on files that are permanently removed; - added 'dirsize' option to control how size of directories is displayed in file views. This enables one to see number of files in a directory rather than its size (thanks to Martin Fischer); - added optional %u and %U macros to 'findprg', 'grepprg', and 'locateprg' that allow immediate redirection of command output into custom view without opening a menu (thanks to filterfalse); - added 'iooptions' option to configure file system operations. Contains only "fastfilecloning" for btrfs so far (thanks to aleksejrs); - added special treatment for "*" as value of 'slowfs', which might be useful in case of very slow handling of requests to mounts enumeration (patch by Cosmin Popescu, a.k.a. cosminadrianpopescu); - added handling of "%u" in trash specification on *nix, which is replaced with real user ID (thanks to Regis); - allow 'shell' to specify a shell argument on *nix (thanks to loongw); - added 'sortgroups' option and "groups" sorting key, which allow sorting by parts of file names (thanks to aleksejrs); - make "p" in 'tuioptions' affect padding in quick view and view mode; - changed 'fusehome' default from temporary directory to data directory (that is $XDG_DATA_HOME/.local/share/fuse/ or $VIFM/fuse/ depending on which parent directory exists, the second one exists by definition, but first might not) (thanks to aleksejrs and to Hendrik Jaeger, a.k.a. henk); - changed default value of 'trashdir' on *nix again, this time to "%r/.vifm-Trash-%u,$VIFM/Trash,%r/.vifm-Trash". This way it's safer for privacy, although using %r is not very safe in general (thanks to Regis). Configuration: - make :set, :filter and :normal zo (and alike) in vifmrc affect all views, thus obsoleting use of :winrun or :windo for this purpose (they still work, the new way is a simpler and more obvious one). This is related to commands executed during vifmrc processing (not those in the right-hand side of mappings, commands, etc.); - automatically create ~/.vifm/scripts containing small README file if the directory doesn't exist on startup (thanks to fogine). Core: - added autocommands (DirEnter event and :au[tocmd] command) (thanks to filterfalse). File operations: - added retry/ignore/abort prompt for file/directory removal when 'syscalls' is on (thanks to Robert Sarkozi); - make use of file cloning feature of btrfs when possible and enabled in 'iooptions' (thanks to aleksejrs); - preserve file timestamps on copying files with 'syscalls' on (thanks to mvucBmM0); - employ inotify on GNU/Linux for more precise watching directories for changes. Navigation: - added named bookmarks (paths are associated with tags). This adds :bmark, :bmarks, :bmgo and :delbmarks command-line commands. Also there is new "bmarks" value for 'vifminfo' (thanks to Schmalzhaf Stefan). Normal and visual modes: - accept [count] for "h" and "gh"; - added zr normal mode key to reset local filter (thanks to filterfalse); - ctrl-W | and Ctrl-W _ now can set window size to given count (thanks to filterfalse). Key bindings: - remapping of builtin keys that are followed by selectors (e.g. `:nnoremap d y`) (thanks to mvucBmM0). Color schemes: - changed default colorscheme to invert colors of the current line. Documentation: - documented %= for 'statusline' and 'rulerformat'; - make --select option more prominent in documentation (thanks to Svyatoslav Mishyn, a.k.a. juef); - documented difference between paths in menu with and without trailing slash (thanks to filterfalse). Macros: - added %pc macro that splits preview command in two pices: preview command and clear command (thanks to Tomek K., a.k.a. TomiCode). Menus and dialogs: - added B key to menus, which acts like b, but creates unsorted (very custom) view (thanks to filterfalse); - added "v" key to menu mode that loads current contents into quickfix list of editor (Vim compatible one is assumed) (thanks to filterfalse); - added handling of dd in :trashes, :trashes? and :lstrashes, which either deletes an item in trash or empties trash (thanks to Svyatoslav Mishyn, a.k.a. juef); - somewhat more informative error titles on issues during file operations; - provide conflict resolution options in a dialog rather than on the command-line, which is hard to read with so many options; - expand "~" in menus on navigation. Packaging: - removed vifmrc-converter. It's been around for four years and not needed any more (thanks to filterfalse); - removed contents of autoconf.sh, autoreconf covers what was there (there is a notice in that script now about it just in case) (thanks to Hendrik Jaeger, a.k.a. henk); - added --with-sanitize=basic|thread|leak option to configure script; - added missing script that's necessary for %s macro in GNU screen. Was lost for a long time; - work around compilation on systems where MAX_ARG_STRLEN is defined, but unusable (thanks to Marcin Juszkiewicz, a.k.a. hrw, Michel Normand and Michael Vetter, a.k.a. jubalh); - put right-hand side of user-defined commands into separate scope of if-else-endif expressions. This prevents affecting of regular input by malformed user-defined command. Scripting: - added :elseif command (thanks to filterfalse); - added &option syntax for :let command; - added && and || operators to expression parser (thanks to filterfalse); - added getpanetype() builtin function that retrieves type of current pane (thanks to filterfalse); - added layoutis() builtin function that answers queries about current interface configuration (thanks to fogine); - added paneisat() builtin function that answers queries about current pane position (thanks to fogine); - added inline comments to allow less verbose commenting in configuration; - rewrote expression parser to prevent side-effects from occurring until syntax is checked. TUI (Text User Interface): - added match numbers to search messages on status bar (patch by Cosmin Popescu, a.k.a. cosminadrianpopescu); - added dynamic view column alignment (specified by "*", just like "-" for left alignment) (patch by Cosmin Popescu, a.k.a. cosminadrianpopescu); - added "more" mode that is used to handle status bar content that doesn't fit on the screen (thanks to Bruce Hunsaker, a.k.a. hunsakerbn, and Svyatoslav Mishyn, a.k.a. juef); - added builtin directory preview (thanks to Damian Ariel Perticone and Alexandre Viau); - added "fileext" sorting key, which sorts files by extensions and directories by name (patch by Cosmin Popescu, a.k.a. cosminadrianpopescu); - added "nitems" sorting, which sorts by number of items in a directory (thanks to filterfalse); - added "nlinks" sorting key to display number of hard links to a file on *nix systems (thanks to filterfalse); - normalize surrounding spaces in menu and dialog titles; - lower minimum supported terminal width and height from 30x10 to 20x5; - update cursor position on file disappearing in more predictable way. Use the closes file to the previously active one that still exists (thanks to ranousse); - display lower bound on item count in status bar progress messages (e.g. on :grep). Important fixes: - assume UTF-8 sequences can be broken (thanks to Svyatoslav Mishyn, a.k.a. juef); - made setting title inside terminal multiplexers (when terminal type is "screen*") work; - check file system sensitivity on OS X (thanks to loongw); - fixed startup on Windows 10 (thanks to th1rdey3 and Robert Sarkozi); - fixed swapped absolute/relative link creation on :alink/:rlink commands (patch by MadMaverick9); - multiple fixes for custom views (thanks to filterfalse); - more careful treating of files with colons in their names for menus and custom views (thanks to aleksejrs); - fixed ranges for :yank, 0.8 regression (thanks to Marius Schmidl); - fixed crash on copy-like operations that move several files into subdirectory of another view (thanks to Marius Schmidl); - fixed creation of intermediate directories on merging directories (thanks to willemw12). Vim-plugin: - added set of :*Vim commands to vifm run from Vim plugin, which overrule initial :*Vifm command behaviour (thanks to Ross Hadden, a.k.a. rosshadden); - changed plugin to do not depend on location of vifm. g:vifm_home is ignored from now on (thanks to aleksejrs). Only on Windows: - display directory size on Windows more correctly; - improvements in running commands with special characters and/or spaces (thanks to Stas Malavin). Other changes: - added handling of "-" command-line argument specified in place of directory path as instruction to read list of files from stdin; - added --server-list and --server-name command-line options that enumerates names of currently running vifm servers and sets name of target/this instance respectively; - added optional argument for --logging parameter that specifies path to startup log (thanks to Cosmin Popescu, a.k.a. cosminadrianpopescu); - invalidate directory size (calculated via ga/gA) if noticed that directory was changed. This affects all parent directories as well, way easier to see what needs recalculation after file moving/removal; - warn about --remote command being disabled at build-time (thanks to Svyatoslav Mishyn, a.k.a. juef); - do not finish argument parsing after finding --help or --version, continue and validate the rest of command-line (thanks to Svyatoslav Mishyn, a.k.a. juef); - display incomplete file name on rename instead of failing with error on Unicode conversion issues. See change log for the full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ July 09, 2015 ============= vifm v0.8 --------- New version brings several useful improvements of different kinds. The most substantial addition is custom views that allow one to combine files from several directories in one view, which in turn enables processing of search/grep/etc. results similar to handling contents of a regular directory. Thanks to everyone who was reporting issues during beta period. Also reminding about #vifm@Freenode IRC channel, color schemes preview at http://vifm.info/colorschemes.shtml and introducing http://q2a.vifm.info Q&A site for general usage questions. Main changes: - added filename specific highlight (with a script to convert ls options); - added custom views, which contrary to regular views can contain files that do not belong to the same directory; - added job bar to display active backgrounded file operations; - added command-line mode abbreviations; - added global configuration and color schemes directory; - added live search match highlighting; - added optional per-file progress for file operations; - added full path patterns ({{globs}} and //regexp//); - added command-line options to control file/directory selection and selection processing to make it easier to use vifm as a file picker; - color schemes got ".vifm" extension, but the old-style names will still work for now; - XDG specification support; - ability to use terminal applications to preview graphics (e.g. w3mimgdisplay). File operations: - added per-file overwrite confirmation on directory merging (thanks to willemw12); - added detailed list of errors when 'syscalls' is used (thanks to willemw12). Key bindings: - added F key to less-like (file view) mode, which acts similar to `tail -F` or F key in less (thanks to Daniel Dettlaff, a.k.a. dmilith); - added b key to menu mode that creates custom view filled with menu items filtering out those that are not paths; - added zd normal and visual modes key to exclude items from custom views; - optional per-file progress in dialog mode activated by hitting "i" while operation is being performed. :set command and options: - added 'chaselinks' option to automatically expand all symbolic links in path of a view (might not work on Windows) (thanks to filterfalse); - added 'mintimeout' option. It enables controlling responsiveness on external events by Vifm (thanks to hofheinz); - added 'wordchars' option to specify which characters in command-line mode should be considered as part of a word (thanks to filterfalse); - added ^= operation for charset options; - added %[ and %] macros for 'statusline'/'ruler' (thanks to ranousse); - added "p" to 'shortmess' option to control tilde shortening of path in view titles (thanks to Martin Fischer); - changed default value of 'trashdir' from "$VIFM/Trash" to "%r/.vifm-Trash,$VIFM/Trash" (thanks to Joseph LP, a.k.a. ootput); - normalized sorting keys/view column names: "type" -> "dir", display real mode in octal for "mode", make "type" actually display file type (as "mode" did before) (thanks to Michal Belica, a.k.a. beli-sk); - united last pattern of :substitute command with search history (thanks to filterfalse). Command-line mode: - added :highlight {pattern} for filename specific highlight (thanks to Ink, a.k.a. inknoir, filterfalse and Michael Maddern, a.k.a. madders); - added :cabbrev, :cnoreabbrev and :cunabbrev commands to manage command-line mode abbreviations (thanks to filterfalse); - added Ctrl-X / (slash) key to that inserts last search pattern into current cursor position (thanks to filterfalse); - added Ctrl-] key to trigger abbreviation expansion; - added single-argument form of :file[x]type and :fileviewer commands that lists (in menu mode) currently registered patterns that match specified file name; - added :cq[uit] command to exit with non-zero exit code and also abort directory choosing (thanks to Jeet Sukumaran, a.k.a. jeetsukumaran); - added :trashes? to display sizes of each non-empty trash directories (thanks to Svyatoslav Mishyn, a.k.a. juef); - added regexp patterns to :file[x]type and :fileviewer commands (thanks to filterfalse); - added :redr[aw] command to force immediate redraw (thanks to filterfalse); - allow non-printable characters to be arguments of :commands (thanks to filterfalse); - extended :sync command to support selective synchronization (user can choose among location, cursor position, local options and filters) (thanks to filterfalse). Completion: - complete `clear` subcommand of :highlight. Angle bracket notation: - added angle bracket notation (less-than character, '<') (thanks to filterfalse); - map and to different key codes (thanks to fogine). This is caused by inconsistency among terminals, map to both keys and it should work everywhere. Macros: - added %px, %py, %pw and %ph macros that describe location and dimensions of preview area to use in external commands (thanks to Stephano, a.k.a. cao); - added %u and %U macros to redirect command output directly into custom view. The second one allows for more customization of file list, which is absence of sorting for now (thanks to filterfalse); - no more unjustified inconsistency in processing macros in :! and :file[x]type commands (thanks to Miodrag Tokić, a.k.a. loonies). Scripting: - added system() builtin function that executes command via shell and returns its output; - added full path patterns ({{globs}} and //regexp//) (thanks to astrell); - report error on wrong expression in :if statement and misplaced :else/:endif on file sourcing. Color scheme: - added JobLine highlight group for the job bar. Configuration: - added fallback to use "XDG Base Directory Specification" when failed to find configuration in other places (thanks to Miodrag Tokić, a.k.a. loonies); - added global configuration {prefix}/etc/vifm/vifmrc and color schemes {prefix}/etc/vifm/colors/* (thanks to astrell and Michael Vetter, a.k.a. jubalh). Performance: - significantly reduced amount of work performed by Vifm in idle state (thanks to hofheinz); - quit fast on --help/--version (thanks to Svyatoslav Mishyn, a.k.a. juef); - throw away dead directories in directory histories on merging vifminfo files. Otherwise clearing such directories on :history is almost useless. Menus and dialogs: - added handling of Ctrl-L to sort dialog (thanks to filterfalse); - added device id (major and minor numbers) to file info dialog; - made calculation of directory size visible in :jobs menu; - parse output of mandoc version of apropos in :apropos (thanks to Svyatoslav Mishyn, a.k.a. juef); - display RFC 2822 date without time zon in file info (thanks to Svyatoslav Mishyn, a.k.a. juef). TUI (Text User Interface): - added search match highlighting for file names (thanks to Svyatoslav Mishyn, a.k.a. juef, and willemw12); - added job bar that displays backgrounded file operations if any (thanks to geo909); - redraw UI on resize during file operation when 'syscalls' is set; - redraw UI on resize when dialog is active; - dynamic dialog dimensions (minimum %30 percent of the screen rather than screen-wide all the time) (thanks to Svyatoslav Mishyn, a.k.a. juef); - auto-resize position field on the status bar to fit the text (thanks to ranousse); - append unused space in view columns to the last one with percent sizing type if any (thanks to fogine). Documentation: - manual page fixes/improvements (thanks to Svyatoslav Mishyn, a.k.a. juef); - wrapped option names with single quotes in the man page to make it easier to search for options by their names. Packaging: - added one more light color scheme to assets (in two variations astrell-root and astrell-user) (thanks to astrell); - added lookup for mandoc on *nix to perform manual page to plain text transformation (thanks to Svyatoslav Mishyn, a.k.a. juef); - added OS X version of sample vifmrc file. Now this one will be used on first run on OS X (thanks to Larry Hynes, a.k.a. larryhynes); - added dircolors -> vifm conversion script (thanks to Ink, a.k.a. inknoir, Hendrik Jaeger, a.k.a. henk, and Michael Maddern, a.k.a. madders); - added .vifm extension to color schemes (initial rename is performed automatically) (thanks Michael Vetter, a.k.a. jubalh); - added script to update timestamps, so that build system won't be regenerated without real reason. One might want to run it when building from git checkout, which doesn't preserve correct timestamps; - install AUTHORS, COPYING, ChangeLog, INSTALL, NEWS, README and TODO to {prefix}/share/doc/vifm. Install color schemes to {prefix}/share/vifm/colors. Otherwise these are not available after installation; - made configure script lookup curs_set in libtinfo; - moved checks for build-time tools existence from Makefile to configure script; - made tests less dependent on environment (thanks to Hendrik Jaeger, a.k.a. henk). Only on Windows: - automatically install sample vifmrc and help file on first start; - switch to utf-8 internal representation of paths. This fixes issues when file name encoding doesn't match system encoding (thanks to Stas Panteleev). Important fixes: - fixed undesired file removal on overwriting them with themselves (data loss after confirmation of overwriting files when destination matches source) (thanks to Сергей Соловьёв (Sergej Soloviov)); - fixed crash on navigation to end of line in command-line mode (thanks to Christian Fillion, a.k.a. cfillion); - fixed `:help` (no arguments) when 'vimhelp' is on and automatically installed Vim documentation is used (thanks to ranousse); - better handling of case related operations; - fixed ":vs .." which used to use wrong base directory; - fixed assertion on including "type" in 'viewcolumns' value (thanks to Michal Belica, a.k.a. beli-sk); - better FUSE handling on OS X (thanks to Michael Maddern, a.k.a. madders); - fixed (deep) directory merging (thanks to willemw12); - fixed build and work on OpenBSD (at least to some degree that curses implementation there allows). There might be some troubles with non-ascii characters (thanks to hofheinz and Brian Callahan, a.k.a. ibara); - fixed copying of fifo, socket and device files with 'syscalls' enabled. Thanks to Svyatoslav Mishyn (a.k.a. juef). Vim-plugin: - added K mapping to Vim plugin (quick navigation to documentation, e.g. from vifmrc). Patch by filterfalse. Other changes: - added --delimiter command-line option. Configures delimiter string on writing out list of paths (like on `-f` switch) (thanks to Jeet Sukumaran, a.k.a. jeetsukumaran); - added --choose-files and --choose-dir command-line switches to specify output location for names of selected files or last visited directory respectively (thanks to Jeet Sukumaran, a.k.a. jeetsukumaran); - added --on-choose command-line switch to execute a command on selection rather than opening it (thanks to Ross Hadden, a.k.a. rosshadden); - added %FOREGROUND FUSE mounting option, which supersedes %CLEAR and fixes issue with passing input to FUSE mounter (thanks to Johannes, a.k.a. johannesmeng); - removed per-view last search pattern. Don't worry, you probably won't even notice it: this doesn't affect regular use case, rather more exotic one, which is hard to notice; - better handling or unexpectedly unavailable directories on startup and while running (thanks to willemw12); - define $VIFM_FUSE_FILE environment variable for external commands to communicate path to file used to initiate FUSE mounting of directory we're in (thanks to astrell); - allowed having multiple file viewers with same rules for choosing them at run-time as for file associations (thanks to filterfalse); - redirect both standard output and error streams from viewers (already was the case for Windows); - handle commands that are too long to be passed directly to the shell by breaking them into list of arguments if possible (thanks to filterfalse). See change log for full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ June 19, 2015 ============= vifm v0.8 beta testing has started ---------------------------------- New version brings several useful improvements of different kinds. The most substantial addition is custom views that allow one to combine files from several directories in one view, which in turn enables processing of search/grep/etc. results similar to handling contents of a regular directory. That change alone affected internal structure quite seriously which combined with operations on system calls from the previous release distant new version far enough from 0.7 to name it 0.8. Version change also gives one a moral right to introduce incompatible changes. So if anyone remembers me postponing changing defaults or something like that and is still waiting on it, please send a reminder (unfortunately I was careless enough to didn't make detailed list of such things). As of now the following items are under evaluation: - removing "options", "filetypes", "commands" from 'vifminfo' option (not a big deal, but it's not really useful as well, and maybe potentially harmful); - removing 'trash' option as it effectively affects quite a lot things and is better to be enabled; - have 'hlsearch' off by default as normally search doesn't select anything and user can accidentally run some operation on too many files with default setup. Please see the README file in packages for links where feedback can be provided. The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Main changes: - added filename specific highlight; - added custom views, which contrary to regular views can contain files that do not belong to the same directory; - added job bar to display active backgrounded file operations; - added command-line mode abbreviations; - added global configuration and color schemes directory; - added live search match highlighting; - added optional per-file progress for file operations; - added full path patterns ({{globs}} and //regexp//); - added command-line options to control file/directory selection and selection processing to make it easier to use vifm as a file picker; - color schemes got ".vifm" extension, but the old-style names will still work for now; - XDG specification support. File operations: - added per-file overwrite confirmation on directory merging (thanks to willemw12); - added detailed list of errors when 'syscalls' is used (thanks to willemw12). Key bindings: - added F key to less-like (file view) mode, which acts similar to `tail -F` or F key in less (thanks to Daniel Dettlaff, a.k.a. dmilith); - added b key to menu mode that creates custom view filled with menu items filtering out those that are not paths; - added zd normal and visual modes key to exclude items from custom views; - optional per-file progress in dialog mode activated by hitting "i" while operation is being performed. :set command and options: - added 'chaselinks' option to automatically expand all symbolic links in path of a view (might not work on Windows) (thanks to filterfalse); - added 'mintimeout' option. It enables controlling responsiveness on external events by Vifm (thanks to hofheinz); - added 'wordchars' option to specify which characters in command-line mode should be considered as part of a word (thanks to filterfalse); - added ^= operation for charset options; - added %[ and %] macros for 'statusline'/'ruler' (thanks to ranousse); - added "p" to 'shortmess' option to control tilde shortening of path in view titles (thanks to Martin Fischer); - changed default value of 'trashdir' from "$VIFM/Trash" to "%r/.vifm-Trash,$VIFM/Trash" (thanks to Joseph LP, a.k.a. ootput); - normalized sorting keys/view column names: "type" -> "dir", display real mode in octal for "mode", make "type" actually display file type (as "mode" did before) (thanks to Michal Belica, a.k.a. beli-sk); - united last pattern of :substitute command with search history (thanks to filterfalse). Command-line mode: - added :highlight {pattern} for filename specific highlight (thanks to Ink, a.k.a. inknoir, filterfalse and Michael Maddern, a.k.a. madders); - added :cabbrev, :cnoreabbrev and :cunabbrev commands to manage command-line mode abbreviations (thanks to filterfalse); - added Ctrl-X / (slash) key to that inserts last search pattern into current cursor position (thanks to filterfalse); - added Ctrl-] key to trigger abbreviation expansion; - added single-argument form of :file[x]type and :fileviewer commands that lists (in menu mode) currently registered patterns that match specified file name; - added :cq[uit] command to exit with non-zero exit code and also abort directory choosing (thanks to Jeet Sukumaran, a.k.a. jeetsukumaran); - added :trashes? to display sizes of each non-empty trash directories (thanks to Svyatoslav Mishyn, a.k.a. juef); - added regexp patterns to :file[x]type and :fileviewer commands (thanks to filterfalse); - added :redr[aw] command to force immediate redraw (thanks to filterfalse); - allow non-printable characters to be arguments of :commands (thanks to filterfalse); - extended :sync command to support selective synchronization (user can choose among location, cursor position, local options and filters) (thanks to filterfalse). Completion: - complete `clear` subcommand of :highlight. Angle bracket notation: - added angle bracket notation (less-than character, '<') (thanks to filterfalse); - map and to different key codes (thanks to fogine). This is caused by inconsistency among terminals, map to both keys and it should work everywhere. Macros: - added %px, %py, %pw and %ph macros that describe location and dimensions of preview area to use in external commands (thanks to Stephano, a.k.a. cao); - added %u and %U macros to redirect command output directly into custom view. The second one allows for more customization of file list, which is absence of sorting for now (thanks to filterfalse); - no more unjustified inconsistency in processing macros in :! and :file[x]type commands (thanks to Miodrag Tokić, a.k.a. loonies). Scripting: - added system() builtin function that executes command via shell and returns its output; - added full path patterns ({{globs}} and //regexp//) (thanks to astrell); - report error on wrong expression in :if statement and misplaced :else/:endif on file sourcing. Color scheme: - added JobLine highlight group for the job bar. Configuration: - added fallback to use "XDG Base Directory Specification" when failed to find configuration in other places (thanks to Miodrag Tokić, a.k.a. loonies); - added global configuration {prefix}/etc/vifm/vifmrc and color schemes {prefix}/etc/vifm/colors/* (thanks to astrell and Michael Vetter, a.k.a. jubalh). Performance: - significantly reduced amount of work performed by Vifm in idle state (thanks to hofheinz); - quit fast on --help/--version (thanks to Svyatoslav Mishyn, a.k.a. juef); - throw away dead directories in directory histories on merging vifminfo files. Otherwise clearing such directories on :history is almost useless. Menus and dialogs: - made calculation of directory size visible in :jobs menu; - parse output of mandoc version of apropos in :apropos (thanks to Svyatoslav Mishyn, a.k.a. juef). TUI (Text User Interface): - added search match highlighting for file names (thanks to Svyatoslav Mishyn, a.k.a. juef, and willemw12); - added job bar that displays backgrounded file operations if any (thanks to geo909); - redraw UI on resize during file operation when 'syscalls' is set; - redraw UI on resize when dialog is active; - dynamic dialog dimensions (minimum %30 percent of the screen rather than screen-wide all the time) (thanks to Svyatoslav Mishyn, a.k.a. juef); - auto-resize position field on the status bar to fit the text (thanks to ranousse). Documentation: - manual page fixes/improvements (thanks to Svyatoslav Mishyn, a.k.a. juef); - wrapped option names with single quotes in the man page to make it easier to search for options by their names. Packaging: - added one more light color scheme to assets (in two variations astrell-root and astrell-user) (thanks to astrell); - added lookup for mandoc on *nix to perform manual page to plain text transformation (thanks to Svyatoslav Mishyn, a.k.a. juef); - added OS X version of sample vifmrc file. Now this one will be used on first run on OS X (thanks to Larry Hynes, a.k.a. larryhynes); - added dircolors -> vifm conversion script (thanks to Ink, a.k.a. inknoir, Hendrik Jaeger, a.k.a. henk, and Michael Maddern, a.k.a. madders); - added .vifm extension to color schemes (initial rename is performed automatically) (thanks Michael Vetter, a.k.a. jubalh); - install AUTHORS, COPYING, ChangeLog, INSTALL, NEWS, README and TODO to {prefix}/share/doc/vifm. Install color schemes to {prefix}/share/vifm/colors. Otherwise these are not available after installation; - made configure script lookup curs_set in libtinfo; - moved checks for build-time tools existence from Makefile to configure script; - made tests less dependent on environment (thanks to Hendrik Jaeger, a.k.a. henk). Only on Windows: - automatically install sample vifmrc and help file on first start; - switch to utf-8 internal representation of paths. This fixes issues when file name encoding doesn't match system encoding (thanks to Stas Panteleev). Major fixes: - fixed undesired file removal on overwriting them with themselves (data loss after confirmation of overwriting files when destination matches source) (thanks to Сергей Соловьёв (Sergej Soloviov)); - fixed crash on navigation to end of line in command-line mode (thanks to Christian Fillion, a.k.a. cfillion); - fixed `:help` (no arguments) when 'vimhelp' is on and automatically installed Vim documentation is used (thanks to ranousse); - better handling of case related operations; - fixed ":vs .." which used to use wrong base directory; - fixed assertion on including "type" in 'viewcolumns' value (thanks to Michal Belica, a.k.a. beli-sk); - better FUSE handling on OS X (thanks to Michael Maddern, a.k.a. madders). Vim-plugin: - added K mapping to Vim plugin (quick navigation to documentation, e.g. from vifmrc). Patch by filterfalse. Other changes: - added --delimiter command-line option. Configures delimiter string on writing out list of paths (like on `-f` switch) (thanks to Jeet Sukumaran, a.k.a. jeetsukumaran); - added --choose-files and --choose-dir command-line switches to specify output location for names of selected files or last visited directory respectively (thanks to Jeet Sukumaran, a.k.a. jeetsukumaran); - added --on-choose command-line switch to execute a command on selection rather than opening it (thanks to Ross Hadden, a.k.a. rosshadden); - added %FOREGROUND FUSE mounting option, which supersedes %CLEAR and fixes issue with passing input to FUSE mounter (thanks to Johannes, a.k.a. johannesmeng); - removed per-view last search pattern. Don't worry, you probably won't even notice it: this doesn't affect regular use case, rather more exotic one, which is hard to notice; - better handling or unexpectedly unavailable directories on startup and while running (thanks to willemw12); - define $VIFM_FUSE_FILE environment variable for external commands to communicate path to file used to initiate FUSE mounting of directory we're in (thanks to astrell); - allowed having multiple file viewers with same rules for choosing them at run-time as for file associations (thanks to filterfalse); - redirect both standard output and error streams from viewers (already was the case for Windows); - handle commands that are too long to be passed directly to the shell by breaking them into list of arguments if possible (thanks to filterfalse). See change log for full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ October 25, 2014 ================ Vifm v0.7.8 release ------------------- New version adds a couple of major features, allows for some more customizations and makes usual operations more convenient. Finally, file system operations got progress (it's disabled by default, new implementation needs to be tested in different environments to become the primary one). Another frequently asked feature is multiblock selection ("extended visual mode" if you wish). Vifm also became friendlier to authors of colorschemes and those who'd like to customize UI a bit more. Main changes: - added multiblock "selection" (in quotes because it's also block deselection and inversion of selection for completeness); - added progress bar for file operations. Available only if 'syscalls' option is set (please be careful with that, check basic operations on temp files before using this with important data); - added names for 256 colors, highlight group for inactive cursor, ":highlight clear" command; - some improvements for cancelling operations; - better implementation of emptying trash directories; - new types of conflict resolution; - several extensions for filtering with user-defined commands; - more customizable UI (borders, padding); - smarter path completion; - separated Vifm and Vim plugin documentation; - a couple of extensions for Vim plugin (for mail and bulk file renaming). Core: - added cancellation (handling of Ctrl-C) for FUSE mounting (but not unmounting); - added progress for long-running file system operations. Available only if 'syscalls' option is set; - added "[a]ppend the end" conflict resolution option (appends the rest of file, e.g. if previous operation was terminated) (thanks to Sergei Shilovsky). Available only if 'syscalls' option is set; - added merge all option for name conflict resolution. Same as "merge", but remembers the choice for future conflicts of directories (thanks to willemw12); - added skip all option for name conflict resolution (thanks to Miodrag Tokić (a.k.a. loonies)); - changed "overwrite all" key from "a" to "O" for consistency (thanks to willemw12); - implemented creation, removal, copying, moving of files with system calls. Available only if 'syscalls' option is set; - rewrote trash content removal with system calls in background thread (thanks to lyuts and ckester). It's also now visible in :jobs menu; - several improvements for :lstrash menu (thanks to filterfalse); - more reliable Ctrl-C detection. Normal and visual modes: - added av normal mode shortcut that activates selection amending mode (thanks to ranousse, Michelle Bonk (a.k.a. unixtechie)); - added/updated av/v/V visual mode keys to switch type of current visual mode; - added Ctrl-G key to visual selection amending mode, which switches kind of amending (append/remove/invert); - added ga and gA keys to visual mode (thanks to geo909); - separate visual selection marks ('< and '>), which allows to restore it via gv in both panes (thanks to filterfalse); - implement "(" and ")" keys for "perms" and "type" sorting keys (thanks to filterfalse); - skip nonexistent directories on Ctrl-O/Ctrl-I; - repeat search with last used search pattern on empty pattern of the search mode; - taught ga/gA commands to handle selection (thanks to geo909). Command-line mode: - added i and I flags to :filter command to control filter case sensitivity (thanks to filterfalse); - added filter flags to output of :filter? command and formatted output as a table; - added ":highlight clear" to reset to builtin colors; - added =pattern special form of user-defined command that sets local filter to the given value (alike "/pattern" and "filter value") (thanks to filterfalse); - made :filter command consider trailing slash for symbolic links that point to directories (thanks to filterfalse); - allowed use of :filter syntax in user-defined filter commands (e.g. "command conf filter/.*\.cfg$/"); - made +/- operands after semicolon in command-line range adjust base range end position rather than base cursor position as Vim does (thanks to filterfalse). :set command and options: - added 'syscalls' boolean option. Chooses external tools/system calls implementation. {EXPERIMENTAL}, {WORK-IN-PROGRESS}, although no data loss so far. The option will be eventually removed. Mostly *nix-like systems are affected; - added 'cdpath' option (thanks to Bruce Hunsaker (a.k.a. hunsakerbn)); - added 'tuioptions' option. Controls padding of file lists in panels and visibility of side borders (thanks to Bruce Hunsaker (a.k.a. hunsakerbn) and Svyatoslav Mishyn (a.k.a. juef)); - added 'fillchars' option. Configures fill character for vertical borders (thanks to Svyatoslav Mishyn (a.k.a. juef)); - extended 'slowfs' option format to allow path prefixes (in particular, it's useful for autofs) (thanks to Евгений Жаров (a.k.a. ezharov)). Scripting: - added logical NOT unary operator ("!"); - added executable() builtin function that checks whether executable exists at given path or in one of directories listed in $PATH; - added has() builtin function that checks whether particular property is enabled (two properties for now: "unix" and "win") (thanks to filterfalse); - made expand() builtin function expand environment variables (thanks to filterfalse). Performance: - optimized speed of checking existence of a directory (important on displaying directory history); - automatically remove non-existent directories from directory history on :history command to speed up future operations (this clean up is very cheap on composing menu). Completion: - added function name completion on command-line; - smart completion for paths. Allows completion of quoted arguments (both ' and " types of quotes) and considers argument type context by performing escaping when needed. Documentation: - added full command names to the manual page to ease searching them (thanks to y2kbugger); - documented how to use 256 colors in :highlight command (thanks to Michael Vetter (a.k.a. jubalh)); - made it possible to hide Vifm's documentation from Vim when it's not run by Vifm's :help command (thanks to ranousse); - separated Vifm's vimdoc from plugin documentation. TUI (Text User Interface): - added more human-friendly (xterm-like) names for 256 colors (thanks to Michael Vetter (a.k.a. jubalh)); - added OtherLine highlight group for cursor of inactive pane (thanks to Svyatoslav Mishyn (a.k.a. juef)); - more accurate scheduling of view updates. Vim: - added file additional mail filetype plugin for Vim (thanks to Pavneet Arora). It allows one to pick attachments via Vifm on a shortcut; - added file renaming filetype plugin for Vim (thanks to Factorial Prime). It displays list of original file names in a vertical split; - provided additional repository for Vim plugin (https://github.com/vifm/vifm.vim); - make Vim plugin use cmd.exe as default shell on Windows (thanks to Jonathan Da Silva); - various minor syntax highlight improvements (wrapped lines, numbers, options). Packaging: - added Vim plugin directory to share/vifm/vim on `make install` (thanks Svyatoslav Mishyn (a.k.a. juef)); - removed ltmain.sh script, which is part of libtool that's not used anymore (thanks to Hendrik Jaeger (a.k.a. henk)); - renamed configure.in to configure.ac (thanks to Hendrik Jaeger (a.k.a. henk)); - "make clean" now removes "tags" files for Vim documentation generated during build (thanks to Hendrik Jaeger (a.k.a. henk)). Major fixes: - fixed segmentation fault on running vifm with single argument if restored cursor is in the right pane (thanks to Svyatoslav Mishyn, a.k.a. juef); - fixed segmentation fault during startup in a small terminal on OS X (thanks to Daniel Dettlaff (a.k.a. dmilith)); - fixed segmentation fault on no view history and ":set autochpos" in vifmrc (thanks to ranousse); - fixed unexpectedly broken compilation on FreeBSD (thanks to Daniel Dettlaff (a.k.a. dmilith)); - fixed :!! command, seems to be not working for a while; - fixed segmentation fault on Alt-. command in command-line mode (since 0.7.7). See change log for full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ October 11, 2014 ================ vifm v0.7.8 beta testing has started ------------------------------------ New version adds a couple of major features, allows for some more customizations and makes usual operations more convenient. Finally, file system operations got progress (it's disabled by default, new implementation needs to be tested in different environments to become the primary one). Another frequently asked feature is multiblock selection ("extended visual mode" if you wish). Vifm also became friendlier to authors of colorschemes and those who'd like to customize UI a bit more. The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Main changes: - added multiblock "selection" (in quotes because it's also block deselection and inversion of selection for completeness); - added progress bar for file operations. Available only if 'syscalls' option is set (please be careful with that, check basic operations on temp files before using this with important data); - added names for 256 colors, highlight group for inactive cursor, ":highlight clear" command; - some improvements for cancelling operations; - better implementation of emptying trash directories; - new types of conflict resolution; - several extensions for filtering with user-defined commands; - more customizable UI (borders, padding); - smarter path completion; - separated Vifm and Vim plugin documentation; - a couple of extensions for Vim plugin (for mail and bulk file renaming). Core: - added cancellation (handling of Ctrl-C) for FUSE mounting (but not unmounting); - added progress for long-running file system operations. Available only if 'syscalls' option is set; - added "[a]ppend the end" conflict resolution option (appends the rest of file, e.g. if previous operation was terminated) (thanks to Sergei Shilovsky). Available only if 'syscalls' option is set; - added merge all option for name conflict resolution. Same as "merge", but remembers the choice for future conflicts of directories (thanks to willemw12); - changed "overwrite all" key from "a" to "O" for consistency (thanks to willemw12); - implemented creation, removal, copying, moving of files with system calls. Available only if 'syscalls' option is set; - rewrote trash content removal with system calls in background thread (thanks to lyuts and ckester). It's also now visible in :jobs menu; - several improvements for :lstrash menu (thanks to filterfalse); - more reliable Ctrl-C detection. Normal and visual modes: - added av normal mode shortcut that activates selection amending mode (thanks to ranousse, Michelle Bonk (a.k.a. unixtechie)); - added/updated av/v/V visual mode keys to switch type of current visual mode; - added Ctrl-G key to visual selection amending mode, which switches kind of amending (append/remove/invert); - separate visual selection marks ('< and '>), which allows to restore it via gv in both panes (thanks to filterfalse); - implement "(" and ")" keys for "perms" and "type" sorting keys (thanks to filterfalse); - skip nonexistent directories on Ctrl-O/Ctrl-I; - repeat search with last used search pattern on empty pattern of the search mode. Command-line mode: - added i and I flags to :filter command to control filter case sensitivity (thanks to filterfalse); - added filter flags to output of :filter? command and formatted output as a table; - added ":highlight clear" to reset to builtin colors; - added =pattern special form of user-defined command that sets local filter to the given value (alike "/pattern" and "filter value") (thanks to filterfalse); - made :filter command consider trailing slash for symbolic links that point to directories (thanks to filterfalse); - allowed use of :filter syntax in user-defined filter commands (e.g. "command conf filter/.*\.cfg$/"); - made +/- operands after semicolon in command-line range adjust base range end position rather than base cursor position as Vim does (thanks to filterfalse). :set command and options: - added 'syscalls' boolean option. Chooses external tools/system calls implementation. {EXPERIMENTAL}, {WORK-IN-PROGRESS}, although no data loss so far. The option will be eventually removed. Mostly *nix-like systems are affected; - added 'cdpath' option (thanks to Bruce Hunsaker (a.k.a. hunsakerbn)); - added 'tuioptions' option. Controls padding of file lists in panels and visibility of side borders (thanks to Bruce Hunsaker (a.k.a. hunsakerbn) and Svyatoslav Mishyn (a.k.a. juef)); - added 'fillchars' option. Configures fill character for vertical borders (thanks to Svyatoslav Mishyn (a.k.a. juef)); - extended 'slowfs' option format to allow path prefixes (in particular, it's useful for autofs) (thanks to Евгений Жаров (a.k.a. ezharov)). Scripting: - added logical NOT unary operator ("!"); - added executable() builtin function that checks whether executable exists at given path or in one of directories listed in $PATH; - added has() builtin function that checks whether particular property is enabled (two properties for now: "unix" and "win") (thanks to filterfalse); - made expand() builtin function expand environment variables (thanks to filterfalse). Performance: - optimized speed of checking existence of a directory (important on displaying directory history); - automatically remove non-existent directories from directory history on :history command to speed up future operations (this clean up is very cheap on composing menu). Completion: - added function name completion on command-line; - smart completion for paths. Allows completion of quoted arguments (both ' and " types of quotes) and considers argument type context by performing escaping when needed. Documentation: - added full command names to the manual page to ease searching them (thanks to y2kbugger); - documented how to use 256 colors in :highlight command (thanks to Michael Vetter (a.k.a. jubalh)); - made it possible to hide Vifm's documentation from Vim when it's not run by Vifm's :help command (thanks to ranousse); - separated Vifm's vimdoc from plugin documentation. TUI (Text User Interface): - added more human-friendly (xterm-like) names for 256 colors (thanks to Michael Vetter (a.k.a. jubalh)); - added OtherLine highlight group for cursor of inactive pane (thanks to Svyatoslav Mishyn (a.k.a. juef)). Vim: - added file additional mail filetype plugin for Vim (thanks to Pavneet Arora). It allows one to pick attachments via Vifm on a shortcut; - added file renaming filetype plugin for Vim (thanks to Factorial Prime). It displays list of original file names in a vertical split; - provided additional repository for Vim plugin (https://github.com/vifm/vifm.vim); - make Vim plugin use cmd.exe as default shell on Windows (thanks to Jonathan Da Silva); - various minor syntax highlight improvements (wrapped lines, numbers, options). Packaging: - added Vim plugin directory to share/vifm/vim on `make install` (thanks Svyatoslav Mishyn (a.k.a. juef)); - removed ltmain.sh script, which is part of libtool that's not used anymore (thanks to Hendrik Jaeger (a.k.a. henk)); - renamed configure.in to configure.ac (thanks to Hendrik Jaeger (a.k.a. henk)). Major fixes: - fixed segmentation fault on running vifm with single argument if restored cursor is in the right pane (thanks to Svyatoslav Mishyn, a.k.a. juef); - fixed segmentation fault during startup in a small terminal on OS X (thanks to Daniel Dettlaff (a.k.a. dmilith)); - fixed segmentation fault on no view history and ":set autochpos" in vifmrc (thanks to ranousse); - fixed unexpectedly broken compilation on FreeBSD (thanks to Daniel Dettlaff (a.k.a. dmilith)); - fixed :!! command, seems to be not working for a while; - fixed segmentation fault on Alt-. command in command-line mode (since 0.7.7). See change log for full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ May 16, 2014 ============ vifm v0.7.7 release ------------------- New version provides more customizations for several existing features and more convenient interaction with them. Thanks to all contributors and especially those who tried beta version. Main changes: - vifm has had support for navigation by file number for years, finally it can display those numbers; - support of trash directories got better with ability to have trash per mount point and new trash menus; - command-line mode now has Ctrl-X prefixed keys that insert parts of filenames and filters (kind of Ctrl-R in Vim); - bookmarks are now timestamped for more predictable management (mainly deletion and overwriting); - for security reasons remote commands are now disabled at configuration stage by default; - most of long-running operations (:find, :copy, etc.) now can be cancelled by pressing Ctrl-C; - menus with list of files got unified "gf" (for navigation) and "e" (for editing) shortcuts; - several fixes and %n macro for better integration with terminal multiplexers; - ability to sort list view with disabled grouping of directories; - expression parser was extended in a couple of ways; - added three more sample color schemes. Configuration: - added --enable-remote-cmd switch to configure script disabled by default, as current implementation of the feature is insecure. Menus and dialogs: - added "gf" (go to file) and "e" (open in editor) keys to :grep, :find, :locate and user menu with navigation (%M macro). Macros: - added %A macro to 'findprg' and 'grepprg' options, which is expanded to unmodified list of arguments (thanks to Robert Sarkozi); - added %n macro which suppresses using of terminal multiplexer in a command (user-defined :command, :!command or :file[x]type action). Key bindings: - added Ctrl-W z key to normal and view modes, which closes preview pane or view modes (thanks to filterfalse). :set command and options: - added "type" key to the 'sort' option to allow controlling grouping of directories (thanks to Daniel R., a.k.a. reicheltd); - added 'number', 'relativenumber' and 'numberwidth' options to control displaying of file numbers (thanks to filterfalse and greye); - extended 'trashdir' to handle list of path, some of which can specify location of trash directories local to each mount point (thanks to smpolymen and Sergei Shilovsky). Command-line mode related changes: - added Ctrl-X a/c/d/e/m/r/t/= keys to command-line mode that insert parts of file names and values of filters (see related documentation) (thanks to ranousse and filterfalse); - added :lstrash command-line command, which displays list of files in trash (thanks to Sergei Shilovsky); - added :trashes command-line command, which lists all non-empty trash directories (thanks to Sergei Shilovsky); - treat semicolon (";") as a valid range separator for command-line commands; - allow empty ranges for command without name (as in :4). Angle bracket notation: - added angle bracket notation (thanks to filterfalse). Scripting: - added &option syntax for expressions (returns value of an option); - extended parser to support integer number constants and unary minus and plus operators; - extended parser to support <, <=, >= and > comparison operators for strings and integers. Performance: - optimized file name comparison on sorting. Documentation: - documented special bookmarks; - more verbose documentation on :filextype and its usage. Color scheme related changes: - added sample light color scheme (provided by Daniel R., a.k.a. reicheltd); - added sample dark solarized color scheme (provided by Stéphane, a.k.a. istib); - added zenburn color scheme (provided by Svyatoslav Mishyn, a.k.a. juef). TUI (Text User Interface): - handle backspace in preview window as terminal emulators do (thanks to Svenn Are Bjerkem, a.k.a. svenn). Only on Windows: - added handling of paths with backward slashes for :find/:locate/:grep/%M menus on Windows (thanks to Robert Sarkozi); - fixed extending filetypes that are missing macro on Windows when cmd.exe shell is used (thanks to Daniel Polanco, a.k.a. dlpolanco); - fixed work with filenames contining special symbols on Windows with cmd.exe shell (thanks to Daniel Polanco, a.k.a. dlpolanco); - fixed testing whether application uses GUI on Windows when path contains spaces; - fixed extra escaping on prompt filename completion on Windows. Other changes: - added cancellation handling for file system operations and invocations of external applications (works best on *nix systems) (thanks to Milan Svoboda, a.k.a. tex); - made bookmarks merging smarter by storing timestamps. Removing bookmarks now works as expected. Bookmarks overwriting by another instance shouldn't happen anymore. (Thanks to Michael Maddern, a.k.a. madders.) Major fixes: - fixed file descriptor leak on finishing background tasks (thanks to anonymous from linux.org.ru); - fixed several bugs that led to segmentation fault; - fixed copying/moving files after picking "Overwrite all" conflict resolution option (thanks to Stas Malavin). See change log for full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ April 30, 2014 ============== vifm v0.7.7 beta testing has started ------------------------------------ New version provides more customizations for several existing features and more convenient interaction with them. The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Main changes: - vifm has had support for navigation by file number for years, finally it can display those numbers; - support of trash directories got better with ability to have trash per mount point and new trash menus; - command-line mode now has Ctrl-X prefixed keys that insert parts of filenames and filters (kind of Ctrl-R in Vim); - bookmarks are now timestamped for more predictable management (mainly deletion and overwriting); - for security reasons remote commands are now disabled at configuration stage by default; - most of long-running operations (:find, :copy, etc.) now can be cancelled by pressing Ctrl-C; - menus with list of files got unified "gf" (for navigation) and "e" (for editing) shortcuts; - several fixes and %n macro for better integration with terminal multiplexers; - ability to sort list view with disabled grouping of directories; - expression parser was extended in a couple of ways; - added three more sample color schemes. Configuration: - added --enable-remote-cmd switch to configure script disabled by default, as current implementation of the feature is insecure. Menus and dialogs: - added "gf" (go to file) and "e" (open in editor) keys to :grep, :find, :locate and user menu with navigation (%M macro). Macros: - added %A macro to 'findprg' and 'grepprg' options, which is expanded to unmodified list of arguments (thanks to Robert Sarkozi); - added %n macro which suppresses using of terminal multiplexer in a command (user-defined :command, :!command or :file[x]type action). Key bindings: - added Ctrl-W z key to normal and view modes, which closes preview pane or view modes (thanks to filterfalse). :set command and options: - added "type" key to the 'sort' option to allow controlling grouping of directories (thanks to Daniel R., a.k.a. reicheltd); - added 'number', 'relativenumber' and 'numberwidth' options to control displaying of file numbers (thanks to filterfalse and greye); - extended 'trashdir' to handle list of path, some of which can specify location of trash directories local to each mount point (thanks to smpolymen and Sergei Shilovsky). Command-line mode related changes: - added Ctrl-X a/c/d/e/m/r/t/= keys to command-line mode that insert parts of file names and values of filters (see related documentation) (thanks to ranousse and filterfalse); - added :lstrash command-line command, which displays list of files in trash (thanks to Sergei Shilovsky); - added :trashes command-line command, which lists all non-empty trash directories (thanks to Sergei Shilovsky); - treat semicolon (";") as a valid range separator for command-line commands; - allow empty ranges for command without name (as in :4). Angle bracket notation: - added angle bracket notation (thanks to filterfalse). Scripting: - added &option syntax for expressions (returns value of an option); - extended parser to support integer number constants and unary minus and plus operators; - extended parser to support <, <=, >= and > comparison operators for strings and integers. Performance: - optimized file name comparison on sorting. Documentation: - documented special bookmarks. Color scheme related changes: - added sample light color scheme (provided by Daniel R., a.k.a. reicheltd); - added sample dark solarized color scheme (provided by Stéphane, a.k.a. istib); - added zenburn color scheme (provided by Svyatoslav Mishyn, a.k.a. juef). TUI (Text User Interface): - handle backspace in preview window as terminal emulators do (thanks to Svenn Are Bjerkem, a.k.a. svenn). Only on Windows: - added handling of paths with backward slashes for :find/:locate/:grep/%M menus on Windows (thanks to Robert Sarkozi); - fixed extending filetypes that are missing macro on Windows when cmd.exe shell is used (thanks to Daniel Polanco, a.k.a. dlpolanco); - fixed work with filenames contining special symbols on Windows with cmd.exe shell (thanks to Daniel Polanco, a.k.a. dlpolanco); - fixed testing whether application uses GUI on Windows when path contains spaces; - fixed extra escaping on prompt filename completion on Windows. Other changes: - added cancellation handling for file system operations and invocations of external applications (works best on *nix systems) (thanks to Milan Svoboda, a.k.a. tex); - made bookmarks merging smarter by storing timestamps. Removing bookmarks now works as expected. Bookmarks overwriting by another instance shouldn't happen anymore. (Thanks to Michael Maddern, a.k.a. madders.) Major fixes: - fixed file descriptor leak on finishing background tasks (thanks to anonymous from linux.org.ru); - fixed several bugs that led to segmentation fault. See change log for full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ October 31, 2013 ================ vifm v0.7.6 release ------------------- New minor version brings better integration with environment and external tools as well as enhances file filtering capabilities in several ways. Apart from that, old features were tweaked and some build issues and bugs were resolved. New Win32 and Win64 single-executable (no DLLs) packages appear first time with this release. This time beta stage was quite fruitful. Thanks to all who installed and tried beta versions, and special thanks to filterfalse. Main changes: - added interactive local filter; - added external editing of command-line content with 'vicmd'; - added integration with tmux; - added options to configure external commands for :apropos, :find, :grep and :locate commands; - added desktop entry file (\*nix only) and updated application icon; - fixed build for some combinations of OS/environments (OS X, 32/64-bit cygwin, Windows). Notice: if you mapped q key to something, new q:, q/, q? and q= keys won't be available; suggested solution is to change the mapping to qq. More detailed list of changes. Performance: - increased performance of (re)loading content for view mode (thanks to Robert Sarkozi). Key bindings: - process [count] passed to gUU, gU, gUgU, gu, guu and gugu commands; - made all Ctrl-W x keys available in view mode (thanks to filterfalse); - changed meaning of the R key in view mode from redrawing view to reloading it preserving scroll position (thanks to Robert Sarkozi). Normal and visual modes related changes: - added q:, q/, q? and q= keys (q= is defined for normal mode only) to prompt for command-line in external editor; - added "=" normal mode key, which activates file name filtering. Command-line mode related changes: - added "=" and "filter" values for :history command, to show history of local filter; - added Ctrl-G key to start editing in external editor (for editing command, search pattern and file renames); - added optional argument for :invert command to control more kinds of inversion (thanks to filterfalse); - better order of command validity checks; - show better error message on unmatched quotes in command arguments; - store cancelled prompt input in prompt history; - check destination path existence before changing directory to it on :sync command; - use last search pattern as filename filter when :filter command gets an empty argument (:filter//, :filter"", :filter'') (thanks to filterfalse); - match only filename against pattern in :fileviewer instead of full path. :set command and options: - added 'aproposprg', 'findprg', 'grepprg' and 'locateprg' options to specify external commands format; - added "fhistory" to 'vifminfo', which controls storing of local filter history; - added "f" flag to 'cpoptions' option. It controls initial state of filename filter inversion for :filter[!] {regex} command (thanks to filterfalse); - from now on not absolute paths for the 'fusehome' options are rejected; - expand environment variables in values of the 'fusehome' and 'trashdir' options (thanks to filterfalse); - more adequate reaction on setting 'trashdir' option to wrong value; - do not reset selection on search when 'hlsearch' is reset (thanks to filterfalse). File filtering: - distinguish files and directories in filename filter by appending a slash to names of directories; - separated file name filter into manual and automatic, mainly for convenience. TUI (Text User Interface): - preserve current cursor position on view resorting; - force split-view when two paths are specified on command-line (thanks to filterfalse); - consider 'classify' option on displaying file name in the status bar (thanks to Thomas Nemeth). For Vim: - added syntax and filetype plugins for command-line editing buffers (thanks to filterfalse); - updated syntax file to highlight more elements (thanks to filterfalse). Only on Windows: - filter files in case insensitive way on Windows; - don't wait finishing of GUI applications on Windows (thanks to Robert Sarkozi). Other changes: - added integration with tmux (thanks to Seth VanHeulen, a.k.a. svanheulen); - added desktop entry file (thanks to Richard Benson); - added merge option for name conflict resolution, which allows for merging two directories overwriting files with matching names; - updated application icon (thanks to Richard Benson for making it); - don't overwrite directory stack stored in vifminfo on exit unless it was changed in current session; - improved documentation on several subjects; - display error after sourcing file with unmatched :if/:endif statements (thanks to filterfalse). Major fixes: - fixed configuration when wcscasecmp(), wcsncasecmp() or set\_escdelay() functions is not available (thanks to Russell Urquhart); - fixed reserving of about 1 GiB piece of memory on 256-color terminals (sorry about that); - fixed running of executable with symbols that require escaping in their name (\*nix only). Strangely enough, it wasn't noticed before; - fixed terminal hang after executing several external commands in a row (thanks to filterfalse); - fixed search of the first element in file list when displaying of parent directory is disabled; - fixed fails on running executables when 'fastrun' option is on (thanks to MadMaverick9). See change log for full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ October 24, 2013 ================ vifm v0.7.6 beta testing continued ---------------------------------- First beta version revealed some issues with new functionality and degradation of previously existing features. That's why second beta version is released. Included fixes primary target Windows platform, but some of them are related to \*nix systems as well. Thanks to filterfalse and Robert Sarkozi for their help in finding and solving those issues. Additionally, Win64 build is available now. See change log for quite short list of fixes and updates. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ October 17, 2013 ================ vifm v0.7.6 beta testing has started ------------------------------------ New minor version brings better integration with environment and external tools as well as enhances file filtering capabilities in several ways. Apart from that, old features were tweaked and some build issues and bugs were resolved. New Win32 single-executable (no DLLs) package appears first time with this release, Win64 package might also be available a bit later. The beta stage will last about two weeks. In case any serious bugs are found during this period, another beta version might be released. Main changes: - added interactive local filter; - added external editing of command-line content with 'vicmd'; - added integration with tmux; - added options to configure external commands for :apropos, :find, :grep and :locate commands; - added desktop entry file (\*nix only) and updated application icon; - fixed build on some versions of OS X. Notice: if you mapped q key to something, new q:, q/, q? and q= keys won't be available; suggested solution is to change the mapping to qq. More detailed list of changes. Performance: - increased performance of (re)loading content for view mode (thanks to Robert Sarkozi). Key bindings: - process [count] passed to gUU, gU, gUgU, gu, guu and gugu commands; - made all Ctrl-W x keys available in view mode (thanks to filterfalse); - changed meaning of the R key in view mode from redrawing view to reloading it preserving scroll position (thanks to Robert Sarkozi). Normal and visual modes related changes: - added q:, q/, q? and q= keys (q= is defined for normal mode only) to prompt for command-line in external editor; - added "=" normal mode key, which activates file name filtering. Command-line mode related changes: - added "=" and "filter" values for :history command, to show history of local filter; - added Ctrl-G key to start editing in external editor (for editing command, search pattern and file renames); - added optional argument for :invert command to control more kinds of inversion (thanks to filterfalse); - better order of command validity checks; - show better error message on unmatched quotes in command arguments; - store cancelled prompt input in prompt history; - check destination path existence before changing directory to it on :sync command; - use last search pattern as filename filter when :filter command gets an empty argument (:filter//, :filter"", :filter'') (thanks to filterfalse); - match only filename against pattern in :fileviewer instead of full path. :set command and options: - added 'aproposprg', 'findprg', 'grepprg' and 'locateprg' options to specify external commands format; - added "fhistory" to 'vifminfo', which controls storing of local filter history; - added "f" flag to 'cpoptions' option. It controls initial state of filename filter inversion for :filter[!] {regex} command (thanks to filterfalse); - from now on not absolute paths for the 'fusehome' options are rejected; - expand environment variables in values of the 'fusehome' and 'trashdir' options (thanks to filterfalse); - more adequate reaction on setting 'trashdir' option to wrong value; - do not reset selection on search when 'hlsearch' is reset (thanks to filterfalse). File filtering: - distinguish files and directories in filename filter by appending a slash to names of directories; - separated file name filter into manual and automatic, mainly for convenience. TUI (Text User Interface): - preserve current cursor position on view resorting; - force split-view when two paths are specified on command-line (thanks to filterfalse); - consider 'classify' option on displaying file name in the status bar (thanks to Thomas Nemeth). For Vim: - added syntax and filetype plugins for command-line editing buffers (thanks to filterfalse); - updated syntax file to highlight more elements (thanks to filterfalse). Only on Windows: - filter files in case insensitive way on Windows; - don't wait finishing of GUI applications on Windows (thanks to Robert Sarkozi). Other changes: - added integration with tmux (thanks to Seth VanHeulen, a.k.a. svanheulen); - added desktop entry file (thanks to Richard Benson); - added merge option for name conflict resolution, which allows for merging two directories overwriting files with matching names; - updated application icon (thanks to Richard Benson for making it); - don't overwrite directory stack stored in vifminfo on exit unless it was changed in current session; - improved documentation on several subjects. Major fixes: - fixed configuration when wcscasecmp(), wcsncasecmp() or set\_escdelay() functions is not available (thanks to Russell Urquhart); - fixed reserving of about 1 GiB piece of memory on 256-color terminals (sorry about that); - fixed running of executable with symbols that require escaping in their name (\*nix only). Strangely enough, it wasn't noticed before; - fixed terminal hang after executing several external commands in a row (thanks to filterfalse); - fixed search of the first element in file list when displaying of parent directory is disabled; - fixed fails on running executables when 'fastrun' option is on (thanks to MadMaverick9). See change log for full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ May 10, 2013 ============ vifm v0.7.5 release ------------------- New version adds one major feature (parsing of escape codes), set of improvements for existing ones and fixes for bugs. There are also some changes in build system and new extra files bundled with vifm. Main changes: - removed using of libtool in build process on *nix-like systems; - added parsing of escape codes for the preview pane and less-like view; - added expand() builtin function; - added Gentoo ebuild and sample color schemes; - added macros that are expanded to register's content; - added dynamic loading of xlib; - added 'shortmess' option; - added pausing of shell on external commands fails on Windows; - fixed build issues on FreeBSD and OS X systems; - fixed for redrawing and searching in less-like mode; - fixed issues with :help command on Windows. More detailed list of changes. Configuration: - added --without/[with]-dyn-X11 flag to the configure script to control static/dynamic linking against libX11 library. Thanks to Hendrik Jaeger (a.k.a. henk) for the idea; - don't use libtool in build process on *nix platforms (thanks to Merovius). Documentation: - slightly updated plugin related documentation. Macros: - added macros that are expanded to register's content (thanks to Florian Baumann, a.k.a. derflob). :set command and options: - added 'shortmess' option and its first flag: "T" to shorten long status bar messages (thanks to ranousse); - added "perms" sorting key on *nix (proposed by Daniel Dettlaff, a.k.a. dmilith); - added new type of option (charset) and used it for 'cpoptions' and 'shortmess' options; - made 'slowfs' option actually work on OS X (thanks to Daniel Dettlaff, a.k.a. dmilith). Color scheme related changes: - added sample color schemes (proposed by Daniel Dettlaff, a.k.a. dmilith); - don't fallback to default colors on try to switch to a colorscheme, which is not supported by terminal. TUI (Text User Interface): - added parsing of escape codes in the preview pane; - added parsing of escape codes in explore (less-like) mode; - don't redraw file list for explore window on resize; - less updates for window in explore mode on resize. Menus and dialogs: - changed the way title of the permissions dialog is composed. Command-line mode related changes: - allowed exclamation mark for the :sync command (to force synchronization of cursor position when used without arguments); - don't store last command-line command for the dot normal mode command between sessions. Also it doesn't depend on command-line history anymore and can be used with completely disabled history; - made :execute process its arguments just like :echo command (thanks to Daniel Dettlaff, a.k.a. dmilith, which made me discover old behaviour); - don't accept arguments to the :help command when 'vimhelp' option is off. Only on Windows: - pause on failed execution of a help command. Thanks to filterfalse; - pause when execution of shell command fails (e.g. on `:!foobar-does-not-exist`). Other changes: - added Gentoo ebuild. Thanks to Oleg Gordienko (a.k.a. gordio); - added expand() builtin function to expand macros (thanks to Sebastian Cyprych for the use case); - less-like mode now highlights multiple matches in a line; - less-like mode is now updated immediately when one changes 'wrap' option; - save dot files filter state in vifminfo (thanks to Daniel Dettlaff, a.k.a. dmilith). Major fixes: - building on FreeBSD and OS X (thanks to Daniel R., a.k.a. r1chelt, and Daniel Dettlaff, a.k.a. dmilith); - various changes in configuration using autotools; - removed using of libtool in build process on *nix-like systems; - vifminfo file update on Windows (broken in 0.7.4b); - various issues with displaying wide characters (e.g. Chinese); - ctrl-W H/J/K/L shortcuts and less-like view; - issues with calling Vim on :help command. Thanks to filterfalse. See change log for full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ April 22, 2013 ============== vifm v0.7.5 beta testing has started ------------------------------------ New version adds one major feature (parsing of escape codes), set of improvements for existing ones and fixes for bugs. There are also some changes in build system and new extra files bundled with vifm. The beta stage will last about two weeks. In case any bugs are found during this period, another beta version will be released. Main changes: - removed using of libtool in build process on *nix-like systems; - added parsing of escape codes for the preview pane and less-like view; - added expand() builtin function; - added Gentoo ebuild and sample color schemes; - added macros that are expanded to register's content; - added dynamic loading of xlib; - added 'shortmess' option; - fixed build issues on FreeBSD and OS X systems; - fixes for redrawing and searching in less-like mode. More detailed list of changes. Configuration: - added --without/[with]-dyn-X11 flag to the configure script to control static/dynamic linking against libX11 library. Thanks to Hendrik Jaeger (a.k.a. henk) for the idea; - don't use libtool in build process on *nix platforms (thanks to Merovius). Documentation: - slightly updated plugin related documentation. Macros: - added macros that are expanded to register's content (thanks to Florian Baumann, a.k.a. derflob). :set command and options: - added 'shortmess' option and its first flag: "T" to shorten long status bar messages (thanks to ranousse); - added "perms" sorting key on *nix (proposed by Daniel Dettlaff, a.k.a. dmilith); - added new type of option (charset) and used it for 'cpoptions' and 'shortmess' options; - made 'slowfs' option actually work on OS X (thanks to Daniel Dettlaff, a.k.a. dmilith). Color scheme related changes: - added sample color schemes (proposed by Daniel Dettlaff, a.k.a. dmilith); - don't fallback to default colors on try to switch to a colorscheme, which is not supported by terminal. TUI (Text User Interface): - added parsing of escape codes in the preview pane; - added parsing of escape codes in explore (less-like) mode; - don't redraw file list for explore window on resize; - less updates for window in explore mode on resize. Menus and dialogs: - changed the way title of the permissions dialog is composed. Command-line mode related changes: - allowed exclamation mark for the :sync command (to force synchronization of cursor position when used without arguments); - don't store last command-line command for the dot normal mode command between sessions. Also it doesn't depend on command-line history anymore and can be used with completely disabled history; - made :execute process its arguments just like :echo command (thanks to Daniel Dettlaff, a.k.a. dmilith, which made me discover old behaviour). Other changes: - added Gentoo ebuild. Thanks to Oleg Gordienko (a.k.a. gordio); - added expand() builtin function to expand macros (thanks to Sebastian Cyprych for the use case); - less-like mode now highlights multiple matches in a line; - less-like mode is now updated immediately when one changes 'wrap' option; - save dot files filter state in vifminfo (thanks to Daniel Dettlaff, a.k.a. dmilith). Major fixes: - building on FreeBSD and OS X (thanks to Daniel R., a.k.a. r1chelt, and Daniel Dettlaff, a.k.a. dmilith); - various changes in configuration using autotools; - removed using of libtool in build process on *nix-like systems; - vifminfo file update on Windows (broken in 0.7.4b); - various issues with displaying wide characters (e.g. Chinese); - ctrl-W H/J/K/L shortcuts and less-like view. See change log for full list of changes and by whom they were suggested. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ January 21, 2013 ================ vifm v0.7.4b release -------------------- This version is a minor bugfix release. It doesn't contain any new features. The release fixes more than 17 bugs found since version 0.7.4a. Two weeks since beta version was published have passed. Since no bugs were reported, the beta version is now released as 0.7.4b without any changes except version number. Fixes in this version are related to the following subjects: - interaction with the screen tool (thanks to Jing Liu); - working with registers (old, but unreported bugs); - rights elevation and dot directories on Windows; - processing of vifminfo file (thanks to Christoph, a.k.a informationen); - handling of colorscheme files (thanks to Charles Kauffman); - displaying of CJK characters (thanks to lcj); - 'classify' option (thanks to Thomas Nemeth). See change log for full list of fixes. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ January 7, 2013 =============== vifm v0.7.4b beta testing has started ------------------------------------- This version is a minor bugfix release. It doesn't contain any new features. The release fixes more than 17 bugs found since version 0.7.4a. Because of promise not to release anything without beta-testing, even this bugfix release has a beta stage, which should last about two weeks. In case some bugs will be found, a second beta will be released in a week. Fixes are related to the following subjects: - interaction with the screen tool (thanks to Jing Liu); - working with registers (old, but unreported bugs); - rights elevation and dot directories on Windows; - processing of vifminfo file (thanks to Christoph, a.k.a informationen); - handling of colorscheme files (thanks to Charles Kauffman); - displaying of CJK characters (thanks to lcj); - 'classify' option (thanks to Thomas Nemeth). See change log for full list of fixes. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ October 22, 2012 ================ vifm v0.7.4a ------------ 0.7.4 package contains configuration files of autotools of different versions. As a result it's not always possible to build vifm 0.7.4 by running `./configure && make`. The author is sorry about wasted time of users spent on building vifm with partially broken build system. Anyway this mistake has also a good point. 0.7.4a fixes several bugs, some of which are related to new features. See change log for full list of fixes. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ October 18, 2012 ================ vifm v0.7.4 ----------- 0.7.4 is a minor release, which improves existing features as well as adds some new ones. There are two main directions in which improvements were made. One of them is TUI, which now has support of multiple columns and ls-like view as well as customizable file name decoration (prefix and suffix). The second one is connected with command interpreter, which now supports builtin functions, conditional operators and conditional execution of commands (using if-else-endif statements). Additionally, vifm's memory footprint was made smaller and running of programs associated with files made smarter (won't stop until existing program is found). Main changes: - new multicolumn view; - new ls-like view (see 'lsview' option) and related keys for it; - prefixes and suffixes of files of different types are configurable now; - smarter handling of file associations (now vifm will try to find existing program); - some basic means to do scripting (if-else-endif statements, builtin functions, comparison operators); - reduced history memory consumption; - better configure script, which now checks more stuff (and does it in a more accurate way) needed to build vifm. More detailed list of changes. Configuration: - removed compile-time compatibility mode (the compatibility-mode switch), now "f" flag in 'cpoptions' does the same; - added --without/[with]-X11 configure script option; - configure script now checks much more then before; - better make files (thanks to Hendrik Jaeger). Only on Windows: - replaced gl normal mode mapping for Windows with gr because of conflict (with 'lsview'); - allow paths in :file[x]type command that contain spaces to be doublequoted on Windows. Normal and visual modes related changes: - added Ctrl-W H/J/K/L normal mode keys; - added gh, gj, gk and gl keys for normal and visual modes; - added 0, ^ and $ keys for normal and visual modes, which also work as selectors in normal mode. Command-line mode related changes: - added Ctrl-T handling in command line to swap characters; - added Meta-. handling in command line to paste last parts of previous commands; - added :echo command; - added :if, :else and :endif commands; - added support for `==` and `!=` operators; - added :normal command; - added mapping commands for view and menu modes; - changed relative path base for :split and :vsplit commands; - expand macros for user defined commands. :set command and options: - added 'viewcolumns' local option to control view columns; - added 'lsview' option to control ls-like view look; - added 'dotdirs' option to control visibility of "../" directory; - added 'classify' option to set prefixes and suffixes for different file types; - added %E 'statusline' option macro, which means size of all selected files or current file, if no files are selected; - added "t" flag to 'cpoptions' option (replaces compile-time compatibility mode). Completion: - added completion for :set option= even for options without variants; - complete only directory names for :split and :vsplit commands; - escape pipe character during :file completion; - complete :set for short and full option names like Vim does (e.g. 'so' should be expanded to 'sort', not only 'scrolloff'). TUI (Terminal User Interface): - added status bar messages for :apropos, :find and :locate commands; - flicker less on :restart command; - don't show Ctrl-C part in information message boxes where it doesn't make sense; - reduce delay between terminal resize and TUI redrawing; - fixed background bold (light) colors in linux native console. Color scheme related changes: - added light versions of color names. Key bindings: - don't pause on '0' after Ctrl-W (count cannot start with zero); - multiply counts in front and in the middle of commands with Ctrl-W (as Vim does); - multiply counts in front of command and its selector (as Vim does). Other changes: - added support for builtin functions and filetype() as the first one; - check current view of other pane on leaving FUSE mount directory an don't unmount if that file system is still in use; - try the rest of the programs for an association when the default one isn't found; - reduced memory consumption of view histories. And fixes of bugs and memory leaks. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ June 23, 2012 ============= vifm v0.7.3a ------------ It happens some bugs are discovered just after making a new release. And it happened with vifm 0.7.3, which was tested, but apparently not enough. So 0.7.3a is a bugfix release, which contains fixes for one serious bug and several small ones as well as adds some more information to the documentation and very small enhancements. If you would like to be notified about future releases of vifm or some important news related to vifm by email, consider subscribing to recently created vifm-announce@lists.sourceforge.net read-only mailing list. You can do this by following this link. Though this is a bugfix release it has some changes since v0.7.3 that should be mentioned: Completion: - better completion for :colorscheme command. Documentation: - added a section about color schemes to the documentation; - documented that %m, %M, %s, %S and %i have bigger priority than &; - documented that %m, %M, %s, %S and %i are mutually exclusive; - documented treating of whitespace around option names in :set command. :set command and options: - allowed whitespace after option name in :set command; - added checks for correct value of 'tabstop' and 'timeoutlen' options; - reset 'columns' and 'lines' options to real number of columns; - reset value of 'scrolloff' option to zero on attempt to assign a negative value to it; - faster execution of `:set sort=foo sortorder sortnumbers` in vifmrc. TUI (Terminal User Interface): - faster redrawing of status bar with "-- VISUAL --" message after "Press Enter" message. Command-line mode related changes: - expand tilde in the second argument of :colorscheme command; - forbid relative paths in :colorscheme command until vifm is completely loaded; - pass range given to alias to an aliased command. Performance: - faster Ctrl-W x, Ctrl-W o, Ctrl-W s, Ctrl-W v, Ctrl-W =, Ctrl-W <, Ctrl-W >, Ctrl-W -, Ctrl-W +, Ctrl-W |, Ctrl-W _; - faster redraw on terminal resizing; - made file filtering using regular expressions work faster (matters when directory contains several thousands files); - draw quickview on startup only once. Normal and visual modes related changes: - show correct number of selected files in visual mode after n and N keys. And bug fixes. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ June 3, 2012 ============ vifm v0.7.3 release ------------------- If you would like to be notified about future releases of vifm or some important news related to vifm by email, consider subscribing to recently created vifm-announce@lists.sourceforge.net read-only mailing list. You can do this by following this link. Changes since v0.7.2 in general: - removed support of moving items in the :file menu; - added description of :file programs; - improved messages in the TUI as well as it's redrawing in various scenarios; - changed behaviour of Enter key on a selected directories; - better work with PATH environment variable. Changes since v0.7.2 in details: Completion: - added completion for :copy, :clone, :move, :alink, :rlink and :rename commands; - added completion for :touch and :mkdir commands; - added completion for :split and :vsplit commands. TUI (Terminal User Interface): - added Ctrl-L handling in file info (Ctrl-G) mode; - less blinking of the screen in various scenarios; - replace home directory with the tilde in terminal title; - corrected status bar messages about failed search; - better handling of multiline messages in status bar. Normal and visual modes related changes: - leave leading zeros on Ctrl-A/X commands; - added "Y" key to visual mode as an alias for "yy"; - open selected directories with l or Enter keys. Configuration: - added --enable-desktop-files (enabled by default) configure option. Only on Windows: - allow bookmarking of host names on Windows (e.g. //ZX-SPECTRUM); - show host's root in history menu (e.g. //ZX_SPECTRUM); - made :fileviewer command work. Macros: - added macros expansion for :touch and :mkdir commands; - added %i macro to completely ignore output of external commands. Command-line mode related changes: - added :finish command to use in sourced scripts; - improved :let command (allowed using of expressions at the right side of the statement); - properly handle when user alters PATH environment variable using :let command; - added description for :filetype, :filextype and :fileviewer commands; - save last typed but not executed command in command-line mode (this also includes searches). Menus and dialogs: - removed possibility of moving items in :file menu; - added size of file in bytes in file info mode (Ctrl-G); - added q key to close menus. Other changes: - added notes about automatic FUSE mounts to the documentation; - now vifm removes scripts (`$VIFM/scripts/**`) from PATH for :shell command; - use common search history for normal, visual and menu modes; - increased directory modification stamp precision on Unix. Plus bug fixes of course. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ February 19, 2012 ================= vifm v0.7.2 ----------- Changes since v0.7.1 :set command and options: - added 'rulerformat' option; - added 'statusline' option; - added 'columns' and 'lines' options; - added 'trashdir' option (by Chris Skalenda). Command-line mode related changes: - added optional argument for the :sync command; - added support for running :cmap, :nmap and :vmap with one argument; - added recursive mode for :rename command; - added :let and :unlet commands to work with environment variables; - added :windo and :winrun commands; - never change active view on :restart command; - allowed using of macros with :clone command. Angle bracket notation: - added . Only on Windows: - added embedded icon; - added file properties dialog; - show "Sorting directory..." message only for big directories; - change console title; - made determining of home directory more intelligent; - made 'sortnumbers' work; - avoid unnecessary directory view updates (like after C key); - allow using of backward slashes in :rename command; - let :s and :gs filename modifiers change slash type; - properly quit vifm on console closing; - added :u filename modifier for UNC computer name; - added file attributes in status bar and file info view. Normal and visual modes related changes: - added ctrl-w p, ctrl-w b and ctrl-w t normal mode keys. Configuration: - added $VIFM and $MYVIFMRC environment variables; - now vifm will add all subdirectories of ~/.vifm/scripts to PATH; - better check for old-style color schemes file. For Vim: - added g:vifm_exec_args variable for the plugin. Other changes: - added --select command line argument; - added --remote command line argument; - added support for character classes in globals; - restore terminal title on exit; - reset dot and filename filters if they hide bookmarked file; - made vifm react faster on external changes. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ November 15, 2011 ================= vifm v0.7.1 ----------- Major changes since v0.7.0: - changed meaning of :split command (so replace it with :vsplit in your vifmrc); - added backgrounding of :copy, :move, :delete, ga and gA commands; - added horizontal splitting and keys to control size of the panes; - added less-like view mode; - made some changes to the Vim plugin; - windows version was made much more usable. Changes in details :set command and options: - added 'scrollbind', 'wrapscan', 'incsearch', 'cpoptions', 'laststatus' and 'tabstop' options; - make 'ignorecase' and 'smartcase' affect f and F; - don't use position in the view on ' key, when 'autochpos' is off. Angle bracket notation: - added support for more angle bracket notations in mappings (, , , , , , , , , , , , , , , ..., ); - added , ..., , , ..., , , ..., , only for Windows; - added as synonyms for (where X is a key); - added angle bracket notation and as synonyms for ; - added Ctrl + Alt + letter combinations, only for Unix. Command-line mode related changes: - added :split! to toggle between only and split view; - added :file to quick run one of associated commands; - added backgrounding of :copy, :move and :delete commands; - added :delete!; - added :execute, :source commands; - added support for using environment variables as :cd or :pushd arguments; - added support for :substitute command without arguments; - added notation to run internal vifm commands from user defined commands; - allowed exclamation mark for :view command (to prevent view closing); - allowed question mark for :mark command (to prevent bookmark overwriting). Completion: - added completion of environment variables (:cd, :pushd, :! and :!!). Normal and visual modes related changes: - added '(' and ')' keys for normal and visual modes; - added Ctrl-A and Ctrl-X keys (normal and visual modes); - added e key for normal mode; - made i key work in visual mode; - made ga and gA work in background; - better cW command; - clean selection after i key in normal mode. Menus and dialogs: - added year in the file info dialog (on Ctrl-G); - added zh, zl, zH and zL keys for the menus (horizontal scrolling); - added ZQ and ZZ keys to close menus and dialogs. TUI (Terminal User Interface): - added horizontal splitting of views (changed :split command, added :vsplit command, changed Ctrl-w s mapping); - added Ctrl-w j and Ctrl-w k keys; - added Ctrl-w <, Ctrl-w >, Ctrl-w + and Ctrl-w - keys; - added Ctrl-w | and Ctrl-w _ keys. File cloning: - don't change file extension on cloning; - move cursor to clone of current file after file cloning; - smarter file name generation on cloning; - made C command accept count. Only on Windows: - added kind of portable mode on Windows; - make macros expand to paths with forward slashes on Windows; - better check if directory was changed on Windows; - show all shares on Windows (including private ones); - fixed a lot of bugs on Windows. For Vim: - added g:vifm_exec variable for the plugin; - added ftdetect plugin for vim (now there is no need for modelines or changing .vimrc); - allowed arguments for plugin's commands; - added more tags to the documentation in vim-help format. Other changes: - added Ctrl-n (j) and Ctrl-p (k) keys; - added view mode (see documentation); - added -c and + command line arguments; - added support of [count] for / and ?; - don't clear terminal title on exit; - warn about symbolic links are not available; - don't show current file as selected after executing a :command and resizing terminal while it works; - show progress message (e.g. on :copy) after terminal is resized; - made some messages about operations more correct. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ September 29, 2011 ================== vifm v0.7.0 is out! ------------------- And as it was promised vifm is back on Windows! This release breaks compatibility a little, which was done intentionally to make vifm more vi-like. I hope that won't make too much discomfort for users, at least I tried to reduce discomfort as much as I can. In particular, an utility program named vifmrc-converter is shipped with vifm now. It's main purpose is to automatically convert configuration files (vifmrc, vifminfo, startup and colorschemes files) to new format. You don't have to run it by yourself, vifm will do this for you after asking some questions at first startup. Here are the main changes by categories. Configuration: - changed format of ~/.vifm/vifmrc and ~/.vifm/vifminfo files; - removed support of startup file, all commands will be automatically moved to the vifmrc file; - added support for multi line commands in the vifmrc (ex-startup) file; - now users can place scripts for vifm to ~/.vifm/scripts, vifm modifies its PATH environment variable to let user run scripts without specifying full path; - now vifm also accepts paths to files as the startup arguments and --no-configs option. Normal and visual modes related changes: - added gf, al, rl and cl commands for dealing with symbolic links; - added gu and gU commands (and their variations); - added gs command to work with t selection like gv with visual mode selection; - made C handle selection, check read permission and work in visual mode; - changed the way l key handles selection and made it work in visual mode. Command-line mode related changes: - removed :cmdhistory command, use :history cmd or ":history :" instead; - added :noremap, :cnoremap, :nnoremap, :vnoremap, :unmap, :cunmap, :nunmap and :vunmap commands; - added :filetype, :filextype and :fileviewer commands; - added :find and :grep commands; - added :substitute and :tr commands; - added :clone, :copy, :move, :alink and :rlink commands; - added :chmod, :chown, :mkdir and :touch commands; - added :mark, :delmarks, :comclear, :highlight, :restart and :messages command; - documented command line keys and marked which :commands accept ranges; - now vifm understands user name after tilde in paths; - let user use short forms of user-defined commands with "!". Completion: - added completion for co, cg, cw and cW commands; - sort completion items; - shift-Tab command line key to perform completion in reversed order; - added Ctrl-_ command-line key to reject completion. Macros: - added filename modifiers (:p, :~, :., :h, :t, :r, :e, :s and :gs); - added %S and %M macros; - added macros that are expanded to paths enclosed in double quotes (%"c, %"C, %"f, %"F, %"b, %"d and %"D); - handle %m, %M, %s and %S in the :! command. :set command and options: - removed 'savelocation' option. Use :set vifminfo+=dhistory; - added 'wildmenu', 'ignorecase', 'smartcase', 'hlsearch', 'vifminfo', 'shell', 'vixcmd', 'scrolloff', 'timeoutlen', 'autochpos','gdefault', 'slowfs' options; - added abbreviations for options; - added support for using ':' instead of '='; - support for ':set' and ':set all' commands; - made ':set option' equivalent to ':set option?' for all types of options except boolean; - made 'history' option control search, command line and prompt histories; - better 'sort' option (support by multiple sort keys, added iname key); - made 'vicmd' and 'vixcmd' understand & at the end; - :set command now understands & (reset option to its default value). Color scheme related changes: - all color schemes are stored under the ~/.vifm/colors/ directory, each color scheme in its own file; - color scheme file is a list of commands. All command-line commands are handled, but only :highlight commands are really useful here; - added colors for current top line, other top line, status line, error messages in the status bar, broken links and FIFO files; - now maximum number of color schemes is unlimited even on 8-color terminals (there was a limit of 5 color schemes for such terminals before). Only on Windows: - gl normal mode key; - UNC names support; - :volumes command. For Vim: - added g:vifm_term variable for the plugin; - added vifmrc syntax and filetype files for Vim; - tags for some items in the help file for Vim. Other changes: - let user go through directories with execute access, but no read access; - made filetype understand star as in globals; - removed duplicates from command and directory history; - made directory, command line and search histories as well as dirstack and registers persistent (when 'vifminfo' option contains appropriate value); - show search matches in the menus; - now keys can be used in mappings and mapping of keys like y, d or m works right; - modify terminal emulator title; - don't quit when terminal is too small (print message and ignore input); - fixed bugs. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ July 20, 2011 ============= vifm-0.6.3 ---------- Main changes in vifm-0.6.3: - added another format for filetype (FUSE_MOUNT2); - added %CLEAR FUSE mount parameter. See vifmrc for details; - added %c and %C macros (current file of current and other directories, not selected file or files); - added :rename command (opens vi to let you edit names for selected file or files); - added undo list (u, Ctrl-R and :undolist commands; 'undolevels' option); - added small FAQ; - added gA command (like ga, but forces update); - added whole line comments (can be useful in startup file); - added :dirs command (shows directory stack); - added 'sortnumbers', 'followlinks', 'fusehome', 'confirm' and 'history' options; - added dialog to ask user about backwards range in command; - added some vi like keys for menus, dialogs and visual mode; - added 'savelocation' option (start vifm in the last visited directory) which is off be default thus returning old behaviour when vifm is started with no argument; - added gv command for visual mode; - enter key in visual mode will leave it saving selection; - now location of panes is saved in ~/.vifm/vifminfo instead of ~/.vifm/vifmr; - now builtin keys can be remapped; - don't replace escape sequences for :! and :!! commands; - more vi like completion and history in command line and search; - some improvements for :filter command; - some improvements for command ranges; - now ranges modify %f macro for user defined commands; - made f and F work with wide characters; - made option parser handle quotes; - rename files in Trash (to avoid name conflicts); - don't terminate background processes on vifm exit; - remove files that are in the Trash on :empty command from all registers; - don't ignore Ctrl-Z; - don't clear screen on shellout; - updated Vim plugin; - fixed a lot of bugs; See ChangeLog for details. Also see THANKS file that was added in this release. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ June 19, 2011 ============= vifm-0.6.2 ----------- This release fixes some bugs and adds several commands for different modes. Main changes: - added map menus (run :cmap, :vmap, :nmap commands without arguments); - added :cmdhistory command; - added 'fastrun' option; - added o and O keys for Visual mode (go to other end of selection); - added gv Normal mode command; - added support for spaces and functional keys in mappings ( and - ); - added mimetype to fileinfo dialog; - added %b command macro; - implemented :yank and :colorscheme commands; - made filetype menu editable; - restore SIGINT (Ctrl+C) default behaviour on shellout; - replace escape sequences in quick view output with ^foo; - give options if a file already exists in destination directory; - unmount all FUSE mounts on exit; - more verbose version information; - added Ctrl-C key handling to error message dialog; - use file command when GTK+ and libmagic are disabled; - better error messages; - use ga command results to sort by size; - fixed paths in config.c to work with non standard install prefix; - fixed several bugs with command completion and terminal resizing. See ChangeLog for details and AUTHORS for information about authors. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ June 11, 2011 ============= Vifm-0.6.1 is available. ------------------------ Windows version remains unchanged for now. I'm planning to use one code base for both Unix and Windows platforms and it would take some time to do that. Major changes since 0.5: - added support for user mappings; - added file selectors (like motions and text-objects); - improved sort dialog; - added filetype detection using GTK+ or libmagic (:file); - added directory stack (:pushd, :popd); - added completion for :! and :!! commands; - added custom file viewers (:view); - added startup file; - better utf8 support; - added :set command and options. See ChangeLog for details. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ August 7, 2009 ============== Vifm-0.5 is available. ---------------------- This release is mainly user contributed patches and a new port for Windows. A filetype setting was added to allow the mounting of files with fuse-zip and other filesystems based on fuse. The :com input was changed to accept wide characters. The Windows port is missing some of the features of the Unix version but it is useful and stable enough for an initial release. The following commands were added in the Windows port: - :copy; - :move; - :volume - list mounted volumes. vifm-0.14/README000066400000000000000000000040401475151500600132610ustar00rootroot00000000000000Vifm - Vim-like file manager 2001 - 2025 Version: 0.14 This file last updated: 08 February 2025 Brief Description Vifm is a Vim-like file manager with curses interface extended with some useful ideas from mutt. If you use Vim, Vifm gives you complete keyboard control over your files without having to learn a new set of commands. It goes not just about Vim-like keybindings, but also about modes, options, registers, commands and other things you might already like in Vim. Just like Vim, Vifm tries to adhere to the Unix philosophy. So instead of working solutions which are set in stone user is provided with a set of means for customization of Vifm to one's likings. Though builtin functionality should be enough for most of use cases. Contacts Website: https://vifm.info/ Wiki: https://wiki.vifm.info/ Q&A: https://q2a.vifm.info/ Bugs and feature requests can be reported at: * https://github.com/vifm/vifm/issues * https://sourceforge.net/p/vifm/_list/tickets The preferred way of posting usage questions is Q&A site: * https://q2a.vifm.info/ Bugs, suggestions and comments can also be communicated via email: * xaizek@posteo.net Read-only and very low traffic news mailing list is at: * vifm-announce@lists.sourceforge.net Subscription form for it is here: * https://lists.sourceforge.net/lists/listinfo/vifm-announce Repositories: * https://sourceforge.net/projects/vifm/ * https://github.com/vifm/vifm Vim plugin: * https://github.com/vifm/vifm.vim Collection of color schemes is available at: * https://github.com/vifm/vifm-colors Their previews can be found at: * https://vifm.info/colorschemes.shtml Configurations for iconic fonts: * https://github.com/cirala/vifm_devicons * https://github.com/yanzhang0219/dotfiles/tree/master/.config/vifm Preview scripts: * https://github.com/cirala/vifmimg * https://github.com/eylles/vifm-sixel-preview * https://github.com/iambumblehead/thu.sh vifm-0.14/README.md000066400000000000000000000074761475151500600137000ustar00rootroot00000000000000# Vifm – Vim-like file manager ![Vifm logo](data/graphics/vifm-96px.png) [![][AA]][A]  [![][FF]][F]  [![][UU]][U]  [![][SS]][S] _Latest release is 0.14. This file last updated on 08 February 2025._ ## Brief Description ## **Vifm** is a curses based Vim-like file manager extended with some useful ideas from mutt. If you use Vim, Vifm gives you complete keyboard control over your files without having to learn a new set of commands. It goes not just about Vim-like keybindings, but also about modes, options, registers, commands and other things you might already like in Vim. Just like Vim, Vifm tries to adhere to the Unix philosophy. So instead of working solutions which are set in stone user is provided with a set of means for customization of Vifm to one's likings. Though builtin functionality should be enough for most of use cases. ## Resources and Contacts ## | Usage | Link | :---: | :--: | Website | https://vifm.info/ | Wiki | https://wiki.vifm.info/ | Q & A | https://q2a.vifm.info/ ### Communication ### | Reason | Channel | :----: | :-----: | Bugs & Feature Requests | [GitHub][bugs-gh], [SourceForge][bugs-sf] or via [email] | Preferred place for asking usage questions | Posting on the [Q&A] site | Read-only and very low traffic news mailing list | [vifm-announce] ### Other resources ### | Usage | Where to find | :---: | :-----------: | Repositories | [GitHub][repo-gh] and [SourceForge][repo-sf] | Vim Plugin | [Repository][vim-plugin] | Colorschemes (maintained) | [Repository][colors] and [colorscheme-previews] | Devicons/favicons | [[1]][devicons-1], [[2]][devicons-2] | vifmimg (image preview) | [Repository][vifmimg] (using [Überzug] to display the images) | sixel image preview | [Repository][sixel-preview] (for [Sixel]-capable terminals) | thu.sh (image preview) | [Repository][thu.sh] (Sixel or Kitty) ## Screenshots ## ![Screenshot](data/graphics/screenshot.png) ![Screenshot](data/graphics/screenshot2.png) ## Getting Started ## A good idea for quick start might be skimming over [cheatsheet] for the main mode (that is Normal mode), reading some sections on basic usage on [the wiki][wiki-manual] and looking at sample configuration file (run `:edit $MYVIFMRC`). ## License ## GNU General Public License, version 2 or later. [Q&A]: https://q2a.vifm.info/ [email]: mailto:xaizek@posteo.net [vifm-announce]: https://lists.sourceforge.net/lists/listinfo/vifm-announce [vim-plugin]: https://github.com/vifm/vifm.vim [colors]: https://github.com/vifm/vifm-colors [colorscheme-previews]: https://vifm.info/colorschemes.shtml [devicons-1]: https://github.com/cirala/vifm_devicons [devicons-2]: https://github.com/yanzhang0219/dotfiles/tree/master/.config/vifm [vifmimg]: https://github.com/cirala/vifmimg [sixel-preview]: https://github.com/eylles/vifm-sixel-preview [thu.sh]: https://github.com/iambumblehead/thu.sh [Überzug]: https://github.com/jstkdng/ueberzugpp/ [bugs-gh]: https://github.com/vifm/vifm/issues [bugs-sf]: https://sourceforge.net/p/vifm/_list/tickets [repo-gh]: https://github.com/vifm/vifm [repo-sf]: https://sourceforge.net/projects/vifm/ [cheatsheet]: https://vifm.info/cheatsheets.shtml [wiki-manual]: https://wiki.vifm.info/index.php?title=Manual [Sixel]: https://www.arewesixelyet.com/ [AA]: https://ci.appveyor.com/api/projects/status/ywfhdev1l3so1f5e/branch/master?svg=true [A]: https://ci.appveyor.com/project/xaizek/vifm/branch/master [FF]: http://ci.vifm.info/badges/svg/master [F]: http://ci.vifm.info/ [UU]: http://cov.vifm.info/badges/svg/master [U]: http://cov.vifm.info/branches/master [SS]: https://scan.coverity.com/projects/699/badge.svg [S]: https://scan.coverity.com/projects/vifm-vifm vifm-0.14/THANKS000066400000000000000000000134661475151500600133300ustar00rootroot00000000000000People named in this file helped make Vifm better, less buggy and more portable by providing their ideas, suggestions, bug reports and time for testing. Names (or nick names) are in alphabetical order. Special thanks go to these individuals who actively participated in development and testing of large number of features: * Alexandre Viau * Colin Cartade * filterfalse * Svyatoslav Mishyn (juef) 45jqlakjrf87ayte7hy34ter4nguijauzl4eitk 702b Abdó Roig-Maranges (aroig) AERDU afsheenb Afz agguser aksr Alborz Jafari Alejandro Pulver (alepulver) Aleksandr Vysotskiy (loki1368) aleksejrs Alexandr Keyp (IAmKapuze) Alexandru Geana (alegen) Allan Neal (akneal) Allison McNulty (allora) AndreaHasani Andrew Lannan Andrew Savchenko Anton Gepting Anton Kochkov (XVilka) Artur F. (arturfabriciohahaedgy) Artur Shaik (artur-shaik) astrell AtomToast Aurelio Sanabria (Sufrostico) Azin Sharaf b0x4it Badalisc Bas Bossink (basbossink) Bearcat M. Şándor (bearcatsandor) Behrooz Ben Boeckel (mathstuf) Ben Elan Ben Lu (ayroblu) Bernhard Grotz bitraid blurm Branislav Gerazov bratekarate Brian Callahan (ibara) Bruce Hunsaker (hunsakerbn) bsdmp c02y Canute (canute24) Carl Mueller (carlmuller) Carlos Pita Charles Kauffman chelovechishko Chema Alonso Josa (nimiux) chenrui333 ChongChong He Christian Fillion (cfillion) Christian Herdtweck Christoph (informationen) Christoph Schmidpeter ckester Coco 17dec CoreCube Cosmin Popescu (cosminadrianpopescu) CosmosAtlas dalvand Damian Ariel Perticone dancread Daniel Dettlaff (dmilith) Daniel J. Perry (BioBox) Daniel Mueller (d-e-s-o) Daniel Polanco (dlpolanco) Daniel R. (reicheltd) David Sierra DiazGranados (davidsierradz) dcb314 Denis Protivenskiy Dennis Hamester Dennis Preiser (0xDP) DieSpinne dikiy Diogo Lemos (dmlemos) Dmitry Frank (dimonomid) dmocek eco0414 Ed Pavlov Egor Gumenyuk (boo1ean) einhander elricbk emarsk emorozov Evgeniy (iron-udjin) Factorial Prime Fang (peromage) Flaviu Tamas (flaviut) Florian Baumann (derflob) flux242 FlyCat (yanwh0311) fogine fohrums gammaray gcmt Gene Zharov geo909 GeorgeHJ ggbari Gomme Bidule granderil greye Grueslayer gruvw gtors GummyGun hacksenwerk Hans Bieshaar Hans Kristian Otnes Berge Hans Petter Jansson (hpjansson) heelsleeh Hendrik Jaeger (henk) Henrik Holst (hholst80) hofheinz hutou iambumblehead iboggs infinitewhileloop Ink (inknoir) intelfx iSeeU816 itshog IvanBarsukov j-xella J. Reis Jakob Helmecke James Dietrich Janek (xeruf) Jason Dreisbach (jtdreisb) Jason W. Ryan jc-SpaceXp jcarreja Jeet Sukumaran (jeetsukumaran) Jeffrey C. Albro (jalbro) Jeremy Yuan Jiji Jing Liu Jiri Wiesner (jiriwiesner) Jochen Schweizer (durcheinandr) Johannes (johannesmeng) John Fred Fadrigalan (cevhyruz) John Magolske John Shea (coachshea) Jose Riha (jose1711) Joseph LP (ootput) Josh Wainwright (joshaw) Joshua Jensch (patroclos) jsmith51 (metal.lunchbox) justpretending2 kalterfive kangshugang Karol M. Langner (langner) kazufukurou Ken Allen (cardboard42) Kendrick Taylor (sixcircuit) khaoos-abominable Konst Mayer (cdlscpmv) Kornel ks1c ksandr1v laggardkernel landhar Larry Hynes (larryhynes) laur89 lcj LinArcX Lomov Vladimir (lomov_vl) loongw Losiara Luka Markušić (mark2185) lyuts M Kelly m-fonseca m-kru Ma_Sys.ma MadMaverick9 makijato Marcin Juszkiewicz (hrw) Marcin Kurczewski (rr-) Marcos Cruz Marius Schmidl Mark S. (Markuzcha) Markus Elfring (elfring) Martin Fischer Marton Balazs (balmar) mateusz28 Matt Alexander (mattalexx) Matthias Braun (mb720) maxigaz Melandel Merovius mhdzli Michael Corvin Michael Kopp Michael Maddern (madders) Michael Vetter (jubalh) michaellee8 Michal Belica (beli-sk) Michel Normand Michelle Bonk (unixtechie) Michka Popoff (iMichka) midrare Miguel Madrid Mencía (mimame) MikeLemon Milan Svoboda (tex) Miles (pkordy) mini-turtle Miodrag Tokić (loonies) mrajner Muhammed Zakir Mukund Mauji (maujim) mvucBmM0 mwgkgk nandox nicodebo nobodyatandnothing Normen Hansen (normen) obtroston octos Oleg Gordienko (gordio) Olmo Kramer Ondrej Novy (onovy) oo- opennota Oskar Grunning (sQVe) ovk p-kolacz Pavel (neoascetic) Pavel Platto (hinidu) Pavneet Arora Paweł Smolak (psmolak) Peter Barnes petRUShka phanium (a.k.a. phanen) phijor Phil Runninger Philipp Philipp Glira (pglira) Pierre Dorbais (chdorb) Pierric82 piotryordanov PRESFIL qadzek qinghao (haobug) qsmodo Quaddroo r0ck r44083 rafasc Rainer Suhm Ralf Schmitt randomizedthinking ratnamhof rbong Reece Petersen Regis ret2src RetekBacsi Reva Revadigar Richard Benson Robert Pergl (perglr) Robert Sarkozi Roger Bongers rok (aca) Roland Roman Plášil (Quiark) Ross Hadden (rosshadden) RR0925 Ruslan Osmanov (rosmanov) Russell Urquhart rwtallant13 Safal Piya (mrsafalpiya) SanLe santhoshr Sassan Haradji (sassanh) Schmalzhaf Stefan Schrijvers Luc (Begasus) SearyBlue Sebastian Cyprych Seok Won Lee (ijleesw) Sergei Shilovsky Sergei Trofimovich (trofi) Seth VanHeulen (svanheulen) Shakil Akhtar sharklasers996 Shawn Young (drphys) Shuo (shenqshuoh) sirex (sirexas) Sitaram Chamarty smoothdad smpolymen spence91 Stas Malavin Stas Panteleev Stephano (cao) Stephen Horst (sjhorst) Stephen L. Holtz (stephenholtz) StillSteal Stéphane (istib) sudo-nice Svadkos Svenn Are Bjerkem (svenn) svenn71 Svetlozar Iliev (asmodeus812) Sylwia Ptasinska (SylEleuth) Szilárd Andai tagwint Taras Halturin (halturin) tcftbl th1rdey3 The Cyberduck TheMystifyingCharacter theorlangur Thomas Nemeth Tiago Tim Schaeffer (Numeromancer) Toan Nguyen (toan2406) TobiSGD Toby Hawkins (HawkinsT) Tom Jansen Tomek K. (TomiCode) TornaxO7 Tuan Bui (tuanbass) tYGjQCsvVI Tykin Tyler Spivey Typo user451421541757324 Vadim Curcă Valery Ushakov (nbuwe) verdult Vigi Vlad Glagolev (Stealth) vodbyte Von Welch vuenn vzel willemw12 Xirui Zhao (xiruizhao) y2kbugger Yang Zou yanzhang0219 Yuriy Artemyev (anuvyklack) Yusuf Aktepe Zeng (Bekaboo) zpxue Zsolt Udvari (uzsolt) zsugabubus zzx41375004 Евгений Жаров (ezharov) Сергей Соловьёв (Sergej Soloviov) 高浩亮 (haolian9) vifm-0.14/TODO000066400000000000000000000173421475151500600131020ustar00rootroot00000000000000Basic things: * Middle ellipsis breaks search highlighting. * Improve ga and gA commands. (partially done) * Queueing of file operations. * Backgrounding of commands with job control (pause/resume/kill). (partially done) * Display parsing errors in dialog that indicate the error, don't rely on status bar. (partially done) * Remove trash option, since we have two commands for deletion. * Filtering in menus. * Process shell pause request for running in %s. * Responsive TUI during blocking operations. * Better failed operation messages. (partially done) * Make status bar able to display error and info messages at the same time. * Command to create multiple copies of selected file. Documentation: * State the need of *nix tools on Windows more explicitly. * Document single and double quotes treating in the command-line mode. * Divide docs into several files (as it's quite big now). * Document name conflict resolution options. * Add separate section on bookmarks. Vi(m) specific features: * Add support for directory completion for some of :set options. * 'wildignore' ('wig') option * Think about dot normal mode command. * Completion based on global (when one enters pattern, e.g. *.c). * Add support of n flag for :substitute command. * :let mapleader and support. * Ctrl-W F key. * Add support of [count] for Ctrl-E/Ctrl-Y/H/M/L. * nrformats option as in Vim. * Better ranges (add support for search patterns). * :map without arguments. * Consider adding support for sequences like \. * Completion of first argument for :map commands. * Make gU2U and similar commands work as in Vim. * Change file list filters to use fold levels. * /, ?, n, N as selectors. * Fix '' to go back to all jumps G gg links (in one directory?). * Maybe make zf and zd more Vim-like. * Kinda macros like in Vim (qa ... q). * Add =~ and !~ operators to expressions. * Add titleold option. * Support hex and octal numbers in :set. * Maybe add %p macro to rulerformat option. Windows: * Make properties dialog change file attributes recursively. * Setup automatic Windows builds for master branch. (partially done) * Make :chmod accept arguments. * Add command to create .lnk files. * Sort completion items ignoring their case on Windows. * Handle numpad keys better, just like corresponding non-numpad keys. * Make 'fastrun' understand file extensions on Windows (to ignore them). * Make 'slowfs' option available on Windows * Support more of pdcurses specific keys (e.g. , ). * Read first bytes of files and treat '#!' files as executable. Possible things to add: * Add macros for marks. * Make package for Cygwin. * Position macros for user defined commands (%1, %2, ..., %9). * Improve sorting (iext; choosing multiple sorting keys in dialog). (partially done) * Merged directory history for both panes. * Wrapping of lines in the menus. * Something like :g/.../com and :v/.../com in Vim. * Don't reread config files on :restart for --no-configs session. * Better renaming keys. * Quad/multiple-views * Add a general file preview script. * A more convenient shortcut for the :filter command (at least :filt). * Multiselect for items (menu and/or file list). * inotify support on Linux. (partially done) * :filter !filter-tool * Use system wide mimetypes file. /etc/mailcap? * Add "|" command to menu to process list with external tool. * "Blow directory" command to replace directory with its content. * Emacs like Dired or Helm incremental search and complete * $_ env var and Alt-T combination as in bash shell. * Templates for :touch. * Reverse searching * Add g/ and g? commands (search, but don't select files). * Parse escape sequences in menus as in preview. * Virtual File System - currently vifm can use FUSE to mount most file systems. * Something to control behaviour of menu picks. * Like gv but to select just pasted files (gp?). * g~ and g?. * Add trashes bang to list empty trashes or all of them. * 'wildmode' option. * Try to make it work in monochrome terminal. * Support of command line arguments like ~/some.ssh/server/path (for FUSE). * Treat `:filter pattern` as `:filter \`. * Add search history for less-like mode. * "Rename existing file" option on name conflicts. * Make use of new job information in :jobs menu. * Update visible symlinks in the other pane on updating current pane. * Mouse support. (partially done) * Possibility to make colorful background per column. * Add a key to menu mode to repeat command and update menu. * Consider preserving more on file copy (ACL, sparse files). * File access history. * Make :alink, :copy, ... accept globs (e.g. :co *.c). * Highlight first line of command-editing buffer in different color. * Output numbers on :hi if it were numbers in color scheme. Questionable things: * Full client-server operation of vifm (separate core from TUI). * Maybe re-position cursor after :!ls%u. * Remove items from :history command menu? * Maybe use @path syntax to load custom views. * Add + and - commands to undo by commands, not command groups. * Modify marks on rename operations. * Remove delay on file overwrite. * Make :undolist more interactive. * Add GUI interface one day. * Use custom title for fuse mounts * Option to trigger completion on slash in command-line. * :edit - select the file after exiting editor? * Ability to enter a mount with multiple vifm instances without reunpacking/reconnecting. * Consider conflict resolution for :move and alike. * Make directory stack menu interactive? * Tree-like view with support of foldings (for each directory). (partially done) * Consider adding "da" to remove all elements in :bmarks menu. * Command like :run[ &]. * Add :set to menu mode command-line. * Consider asking more often before performing file operations. * Termcap or terminfo support for keybindings * Shorten home path to ~ in item origins? * Add :increment and :decrement commands. * Consider changing "dd" to "d" in menus. * Consider caching directory sizes in vifminfo. * Shell alias execution (and completion) (partially done) * Decide whether redefining command shortcuts like :fil should be allowed. * Add a flag to 'grepprg' to enable parsing of `ag -H ...` output. * Ability to hide command line when not active. * Add tags to angle bracket maps in vimdoc. * :alias * Live preview of color schemes. * A way to scroll suggestion results. * More customizable trash. * Add :toupper and :tolower functions. * More trash-like trash. * Accept regexps as second argument of :colo command. Code improvements: * Write more tests. (partially done) * Consider mentioning libncursesw5-dev in configuration error for Debian-based systems. * Reduce number of magic numbers. (partially done) * Create separate utilities for engine/ part to make them self-contained. * Fix code duplication related to composing of undo messages. * Allow limiting input length for command-line prompt submode. * Get rid of repeatable `menu->win_rows - 3` in menu.c. * Separate filelist data from view data (extract into separate structure). * Improve logging (print back trace in some cases, increase verbosity). * Try reimplementing cmd_core.c:line_pos by calling dispatch_line. * Write syscalls implementation of chgrp, chmod and chown. * Sane asynchronous signals handling. * Move startup and init code out of config.c and vifm.c to separate file. * Consider using curses panes, not just windows. * Show "An error occurred" message on fail to build menus. * Consider not using {} initializer. * Use timeout command to set time limit for tests on CI. * Logging levels. vifm-0.14/aclocal.m4000066400000000000000000001371421475151500600142530ustar00rootroot00000000000000# generated automatically by aclocal 1.17 -*- Autoconf -*- # Copyright (C) 1996-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.72],, [m4_warning([this file was generated for autoconf 2.72. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.17' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.17], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.17])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([_AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl AC_REQUIRE([_AM_PROG_RM_F]) AC_REQUIRE([_AM_PROG_XARGS_N]) dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2022-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_RM_F # --------------- # Check whether 'rm -f' without any arguments works. # https://bugs.gnu.org/10828 AC_DEFUN([_AM_PROG_RM_F], [am__rm_f_notfound= AS_IF([(rm -f && rm -fr && rm -rf) 2>/dev/null], [], [am__rm_f_notfound='""']) AC_SUBST(am__rm_f_notfound) ]) # Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SLEEP_FRACTIONAL_SECONDS # ---------------------------- AC_DEFUN([_AM_SLEEP_FRACTIONAL_SECONDS], [dnl AC_CACHE_CHECK([whether sleep supports fractional seconds], am_cv_sleep_fractional_seconds, [dnl AS_IF([sleep 0.001 2>/dev/null], [am_cv_sleep_fractional_seconds=yes], [am_cv_sleep_fractional_seconds=no]) ])]) # _AM_FILESYSTEM_TIMESTAMP_RESOLUTION # ----------------------------------- # Determine the filesystem's resolution for file modification # timestamps. The coarsest we know of is FAT, with a resolution # of only two seconds, even with the most recent "exFAT" extensions. # The finest (e.g. ext4 with large inodes, XFS, ZFS) is one # nanosecond, matching clock_gettime. However, it is probably not # possible to delay execution of a shell script for less than one # millisecond, due to process creation overhead and scheduling # granularity, so we don't check for anything finer than that. (See below.) AC_DEFUN([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION], [dnl AC_REQUIRE([_AM_SLEEP_FRACTIONAL_SECONDS]) AC_CACHE_CHECK([filesystem timestamp resolution], am_cv_filesystem_timestamp_resolution, [dnl # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `[ls -t conftest.ts[12]]` && { test "$[]*" != "X conftest.ts1 conftest.ts2" || test "$[]*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". _AS_ECHO_UNQUOTED( ["Bad output from ls -t: \"`[ls -t conftest.ts[12]]`\""], [AS_MESSAGE_LOG_FD]) AC_MSG_FAILURE([ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment.]) fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$[]2" = conftest.ts3 && test "$[]3" = conftest.ts2 && test "$[]4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ])]) # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_REQUIRE([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION]) # This check should not be cached, as it may vary across builds of # different projects. AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[]*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$[]2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done AC_MSG_RESULT([$am_build_env_is_sane]) if test "$am_build_env_is_sane" = no; then AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= AS_IF([test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1],, [dnl ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ]) AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SILENT_RULES # ---------------- # Enable less verbose build rules support. AC_DEFUN([_AM_SILENT_RULES], [AM_DEFAULT_VERBOSITY=1 AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl dnl Delay evaluation of AM_DEFAULT_VERBOSITY to the end to allow multiple calls dnl to AM_SILENT_RULES to change the default value. AC_CONFIG_COMMANDS_PRE([dnl case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi ])dnl ]) # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Set the default verbosity level to DEFAULT ("yes" being less verbose, "no" or # empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_REQUIRE([_AM_SILENT_RULES]) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1])]) # Copyright (C) 2001-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test x$am_uid = xunknown; then AC_MSG_WARN([ancient id detected; assuming current UID is ok, but dist-ustar might not work]) elif test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test x$gm_gid = xunknown; then AC_MSG_WARN([ancient id detected; assuming current GID is ok, but dist-ustar might not work]) elif test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR # Copyright (C) 2022-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_XARGS_N # ---------------- # Check whether 'xargs -n' works. It should work everywhere, so the fallback # is not optimized at all as we never expect to use it. AC_DEFUN([_AM_PROG_XARGS_N], [AC_CACHE_CHECK([xargs -n works], am_cv_xargs_n_works, [dnl AS_IF([test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3"], [am_cv_xargs_n_works=yes], [am_cv_xargs_n_works=no])]) AS_IF([test "$am_cv_xargs_n_works" = yes], [am__xargs_n='xargs -n'], [dnl am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "$@" "$am__xargs_n_arg"; done; }' ])dnl AC_SUBST(am__xargs_n) ]) m4_include([build-aux/m4/ax_check_compile_flag.m4]) m4_include([build-aux/m4/ax_pthread.m4]) vifm-0.14/build-aux/000077500000000000000000000000001475151500600142755ustar00rootroot00000000000000vifm-0.14/build-aux/compile000077500000000000000000000163501475151500600156600ustar00rootroot00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: vifm-0.14/build-aux/config.guess000077500000000000000000001403041475151500600166170ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2021 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2021-06-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: vifm-0.14/build-aux/config.h.in000066400000000000000000000210471475151500600163240ustar00rootroot00000000000000/* build-aux/config.h.in. Generated from configure.ac by autoheader. */ /* load libX11 dynamically */ #undef DYN_X11 /* parsing of .desktop files */ #undef ENABLE_DESKTOP_FILES /* enables extended keys (arrows etc.) */ #undef ENABLE_EXTENDED_KEYS /* executing commands remotely */ #undef ENABLE_REMOTE_CMDS /* alloca.h header is available. */ #undef HAVE_ALLOCA_H /* A_ITALIC attribute is available. */ #undef HAVE_A_ITALIC_DECL /* timespec is good. */ #undef HAVE_CONSISTENT_TIMESPEC /* Define to 1 if you have the declaration of 'MAGIC_MIME_TYPE', and to 0 if you don't. */ #undef HAVE_DECL_MAGIC_MIME_TYPE /* Define to 1 if you have the declaration of '_PC_CASE_SENSITIVE', and to 0 if you don't. */ #undef HAVE_DECL__PC_CASE_SENSITIVE /* extended curses colors are present */ #undef HAVE_EXTENDED_COLORS /* fdatasync() is available. */ #undef HAVE_FDATASYNC /* Define if file program present */ #undef HAVE_FILE_PROG /* Define to 1 if fseeko (and ftello) are declared in stdio.h. */ #undef HAVE_FSEEKO /* Define to 1 if you have the 'futimens' function. */ #undef HAVE_FUTIMENS /* Define to 1 if the system has the type 'getmntinfo'. */ #undef HAVE_GETMNTINFO /* use glib2 to determine mime type */ #undef HAVE_GLIB /* inotify is available */ #undef HAVE_INOTIFY /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `magic' library (-lmagic). */ #undef HAVE_LIBMAGIC /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_BINFMTS_H /* malloc.h header is available. */ #undef HAVE_MALLOC_H /* MAX_ARG_STRLEN is available. */ #undef HAVE_MAX_ARG_STRLEN /* Define to 1 if you have the header file. */ #undef HAVE_MINIX_CONFIG_H /* Define to 1 if you have the header file. */ #undef HAVE_MNTENT_H /* Have PTHREAD_PRIO_INHERIT. */ #undef HAVE_PTHREAD_PRIO_INHERIT /* Define to 1 if you have the 'random' function. */ #undef HAVE_RANDOM /* Define to 1 if you have the 'reallocarray' function. */ #undef HAVE_REALLOCARRAY /* set_escdelay() function is available. */ #undef HAVE_SET_ESCDELAY_FUNC /* Define to 1 if you have the 'srandom' function. */ #undef HAVE_SRANDOM /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* strcasestr() is available. */ #undef HAVE_STRCASESTR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if 'd_type' is a member of 'struct dirent'. */ #undef HAVE_STRUCT_DIRENT_D_TYPE /* Define to 1 if 'st_mtim' is a member of 'struct stat'. */ #undef HAVE_STRUCT_STAT_ST_MTIM /* strverscmp() function is available. */ #undef HAVE_STRVERSCMP_FUNC /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSMACROS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_USER_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_WCHAR_H /* use X11 to determine terminal emulator title */ #undef HAVE_X11 /* extended file attributes are available */ #undef HAVE_XATTRS /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Data directory of the package. */ #undef PACKAGE_DATA_DIR /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Source directory of the package. */ #undef PACKAGE_SOURCE_DIR /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Configuration directory of the package. */ #undef PACKAGE_SYSCONF_DIR /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE /* Define to 1 if all of the C89 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* -n option is available for cp and mv */ #undef SUPPORT_NO_CLOBBER /* --reflink=auto option is available for cp */ #undef SUPPORT_REFLINK_AUTO /* Enable extensions on AIX, Interix, z/OS. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by C23 Annex F. */ #ifndef __STDC_WANT_IEC_60559_EXT__ # undef __STDC_WANT_IEC_60559_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Make it so that utf8proc does not think it is a library. */ #undef UTF8PROC_STATIC /* Version number of package */ #undef VERSION /* Program version as a comparable integer. */ #undef VERSION_NUM /* Define to 1 to embed compilation date into executable. */ #undef WITH_BUILD_TIMESTAMP /* Enable extensions in header files on OS X. */ #undef _DARWIN_C_SOURCE /* Enable large file processing on 32-bit systems. */ #undef _FILE_OFFSET_BITS /* Define to 1 if necessary to make fseeko visible. */ #undef _LARGEFILE_SOURCE /* Define to 1 on platforms where this makes off_t a 64-bit type. */ #undef _LARGE_FILES /* Number of bits in time_t, on hosts where this is settable. */ #undef _TIME_BITS /* Define to 1 to enable wide functions of ncurses in some environments. */ #undef _XOPEN_SOURCE_EXTENDED /* Define to 1 on platforms where this makes time_t a 64-bit type. */ #undef __MINGW_USE_VC2005_COMPAT /* Define to 'long int' if does not define. */ #undef off_t vifm-0.14/build-aux/config.sub000077500000000000000000001047141475151500600162670ustar00rootroot00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2021 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2021-08-14' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc caes, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: vifm-0.14/build-aux/depcomp000077500000000000000000000560201475151500600156550ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: vifm-0.14/build-aux/install-sh000077500000000000000000000357761475151500600163230ustar00rootroot00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: vifm-0.14/build-aux/m4/000077500000000000000000000000001475151500600146155ustar00rootroot00000000000000vifm-0.14/build-aux/m4/ax_check_compile_flag.m4000066400000000000000000000064031475151500600213300ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # # DESCRIPTION # # Check whether the given FLAG works with the current language's compiler # or gives an error. (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the current language's default # flags (e.g. CFLAGS) when the check is done. The check is thus made with # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to # force the compiler to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_COMPILE_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 5 AC_DEFUN([AX_CHECK_COMPILE_FLAG], [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_VAR_IF(CACHEVAR,yes, [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_COMPILE_FLAGS vifm-0.14/build-aux/m4/ax_pthread.m4000066400000000000000000000540341475151500600172040ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC and PTHREAD_CXX to any special C compiler that is # needed for multi-threaded programs (defaults to the value of CC # respectively CXX otherwise). (This is necessary on e.g. AIX to use the # special cc_r/CC_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also to link with them as well. For example, you might link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # $PTHREAD_CXX $CXXFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threaded programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # CXX="$PTHREAD_CXX" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to # that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the # PTHREAD_PRIO_INHERIT symbol is defined when compiling with # PTHREAD_CFLAGS. # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # Updated for Autoconf 2.68 by Daniel Richard G. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2011 Daniel Richard G. # Copyright (c) 2019 Marc Stevens # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 31 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_PROG_SED]) AC_LANG_PUSH([C]) ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on Tru64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then ax_pthread_save_CC="$CC" ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"]) AS_IF([test "x$PTHREAD_CXX" != "x"], [CXX="$PTHREAD_CXX"]) CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS]) AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes]) AC_MSG_RESULT([$ax_pthread_ok]) if test "x$ax_pthread_ok" = "xno"; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi CC="$ax_pthread_save_CC" CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items with a "," contain both # C compiler flags (before ",") and linker flags (after ","). Other items # starting with a "-" are C compiler flags, and remaining items are # library names, except for "none" which indicates that we try without # any flags at all, and "pthread-config" which is a program returning # the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 # (Note: HP C rejects this with "bad form for `-t' option") # -pthreads: Solaris/gcc (Note: HP C also rejects) # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads and # -D_REENTRANT too), HP C (must be checked before -lpthread, which # is present but should not be used directly; and before -mthreads, # because the compiler interprets this as "-mt" + "-hreads") # -mthreads: Mingw32/gcc, Lynx/gcc # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case $host_os in freebsd*) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) ax_pthread_flags="-kthread lthread $ax_pthread_flags" ;; hpux*) # From the cc(1) man page: "[-mt] Sets various -D flags to enable # multi-threading and also sets -lpthread." ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" ;; openedition*) # IBM z/OS requires a feature-test macro to be defined in order to # enable POSIX threads at all, so give the user a hint if this is # not set. (We don't define these ourselves, as they can affect # other portions of the system API in unpredictable ways.) AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING], [ # if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) AX_PTHREAD_ZOS_MISSING # endif ], [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])]) ;; solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (N.B.: The stubs are missing # pthread_cleanup_push, or rather a function called by this macro, # so we could check for that, but who knows whether they'll stub # that too in a future libc.) So we'll check first for the # standard Solaris way of linking pthreads (-mt -lpthread). ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags" ;; esac # Are we compiling with Clang? AC_CACHE_CHECK([whether $CC is Clang], [ax_cv_PTHREAD_CLANG], [ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG], [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ # if defined(__clang__) && defined(__llvm__) AX_PTHREAD_CC_IS_CLANG # endif ], [ax_cv_PTHREAD_CLANG=yes]) fi ]) ax_pthread_clang="$ax_cv_PTHREAD_CLANG" # GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) # Note that for GCC and Clang -pthread generally implies -lpthread, # except when -nostdlib is passed. # This is problematic using libtool to build C++ shared libraries with pthread: # [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460 # [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333 # [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555 # To solve this, first try -pthread together with -lpthread for GCC AS_IF([test "x$GCC" = "xyes"], [ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"]) # Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first AS_IF([test "x$ax_pthread_clang" = "xyes"], [ax_pthread_flags="-pthread,-lpthread -pthread"]) # The presence of a feature test macro requesting re-entrant function # definitions is, on some systems, a strong hint that pthreads support is # correctly enabled case $host_os in darwin* | hpux* | linux* | osf* | solaris*) ax_pthread_check_macro="_REENTRANT" ;; aix*) ax_pthread_check_macro="_THREAD_SAFE" ;; *) ax_pthread_check_macro="--" ;; esac AS_IF([test "x$ax_pthread_check_macro" = "x--"], [ax_pthread_check_cond=0], [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"]) if test "x$ax_pthread_ok" = "xno"; then for ax_pthread_try_flag in $ax_pthread_flags; do case $ax_pthread_try_flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; *,*) PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"` PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"` AC_MSG_CHECKING([whether pthreads work with "$PTHREAD_CFLAGS" and "$PTHREAD_LIBS"]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) PTHREAD_CFLAGS="$ax_pthread_try_flag" ;; pthread-config) AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) AS_IF([test "x$ax_pthread_config" = "xno"], [continue]) PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag]) PTHREAD_LIBS="-l$ax_pthread_try_flag" ;; esac ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_LINK_IFELSE([AC_LANG_PROGRAM([#include # if $ax_pthread_check_cond # error "$ax_pthread_check_macro must be defined" # endif static void *some_global = NULL; static void routine(void *a) { /* To avoid any unused-parameter or unused-but-set-parameter warning. */ some_global = a; } static void *start_routine(void *a) { return a; }], [pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */])], [ax_pthread_ok=yes], []) CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" AC_MSG_RESULT([$ax_pthread_ok]) AS_IF([test "x$ax_pthread_ok" = "xyes"], [break]) PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Clang needs special handling, because older versions handle the -pthread # option in a rather... idiosyncratic way if test "x$ax_pthread_clang" = "xyes"; then # Clang takes -pthread; it has never supported any other flag # (Note 1: This will need to be revisited if a system that Clang # supports has POSIX threads in a separate library. This tends not # to be the way of modern systems, but it's conceivable.) # (Note 2: On some systems, notably Darwin, -pthread is not needed # to get POSIX threads support; the API is always present and # active. We could reasonably leave PTHREAD_CFLAGS empty. But # -pthread does define _REENTRANT, and while the Darwin headers # ignore this macro, third-party headers might not.) # However, older versions of Clang make a point of warning the user # that, in an invocation where only linking and no compilation is # taking place, the -pthread option has no effect ("argument unused # during compilation"). They expect -pthread to be passed in only # when source code is being compiled. # # Problem is, this is at odds with the way Automake and most other # C build frameworks function, which is that the same flags used in # compilation (CFLAGS) are also used in linking. Many systems # supported by AX_PTHREAD require exactly this for POSIX threads # support, and in fact it is often not straightforward to specify a # flag that is used only in the compilation phase and not in # linking. Such a scenario is extremely rare in practice. # # Even though use of the -pthread flag in linking would only print # a warning, this can be a nuisance for well-run software projects # that build with -Werror. So if the active version of Clang has # this misfeature, we search for an option to squash it. AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread], [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG], [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one # (.c -> exe), because the warning occurs only in the second # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' ax_pthread_link_step=`AS_ECHO(["$ac_link"]) | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do AS_IF([test "x$ax_pthread_try" = "xunknown"], [break]) CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" ac_link="$ax_pthread_save_ac_link" AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], [ac_link="$ax_pthread_2step_ac_link" AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], [break]) ]) done ac_link="$ax_pthread_save_ac_link" CFLAGS="$ax_pthread_save_CFLAGS" AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no]) ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" ]) case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in no | unknown) ;; *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; esac fi # $ax_pthread_clang = yes # Various other checks: if test "x$ax_pthread_ok" = "xyes"; then ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_CACHE_CHECK([for joinable pthread attribute], [ax_cv_PTHREAD_JOINABLE_ATTR], [ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [int attr = $ax_pthread_attr; return attr /* ; */])], [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break], []) done ]) AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ test "x$ax_pthread_joinable_attr_defined" != "xyes"], [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$ax_cv_PTHREAD_JOINABLE_ATTR], [Define to necessary symbol if this constant uses a non-standard name on your system.]) ax_pthread_joinable_attr_defined=yes ]) AC_CACHE_CHECK([whether more special flags are required for pthreads], [ax_cv_PTHREAD_SPECIAL_FLAGS], [ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" ;; esac ]) AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ test "x$ax_pthread_special_flags_added" != "xyes"], [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" ax_pthread_special_flags_added=yes]) AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], [ax_cv_PTHREAD_PRIO_INHERIT], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[int i = PTHREAD_PRIO_INHERIT; return i;]])], [ax_cv_PTHREAD_PRIO_INHERIT=yes], [ax_cv_PTHREAD_PRIO_INHERIT=no]) ]) AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ test "x$ax_pthread_prio_inherit_defined" != "xyes"], [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.]) ax_pthread_prio_inherit_defined=yes ]) CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" # More AIX lossage: compile with *_r variant if test "x$GCC" != "xyes"; then case $host_os in aix*) AS_CASE(["x/$CC"], [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], [#handle absolute path differently from PATH based program lookup AS_CASE(["x$CC"], [x/*], [ AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"]) AS_IF([test "x${CXX}" != "x"], [AS_IF([AS_EXECUTABLE_P([${CXX}_r])],[PTHREAD_CXX="${CXX}_r"])]) ], [ AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC]) AS_IF([test "x${CXX}" != "x"], [AC_CHECK_PROGS([PTHREAD_CXX],[${CXX}_r],[$CXX])]) ] ) ]) ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) AC_SUBST([PTHREAD_CXX]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test "x$ax_pthread_ok" = "xyes"; then ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) : else ax_pthread_ok=no $2 fi AC_LANG_POP ])dnl AX_PTHREAD vifm-0.14/build-aux/missing000077500000000000000000000153361475151500600157040ustar00rootroot00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: vifm-0.14/build-aux/test-driver000077500000000000000000000114171475151500600164770ustar00rootroot00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <"$log_file" "$@" >>"$log_file" 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>"$log_file" # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: vifm-0.14/configure000077500000000000000000012760111475151500600143220ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.72 for vifm 0.14. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in #( e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in #( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in #( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and xaizek@posteo.net $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='vifm' PACKAGE_TARNAME='vifm' PACKAGE_VERSION='0.14' PACKAGE_STRING='vifm 0.14' PACKAGE_BUGREPORT='xaizek@posteo.net' PACKAGE_URL='https://vifm.info' ac_unique_file="src/vifm.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= enable_year2038=no ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS SANITIZERS_CFLAGS PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CXX PTHREAD_CC ax_pthread_config CPP SED DATA_SUFFIX IN_GIT_REPO GIT_PROG VIM_PROG PERL_PROG SED_PROG AWK_PROG COL_PROG MANGEN_PROG HAVE_FILE_PROG TESTS_CFLAGS host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC am__xargs_n am__rm_f_notfound AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_largefile with_curses_name with_curses with_glib with_gtk with_libmagic with_X11 with_dyn_X11 enable_extended_keys enable_desktop_files enable_remote_cmds enable_developer enable_werror enable_coverage enable_build_timestamp with_sanitize enable_year2038 ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures vifm 0.14 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/vifm] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of vifm 0.14:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-largefile omit support for large files --disable-extended-keys disable extended keys (like arrows, home etc.). Without it will be no delay after pressing escape [default=enabled] --disable-desktop-files disable parsing of *.desktop files found on your system to get a list of programs associated with filetypes [default=enabled] --enable-remote-cmds enable remote command sending. [default=enabled] --enable-developer enables features of interest to developers [default=disabled] --enable-werror pass -Werror flag to compiler [default=disabled] --enable-coverage enables coverage information generation [default=disabled] --disable-build-timestamp disables embedding build-timestamp information into executable [default=enabled] --enable-year2038 support timestamps after 2038 Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-curses-name=NAME name of curses library file [default=ncursesw] --with-curses=DIR where ncurses is installed --with-glib use GLib2 to determine mimetypes if available [default=yes] --with-gtk (obsolete name of --with-glib) use GLib2 to determine mimetypes if available [default=yes] --with-libmagic use libmagic to determine mimetypes if available [default=yes] --with-X11 use libX11 to determine terminal emulator title [default=yes] --with-dyn-X11 load libX11 dynamically [default=yes] --with-sanitize=basic|thread|leak enables sanitizers, "basic" means address and undefined sanitizers [default=] Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . vifm home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF vifm configure 0.14 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) eval "$3=yes" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (void); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (void); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR # ------------------------------------------------------------------ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. ac_fn_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 printf %s "checking whether $as_decl_name is declared... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` eval ac_save_FLAGS=\$$6 as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval $6=\$ac_save_FLAGS ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_check_decl # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 printf %s "checking for $2.$3... " >&6; } if eval test \${$4+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main (void) { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main (void) { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" else case e in #( e) eval "$4=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$4 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by vifm $as_me 0.14, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (char **p, int i) { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}/build-aux" # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.17' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir ;; esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5 printf %s "checking whether sleep supports fractional seconds... " >&6; } if test ${am_cv_sleep_fractional_seconds+y} then : printf %s "(cached) " >&6 else case e in #( e) if sleep 0.001 2>/dev/null then : am_cv_sleep_fractional_seconds=yes else case e in #( e) am_cv_sleep_fractional_seconds=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_sleep_fractional_seconds" >&5 printf "%s\n" "$am_cv_sleep_fractional_seconds" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking filesystem timestamp resolution" >&5 printf %s "checking filesystem timestamp resolution... " >&6; } if test ${am_cv_filesystem_timestamp_resolution+y} then : printf %s "(cached) " >&6 else case e in #( e) # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `ls -t conftest.ts[12]` && { test "$*" != "X conftest.ts1 conftest.ts2" || test "$*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". printf "%s\n" ""Bad output from ls -t: \"`ls -t conftest.ts[12]`\""" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment. See 'config.log' for more details" "$LINENO" 5; } fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$2" = conftest.ts3 && test "$3" = conftest.ts2 && test "$4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_filesystem_timestamp_resolution" >&5 printf "%s\n" "$am_cv_filesystem_timestamp_resolution" >&6; } # This check should not be cached, as it may vary across builds of # different projects. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_build_env_is_sane" >&5 printf "%s\n" "$am_build_env_is_sane" >&6; } if test "$am_build_env_is_sane" = no; then as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1 then : else case e in #( e) ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ;; esac fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in #( e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AM_DEFAULT_VERBOSITY=1 # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in #( e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } AM_BACKSLASH='\' am__rm_f_notfound= if (rm -f && rm -fr && rm -rf) 2>/dev/null then : else case e in #( e) am__rm_f_notfound='""' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking xargs -n works" >&5 printf %s "checking xargs -n works... " >&6; } if test ${am_cv_xargs_n_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3" then : am_cv_xargs_n_works=yes else case e in #( e) am_cv_xargs_n_works=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_xargs_n_works" >&5 printf "%s\n" "$am_cv_xargs_n_works" >&6; } if test "$am_cv_xargs_n_works" = yes then : am__xargs_n='xargs -n' else case e in #( e) am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "" "$am__xargs_n_arg"; done; }' ;; esac fi if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='vifm' VERSION='0.14' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi ac_config_headers="$ac_config_headers build-aux/config.h" printf "%s\n" "#define VERSION_NUM 1400" >>confdefs.h printf "%s\n" "#define PACKAGE_SYSCONF_DIR /**/" >>confdefs.h printf "%s\n" "#define PACKAGE_DATA_DIR /**/" >>confdefs.h printf "%s\n" "#define PACKAGE_SOURCE_DIR /**/" >>confdefs.h DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in #( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in #( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes else case e in #( e) ac_cv_safe_to_define___extensions__=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h if test $ac_cv_header_minix_config_h = yes then : MINIX=yes printf "%s\n" "#define _MINIX 1" >>confdefs.h printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h else case e in #( e) MINIX= ;; esac fi if test $ac_cv_safe_to_define___extensions__ = yes then : printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h fi if test $ac_cv_should_define__xopen_source = yes then : printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in #( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi AM_DEFAULT_VERBOSITY=0 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host" >&5 printf %s "checking host... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $host" >&5 printf "%s\n" "$host" >&6; } case "$host_os" in macos* | darwin*) OSX_HOST=1 ;; *) OSX_HOST= ;; esac TESTS_CFLAGS="$CFLAGS" printf "%s\n" "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h printf "%s\n" "#define UTF8PROC_STATIC 1" >>confdefs.h for ac_header in alloca.h do : ac_fn_c_check_header_compile "$LINENO" "alloca.h" "ac_cv_header_alloca_h" "$ac_includes_default" if test "x$ac_cv_header_alloca_h" = xyes then : printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h fi done for ac_header in malloc.h do : ac_fn_c_check_header_compile "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default" if test "x$ac_cv_header_malloc_h" = xyes then : printf "%s\n" "#define HAVE_MALLOC_H 1" >>confdefs.h printf "%s\n" "#define HAVE_MALLOC_H 1" >>confdefs.h fi done ac_fn_c_check_header_compile "$LINENO" "assert.h" "ac_cv_header_assert_h" "$ac_includes_default" if test "x$ac_cv_header_assert_h" = xyes then : else case e in #( e) as_fn_error $? "assert.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "ctype.h" "ac_cv_header_ctype_h" "$ac_includes_default" if test "x$ac_cv_header_ctype_h" = xyes then : else case e in #( e) as_fn_error $? "ctype.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "dirent.h" "ac_cv_header_dirent_h" "$ac_includes_default" if test "x$ac_cv_header_dirent_h" = xyes then : else case e in #( e) as_fn_error $? "dirent.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" if test "x$ac_cv_header_errno_h" = xyes then : else case e in #( e) as_fn_error $? "errno.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" if test "x$ac_cv_header_fcntl_h" = xyes then : else case e in #( e) as_fn_error $? "fcntl.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "grp.h" "ac_cv_header_grp_h" "$ac_includes_default" if test "x$ac_cv_header_grp_h" = xyes then : else case e in #( e) as_fn_error $? "grp.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" if test "x$ac_cv_header_inttypes_h" = xyes then : else case e in #( e) as_fn_error $? "inttypes.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" if test "x$ac_cv_header_limits_h" = xyes then : else case e in #( e) as_fn_error $? "limits.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : else case e in #( e) as_fn_error $? "locale.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "math.h" "ac_cv_header_math_h" "$ac_includes_default" if test "x$ac_cv_header_math_h" = xyes then : else case e in #( e) as_fn_error $? "math.h header not found." "$LINENO" 5 ;; esac fi for ac_header in mntent.h do : ac_fn_c_check_header_compile "$LINENO" "mntent.h" "ac_cv_header_mntent_h" "$ac_includes_default" if test "x$ac_cv_header_mntent_h" = xyes then : printf "%s\n" "#define HAVE_MNTENT_H 1" >>confdefs.h HAVE_MNTENT_H=1 fi done ac_fn_c_check_header_compile "$LINENO" "pwd.h" "ac_cv_header_pwd_h" "$ac_includes_default" if test "x$ac_cv_header_pwd_h" = xyes then : else case e in #( e) as_fn_error $? "pwd.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "signal.h" "ac_cv_header_signal_h" "$ac_includes_default" if test "x$ac_cv_header_signal_h" = xyes then : else case e in #( e) as_fn_error $? "signal.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default" if test "x$ac_cv_header_stdarg_h" = xyes then : else case e in #( e) as_fn_error $? "stdarg.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default" if test "x$ac_cv_header_stddef_h" = xyes then : else case e in #( e) as_fn_error $? "stddef.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes then : else case e in #( e) as_fn_error $? "stdint.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "stdio.h" "ac_cv_header_stdio_h" "$ac_includes_default" if test "x$ac_cv_header_stdio_h" = xyes then : else case e in #( e) as_fn_error $? "stdio.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes then : else case e in #( e) as_fn_error $? "stdlib.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" if test "x$ac_cv_header_string_h" = xyes then : else case e in #( e) as_fn_error $? "string.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" if test "x$ac_cv_header_sys_ioctl_h" = xyes then : else case e in #( e) as_fn_error $? "sys/ioctl.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "sys/stat.h" "ac_cv_header_sys_stat_h" "$ac_includes_default" if test "x$ac_cv_header_sys_stat_h" = xyes then : else case e in #( e) as_fn_error $? "sys/stat.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" if test "x$ac_cv_header_sys_time_h" = xyes then : else case e in #( e) as_fn_error $? "sys/time.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" if test "x$ac_cv_header_sys_types_h" = xyes then : else case e in #( e) as_fn_error $? "sys/types.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" if test "x$ac_cv_header_sys_wait_h" = xyes then : else case e in #( e) as_fn_error $? "sys/wait.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default" if test "x$ac_cv_header_termios_h" = xyes then : else case e in #( e) as_fn_error $? "termios.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default" if test "x$ac_cv_header_time_h" = xyes then : else case e in #( e) as_fn_error $? "time.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes then : else case e in #( e) as_fn_error $? "unistd.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default" if test "x$ac_cv_header_wchar_h" = xyes then : else case e in #( e) as_fn_error $? "wchar.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "wctype.h" "ac_cv_header_wctype_h" "$ac_includes_default" if test "x$ac_cv_header_wctype_h" = xyes then : else case e in #( e) as_fn_error $? "wctype.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "#if HAVE_SYS_PARAM_H # include #endif " if test "x$ac_cv_header_sys_sysmacros_h" = xyes then : printf "%s\n" "#define HAVE_SYS_SYSMACROS_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "#if HAVE_SYS_PARAM_H # include #endif " if test "x$ac_cv_header_sys_param_h" = xyes then : printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/user.h" "ac_cv_header_sys_user_h" "#if HAVE_SYS_PARAM_H # include #endif " if test "x$ac_cv_header_sys_user_h" = xyes then : printf "%s\n" "#define HAVE_SYS_USER_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "linux/binfmts.h" "ac_cv_header_linux_binfmts_h" "#if HAVE_SYS_PARAM_H # include #endif " if test "x$ac_cv_header_linux_binfmts_h" = xyes then : printf "%s\n" "#define HAVE_LINUX_BINFMTS_H 1" >>confdefs.h fi if test "$ac_cv_header_sys_user_h" = yes -a "$ac_cv_header_linux_binfmts_h" = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #ifndef PAGE_SIZE #define PAGE_SIZE sysconf(_SC_PAGESIZE) #endif int main() { (void)MAX_ARG_STRLEN; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "#define HAVE_MAX_ARG_STRLEN 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi ac_fn_c_check_type "$LINENO" "uid_t" "ac_cv_type_uid_t" "$ac_includes_default" if test "x$ac_cv_type_uid_t" = xyes then : fi ac_fn_c_check_type "$LINENO" "gid_t" "ac_cv_type_gid_t" "$ac_includes_default" if test "x$ac_cv_type_gid_t" = xyes then : fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes then : fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes then : fi ac_fn_c_check_type "$LINENO" "time_t" "ac_cv_type_time_t" "$ac_includes_default" if test "x$ac_cv_type_time_t" = xyes then : fi ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "$ac_includes_default" if test "x$ac_cv_type_uint64_t" = xyes then : fi ac_fn_c_check_type "$LINENO" "direntry_t" "ac_cv_type_direntry_t" "$ac_includes_default" if test "x$ac_cv_type_direntry_t" = xyes then : fi if test -n "$HAVE_MNTENT_H" ; then ac_fn_c_check_type "$LINENO" "mntent" "ac_cv_type_mntent" "$ac_includes_default" if test "x$ac_cv_type_mntent" = xyes then : fi else ac_fn_c_check_type "$LINENO" "getmntinfo" "ac_cv_type_getmntinfo" " #include #include #include " if test "x$ac_cv_type_getmntinfo" = xyes then : printf "%s\n" "#define HAVE_GETMNTINFO 1" >>confdefs.h fi fi ac_fn_c_check_type "$LINENO" "stat" "ac_cv_type_stat" "$ac_includes_default" if test "x$ac_cv_type_stat" = xyes then : fi ac_fn_c_check_type "$LINENO" "FILE" "ac_cv_type_FILE" "$ac_includes_default" if test "x$ac_cv_type_FILE" = xyes then : fi ac_fn_c_check_type "$LINENO" "wchar_t" "ac_cv_type_wchar_t" "$ac_includes_default" if test "x$ac_cv_type_wchar_t" = xyes then : fi ac_fn_c_check_func "$LINENO" "access" "ac_cv_func_access" if test "x$ac_cv_func_access" = xyes then : else case e in #( e) as_fn_error $? "access() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "atof" "ac_cv_func_atof" if test "x$ac_cv_func_atof" = xyes then : else case e in #( e) as_fn_error $? "atof() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "atoi" "ac_cv_func_atoi" if test "x$ac_cv_func_atoi" = xyes then : else case e in #( e) as_fn_error $? "atoi() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "calloc" "ac_cv_func_calloc" if test "x$ac_cv_func_calloc" = xyes then : else case e in #( e) as_fn_error $? "calloc() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "chdir" "ac_cv_func_chdir" if test "x$ac_cv_func_chdir" = xyes then : else case e in #( e) as_fn_error $? "chdir() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "close" "ac_cv_func_close" if test "x$ac_cv_func_close" = xyes then : else case e in #( e) as_fn_error $? "close() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "closedir" "ac_cv_func_closedir" if test "x$ac_cv_func_closedir" = xyes then : else case e in #( e) as_fn_error $? "closedir() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "dup" "ac_cv_func_dup" if test "x$ac_cv_func_dup" = xyes then : else case e in #( e) as_fn_error $? "dup() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "dup2" "ac_cv_func_dup2" if test "x$ac_cv_func_dup2" = xyes then : else case e in #( e) as_fn_error $? "dup2() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "execve" "ac_cv_func_execve" if test "x$ac_cv_func_execve" = xyes then : else case e in #( e) as_fn_error $? "execve() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "execvp" "ac_cv_func_execvp" if test "x$ac_cv_func_execvp" = xyes then : else case e in #( e) as_fn_error $? "execvp() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "exit" "ac_cv_func_exit" if test "x$ac_cv_func_exit" = xyes then : else case e in #( e) as_fn_error $? "exit() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "fdatasync" "ac_cv_func_fdatasync" if test "x$ac_cv_func_fdatasync" = xyes then : printf "%s\n" "#define HAVE_FDATASYNC 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "fclose" "ac_cv_func_fclose" if test "x$ac_cv_func_fclose" = xyes then : else case e in #( e) as_fn_error $? "fclose() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "fdopen" "ac_cv_func_fdopen" if test "x$ac_cv_func_fdopen" = xyes then : else case e in #( e) as_fn_error $? "fdopen() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "feof" "ac_cv_func_feof" if test "x$ac_cv_func_feof" = xyes then : else case e in #( e) as_fn_error $? "feof() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "fgetc" "ac_cv_func_fgetc" if test "x$ac_cv_func_fgetc" = xyes then : else case e in #( e) as_fn_error $? "fgetc() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "fgets" "ac_cv_func_fgets" if test "x$ac_cv_func_fgets" = xyes then : else case e in #( e) as_fn_error $? "fgets() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "fork" "ac_cv_func_fork" if test "x$ac_cv_func_fork" = xyes then : else case e in #( e) as_fn_error $? "fork() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "fprintf" "ac_cv_func_fprintf" if test "x$ac_cv_func_fprintf" = xyes then : else case e in #( e) as_fn_error $? "fprintf() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "fputc" "ac_cv_func_fputc" if test "x$ac_cv_func_fputc" = xyes then : else case e in #( e) as_fn_error $? "fputc() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "fputs" "ac_cv_func_fputs" if test "x$ac_cv_func_fputs" = xyes then : else case e in #( e) as_fn_error $? "fputs() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "free" "ac_cv_func_free" if test "x$ac_cv_func_free" = xyes then : else case e in #( e) as_fn_error $? "free() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "fwrite" "ac_cv_func_fwrite" if test "x$ac_cv_func_fwrite" = xyes then : else case e in #( e) as_fn_error $? "fwrite() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" if test "x$ac_cv_func_getcwd" = xyes then : else case e in #( e) as_fn_error $? "getcwd() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getenv" "ac_cv_func_getenv" if test "x$ac_cv_func_getenv" = xyes then : else case e in #( e) as_fn_error $? "getenv() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "geteuid" "ac_cv_func_geteuid" if test "x$ac_cv_func_geteuid" = xyes then : else case e in #( e) as_fn_error $? "geteuid() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getgrent" "ac_cv_func_getgrent" if test "x$ac_cv_func_getgrent" = xyes then : else case e in #( e) as_fn_error $? "getgrent() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getgrgid" "ac_cv_func_getgrgid" if test "x$ac_cv_func_getgrgid" = xyes then : else case e in #( e) as_fn_error $? "getgrgid() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getgrgid_r" "ac_cv_func_getgrgid_r" if test "x$ac_cv_func_getgrgid_r" = xyes then : else case e in #( e) as_fn_error $? "getgrgid_r() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getgrnam" "ac_cv_func_getgrnam" if test "x$ac_cv_func_getgrnam" = xyes then : else case e in #( e) as_fn_error $? "getgrnam() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getpid" "ac_cv_func_getpid" if test "x$ac_cv_func_getpid" = xyes then : else case e in #( e) as_fn_error $? "getpid() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getppid" "ac_cv_func_getppid" if test "x$ac_cv_func_getppid" = xyes then : else case e in #( e) as_fn_error $? "getppid() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getpwent" "ac_cv_func_getpwent" if test "x$ac_cv_func_getpwent" = xyes then : else case e in #( e) as_fn_error $? "getpwent() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getpwnam" "ac_cv_func_getpwnam" if test "x$ac_cv_func_getpwnam" = xyes then : else case e in #( e) as_fn_error $? "getpwnam() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getpwuid" "ac_cv_func_getpwuid" if test "x$ac_cv_func_getpwuid" = xyes then : else case e in #( e) as_fn_error $? "getpwuid() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getpwuid_r" "ac_cv_func_getpwuid_r" if test "x$ac_cv_func_getpwuid_r" = xyes then : else case e in #( e) as_fn_error $? "getpwuid_r() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "ioctl" "ac_cv_func_ioctl" if test "x$ac_cv_func_ioctl" = xyes then : else case e in #( e) as_fn_error $? "ioctl() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "iswalnum" "ac_cv_func_iswalnum" if test "x$ac_cv_func_iswalnum" = xyes then : else case e in #( e) as_fn_error $? "iswalnum() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "iswdigit" "ac_cv_func_iswdigit" if test "x$ac_cv_func_iswdigit" = xyes then : else case e in #( e) as_fn_error $? "iswdigit() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "iswprint" "ac_cv_func_iswprint" if test "x$ac_cv_func_iswprint" = xyes then : else case e in #( e) as_fn_error $? "iswprint() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "iswspace" "ac_cv_func_iswspace" if test "x$ac_cv_func_iswspace" = xyes then : else case e in #( e) as_fn_error $? "iswspace() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "iswupper" "ac_cv_func_iswupper" if test "x$ac_cv_func_iswupper" = xyes then : else case e in #( e) as_fn_error $? "iswupper() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "kill" "ac_cv_func_kill" if test "x$ac_cv_func_kill" = xyes then : else case e in #( e) as_fn_error $? "kill() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "localtime" "ac_cv_func_localtime" if test "x$ac_cv_func_localtime" = xyes then : else case e in #( e) as_fn_error $? "localtime() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "malloc" "ac_cv_func_malloc" if test "x$ac_cv_func_malloc" = xyes then : else case e in #( e) as_fn_error $? "malloc() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "mbstowcs" "ac_cv_func_mbstowcs" if test "x$ac_cv_func_mbstowcs" = xyes then : else case e in #( e) as_fn_error $? "mbstowcs() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "memcmp" "ac_cv_func_memcmp" if test "x$ac_cv_func_memcmp" = xyes then : else case e in #( e) as_fn_error $? "memcmp() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "memcpy" "ac_cv_func_memcpy" if test "x$ac_cv_func_memcpy" = xyes then : else case e in #( e) as_fn_error $? "memcpy() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "memccpy" "ac_cv_func_memccpy" if test "x$ac_cv_func_memccpy" = xyes then : else case e in #( e) as_fn_error $? "memccpy() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove" if test "x$ac_cv_func_memmove" = xyes then : else case e in #( e) as_fn_error $? "memmove() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes then : else case e in #( e) as_fn_error $? "memset() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "mkdir" "ac_cv_func_mkdir" if test "x$ac_cv_func_mkdir" = xyes then : else case e in #( e) as_fn_error $? "mkdir() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" if test "x$ac_cv_func_mkstemp" = xyes then : else case e in #( e) as_fn_error $? "mkstemp() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "opendir" "ac_cv_func_opendir" if test "x$ac_cv_func_opendir" = xyes then : else case e in #( e) as_fn_error $? "opendir() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "pathconf" "ac_cv_func_pathconf" if test "x$ac_cv_func_pathconf" = xyes then : else case e in #( e) as_fn_error $? "pathconf() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "pause" "ac_cv_func_pause" if test "x$ac_cv_func_pause" = xyes then : else case e in #( e) as_fn_error $? "pause() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "pclose" "ac_cv_func_pclose" if test "x$ac_cv_func_pclose" = xyes then : else case e in #( e) as_fn_error $? "pclose() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "perror" "ac_cv_func_perror" if test "x$ac_cv_func_perror" = xyes then : else case e in #( e) as_fn_error $? "perror() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "pipe" "ac_cv_func_pipe" if test "x$ac_cv_func_pipe" = xyes then : else case e in #( e) as_fn_error $? "pipe() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "popen" "ac_cv_func_popen" if test "x$ac_cv_func_popen" = xyes then : else case e in #( e) as_fn_error $? "popen() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "printf" "ac_cv_func_printf" if test "x$ac_cv_func_printf" = xyes then : else case e in #( e) as_fn_error $? "printf() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "puts" "ac_cv_func_puts" if test "x$ac_cv_func_puts" = xyes then : else case e in #( e) as_fn_error $? "puts() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "qsort" "ac_cv_func_qsort" if test "x$ac_cv_func_qsort" = xyes then : else case e in #( e) as_fn_error $? "qsort() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "rand" "ac_cv_func_rand" if test "x$ac_cv_func_rand" = xyes then : else case e in #( e) as_fn_error $? "rand() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "read" "ac_cv_func_read" if test "x$ac_cv_func_read" = xyes then : else case e in #( e) as_fn_error $? "read() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "readlink" "ac_cv_func_readlink" if test "x$ac_cv_func_readlink" = xyes then : else case e in #( e) as_fn_error $? "readlink() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "realloc" "ac_cv_func_realloc" if test "x$ac_cv_func_realloc" = xyes then : else case e in #( e) as_fn_error $? "realloc() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "realpath" "ac_cv_func_realpath" if test "x$ac_cv_func_realpath" = xyes then : else case e in #( e) as_fn_error $? "realpath() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "rename" "ac_cv_func_rename" if test "x$ac_cv_func_rename" = xyes then : else case e in #( e) as_fn_error $? "rename() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "rmdir" "ac_cv_func_rmdir" if test "x$ac_cv_func_rmdir" = xyes then : else case e in #( e) as_fn_error $? "rmdir() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select" if test "x$ac_cv_func_select" = xyes then : else case e in #( e) as_fn_error $? "select() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv" if test "x$ac_cv_func_setenv" = xyes then : else case e in #( e) as_fn_error $? "setenv() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "setgrent" "ac_cv_func_setgrent" if test "x$ac_cv_func_setgrent" = xyes then : else case e in #( e) as_fn_error $? "setgrent() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" if test "x$ac_cv_func_setlocale" = xyes then : else case e in #( e) as_fn_error $? "setlocale() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "setpgid" "ac_cv_func_setpgid" if test "x$ac_cv_func_setpgid" = xyes then : else case e in #( e) as_fn_error $? "setpgid() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "setpwent" "ac_cv_func_setpwent" if test "x$ac_cv_func_setpwent" = xyes then : else case e in #( e) as_fn_error $? "setpwent() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "setsid" "ac_cv_func_setsid" if test "x$ac_cv_func_setsid" = xyes then : else case e in #( e) as_fn_error $? "setsid() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "setvbuf" "ac_cv_func_setvbuf" if test "x$ac_cv_func_setvbuf" = xyes then : else case e in #( e) as_fn_error $? "setvbuf() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction" if test "x$ac_cv_func_sigaction" = xyes then : else case e in #( e) as_fn_error $? "sigaction() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "sigaddset" "ac_cv_func_sigaddset" if test "x$ac_cv_func_sigaddset" = xyes then : else case e in #( e) as_fn_error $? "sigaddset() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "sigemptyset" "ac_cv_func_sigemptyset" if test "x$ac_cv_func_sigemptyset" = xyes then : else case e in #( e) as_fn_error $? "sigemptyset() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "signal" "ac_cv_func_signal" if test "x$ac_cv_func_signal" = xyes then : else case e in #( e) as_fn_error $? "signal() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" if test "x$ac_cv_func_snprintf" = xyes then : else case e in #( e) as_fn_error $? "snprintf() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "sprintf" "ac_cv_func_sprintf" if test "x$ac_cv_func_sprintf" = xyes then : else case e in #( e) as_fn_error $? "sprintf() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "srand" "ac_cv_func_srand" if test "x$ac_cv_func_srand" = xyes then : else case e in #( e) as_fn_error $? "srand() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" if test "x$ac_cv_func_strcasecmp" = xyes then : else case e in #( e) as_fn_error $? "strcasecmp() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr" if test "x$ac_cv_func_strcasestr" = xyes then : printf "%s\n" "#define HAVE_STRCASESTR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strcat" "ac_cv_func_strcat" if test "x$ac_cv_func_strcat" = xyes then : else case e in #( e) as_fn_error $? "strcat() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strchr" "ac_cv_func_strchr" if test "x$ac_cv_func_strchr" = xyes then : else case e in #( e) as_fn_error $? "strchr() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strcmp" "ac_cv_func_strcmp" if test "x$ac_cv_func_strcmp" = xyes then : else case e in #( e) as_fn_error $? "strcmp() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strcpy" "ac_cv_func_strcpy" if test "x$ac_cv_func_strcpy" = xyes then : else case e in #( e) as_fn_error $? "strcpy() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" if test "x$ac_cv_func_strdup" = xyes then : else case e in #( e) as_fn_error $? "strdup() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" if test "x$ac_cv_func_strerror" = xyes then : else case e in #( e) as_fn_error $? "strerror() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" if test "x$ac_cv_func_strftime" = xyes then : else case e in #( e) as_fn_error $? "strftime() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strlen" "ac_cv_func_strlen" if test "x$ac_cv_func_strlen" = xyes then : else case e in #( e) as_fn_error $? "strlen() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp" if test "x$ac_cv_func_strncasecmp" = xyes then : else case e in #( e) as_fn_error $? "strncasecmp() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strncat" "ac_cv_func_strncat" if test "x$ac_cv_func_strncat" = xyes then : else case e in #( e) as_fn_error $? "strncat() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strncmp" "ac_cv_func_strncmp" if test "x$ac_cv_func_strncmp" = xyes then : else case e in #( e) as_fn_error $? "strncmp() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strncpy" "ac_cv_func_strncpy" if test "x$ac_cv_func_strncpy" = xyes then : else case e in #( e) as_fn_error $? "strncpy() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strpbrk" "ac_cv_func_strpbrk" if test "x$ac_cv_func_strpbrk" = xyes then : else case e in #( e) as_fn_error $? "strpbrk() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strrchr" "ac_cv_func_strrchr" if test "x$ac_cv_func_strrchr" = xyes then : else case e in #( e) as_fn_error $? "strrchr() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strspn" "ac_cv_func_strspn" if test "x$ac_cv_func_strspn" = xyes then : else case e in #( e) as_fn_error $? "strspn() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strstr" "ac_cv_func_strstr" if test "x$ac_cv_func_strstr" = xyes then : else case e in #( e) as_fn_error $? "strstr() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strtok_r" "ac_cv_func_strtok_r" if test "x$ac_cv_func_strtok_r" = xyes then : else case e in #( e) as_fn_error $? "strtok_r() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" if test "x$ac_cv_func_strtol" = xyes then : else case e in #( e) as_fn_error $? "strtol() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strtoll" "ac_cv_func_strtoll" if test "x$ac_cv_func_strtoll" = xyes then : else case e in #( e) as_fn_error $? "strtoll() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "strverscmp" "ac_cv_func_strverscmp" if test "x$ac_cv_func_strverscmp" = xyes then : printf "%s\n" "#define HAVE_STRVERSCMP_FUNC 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "sysconf" "ac_cv_func_sysconf" if test "x$ac_cv_func_sysconf" = xyes then : else case e in #( e) as_fn_error $? "sysconf() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "time" "ac_cv_func_time" if test "x$ac_cv_func_time" = xyes then : else case e in #( e) as_fn_error $? "time() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "tolower" "ac_cv_func_tolower" if test "x$ac_cv_func_tolower" = xyes then : else case e in #( e) as_fn_error $? "tolower() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "toupper" "ac_cv_func_toupper" if test "x$ac_cv_func_toupper" = xyes then : else case e in #( e) as_fn_error $? "toupper() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "towupper" "ac_cv_func_towupper" if test "x$ac_cv_func_towupper" = xyes then : else case e in #( e) as_fn_error $? "towupper() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "ungetc" "ac_cv_func_ungetc" if test "x$ac_cv_func_ungetc" = xyes then : else case e in #( e) as_fn_error $? "ungetc() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "unlink" "ac_cv_func_unlink" if test "x$ac_cv_func_unlink" = xyes then : else case e in #( e) as_fn_error $? "unlink() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" if test "x$ac_cv_func_unsetenv" = xyes then : else case e in #( e) as_fn_error $? "unsetenv() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes" if test "x$ac_cv_func_utimes" = xyes then : else case e in #( e) as_fn_error $? "utimes() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "vfprintf" "ac_cv_func_vfprintf" if test "x$ac_cv_func_vfprintf" = xyes then : else case e in #( e) as_fn_error $? "vfprintf() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf" if test "x$ac_cv_func_vsnprintf" = xyes then : else case e in #( e) as_fn_error $? "vsnprintf() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "vswprintf" "ac_cv_func_vswprintf" if test "x$ac_cv_func_vswprintf" = xyes then : else case e in #( e) as_fn_error $? "vswprintf() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "waitpid" "ac_cv_func_waitpid" if test "x$ac_cv_func_waitpid" = xyes then : else case e in #( e) as_fn_error $? "waitpid() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wcscat" "ac_cv_func_wcscat" if test "x$ac_cv_func_wcscat" = xyes then : else case e in #( e) as_fn_error $? "wcscat() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wcscmp" "ac_cv_func_wcscmp" if test "x$ac_cv_func_wcscmp" = xyes then : else case e in #( e) as_fn_error $? "wcscmp() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wcscpy" "ac_cv_func_wcscpy" if test "x$ac_cv_func_wcscpy" = xyes then : else case e in #( e) as_fn_error $? "wcscpy() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wcslen" "ac_cv_func_wcslen" if test "x$ac_cv_func_wcslen" = xyes then : else case e in #( e) as_fn_error $? "wcslen() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wcsncmp" "ac_cv_func_wcsncmp" if test "x$ac_cv_func_wcsncmp" = xyes then : else case e in #( e) as_fn_error $? "wcsncmp() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wcsncpy" "ac_cv_func_wcsncpy" if test "x$ac_cv_func_wcsncpy" = xyes then : else case e in #( e) as_fn_error $? "wcsncpy() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wcstof" "ac_cv_func_wcstof" if test "x$ac_cv_func_wcstof" = xyes then : else case e in #( e) as_fn_error $? "wcstof() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wcstol" "ac_cv_func_wcstol" if test "x$ac_cv_func_wcstol" = xyes then : else case e in #( e) as_fn_error $? "wcstol() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wcstombs" "ac_cv_func_wcstombs" if test "x$ac_cv_func_wcstombs" = xyes then : else case e in #( e) as_fn_error $? "wcstombs() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wcswidth" "ac_cv_func_wcswidth" if test "x$ac_cv_func_wcswidth" = xyes then : else case e in #( e) as_fn_error $? "wcswidth() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wcwidth" "ac_cv_func_wcwidth" if test "x$ac_cv_func_wcwidth" = xyes then : else case e in #( e) as_fn_error $? "wcwidth() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "futimens" "ac_cv_func_futimens" if test "x$ac_cv_func_futimens" = xyes then : printf "%s\n" "#define HAVE_FUTIMENS 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "random" "ac_cv_func_random" if test "x$ac_cv_func_random" = xyes then : printf "%s\n" "#define HAVE_RANDOM 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "srandom" "ac_cv_func_srandom" if test "x$ac_cv_func_srandom" = xyes then : printf "%s\n" "#define HAVE_SRANDOM 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "reallocarray" "ac_cv_func_reallocarray" if test "x$ac_cv_func_reallocarray" = xyes then : printf "%s\n" "#define HAVE_REALLOCARRAY 1" >>confdefs.h fi if test -n "$HAVE_MNTENT_H" ; then ac_fn_c_check_func "$LINENO" "endmntent" "ac_cv_func_endmntent" if test "x$ac_cv_func_endmntent" = xyes then : else case e in #( e) as_fn_error $? "endmntent() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getmntent" "ac_cv_func_getmntent" if test "x$ac_cv_func_getmntent" = xyes then : else case e in #( e) as_fn_error $? "getmntent() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "setmntent" "ac_cv_func_setmntent" if test "x$ac_cv_func_setmntent" = xyes then : else case e in #( e) as_fn_error $? "setmntent() function not found." "$LINENO" 5 ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } if test ${ac_cv_c_undeclared_builtin_options+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CFLAGS=$CFLAGS ac_cv_c_undeclared_builtin_options='cannot detect' for ac_arg in '' -fno-builtin; do CFLAGS="$ac_save_CFLAGS $ac_arg" # This test program should *not* compile successfully. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { (void) strchr; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) # This test program should compile successfully. # No library function is consistently available on # freestanding implementations, so test against a dummy # declaration. Include always-available headers on the # off chance that they somehow elicit warnings. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include extern void ac_decl (int, char *); int main (void) { (void) ac_decl (0, (char *) 0); (void) ac_decl; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test x"$ac_arg" = x then : ac_cv_c_undeclared_builtin_options='none needed' else case e in #( e) ac_cv_c_undeclared_builtin_options=$ac_arg ;; esac fi break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done CFLAGS=$ac_save_CFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } case $ac_cv_c_undeclared_builtin_options in #( 'cannot detect') : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot make $CC report undeclared builtins See 'config.log' for more details" "$LINENO" 5; } ;; #( 'none needed') : ac_c_undeclared_builtin_options='' ;; #( *) : ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; esac ac_fn_check_decl "$LINENO" "_PC_CASE_SENSITIVE" "ac_cv_have_decl__PC_CASE_SENSITIVE" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl__PC_CASE_SENSITIVE" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL__PC_CASE_SENSITIVE $ac_have_decl" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "regex.h" "ac_cv_header_regex_h" "$ac_includes_default" if test "x$ac_cv_header_regex_h" = xyes then : else case e in #( e) as_fn_error $? "regex.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "regcomp" "ac_cv_func_regcomp" if test "x$ac_cv_func_regcomp" = xyes then : else case e in #( e) as_fn_error $? "regcomp() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "regerror" "ac_cv_func_regerror" if test "x$ac_cv_func_regerror" = xyes then : else case e in #( e) as_fn_error $? "regerror() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "regexec" "ac_cv_func_regexec" if test "x$ac_cv_func_regexec" = xyes then : else case e in #( e) as_fn_error $? "regexec() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "regfree" "ac_cv_func_regfree" if test "x$ac_cv_func_regfree" = xyes then : else case e in #( e) as_fn_error $? "regfree() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_type "$LINENO" "regex_t" "ac_cv_type_regex_t" "#include " if test "x$ac_cv_type_regex_t" = xyes then : else case e in #( e) as_fn_error $? "regex_t type not found in regex.h" "$LINENO" 5 ;; esac fi ac_fn_check_decl "$LINENO" "REG_EXTENDED" "ac_cv_have_decl_REG_EXTENDED" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_REG_EXTENDED" = xyes then : else case e in #( e) as_fn_error $? "REG_EXTENDED not found in regex.h" "$LINENO" 5 ;; esac fi ac_fn_check_decl "$LINENO" "REG_ICASE" "ac_cv_have_decl_REG_ICASE" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_REG_ICASE" = xyes then : else case e in #( e) as_fn_error $? "REG_ICASE not found in regex.h" "$LINENO" 5 ;; esac fi ac_fn_check_decl "$LINENO" "REG_NOMATCH" "ac_cv_have_decl_REG_NOMATCH" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_REG_NOMATCH" = xyes then : else case e in #( e) as_fn_error $? "REG_NOMATCH not found in regex.h" "$LINENO" 5 ;; esac fi ac_fn_c_check_member "$LINENO" "struct stat" "st_mtim" "ac_cv_member_struct_stat_st_mtim" " #include #include #include " if test "x$ac_cv_member_struct_stat_st_mtim" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_MTIM 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct dirent" "d_type" "ac_cv_member_struct_dirent_d_type" " #include " if test "x$ac_cv_member_struct_dirent_d_type" = xyes then : printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_TYPE 1" >>confdefs.h fi # Check whether --enable-largefile was given. if test ${enable_largefile+y} then : enableval=$enable_largefile; fi if test "$enable_largefile,$enable_year2038" != no,no then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable large file support" >&5 printf %s "checking for $CC option to enable large file support... " >&6; } if test ${ac_cv_sys_largefile_opts+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CC="$CC" ac_opt_found=no for ac_opt in "none needed" "-D_FILE_OFFSET_BITS=64" "-D_LARGE_FILES=1" "-n32"; do if test x"$ac_opt" != x"none needed" then : CC="$ac_save_CC $ac_opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef FTYPE # define FTYPE off_t #endif /* Check that FTYPE can represent 2**63 - 1 correctly. We can't simply define LARGE_FTYPE to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_FTYPE (((FTYPE) 1 << 31 << 31) - 1 + ((FTYPE) 1 << 31 << 31)) int FTYPE_is_large[(LARGE_FTYPE % 2147483629 == 721 && LARGE_FTYPE % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test x"$ac_opt" = x"none needed" then : # GNU/Linux s390x and alpha need _FILE_OFFSET_BITS=64 for wide ino_t. CC="$CC -DFTYPE=ino_t" if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) CC="$CC -D_FILE_OFFSET_BITS=64" if ac_fn_c_try_compile "$LINENO" then : ac_opt='-D_FILE_OFFSET_BITS=64' fi rm -f core conftest.err conftest.$ac_objext conftest.beam ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam fi ac_cv_sys_largefile_opts=$ac_opt ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test $ac_opt_found = no || break done CC="$ac_save_CC" test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_opts" >&5 printf "%s\n" "$ac_cv_sys_largefile_opts" >&6; } ac_have_largefile=yes case $ac_cv_sys_largefile_opts in #( "none needed") : ;; #( "supported through gnulib") : ;; #( "support not detected") : ac_have_largefile=no ;; #( "-D_FILE_OFFSET_BITS=64") : printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h ;; #( "-D_LARGE_FILES=1") : printf "%s\n" "#define _LARGE_FILES 1" >>confdefs.h ;; #( "-n32") : CC="$CC -n32" ;; #( *) : as_fn_error $? "internal error: bad value for \$ac_cv_sys_largefile_opts" "$LINENO" 5 ;; esac if test "$enable_year2038" != no then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option for timestamps after 2038" >&5 printf %s "checking for $CC option for timestamps after 2038... " >&6; } if test ${ac_cv_sys_year2038_opts+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CPPFLAGS="$CPPFLAGS" ac_opt_found=no for ac_opt in "none needed" "-D_TIME_BITS=64" "-D__MINGW_USE_VC2005_COMPAT" "-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"; do if test x"$ac_opt" != x"none needed" then : CPPFLAGS="$ac_save_CPPFLAGS $ac_opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that time_t can represent 2**32 - 1 correctly. */ #define LARGE_TIME_T \\ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_year2038_opts="$ac_opt" ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test $ac_opt_found = no || break done CPPFLAGS="$ac_save_CPPFLAGS" test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_year2038_opts" >&5 printf "%s\n" "$ac_cv_sys_year2038_opts" >&6; } ac_have_year2038=yes case $ac_cv_sys_year2038_opts in #( "none needed") : ;; #( "support not detected") : ac_have_year2038=no ;; #( "-D_TIME_BITS=64") : printf "%s\n" "#define _TIME_BITS 64" >>confdefs.h ;; #( "-D__MINGW_USE_VC2005_COMPAT") : printf "%s\n" "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h ;; #( "-U_USE_32_BIT_TIME_T"*) : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "the 'time_t' type is currently forced to be 32-bit. It will stop working after mid-January 2038. Remove _USE_32BIT_TIME_T from the compiler flags. See 'config.log' for more details" "$LINENO" 5; } ;; #( *) : as_fn_error $? "internal error: bad value for \$ac_cv_sys_year2038_opts" "$LINENO" 5 ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for declarations of fseeko and ftello" >&5 printf %s "checking for declarations of fseeko and ftello... " >&6; } if test ${ac_cv_func_fseeko_ftello+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __hpux && !defined _LARGEFILE_SOURCE # include # if LONG_MAX >> 31 == 0 # error "32-bit HP-UX 11/ia64 needs _LARGEFILE_SOURCE for fseeko in C++" # endif #endif #include /* for off_t */ #include int main (void) { int (*fp1) (FILE *, off_t, int) = fseeko; off_t (*fp2) (FILE *) = ftello; return fseeko (stdin, 0, 0) && fp1 (stdin, 0, 0) && ftello (stdin) >= 0 && fp2 (stdin) >= 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_func_fseeko_ftello=yes else case e in #( e) ac_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE=1" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __hpux && !defined _LARGEFILE_SOURCE # include # if LONG_MAX >> 31 == 0 # error "32-bit HP-UX 11/ia64 needs _LARGEFILE_SOURCE for fseeko in C++" # endif #endif #include /* for off_t */ #include int main (void) { int (*fp1) (FILE *, off_t, int) = fseeko; off_t (*fp2) (FILE *) = ftello; return fseeko (stdin, 0, 0) && fp1 (stdin, 0, 0) && ftello (stdin) >= 0 && fp2 (stdin) >= 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_func_fseeko_ftello="need _LARGEFILE_SOURCE" else case e in #( e) ac_cv_func_fseeko_ftello=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fseeko_ftello" >&5 printf "%s\n" "$ac_cv_func_fseeko_ftello" >&6; } if test "$ac_cv_func_fseeko_ftello" != no then : printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h fi if test "$ac_cv_func_fseeko_ftello" = "need _LARGEFILE_SOURCE" then : printf "%s\n" "#define _LARGEFILE_SOURCE 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes then : else case e in #( e) printf "%s\n" "#define off_t long int" >>confdefs.h ;; esac fi if test "$ac_cv_member_struct_stat_st_mtim" = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main() { struct stat st; struct timespec ts[2] = { st.st_atim, st.st_mtim }; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "#define HAVE_CONSISTENT_TIMESPEC 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi # Extract the first word of "file", so it can be a program name with args. set dummy file; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_HAVE_FILE_PROG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$HAVE_FILE_PROG"; then ac_cv_prog_HAVE_FILE_PROG="$HAVE_FILE_PROG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_HAVE_FILE_PROG="1" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi HAVE_FILE_PROG=$ac_cv_prog_HAVE_FILE_PROG if test -n "$HAVE_FILE_PROG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HAVE_FILE_PROG" >&5 printf "%s\n" "$HAVE_FILE_PROG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x${HAVE_FILE_PROG}" = 'x1' ; then printf "%s\n" "#define HAVE_FILE_PROG 1" >>confdefs.h fi for ac_prog in groff mandoc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MANGEN_PROG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$MANGEN_PROG"; then ac_cv_prog_MANGEN_PROG="$MANGEN_PROG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANGEN_PROG="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi MANGEN_PROG=$ac_cv_prog_MANGEN_PROG if test -n "$MANGEN_PROG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANGEN_PROG" >&5 printf "%s\n" "$MANGEN_PROG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$MANGEN_PROG" && break done # Extract the first word of "col", so it can be a program name with args. set dummy col; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_COL_PROG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$COL_PROG"; then ac_cv_prog_COL_PROG="$COL_PROG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_COL_PROG="col" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi COL_PROG=$ac_cv_prog_COL_PROG if test -n "$COL_PROG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $COL_PROG" >&5 printf "%s\n" "$COL_PROG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "awk", so it can be a program name with args. set dummy awk; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK_PROG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AWK_PROG"; then ac_cv_prog_AWK_PROG="$AWK_PROG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK_PROG="awk" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK_PROG=$ac_cv_prog_AWK_PROG if test -n "$AWK_PROG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK_PROG" >&5 printf "%s\n" "$AWK_PROG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "sed", so it can be a program name with args. set dummy sed; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_SED_PROG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$SED_PROG"; then ac_cv_prog_SED_PROG="$SED_PROG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_SED_PROG="sed" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi SED_PROG=$ac_cv_prog_SED_PROG if test -n "$SED_PROG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SED_PROG" >&5 printf "%s\n" "$SED_PROG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PERL_PROG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$PERL_PROG"; then ac_cv_prog_PERL_PROG="$PERL_PROG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PERL_PROG="perl" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi PERL_PROG=$ac_cv_prog_PERL_PROG if test -n "$PERL_PROG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PERL_PROG" >&5 printf "%s\n" "$PERL_PROG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "vim", so it can be a program name with args. set dummy vim; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_VIM_PROG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$VIM_PROG"; then ac_cv_prog_VIM_PROG="$VIM_PROG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_VIM_PROG="vim" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi VIM_PROG=$ac_cv_prog_VIM_PROG if test -n "$VIM_PROG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $VIM_PROG" >&5 printf "%s\n" "$VIM_PROG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x${PERL_PROG}${VIM_PROG}" == 'x'; then as_fn_error $? "Either perl or Vim is necessary to generate tags for documentation in Vim's format." "$LINENO" 5 fi # Extract the first word of "git", so it can be a program name with args. set dummy git; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_GIT_PROG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$GIT_PROG"; then ac_cv_prog_GIT_PROG="$GIT_PROG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_GIT_PROG="git" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi GIT_PROG=$ac_cv_prog_GIT_PROG if test -n "$GIT_PROG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GIT_PROG" >&5 printf "%s\n" "$GIT_PROG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x${GIT_PROG}" != 'x' -a -d .git/; then IN_GIT_REPO=1 fi if test "x${sysconfdir}" = 'x${prefix}/etc'; then if test "x${prefix}" = "xNONE"; then printf "%s\n" "#define PACKAGE_SYSCONF_DIR \"${ac_default_prefix}/etc/${PACKAGE}\"" >>confdefs.h else printf "%s\n" "#define PACKAGE_SYSCONF_DIR \"${prefix}/etc/${PACKAGE}\"" >>confdefs.h fi else printf "%s\n" "#define PACKAGE_SYSCONF_DIR \"${sysconfdir}/${PACKAGE}\"" >>confdefs.h fi if test "x${datadir}" = 'x${prefix}/share'; then if test "x${prefix}" = "xNONE"; then printf "%s\n" "#define PACKAGE_DATA_DIR \"${ac_default_prefix}/share/${PACKAGE}\"" >>confdefs.h else printf "%s\n" "#define PACKAGE_DATA_DIR \"${prefix}/share/${PACKAGE}\"" >>confdefs.h fi else if test "x${datadir}" = 'x${datarootdir}'; then if test "x${datarootdir}" = 'x${prefix}/share'; then if test "x${prefix}" = "xNONE"; then printf "%s\n" "#define PACKAGE_DATA_DIR \"${ac_default_prefix}/share/${PACKAGE}\"" >>confdefs.h else printf "%s\n" "#define PACKAGE_DATA_DIR \"${prefix}/share/${PACKAGE}\"" >>confdefs.h fi fi else printf "%s\n" "#define PACKAGE_DATA_DIR \"${datadir}/${PACKAGE}\"" >>confdefs.h fi fi if test -n "$OSX_HOST" ; then DATA_SUFFIX=-osx fi packagesrcdir=`cd $srcdir && pwd` printf "%s\n" "#define PACKAGE_SOURCE_DIR \"${packagesrcdir}\"" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wall" >&5 printf %s "checking whether C compiler accepts -Wall... " >&6; } if test ${ax_cv_check_cflags___Wall+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS -Wall" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ax_cv_check_cflags___Wall=yes else case e in #( e) ax_cv_check_cflags___Wall=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_check_save_flags ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wall" >&5 printf "%s\n" "$ax_cv_check_cflags___Wall" >&6; } if test "x$ax_cv_check_cflags___Wall" = xyes then : case " $CFLAGS " in *\ \ -Wall\ \ *) ;; *) CFLAGS="$CFLAGS -Wall" ;; esac else case e in #( e) : ;; esac fi if test -n "$OSX_HOST" ; then printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h fi printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 printf %s "checking for pow in -lm... " >&6; } if test ${ac_cv_lib_m_pow+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pow (void); int main (void) { return pow (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_m_pow=yes else case e in #( e) ac_cv_lib_m_pow=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 printf "%s\n" "$ac_cv_lib_m_pow" >&6; } if test "x$ac_cv_lib_m_pow" = xyes then : LIBS="$LIBS -lm" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shm_open in -lrt" >&5 printf %s "checking for shm_open in -lrt... " >&6; } if test ${ac_cv_lib_rt_shm_open+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char shm_open (void); int main (void) { return shm_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rt_shm_open=yes else case e in #( e) ac_cv_lib_rt_shm_open=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_shm_open" >&5 printf "%s\n" "$ac_cv_lib_rt_shm_open" >&6; } if test "x$ac_cv_lib_rt_shm_open" = xyes then : LIBS="$LIBS -lrt" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else case e in #( e) # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else case e in #( e) # Broken: fails on valid input. continue ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else case e in #( e) # Passes both tests. ac_preproc_ok=: break ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CPP=$CPP ;; esac fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else case e in #( e) # Broken: fails on valid input. continue ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else case e in #( e) # Passes both tests. ac_preproc_ok=: break ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See 'config.log' for more details" "$LINENO" 5; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep -e" >&5 printf %s "checking for egrep -e... " >&6; } if test ${ac_cv_path_EGREP_TRADITIONAL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$EGREP_TRADITIONAL"; then ac_path_EGREP_TRADITIONAL_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue # Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. # Check for GNU $ac_path_EGREP_TRADITIONAL case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( *GNU*) ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" "$ac_path_EGREP_TRADITIONAL" -E 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_TRADITIONAL_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then : fi else ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL fi if test "$ac_cv_path_EGREP_TRADITIONAL" then : ac_cv_path_EGREP_TRADITIONAL="$ac_cv_path_EGREP_TRADITIONAL -E" else case e in #( e) if test -z "$EGREP_TRADITIONAL"; then ac_path_EGREP_TRADITIONAL_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue # Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. # Check for GNU $ac_path_EGREP_TRADITIONAL case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( *GNU*) ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" "$ac_path_EGREP_TRADITIONAL" 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_TRADITIONAL_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL fi ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP_TRADITIONAL" >&5 printf "%s\n" "$ac_cv_path_EGREP_TRADITIONAL" >&6; } EGREP_TRADITIONAL=$ac_cv_path_EGREP_TRADITIONAL ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on Tru64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then ax_pthread_save_CC="$CC" ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" if test "x$PTHREAD_CC" != "x" then : CC="$PTHREAD_CC" fi if test "x$PTHREAD_CXX" != "x" then : CXX="$PTHREAD_CXX" fi CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 printf %s "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_join (void); int main (void) { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 printf "%s\n" "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = "xno"; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi CC="$ax_pthread_save_CC" CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items with a "," contain both # C compiler flags (before ",") and linker flags (after ","). Other items # starting with a "-" are C compiler flags, and remaining items are # library names, except for "none" which indicates that we try without # any flags at all, and "pthread-config" which is a program returning # the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 # (Note: HP C rejects this with "bad form for `-t' option") # -pthreads: Solaris/gcc (Note: HP C also rejects) # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads and # -D_REENTRANT too), HP C (must be checked before -lpthread, which # is present but should not be used directly; and before -mthreads, # because the compiler interprets this as "-mt" + "-hreads") # -mthreads: Mingw32/gcc, Lynx/gcc # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case $host_os in freebsd*) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) ax_pthread_flags="-kthread lthread $ax_pthread_flags" ;; hpux*) # From the cc(1) man page: "[-mt] Sets various -D flags to enable # multi-threading and also sets -lpthread." ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" ;; openedition*) # IBM z/OS requires a feature-test macro to be defined in order to # enable POSIX threads at all, so give the user a hint if this is # not set. (We don't define these ourselves, as they can affect # other portions of the system API in unpredictable ways.) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) AX_PTHREAD_ZOS_MISSING # endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 printf "%s\n" "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} fi rm -rf conftest* ;; solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (N.B.: The stubs are missing # pthread_cleanup_push, or rather a function called by this macro, # so we could check for that, but who knows whether they'll stub # that too in a future libc.) So we'll check first for the # standard Solaris way of linking pthreads (-mt -lpthread). ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags" ;; esac # Are we compiling with Clang? { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 printf %s "checking whether $CC is Clang... " >&6; } if test ${ax_cv_PTHREAD_CLANG+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Note: Clang 2.7 lacks __clang_[a-z]+__ */ # if defined(__clang__) && defined(__llvm__) AX_PTHREAD_CC_IS_CLANG # endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 then : ax_cv_PTHREAD_CLANG=yes fi rm -rf conftest* fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 printf "%s\n" "$ax_cv_PTHREAD_CLANG" >&6; } ax_pthread_clang="$ax_cv_PTHREAD_CLANG" # GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) # Note that for GCC and Clang -pthread generally implies -lpthread, # except when -nostdlib is passed. # This is problematic using libtool to build C++ shared libraries with pthread: # [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460 # [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333 # [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555 # To solve this, first try -pthread together with -lpthread for GCC if test "x$GCC" = "xyes" then : ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags" fi # Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first if test "x$ax_pthread_clang" = "xyes" then : ax_pthread_flags="-pthread,-lpthread -pthread" fi # The presence of a feature test macro requesting re-entrant function # definitions is, on some systems, a strong hint that pthreads support is # correctly enabled case $host_os in darwin* | hpux* | linux* | osf* | solaris*) ax_pthread_check_macro="_REENTRANT" ;; aix*) ax_pthread_check_macro="_THREAD_SAFE" ;; *) ax_pthread_check_macro="--" ;; esac if test "x$ax_pthread_check_macro" = "x--" then : ax_pthread_check_cond=0 else case e in #( e) ax_pthread_check_cond="!defined($ax_pthread_check_macro)" ;; esac fi if test "x$ax_pthread_ok" = "xno"; then for ax_pthread_try_flag in $ax_pthread_flags; do case $ax_pthread_try_flag in none) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 printf %s "checking whether pthreads work without any flags... " >&6; } ;; *,*) PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"` PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"" >&5 printf %s "checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"... " >&6; } ;; -*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 printf %s "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } PTHREAD_CFLAGS="$ax_pthread_try_flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ax_pthread_config+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" fi ;; esac fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 printf "%s\n" "$ax_pthread_config" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ax_pthread_config" = "xno" then : continue fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 printf %s "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } PTHREAD_LIBS="-l$ax_pthread_try_flag" ;; esac ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include # if $ax_pthread_check_cond # error "$ax_pthread_check_macro must be defined" # endif static void *some_global = NULL; static void routine(void *a) { /* To avoid any unused-parameter or unused-but-set-parameter warning. */ some_global = a; } static void *start_routine(void *a) { return a; } int main (void) { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 printf "%s\n" "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = "xyes" then : break fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Clang needs special handling, because older versions handle the -pthread # option in a rather... idiosyncratic way if test "x$ax_pthread_clang" = "xyes"; then # Clang takes -pthread; it has never supported any other flag # (Note 1: This will need to be revisited if a system that Clang # supports has POSIX threads in a separate library. This tends not # to be the way of modern systems, but it's conceivable.) # (Note 2: On some systems, notably Darwin, -pthread is not needed # to get POSIX threads support; the API is always present and # active. We could reasonably leave PTHREAD_CFLAGS empty. But # -pthread does define _REENTRANT, and while the Darwin headers # ignore this macro, third-party headers might not.) # However, older versions of Clang make a point of warning the user # that, in an invocation where only linking and no compilation is # taking place, the -pthread option has no effect ("argument unused # during compilation"). They expect -pthread to be passed in only # when source code is being compiled. # # Problem is, this is at odds with the way Automake and most other # C build frameworks function, which is that the same flags used in # compilation (CFLAGS) are also used in linking. Many systems # supported by AX_PTHREAD require exactly this for POSIX threads # support, and in fact it is often not straightforward to specify a # flag that is used only in the compilation phase and not in # linking. Such a scenario is extremely rare in practice. # # Even though use of the -pthread flag in linking would only print # a warning, this can be a nuisance for well-run software projects # that build with -Werror. So if the active version of Clang has # this misfeature, we search for an option to squash it. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 printf %s "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } if test ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one # (.c -> exe), because the warning occurs only in the second # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' ax_pthread_link_step=`printf "%s\n" "$ac_link" | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do if test "x$ax_pthread_try" = "xunknown" then : break fi CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" ac_link="$ax_pthread_save_ac_link" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void){return 0;} _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_link="$ax_pthread_2step_ac_link" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void){return 0;} _ACEOF if ac_fn_c_try_link "$LINENO" then : break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_link="$ax_pthread_save_ac_link" CFLAGS="$ax_pthread_save_CFLAGS" if test "x$ax_pthread_try" = "x" then : ax_pthread_try=no fi ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 printf "%s\n" "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in no | unknown) ;; *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; esac fi # $ax_pthread_clang = yes # Various other checks: if test "x$ax_pthread_ok" = "xyes"; then ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 printf %s "checking for joinable pthread attribute... " >&6; } if test ${ax_cv_PTHREAD_JOINABLE_ATTR+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { int attr = $ax_pthread_attr; return attr /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 printf "%s\n" "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ test "x$ax_pthread_joinable_attr_defined" != "xyes" then : printf "%s\n" "#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR" >>confdefs.h ax_pthread_joinable_attr_defined=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 printf %s "checking whether more special flags are required for pthreads... " >&6; } if test ${ax_cv_PTHREAD_SPECIAL_FLAGS+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 printf "%s\n" "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ test "x$ax_pthread_special_flags_added" != "xyes" then : PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" ax_pthread_special_flags_added=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 printf %s "checking for PTHREAD_PRIO_INHERIT... " >&6; } if test ${ax_cv_PTHREAD_PRIO_INHERIT+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { int i = PTHREAD_PRIO_INHERIT; return i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_PTHREAD_PRIO_INHERIT=yes else case e in #( e) ax_cv_PTHREAD_PRIO_INHERIT=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 printf "%s\n" "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ test "x$ax_pthread_prio_inherit_defined" != "xyes" then : printf "%s\n" "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h ax_pthread_prio_inherit_defined=yes fi CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" # More AIX lossage: compile with *_r variant if test "x$GCC" != "xyes"; then case $host_os in aix*) case "x/$CC" in #( x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) : #handle absolute path differently from PATH based program lookup case "x$CC" in #( x/*) : if as_fn_executable_p ${CC}_r then : PTHREAD_CC="${CC}_r" fi if test "x${CXX}" != "x" then : if as_fn_executable_p ${CXX}_r then : PTHREAD_CXX="${CXX}_r" fi fi ;; #( *) : for ac_prog in ${CC}_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PTHREAD_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 printf "%s\n" "$PTHREAD_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" if test "x${CXX}" != "x" then : for ac_prog in ${CXX}_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PTHREAD_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$PTHREAD_CXX"; then ac_cv_prog_PTHREAD_CXX="$PTHREAD_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi PTHREAD_CXX=$ac_cv_prog_PTHREAD_CXX if test -n "$PTHREAD_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CXX" >&5 printf "%s\n" "$PTHREAD_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$PTHREAD_CXX" && break done test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" fi ;; esac ;; #( *) : ;; esac ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test "x$ax_pthread_ok" = "xyes"; then LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" TESTS_CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CC="$PTHREAD_CC" : else ax_pthread_ok=no as_fn_error $? "pthread not found" "$LINENO" 5 fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create" if test "x$ac_cv_func_pthread_create" = xyes then : else case e in #( e) as_fn_error $? "pthread_create() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "pthread_getspecific" "ac_cv_func_pthread_getspecific" if test "x$ac_cv_func_pthread_getspecific" = xyes then : else case e in #( e) as_fn_error $? "pthread_getspecific() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "pthread_key_create" "ac_cv_func_pthread_key_create" if test "x$ac_cv_func_pthread_key_create" = xyes then : else case e in #( e) as_fn_error $? "pthread_key_create() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "pthread_mutex_lock" "ac_cv_func_pthread_mutex_lock" if test "x$ac_cv_func_pthread_mutex_lock" = xyes then : else case e in #( e) as_fn_error $? "pthread_mutex_lock() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "pthread_mutex_unlock" "ac_cv_func_pthread_mutex_unlock" if test "x$ac_cv_func_pthread_mutex_unlock" = xyes then : else case e in #( e) as_fn_error $? "pthread_mutex_unlock() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "pthread_setspecific" "ac_cv_func_pthread_setspecific" if test "x$ac_cv_func_pthread_setspecific" = xyes then : else case e in #( e) as_fn_error $? "pthread_setspecific() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "pthread_detach" "ac_cv_func_pthread_detach" if test "x$ac_cv_func_pthread_detach" = xyes then : else case e in #( e) as_fn_error $? "pthread_detach() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "pthread_self" "ac_cv_func_pthread_self" if test "x$ac_cv_func_pthread_self" = xyes then : else case e in #( e) as_fn_error $? "pthread_self() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_type "$LINENO" "pthread_t" "ac_cv_type_pthread_t" "#include " if test "x$ac_cv_type_pthread_t" = xyes then : else case e in #( e) as_fn_error $? "pthread_t type not found in pthread.h" "$LINENO" 5 ;; esac fi ac_fn_c_check_type "$LINENO" "pthread_key_t" "ac_cv_type_pthread_key_t" "#include " if test "x$ac_cv_type_pthread_key_t" = xyes then : else case e in #( e) as_fn_error $? "pthread_key_t type not found in pthread.h" "$LINENO" 5 ;; esac fi ac_fn_c_check_type "$LINENO" "pthread_mutex_t" "ac_cv_type_pthread_mutex_t" "#include " if test "x$ac_cv_type_pthread_mutex_t" = xyes then : else case e in #( e) as_fn_error $? "pthread_mutex_t type not found in pthread.h" "$LINENO" 5 ;; esac fi ac_fn_c_check_type "$LINENO" "pthread_cond_t" "ac_cv_type_pthread_cond_t" "#include " if test "x$ac_cv_type_pthread_cond_t" = xyes then : else case e in #( e) as_fn_error $? "pthread_cond_t type not found in pthread.h" "$LINENO" 5 ;; esac fi ac_fn_check_decl "$LINENO" "PTHREAD_MUTEX_INITIALIZER" "ac_cv_have_decl_PTHREAD_MUTEX_INITIALIZER" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_PTHREAD_MUTEX_INITIALIZER" = xyes then : else case e in #( e) as_fn_error $? "PTHREAD_MUTEX_INITIALIZER not found in pthread.h" "$LINENO" 5 ;; esac fi ac_fn_check_decl "$LINENO" "PTHREAD_COND_INITIALIZER" "ac_cv_have_decl_PTHREAD_COND_INITIALIZER" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_PTHREAD_COND_INITIALIZER" = xyes then : else case e in #( e) as_fn_error $? "PTHREAD_COND_INITIALIZER not found in pthread.h" "$LINENO" 5 ;; esac fi curses_lib_name=ncursesw # Check whether --with-curses-name was given. if test ${with_curses_name+y} then : withval=$with_curses_name; curses_lib_name=$withval fi vifm_cv_curses=/usr # Check whether --with-curses was given. if test ${with_curses+y} then : withval=$with_curses; if test $withval != yes; then vifm_cv_curses=$withval fi if test x$vifm_cv_curses != x/usr; then LDFLAGS="-L${vifm_cv_curses}/lib $LDFLAGS" CPPFLAGS="$CPPFLAGS -I${vifm_cv_curses}/include -I${vifm_cv_curses}/include/${curses_lib_name}" fi fi ncurses_found=no as_ac_Lib=`printf "%s\n" "ac_cv_lib_${curses_lib_name}""_initscr" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for initscr in -l${curses_lib_name}" >&5 printf %s "checking for initscr in -l${curses_lib_name}... " >&6; } if eval test \${$as_ac_Lib+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-l${curses_lib_name} $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char initscr (void); int main (void) { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$as_ac_Lib=yes" else case e in #( e) eval "$as_ac_Lib=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi eval ac_res=\$$as_ac_Lib { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes" then : LIBS="$LIBS -l${curses_lib_name}" if test x$vifm_cv_curses = x/usr -a -d /usr/include/${curses_lib_name}; then CPPFLAGS="$CPPFLAGS -I/usr/include/${curses_lib_name}" fi ncurses_found=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing curs_set" >&5 printf %s "checking for library containing curs_set... " >&6; } if test ${ac_cv_search_curs_set+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char curs_set (void); int main (void) { return curs_set (); ; return 0; } _ACEOF for ac_lib in '' tinfow do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_curs_set=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_curs_set+y} then : break fi done if test ${ac_cv_search_curs_set+y} then : else case e in #( e) ac_cv_search_curs_set=no ;; esac fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_curs_set" >&5 printf "%s\n" "$ac_cv_search_curs_set" >&6; } ac_res=$ac_cv_search_curs_set if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else case e in #( e) as_fn_error $? "could not find a library providing curs_set" "$LINENO" 5 ;; esac fi fi if test -n "$OSX_HOST" -a "x$ncurses_found" != "xyes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for initscr in -lncurses" >&5 printf %s "checking for initscr in -lncurses... " >&6; } if test ${ac_cv_lib_ncurses_initscr+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char initscr (void); int main (void) { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_ncurses_initscr=yes else case e in #( e) ac_cv_lib_ncurses_initscr=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_initscr" >&5 printf "%s\n" "$ac_cv_lib_ncurses_initscr" >&6; } if test "x$ac_cv_lib_ncurses_initscr" = xyes then : LIBS="$LIBS -lncurses" if test x$vifm_cv_curses = x/usr -a -d /usr/include/ncurses; then CPPFLAGS="$CPPFLAGS -I/usr/include/ncurses" fi ncurses_found=yes fi fi if test "x$ncurses_found" != "xyes"; then if test -z "$OSX_HOST"; then as_fn_error $? "libncursesw not found" "$LINENO" 5 else as_fn_error $? "libncursesw and libncurses not found" "$LINENO" 5 fi fi LIBS=$LIBS $GUI_LINK_OPTS_TERM ac_fn_c_check_header_compile "$LINENO" "curses.h" "ac_cv_header_curses_h" "$ac_includes_default" if test "x$ac_cv_header_curses_h" = xyes then : else case e in #( e) as_fn_error $? "curses.h header not found." "$LINENO" 5 ;; esac fi ac_fn_check_decl "$LINENO" "A_ITALIC" "ac_cv_have_decl_A_ITALIC" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_A_ITALIC" = xyes then : printf "%s\n" "#define HAVE_A_ITALIC_DECL 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "COLORS" "ac_cv_have_decl_COLORS" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_COLORS" = xyes then : else case e in #( e) as_fn_error $? "COLORS not found in curses.h" "$LINENO" 5 ;; esac fi ac_fn_check_decl "$LINENO" "TABSIZE" "ac_cv_have_decl_TABSIZE" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_TABSIZE" = xyes then : else case e in #( e) as_fn_error $? "TABSIZE not found in curses.h" "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "curs_set" "ac_cv_func_curs_set" if test "x$ac_cv_func_curs_set" = xyes then : else case e in #( e) as_fn_error $? "curs_set() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "def_prog_mode" "ac_cv_func_def_prog_mode" if test "x$ac_cv_func_def_prog_mode" = xyes then : else case e in #( e) as_fn_error $? "def_prog_mode() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "doupdate" "ac_cv_func_doupdate" if test "x$ac_cv_func_doupdate" = xyes then : else case e in #( e) as_fn_error $? "doupdate() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "endwin" "ac_cv_func_endwin" if test "x$ac_cv_func_endwin" = xyes then : else case e in #( e) as_fn_error $? "endwin() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "flushinp" "ac_cv_func_flushinp" if test "x$ac_cv_func_flushinp" = xyes then : else case e in #( e) as_fn_error $? "flushinp() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "getcchar" "ac_cv_func_getcchar" if test "x$ac_cv_func_getcchar" = xyes then : else case e in #( e) as_fn_error $? "getcchar() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "has_colors" "ac_cv_func_has_colors" if test "x$ac_cv_func_has_colors" = xyes then : else case e in #( e) as_fn_error $? "has_colors() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "init_pair" "ac_cv_func_init_pair" if test "x$ac_cv_func_init_pair" = xyes then : else case e in #( e) as_fn_error $? "init_pair() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "initscr" "ac_cv_func_initscr" if test "x$ac_cv_func_initscr" = xyes then : else case e in #( e) as_fn_error $? "initscr() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "isendwin" "ac_cv_func_isendwin" if test "x$ac_cv_func_isendwin" = xyes then : else case e in #( e) as_fn_error $? "isendwin() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "keypad" "ac_cv_func_keypad" if test "x$ac_cv_func_keypad" = xyes then : else case e in #( e) as_fn_error $? "keypad() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "mvwin" "ac_cv_func_mvwin" if test "x$ac_cv_func_mvwin" = xyes then : else case e in #( e) as_fn_error $? "mvwin() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "mvwprintw" "ac_cv_func_mvwprintw" if test "x$ac_cv_func_mvwprintw" = xyes then : else case e in #( e) as_fn_error $? "mvwprintw() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "newwin" "ac_cv_func_newwin" if test "x$ac_cv_func_newwin" = xyes then : else case e in #( e) as_fn_error $? "newwin() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "noecho" "ac_cv_func_noecho" if test "x$ac_cv_func_noecho" = xyes then : else case e in #( e) as_fn_error $? "noecho() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "nonl" "ac_cv_func_nonl" if test "x$ac_cv_func_nonl" = xyes then : else case e in #( e) as_fn_error $? "nonl() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "raw" "ac_cv_func_raw" if test "x$ac_cv_func_raw" = xyes then : else case e in #( e) as_fn_error $? "raw() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "reset_prog_mode" "ac_cv_func_reset_prog_mode" if test "x$ac_cv_func_reset_prog_mode" = xyes then : else case e in #( e) as_fn_error $? "reset_prog_mode() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "resize_term" "ac_cv_func_resize_term" if test "x$ac_cv_func_resize_term" = xyes then : else case e in #( e) as_fn_error $? "resize_term() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "resizeterm" "ac_cv_func_resizeterm" if test "x$ac_cv_func_resizeterm" = xyes then : else case e in #( e) as_fn_error $? "resizeterm() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "scrollok" "ac_cv_func_scrollok" if test "x$ac_cv_func_scrollok" = xyes then : else case e in #( e) as_fn_error $? "scrollok() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "set_escdelay" "ac_cv_func_set_escdelay" if test "x$ac_cv_func_set_escdelay" = xyes then : printf "%s\n" "#define HAVE_SET_ESCDELAY_FUNC 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "setcchar" "ac_cv_func_setcchar" if test "x$ac_cv_func_setcchar" = xyes then : else case e in #( e) as_fn_error $? "setcchar() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "start_color" "ac_cv_func_start_color" if test "x$ac_cv_func_start_color" = xyes then : else case e in #( e) as_fn_error $? "start_color() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "use_default_colors" "ac_cv_func_use_default_colors" if test "x$ac_cv_func_use_default_colors" = xyes then : else case e in #( e) as_fn_error $? "use_default_colors() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "waddch" "ac_cv_func_waddch" if test "x$ac_cv_func_waddch" = xyes then : else case e in #( e) as_fn_error $? "waddch() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "waddnstr" "ac_cv_func_waddnstr" if test "x$ac_cv_func_waddnstr" = xyes then : else case e in #( e) as_fn_error $? "waddnstr() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "waddnwstr" "ac_cv_func_waddnwstr" if test "x$ac_cv_func_waddnwstr" = xyes then : else case e in #( e) as_fn_error $? "waddnwstr() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wattr_set" "ac_cv_func_wattr_set" if test "x$ac_cv_func_wattr_set" = xyes then : else case e in #( e) as_fn_error $? "wattr_set() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wbkgrndset" "ac_cv_func_wbkgrndset" if test "x$ac_cv_func_wbkgrndset" = xyes then : else case e in #( e) as_fn_error $? "wbkgrndset() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wborder" "ac_cv_func_wborder" if test "x$ac_cv_func_wborder" = xyes then : else case e in #( e) as_fn_error $? "wborder() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wclrtoeol" "ac_cv_func_wclrtoeol" if test "x$ac_cv_func_wclrtoeol" = xyes then : else case e in #( e) as_fn_error $? "wclrtoeol() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "werase" "ac_cv_func_werase" if test "x$ac_cv_func_werase" = xyes then : else case e in #( e) as_fn_error $? "werase() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wget_wch" "ac_cv_func_wget_wch" if test "x$ac_cv_func_wget_wch" = xyes then : else case e in #( e) as_fn_error $? "wget_wch() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wgetch" "ac_cv_func_wgetch" if test "x$ac_cv_func_wgetch" = xyes then : else case e in #( e) as_fn_error $? "wgetch() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wmove" "ac_cv_func_wmove" if test "x$ac_cv_func_wmove" = xyes then : else case e in #( e) as_fn_error $? "wmove() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wnoutrefresh" "ac_cv_func_wnoutrefresh" if test "x$ac_cv_func_wnoutrefresh" = xyes then : else case e in #( e) as_fn_error $? "wnoutrefresh() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wprintw" "ac_cv_func_wprintw" if test "x$ac_cv_func_wprintw" = xyes then : else case e in #( e) as_fn_error $? "wprintw() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wredrawln" "ac_cv_func_wredrawln" if test "x$ac_cv_func_wredrawln" = xyes then : else case e in #( e) as_fn_error $? "wredrawln() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wrefresh" "ac_cv_func_wrefresh" if test "x$ac_cv_func_wrefresh" = xyes then : else case e in #( e) as_fn_error $? "wrefresh() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wresize" "ac_cv_func_wresize" if test "x$ac_cv_func_wresize" = xyes then : else case e in #( e) as_fn_error $? "wresize() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wtimeout" "ac_cv_func_wtimeout" if test "x$ac_cv_func_wtimeout" = xyes then : else case e in #( e) as_fn_error $? "wtimeout() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "wtouchln" "ac_cv_func_wtouchln" if test "x$ac_cv_func_wtouchln" = xyes then : else case e in #( e) as_fn_error $? "wtouchln() function not found." "$LINENO" 5 ;; esac fi use_extended_colors=yes ac_fn_c_check_func "$LINENO" "extended_pair_content" "ac_cv_func_extended_pair_content" if test "x$ac_cv_func_extended_pair_content" = xyes then : else case e in #( e) use_extended_colors=no ;; esac fi ac_fn_c_check_func "$LINENO" "pair_content" "ac_cv_func_pair_content" if test "x$ac_cv_func_pair_content" = xyes then : else case e in #( e) use_extended_colors=no ;; esac fi if test "$use_extended_colors" = "yes"; then printf "%s\n" "#define HAVE_EXTENDED_COLORS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/inotify.h" "ac_cv_header_sys_inotify_h" "$ac_includes_default" if test "x$ac_cv_header_sys_inotify_h" = xyes then : use_inotify=yes else case e in #( e) use_inotify=no ;; esac fi if test "$use_inotify" = "yes"; then ac_fn_check_decl "$LINENO" "IN_NONBLOCK" "ac_cv_have_decl_IN_NONBLOCK" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_IN_NONBLOCK" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_check_decl "$LINENO" "IN_CLOEXEC" "ac_cv_have_decl_IN_CLOEXEC" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_IN_CLOEXEC" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_check_decl "$LINENO" "IN_ATTRIB" "ac_cv_have_decl_IN_ATTRIB" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_IN_ATTRIB" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_check_decl "$LINENO" "IN_MODIFY" "ac_cv_have_decl_IN_MODIFY" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_IN_MODIFY" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_check_decl "$LINENO" "IN_CREATE" "ac_cv_have_decl_IN_CREATE" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_IN_CREATE" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_check_decl "$LINENO" "IN_DELETE" "ac_cv_have_decl_IN_DELETE" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_IN_DELETE" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_check_decl "$LINENO" "IN_MOVED_FROM" "ac_cv_have_decl_IN_MOVED_FROM" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_IN_MOVED_FROM" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_check_decl "$LINENO" "IN_MOVED_TO" "ac_cv_have_decl_IN_MOVED_TO" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_IN_MOVED_TO" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_check_decl "$LINENO" "IN_EXCL_UNLINK" "ac_cv_have_decl_IN_EXCL_UNLINK" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_IN_EXCL_UNLINK" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_check_decl "$LINENO" "IN_CLOSE_WRITE" "ac_cv_have_decl_IN_CLOSE_WRITE" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_IN_CLOSE_WRITE" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_check_decl "$LINENO" "IN_Q_OVERFLOW" "ac_cv_have_decl_IN_Q_OVERFLOW" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_IN_Q_OVERFLOW" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_c_check_func "$LINENO" "inotify_init1" "ac_cv_func_inotify_init1" if test "x$ac_cv_func_inotify_init1" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_c_check_func "$LINENO" "inotify_add_watch" "ac_cv_func_inotify_add_watch" if test "x$ac_cv_func_inotify_add_watch" = xyes then : else case e in #( e) use_inotify=no ;; esac fi ac_fn_c_check_type "$LINENO" "struct inotify_event" "ac_cv_type_struct_inotify_event" "#include " if test "x$ac_cv_type_struct_inotify_event" = xyes then : else case e in #( e) use_inotify=no ;; esac fi if test "$use_inotify" = "yes"; then printf "%s\n" "#define HAVE_INOTIFY 1" >>confdefs.h fi fi ac_fn_c_check_header_compile "$LINENO" "sys/xattr.h" "ac_cv_header_sys_xattr_h" "$ac_includes_default" if test "x$ac_cv_header_sys_xattr_h" = xyes then : use_xattrs=yes else case e in #( e) use_xattrs=no ;; esac fi if test "$use_xattrs" = "yes"; then ac_fn_c_check_func "$LINENO" "lgetxattr" "ac_cv_func_lgetxattr" if test "x$ac_cv_func_lgetxattr" = xyes then : else case e in #( e) use_xattrs=no ;; esac fi ac_fn_c_check_func "$LINENO" "llistxattr" "ac_cv_func_llistxattr" if test "x$ac_cv_func_llistxattr" = xyes then : else case e in #( e) use_xattrs=no ;; esac fi ac_fn_c_check_func "$LINENO" "lsetxattr" "ac_cv_func_lsetxattr" if test "x$ac_cv_func_lsetxattr" = xyes then : else case e in #( e) use_xattrs=no ;; esac fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main() { return XATTR_CREATE; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) use_xattrs="no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "$use_xattrs" = "yes"; then printf "%s\n" "#define HAVE_XATTRS 1" >>confdefs.h fi fi version="$(mv --version 2> /dev/null | sed -ne 's/^.*(GNU coreutils) //p')" major="${version%.*}" minor="${version#*.}" if test "x$major" != "x" -a "x$minor" != "x" ; then if test $major -eq 7 -a $minor -ge 1 -o $major -gt 7; then printf "%s\n" "#define SUPPORT_NO_CLOBBER 1" >>confdefs.h fi if test $major -eq 7 -a $minor -ge 6 -o $major -gt 7; then printf "%s\n" "#define SUPPORT_REFLINK_AUTO 1" >>confdefs.h fi fi # Check whether --with-glib was given. if test ${with_glib+y} then : withval=$with_glib; use_glib=$withval else case e in #( e) use_glib=yes ;; esac fi # Check whether --with-gtk was given. if test ${with_gtk+y} then : withval=$with_gtk; use_gtk=$withval else case e in #( e) use_gtk=use_glib ;; esac fi if test "x$use_gtk" != "xuse_glib"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"--with(out)-gtk flag is obsolete, please use --with(out)-glib instead\"" >&5 printf "%s\n" "$as_me: WARNING: \"--with(out)-gtk flag is obsolete, please use --with(out)-glib instead\"" >&2;} use_glib=$use_gtk fi # Check whether --with-libmagic was given. if test ${with_libmagic+y} then : withval=$with_libmagic; use_libmagic=$withval else case e in #( e) use_libmagic=yes ;; esac fi # Check whether --with-X11 was given. if test ${with_X11+y} then : withval=$with_X11; use_libX11=$withval else case e in #( e) use_libX11=yes ;; esac fi # Check whether --with-dyn-X11 was given. if test ${with_dyn_X11+y} then : withval=$with_dyn_X11; use_dyn_libX11=$withval else case e in #( e) use_dyn_libX11=yes ;; esac fi if test "$use_glib" = "yes"; then if test "x$(which pkg-config)" != "x"; then if pkg-config --exists glib-2.0 gio-2.0; then CFLAGS="$CFLAGS $(pkg-config --cflags glib-2.0 gio-2.0)" LIBS="$LIBS $(pkg-config --libs glib-2.0 gio-2.0)" ac_fn_c_check_header_compile "$LINENO" "gio/gio.h" "ac_cv_header_gio_gio_h" "#include " if test "x$ac_cv_header_gio_gio_h" = xyes then : else case e in #( e) as_fn_error $? "gio/gio.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "glib.h" "ac_cv_header_glib_h" "#include " if test "x$ac_cv_header_glib_h" = xyes then : else case e in #( e) as_fn_error $? "glib.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "g_file_info_get_content_type" "ac_cv_func_g_file_info_get_content_type" if test "x$ac_cv_func_g_file_info_get_content_type" = xyes then : else case e in #( e) as_fn_error $? "g_file_info_get_content_type() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "g_file_new_for_path" "ac_cv_func_g_file_new_for_path" if test "x$ac_cv_func_g_file_new_for_path" = xyes then : else case e in #( e) as_fn_error $? "g_file_new_for_path() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "g_file_query_info" "ac_cv_func_g_file_query_info" if test "x$ac_cv_func_g_file_query_info" = xyes then : else case e in #( e) as_fn_error $? "g_file_query_info() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "g_object_unref" "ac_cv_func_g_object_unref" if test "x$ac_cv_func_g_object_unref" = xyes then : else case e in #( e) as_fn_error $? "g_object_unref() function not found." "$LINENO" 5 ;; esac fi printf "%s\n" "#define HAVE_GLIB 1" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"Could not find glib-2.0/gio-2.0 via pkg-config. No GLib support.\"" >&5 printf "%s\n" "$as_me: WARNING: \"Could not find glib-2.0/gio-2.0 via pkg-config. No GLib support.\"" >&2;} fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"Could not find pkg-config. No GLib support.\"" >&5 printf "%s\n" "$as_me: WARNING: \"Could not find pkg-config. No GLib support.\"" >&2;} fi fi if test "$use_libmagic" = "yes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for magic_open in -lmagic" >&5 printf %s "checking for magic_open in -lmagic... " >&6; } if test ${ac_cv_lib_magic_magic_open+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lmagic $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char magic_open (void); int main (void) { return magic_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_magic_magic_open=yes else case e in #( e) ac_cv_lib_magic_magic_open=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_magic_magic_open" >&5 printf "%s\n" "$ac_cv_lib_magic_magic_open" >&6; } if test "x$ac_cv_lib_magic_magic_open" = xyes then : LIBS="$LIBS -lmagic" ac_fn_c_check_func "$LINENO" "magic_close" "ac_cv_func_magic_close" if test "x$ac_cv_func_magic_close" = xyes then : else case e in #( e) as_fn_error $? "magic_close() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "magic_file" "ac_cv_func_magic_file" if test "x$ac_cv_func_magic_file" = xyes then : else case e in #( e) as_fn_error $? "magic_file() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "magic_load" "ac_cv_func_magic_load" if test "x$ac_cv_func_magic_load" = xyes then : else case e in #( e) as_fn_error $? "magic_load() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_func "$LINENO" "magic_open" "ac_cv_func_magic_open" if test "x$ac_cv_func_magic_open" = xyes then : else case e in #( e) as_fn_error $? "magic_open() function not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "magic.h" "ac_cv_header_magic_h" "$ac_includes_default" if test "x$ac_cv_header_magic_h" = xyes then : else case e in #( e) as_fn_error $? "magic.h header not found." "$LINENO" 5 ;; esac fi ac_fn_check_decl "$LINENO" "MAGIC_MIME_TYPE" "ac_cv_have_decl_MAGIC_MIME_TYPE" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_MAGIC_MIME_TYPE" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_MAGIC_MIME_TYPE $ac_have_decl" >>confdefs.h printf "%s\n" "#define HAVE_LIBMAGIC 1" >>confdefs.h fi fi # Check whether --enable-extended_keys was given. if test ${enable_extended_keys+y} then : enableval=$enable_extended_keys; extended_keys=$enableval else case e in #( e) extended_keys=yes ;; esac fi # Check whether --enable-desktop_files was given. if test ${enable_desktop_files+y} then : enableval=$enable_desktop_files; desktop_files=$enableval else case e in #( e) desktop_files=yes ;; esac fi # Check whether --enable-remote_cmds was given. if test ${enable_remote_cmds+y} then : enableval=$enable_remote_cmds; remote_cmds=$enableval else case e in #( e) remote_cmds=yes ;; esac fi # Check whether --enable-developer was given. if test ${enable_developer+y} then : enableval=$enable_developer; developer=$enableval else case e in #( e) developer=no ;; esac fi # Check whether --enable-werror was given. if test ${enable_werror+y} then : enableval=$enable_werror; werror=$enableval else case e in #( e) werror=no ;; esac fi # Check whether --enable-coverage was given. if test ${enable_coverage+y} then : enableval=$enable_coverage; coverage=$enableval else case e in #( e) coverage=no ;; esac fi # Check whether --enable-build-timestamp was given. if test ${enable_build_timestamp+y} then : enableval=$enable_build_timestamp; build_timestamp=$enableval else case e in #( e) build_timestamp=yes ;; esac fi # Check whether --with-sanitize was given. if test ${with_sanitize+y} then : withval=$with_sanitize; sanitize=$withval fi if test "$extended_keys" = "yes"; then printf "%s\n" "#define ENABLE_EXTENDED_KEYS 1" >>confdefs.h fi if test "$desktop_files" = "yes"; then printf "%s\n" "#define ENABLE_DESKTOP_FILES 1" >>confdefs.h fi if test "$remote_cmds" = "yes"; then printf "%s\n" "#define ENABLE_REMOTE_CMDS 1" >>confdefs.h fi if test "$use_dyn_libX11" = "yes"; then ORIG_LIBS="$LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dlopen (void); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else case e in #( e) ac_cv_lib_dl_dlopen=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : use_dyn_libX11=yes LIBS="$LIBS -ldl" else case e in #( e) use_dyn_libX11=no ;; esac fi ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" if test "x$ac_cv_header_dlfcn_h" = xyes then : else case e in #( e) use_dyn_libX11=no ;; esac fi ac_fn_c_check_func "$LINENO" "dlsym" "ac_cv_func_dlsym" if test "x$ac_cv_func_dlsym" = xyes then : else case e in #( e) use_dyn_libX11=no ;; esac fi ac_fn_c_check_func "$LINENO" "dlclose" "ac_cv_func_dlclose" if test "x$ac_cv_func_dlclose" = xyes then : else case e in #( e) use_dyn_libX11=no ;; esac fi if test "$use_dyn_libX11" != "yes"; then LIBS="$ORIG_LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"libdl seems to don't work as expected. No dynamic X11.\"" >&5 printf "%s\n" "$as_me: WARNING: \"libdl seems to don't work as expected. No dynamic X11.\"" >&2;} fi fi if test "$use_libX11" = "yes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XOpenDisplay in -lX11" >&5 printf %s "checking for XOpenDisplay in -lX11... " >&6; } if test ${ac_cv_lib_X11_XOpenDisplay+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char XOpenDisplay (void); int main (void) { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_X11_XOpenDisplay=yes else case e in #( e) ac_cv_lib_X11_XOpenDisplay=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_XOpenDisplay" >&5 printf "%s\n" "$ac_cv_lib_X11_XOpenDisplay" >&6; } if test "x$ac_cv_lib_X11_XOpenDisplay" = xyes then : ac_fn_c_check_header_compile "$LINENO" "X11/Xlib.h" "ac_cv_header_X11_Xlib_h" "$ac_includes_default" if test "x$ac_cv_header_X11_Xlib_h" = xyes then : else case e in #( e) as_fn_error $? "X11/Xlib.h header not found." "$LINENO" 5 ;; esac fi ac_fn_c_check_header_compile "$LINENO" "X11/Xutil.h" "ac_cv_header_X11_Xutil_h" "$ac_includes_default" if test "x$ac_cv_header_X11_Xutil_h" = xyes then : else case e in #( e) as_fn_error $? "X11/Xutil.h header not found." "$LINENO" 5 ;; esac fi printf "%s\n" "#define HAVE_X11 1" >>confdefs.h if test "$use_dyn_libX11" = "yes"; then printf "%s\n" "#define DYN_X11 1" >>confdefs.h else LIBS="$LIBS -lX11" fi fi fi WERROR_TUNING="-Wno-error=deprecated-declarations -Werror=sign-compare -Wno-unused-parameter" if test "$developer" = "yes"; then CFLAGS="$CFLAGS -g -O0 -Werror $WERROR_TUNING" TESTS_CFLAGS="$TESTS_CFLAGS -Werror $WERROR_TUNING" fi if test "$werror" = "yes"; then CFLAGS="$CFLAGS -Werror $WERROR_TUNING" TESTS_CFLAGS="$TESTS_CFLAGS -Werror $WERROR_TUNING" fi if test "$coverage" = "yes"; then CFLAGS="$CFLAGS -O0 --coverage" LDFLAGS="$LDFLAGS --coverage" fi if test "$build_timestamp" = "yes"; then printf "%s\n" "#define WITH_BUILD_TIMESTAMP 1" >>confdefs.h fi if test -n "$sanitize" -a "$sanitize" != "basic" -a "$sanitize" != "thread" -a \ "$sanitize" != "leak"; then as_fn_error $? "Unknown type of sanitizing: $sanitize" "$LINENO" 5 fi if test "$sanitize" = "basic"; then SANITIZERS_CFLAGS="-fsanitize=address -fsanitize=undefined" fi if test "$sanitize" = "thread"; then SANITIZERS_CFLAGS="-fsanitize=thread -fPIC" LDFLAGS="$LDFLAGS -pie" fi if test "$sanitize" = "leak"; then LDFLAGS="$LDFLAGS -fsanitize=leak" fi CFLAGS="$CFLAGS $SANITIZERS_CFLAGS" LDFLAGS="$LDFLAGS $SANITIZERS_CFLAGS" CFLAGS="$CFLAGS -include ../build-aux/config.h" ac_config_files="$ac_config_files Makefile src/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi # Check whether --enable-year2038 was given. if test ${enable_year2038+y} then : enableval=$enable_year2038; fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by vifm $as_me 0.14, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . vifm home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ vifm config.status 0.14 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: '$1' Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "build-aux/config.h") CONFIG_HEADERS="$CONFIG_HEADERS build-aux/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi vifm-0.14/configure.ac000066400000000000000000001213161475151500600146750ustar00rootroot00000000000000dnl Process this file with autoconf to produce a configure script. AC_INIT([vifm],[0.14],[xaizek@posteo.net],[vifm],[https://vifm.info]) AC_CONFIG_SRCDIR(src/vifm.c) AC_CONFIG_AUX_DIR(build-aux) AC_CONFIG_MACRO_DIR(build-aux/m4) AM_INIT_AUTOMAKE([no-dist-gzip dist-bzip2]) AC_CONFIG_HEADERS(build-aux/config.h) AC_DEFINE([VERSION_NUM], [1400], [Program version as a comparable integer.]) AC_DEFINE([PACKAGE_SYSCONF_DIR], [], [Configuration directory of the package.]) AC_DEFINE([PACKAGE_DATA_DIR], [], [Data directory of the package.]) AC_DEFINE([PACKAGE_SOURCE_DIR], [], [Source directory of the package.]) dnl Request some additional extensions. The macro makes it possible to use dnl features of Posix that are extensions to C, as well as platform extensions dnl not defined by Posix. AC_USE_SYSTEM_EXTENSIONS AC_PROG_CC AM_PROG_CC_C_O AM_SILENT_RULES([yes]) AC_LANG(C) dnl Determine host machine type. AC_CANONICAL_HOST dnl Require $host variable presence. AC_MSG_CHECKING([host]) AC_MSG_RESULT([$host]) dnl Define $OSX_HOST variable for OS X case "$host_os" in macos* | darwin*) OSX_HOST=1 ;; *) OSX_HOST= ;; esac dnl pass some CFLAGS to tests (TESTS_CFLAGS is also extended below) TESTS_CFLAGS="$CFLAGS" AC_SUBST([TESTS_CFLAGS]) AC_DEFINE([_XOPEN_SOURCE_EXTENDED], [1], [Define to 1 to enable wide functions of ncurses in some environments.]) AC_DEFINE([UTF8PROC_STATIC], [1], [Make it so that utf8proc does not think it is a library.]) dnl Check for system headers. AC_CHECK_HEADERS([alloca.h], [AC_DEFINE([HAVE_ALLOCA_H], [1], [alloca.h header is available.])]) AC_CHECK_HEADERS([malloc.h], [AC_DEFINE([HAVE_MALLOC_H], [1], [malloc.h header is available.])]) AC_CHECK_HEADER([assert.h], [], [AC_MSG_ERROR([assert.h header not found.])]) AC_CHECK_HEADER([ctype.h], [], [AC_MSG_ERROR([ctype.h header not found.])]) AC_CHECK_HEADER([dirent.h], [], [AC_MSG_ERROR([dirent.h header not found.])]) AC_CHECK_HEADER([errno.h], [], [AC_MSG_ERROR([errno.h header not found.])]) AC_CHECK_HEADER([fcntl.h], [], [AC_MSG_ERROR([fcntl.h header not found.])]) AC_CHECK_HEADER([grp.h], [], [AC_MSG_ERROR([grp.h header not found.])]) AC_CHECK_HEADER([inttypes.h], [], [AC_MSG_ERROR([inttypes.h header not found.])]) AC_CHECK_HEADER([limits.h], [], [AC_MSG_ERROR([limits.h header not found.])]) AC_CHECK_HEADER([locale.h], [], [AC_MSG_ERROR([locale.h header not found.])]) AC_CHECK_HEADER([math.h], [], [AC_MSG_ERROR([math.h header not found.])]) AC_CHECK_HEADERS([mntent.h], [HAVE_MNTENT_H=1]) AC_CHECK_HEADER([pwd.h], [], [AC_MSG_ERROR([pwd.h header not found.])]) AC_CHECK_HEADER([signal.h], [], [AC_MSG_ERROR([signal.h header not found.])]) AC_CHECK_HEADER([stdarg.h], [], [AC_MSG_ERROR([stdarg.h header not found.])]) AC_CHECK_HEADER([stddef.h], [], [AC_MSG_ERROR([stddef.h header not found.])]) AC_CHECK_HEADER([stdint.h], [], [AC_MSG_ERROR([stdint.h header not found.])]) AC_CHECK_HEADER([stdio.h], [], [AC_MSG_ERROR([stdio.h header not found.])]) AC_CHECK_HEADER([stdlib.h], [], [AC_MSG_ERROR([stdlib.h header not found.])]) AC_CHECK_HEADER([string.h], [], [AC_MSG_ERROR([string.h header not found.])]) AC_CHECK_HEADER([sys/ioctl.h], [], [AC_MSG_ERROR([sys/ioctl.h header not found.])]) AC_CHECK_HEADER([sys/stat.h], [], [AC_MSG_ERROR([sys/stat.h header not found.])]) AC_CHECK_HEADER([sys/time.h], [], [AC_MSG_ERROR([sys/time.h header not found.])]) AC_CHECK_HEADER([sys/types.h], [], [AC_MSG_ERROR([sys/types.h header not found.])]) AC_CHECK_HEADER([sys/wait.h], [], [AC_MSG_ERROR([sys/wait.h header not found.])]) AC_CHECK_HEADER([termios.h], [], [AC_MSG_ERROR([termios.h header not found.])]) AC_CHECK_HEADER([time.h], [], [AC_MSG_ERROR([time.h header not found.])]) AC_CHECK_HEADER([unistd.h], [], [AC_MSG_ERROR([unistd.h header not found.])]) AC_CHECK_HEADER([wchar.h], [], [AC_MSG_ERROR([wchar.h header not found.])]) AC_CHECK_HEADER([wctype.h], [], [AC_MSG_ERROR([wctype.h header not found.])]) dnl Headers required for breaking too long command-lines. AC_CHECK_HEADERS([sys/sysmacros.h sys/param.h sys/user.h linux/binfmts.h], [], [], [[#if HAVE_SYS_PARAM_H # include #endif ]]) if test "$ac_cv_header_sys_user_h" = yes -a "$ac_cv_header_linux_binfmts_h" = yes; then AC_COMPILE_IFELSE([AC_LANG_SOURCE( [[#include #include #include #ifndef PAGE_SIZE #define PAGE_SIZE sysconf(_SC_PAGESIZE) #endif int main() { (void)MAX_ARG_STRLEN; return 0; } ]])], [AC_DEFINE([HAVE_MAX_ARG_STRLEN], [1], [MAX_ARG_STRLEN is available.])]) fi dnl Check for various system types. AC_CHECK_TYPE([uid_t]) AC_CHECK_TYPE([gid_t]) AC_CHECK_TYPE([mode_t]) AC_CHECK_TYPE([off_t]) AC_CHECK_TYPE([time_t]) AC_CHECK_TYPE([uint64_t]) AC_CHECK_TYPE([direntry_t]) if test -n "$HAVE_MNTENT_H" ; then AC_CHECK_TYPE([mntent]) else AC_CHECK_TYPES([getmntinfo], [], [], [[ #include #include #include ]]) fi AC_CHECK_TYPE([stat]) AC_CHECK_TYPE([FILE]) AC_CHECK_TYPE([wchar_t]) dnl Check for various system functions. AC_CHECK_FUNC([access], [], [AC_MSG_ERROR([access() function not found.])]) AC_CHECK_FUNC([atof], [], [AC_MSG_ERROR([atof() function not found.])]) AC_CHECK_FUNC([atoi], [], [AC_MSG_ERROR([atoi() function not found.])]) AC_CHECK_FUNC([calloc], [], [AC_MSG_ERROR([calloc() function not found.])]) AC_CHECK_FUNC([chdir], [], [AC_MSG_ERROR([chdir() function not found.])]) AC_CHECK_FUNC([close], [], [AC_MSG_ERROR([close() function not found.])]) AC_CHECK_FUNC([closedir], [], [AC_MSG_ERROR([closedir() function not found.])]) AC_CHECK_FUNC([dup], [], [AC_MSG_ERROR([dup() function not found.])]) AC_CHECK_FUNC([dup2], [], [AC_MSG_ERROR([dup2() function not found.])]) AC_CHECK_FUNC([execve], [], [AC_MSG_ERROR([execve() function not found.])]) AC_CHECK_FUNC([execvp], [], [AC_MSG_ERROR([execvp() function not found.])]) AC_CHECK_FUNC([exit], [], [AC_MSG_ERROR([exit() function not found.])]) AC_CHECK_FUNC([fdatasync], [AC_DEFINE([HAVE_FDATASYNC], [1], [fdatasync() is available.])], []) AC_CHECK_FUNC([fclose], [], [AC_MSG_ERROR([fclose() function not found.])]) AC_CHECK_FUNC([fdopen], [], [AC_MSG_ERROR([fdopen() function not found.])]) AC_CHECK_FUNC([feof], [], [AC_MSG_ERROR([feof() function not found.])]) AC_CHECK_FUNC([fgetc], [], [AC_MSG_ERROR([fgetc() function not found.])]) AC_CHECK_FUNC([fgets], [], [AC_MSG_ERROR([fgets() function not found.])]) AC_CHECK_FUNC([fork], [], [AC_MSG_ERROR([fork() function not found.])]) AC_CHECK_FUNC([fprintf], [], [AC_MSG_ERROR([fprintf() function not found.])]) AC_CHECK_FUNC([fputc], [], [AC_MSG_ERROR([fputc() function not found.])]) AC_CHECK_FUNC([fputs], [], [AC_MSG_ERROR([fputs() function not found.])]) AC_CHECK_FUNC([free], [], [AC_MSG_ERROR([free() function not found.])]) AC_CHECK_FUNC([fwrite], [], [AC_MSG_ERROR([fwrite() function not found.])]) AC_CHECK_FUNC([getcwd], [], [AC_MSG_ERROR([getcwd() function not found.])]) AC_CHECK_FUNC([getenv], [], [AC_MSG_ERROR([getenv() function not found.])]) AC_CHECK_FUNC([geteuid], [], [AC_MSG_ERROR([geteuid() function not found.])]) AC_CHECK_FUNC([getgrent], [], [AC_MSG_ERROR([getgrent() function not found.])]) AC_CHECK_FUNC([getgrgid], [], [AC_MSG_ERROR([getgrgid() function not found.])]) AC_CHECK_FUNC([getgrgid_r], [], [AC_MSG_ERROR([getgrgid_r() function not found.])]) AC_CHECK_FUNC([getgrnam], [], [AC_MSG_ERROR([getgrnam() function not found.])]) AC_CHECK_FUNC([getpid], [], [AC_MSG_ERROR([getpid() function not found.])]) AC_CHECK_FUNC([getppid], [], [AC_MSG_ERROR([getppid() function not found.])]) AC_CHECK_FUNC([getpwent], [], [AC_MSG_ERROR([getpwent() function not found.])]) AC_CHECK_FUNC([getpwnam], [], [AC_MSG_ERROR([getpwnam() function not found.])]) AC_CHECK_FUNC([getpwuid], [], [AC_MSG_ERROR([getpwuid() function not found.])]) AC_CHECK_FUNC([getpwuid_r], [], [AC_MSG_ERROR([getpwuid_r() function not found.])]) AC_CHECK_FUNC([ioctl], [], [AC_MSG_ERROR([ioctl() function not found.])]) AC_CHECK_FUNC([iswalnum], [], [AC_MSG_ERROR([iswalnum() function not found.])]) AC_CHECK_FUNC([iswdigit], [], [AC_MSG_ERROR([iswdigit() function not found.])]) AC_CHECK_FUNC([iswprint], [], [AC_MSG_ERROR([iswprint() function not found.])]) AC_CHECK_FUNC([iswspace], [], [AC_MSG_ERROR([iswspace() function not found.])]) AC_CHECK_FUNC([iswupper], [], [AC_MSG_ERROR([iswupper() function not found.])]) AC_CHECK_FUNC([kill], [], [AC_MSG_ERROR([kill() function not found.])]) AC_CHECK_FUNC([localtime], [], [AC_MSG_ERROR([localtime() function not found.])]) AC_CHECK_FUNC([malloc], [], [AC_MSG_ERROR([malloc() function not found.])]) AC_CHECK_FUNC([mbstowcs], [], [AC_MSG_ERROR([mbstowcs() function not found.])]) AC_CHECK_FUNC([memcmp], [], [AC_MSG_ERROR([memcmp() function not found.])]) AC_CHECK_FUNC([memcpy], [], [AC_MSG_ERROR([memcpy() function not found.])]) AC_CHECK_FUNC([memccpy], [], [AC_MSG_ERROR([memccpy() function not found.])]) AC_CHECK_FUNC([memmove], [], [AC_MSG_ERROR([memmove() function not found.])]) AC_CHECK_FUNC([memset], [], [AC_MSG_ERROR([memset() function not found.])]) AC_CHECK_FUNC([mkdir], [], [AC_MSG_ERROR([mkdir() function not found.])]) AC_CHECK_FUNC([mkstemp], [], [AC_MSG_ERROR([mkstemp() function not found.])]) AC_CHECK_FUNC([opendir], [], [AC_MSG_ERROR([opendir() function not found.])]) AC_CHECK_FUNC([pathconf], [], [AC_MSG_ERROR([pathconf() function not found.])]) AC_CHECK_FUNC([pause], [], [AC_MSG_ERROR([pause() function not found.])]) AC_CHECK_FUNC([pclose], [], [AC_MSG_ERROR([pclose() function not found.])]) AC_CHECK_FUNC([perror], [], [AC_MSG_ERROR([perror() function not found.])]) AC_CHECK_FUNC([pipe], [], [AC_MSG_ERROR([pipe() function not found.])]) AC_CHECK_FUNC([popen], [], [AC_MSG_ERROR([popen() function not found.])]) AC_CHECK_FUNC([printf], [], [AC_MSG_ERROR([printf() function not found.])]) AC_CHECK_FUNC([puts], [], [AC_MSG_ERROR([puts() function not found.])]) AC_CHECK_FUNC([qsort], [], [AC_MSG_ERROR([qsort() function not found.])]) AC_CHECK_FUNC([rand], [], [AC_MSG_ERROR([rand() function not found.])]) AC_CHECK_FUNC([read], [], [AC_MSG_ERROR([read() function not found.])]) AC_CHECK_FUNC([readlink], [], [AC_MSG_ERROR([readlink() function not found.])]) AC_CHECK_FUNC([realloc], [], [AC_MSG_ERROR([realloc() function not found.])]) AC_CHECK_FUNC([realpath], [], [AC_MSG_ERROR([realpath() function not found.])]) AC_CHECK_FUNC([rename], [], [AC_MSG_ERROR([rename() function not found.])]) AC_CHECK_FUNC([rmdir], [], [AC_MSG_ERROR([rmdir() function not found.])]) AC_CHECK_FUNC([select], [], [AC_MSG_ERROR([select() function not found.])]) AC_CHECK_FUNC([setenv], [], [AC_MSG_ERROR([setenv() function not found.])]) AC_CHECK_FUNC([setgrent], [], [AC_MSG_ERROR([setgrent() function not found.])]) AC_CHECK_FUNC([setlocale], [], [AC_MSG_ERROR([setlocale() function not found.])]) AC_CHECK_FUNC([setpgid], [], [AC_MSG_ERROR([setpgid() function not found.])]) AC_CHECK_FUNC([setpwent], [], [AC_MSG_ERROR([setpwent() function not found.])]) AC_CHECK_FUNC([setsid], [], [AC_MSG_ERROR([setsid() function not found.])]) AC_CHECK_FUNC([setvbuf], [], [AC_MSG_ERROR([setvbuf() function not found.])]) AC_CHECK_FUNC([sigaction], [], [AC_MSG_ERROR([sigaction() function not found.])]) AC_CHECK_FUNC([sigaddset], [], [AC_MSG_ERROR([sigaddset() function not found.])]) AC_CHECK_FUNC([sigemptyset], [], [AC_MSG_ERROR([sigemptyset() function not found.])]) AC_CHECK_FUNC([signal], [], [AC_MSG_ERROR([signal() function not found.])]) AC_CHECK_FUNC([snprintf], [], [AC_MSG_ERROR([snprintf() function not found.])]) AC_CHECK_FUNC([sprintf], [], [AC_MSG_ERROR([sprintf() function not found.])]) AC_CHECK_FUNC([srand], [], [AC_MSG_ERROR([srand() function not found.])]) AC_CHECK_FUNC([strcasecmp], [], [AC_MSG_ERROR([strcasecmp() function not found.])]) AC_CHECK_FUNC([strcasestr], [AC_DEFINE([HAVE_STRCASESTR], [1], [strcasestr() is available.])], []) AC_CHECK_FUNC([strcat], [], [AC_MSG_ERROR([strcat() function not found.])]) AC_CHECK_FUNC([strchr], [], [AC_MSG_ERROR([strchr() function not found.])]) AC_CHECK_FUNC([strcmp], [], [AC_MSG_ERROR([strcmp() function not found.])]) AC_CHECK_FUNC([strcpy], [], [AC_MSG_ERROR([strcpy() function not found.])]) AC_CHECK_FUNC([strdup], [], [AC_MSG_ERROR([strdup() function not found.])]) AC_CHECK_FUNC([strerror], [], [AC_MSG_ERROR([strerror() function not found.])]) AC_CHECK_FUNC([strftime], [], [AC_MSG_ERROR([strftime() function not found.])]) AC_CHECK_FUNC([strlen], [], [AC_MSG_ERROR([strlen() function not found.])]) AC_CHECK_FUNC([strncasecmp], [], [AC_MSG_ERROR([strncasecmp() function not found.])]) AC_CHECK_FUNC([strncat], [], [AC_MSG_ERROR([strncat() function not found.])]) AC_CHECK_FUNC([strncmp], [], [AC_MSG_ERROR([strncmp() function not found.])]) AC_CHECK_FUNC([strncpy], [], [AC_MSG_ERROR([strncpy() function not found.])]) AC_CHECK_FUNC([strpbrk], [], [AC_MSG_ERROR([strpbrk() function not found.])]) AC_CHECK_FUNC([strrchr], [], [AC_MSG_ERROR([strrchr() function not found.])]) AC_CHECK_FUNC([strspn], [], [AC_MSG_ERROR([strspn() function not found.])]) AC_CHECK_FUNC([strstr], [], [AC_MSG_ERROR([strstr() function not found.])]) AC_CHECK_FUNC([strtok_r], [], [AC_MSG_ERROR([strtok_r() function not found.])]) AC_CHECK_FUNC([strtol], [], [AC_MSG_ERROR([strtol() function not found.])]) AC_CHECK_FUNC([strtoll], [], [AC_MSG_ERROR([strtoll() function not found.])]) AC_CHECK_FUNC([strverscmp], [AC_DEFINE([HAVE_STRVERSCMP_FUNC], [1], [strverscmp() function is available.])]) AC_CHECK_FUNC([sysconf], [], [AC_MSG_ERROR([sysconf() function not found.])]) AC_CHECK_FUNC([time], [], [AC_MSG_ERROR([time() function not found.])]) AC_CHECK_FUNC([tolower], [], [AC_MSG_ERROR([tolower() function not found.])]) AC_CHECK_FUNC([toupper], [], [AC_MSG_ERROR([toupper() function not found.])]) AC_CHECK_FUNC([towupper], [], [AC_MSG_ERROR([towupper() function not found.])]) AC_CHECK_FUNC([ungetc], [], [AC_MSG_ERROR([ungetc() function not found.])]) AC_CHECK_FUNC([unlink], [], [AC_MSG_ERROR([unlink() function not found.])]) AC_CHECK_FUNC([unsetenv], [], [AC_MSG_ERROR([unsetenv() function not found.])]) AC_CHECK_FUNC([utimes], [], [AC_MSG_ERROR([utimes() function not found.])]) AC_CHECK_FUNC([vfprintf], [], [AC_MSG_ERROR([vfprintf() function not found.])]) AC_CHECK_FUNC([vsnprintf], [], [AC_MSG_ERROR([vsnprintf() function not found.])]) AC_CHECK_FUNC([vswprintf], [], [AC_MSG_ERROR([vswprintf() function not found.])]) AC_CHECK_FUNC([waitpid], [], [AC_MSG_ERROR([waitpid() function not found.])]) AC_CHECK_FUNC([wcscat], [], [AC_MSG_ERROR([wcscat() function not found.])]) AC_CHECK_FUNC([wcscmp], [], [AC_MSG_ERROR([wcscmp() function not found.])]) AC_CHECK_FUNC([wcscpy], [], [AC_MSG_ERROR([wcscpy() function not found.])]) AC_CHECK_FUNC([wcslen], [], [AC_MSG_ERROR([wcslen() function not found.])]) AC_CHECK_FUNC([wcsncmp], [], [AC_MSG_ERROR([wcsncmp() function not found.])]) AC_CHECK_FUNC([wcsncpy], [], [AC_MSG_ERROR([wcsncpy() function not found.])]) AC_CHECK_FUNC([wcstof], [], [AC_MSG_ERROR([wcstof() function not found.])]) AC_CHECK_FUNC([wcstol], [], [AC_MSG_ERROR([wcstol() function not found.])]) AC_CHECK_FUNC([wcstombs], [], [AC_MSG_ERROR([wcstombs() function not found.])]) AC_CHECK_FUNC([wcswidth], [], [AC_MSG_ERROR([wcswidth() function not found.])]) AC_CHECK_FUNC([wcwidth], [], [AC_MSG_ERROR([wcwidth() function not found.])]) AC_CHECK_FUNCS([futimens]) AC_CHECK_FUNCS([random srandom]) AC_CHECK_FUNCS([reallocarray]) if test -n "$HAVE_MNTENT_H" ; then AC_CHECK_FUNC([endmntent], [], [AC_MSG_ERROR([endmntent() function not found.])]) AC_CHECK_FUNC([getmntent], [], [AC_MSG_ERROR([getmntent() function not found.])]) AC_CHECK_FUNC([setmntent], [], [AC_MSG_ERROR([setmntent() function not found.])]) fi AC_CHECK_DECLS([_PC_CASE_SENSITIVE], [], [], [[#include ]]) dnl Check for regex.h header, its functions, types and macros. AC_CHECK_HEADER([regex.h], [], [AC_MSG_ERROR([regex.h header not found.])]) AC_CHECK_FUNC([regcomp], [], [AC_MSG_ERROR([regcomp() function not found.])]) AC_CHECK_FUNC([regerror], [], [AC_MSG_ERROR([regerror() function not found.])]) AC_CHECK_FUNC([regexec], [], [AC_MSG_ERROR([regexec() function not found.])]) AC_CHECK_FUNC([regfree], [], [AC_MSG_ERROR([regfree() function not found.])]) AC_CHECK_TYPE([regex_t], [], [AC_MSG_ERROR([regex_t type not found in regex.h])], [[#include ]]) AC_CHECK_DECL([REG_EXTENDED], [], [AC_MSG_ERROR([REG_EXTENDED not found in regex.h])], [[#include ]]) AC_CHECK_DECL([REG_ICASE], [], [AC_MSG_ERROR([REG_ICASE not found in regex.h])], [[#include ]]) AC_CHECK_DECL([REG_NOMATCH], [], [AC_MSG_ERROR([REG_NOMATCH not found in regex.h])], [[#include ]]) AC_CHECK_MEMBERS([struct stat.st_mtim], [], [], [[ #include #include #include ]]) AC_CHECK_MEMBERS([struct dirent.d_type], [], [], [[ #include ]]) AC_SYS_LARGEFILE AC_FUNC_FSEEKO AC_TYPE_OFF_T dnl At least on AIX `st_atim` and `st_mtim` might not match `struct timespec`. if test "$ac_cv_member_struct_stat_st_mtim" = yes; then AC_COMPILE_IFELSE([AC_LANG_SOURCE( [[#include #include #include int main() { struct stat st; struct timespec ts[2] = { st.st_atim, st.st_mtim }; return 0; } ]])], [AC_DEFINE([HAVE_CONSISTENT_TIMESPEC], [1], [timespec is good.])]) fi dnl ---------------------------------------------------------------------------- dnl check for available tools/applications dnl ---------------------------------------------------------------------------- AC_CHECK_PROG(HAVE_FILE_PROG, file, 1) if test "x${HAVE_FILE_PROG}" = 'x1' ; then AC_DEFINE_UNQUOTED(HAVE_FILE_PROG, 1, [Define if file program present]) fi dnl Use either groff or mandoc for generating plain text help from manual page. AC_CHECK_PROGS(MANGEN_PROG, [groff mandoc], []) dnl col might be used for filtering out terminal escape sequences AC_CHECK_PROG(COL_PROG, col, col) dnl awk is used to generate source with list of documentation tags AC_CHECK_PROG(AWK_PROG, awk, awk) dnl sed is used to make plain text documentation AC_CHECK_PROG(SED_PROG, sed, sed) dnl perl is used to generate tags from documentation AC_CHECK_PROG(PERL_PROG, perl, perl) dnl vim is a fallback for generating documentation tags when perl isn't there AC_CHECK_PROG(VIM_PROG, vim, vim) if test "x${PERL_PROG}${VIM_PROG}" == 'x'; then AC_MSG_ERROR([Either perl or Vim is necessary to generate tags for documentation in Vim's format.]) fi dnl check if we're building inside git repository AC_CHECK_PROG(GIT_PROG, git, git) if test "x${GIT_PROG}" != 'x' -a -d .git/; then IN_GIT_REPO=1 fi AC_SUBST([IN_GIT_REPO]) dnl ---------------------------------------------------------------------------- dnl setup various package/compilation settings dnl ---------------------------------------------------------------------------- dnl Set PACKAGE_SYSCONF_DIR in config.h. if test "x${sysconfdir}" = 'x${prefix}/etc'; then if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_SYSCONF_DIR, "${ac_default_prefix}/etc/${PACKAGE}") else AC_DEFINE_UNQUOTED(PACKAGE_SYSCONF_DIR, "${prefix}/etc/${PACKAGE}") fi else AC_DEFINE_UNQUOTED(PACKAGE_SYSCONF_DIR, "${sysconfdir}/${PACKAGE}") fi dnl Set PACKAGE_DATA_DIR in config.h. if test "x${datadir}" = 'x${prefix}/share'; then if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${ac_default_prefix}/share/${PACKAGE}") else AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${prefix}/share/${PACKAGE}") fi else if test "x${datadir}" = 'x${datarootdir}'; then if test "x${datarootdir}" = 'x${prefix}/share'; then if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${ac_default_prefix}/share/${PACKAGE}") else AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${prefix}/share/${PACKAGE}") fi fi else AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${datadir}/${PACKAGE}") fi fi dnl Setup suffix for data files. if test -n "$OSX_HOST" ; then DATA_SUFFIX=-osx fi AC_SUBST([DATA_SUFFIX]) dnl Set PACKAGE_SOURCE_DIR in config.h. packagesrcdir=`cd $srcdir && pwd` AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}") dnl Use -Wall if available. AX_CHECK_COMPILE_FLAG([-Wall], [ case " $CFLAGS " in *[\ \ ]-Wall[\ \ ]*) ;; *) CFLAGS="$CFLAGS -Wall" ;; esac ]) dnl Define _DARWIN_C_SOURCE macro while compiling on OS X. if test -n "$OSX_HOST" ; then AC_DEFINE([_DARWIN_C_SOURCE], [1], [Enable extensions in header files on OS X.]) fi dnl Use 64-bit off_t type AC_DEFINE([_FILE_OFFSET_BITS], [64], [Enable large file processing on 32-bit systems.]) dnl Use math library if present (standard doesn't require it to be separated dnl from libc) AC_CHECK_LIB(m, pow, [LIBS="$LIBS -lm"]) dnl Enable POSIX shared memory AC_CHECK_LIB(rt, shm_open, [LIBS="$LIBS -lrt"]) dnl Use pthread library AX_PTHREAD([ LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" TESTS_CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CC="$PTHREAD_CC" ], [ AC_MSG_ERROR([pthread not found]) ]) dnl Check for all required elements in pthread.h. AC_CHECK_FUNC([pthread_create], [], [AC_MSG_ERROR([pthread_create() function not found.])]) AC_CHECK_FUNC([pthread_getspecific], [], [AC_MSG_ERROR([pthread_getspecific() function not found.])]) AC_CHECK_FUNC([pthread_key_create], [], [AC_MSG_ERROR([pthread_key_create() function not found.])]) AC_CHECK_FUNC([pthread_mutex_lock], [], [AC_MSG_ERROR([pthread_mutex_lock() function not found.])]) AC_CHECK_FUNC([pthread_mutex_unlock], [], [AC_MSG_ERROR([pthread_mutex_unlock() function not found.])]) AC_CHECK_FUNC([pthread_setspecific], [], [AC_MSG_ERROR([pthread_setspecific() function not found.])]) AC_CHECK_FUNC([pthread_detach], [], [AC_MSG_ERROR([pthread_detach() function not found.])]) AC_CHECK_FUNC([pthread_self], [], [AC_MSG_ERROR([pthread_self() function not found.])]) AC_CHECK_TYPE([pthread_t], [], [AC_MSG_ERROR([pthread_t type not found in pthread.h])], [[#include ]]) AC_CHECK_TYPE([pthread_key_t], [], [AC_MSG_ERROR([pthread_key_t type not found in pthread.h])], [[#include ]]) AC_CHECK_TYPE([pthread_mutex_t], [], [AC_MSG_ERROR([pthread_mutex_t type not found in pthread.h])], [[#include ]]) AC_CHECK_TYPE([pthread_cond_t], [], [AC_MSG_ERROR([pthread_cond_t type not found in pthread.h])], [[#include ]]) AC_CHECK_DECL([PTHREAD_MUTEX_INITIALIZER], [], [AC_MSG_ERROR([PTHREAD_MUTEX_INITIALIZER not found in pthread.h])], [[#include ]]) AC_CHECK_DECL([PTHREAD_COND_INITIALIZER], [], [AC_MSG_ERROR([PTHREAD_COND_INITIALIZER not found in pthread.h])], [[#include ]]) dnl Name of curses library file. curses_lib_name=ncursesw AC_ARG_WITH(curses-name, [ --with-curses-name=NAME name of curses library file @<:@default=ncursesw@:>@], [curses_lib_name=$withval]) dnl AC_CHECK_LIB(XCurses, initscr) vifm_cv_curses=/usr AC_ARG_WITH(curses, [ --with-curses=DIR where ncurses is installed ], [if test $withval != yes; then vifm_cv_curses=$withval fi if test x$vifm_cv_curses != x/usr; then LDFLAGS="-L${vifm_cv_curses}/lib $LDFLAGS" CPPFLAGS="$CPPFLAGS -I${vifm_cv_curses}/include -I${vifm_cv_curses}/include/${curses_lib_name}" fi]) dnl Try to find ncurses library. ncurses_found=no dnl Firstly check for lib${curses_lib_name}. AC_CHECK_LIB(${curses_lib_name}, initscr, [LIBS="$LIBS -l${curses_lib_name}" if test x$vifm_cv_curses = x/usr -a -d /usr/include/${curses_lib_name}; then CPPFLAGS="$CPPFLAGS -I/usr/include/${curses_lib_name}" fi ncurses_found=yes] AC_SEARCH_LIBS([curs_set], [tinfow],, AC_MSG_ERROR(could not find a library providing curs_set))) dnl If libncursesw is not found on OS X, check for libncurses. On OS X it has dnl support of wide characters. if test -n "$OSX_HOST" -a "x$ncurses_found" != "xyes"; then AC_CHECK_LIB(ncurses, initscr, [LIBS="$LIBS -lncurses" if test x$vifm_cv_curses = x/usr -a -d /usr/include/ncurses; then CPPFLAGS="$CPPFLAGS -I/usr/include/ncurses" fi ncurses_found=yes]) fi dnl Quit with appropriate error message if ncurses library wasn't found. if test "x$ncurses_found" != "xyes"; then if test -z "$OSX_HOST"; then AC_MSG_ERROR([libncursesw not found]) else AC_MSG_ERROR([libncursesw and libncurses not found]) fi fi LIBS=$LIBS $GUI_LINK_OPTS_TERM dnl Check for curses.h header and all its required elements. AC_CHECK_HEADER([curses.h], [], [AC_MSG_ERROR([curses.h header not found.])]) AC_CHECK_DECL([A_ITALIC], [AC_DEFINE([HAVE_A_ITALIC_DECL], [1], [A_ITALIC attribute is available.])], [], [[#include ]]) AC_CHECK_DECL([COLORS], [], [AC_MSG_ERROR([COLORS not found in curses.h])], [[#include ]]) AC_CHECK_DECL([TABSIZE], [], [AC_MSG_ERROR([TABSIZE not found in curses.h])], [[#include ]]) AC_CHECK_FUNC([curs_set], [], [AC_MSG_ERROR([curs_set() function not found.])]) AC_CHECK_FUNC([def_prog_mode], [], [AC_MSG_ERROR([def_prog_mode() function not found.])]) AC_CHECK_FUNC([doupdate], [], [AC_MSG_ERROR([doupdate() function not found.])]) AC_CHECK_FUNC([endwin], [], [AC_MSG_ERROR([endwin() function not found.])]) AC_CHECK_FUNC([flushinp], [], [AC_MSG_ERROR([flushinp() function not found.])]) AC_CHECK_FUNC([getcchar], [], [AC_MSG_ERROR([getcchar() function not found.])]) AC_CHECK_FUNC([has_colors], [], [AC_MSG_ERROR([has_colors() function not found.])]) AC_CHECK_FUNC([init_pair], [], [AC_MSG_ERROR([init_pair() function not found.])]) AC_CHECK_FUNC([initscr], [], [AC_MSG_ERROR([initscr() function not found.])]) AC_CHECK_FUNC([isendwin], [], [AC_MSG_ERROR([isendwin() function not found.])]) AC_CHECK_FUNC([keypad], [], [AC_MSG_ERROR([keypad() function not found.])]) AC_CHECK_FUNC([mvwin], [], [AC_MSG_ERROR([mvwin() function not found.])]) AC_CHECK_FUNC([mvwprintw], [], [AC_MSG_ERROR([mvwprintw() function not found.])]) AC_CHECK_FUNC([newwin], [], [AC_MSG_ERROR([newwin() function not found.])]) AC_CHECK_FUNC([noecho], [], [AC_MSG_ERROR([noecho() function not found.])]) AC_CHECK_FUNC([nonl], [], [AC_MSG_ERROR([nonl() function not found.])]) AC_CHECK_FUNC([raw], [], [AC_MSG_ERROR([raw() function not found.])]) AC_CHECK_FUNC([reset_prog_mode], [], [AC_MSG_ERROR([reset_prog_mode() function not found.])]) AC_CHECK_FUNC([resize_term], [], [AC_MSG_ERROR([resize_term() function not found.])]) AC_CHECK_FUNC([resizeterm], [], [AC_MSG_ERROR([resizeterm() function not found.])]) AC_CHECK_FUNC([scrollok], [], [AC_MSG_ERROR([scrollok() function not found.])]) AC_CHECK_FUNC([set_escdelay], [AC_DEFINE([HAVE_SET_ESCDELAY_FUNC], [1], [set_escdelay() function is available.])]) AC_CHECK_FUNC([setcchar], [], [AC_MSG_ERROR([setcchar() function not found.])]) AC_CHECK_FUNC([start_color], [], [AC_MSG_ERROR([start_color() function not found.])]) AC_CHECK_FUNC([use_default_colors], [], [AC_MSG_ERROR([use_default_colors() function not found.])]) AC_CHECK_FUNC([waddch], [], [AC_MSG_ERROR([waddch() function not found.])]) AC_CHECK_FUNC([waddnstr], [], [AC_MSG_ERROR([waddnstr() function not found.])]) AC_CHECK_FUNC([waddnwstr], [], [AC_MSG_ERROR([waddnwstr() function not found.])]) AC_CHECK_FUNC([wattr_set], [], [AC_MSG_ERROR([wattr_set() function not found.])]) AC_CHECK_FUNC([wbkgrndset], [], [AC_MSG_ERROR([wbkgrndset() function not found.])]) AC_CHECK_FUNC([wborder], [], [AC_MSG_ERROR([wborder() function not found.])]) AC_CHECK_FUNC([wclrtoeol], [], [AC_MSG_ERROR([wclrtoeol() function not found.])]) AC_CHECK_FUNC([werase], [], [AC_MSG_ERROR([werase() function not found.])]) AC_CHECK_FUNC([wget_wch], [], [AC_MSG_ERROR([wget_wch() function not found.])]) AC_CHECK_FUNC([wgetch], [], [AC_MSG_ERROR([wgetch() function not found.])]) AC_CHECK_FUNC([wmove], [], [AC_MSG_ERROR([wmove() function not found.])]) AC_CHECK_FUNC([wnoutrefresh], [], [AC_MSG_ERROR([wnoutrefresh() function not found.])]) AC_CHECK_FUNC([wprintw], [], [AC_MSG_ERROR([wprintw() function not found.])]) AC_CHECK_FUNC([wredrawln], [], [AC_MSG_ERROR([wredrawln() function not found.])]) AC_CHECK_FUNC([wrefresh], [], [AC_MSG_ERROR([wrefresh() function not found.])]) AC_CHECK_FUNC([wresize], [], [AC_MSG_ERROR([wresize() function not found.])]) AC_CHECK_FUNC([wtimeout], [], [AC_MSG_ERROR([wtimeout() function not found.])]) AC_CHECK_FUNC([wtouchln], [], [AC_MSG_ERROR([wtouchln() function not found.])]) dnl ---------------------------------------------------------------------------- dnl check for extended colors/pairs dnl ---------------------------------------------------------------------------- use_extended_colors=yes AC_CHECK_FUNC([extended_pair_content], [], [use_extended_colors=no], [[#include ]]) AC_CHECK_FUNC([pair_content], [], [use_extended_colors=no], [[#include ]]) if test "$use_extended_colors" = "yes"; then AC_DEFINE([HAVE_EXTENDED_COLORS], [1], [extended curses colors are present]) fi dnl ---------------------------------------------------------------------------- dnl check for inotify dnl ---------------------------------------------------------------------------- AC_CHECK_HEADER([sys/inotify.h], [use_inotify=yes], [use_inotify=no]) if test "$use_inotify" = "yes"; then AC_CHECK_DECL([IN_NONBLOCK], [], [use_inotify=no], [[#include ]]) AC_CHECK_DECL([IN_CLOEXEC], [], [use_inotify=no], [[#include ]]) AC_CHECK_DECL([IN_ATTRIB], [], [use_inotify=no], [[#include ]]) AC_CHECK_DECL([IN_MODIFY], [], [use_inotify=no], [[#include ]]) AC_CHECK_DECL([IN_CREATE], [], [use_inotify=no], [[#include ]]) AC_CHECK_DECL([IN_DELETE], [], [use_inotify=no], [[#include ]]) AC_CHECK_DECL([IN_MOVED_FROM], [], [use_inotify=no], [[#include ]]) AC_CHECK_DECL([IN_MOVED_TO], [], [use_inotify=no], [[#include ]]) AC_CHECK_DECL([IN_EXCL_UNLINK], [], [use_inotify=no], [[#include ]]) AC_CHECK_DECL([IN_CLOSE_WRITE], [], [use_inotify=no], [[#include ]]) AC_CHECK_DECL([IN_Q_OVERFLOW], [], [use_inotify=no], [[#include ]]) AC_CHECK_FUNC([inotify_init1], [], [use_inotify=no]) AC_CHECK_FUNC([inotify_add_watch], [], [use_inotify=no]) AC_CHECK_TYPE([struct inotify_event], [], [use_inotify=no], [[#include ]]) if test "$use_inotify" = "yes"; then AC_DEFINE([HAVE_INOTIFY], [1], [inotify is available]) fi fi dnl ---------------------------------------------------------------------------- dnl check for extended file attributes dnl ---------------------------------------------------------------------------- AC_CHECK_HEADER([sys/xattr.h], [use_xattrs=yes], [use_xattrs=no]) if test "$use_xattrs" = "yes"; then AC_CHECK_FUNC([lgetxattr], [], [use_xattrs=no], [[ #include #include ]]) AC_CHECK_FUNC([llistxattr], [], [use_xattrs=no], [[ #include #include ]]) AC_CHECK_FUNC([lsetxattr], [], [use_xattrs=no], [[ #include #include ]]) AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include #include int main() { return XATTR_CREATE; } ]])], [], [use_xattrs="no"]) if test "$use_xattrs" = "yes"; then AC_DEFINE([HAVE_XATTRS], [1], [extended file attributes are available]) fi fi dnl ---------------------------------------------------------------------------- dnl check for gnu coreutils version dnl ---------------------------------------------------------------------------- version="$(mv --version 2> /dev/null | sed -ne 's/^.*(GNU coreutils) //p')" major="${version%.*}" minor="${version#*.}" if test "x$major" != "x" -a "x$minor" != "x" ; then if test $major -eq 7 -a $minor -ge 1 -o $major -gt 7; then AC_DEFINE([SUPPORT_NO_CLOBBER], [1], [-n option is available for cp and mv]) fi if test $major -eq 7 -a $minor -ge 6 -o $major -gt 7; then AC_DEFINE([SUPPORT_REFLINK_AUTO], [1], [--reflink=auto option is available for cp]) fi fi dnl ---------------------------------------------------------------------------- dnl checks for external libraries dnl ---------------------------------------------------------------------------- AC_ARG_WITH(glib, AS_HELP_STRING([--with-glib], [use GLib2 to determine mimetypes if available @<:@default=yes@:>@]), [use_glib=$withval], [use_glib=yes]) dnl for backward compatibility AC_ARG_WITH(gtk, AS_HELP_STRING([--with-gtk], [(obsolete name of --with-glib) use GLib2 to determine mimetypes if available @<:@default=yes@:>@]), [use_gtk=$withval], [use_gtk=use_glib]) if test "x$use_gtk" != "xuse_glib"; then AC_MSG_WARN(["--with(out)-gtk flag is obsolete, please use --with(out)-glib instead"]) use_glib=$use_gtk fi AC_ARG_WITH(libmagic, AS_HELP_STRING([--with-libmagic], [use libmagic to determine mimetypes if available @<:@default=yes@:>@]), [use_libmagic=$withval], [use_libmagic=yes]) AC_ARG_WITH(X11, AS_HELP_STRING([--with-X11], [use libX11 to determine terminal emulator title @<:@default=yes@:>@]), [use_libX11=$withval], [use_libX11=yes]) AC_ARG_WITH(dyn-X11, AS_HELP_STRING([--with-dyn-X11], [load libX11 dynamically @<:@default=yes@:>@]), [use_dyn_libX11=$withval], [use_dyn_libX11=yes]) dnl ---------------------------------------------------------------------------- dnl checks for mimetype detection dnl ---------------------------------------------------------------------------- if test "$use_glib" = "yes"; then if test "x$(which pkg-config)" != "x"; then if pkg-config --exists glib-2.0 gio-2.0; then CFLAGS="$CFLAGS $(pkg-config --cflags glib-2.0 gio-2.0)" LIBS="$LIBS $(pkg-config --libs glib-2.0 gio-2.0)" AC_CHECK_HEADER([gio/gio.h], [], [AC_MSG_ERROR([gio/gio.h header not found.])], [[#include ]]) AC_CHECK_HEADER([glib.h], [], [AC_MSG_ERROR([glib.h header not found.])], [[#include ]]) AC_CHECK_FUNC([g_file_info_get_content_type], [], [AC_MSG_ERROR([g_file_info_get_content_type() function not found.])]) AC_CHECK_FUNC([g_file_new_for_path], [], [AC_MSG_ERROR([g_file_new_for_path() function not found.])]) AC_CHECK_FUNC([g_file_query_info], [], [AC_MSG_ERROR([g_file_query_info() function not found.])]) AC_CHECK_FUNC([g_object_unref], [], [AC_MSG_ERROR([g_object_unref() function not found.])]) AC_DEFINE([HAVE_GLIB], [1], [use glib2 to determine mime type]) else AC_MSG_WARN(["Could not find glib-2.0/gio-2.0 via pkg-config. No GLib support."]) fi else AC_MSG_WARN(["Could not find pkg-config. No GLib support."]) fi fi if test "$use_libmagic" = "yes"; then AC_CHECK_LIB(magic, magic_open, [LIBS="$LIBS -lmagic" AC_CHECK_FUNC([magic_close], [], [AC_MSG_ERROR([magic_close() function not found.])]) AC_CHECK_FUNC([magic_file], [], [AC_MSG_ERROR([magic_file() function not found.])]) AC_CHECK_FUNC([magic_load], [], [AC_MSG_ERROR([magic_load() function not found.])]) AC_CHECK_FUNC([magic_open], [], [AC_MSG_ERROR([magic_open() function not found.])]) AC_CHECK_HEADER([magic.h], [], [AC_MSG_ERROR([magic.h header not found.])]) AC_CHECK_DECLS([MAGIC_MIME_TYPE], [], [], [[#include ]]) AC_DEFINE([HAVE_LIBMAGIC], [1], [Define to 1 if you have the `magic' library (-lmagic).])]) fi dnl ---------------------------------------------------------------------------- dnl handle options dnl ---------------------------------------------------------------------------- AC_ARG_ENABLE(extended_keys, AS_HELP_STRING( [--disable-extended-keys], [disable extended keys (like arrows, home etc.). Without it will be no delay after pressing escape @<:@default=enabled@:>@ ]), [extended_keys=$enableval], [extended_keys=yes]) AC_ARG_ENABLE(desktop_files, AS_HELP_STRING( [--disable-desktop-files], [disable parsing of *.desktop files found on your system to get a list of programs associated with filetypes @<:@default=enabled@:>@ ]), [desktop_files=$enableval], [desktop_files=yes]) AC_ARG_ENABLE(remote_cmds, AS_HELP_STRING( [--enable-remote-cmds], [enable remote command sending. @<:@default=enabled@:>@ ]), [remote_cmds=$enableval], [remote_cmds=yes]) AC_ARG_ENABLE(developer, AS_HELP_STRING( [--enable-developer], [enables features of interest to developers @<:@default=disabled@:>@ ]), [developer=$enableval], [developer=no]) AC_ARG_ENABLE(werror, AS_HELP_STRING( [--enable-werror], [pass -Werror flag to compiler @<:@default=disabled@:>@ ]), [werror=$enableval], [werror=no]) AC_ARG_ENABLE(coverage, AS_HELP_STRING( [--enable-coverage], [enables coverage information generation @<:@default=disabled@:>@ ]), [coverage=$enableval], [coverage=no]) AC_ARG_ENABLE(build-timestamp, AS_HELP_STRING( [--disable-build-timestamp], [disables embedding build-timestamp information into executable @<:@default=enabled@:>@ ]), [build_timestamp=$enableval], [build_timestamp=yes]) AC_ARG_WITH(sanitize, AS_HELP_STRING( [--with-sanitize=basic|thread|leak], [enables sanitizers, "basic" means address and undefined sanitizers @<:@default=@:>@ ]), [sanitize=$withval]) if test "$extended_keys" = "yes"; then AC_DEFINE([ENABLE_EXTENDED_KEYS], [1], [enables extended keys (arrows etc.)]) fi if test "$desktop_files" = "yes"; then AC_DEFINE([ENABLE_DESKTOP_FILES], [1], [parsing of .desktop files]) fi if test "$remote_cmds" = "yes"; then AC_DEFINE([ENABLE_REMOTE_CMDS], [1], [executing commands remotely]) fi if test "$use_dyn_libX11" = "yes"; then ORIG_LIBS="$LIBS" AC_CHECK_LIB(dl, dlopen, [ use_dyn_libX11=yes LIBS="$LIBS -ldl" ], [use_dyn_libX11=no]) AC_CHECK_HEADER([dlfcn.h], [], [use_dyn_libX11=no]) AC_CHECK_FUNC([dlsym], [], [use_dyn_libX11=no]) AC_CHECK_FUNC([dlclose], [], [use_dyn_libX11=no]) if test "$use_dyn_libX11" != "yes"; then LIBS="$ORIG_LIBS" AC_MSG_WARN(["libdl seems to don't work as expected. No dynamic X11."]) fi fi if test "$use_libX11" = "yes"; then AC_CHECK_LIB(X11, XOpenDisplay, [ AC_CHECK_HEADER([X11/Xlib.h], [], [AC_MSG_ERROR([X11/Xlib.h header not found.])]) AC_CHECK_HEADER([X11/Xutil.h], [], [AC_MSG_ERROR([X11/Xutil.h header not found.])]) AC_DEFINE([HAVE_X11], [1], [use X11 to determine terminal emulator title]) if test "$use_dyn_libX11" = "yes"; then AC_DEFINE([DYN_X11], [1], [load libX11 dynamically]) else LIBS="$LIBS -lX11" fi ]) fi WERROR_TUNING="-Wno-error=deprecated-declarations -Werror=sign-compare -Wno-unused-parameter" if test "$developer" = "yes"; then CFLAGS="$CFLAGS -g -O0 -Werror $WERROR_TUNING" TESTS_CFLAGS="$TESTS_CFLAGS -Werror $WERROR_TUNING" fi if test "$werror" = "yes"; then CFLAGS="$CFLAGS -Werror $WERROR_TUNING" TESTS_CFLAGS="$TESTS_CFLAGS -Werror $WERROR_TUNING" fi if test "$coverage" = "yes"; then CFLAGS="$CFLAGS -O0 --coverage" LDFLAGS="$LDFLAGS --coverage" fi if test "$build_timestamp" = "yes"; then AC_DEFINE([WITH_BUILD_TIMESTAMP], [1], [Define to 1 to embed compilation date into executable.]) fi dnl Handle sanitizers options if test -n "$sanitize" -a "$sanitize" != "basic" -a "$sanitize" != "thread" -a \ "$sanitize" != "leak"; then AC_MSG_ERROR([Unknown type of sanitizing: $sanitize]) fi if test "$sanitize" = "basic"; then SANITIZERS_CFLAGS="-fsanitize=address -fsanitize=undefined" fi if test "$sanitize" = "thread"; then SANITIZERS_CFLAGS="-fsanitize=thread -fPIC" LDFLAGS="$LDFLAGS -pie" fi if test "$sanitize" = "leak"; then LDFLAGS="$LDFLAGS -fsanitize=leak" fi dnl The flags should be available separately for fetching on building tests. AC_SUBST([SANITIZERS_CFLAGS]) CFLAGS="$CFLAGS $SANITIZERS_CFLAGS" LDFLAGS="$LDFLAGS $SANITIZERS_CFLAGS" dnl Include config.h in all translation units implicitly CFLAGS="$CFLAGS -include ../build-aux/config.h" AC_CONFIG_FILES([ Makefile src/Makefile ]) AC_OUTPUT vifm-0.14/data/000077500000000000000000000000001475151500600133145ustar00rootroot00000000000000vifm-0.14/data/colors/000077500000000000000000000000001475151500600146155ustar00rootroot00000000000000vifm-0.14/data/colors/Default-256.vifm000066400000000000000000000130021475151500600173720ustar00rootroot00000000000000" vim: filetype=vifm : " This is Vifm's default color scheme for terminals that support 256 colors. " " This file last updated: 6 September, 2024 highlight clear hi Win cterm=none ctermfg=white ctermbg=232 hi OtherWin cterm=none ctermfg=default ctermbg=default hi AuxWin cterm=none ctermfg=default ctermbg=233 hi OddLine ctermfg=default ctermbg=default hi TopLine cterm=none ctermfg=black ctermbg=white hi TopLineSel cterm=bold ctermfg=16 ctermbg=default hi TabLine cterm=none ctermfg=white ctermbg=black hi TabLineSel cterm=bold,reverse ctermfg=default ctermbg=default hi JobLine cterm=bold ctermfg=white ctermbg=238 hi StatusLine cterm=none ctermfg=black ctermbg=white hi Border cterm=none ctermfg=white ctermbg=232 hi CurrLine cterm=bold,reverse ctermfg=default ctermbg=default hi OtherLine cterm=reverse ctermfg=234 ctermbg=white hi LineNr ctermfg=default ctermbg=default hi Selected cterm=bold ctermfg=213 ctermbg=default hi CmpMismatch cterm=bold ctermfg=white ctermbg=88 hi CmpUnmatched cterm=bold ctermfg=white ctermbg=28 hi CmpBlank ctermfg=default ctermbg=default hi SuggestBox cterm=bold,reverse ctermfg=cyan ctermbg=232 hi WildMenu cterm=underline,bold,reverse ctermfg=yellow ctermbg=black hi CmdLine cterm=bold ctermfg=white ctermbg=232 hi ErrorMsg cterm=bold ctermfg=white ctermbg=red hi Directory cterm=bold ctermfg=123 ctermbg=default hi Executable cterm=bold ctermfg=119 ctermbg=default hi Socket cterm=bold,reverse ctermfg=182 ctermbg=default hi Device cterm=bold,reverse ctermfg=204 ctermbg=default hi Fifo cterm=bold,reverse ctermfg=50 ctermbg=default hi Link cterm=bold ctermfg=229 ctermbg=default hi BrokenLink cterm=bold ctermfg=209 ctermbg=default hi HardLink cterm=bold ctermfg=221 ctermbg=default " for powerline-like look of statusline highlight User1 ctermbg=white highlight User2 ctermbg=240 ctermfg=231 cterm=bold highlight User3 ctermbg=240 ctermfg=white highlight User4 ctermbg=white ctermfg=240 " build system files highlight {Makefile,Makefile.am,Makefile.in,Makefile.win,*.mak,*.mk,*.m4,*.ac, \configure,CMakeLists.txt,*.cmake,*.pro,*.pri,*.sln,meson.build, \meson_options.txt} \ cterm=none ctermfg=121 ctermbg=default " archives highlight {*.7z,*.ace,*.arj,*.bz2,*.cpio,*.deb,*.dz,*.gz,*.jar,*.lzh,*.lzma, \*.rar,*.rpm,*.rz,*.tar,*.taz,*.tb2,*.tbz,*.tbz2,*.tgz,*.tlz,*.trz, \*.txz,*.tz,*.tz2,*.tzst,*.xz,*.z,*.zip,*.zoo,*.apk,*.gzip,*.lz, \*.zstd} \ cterm=none ctermfg=215 ctermbg=default " configuration and other readable textual formats highlight {*.css,*.less,*.scss,*.markdown,*.md,*.mkd,*.org,*.pandoc,*.pdc,*.tex, \*.txt,*.xml,*.log,*.rss,*.xul,*.json,*.yaml,*.yml,*.csv,*.plist, \*.ini,*.cfg,*.rc,*.conf,*.spec,*.qrc,*.description,*.list,*.log.old, \*.log.1,*.log.2,*.log.3,*.log.4,*.log.5,*.log.6,*.log.7,*.log.8, \syslog,syslog.1,*.xsd,*.toml,*.rst} \ cterm=none ctermfg=217 ctermbg=default " still text files, but keeping this unoptimizable glob separately highlight {*[^0-9].[1-9]} \ cterm=none ctermfg=217 ctermbg=default " documents and text-based formats that need special handling highlight {*.doc,*.docx,*.xls,*.xlsm,*.xlsx,*.mobi,*.rtf,*.ppt,*.pptx,*.pdf, \*.epub,*.fb2,*.djvu,*.djv,*.htm,*.html,*.shtml,*.xhtml,*.desktop, \*.odg,*.odt,*.ods} \ cterm=none ctermfg=218 ctermbg=default " audio highlight {*.aac,*.ac3,*.anx,*.ape,*.asf,*.au,*.axa,*.cue,*.flac,*.m2a,*.m4a, \*.mid,*.midi,*.mka,*.mp3,*.mpc,*.mpga,*.oga,*.ogg,*.ogx,*.ra,*.ram, \*.spx,*.wav,*.wma} \ cterm=none ctermfg=79 ctermbg=default " multimedia highlight {*.avi,*.axv,*.divx,*.flv,*.m2v,*.m4v,*.mp4,*.m4p,*.mp4v,*.mpeg,*.mpg, \*.mkv,*.mov,*.nuv,*.ogv,*.qt,*.rm,*.ts,*.vob,*.webm,*.wmv,*.xvid, \*.unknown_video} \ cterm=none ctermfg=49 ctermbg=default " images highlight {*.bmp,*.gif,*.jpeg,*.jpg,*.ico,*.png,*.ppm,*.svg,*.svgz,*.tga,*.tif, \*.tiff,*.xbm,*.xcf,*.xpm,*.xspf,*.xwd,*.ai,*.pbm,*.pgm,*.webp} \ cterm=none ctermfg=117 ctermbg=default " executables highlight {*.sh,*.bash,*.zsh,*.bat,*.btm,*.cmd,*.com,*.dll,*.exe,*.run,*.msu, \*.msi,*.fish,*.AppImage} \ cterm=none ctermfg=77 ctermbg=default " source code highlight {*.patch,*.diff,*.py,*.cpp,*.hpp,*.c,*.h,*.cpp,*.hpp,*.cc,*.hh,*.ld, \*.hs,*.php,*.lua,*.vim,*.vifm,*.asm,*.s,*.java,*.cxx,*.c++,*.go, \*.pl,*.pm,*.t,*.cs,*.asp,*.dart,*.js,*.rb,*.scala,*.ts,*.coffee, \*.ml,*.mli,*.rs,*.sql,*.qml,vifmrc,vimrc,.vimrc,*.flex,*.ypp,*.S, \*.robot} \ cterm=none ctermfg=193 ctermbg=default " software documentation highlight {COPYRIGHT,COPYING*,BUGS,ChangeLog*,FAQ,INSTALL*,LICENCE,LICENSE,NEWS, \README,README.*,AUTHORS,TODO,THANKS} \ cterm=none ctermfg=187 ctermbg=default vifm-0.14/data/colors/astrell-root.vifm000066400000000000000000000024211475151500600201260ustar00rootroot00000000000000" vim: filetype=vifm : highlight clear highlight Border cterm=none ctermfg=black ctermbg=131 highlight TopLine cterm=none ctermfg=black ctermbg=white highlight TopLineSel cterm=bold ctermfg=default ctermbg=default highlight StatusLine cterm=none ctermfg=black ctermbg=white highlight WildMenu cterm=none ctermfg=default ctermbg=153 highlight CmdLine cterm=none ctermfg=white ctermbg=black highlight ErrorMsg cterm=none ctermfg=red ctermbg=default highlight Win cterm=none ctermfg=0 ctermbg=182 highlight Directory cterm=bold ctermfg=17 ctermbg=default highlight Link cterm=none ctermfg=94 ctermbg=default highlight BrokenLink cterm=bold ctermfg=160 ctermbg=default highlight Socket cterm=bold ctermfg=91 ctermbg=default highlight Device cterm=bold ctermfg=52 ctermbg=default highlight Fifo cterm=bold ctermfg=105 ctermbg=default highlight Executable cterm=bold ctermfg=23 ctermbg=default highlight Selected cterm=bold ctermfg=default ctermbg=217 highlight CurrLine cterm=bold ctermfg=238 ctermbg=153 highlight OtherLine cterm=default ctermfg=default ctermbg=default vifm-0.14/data/colors/astrell-user.vifm000066400000000000000000000024211475151500600201210ustar00rootroot00000000000000" vim: filetype=vifm : highlight clear highlight Border cterm=none ctermfg=black ctermbg=131 highlight TopLine cterm=none ctermfg=black ctermbg=white highlight TopLineSel cterm=bold ctermfg=default ctermbg=default highlight StatusLine cterm=none ctermfg=black ctermbg=white highlight WildMenu cterm=none ctermfg=default ctermbg=153 highlight CmdLine cterm=none ctermfg=white ctermbg=black highlight ErrorMsg cterm=none ctermfg=red ctermbg=default highlight Win cterm=none ctermfg=0 ctermbg=224 highlight Directory cterm=bold ctermfg=17 ctermbg=default highlight Link cterm=none ctermfg=94 ctermbg=default highlight BrokenLink cterm=bold ctermfg=160 ctermbg=default highlight Socket cterm=bold ctermfg=91 ctermbg=default highlight Device cterm=bold ctermfg=52 ctermbg=default highlight Fifo cterm=bold ctermfg=105 ctermbg=default highlight Executable cterm=bold ctermfg=23 ctermbg=default highlight Selected cterm=bold ctermfg=default ctermbg=182 highlight CurrLine cterm=bold ctermfg=238 ctermbg=153 highlight OtherLine cterm=default ctermfg=default ctermbg=default vifm-0.14/data/colors/dmilith-root.vifm000066400000000000000000000020201475151500600201050ustar00rootroot00000000000000" vim: filetype=vifm : " Author: Daniel Dettlaff (a.k.a. dmilith) highlight Win cterm=none ctermfg=white ctermbg=black highlight Directory cterm=bold ctermfg=cyan ctermbg=black highlight Link cterm=bold ctermfg=yellow ctermbg=black highlight BrokenLink cterm=bold ctermfg=red ctermbg=none highlight Socket cterm=bold ctermfg=magenta ctermbg=black highlight Device cterm=bold ctermfg=red ctermbg=black highlight Fifo cterm=bold ctermfg=cyan ctermbg=none highlight Executable cterm=bold ctermfg=green ctermbg=black highlight Selected cterm=bold ctermfg=magenta ctermbg=black highlight CurrLine cterm=bold ctermfg=white ctermbg=30 highlight TopLine cterm=bold ctermfg=white ctermbg=red highlight TopLineSel cterm=bold ctermfg=yellow ctermbg=red highlight StatusLine cterm=bold ctermfg=white ctermbg=red highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black highlight CmdLine cterm=none ctermfg=white ctermbg=black highlight ErrorMsg cterm=none ctermfg=red ctermbg=black highlight Border cterm=none ctermfg=black ctermbg=red vifm-0.14/data/colors/dmilith-user.vifm000066400000000000000000000020241475151500600201040ustar00rootroot00000000000000" vim: filetype=vifm : " Author: Daniel Dettlaff (a.k.a. dmilith) highlight Win cterm=none ctermfg=white ctermbg=black highlight Directory cterm=bold ctermfg=cyan ctermbg=black highlight Link cterm=bold ctermfg=yellow ctermbg=black highlight BrokenLink cterm=bold ctermfg=red ctermbg=none highlight Socket cterm=bold ctermfg=magenta ctermbg=black highlight Device cterm=bold ctermfg=red ctermbg=black highlight Fifo cterm=bold ctermfg=cyan ctermbg=none highlight Executable cterm=bold ctermfg=green ctermbg=black highlight Selected cterm=bold ctermfg=magenta ctermbg=black highlight CurrLine cterm=bold ctermfg=white ctermbg=30 highlight TopLine cterm=bold ctermfg=white ctermbg=blue highlight TopLineSel cterm=bold ctermfg=yellow ctermbg=blue highlight StatusLine cterm=bold ctermfg=white ctermbg=blue highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black highlight CmdLine cterm=none ctermfg=white ctermbg=black highlight ErrorMsg cterm=none ctermfg=red ctermbg=black highlight Border cterm=none ctermfg=black ctermbg=blue vifm-0.14/data/colors/istib-solarized-dark.vifm000066400000000000000000000023061475151500600215240ustar00rootroot00000000000000" vim: filetype=vifm : " Author: Stéphane (a.k.a. istib) highlight Win cterm=none ctermfg=default ctermbg=none highlight TopLine cterm=none ctermfg=blue ctermbg=none highlight TopLineSel cterm=none ctermfg=blue ctermbg=none highlight StatusLine cterm=none ctermfg=blue ctermbg=none highlight Border cterm=none ctermfg=blue ctermbg=none highlight Selected cterm=bold ctermfg=magenta ctermbg=default highlight CurrLine cterm=bold ctermfg=default ctermbg=blue highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black highlight CmdLine cterm=none ctermfg=white ctermbg=black highlight ErrorMsg cterm=none ctermfg=red ctermbg=black highlight Directory cterm=none ctermfg=cyan ctermbg=default highlight Link cterm=none ctermfg=yellow ctermbg=default highlight BrokenLink cterm=none ctermfg=red ctermbg=default highlight Socket cterm=none ctermfg=magenta ctermbg=default highlight Device cterm=none ctermfg=red ctermbg=default highlight Fifo cterm=none ctermfg=cyan ctermbg=default highlight Executable cterm=none ctermfg=green ctermbg=default vifm-0.14/data/colors/juef-zenburn.vifm000066400000000000000000000021151475151500600201110ustar00rootroot00000000000000" vim: filetype=vifm : " Author: Svyatoslav Mishyn (a.k.a. juef) " zenburn like color scheme for vifm " http://slinky.imukuppi.org/zenburnpage/ highlight Border cterm=none ctermfg=default ctermbg=235 highlight Win cterm=none ctermfg=188 ctermbg=237 highlight Directory cterm=none ctermfg=108 ctermbg=default highlight CurrLine cterm=none ctermfg=223 ctermbg=235 highlight Selected cterm=none ctermfg=116 ctermbg=238 highlight StatusLine cterm=bold ctermfg=144 ctermbg=235 highlight ErrorMsg cterm=bold ctermfg=115 ctermbg=default highlight WildMenu cterm=bold,reverse ctermfg=144 ctermbg=235 highlight CmdLine cterm=none ctermfg=188 ctermbg=237 highlight TopLine cterm=none ctermfg=108 ctermbg=235 highlight TopLineSel cterm=bold ctermfg=186 ctermbg=236 highlight Executable cterm=none ctermfg=172 ctermbg=default highlight Link cterm=none ctermfg=142 ctermbg=default highlight BrokenLink cterm=none ctermfg=174 ctermbg=default highlight Device cterm=none ctermfg=228 ctermbg=default highlight Fifo cterm=none ctermfg=109 ctermbg=default highlight Socket cterm=none ctermfg=13 ctermbg=default vifm-0.14/data/colors/reicheltd-light.vifm000066400000000000000000000017731475151500600205600ustar00rootroot00000000000000" vim: filetype=vifm : " Author: Daniel R. (a.k.a. reicheltd) highlight Win cterm=none ctermfg=236 ctermbg=255 highlight Directory cterm=bold ctermfg=21 ctermbg=255 highlight Link cterm=bold ctermfg=39 ctermbg=default highlight BrokenLink cterm=bold ctermfg=red ctermbg=default highlight Socket cterm=bold ctermfg=magenta ctermbg=default highlight Device cterm=bold ctermfg=blue ctermbg=default highlight Fifo cterm=bold ctermfg=cyan ctermbg=default highlight Executable cterm=bold ctermfg=red ctermbg=default highlight Selected cterm=bold ctermfg=200 ctermbg=default highlight CurrLine cterm=bold ctermfg=255 ctermbg=27 highlight TopLine cterm=none ctermfg=236 ctermbg=255 highlight TopLineSel cterm=bold ctermfg=236 ctermbg=255 highlight StatusLine cterm=bold ctermfg=236 ctermbg=255 highlight WildMenu cterm=underline,reverse ctermfg=236 ctermbg=255 highlight CmdLine cterm=none ctermfg=236 ctermbg=255 highlight ErrorMsg cterm=none ctermfg=red ctermbg=236 highlight Border cterm=none ctermfg=236 ctermbg=255 vifm-0.14/data/graphics/000077500000000000000000000000001475151500600151145ustar00rootroot00000000000000vifm-0.14/data/graphics/screenshot.png000066400000000000000000002410411475151500600200010ustar00rootroot00000000000000PNG  IHDRlR\bKGD pHYs  tIME IDATx{\gߡT0ۣL%Cf#,ÆrikBY1:j{ $CkX)f9k6~{uݧz^|{}|Iа@ @ 9"@ IDi@ AK.=l:tCur*M zyƍ:TѣG7n\<=wsϻ|_)˿*x@lN8#`ҤI?VX9smY CϺU>7nܨ6U%W "`*UClܸ{{{,,,Ɋʊ1cp]9]Ur]y&ӧOϏ~6mL ѣ߿ʧC,_KKK}]~79{8q"*'N޽{r#G0|ptB߾}5nn.DFFV?&""}beeELLFrAAQwҒ˗WQU ŋ8< (}UOS٧TUW]_UO:8KMYׯ{\\ݻww:tHWu5@ ZV iuoKR)۶m~ 55U{TT3p@.]*J+L<'''6m)))Ϥ{;m?bmmMDDO?k׮?~ -[&'% ϳm6Snñο/N8ۑJUVUrAAQXl<|-H8|8pWuO깧TUW]_U釆Cqq1111|'ɟ:8z(saɒ%I6uY|9 ~ONN& <<}C=tzt-SSS9p2̙3e΅24hʢ}ZJa`jjW%KK/ѪU+,X\PZ:UFU8pWСCJUGO*Ν;3rHL;CΝ5bbbرcrF[?@ [N~ԩVVVh$ו7oҡCꫯ1c%%%j뗖?Btt4U9NamUVlٲʐ\UVU9s nnnX[[ˆ7Zn-K2nݪ։S%.~MiZ9qAPuTt޿‘#GpqqJ^2wƍhtS Mi,QZZЙ++]v߿cccɓjXرC1ֶ|ʃmےC-d-Zݻ's^ʱ9|03gMlْwҾ}{{ڵkǯN.]trOmbbVUG<ԩʞ޿ꤿfƎիYzr].̙3;wN#_]to_ضW@ ԙ?d„ OII =*[oqƑɺujt?%]^{Ջ ϟ/'ݻ7.\ ((HN>rHyWYnk֬(ҥK ccc6l('ٳ'...888`ff\PQU?ϟOFFzH=h =z!VPGW*0fΜIFx,ڡJjKUrU&22~+h\U:׿)BYRސMu۷6lgwߥI&5q1g6uY^M򟛛ː!C8y^u5g}ctµk@ktYio@Pŗ ؒXrU(@ 4 ^tD8!Uh>3^}U6l@ŅP`۶m./@)yk3<玦#ȽW @ @ [VVyoЈ> i[SM!qiC#hԸ1O?Jj*/d3O,P"AA}c$ʂ5fM_Ǝ#qZ6h? o X`NԩSi`e'N$""B=5eJr2#ׯ>cĚ5LJѯE{7/K$LD͛7kPhU3gΨ,OTkk}u϶mȑ#hdQ}AڰjGHV 8b7tlڝt d"SMU pssޞ#G4i_}i H)-}[Y[}7j]xUoנ`RD:*ronpp0?V۾*DU_UՋUVJZZsNrhמ8S$ <Śoj{N^!aK_c m>Xu¦38U/]8Uw~8'hSKDZ/LέNH6}LX3x!yVX&**J70ѣG3k,JJjopgGG89 aF>}oҾ=))̿sQ6T}Xls^e/l ?qNefM&kckkBso 8?Ç6j¼,PZZʵ?Q1Θٳg PxLVV3f -- <==HIIRX}}}?N˖-a„ L4hC]_`urk}633Ņ-[}Vk8{2q/卷쿺T{, )h|wDG$`,8Ot6cPG/{N`*F å_`;]1#6.فRWъ!,,,Ȑ}B#oѣZ;›7ɻrʧaJu,YK Nr(1 ~~HÑ._?? ccypkmm| ^9X Fر,kݚ$__0/9Tig@ Ж@Ο?Jspp DD"899? ŋFFFdt"PW&sA*rqJ}sOjk~u=tՋ-ZpQN:ڵkiѢ;`5=rN=.'.]osG?^VϪ$ $iD'>ΖD+ZhҤ RPPbeeu>t#lۗ'L y*cc,DW  s2m"*gQ[~~޹s)uG&7x$tsw321yrtD@ i$^]… _eԩO2fkILUﲿ^;I%?&U{#~{{4oiqy9eSSS4MHH>'v0vfKڥSK =?⼼d~5kiӸ} ==y"x7o͎^IܱxXP̥_ųXqZ WQW_[>~Kv̞5%B |2666ݻw粆K߽{޼7S2/,@RkzhaԼ4͚PZyV_fS߾Dvm[e]ς\̟*wLII R___RSS ɓ>}fCBB|FڢGDFFvv,gÿiڶ-MZdxdL@޽+e\wM < R)0}t8@VM6$''ɭeܹn_W*=!CPPP@zzc)5貊dM.[:={9͚5#00p r0K}c)efLm&4f3q+P?Ac}Upm=+ |ז_/en=_fVQK?..'ODRRk|Fxx8~y׮tuvV*g1u`CCiۣ i[?ڵrKcڱ#ef2#-; [N߸!K0mCc|3mL.z"** 9BqsR)yyyCΟ?hJJJa޼y5nNϠ}V_xyyi*Du.gٿ? =CCRmN&#[Mij0qp7%oyp3㫬\)ji&6@ uzӶ9ܹB\, @ /Q t`mSA@ @ zjW{tƼm*+[xC @ ^Ȁ6D}#g8܎nA-ѴMAƍy1WRSqߐ?12,Vԕ%~PoVT5hϦCk,^_,l۶L9FrU@E&NHDD=k)Ɍ\?k0]*EIqe/>yfVA|M+?gΨy X`NԩS]WߩS'bbbdGGGӱcG2۷?s.]Jfstt?ΝS(׵~(*m+ݙ0sx,zbժU| 0Ԗk j72)*omԼ9vᖘ[b" 8JP@ /i߾N6E\݆͛7>pssޞ#G2j(ϤIj̾\L$ sαrJO2ӻwoy!i-P\GTmj~(ګ JKK}6&mj}n5*-l:;sTqwéx.o[ӷh֣r, /)4JaKHo}Frn̜9sUrMGf֬Yvvt]6aatG&㞒;waCՇ>N˖1U N˖Ѡ6vR\K

C, mpVhlENJ._H._o6x V>g=ueư0\zWYE\zE=zSNvZZh\z-ѣGv7owJOƍ Y8*rǀ! G|9p3G&7>O?alxRR¾e}G-i+9w/s`bU٤?}f`Unj];UxWѻ&Xry066Vznnn$ 4/@hh(NXXաدM̙T*ZוՕrmu,,,Ȩ.gdd`aaQcU!JiӦ4mwww:={{{_V///N>𥄶#==L݋ 6(ύCdy7ނǩ=rӇ6N=_u/g.3zOź~/oh5YW/ت\XZZ2rH?~L`` !!!̚5K-:bhh'N*LgϦQ5o^En`lСȠM9+czzz 4Lr%=ܐ._Xx{Ml=FOz:(glۆ^UIfXR*mxe״C*e zD˜1c((( ::)S(X#6̹~rn|rrrr'22GGGMHH>OaLJqݵK6Oq^^Հi{~>Vix`ܷɮ}=ܿOG{{^H(u?(nWJӟ6 MLz.J>>$$$hڢGDFFv;wfɒ%UaUԻ9lrvr51QcݣO3s8Upm=ԬI?eq~܊^3+1lҘXLS#bH.Ѝ?`ߏ=-R[ ȑ#霪gy׮9`xw&Wp`2CC9jǨ kI0O>DL 6xkb۲c. ~>Tq`BYY))⴨(Jߙ3ɹx`H]^\Xz5G/*˓<rDGGSRRBLL cڴi5n.,犁DJ///{x饗HJJ`۶mט}U={6!!!a'O_mTBBvvvuV.\ '--F{ASSSYz5:u޽uidCаT͂,ȾӢuU001!5~޵oݕ̌o]:wGjX@ hDa{Uǟ\WU TAAȈ۶)6=lTXyX@ x<]_磏{t0j֌_eGq?[@ 61omєyD @ "`9l4bp`lZȃED/%*Tq<iC#hԸ1O?Jj*_5X~OD -G GZ%r^/KmE&/wc`?FV.GXr>GZ9'NΎyOW$'VJ T"ʁ[]e Űa  ͛H$Ϻ}V_4hЀ ƍ|rYk.:ubѢEǏZF2dtޝ*`hêF"M> Ĺ e;S('~Osv`?~-$ ~3ր*e5o]<~>yµ4e;I _ ^i߾N6Eտpssޞ#G4i_}UW+W&[ӓ+W2^2e ׯ'==|||dƌ2{x{{ӸqcONTTF{&VׄWo6n쯂,$Dk˪;y-mת]s6v[?:`aӉݙ䧊eT_]}u8Uݥum ?vmzS~A򅵼3e̡1/k=z –-[jPFͬY()!D'', cpXӆ8-[ƜW/8-[F}} qrRAw2).Sׄ޸Ap~>m(y{ M077'..g𘬬,f̘AZZxzzܱ?~-[Ä 4iW`166fv;b _Nvv6QQQԸnݺMaa!Э[7L¡C(**"??UV Fqq1lذ})A}{ݼv/Rxێ=MR0`HYpVhl(bW~m~{ ί~Ā=Nɿ}7z5}ZK e޽{aÆ5Z>.`5=rNeR'.]Y9^M^N3zOź/wmǝ,A7G&򰠘=itl'Z:'O /XYYiC:l߲} $Ϟ]c`lСh1k ;ܱ777sYCm}T|'v0vfKڥҀ7D` q2yqnL3gCgeaU5@)-ZUEN8AΝ1l H$ݻWDGbbFbҥDDDE]ku/011`阚R`Q1]'11^{ ;;;NϞ=#** T0𲳳c BU k_(Ovڅ?;vcǎs .퍩lم ֟:u*aaaxxxZEqF^{5iժ~~~9sF[kkkܹ3K,r՛es0c']ZmƤ߮!l|~'%OlO3s8Upm=ԬI?eq~܊^u4+_W%,,pFɟLݼkW2ERD&Ҩ>f">ֵQZZʝJ qt*.PjeMePQ@ GVk}:SlmX#PD&2kl$-۱vpssޞ#G2j(ϤIj̾\L$ sαr7.UaMAѹZ>*`k쯂,$Dk˪;y-mת]s6v[?:`aӉݙ䧊eT_]}uέG?X$_X;S;ƍY>ZmQa`݈YC<}sv!gժU888-פA=z4f͢wvt]6aatxvL!ń3j߾-c@_O?f MSCۛkטw 4%@[[\{x>LQʟM x077'..gUVV3f -- <==HIIRX}}}?N˖-a„ L4I~OC]_`u j}633Ņ-[;b _Nvv6QQQԘ}Ut֍h ),,$&&nݺ՘NZZa[gʿ^lܼv/Rxێ=MR0`HYpVǮbɿ}7z5xL{3o;ZQ92Ocg%,,, 00P+2|}}144ʊ'Nh7]&zɳgӨqcW606bPddPxR;??>Xo=]^0۹رxp;@O77JKKq8;&O8wM xH$32e.\(s$NZ<OaLJqݵK޽*v۷Y[[ǎjO?zOн{6gC5Ο]^y"x7o͎^Iܱ b.e .W+--EOOOk}eU'b̙aC㍶6D&mC !66 o߮\wedff=)7oԩ* T5dء/U@x۶|bd'FF5m*wL=5XtL {ѣY֪}lۗN8BӶmaFkInn.e#)k+SRRT*חT9y$O_ CBB<)}u`ѣr5>낞lq M|2666ݻwr{t}Caa!lڴ {{)kߒ*~So氝rFYu38k5y \rg1,yvY^N!ֽ2"aٽ061YK&a̘Z3SZ-F"xL:0<<s ]6wqiOqq1>&&ɹPQV~yGa!=&VꚐ@޽+OOynD@b"JĄӧkZjE||-^7ZmƤfG#0omF^N7|L4X5]lG}eq~7^Ni74lԀ]+|p .-u$$$ 155UKKXX?]YуgԩJ{Uš0Fbnv6c}'ww?}_ IDATɦJGq?;i߻w7ndȒ%̿}){}L}ѻ&DEEaccÑ#G(bHTJ^^o'::bbb7o^濾ۯS3h+) ,݉ɓ$%%Dzz:5f_UgϞMݑJטuV.\ٳgIJJyzjΞ=_| 344,զ`}P45kc8lgD-!ui&6@ )--΍\q%@ nx6 @ A ^ͪ~diq@ ʩ!DߠR#g8܎n sN+쵫'zϓmu5n̓ǏJn%@P{~@ 4/U5hϦQZZ=Ӏ2UXbk+I\8q"vvv̛7ڽqj)r‚?B@xY"a|1l( @ 'l޼DR|)/>|H=ԲߠA7n۶mc岼j_U;uĢEӧǏ'44ڍ+2d޽;yyy)///C~~~S6U_鎞 &{ƴ޸ HyT,ۨys\wKPaSFii)fT٤=UϭVUrSީ}.ߴAh֣r, /)4oب!>!|a-[묑\ѣG3k,JJJj-D'', cpXSD[[\{x>LQ?qNefMNR\LHq16l`r{5OrlFY~&jma͛_F/G&Xٳg PxLVV3f -- <==HIIRX}}}?N˖-a„ L4I~OC]_`ulff [lQ[waŊ\~lpj_ݺu#::B [njO2CQTTD~~>VA&www'--bٰa}3_/sg ~BbJv[̀w?rCʺJ_M +*}Ei’1lokx߰H}(zʌaa*@zz:ݻ6l\z-ѣGV7owJOƍŰaď˲֭I{g<<˃[XkkҀ_/XYYq C9B4jͫ :;޼YE͍gr<cWH̡Y̜W?&mTAYIQ漨|Ym$1s(6)YF*E=<=N\~=s_s]}}>ugZ۝o|1̡ v{yɬGE>={ҫW/ UY[n%<j.믩-/o` FzL5RnW3N;FzrNyޚ̜pg^z5-[TJYv-]vE[[333/^޽{WV^.\=VVVurߌϰKikiYm{p_fC\{A~>W<< /[avn͈rs֭5w.:FF~F zd022Ri2:D6mm۶U ,--3gXXXh]M)l9vs`͂oT.#U]"$ko}hҰB:fmT7?bhGԲ*?$%%j*:t@vv6wfڵu&_ aȑ<|:窶hչ3m Z|.w&[pBx1yYǎqODGCM㓌 ݺEeJ1%<---#n_ PEkKxx8VѣlٲE-/77WYy8ܹs(x, aI@2j R]`Mb @ 5:Z9)--ech9ſ)@ oۛΝ;'T|kmF?'ܽSHb<کXv{jWO^a۶tfxWȹ|A5ꨋ'X @ 4^T^͚5?O˭~VWm: cR`\el%#zj1o:9M&2d۶m~ѣ,Y-Zԙ|f'L@hhhb)ˤ{n~9vW㞜3ID?G 6mRyyn%/^Z^Ф ԩS:u  uׄR]k۾0`_~%ΝSK"yY6uֱdɒ:Aݍ}yżdžIcb2kv D9&Mbݺu[[[ݻG qj*_{{{$ u^9X^˖8څc|<81`?ŮoDL6@ h\Ҿ}騍˶M6~GGGȑ#5jgĉ_տe鹹+_yYjaL^lω'D&m9w q 楖2u>,L0ց++*n"*nrޛ4Pecs(~\ǛC{wÇ),,$//+WbccSgѣG3}tJJoـt:Cb>|8yOZZǜ?$ /#G2jT|8cDzI]]7XciƁy7e*};-ݧlZ3Z388X,]_ѻ&<_rylll000GGG$ C1tЊϐx"o ((WWWpqq!KP'f"994J@bb"J˘.y?i_ӧePDGG3uTSSUCv-ƍ$K̦ѡSN`bbҰK2Q,z ---CvJ:zA)ӱz- a݉#*]Sgr/hƹVYG'?DGW[2b֭\򞞞n_ec7m=9]nzvLL3vsa|23ff].nR8q?/I#JC_]?LLLaevZ}'N ;;;D"a߾}o~eXd =mԡ>2ƌCFF.]RI###166PO}W;vW^l۶ աH |||;vJu׸æhBJ?N\u SuuB:R!L#.Koųp/_jo2WQV^쉓ӲcS<*IӪo߉+a>Y~wXQR 2hٶm[߼y3ԾUuv8;3,@RWb#G`mMX$bخ".sOmݧ;VcXZkJNN*w&Ҧ7IIIrIrrr*"..iӦ_Y!/zAXXXSՎM5AKKK8\|nݺIwޝ˕B~i(U~~>6l_~jSF3D9.?"6rzgr"|cY>Vt}5q l?HɳFU2\Mz*bfЩ{u^HOYa +JRR|+… ʪNt)m--wqLs}wXIMMU>ٵk>>>bjj;wԘ)J]ӳgOiӦ 3f̐@^ɯ]]/r+a˹χ^Ӻ] &~n9''x%;lNq{>Ű~E>y_ޓ9f7*_ޑ*.k5a>4oiX!cnA{6dvu , ..^z_ aȑ<|VUt^|.w&[nx Y<~c8P./<~i$#{nlu/I1c㧟8?M3>9V&d_ /ZGe\gs%22ccߠZh;e+;juV^y՘m_0|uƝ;wHIIQT|RRVCdgg{n֮][.vx|: =ϾB*i,6@ ϾVF;Vן9 a@ Ps峯`RݼN@ /M @ ea3lۖvvЬ=JR9ڰz%x֨A '233^eP M._(7<,Tn2礲cPeאxU"y2|16mڄD"QAlL0^zWmlMP烸@ g_!^w=zPJ&MgܸqU"-[&{M+X`} --jgȐ!xzzҽ{wrssIJJ",,L}xxxЧO򪤫RYQV9^˖8ţN\MI!%<\J:5e`@I>cҾ}鰷G"׺X>9Uvx۷/#GDKKu1qDkWT+VnnnX+ҤI[Tttt",,)SHEFFIfpww'<<\95=?PfqP: ޯUݪ6C.eǬgҥ4V_|l\1z%QeKy_-7c+>:*9ׯs ]eEtz6100`޼yԨA=z4ӧOގEC[KKv]Fy`nvvm>Q?iժ[nٳ̞=[fLLBJJ 鸹pA:uT!6iiin(>C&N(3ޖ<Y34o{{{6oެ{˹vY IDATYYc/>UG"tBdd$E.]4iH$H$:СC+>ŋܾ} \]]Ņ`9,P888Hvv2椧Kcnn1HNNCCC qqqj۷/YYY2ӌ2_J#55 ۇ+M6QyY?e̙Ьz-[VI10|0JOu^dVdlMŊX9:l42m կ jDsqq<~嗫ށg]bkkˈ#퍮.8qB-5 _S#ёRLKcr-{-o n`A#H3f DFF2i$ϟ/5$<#&&T都={eeew^IHHkү E>^קhN+"00o3gpU>t\֭[zPf3ЩS'011!4n//ޏ2g2۝(s^hXZi~/XE:8Ѿwos%) e8 _ voݚ%G ɸaddse:t6mK۶mٻwot ,--3gXXXh]>wXIMMGk.|||055vܩ1pK]xj+3Ծ(ٳ'ڴiӆ3fpvZv튶6fff,^=ш֪sg-Y߽˙X;;S|?̞q޿_J)~ϜƱ5kxOyO9fZ˄Գ'㧟8`qfg3qN:nպϟG08(mRf%e!88UXIU]4|H]!37;I{u;&OVDG?u*Ʀ|@ w֭GHxJ?W!}ܹDFFRRRBTT~~~cϕ{d9jlݺ'O@BBjLϜ9ݻ_,--K+ xϟٳgIHHe˖*&%%j*Ξ=˖-[p!!!;?Z.r7kޜܻyjhI @ @  /SYʕt}ɪyba @ 6]ʔ~BE .Ǐs戓"@ Ԣ hժEG@ @ [5 ._]Cp Ћoe:K^U!a۶tfxWȩ@ ώF3$R?ɔۂ?]_Νlذ;5s ̀O>呔DXX4!C{VIW0azϯ8`޽ܜ2kVGm/ IJ$=o[@ <'lڴ D]Vw=zPJ&Mgܸq|w,[LZWT:`@ZZAAAj/"J}JeGMCg\>zé[|l޼A8̞L"@ <_Ҿ}騍˶M6BcGGGȑ#5jgĉӯ+V ##DD"ܹsXBi+E* Xjz~ Qf2jLRRN)0G#G~޽"#_ߕ;ÇufJ~;֮ر-DFо} NV+ߢ6xyԩ1,d47qc [P\j՜OIIҪUs....PTTD^^X[[Wx>|BXr%666j5(Gf锔 @ǡC8t(Ç38821 hk3r߬,VF[__8'yy9BQ_|eDL7@Z܊[rYfyyɔ)SHII!==777a+,ϵkI6o^D| v^śoʏ߫׿3f/ag og iWz|yUrOBWYُ>σyݏ9v ӧOT|\ƻ~_CFFFxxxpEsKVVJz ٳ򢸸ގur\5m&[Wabf͙3I LIߏ|pbǎe/M_|eD@ P___Ο? r(I8tC 8/rmpuuEOO֯ E}2k,IKKSK$&&9阛kL"quuCCC\\\8|d m,#55 ۇ+M6itL4IfK Iggg#&&T都={eeew^IHHkү E}ѵkWlmm1b:4>^קԩS/7¥ȷ~̙3z*|ZdQf3ЩS'0112&G*1 ۷oDz}/Rh҈ʑ'77hWHׯ;g;.R1o?_Eu۷BK Tܢ}C˖*/:v숱1SLUXYaINNVI'VVV`ggn+x?&ʜlwr"cv2s˽265~1y2CCFo77fgť~PJHjoADV) Y(8q333잼dS4z~7n|–\z~}}]^~E-Vl]]rsf{랒rɓGahĉVI?x8ӧO؀vZJ;L;vVٳ'ڴiӆ3fp?s* ՕpBcfx-]J[W]g߻y [ܹqqݛ\yzJrsBwڅΝ;5_.\ccc .(-ȾRd)ڵkڵ+ژx*2:_«Tar1ΞL@:M8l%>BS""TX[BB|e?afvb׮ܿ_, Y+;f[*>Ə?#=2~NKLL ϧ[nܹs o,X@\\\ a!88FÇkZuLg[[wr~n);;3h5iRaaprp}" _ϐŋ`mG:v~~EwM Kxx8VѣlٲE-/77Wo_Źs%22ccߐ#QCv֭[yWHHHa՘~E9s&a'OGi+E"Xj:t ;;ݻwvZ-]]RuNoE%M[ѣ ۢ}°a^eAcc$ M Ahzv8K/6Ç|9A̙??~ii]Acea$@ h[],^L۷سg5/g1w|@ @y3O4a۶tfxWȹ|NXT@ hԇ%/f,g @I|2߯;s4_ygx "US&h8 2OOOwNnn.III)hsxxxЧOTlL0^zWmlM0i ׊rsYanC5 J$=o[@ bӦMH$n%{CM4ߟqOV\l5կ:t`4 Ԯ} 2CQRrٮpG /oI0^jr+Κ2i$֭[G޽޽{)-_PL>77pbooD"߿֝5Jl-qص xqc 1@ikKk6O/6mDLL۷/#GdԨQߟ'jLX $ sαb gdS%wJKKY}&kҾS ?,*uicaoM:!Ώy9[p@ 3R}c+mf4 q9Xe]`Q,Eh5ђ~nbqq ; ƋwÇ),,$//+Wbcc )))GDDj5(Gf锔00CqṖgpp0/?};Vkp1>߬V}m>|[m}*FED0p9xvd'b UVlݺg2[˫LLBJJ 鸹pA:uT&--֭[Ň~ĉe{_yP#͛coo͛yX|9׮]#++p5_]t!22 K.4e&a+{+I7&-;}[#ǧw%Ց iغ5žw:zNQ\P$<,zL3 ]2" aJWE+BohooCX۷/YYꅙ022ÃӧU[TgРA̞=/// _'ʕ*[fdom[q|En?/If͙3I LUui Ce'zA]籱@n>= bСarEn߾ @PPBg,P'f"994J@bb"J˘-+"99WWW 144ŅÇ׊}V%khcdddo>\]]iڴJx='5b_}/5g`8}?aoj Z~vc<4,F? ?Դ|e7?k9O~"Zjn,[@utx{{'NP5 ѣ95Ce*:_\^a]Fv4Ó{xNJ6vƎ`%-cvlWAA F"0f󉌌dҤI2͟?_jH:;;111ҧOٳgT.++{MBB\cT~eh(닮]bkkˈ#֡$>DGG3uTepQW"o9s_U>g_e6:u" JEⰩ2QYk:z}|Q]nF96l_~*ݼy3ԾUuv8;3:k?^]Y+sؚhkc>t(NÇD[ȲvX"== mOow4ѻ&ꃜZj w&đEII x{{/'O$''B>///6mJG)u<W[sMҒ.*/_[nݻwr=5ѯkkk(((G}L]=vz8lM ۟'4= oӴ6o˞Lw;&n+͌+{:8COD;ftGrrwWwʖ/oQe_ gggquu%))In>yӳgOiӦ 3f̙3je…ceeU' [滸g/s^uR֭5w.:FF~*Gc_A]Arr2nnnChӦ mۖ{VHҒ9s`iiFY+Psy%??T]vラ)sNWą X:… ϔڵtmmmXxq{TQR>Jc{ B/UW~ƚMZخpaG`x+xTTLRj=,!94>kZ/͂ a^W(֭w!%%Ep999ȑ#ya{Νlk+7]M7WI_rM~Koӆ{7oJ󤄇}ohh]_\;~COkgժU=z-[J?8ܹDFFRRRBTT~~~Lw$ʾWv(=<<ںu+ 8lӯ3g$00P:ɓh>ĪUС޽k* ZX4K2.?@ g$ M A-^iSmGWzWA6&N@ FZ=l@ @ }=l9/\nvTIv@ A8lwuE@I*?9KNufӿ;ʡoɿ7T'umM}6ott^,22TԳ@ @>fYY@೙rD|CȒҳV~vbY7V;Y儼NK|2;bD.=Y'gll@HtfСC[77bQ|F.*wo 6mZ_;U&M?4i#ԩX閘k$ѪUW,7Ѭ\+Sl+ϩSͨ[riҤ ;v"͛w3h'A?qޥSW?~ϡsWÊ=zMW ?od[pv?׮]k REtff/ɬy>"2rぇbz".|@ h|ݻ7^%-۷QYH$56˶M6~GGGȑ#5jgĉJ_S;0|pZj+JSL8lZZZx;}FRA~?-O~XOc5/:x瓍<,| MbD"#g,'bch6le-ԩ 4kC۶&ruo~Y 3̼&}5/o:[jΟtt f9ѩSl٭q~}"oՋ6mZVwtq! DD"СC :BrEn߾]c]Ɔ>]ў5kɤwРA̞=///HLL$;;[isssi177XkiL+3QSS4M5]YYO:;;111ҧOٳgFve[7*]v֖#F]]],,,8qDNNNL4I%9}}} L:}}}K~ >s6m?ӯw4Hɻz?T\D!wՆ5ͼNx%,){w ?.yW(ͥe*uD]ߴhUk]9M R1߼&/4etG*'웽#Q iiiѤyyѲ1׮wʿ~Ѳ\5~9~^wJUa6 ufm&u9TnT%##gb?(nrۢVUYabwQ؊ZRзZE,kц]v$ % +n]']Ԧ}m\.<>sy?1ѣ`8O gaaߏO?ǣGE})S̙4ÇarO$'~s8ϧ@ Hn䄢, nnnHMM7QZZ*(-_p8DFFsƍCXXx Lqk\t @HH\EP ___M! d7aKJJf ,@vv˲|Yְi ٦<Ǡ GUp'uKw-@vL*^U@k_ =ɴ:6y NMKqC:wk1}/ӡ1HagQWYy?t "99 11 ]Sal<Ɔ ر6Y:tV}/02 ꋐ7n_B맍~!D>-::0ygPV#@ Ȅd">>IȐCQQq{Ei ͛7NHeAVVV״Fٳ`0Ӄ N>-v$d2ѷo_hjj^^^9]aE-_kȂ.7%(~眬RNgb,m.SC+\466"d:`y"%hː~1_=O<'H\?W#fzwգ"skBƮs-ѣ"3ۊaܸuݻOjSݻۋի遊iN\y S\&&^cI2+C֟DNXYs~֯_ =~>@| 5, eeeܿIIIRdȱcTTT ==Vii) [[[K-!CQQQɏÐ!C8qJ_HHH:l6 X#l ~(RHJ#Bg7bėFC C^_,Z?" )qM*@ Ax(RD?Fz @YH  رcwbH t0~*U4 @ ll+-߇"~RӦM%niXGHgأ@DV(*ϰ] ?;$O6&#˸ddɒvCKw<ӏn})A2,,,pa###[nԔ)Sp ldddNKdEd2AP>/Paw|.[3@><>  ;׌*6ntDR^dfFLL ´Uق  ̟QXX=$Jb޽[i&ѣ2|}}佽K[VVV8y$ݻ'PE?F D-yшBee%*++q- j<{{ɓHIIAZZh4Zq<L0 ajj {{{̜9bm(((?~ ooo ˟,طoqE̝;/|ݺu`Xq=uuu 7_Ƶkא={@[[[,ӧOVZhxؿ11HH؁~33HLj]>|a<}#p0i!bc$CߡCg:Y ss[Ga֬UPUU&@膘%1sLMXjʰaúT܌=RRRK1yyy0bĈ/idĉ(**Y?kQ5ҟY,5558::"--{lYYY9D;sLX,ѣ8q"OyfbATTN*|agϞ0W;v,.7A< qm|ظq#F [[[XZZ @,nnnPVVƘ1cʟdgǶm<ljeVw55pt*, CZ.[230y rG 33#GQYYHC"!x)JKKl2@JJ BCCt:Νwի`0Jp&YZdDEEOUU8TUU&_8d2غu0Cnn.rssagg5Y( zzz)͇h_p9ܿPQ]ҿV-nQ~*..&_XdAuu5oϞ"n &rk#Ç N<`kjjb#,, bvuuE@@BCC%~I:LyC2M#>> Thh9_VAHH4fZ^w.FTُfb!ٓwAu>()_uEy9߹7oB__;lƌhHJJ|Yo- 6RSSGtf#uGuuuˡ'!_FFFCxxmZZ B`2k\t(I0Yd2k.|g7n_˗/1x`rz)--U\GGb?aK˸q$"HL4{ɓ'R}5.]6 ۰ÿIi)7t(jp=b#G]r],^PceKÏ?ǶmnxqH">"X,ʸ?Ik-f`=Ӟ(sqqh 0d$&&N8xɗu3g|?Ϥi|60(ʍ<6D5rtt8/@ ^\Ra@ "eF؎?.t3纺: :E@ @6@ @ ?]fmر;O?OqPw"H  ]f w~ڴiÇ;M멽OVr;6~GCk1+dP@|9U2(k Z:5E>@ ._ %K:M^===aoo^#bI>|ddd`֭9N<{IC<-Bi 2ۿjyݤx yak jj<1s2e8ql6ݦgSCV"''999{{˧Rػw/rrrp-lڴI?iDGG݇EEEAOO{lؼy3.])ҿ瓷GFǏ5.rKb޽UUU (/t:4 >>>Rm6/+w8bYB3Z<{"ɫ *^<M055Ν; 333twY؆cǎ,'N-̙)S`rKKK̚5 T*NNN2o\]Z;vfFF!??;v FL>ӧO^KzXܹs|k pBܺu h`(((! H>}pܽ{mVdFGGGؿ?&O, %-- (//Ν;PZ0͛kעCO1ģAg Cmy5O?X-ֽRZxυKAI={]jlxq#& pIGO >n b #//˗/cȑEEܸqC~qw;+WĹsPQQW^555A#rs~QTTVG(C9BCCQ^^bFfOZ h~~~|aGFTT*++QYY``ƳgϸGll,N<iD|055=fΜ ]]^o(((?~ ooo>Æ _|]vaÆ ~C///***O[ ?&w͕ĉQT$ӧ VB]]]e_q%)5ny; #4j3~މ ;`@#-^Se?{ atiyKQ_SA;u1OSMovʣ /3g\7m4<|RowLMMk׮!''{쁶G?7coo|R8#F@^^޿}u^F![qHYnX,nܸb555iii`B@@'Rc(**Bqq1BCCy-,,pp8DEEaԩ|2"""[9s|L6m4DEEয়~HF{O}6[lܸQ"#F֭[Ŋeee3FKʟq3yQf`m~4ZKwP_7\O⏲1C6Tsx̛xǩA1lgr}.::}ӧOQZZe˖RRR`ee---<|8wLw;9r$lmmaii .?K,Y(⩪pAp8MիW`0* (++I;|vE3Cnn.rssagg -s-<$. ===L>Eۿ6hkksV RZZ xz%ӺRx D"?y >XbĚg FFFDxxVAmm\ˮQMy +rxJOm=O':l *dGz-xER[@~$''CWWׯΟ?O*E Ν;???PThiiW\g+++p8dee={ zzzӧ&do߾Ԅ !rم?id~puuw܃ӁZ4iB޽{722***矡{3Ll߾}6 LF7nyCñgdddr $,9va`` C6m9s缉CFhh(lmmQ__/:з Qxε( {7'4ҶGv=S\A'Jw߂$Ƿ?3G'\  BYYoRR18tp%P(\zvYEeaȐ!HLL8qrf`5&I ibeeFI y+ 9::=3ҧO;wfffMK\%F  "]f7kI]]C7"""/{Q: !m^ϻz+"E  gggÇpwwNj/H@ `#S}PZ|32G@ l+a =U( Pgo>q#;vץ<QF|]@oV#? :,6OxHH47 † q勚>@ :SL'`XXkְ+ QVVTQgqf0n8+(( ,1$$OR333gϞ֭[E.YXX&L@yyW7x`lڴ &LܸqAAAmn4WG])k)uZ&7k*?ѵn@9-pqhiwcM6nt…^gbcByS-[Vxwo1#GA*[[ر  Ǐ >ZV@|bΝt:EtRݻǏ5x6IYTƱcD's)SxbÁ%f͚* '''?gggDEEq.3oǎ`٠hhǎ;ĒeF|G_ k#:\ o_ml=m^0#3[P(ɛ}Ssb@Sۀu9?]}>aFJ%,82ztPp [ˉy襩 WPTB}PT@縸1 m.#z ___xxxf0Λ7+V^~؈9s6 e˖AKK ;vCpe\(**"##gFqqT;+Wdܹs xyy7S]];w͛]NqΝ~;"www=zT.1c WPP:9::r`b{joK=z4.]&pvvK~a;bQaqy'<MK][xhB3ѰX7t%@} f`-'a͟a،H|E׊v| lLX1_^R[, 7nO///Z uuurOϟ && ;o`ff$--u,[ܽ[ V&"+,6&Mjپu GKJʀ- 4$$!9t \]#55om=zYVAUU4&#/3g\7m4<|Pdc-΀)q5`Ϟ=֖XĉQT$65?7coo|R8#F@^^<1C73lذvpqqAnn, NNNPSS= ڊzNøF256)esPUoj۪+~(3yt>9g<1HUfee4wx&/t'0?2bرFhhh 3f2Dݤ^m[4qEߺu 7o!55 c嵝'<''7򐙙ɓ6*+;mL̚54 RS_W򄙙Ñ#FloA!x)JKKlٲ<%VVVÇ:-V~{3#Gp8Hֈ#d2uVҢ%K **Jx()_}E͛N11ch4d"_[{˗ɉUXXŖcddHbufy׊wUC]]eeeX|9!?00HMMEmm-bbbpd~ XAAA|Z{.HHHC@P|r0Lr7؄52iW&P/ c4%++AajPT(M8ȭ!U(k)@i: =)m |EmE==e̸qƳU[`~.]-<<<"6c'#&O-[9.^ 8jju9&߯ t4\3;)+@[[_J$ @fn䄢, nnnHMM7Ƈe|Iy2m6_?KB3|}}Ŏ[PP QPP 7%%%Xf   ;;]AddXk؄'O"##)V̔/C'3P'W澦QY!PU^*̄{)``T;;' .65z "IT's2uX( M& ;G{w@myft5/be"QqJXZNɓ vX:655UhZׁ$ȸkbҠd">>Is* ---x{{ʕ+|׵$`ٲeDZg蟭p5ٳ`0Ӄ ߖ)do߾Ԅ !rمݿCQQ;wDο0puuw܃ĺ]K䓴WHtk잀3 DHWCͷ}{L^= lT+$vʚ{ = ̋d3ơKny}} 74<駇ҴmQ(~=Cˆ}Cii) [[[gDt4sNUUEby'b 99UcyI8r5ׯ_SUU5`#00CƘ\ql憋/2ߤ$C.]BիWi&7_{̙&bOkYEeaȐ!HLLдOZ||gff"!!``0b ǎ?wtxxxD@@wfvv6 X2(ʍ<5rKS_ڡu-ϒ !tjDUZ:@ D'Ōq i,T sT2 mz"@Fa5*ZJxvoT @ @ رcw^\A|5 T*kH@ H@qq[Ga>O6 8|p\;;;CCCսF@Bw2O;;;ɓ]effbd⅕@ t[Y&HGy􄽽=c{"VUUaܸq"oE`bb 67, 'B/)5RPPٳϟǎ;{o߾7o+ڊO }m pww@BB#raIahh-[ȤA}luu5,--E/R/nI&aɒ%066Azz: *,\ӑ͛7Btj/Rkt????ɢhXf̌5DFF WWW Ց/F-ZÇc@|y䨫 %>@ >>>.XXd ( BBB`ggSN5>sȬTOOO444,_K3_|ixb9rիyf~a"]566b>} {899 66wAll,4B,\nBFFh4_xgO)a IDATaa!Gݻw)0~[7[bӑgggn*oߎ?~}O?fѣ~ ::yaڵb wwwțVΟ?GFFTϜ9?#^zW^ĬYĕ+Wc,YDgbŊصk\\\޽{UV@ Eff&푐?qɓ6lϵHJJ;݁ Nj/c0c ̞=6C]]8~^xxx ++ @LL LMME[uu5={=bccqI --ψjSSSc̙uC~z?7aÆ/]aw8pDйxyyPQ|asss888FڵkQ[[Sʕ+X~Xr<L0|+ :HII˗/Ŋ7}txyyaժUac׮]8x N:_SL8}}}}<~Ǐ1tVɁ˗#--Xz5 `kk+U%/'Oի1o<ʕ+|?~RwCŃ߿|X2,,,j*lذA8̟?W\ׯeZ$X,cѢEPPPT/ Q]3jjjppp͖(5ܔȬ,366ڵkEzH]\\PTԴThh(_cATTֈ}gΜA@@L6m4,X?8s˸l2/| ޾}Çŋbɝ9s&ѣGr/A4d,]TnnnPVVƘ1cxoCkNqV\ݻwc̙ؽ{7V\ >#ĉ< b EYYkkk4*++&q^7nDRRx>s899qqqoL "$$7}49uZf N>$|嗘={6._, ޾} ؾ};֯_UUUd8;;CYY#GDnnn_FX*))O>'}uAo6JJJj s c===L>Eۿ1!mmm7bS f{ziQTy{3%W\BB{|}}1|pN&/A4f#㺺1Pqk>c   sI޽2jjjX־b5%/kjjг'SKK~7@s|/^; ===XYY2e GQI3(jjjr0  ޽{9&,]]<}MLLx_\ѧOyFu%@#D;ׯ_3^իWΝ;(++|qюQ<}FBVV`xX2/+v-wbضm[ Sտ8HJ>|ϟ(5 ))) ]]]$''J#III1` 0pD1{l5F۷i?a߶m>S(**BOO7n8eWU/id2a``EEEPTx. ]n ۤI%[PQQ? 555ݻ·oߎ ܾ}[,w*Ϳ[fcϞ=<"$$7nljݻwɨŎ;Ċe۷={Ν;ŮߏtEQQQR祴 -R&&&2dDS0`׳Յ \gff ֭[.E/ Ö-[ȷ@ (// --G~ 4qqq;}DiaҥKe? ?888H__z8p ޼y/СCɗ6Oƺu0j(TVV"33"EYYY9L9%2`X]ѧO;wfffMJpMӇxxxڵkB @ [ˌ?~\ł]7"""/ɓJ9soz@ AL$a#pwwÇަ%A^a#@ Ȗ.kQjy<466 Jp]%H$@Vt5l(*ĢU_56}[Qm"~_oh5nNM<ʢNw3䕿NY~BG)/lh[u-Uiw@ )!K0d2>zt[*ũ+uO,,, &p|@KWWW/\vh"`Æ ?g{sx,ǃ;vM  <6m„ 7n@PP?_? ƍn7n-[򥥥|AWPP,X8qBBB,Q/!,>JEPP{={[n.~'-Gهm7W\;? &*`k79{No!t:eee/]{WUUI}th4XJ ܍5@ t^v6 |sDGGرcbwڴiu~YpI's)SxV5U?p8ĬY@R$3N=.ci}]'gbݓDw@ȩNKlk"O؟_P[ITnA Q ~裣!vע#/2cjTg p/f+=zop^5ZtԠdҥHKKCuu5˱sN5͛k׊u3OaϏ'm~(ہ!}4@ to b #//˗/cȑ<***ƍb9jM~{+0zhDEE8pF-ZMMMtHVee%= CC)$;w.~<EEENQ#44(..FPPllldB7{qWbl|d?}g)7e{#郿P4U0k*<{՛iݬ YWAw6f;"$QX1+t#H pqqAnnnL8EEEbɝ>}:j*u) kڇ% Ҵ/177w1sLMr=I#`Xprr舴4#%%/_`Z|9ݻ!e$#F@^^<1BKgcذa?JHeeef#)) NNNѣG6*JQq83ՈX9DCeE5>/Tqjp.>#wB1k.c @`}6[lܸ՗#֭[Œeee3FuDy~;{"<}Xl %%VVVÇ:sD~{+;;;"77vvv NII K,ATTD}kaa!l2ʽ_UU@UUUKGrU0 hiiJ2I&̙֭3ٱ[ٚ',\cL>Bs9,[4 V }te?m] *ʗxuPRV+nAT<B>|8LLLpI%lWWW 44TH>=??i޾BFG7oB__;EkƌhHJJ|Yo- EBBabbD0Lf#Ç{9%uu5՛t˗CCC2_:@hkk#55x8{(~WWW6 狕ǞJߣ #]{.B1gkۢ(P5󡳆Jhjߥ*_-69K*_ݻz(RDݻzjtiɂW`оxr/3 22ׯ_9oeem۶aHMM[ׯq%!!!2o>=?@ڈn$, nnnHMM7QZZ*[~{1yd Lk( *2J ==`hh/III ֬YΖ~aP(b2S"oQ4vΒ/p~H\3 >'n۔k}jxYq%ƚ]|K>IȐ5H<3H8JwXp!?~,2F7Ϟ= ===`b/1z* L&}&lll先/L1vX(**B__[l *  N-ԡVGΚ?̀f5#bagqPXw_ijgghhh-^Se%LI' vgܿ/lL˭0xnk@F~[oH$&n;ANN'r|gz<J'##C֌̖'=!,"L?6)f53ϰ69P<(e$I~/{,z}_t_>u}}>ɉ]vqE=111QʐQFY YS24k,ܪtz^ugH8k@Pz߶]w)6lؠ}|y_N,X ))BˋWW|\pA%*jw֭[ke^VG *qf M8{v#qVZEJJ 8::rVZpcDzn:t邳3+,^cǾԸqc.\ X@ (~nZuV"""J}8u+WԘ八1c֭... 4={2zh/WW'NdӦMlHuP#w\H4\VÅWٳA}MƙH/Ǭ1>%!+G}s:)tFog5 G*<_ei52_yC~?_^ԀעҿyƬ3)&Vt<ߕYRF]Kk1~۶mٴiyfڶmիݻz8;;3dfΜIIIK-RK߾}^n]|}}̙3xxxH}vΝ;+KKKcȑ:uGX)<--:uՠAΟ?ϬYT!{~PU咖ɓIHH 99'pAڴi#u6III2++occc\]]ٶmJibccRfʕܼytpuuոR]&L !!"rrrX~==zPX_+[7r>)/ݏx_]8pm=CƿLʚ>9c(^Gms-F*%W^lwOdʇAtyWz$0H =/{\s$T5y[B`qq堔_׏u?r ѧYfR̐|O* a[L/fM'0a>nݺT}2gxqAaa!}vvšC8| SbooBCaܹիW$UV{|̛7}peԖ_n"##CeiҤI\xUINNF궏ohhȔ)S8{N yT?11bbbnݺJFmTt}Ol?TOҺ}snyohzip }tg_?WI~gIww-0m+(s fu_)%#>| ܹYfp F,kkkBBBd:%/]]]ڵkɓ'UJ[M-پ}ԵΝ;3sLq Ɣ)S$`pJ^^6mbݕdlذg5Z}aW_{\Մ|@P,\P 7nb޼yDDDH׮]quu%::Z#[ש])999RS k U'??pNF궏_^Gwe*q6mڴ! SSS]j|MMQrK5򠛘r/3{40Gn3|R?icp ]cѤ[rJ2 yfk'OʊЯ_?ш|Mo-eC%%%+W(F, {{{oN@@@SU 14, 'M_>R$~֭c׮],]Tf:~QǏ/Æ SJw)U(}RXѓ)vhiiǒMSQw uIөYCν|L-ɼudgU>EP^~Weu+᱒𻷳ɾ%#dNTɦo1gЩMBW30";+_tuf-r#=zMAA7nĉJprr>cܹr|"33₏+V;,S 7oNjjjΈw\‚۷o+nD 7qqqqJ@Uk~n/bĉ,X@rss ӳFtЁlll*/m)?//7rqT$~II;xך5l'/\>=\[L$s78n^ĮUgg޾Uc3c}Chml (+tO\8/I岪J]=ЩdWq6Ù32؀v37lMZ܈KFOҥKxzzbdd$|RߪzǍGPPj/^£[⯿СCR?Ye{n.\Hf055eR;&MP&9|02~*Swe. WX,,,QF߿_J NNN员VZgȑ\zFU?{KKK,--T~Q}S>Æ tmmm,,,yAUˋvZڷo6VVV,[Lw֬a7=:}ycFO9'%A?{Kl#gY+wb@нlc}"iT>N<}>4 M<*O|?rYUׄ}uYKfkڗOJeʥr*v1zl^??k,%OW-`Ϟ=RS} qqqFʠ{jժR7nDOO;wb``uGHHѣG?*[e?ƚ5k8z(5<K||<ْ+NT=e6mڤ7`kWN[nQ]Ҥ5jvvv̛7Ojr'yǧ6Qו7Rew]MįY~6+((SN ɯS >(%rŊՕ/O͛h"v @RRK.}A䄧'666dggGhh(9998880evJNNNpeuG)yg @Ax'HH !w7|?{U' ׮|n!WWW>}z:kZZZ|->\MLLGU MSngߪ+_m۶eӦM瓟͛i۶ǎÇ),,$''իWӻwoI HHH֯_O=^Wa˿uW+֫xo>۶|ޮ+hܩwgS'yjI==Fw$rP 4aSbܪdUWsk,.g__N{UW +[&[:wd$9l5lH76 ۬ؑ-}Тsdh3Ν#vbI#`g&>>$ۗ9sǏkTw3x0;9ROG134TKQx&mOҭ[)d_򢾜,lߎ31۾=!{`0%&2AX@ݛ1c舣#_ Ӈ˗/_qssСCddd(ښdX[[kL<&LÇU׭[7e2eΞ=+S*III!&&֭Qz[?eYQz T ש_>Nr2nɔЇ99d4m;(]Iq1F͚):ӷus+ GJ В%p*<\zQ3RJJwwI;ӧ3w.oKfJ_R~'i*ZpCex{{Kv8yJ2*εWaCظq|sS7nig]y2g<> #rԉw-,dO?qdRh|?3TJLv;u23+￳f$woapB!9nܸ!͛GDDtWWW5"h}V;vR <lق&M"$$ JvڲqFˆx1yd.]LǬ*?~LJJ 䰩S> O̿u1o:kǾB!g"C6o=gO׼hii؃\闏87n,1D QɚRx6Ah Ġqc_/ /wԞ_W%j,56FĤ%Wb<]ԩI.e8gffrRRRQIU1ſ"O>0ZZldPnxmެwI uT4iJCcc*8ewhkBG !CLH`ސ!*cU 6[nz+%%%M\\~~~>}kD_Mꠥ%\CYRSSСoR+|yу͛7O^^7n[nJprr"<<vU}w﮲%%%uGa⻏?>Qǎ/rt4US捲Gts Ns2AرwGvp'_i.?JUmF 7dʆ طjE'E:6_ T%66 "##iԨR hbW}~a#11Qݻ___,--חQcq%<==1221t7jE7nAAAxxxԾ| 6йsgLJs)ڵki߾=XYYlٲJ"쭷xٹp.2ƍ1t&8@.]*+ ?zߺs*ŭ8DAΰ۹\a:$n؀Ӳe`lt4Ǐ{xIpM%3RR+&;oRwb-R:iDpp05l\>Wri˗_۷Oa9 HlZ u:[Z蘭ϝ;i۬i_~Ƀ)Q;77VEEwI Y>zJP@*dggK#euWw~SLQytgǎ>}(HLL$B|yϚ5 رdEXh 6dϞ=iii=]Z… 9sΟ?۹t+-]]R* 4AuJ>_ @~!IbS@ ڂXh!5l ^gnn0ɉ#J @ !@ ._p!=/"SkDff&=zVԢ@ @ [9.ߠ]y@e&v|/jqL$vvS!@ ^ j6YVψ($Kvlݺ'_dذ~Μf믹pGe嘘ȼw֭*bƌ؎ic]2 f_Ll8#e =;k3Ń+j4&OLBBL8ҦU[[$ؼy3#G`2{J" O>!$$hrssssh-Gamm5yyy/9366Օm۶)g\7oNXXX#ȗG۶mٴiyfڶmva aR&귺u[aCn޼#_϶mKطo?9zU}r;!Z+& 8 ~M*/>} &)\x[Oc=*棏s9fT3FqM>h:ׯ{R jCCCLٳқ̞=xT۷o_̙?w [V53MYrޣC{vk:gKXZz֩0||>W~YCQBSkCR-V@Pcݛ1cHFbcc߿}}deetR<<""#W*U6={v=Boۗ*f(޽Ϟ̇~loootuui׮'OTY?ea-8r߅=<).iL_ro3 qky=c$~Rd6iO@ 9.\(1$ǍC7o$&&ҵkW\]]KOOgU1*K"*UȈ6m̜9S#"İw^>|ի_󥣣;cǎU*>esxx8SNE___cΝ;5k7n`Ĉ*ɲ&$$???oͤC6mT2R^"h|Mд9R?kР .~mm`ĉeR(YY9ܿ_y8܄:A||8J!p^. )fhݺ5vvvڵK9˗/'$$e{zzHpp05:Mw-5GO(}Ry]U}rnn9eFM$׏ܡZEos~XL n޼Yɓ'bN~HLt}xwطoRU*EEEX,rrr Ac"pxKyJJJ W\Q*^aa!eI022Pc̾}ܹ3vvvDEE[[[vAXXJׯǏ/Æ S:F6y Yp g^gN*_d*6@ppP:yuiחdffe4e|gff,qM_PsqFw.֩S'BCC4e;62339p)))‡av6cjV-(i*w*u5֑l@qa 72iӜ=͹p lFNII x{{ORyyygM|E{ʵkתVI&F]UKKҡC666jLtR .\H%!!AQ0yܿ qqqZvb8kJ~*WZ [Ja=Çavё?RZSi<)~Bio1#e wJ֧$^DX>-%< adz!e@ x%';;[ogӦMyf͛5~me8pZZZ,ZlUyG;|L׎;hѢQQQ|DFFjLe*uyϟȑgg7.]9ҟwY̫RxԯusڴiAz2;;{3KLKD|Wgg_ե.]Lvv6aaap{{{V^իݻggg6mgӇSNr{A@ 6Ǝ˺u$wAAVMꊣ#qѯ9[n%""Bacƌ[n0h zѣ5fȓnWw{~^kAf1h,('++wcccTz]#994ʼ'?#GN5& {1oٌV,/_׈ &@QQ999_=zH?BBB&77;w0gΜ Y`j钟Ϸ~M}ضwF-E#,!!{0+W޵ [xYØ21-}3[f_-u}g d9gNz tpza|mJlMZZ'O&!!d&NiFMRRl޼#G0zhaU%_^>|BrrrXz"8;;3dfΜIIIKyΌquue۶m mH ig.W~YCQBSkCR^}wU.>GJ/[?@ӻwoƌ#ҿ˗*,]0aAAA WWE~Mѭ[75{LT߾}3g^^^<~͍Cpkkk%'''cmm1EBȚ:'7j#ucGkNPS"(-}Bݺu9u"fIZGm hp_ɃO>|*őէ{d>6mڴŅ???9s&۷ٙ?Pl) Pvbq>>'^''eHK3Ngȿ]O^['Ϋ&+.z EOszzM!8bDoo9MIOh1 NޚO n.\(1ƍC7o$&&ҵkW\]]KOOgU!K"*kkkkBBBӨ\oootuui׮'O|)yݝc*O__|Ù:u*_uy_ȳ^æ>U6mjԵf*K2e˦|{w&&BΑMr&Mi<AԵΝ<~\,א֭[cddɓ%EEEX6 %66Vo億H-RU%m(a7nHsT6-ߵVM97 d5+%E{CC3~˖1uh)[7 9u[N}wPmIN|nZوtޜ6+9Z9W~ɠ]tn_|[r Kll,DFFҨQ#/ޮ];:vܹsر#ڵh]<ƍGPPUkZ/[[ͣyyy$&&VyOUN޽{KKK|}}W~QU^>y"Ժ5lmiٲ5}}=}ucز z;7?~ѣ9IAA))WYdN)XV{`…36zѶlB@@@KKEiTI^^Νc֬Y5kYEWZkTR/w*Oe> c\: OIzL{))P !"ڼiY/5HX̀LRd(~s4hY~K;v0CWE?@P{';;[oLZi&JJJؼy3cK˗Gy[gϞ yyyRzUP>AAABqq7eGvA-IX˓nWw{~4aiꖪ`h< uYLGϊ@ xi3f~P 2fW@ 5#lwҤ )..&55]Ԫ@ x) ı՗wٔ?fB@* 2]&aN;LtX3N^( F p@ uC]"UjeX4$^ @ iE h͛h"v @RRK.}Aٳ'f͒4ֶ75jvvv̛7ghSЈ֦\ϡ;\,?uX1>woPlɢg-zvj\?M/Q- 899鉍 *9Y^mffҥKիO;oѡ1vOe /~|Kw%s6aRe-oK.U??BXnw[bӘԚvMם4VXq011aժUlٲ'p3G[[GGUD__'OҾ}{SNѯ_?Ɉ[laȐ!T}nll̡C8p {nV^-9ё3fHFԕ/Ou+y_e+Z>fmcغǴԖuli ÑO`e}Dy޸S6ta= ΫTD &z ,nъ!=xp5O,-zU>j"Ac=)/MW'}wU.>G ÜvՖ{[_2<{-M7F߬/=xxx```&LÊן=;v3gΰfLMMҡo߾̙3//saӁTl[m;܎:uV X8܆#2*6 =*VC͈b,w =eƀ8l}DW*|٨N\Gt+swp~K+EfF-mfϏ o_.?zgd|}8z͘1c$# _>}peɯn_EuFzzZwVjE\777:`mmMrremm1m_ɫ144dʔ)={VcVuhan18h+zLWiKOR~H=oNKWOӒxp!ɹ4ǬR {ҹX6`L_ro3 (^߰҄|usӲ?9ٺ,c:*s: kTSY7Sm3СC9{,gϞeС,]TFFFi} TJoootuui׮Z=tRW"W3be:6bZI?5PD2wb"nЦTn;2s Bcԩ1.[X̪S ۖ]믒oWX KnA1e2X:sdױ?@}=6gDo+f|u… ~:gܸqeC899abb˗122Օhȯn_5 a ߿;`ff?5>lڴIxN^^_?1bWXf֭޽;vvv̞=3k,4OpyNۭSٴ|B=/1sz7ɼʽ)}1&~WϸںGO(}RyU}**C]~C]IT!iVʂeF Jk~o~GXv3}=۷Ν;cggGTT!!! /**bŊdeeChh(JI`` J7&q J+Xw\#rʞ%jK^53ڝ}3z)17~'6סGsdVWɯ"?x7F >>XBﰲzB=*~B=:<*~RəRѲa}F^#,q~ u%_9yE$k{C^QgEkſW[6 |țU,/Z!L!홴^ծ3z9Eºv(m EII x{{OI嫃}s%..N޽{L>]9}tꠥĉY`qSSSС ؐ1m_ɫn-*twG ,ấ;OzH~/EӮfԷ5K.鉑dKd""::011OWY/^+Ƙ|;0{.m#aha^sz,!X8|6>z[8=x~F鐊.Gtʢ>V ]tRye?ľU嵗L{Ӕ)N`ʔNV&Rk'ue[Utbcc 22F~Q(J0n8ikCBBhذ! 89saÆZ>;99GbbbTeݻ___,--׷ґCה}joذΝ;>>>;wNa׮]Kʊe˖UzG)QkP\;|E;)j_oR2HeRDl5c4$S*bHE"mV5mX&&~w{oR}9sss>ڴ_5+.wwѨkK]C% R"D{=; W=w1 i /*u j&ߨu=ѽ& _7sYǃ)> M3N IDAT""cٌ Dr.{Xw V߷ ~e^>|@m?x/:;;ۛÇpqq{Ç7n܀n߾ //V7oannv=?sJjpqiMC.<&Dݯ /xO<%#˼a:,pvDe@VJћ&!#y}3p/\ix YnY+y$~q~ ^ %LX_ MVm_#Ri]3u>̷+|I?3釠#X-4CII ߏC1 .-700@yy9;11QQQ`0.o>akiCX:::zlYxx8q%:uJhJ[Wɓ'ɚ7>>k֬;X޽jjj{ kI"M֨ʯE&[KH2ı%/9t!#= E]ICEc |3B!_.3[c DEE>"ԨQzӐ?շcǎ#PZZX/Z?_ZZ{a˖--NdJ!|###{wu6mĪ[huA^n鯪СC_TT?f͚-y?bɒ%EII GWBi&U|2صk0zhXYYa̘1 "((| Nmx30a1cFs -~^o񳳳þ}X*]?Fhk >`ҤI4iR3\\\Gk+yňGJJ .\ ѣ01ulll$$$Ą#n& 9r8qˑ+Vӧ8q*܉,[ ~~~|2ʐkײ066nTTTĉ}yt$F,Ц8>-\`+58Òﰡp&VNm/v0ۦ3f!*%pU4LT8L+^[b6jaaa@LL nݺHjjҥ044ļy`ff3f lmmY-y#++ cǎϱn:u5551~x޽nnnA ѣGaddhl޼#ݻc̘1HOOgk OJJJs=z={@IIw ɓv /Z 4Nb`Wjn`w4abʜѻ>s|Z^M5?Z0 C r*P@ֵT^ٖBAz9듂>>ppp ZYo8888@^^򰷷ǭ[#)) z* &&&QQQ̙3ؼy\߿?RRRXB#_SÇGvv3n]m?]n$-6lV^sݙ3gёuo{,X رFyy9pDee%.\oooĉ\gq Ayy9BBBp9*: 0n:x{{sM _PP.GؚvY$Aז[e $}nsڅlo7*Z>r P8Amoj!mFo F.F,Q=-co}<!4U1緱8=;r=: g{jPh>I_щE[#&&nnn8y$`dd+++\|^vv6\\ths^:K3g+̙3e$ ()) mիx"jkkk׮O$%%1|ʢU]t)dee{~~~\~+# _sP^ۗk^zuhnnVaa!ק'}KII oG˗4pvbnݻwҭ/ QZZ ;m``5 ' GmY=>(Aq*嶊r WUԪSm;Ԗk\s塡=Ǩ@}LSۀq| r*RkzRo򄍹}\kl,n,rxM'CN,B>?߿ LE{011իWپ#G"**J ? aÆ.]{pqq̙3Zw>IFjj*233Z h"(((ZhwGxx8N ƫ~f6і#'lv/U`5rssVmC=X새vXHJJ"99c][}>^xwq!ܽ{]RVV,YDps[ڔvQ^*(@QCE*8+֠ q(0{G'!PQQSW_ʕ+l:::롧nbɒ%PPP`Q?9ӿ{blq :;SSS#))4/^ 틾}Ņ5e0k΂ yf888pm[?kmFrcFMMM)?:9sطo@Ν;ǏscƏرc`0lwlقC\\HHH'Oj**:Ç7n܀n߾ ///Vɓ'ɚ->>k֬z!`_Ч]ˑ^CW26W#hM:9ya?”=og}+pab VNCUA-k|CoO%zk|I LWբkQ řUBUƱlY9|)LC% R"D{=8;;Ѐ`zfu{@uX޽jjj{vOѱo :.]qSN -~^oc.\uB\B{?8'=W{lg6[8# T* !s3>ܼz ,ttt?";;[ s~ߦϠAشipo߆%`hhgv_~ahhףTkI\\lll CCC 5mqF^ IN 2B!|ܨhf$bʕٳgq-je3?/-=zIII~:]?~~}X .Çqyf?u9իW#%%111ի?^|r"::ݻwgZws>۷ocҤIp+9-)S@KK 8sk)|Ұl20 0 ,]iiis%DFFb2DDD`ѢE|s9AMM pssc{glذ֭zݻww>}&MvZ%%<<&&&AݱrJܹsGh444X~3f Fu,--̞=- .DJJ [s̙38{,!//Ziii$%%aغukw hkG^o 1w܁+lBW.B:X\\~7$&&wfffv1h 9NApp0~gA o߾siU\\C_NNNXv-222oUFI_sW6qD &~S7oĶm IIIQ333ݛu{Сx%KPTTiDhhh\?+**p[}6ccc888-{vӧOǔ)S ##krM ۷s "22laW\ŋ`0=:b+W̙3AW.B:/Nb5ضn݊C__)))Č3{Ksss‚ǽ{pyߖDEE}BKK vjU\?mݺVVVϟ(@ -- #Fw!44Oh*(((oGAuu5+ Ϟ=!!!m۶o*33... {lQQQBk3ׯqMϣG^_QQ1ajj~ASS555^ӧOJávgRRR!BOh555eÇ˗/CDDׯ_Gll,N*]3ߙYYY!!!VVVa?xBOR^ GArr2lmm1x`VPA˯VVV@zz:,,,,P_ZQ@/{Ǖ;2ʲeee(**ݝ&֧N?Ǐ1{lM+k~y鰱 S5؄1رcX WWWdffrav޽pׯzC ɶOiM r DŽ ɓ'c۶m022xJ]3ߙ믘9s&ױ?-닞={|h|ERR޽]#$$Kʯ-!!K./_Dٳ'L]]]֓:>СCX|)))1p@ߚ:룝`cc# vf`SUU)ۧi?϶2N}aÆ ` 6mn݊2yk֬iL$nޝ&4 Enn.GDҐ;w"99?-Y~=~fC~ʇ7^凖Ν;JݘzTVV`?`(//gnU\[nEdd$?~L?G 9::7Cvv6Yfͱi&?~P9;?ɓ' ҿpB!B!AhO!B! F!B!sB!BF!B"555oANNΜ92@111 ''('O͛7QZZ/^ի[\]]vhyG8y$rrr[ܹ_[԰}@/!B!tÇcܸq;w˖-Ê+QQQl۶ /_dM+ ~~~Ǵip1bʔ)c˖- O?e˖uhyVVVBCC[~[ȰnưB!e@^^ݺuJKKQYY ###hkkCLL >ƍWxS())a?::GŋO?~PRRc5USSj5޴%B!.+""@c׾I&Μ9 4h ??yyyӅ Xˆ q뢢"$$$@[[+}RRRc}?K$!B!]dddp9Veլp999@]]Ο?;… Xbk9صѣ Ν;1uTu>ejky?~i;w.p&YYYf-\t QQQ##K?8t/^ {|2^.h !B!]Vaa!x4hĐu [sMȠ-wB__mXAA;$ה"6IDATRRRpm >[kưB!e%''LMM>} g3ؖM8{,`oܸѡo)}n:(**bڵ#G<~=a#B!Ν;1rHO\\\sm߾p2dwww aΜ9ALL VZI?UR۷0~GsOؚ.!B!tb%B!BF!B!D\z IENDB`vifm-0.14/data/graphics/screenshot2.png000066400000000000000000004073751475151500600201010ustar00rootroot00000000000000PNG  IHDRlA5bKGD IDATxwx׽7lߕV UTMt1ɵc;N8Mn&vĉ㸗ƀŀHT .yըvUy=3gvo9=.F 6 """""""""""""t@l """"""""""""" lF DDDDDDDDDDDDDD["""""""""""""Q€-(ah0`KDDDDDDDDDDDDD4J%"""""""""""""% lF DDDDDDDDDDDDDD["""""""""""""Q€-(ahZ݃|nFIga G>.tVֹ,W,WDDDDDW ޷.hm6|\BnL7@-7{U ȊP^'by+o'-Xjj@L˕/j/WDDDDDۉFרl[">,pD*@UN/sALep4E`k̓Fi>oyk5> JZݘs7bg/"bF]耾o(vፓ64h LH%$ÃURFt*6yjX|-XAq +^g52Սؐ[AV | 9:-ϾWC-Wn}]6 p]6ƁJv70%R[̌QA.sTkv~W[w4yݭ(k`IXn@V>=R>8@qM2Õ!M۲4*+fDDDDD4rF,`+xMJ'(2ҕ67n}o݃ X+LlN'R>~eu|V:DZ:ջN.<N^ұ:<"𝭝TqF<>W? wϹ"""""狺<5]%oWm-|{ w[׸z DA1KDDDDD#k{ʝ(nFd #P/l'{Wm ̾:<}wEnRG g^P%JhtmvLR9:ժT RXKͩTyp.3qip:mxhj>%{̲$е^8.q=C=硔PUF5*Mugm˱ @Qޜ{4-V1!).e勺sI[ ^p}vyold)àhmFވlu۲/ hu4Դ{pv)XUHFU!-iP/0)R%Np:sc.:CU)ja@~~mL69 u6z=x͈Q_7"@#; GX?] Fv^JUG^Yxj{O _-\i| ]@) ;9`GY_=^_-Wɫᔫ&ިrly*~N@W  HU T@T~K>nM^85N:YaplFވl׻d 8~2H%R0lNzu׺6sȖ|=c V9aCZR'n|J:UW1+Bu4ȫD/t7ICVQ|tݕJJWg[)mwg_ Xv9yDBU]ϫwI3n'YZBt~,}\z.7g7FZsʎ7{|j8ybwY6#rk]R6,QO{*z)juMVAZO-@Fw(_ygo n>vhHg˾@jlRRVЫU z(`v˫U)j)` .LT**EW +iGC|xf6y_FeWw喫?̈QI-'q@&_׭RCH Uu{G.l_:fZӵ~ۖqa>^j gy53Vpfkגu.ܟőZox߂(FVyr5e=^6P)PDDDDD;pSݿѪ[ Wvht5```s[2 [aAAmKazKT=jzv"y)=ͱ:\ ޻?+SW}A hzˆtQ_*C)W+(ADDDDDcS}]hs(e|%Wc=*u8D|܆6ƩpT-IrDDDDD45jN",_fj mԱz7Bў:x9Ӣ} *oO]N^JQK&9`sҺV^9#r!JXy7%wU]z~G<\ 'Qɣ#Qz5߆#Fn ĬXӒB hu[Ń/]Xkۧ첖x_,OVcv ]^+tf<%xB=N?e_V44JK+W̌kWګvHn1B=k/Iž<FVyjN^ \wzT냳ʃgW@}:fp~ۂ&;p%jZOUķ?3K?Hnh=:?vyz(u{&_[mF(ygu Щ]"""""r;owx7p2'N5"]*7 +B^]-Z7IG}'qtm?y!OjHwy.v~drj]`|woTq**)Wͫ+SĞ 'JZ˔‰=N)LDDDDDK úG@[%(g?Xg/ŬvGy57^%۹q*nh><@[Y,݈PAwiEnX"Bt dG+q-&~LW%N`i;\h0wAtkո{YJղ$5JȺzM V -LR:*r % j|:SWQs _V!FR'Da,$FGs娪kA Z#MY4|OK[Ě=~{f@׋Ou-R#Dquj*tH CvF"LNZd!&""""""^>) OL˔'c zܞ5 qց8|rOsd FQT)_IKS3J/OLqKW b}yؙsP)J|Y)/@>hErbc;]>_TXOg9qV68r뮙"pM.ͨog]+=bɾ|)X ӑyeNN4:WXOⱻW!2MDDDDDD>'=,ķe+nRRO gf;BEi[d]m1=,g=5A~k*QP^RMMKvqhFdcISnLDDDDDDW/l1)["ww+эx!,})ݍ ;i`?Hn-类ێ _w_InAtT^ DD# uB4jAzb4c±ș1χN׭-8g$ %>e5ݿoƳ 5B֣2ckgiVߏ<K0,=մ5?Pm5bd|n"dqj+KwVI!A8j\^̏s򱱼zۘ,F6lvx(x.\~ F Ag݁.2x%yfJ3v6bx>*!ox''ERK=cFz8w>ݶى>=*:PPs APx1&B "!FkpX>'K=XԻK0Y:1&\ @YMР~r[FXAώȱ Y7ș{LSBݲDf-ٶ|T`mcbLh56& &|\no谩۵ hՁF9nޗ3%5j X8#o[jcP^n7.>Ӆ|4-%>SRGϔaℨZ5y;.1,DDDDDD3 v{/29RҠYT&Mw q u+ߟN|%-κ_;%lć.qj<=c49[>=Yگܢ`-<|6TQ ὎fATb3ذ>ۦ\݉\K ?LA鈍FXP*TJ:qğq|U[|?Ot> ]"B\l>$<`_vt?f#f#vh) k`< |Z IDAT}bfbV[׋xx!UaOn[:;v^|r%C|9РdQRvµ~$nLGҙ?@\,ZLNSRIvʂIDDBQ˦.gNli Ѳ'U5)^sA}I,V|*j@S[i0͖v3*eڔH<|> ]ФPUPҳ+Bf.sZF}~{NlZ.}gN J*XҎ:)[ J-qi<:b]TK?D}s>̶F8]}[϶Wt\N+OG]%>.P""ג@zb4b!'dmw}5򒙙؛[wK *ԟށFB{?a`9 Ӆ8.V"&u}%#)N4ok{`5SFa,ܱjȖ| z :|)y6l,FQr 6{S1FZ~s+N4w uK?{j_K ĵqJ+T{s d\h] mxprЅ?D޹7TTȿn+Dwݝ. >Jkvh>wZz],m6 } vq6?' ua Qf\dX5lv'lv'N[I1J˿-,;b~7AV/?'M ,A{nɂDiu# ME;AP7,IDDDDDD>mM?@ă&BPू8=>ΞG_Wg[+\v߶`D8W  _xog󵛭xׯ`4eiO{m˗Ptgǻدe@}fGXDUAi&U$ѠQaAMl`,Dao`(7/~[kvjs|)`{_[;5塱`ڱ)ܲl栖iԘoڝS- ݊; *nOID͎*Ŧq}N,Ѡy[َQz$IM5hD#6YCWdY>ۦɒzLײ3/13>BCt;V[3toWf[l^-n}A`?DDWMN3VFC 1X6;S&cxٴwkNNA B!ui@P%N8|Ι"KvrR*YhWfAC MV˅w7GEH87OK +3F D/];\fKL<Nő^*kh}wϡb31vŀdžO{[}H^} [q>:Yjka!$"ڰ?\5[Q}I:a{ Ͽu\h{RR`-[v+iVQuQnB4jxyM͘*훓q nQgNE^7&[PH 4 lvz=p~>}޺<}>p Oa&""""""S64' G A,.E.Zlf֟}cQ֚xdA].ml3C1'2s"e)@F-}6'2A JQ([&5(Kc46 J?J֧%Khnc'0D#8 a˯>UQ@c土BD?0=_T0M w~AP֥/ :ljOiߑMӨ0{W.S٣5LJZ 2v >ȝ+{yƒ{CDHd$ E'#1f ށR vltܿc_T6e1 qpGkphi/E\~ףUoO f^tHܿczm("fbFzL_f.f[ј >=(23uK_@n8U>ZL%pyE">r6O Y8A'߀8tuXaijd,NNz : \^xMH}k]tɩq^Âp,,= ڋt<;+cq *qVaAE3ҡӨG4/gOlN>ڕo3pOC Az HOtDY0ȧ{\'<#s A!10Pdm2c'\L """G[ 8!j\oODDDDDD43c-'4҃,kDDDDD*A) Ѩ8[V;hF:[hH=[.~>^P΀-T2[1\&=io}!8LxcҧBc^[B!dM^MDDD4α&0fS' ΔJy1LO#A_z4R:Π7?%onCRX+cpOZB4^EeRI芾sN"Uu-XQbԴ X17 3jΏb߸',8N,}%0lD33Pp"VX^9gQV́&ㆅS4fMʼn>ӵj :$Ą!;#s&@=U785x}VʃL|e݀˫j4t@\68;qibDy88/aw A Cvv`h:>l%I[^ŀmmx}6NR!0n-=؈ };=H͎o8o\jp*;)4]<O,6N;Ӫ-N k#Ou9QC7_r{x‰Ɛ%5h-J WӅ ?{dcnUJ ^o6{W^hjSC[1jj)ݾտËt8妮V'^}mK&Aa&"""+PfAsx#;]!ͼXq{3Eb"`DDtkjNaJՆO+kqG+.y[N pf6] {ϠR*pӒ<1Z e5xu:f +D7"#""w>ڕ+wr="CQЂ?687Usq,N=Vw>+iDCK;<=J }zU,u_4t ~Tf8cɯG3qcމ0`-uB4j\n =11q̈G#yE+TTB)Vi{'v7p`RH099ݿ 7(,BUvCֻg`ZX>fMŅ#O @͆gOJiZ>&Y\} gJjp5mhh!16 cFfbeMIŃ.8_v8]n$ƆGmxpP؆vZB1++ /9^ņ-WXv!7+f~gZӛM' ~j=4=ʈƓbSp{n>=uu,[`5ҙ6e㝭hA}oH Serͭ(,͟WΑҿyi*뛥w jDKn'%.?Z~aѐ՜oEUC~Q6"C~znst)n.FOŁ"7y{)i1u뀭L#,p̵/hy 2?4O`9F$nUuAۼoҨEk< V!~-Х}z<,GD2~R{Ev g#l]Knqz>:Wl:*aOF\;u,-KF̷Cl :]2wígc,=;jEHEl|)y蕳MxxaX%V/bzF,X+"pjkf8WwQy(4P|ՋX!V/NŠzYv椤1?.$] z\S&z{t|N -H۽(!F*֏ a7nGҨAвVTt,'Wv;`>^ P~r<* ۽yT`;RP}f8ϛq!k" _N7_G'!/Z%tia]k- K僳[o>i|yvcvgЙS#?Gupu}w9otU&<\9 ey T!:|5}O9jyY/&"""Q€mLBvF""Bcc`m׃Q]f{+HVmnJqѨ2[PlZxLQ`-r{\)>YS%xukav:!o[̙=Ӿ0sR2&z(4jdg$]= :ɾ>9xwa ^]z~thoku_(k U\u^=W)!oyio,Xh!."&/BdMI 5YBL:[y4PńSqm'`)i>Z;W {QD4</|DtPpJ66lmSۘ؞.A]7q}AZ-Mt&@) >%B$h鱻a+j~n%7O ؊.*~ib `hweA#Bt^`2DmR&Z[ۧEq_r8 kA ƅ yb>1}qzXtL5.k Û7p)( @i><~`mi" {_ʙdÀQ;d[eIw#o9p6t=Kqw8P0}^اAgc罼BqUkj4X]9H 2r!l=xQlm{(-׋ݟkL^vٺ~T\?/|fħ[ F=&pYӥhjz3 NǩjiNCX?ex-׷87-/H"=Ŗ'}znu1l(FنvEu|v4Z40QR6l]Boˉ)%H>-c\୏k y_BoD#s@}]oE[֛9% )Ds X]Wbrv-|V$'X߬6%EGκ4NS0ᱹPmR|ݖE'1;hT c|& lǁusi&vU&l,ي-9{u݇f:}U><ա}O[ \ ]ZVwV_:5P5~)k!7!k뾎^es@вd'hz 7C>Dԃv&"""̂Ӟ:,ON ( 1pd}uB,>DSxY?knű&o hRdk ;#Kff$v1[Go/ +M۶‚xF&DIc걮WWu;U|T(5RA^?~N~X $D3oގϥ'Fà !&!FI>GJ-FYmٔP)ߙ9K\dtRZULs1q VJo;6~SEǴޝGU̾OI2BBؗ(*jժ\Zܪ.ڪ^RU @$̾1afN& L$<׋׋sf9s{s+2 _+Bw\pdžvjς0A qf$7E{ Ն}'@ {s!Lyd݁FV G+b> c-P~ r\6 ݻG ]_0,U b$>2dyd5OzH Ԉ ɅgEAwͼɬ^h|je !BHPuzH I_C.`q/u⃚FD^k>H\wLV;as8;`Diu J[6 ˁχp0H58u͝}Л,20%/ jgQjzo$(VF%cIΉT'}WbNND)*7<']vH䖮>h3Z=;;2k}lC~f"${/[ oq]~Ysg`|:9B&f+خol3qE꣩Mv, v߰1¸-ʏf Ȣpt֍)l0㵇~ֱVyYsee؝vfYu˒_gB4lW"^(P,Ory s?vK1[?F0A:9+^)`,nG_N95}p\ x B!)ΚVE>QX‘;n,*˼YE"Z: lQ+y_zJ@AN?|b:UMum| FÉ7?;}fzB4<r3XCQaS#?` x"'EƯqLd-7`w=ƴLul U1;+iL:z~jUa9 !A?nVo:D(dX:;UeKO-3a;Ц/OOg08pJd?A &(Cf}vjSCkʚE}\]G/{{{uiL`c. ^%h^#g~|f#A Gp1{:B<>` !BȵE5`S OXu5Vxr!"B$wt|X1l.OKKzy޻.gA{bYsv}~ + &౻V;߸>3/ r!!YcٹSFGFb 2ߍqgk}ۜT0%oǻn`9u>`^%]_-cM!0!LM _݁'/rc]a<.JinX(@nz<[5?+^(97GBL%.P_Hvkt 8wDJb|n4| t|. زO.(9,p7Ih) v}s/ڧ׊CcBۯYv]2+\eB!\+VxR,[݁I̲c F<~vO%s2>XwbCJ'9P!rF rd6݊HO*c)u)fY8V. ro˅ɥ[y3MfǾ!+Y)ə"F0WcX,Ř#txgQCGXH%!$X}QN;W\es=~,ߦ!5tT>ԸN51W<5jakԂ p&ְյ\tlGHƼ&_*!ɍu&!cFtyغoP#bX);J3rkqbM*+xr߃!Yϼm -P#:~40.7?fK)=%<>gN:B!~-5)U+B+Kta04Lx)Y=O \t&ƍij9'r]a_/l xRpD4e`0Y`T&{r`'c"K}::ާ3^YiF +r0|6#)5}0ֽXV5='}cZV0dl[rlc{?} p9]MXٰYlvXr./$BH0LcN.Ƀ`pF !M5rRٵ$LT_9,l`|34@9h=kef%VyYidk\q_Wֳd]Vtx kM Ȣp6 ;t[eH~̥iX i Mf=} &t|]}l.F_bV% c]'B!l/\nK*ם_j櫢XӯW֢f/c:7LxIWEBkZlpxHU' ۍw}CUFìe$Nf+׵u&y}0A*Sr8@?/Bљhlנ ~ge4fAWwrSUpV:*?U j&:R(.4w) &&}NUyjZBT5W%yX>7J߃XOU0;xI%yS{BhTHV7Hkc 8/cBJP7|]>sz: )- <զmFwޛ!m78|.n`k{۪`pyu}{+a}x MT@!ADPp[5텢YӚ-pjpmQ )0}Tm=&hC$͏E[wBTiNt뀲oADe๵A wض}4$i˻a:;`8v*J=WK76WrEʰc.킥'n5}2ɎE3_֨](EH $;5!B$aG|}W_cW_V/ h*7=T5xBnbߘ%,lq/"\仡E fu[nb_0mkjE·h>HvS]? ]a[G)\g;qd`{O^Xn(+ *! a9pz<] 2㫯;.w5c>q*oPVEiu !,#x)ϊԶ!v n<6/ì /7\v-F*viv e/Ƨ!Dy_Խ-0rtA(2fwվyjUfg%Lqk;XJY󸸥0>3]󵭬ϫn_=0.N't^Ͼݠ7Hgt 캂xZ䝞Qtʬ<~J$a_8 e0 >q"VP--Wp|]:{Xwp FT,ײ j ކԴt%0{dy_i1ktNّpǍsj̀!%154d'/{#Vᗙ:nﮣe|7,]es7AUc+f^$2LF'LBȸ7ð"!O޳ p9l\=fN} f .3]z5sY' :F_qx#8@8P@;%Dna}P5 xc=eСȻWZ8' 8#ߎا+!FmPApZ8pRH↑<cq{g.ϯ8k!|-P=2g5xJQ#GC܏@-Co %B a;6ߜTw`0BaQL=/ڻpF7e6Iƾ;-:|e\._ rp <Rdal$G~ H*Ö/O56ݶlLxZ\ĩR&Azb4d|OqۡeWux\+geqy 2xX48pXv(e'`]a>#! BJ )cQX5%rf+o P-*LT"o_ݾzp XS BغL(W2?R&!kA9,{؜!PvbpݾzGI _óa*nH@>12}\[8">d<6{#ox\c ӡY KeO-ln"6 'AyPܐG! [23m`# Z`f#$]Ea Unno=l-:03fE#,'uS-RnvW5akmqA23r _2P3<)XE5]>aQ6G_$peB!gO) kWPB!B!B!IuߓK%kA]k !B!B!BHdڋ8ѭ6OF!B!B!B!!QhjB!B!B!2$2!B!B!B!L B!B!B!B$-!B!B!B!L B!B!B!B$-!B!B!B!L ؒqs3 v6Q?edN^oJ!B!c no=z*|7!BUS酔GD X.3{_,&UuۊE(rۼvKNjKC!:t1`0c`PG:B!z4?~PB0f L%JDå+ЩW[`n8{Mphg_7po qf$$B!!dX.& ppuyþwok`_[ה jmvlojná`-!AR=I1 Xc/.ese]}{׈߼xYBE 4iOU:tV/1ˇmk>6`:ہwl?lbB!\] Цᒋhh 0d`ID] F$XmxdB_-։J6;$|dRC s6ryN?B y}}ϯ䴃&\LO!\N,BcfJ XWeȬ;"rIHd'cAn#<:U]\fx2%``w-:~wزqr8,irUS G.#+RqCLF{B!\l/uZ8}*XNLZq"sMHSQy~l pVڄ|O?9yzUZ>k_-i xwq[ }SX(@v;7[ի!'ʱP +6Я7Xi +}7aFj\HoMgDΈ9q߽ #bMo12O߰0o$?^UDޛRȓ -U\Vؚk;=㫇pC!B m}qj퟇Swtgvr>) ٔi0>Y|B0kxY|~䂱ޟ6BoݤxlF x:#W[ WbMxT6!\E};*ayp8=Uml'j#2Iȭ?˅dGnɡ1QlEHFaRR_wxmE}q7XP,OwSB |U peB1B!:  IDAT#*L.,ѕm=x)Xm`BqE#w>ذgܖO;f_C,,WGC硬o*.CSzhnǁ.ܙxux;QuA<]~ xo7~i]HJ$Bm?t\?h Vf}k߻f!V. ݁#%k t9)[Bo>?ZF40nUBV WIa#.t1U/=!BnZ< 8}[3?&R z:wBnOaN}"K+zFVYsZvӹY]^Z;vX]]<.&lkjEˍ܈0|<$U !7jqL=/?;]7`iҁ.;(e:]shn[3Λ]}:Tַ R1P8; srFpp.6w"a2d A_wLZ3Zy[17yR3[o? g㽧Щ!5^']O)Gт"nʸ0m55gW*8#ʕ5 ap2tݦao3zgR n6Ȝ1WZg1YQؐkrX\r / ?v_\H3lMp Fmg]/D+]t8+Aո°}N8cq0gEAl&L6м_ñf8,yO." u|51g)!B HAFbL|uTk9Xk"ί)t$zx)XO+0)0%8z-^_I˗Releצ(dXK?Bkx󗬎7oԷ+`0 u  f (i s€LVinthcYYlvޣš*\0[e{OE|ބVd }'je'Z?oV˖j_&Rw}{'Lw^MKj[=0wFʸy|t8TrxYc׷x0;+1(<6!$T]ldM=rkFm]H *7\{Lz&8_TCn/ooӣ)PޘSkAs`.fwm0\'>D+1A$xV_ymKEZ~>r7SLG  [> q?^wb y0Nu7Gă83sa?V4+ؚ}$d[W!rLYrU$WCM'w¥e]h)B \21۪CcuS)EP`?\ M0t E_E'5B!\wR\^g/{Y*|oON& :TvsUSd|>V"3P0[ڀ`-]f<+˅]ZQ7;*ˮˑ 9!d?!\W^ Ud'18:z ?wp8K kJSuٝGJYZTd5kesݯ7y/7 u0YlZ Ěnhgg(Զ6ddG:4J<\.;.}W窛!oG:G<6"(W[R¡\ͧX 2_QF$y1 8Vڝ՞`0a[1N7ZJ>ZB E ``0S-XZ^5+=e-i`0w}U&!ݻTzpw*a7XQgGdGŁ+#Xs'+xw_O6w{>>o[*b}X vtx ? {B!\%ʰ Ӆ%վk fLԆnpT._Lk˪FAyy ظȘ7F"+FXZZ@v c @`%v ?ZG.qxn~o__%aCJut~U#c̫rV!5Nب0<|y 窛J״z/S9ݧЛ,î.;`dbX(+C]&ʰr !Y< sr{_yxh}!L>_ p0mPö]cYh?zmuF *ڃ<3 m,mf̴>YF0!"2[ca_nuSmޯ/Dy&+co J$LT"V]̺ȍ3q ˻a,n \$jOOzokԢ~^ 9}j4kmw"Emqp}ˇ @]Z8Xg Di~^WO#\w;: w"߯W*DO|OҼ_ȻgE@gyѳ.Z,0ie [|B2߻doաE8,@>cRf:[L+'#y5j=l[g6^l-b8:Mek@yc*Kr~xL6t~6<:ߘ5aY߄B!e^C% EyO1dg0` d)ppV׶OUX!2BQo (Žɐ .Bi%q6eAȥst;yFbl$_%ظj>}Õuu:]h뉍 }k7WlqE\~UnaB *5}cI9.ݹr2bYLIQX:; rNOI-HVG!4wedA$3lv̴xlkBH}Yn|;`@qETr,-_oBKg'Y*? =yq`m0& GʄgG]266UÚN|a5gA83ћ"sGFj~Z ΈA佹&hdeF?2\Ou,_[]0k EG> _B=j8\Ti#L {ʐiPX Ճp!ΎB9e]5zxr!YQdjoHfl.t^ƧvNhf3!BtD8[Մ+a )]pZl[5=_9`kl m݁pX\.Ͱ\8ޅ]X̅?]+q_F u\wIyM+N]Gsg& aJ/gQ0a"+(NƜd䤨a]vh >hsVv][cMID顥}i\3QZ v +X9;;iZG2>qn٘v c;V/{,k/S0m4)&D5E]Go]$c^vhZ ;5t[.(lo% q,0ilAO7C Bby2S  v<%В> Jo# N_cq;r qhO?B!c>&^}[|q[G{VMZ5&u} "0;*,V#w _hQLq2g˱gl?UW]AoDQ/31eB纩p-ʇn8|"0ƍgܴe (*u&5iK]b2xg&yn7>d%Dz!sL!Lwbv՛p Dw;$ BnX+̄@C[<> J([?`\wLJ„Lth]*\V4/r:z}Bvbd-?kvEh__%وkfЂiPSѸL^apB!r0:4Z~8.o߽i ftOx.c"W"B$DH8h>~>75oޮ\˻/I`ODƖ}rDɁ}$g]/杒hP59O:4&Ze%bQv-!Bȕ!tֽ0[="\.u#fg%MT,[݁I̲B\fZN!c ) bB\71.7Ny9~Vؼnn <]KС@iu3֢_gg ܺlw,&C+soAt ܩKBsgn4k)C9d͎}'+ݧCV7 4ʱA!Y|t6@)`x~vixUxoSܐuLp\1z F< F-lZ0\$ƫk\2y{mM>akC;}BaR2lDg18A*5"5kfyf>[ GUg}T@p8ЕV'O;Oֱq9!Ӽ+ Mv~tVjD9cBǞFl)Jy|"7Μu Bn(Owܺ[^Wbi XAZ_Y2 z7 ( }ZoR~s't:x2 Vz#L~Y@X;X8 e3bXsqRohRybHRG }OohӠ5lAveFy^|y gў<6!dWta<B&Fbldo |qqakId}V6ow6׷anVj(Q"wJbYӺ׮Oȕ H}e=+K5`ENj]@`,J jS2޾KPٻD6yl͚2ϓA2苚ItvzB\ލǿ@Ŭ/J@ƖyO.k !BNMݯ? ˑ v7_E݁_b u1 ~v\ƽuMb46$ q1ap8iCwzu 9u\' XVkLx" `lg~Cg=ޣP$AYvtV9UVfVo®#xalŦN0 p KkXHv9U5]r .6Mcj0`ƜF'j̦j) ʱA!]*~p9̛7fk20ٜ.7lvz׵='Y'E!_[Tܢ|n{sv=ܢ&Eym[,UN?`oӏ9xv_p MT@!ADPp[5텢YӚ-pjpmQ )}Tm =&hC$͏E[wBTiNt<8Xskï 'mhH0wtwp%h:pzO6;+kfN8]n8.96!zqתˇ{2嫟A({@XuKCr/KfM}1yiRy\A_hE@Z~z!N x`l>ˈ?FlAG<} ^lpL P}3[1)Dkip<0v_Ǒ'xyl+Sq_pa-hpF* xýMtHgFy G]/TnX9ֺ&H̎й&V;P7n^*_OS!:BЀ\N޺5o<7Ū3;K` WxƉQard8 8#ߎا+!FmPAΎuZ8`rE*7ܮۃW{lpiQ#'F\NZJ )EA?8B~ h~ϭ`-!BHPUzjmX3۱9'jV7`â({^wጦ/}mbǨYc :l0p"L(@BԸ;- 2~a}V_r2@&&SJ ?myj`w8!7=k!*LX>~:%˦%Dㅧ6LeJ[ԡyz^) -!f#?+)x..Ƃ4-Fc[J8\!EvjVq`xiu0!?+. eJJ3h\*Fj IDAT2F]ؐ2I]_X<[8>St۲;6!zni>Rqt5XP$MO) P$WH‚iGr̼2lC0Qmn=tak5`O!d a2\JQ?E\cs&dft@ey|t%|qTφ##~Wql͋Cc`8 䍀BK\jX*{xh)ds!⬨k.QAqC ] lhd0kƛ}ʏxwM:ɣpVA 8\Ϙ[ _vϱ,y#L:1N KT~}oB?Co֢l.Q#7B4 \B!}Ϧ1Sj 2mvFs!+L׮!y7[Ƶ#cLjd/7 vrjB!B!BȴtߓKd +{k DB>k+!Mx`>*\XE C!B!B(`KYlolxjB05fG]K7@M\]Njܘ!B!B!BTF[r(Fa,eBH(a?ʪmBk ^f7{K5ap ;J`s8A!tOcǡC=z֠Owfƅ6NtF(n :BA;B!BHP6X;j<|^EqovHQȦLe)ɚ;OzK6m)WOZ;ӏȠ:4xq4vh}WlJ w8v!2TԷc<Sp6B)y\p\؇<է;;oF;B!BHC .޿`7<.nar3 خ_g,6nJ~}8Ϣ9-9v>ˈSsn7ޯmNGcAt50jZϋtwVԷk‚,!)d+|@kw?W0[}<[(5 rL)gx_khנ_HC!B!$8(`;(:BgYD,9qs\wbuq3 ~~ `uE<xθAok58׫nnj0.; +9(8]9- `9x9;`ĶgP cp˲M|HOvT5v]3\*Fr\ ggaNNpp.6w"a2d ]gيz V/3:B -=Zv U9]р{o^8k&H(Kp] I:#l !B! lD(/Ct3Ta.nN_/,Wzx)X`HY9V 5aRګaKpZ4<ڧ -p1˸Zj_vmB4>1R1navUjL>[5W ?[p_+o.Զt{Va ay 3`0c`FyM+n`O[wC3ocG{r it:^PLDDg"X,BصgJ zյac#B܆=l`X6^")9-MR7냿6*`u8mMu;;.Q)†,?/HRy k@M#ںEA.5 )߻:`{c"yӢ C/O[2 2c]*{P^߆U)7IBX#42C3ŕJR*_h\"J#o޻p Z݌DI#doppsWl6->}r&kGVǡҾ\WX:ͦa-^;tws/]rauR4v箄T"FtX6e$ W7u K}qu"B&*,7Uduwl~ZBl-wP|sᥔ#*,>Mf fg>3yqT2;8²z*a=麥O zSꍈdF&3JQZՌK[1V  ʙsOI½'M#Z\sBt|~NػV-~qphB}6:~uw}U AyrjߞauW:4uaXPbqN#6cR^y7>^XIH x E z~o ӚLDDÑ7`ٰ+7ojC[~mm ޑlDDDDDD6 N!)& ?{@o0/_@qE#Fm+9Y'c0`bNgUP҃Bq{~7Ѹm](&" ÷ /|r VA*C"&SfM9o4x(kL301V(WLq%|'7[2=|g"".k5pzhd`X[2p)Rֵvۃ9X |岁^Tff˂\g)lRO~֑hưF'aAXi‚#Z cz{)Zg-CܻqNɌ!ͨۏjWk(hxxG3- )Ⴒliߒ>J, cr.$b1$bk=c=95 sV"96Ru=x0n3P;`/Oy !%7ѭ{>vL7徣g8)8܇ld0,Q @bb&D"Tp7 ;-I1Y׊ Ղ#9Q=nԶbeRisG`W;UW+w%rW%OuP">*kMS':z^ľ5O3n\3-  Bsg@,aMr Fm+J*ˮK[~sud007{o,܉mPЁc1fܑR6p\4TUxwKW?RYg6 ]˛!ܥ7Цz=ct~ ۍ;yde6A밯_bZZ)K7K8%+s:pT呈Rzt x)LNqJ9KUXMWAUx);7sE,2 &if&eʀ'3-2`Xև;ˤM{+Ox)Y܆)1 o2 !H ¥? "U)yK }(CQO 206yE=}:5FfFݰFNg;q3ȷonXq^ DzPO~" `mOݛ+خuNQ6 rܓ-H:&<!>NN|&ń=9Rw1aP{)Ӣæ}&"cE\m˴_[m6AV!k[9nE"ߖ5)!۰{̸̔eH^ 5V݌aFx lX\m1lR¼x#(%d/ 7ҒpE=^ґ}؂>ĸ_NZΓ.y_6mFuc' nbpd>X{6wRߘ`<}8tM0ƊHIC ѡ8rl_762?zn?QZՌBldS2!j)z)'wϡo1ax . LDD ˮXW_oVEbWJBH.[/$D"wU¼o""""""_D=7nnGӈa!X8/U;ߖUWhl|W+=ͨ7cφtVy$liJ{%"TDRH4?V5+jl䆆̻c~56슊g@Sh^ݛ'qU0fbc1`; H "M4hbvA%L챖 [;]v`cD 3-]NZ_ *Vy,l_TWʑU[)r6l%j =z5{7A_?_w\h s@M 8~ hKZmkS/=p eR vDhFL +͂lLFxh2HfUB3LX$ڴ8d&/CTX |U0V.fTnDNzt ͨ-}V݂TdܨiA[(2x!)& W#:<1գoH! 2!ʾvJ[,\Ɠ<8{ C|t o=DŠ3khbcXJ}f3^k7 ϗ,-hsW,~ظ:kS?oDec۷+6527=V)bks:~͝}+Yg]`L*J l^߽yMeoAXR"GtXÂ߽y-]uN  ?5X]+7NxTf_C[^z4FFӵ::ںpkScԽPeN_@HwB>ӹ\sʓ3~[0l4_N^/-h#/OԱB&Ws{ʰ ŗmkKC9|sf2"""W=rOSv2? =|-X,2X;Rd \obdvg̓k;JaY.^syR #w@DDDD v g+kfe;8?tH^#avj/5@dbiAۗi=W;D;_\/sWW\ޞZ}yX2i\pDlo#*ks8]T(2CߠVbciFF|dJ\^;BU@!bd<=>/niB}?̓l8^PC_? Z Xm@Kg.ݨd!om +mx ʃ35l'ŵf{9>*!wu6+l9}DǧT?ʫQ;!~ w\ /w`y×N9aDL7:?[͆5x-- +Vg?nnGCk/w--pKh/p =ceCiqxD!6K?<lF3DZK7QXހa-"‚5+U*dxhZlH/Q;EHAWhBkV4ⵚYnKDDtJ{G p Ig IDATe- ƨCOӪ|_gdV)zcf/ <8O`MP\'t A놷2XG:7oǛ'(~xԵƨ~QXV'5zl#/xamڝ5vfmy&b#c/_(Agd%cUbqd~jD] v DB4~RȝƂDZ˜+FF2pv]˂`H$FE8 s~R#BDDDDupEz5wU< N])Ͽؼ?[ѥHo6f!m/U6-ٿIcgg%*%^ؐ4/|vI4sߕM[4(ɶN! Rr"VR1ЂL36=߳1" +;w˻Ta=q7{$1ـ 8x2rVMzOMGF}5͝PeX8v P{)m3}17\[{92$m+25Lf8$Z o̤gL~Dޚa`b,ކ+8p!D,?0S?X& Rܱ. zeR'DacFS[cΓS {R OyM‚,<A~I%p5)Hy\R$غ]W\ns4>uWWaXCNz[?EUS{q>]"#k2'""""ǀ0}*y}l5TB,ިkB;nƂ墸[&ZĸZ;{:։{ ߂\6TIUN=`kPziqO^ᛱ{+A+u0uI߼yH% Ȥ*:aGS,Xb5\POHMf7axMN+bI0eZy0ĔlAc{/}Ɔ;q̤N7ZO. خ^DDDDDq]Â)qkAܿURg>{J' ? B/lF|5%~ǎk2)]/-ZsWB,~e^7wʝ}10h/h-c=e!(ˤޓwf{YfYD0~~Zŕ蚢Cus'~ޗkW:4uaXdvZbz̹6+ :)I1arciHݜ`?'"""yqg+z JŜϪz>/"t[fty7Q;<"ka ۻGbD 00U,#10ť >0Mn۶R.0t0[V  ݝ1s]""Yt nŴLf ~ih]?{s O߷)+Y8гm.7/R.CdRKb^NW"""""O~|?=H4738%-iD`=I;{F# h?_^ 0m׈Ʉ 2zťw͝}4aV WS¯_*HixfKҩܳ.jo(<,V+.߬i_yp+-AS{|]HxI CLx`dFi.+B}O/,V+|vgR 6-탬*٫Uؕ ۺ`qؖ 3^̪EDDDDqbȹ)I `l‡:{f |x|UT֙k}x6b\7gC6^g]:=~\|mZM{-(9PH?K0h{ -xanr94`m%E;!dR./37n;' qUP)Q#kE,;30L؈D. =7_AuSK?t4[;-6} J!s!J غkDDDؗ)i&}\jج6F kصt47szK;d8^P6ύ@8O{\fũT!(`L>).[ RfX!M+^|sS1_VαTфWqJz;w2S^.jFiD`?'DA$A#62cLRʡ39tԕrl_v`IdRG|ߐ7fT_E8VpAU|՞}rPf䞻j/ cJT, R*\*9S*|seRdvҾONּ>8 FfFݰ0mTg;q^ؐuKn_*nZDz o +Nܤf"=('7-Jxt=X$<<5M;1uOO߽3ŕoT& -~)֦`DAV3>CT5v}_`ش;L~icTXflS.Ff3SS|ǣ(om ؓc:NhNtd$/iBY}خuO hꍰlˤxlA%nٮB.C^Vʔ˪rAbƒ҇Nڤ0<'g>I|%""""30[z6)a^JVU  iI8։"@!NjjE FeV{ap[t?hlA~×ĦEhlTF@cXCyC^nO3G pƊeV+*ѹO5.Lt#K[8, 􅏷Z(^iSՁxM CuS'Y.2ذ:$*:QZՄ 5n_oɌa#ik5bgB,➵?FJ^ W12:+ aHxinCރV *#!'~U͟xT=m^r7j[;Q=l6|XIN[mUDWC~Q%.ߨCg f+|U[UHsH矹ΖFX9iS#!:G.@Wb#ݲ]x o ܬLjV? iKgC:P2|(*oDiU3{}U AvjV&Da6GgDDDDDFh{ϳ&hl{ 5Z@ݹCs湟`eBٱK}yt!""E=J JqE{k;7}VDDDDDxk?c[ZzAgٻ9K]YDDDDD䒘0PJ_+x`K6IbGb%*%رz~C+`Мb[""""b#>8\)Oӌ陉<h䆆 74ADDDDDD=f'F]!bNd""""` т!Y+b"ADDDDU@DDDDDDDDDDDDD47%"""""""""""""#LLDtgX DDDDDDDDDDD=l DDDDDDDDDDDDDDs)hѪlR.|*E"V 늈bfUy}l/ G 7D> ?+"""""""""OZ! v/݈xm׏q|hAzNj᎑eQ]hҠoHhhj 4`To+"+7 !:Kk+dR ĪhdL*;OMf/ @;jR1A$)& W#:<EDDDDDwDDf |#gp}t~j7h'3`KDx &>Z/FaY=H^`0aoTZՌo@H?y/sC#ZZm8UXx9BDDDDD-2=+H_++PV׆'k{Lfi kuR)Rw O< ks Nղ҈އ kx|k_>o?ˣR%̽W·؉t FFFpxZlJh٫Uxd}^}[xAFV] hå^݂8Ma]ŀ-"t 2)# !:aA8yܣs`D|XↇC8tm^=u6V4Bi {13OBLx0d%#1:[(jk5İV\K&erW%},RW3^DD _ecEw0{[+J]9M8Vpfr zy(2pJ_Xz ľL;];yʕkB׮'?udWTp+8^P!$DaKfDtGpe]+G(ADD!KVaD@Op`?I80bKB&ŎlOrЕu^hHs3!62SL*Μ4IC{ JpF'.aφtȤKDDDDX--X'k賿XMӮ$(׵v ʵ-]`%tC!۱lՁc8|+qh:^8+J]9Ʉ&""/%V[d`4{`>[L]@"C"fi12:ش}`c댯\&teQKOU_6X["BqUWX&Ӑ;YuS'ΕTg'1-x -2f f˴曄PAsڇ142CW ق+er>O*`ur,.-N+# m=^ӂ>tOe䨦MigVh2}]+GK߷_AmK*ql U7KHD#:lX$šߜ(l[|p40ōVRW2S^.jFiD6, Qpg_^&^|lo}rTK)Ǯo('jqT~ĥkh7pJ9N^)vy_ovNK| J`2[}Cߘ]&bgN\lsX/_so*p&_17 VBpMʺz58]Xa/[m6s٩qfkr)P`S0~B.C^Vʔ˫rd8d,:ʅkBWֽK:c*%,։1 ,37:RLؓ#ʺh!XGndM- NcN'62#]GJ]ZuR4\n% Cߐz*++nfgC:rrW%[o%Ek3'mޢ*rW% _  /%ねkPȧ] J< m=H3oR!x]gWX *%4F<BCA""ZBQz#V+}/=ѓ^Kת4]."!Xr9HO;ĄcӚ$z`Z!BBtv{r[loHق/M5-Fr+|)R"`eh1-JWcM2<}o.6IOdA$هIFHۚfB.+:RqZ Μ4DDDD zmoy͊~KqFdz"6x𸽼s}ܞŊ!"""ѯcRȥ9ygK@ld+h1̂DV -h Ѭwb%ь9".""""ZĬ""""""""u-ۼ+X!DDDD1`KDDDDDDDDdKY)DDDD1`KDDDDDDDDuBDDDD ǰ%"""""""" +%"""""""""""""# D&""""ٻ63]wR(QF%+qe$Mݻ%M8%ĉۑe[.zdH{'@CP,;G|3 y{_""irPt=zd%G#5.BDDDDD%" *~kՐJ$Ѵ{Nj^}Y"""""bɋ\FDfr44۷7Gπ H=_+""""T,jT FNz< A6wu#Cgvy}L6-тrα8rRfwh{KG"!*+}޻n)vm\vuw#4F{>ለ渃ʱD(Ơވ²ZW6GbQbԬ~:jZq\{t‚x:OkgPɱز*kT 9#~Ԅ~ <&-{yk'Lxi X6}H7~*FLx~:yʆ7)X>3b}'7fȤPL{@??<H0Va!gLx~.{Omny'ݷa<DD HHRNZ:%Ӡoe,H;4bDqer|_lEfg5$<ת A>jèيg+HYĦLX6.c;3GD?Ɓ """"Y["dH CѕF|aH$cÃ3%º]3~?ƿ|!z~>8]^,}onBIU3Ζա& j$D⮼EtuSnt.סoz JAX4ь9.}l<5Oh|Ƿ{5$NJnWGzu9 06ţ^ YF58{NvPg`vjC:7 F/Mò)wLSи/yDh['wһ8ǡTȅުt:q g/ףoH݁˞~kpbں3;V zcnScyRM€-p呓R+ zq$>2ףKn{˿f5v7B&qeņW9p[W-myLqYo4}'Q#[5-ݨi*|{|5WpΔuKQ)P- @.JjcEDDPv3 ,NȖq\aԌAG$4< {axdQ ry9p\x坓(i=_ɋբCz#F׶!?' O̟7jݑwrf@dh4-z:W!+j͖[~]߽݁sJꕹ\.7JóɗUuN'^|Gr-4q kjéKc",W}6縷Xt M|H% 06sţ6lg~? rǤ0hH$J}4ٙZ\mX,0<߯J!GNz0+QљZl?8]& j5*G 7u8t'ΰ%"")%Xo^7-5[/.ah(}ܣU{.kmkPR,j|}F_slfJnY:4*W=RR`HjGYM 4]1ߎ9(lDp*Sbp]X%1XDU+ raLt }?s0O_tXy)Eqy"C}dL8PxYY JkZ-w _?k>NJb"aGg1AH*@oa(o>VB͎_1qށؔj'%""(]\p/ek);ݾ2o| g&"3)gǺe_?-hnCLl-pFT]QeMˑ66>Q؉OjZ&_XZ+kmF[J޸`ܷ!S]5[G#F3~c`mWy:G6V{xŕ bmN(`l17~@RL޵Zy_?z,Idzo- mU+D۩&.k7GD.lnAu6Bm6Y“ -xqh"Mmjh.ʴtLi-,V;2!5-]{߶AQ;5.⦷miB: dߐ^ Z() &,IŲx!G V cEDD 8].l_:7?~=lYVl6\Ҁ&Xm78y=O>ö[\kB{H/hwtDDDDD3["|0Q# ?_WƎu9c_ ]J$nXU$džc5[o_Yתoz[A|AIߤ`Opk3qؒQ+,4Piq^?8VDD-*\xt:17|y=|viGB>ƦL64aρsrp*jl_{xe T6t,qH 2dGLm,k&`DDDDD0`KD@u oH탛 1ޖD^GScQQ׆ξ!k76.ZK\.tu}{*qcY%UXñ"""o VÉIa0YDkf{Q)J#۽Dž'㖤G}z( hؐ(rfﱅ1^n7ɤRwc2fA!""""0`KD ž,VT״FԨBc{6;{6wM] BFBT05,~*,| fhT)Ffǹ_A3{ߐ?2-~-ޣX _&GWg@Hܵ"aXD -V; KkU Cg{C#Fݟ'λuΓ lN S j7OA)hag{ )|dRfdbz|{QӅHd&E Ȑ"]L5 BLFfM~0SJ,Asg?lv*QtQxG&òE B[&buvhW9ч6qow,#(jƉ{wt ˎ^议-]eKauȱ""ȉy __Qߎ)p'NX6 鍨oǛ΋ ,m2Rl503wN~@?fV;oR & wNwX8R*P)F|x `}_^?=_^}E2)_7ě. sb y߼/q.e}_B#٧Q)fmC$ IDATLq< Z@RL;e~(4*LGpgPEWuʾB ˤ;?|`aA CL/;!<жۭ ?}d];3xވ| e*^CmK7m el)X*.K,-SC'¾X8'%[aKDnFHVyx[É̤hcÃp:Zv=ܿyŔϩr_?D> q4GpTܰrU*؜9jnN&쨨oGWhywoaݕ+=MJU tk'aKDDS S;t ?_cF/Dw0rd$D󛖣_x }CX( N/߇ WPt=zfHŚ%)](TƱJa{J+2&eRl_"}bdB9BFߎ?:'Dɝ8VSMk 1: NJ* _5c=ɴ&ji9= Q;RԶtj#Y1(X-#plzuH X+hfVBbt(Vgx Pt#F3jduKQ!JMMRF^VΔԠOHAzb6#-mdqU+Ei}KDDDD4_Hz8DD4-~(13og;p /i-(aKDDDDDDDDDDDDDt0`KDDDDDDDDDDDDDt0%2-8bXmvl]s8(+""""Z\.4gPhEpPhFp- :ÌcX`HodJ""""n"38PxqBDDDD3["".U5H?z6Cls NJI\J9(DDDD4#hq\(҈KhȨ B-+3ըftں;#}!.2m݃_ <18VDD4 jp M}5[BVr g#,kzJ"$}d^=:,NŖUYT"""" -Ns`df+~8P)bdo@FB$lvǴ\Q)ضz1O MʆwDL#R[lv~﫞}QI!JaE˻t;y^FӞYfdԌ]4<>&<?|ff"A*GgL6,CVJ r4u & JkZviOG~pl΀xh<`DDDs{'. j|Dga0j =ɤR8N8].\i%)kUJ9vH$4rXmv<&""""Z%"Z@‚v@VB) H7 &˴GMs^wnêݻ(1 gLKL!nTPX.z0jF{ Bf{Jij ,l;aw8#qbņW9p[W-my|zksREq>2)B^w%5(l:qS^8_[/xPF (mC~Nؙ?z ;ULԴtNj'﹥taA޽b6#""""Xh؁O ˒b°89fZjDH9ihV\u3]cÑ/&H$JiNqLi-6vLY&c[^~9V3;VDD4ξR BeE(ieRY~*:嶏Ia "Tf -]͟><XQ%^-iqN[bcpg˽DZFHQp::WᱭċoNf A|TGJ`Ṍ(r׋~EϹcDDDDDg-Pvr $ Vd&koxH .lrfe5-(҈volKg`"}wJc{;ϯsLj>ΰ%"Zu`-aCn‰E /+ +̤h.ƀ0(<뗥#6"X[?@W֛7&)1in_+"=los+ڜ?[ hkb6!4P˃<-Ɉmu"U6ڟߴI1aȰjq2Ve' մLkiʛ[w*Yx|G>JBD)mvvW-ls2Krl[%WXZ+jICX?"kc.هUϊsi#""""8Öh2HfG6;jZQVӊ%x恻 ,޶}{& sg8׶•t @o4jXp8=-ˈRYv>_SG?lvh=o˱cED>9vj\O'j6u#M $|^AnjI7quJYvoH/R ?9p:\.]Vk`A6ii_{ Z# V&@Mk4Yq`E]Gpmy㙍/9Q);)rGM{g}}]K@JyLjf+ΰ%""VL*.Fp8Io˅֮ `4YP鵠鄏 rT 9"C  D\D0;<3qFp[2 w+"".aAcՎZkXlAߠ^~hOQqh!襹c{hXoPXZC*Rʡ@#è èjnCJl8kՏSv!yW7Å}P}sol_dVG>~2y:iqHfK'Ptظ٢Z }o@9p:q*_•^NGlV o6xbl )haXe_2zw{HzXe%G-+zNKU*|6ϹRlY噉<@lD0B7\G"nB\7ڥعawyl?GV"+9+)+Wfz,wVc2VK7߃B_54H@~Nڜoy9SvuUO߇Z\ڄξ!XvjHÆtd^Hp/K 6{Q3T 9X jwT*ţ3%5h( O(lMG\dȔۇ|.\i@ѕF a0V"1:k wQuSK$Wڌqð۝U#96 ksRZN`0,盿E""""$=\} ""{教zd Ъ轋4ϋfl_lYű"""""s*:Gvl<5CDDD4< [""^Cxh14J! $ ,VV6;||dP}Q)() Cz# m{M(kK5h=ZsNJhnN.7BDDD41`KDDO wr H >R$O 0Fx Y1mu )& >ţBű"""""{{YшAJDD3"ODFͰp:]p\FȐ'DBN@H$\a-¦EJ<0+""""9m"`yehbfV zQ3%Dayf"A*`p4!2 CvJ,hb+"""""W;p:2{-.lh^ccEDDDD4G=́ """XaaJd""Zp.U5Űغ* ;pPf ˅+#+9q<'ɯ:k4d$Dr`fDD,V3O"+9ѡY`"/|\xd%G$""N f :tpm[W/ D&"ZN'\F73d%.U5 ]JyNM@-JhهJ=hzq-vb5]ETIEHv޿ ?E{V"Uz8 IDATf-t=Ff Ts jp M}5[BVr g#,kzJ"$}d<~Z|ajS(nXlv h0`KD.΀ϔxUL6߳D"weX$~OYxB 89[VeM{ڿP*<'ns<Fբ>f{\UG!,o'Tp!`{ۉ'0 bhnBπNhNq*XmV 5}NDD^VЁN}dB]͎W}ճ?2)R)6hyz:^#n-ߗ7C9DD өKբڟjW &)AustQH$h(aZ5XÂ30[m5[ql)X5ؔ Ն%5w\cGz7kxdt"L _5DDDDDD3["hxdk[vj\Ĵ)s8BQ!!|!F͢{P}}?_e wk]=wpUM`VB|TaYFh?B[*>|+fw?# Ъo> ug;p-bR.Gp/".' t.סoz JAX4Q~һX8_#N'NWz a;~ybv S˒X<)lo?xz''^FcG/|d2EceHm8yz?zf"CysǗhugPhX#ΐ`&qE}JH%3R!kqr'2 6`!=^}z<3"""""π["NDE+fvE?tVf&E#%.V-7 JN7˅]7<2Q׶aCn:ߑ/<E\Dptn5{Eix Foq#F3~ :EM+:z‰*l[/l_㱽h+NGn5-8^\upBL*r;SZEJ/YT+ ֶv^cYzW I$`9DcB=޳ċoA[ &$@ ?DV#'=}C#¸ e`-Av=%ch9].'XCJ.h@W߰PS"sTT@ϊsv/Lq{&J`,#CiM rYl@Wޤ0D̫cTL| hWuBv~>#l˵mٛ9p*z~iۇA!5]LW5u9m\$F""$rt^.iNs32=yj]D[{[kۄr~=:TфKS=WDRJV"->fe5-(҈vJ هXUvGg &< 8^\ {&fv _+muu1j bꍸ؉kl d`M6^z=i.佢 V9DD3wZ)|\X˅-+3q\Yra01ؿ <]0A^V{l!-KCX^{12DiʤADDDDD41`KD$P#vH?Kݯk_ԨX6Xmv|!$DŽa}n:,Mƒ>>]V61A CN RvM}ºSb#z_phG,G V]֊_{h(6t];׵܋!`;]re%¾]cE3;\u;ǗhXg}dc5GP\و@-椉z(P I1axzzο]+al0Y%ēiT v. *䇀3bhԣƭ\frppbw-~cEkZcGN]>xwJym.\i@KF(8[=q2ⅴ]/J{:ozBwN"Ox,ˈGFB]ߐ) )g;;VkMa-S7EC#s3|ǗN;xN bMmÏ_~[VfbUOl%`ĆShhm^ũ#1:Z5Ox"""""ψ["jQmٵϰu:+N44?_%U8}FՏ_u ?(N]ƩKk"х!xnf&DŽ!)& ~ pS5A3)P^uKD4k;N 8_^ ?_]*JC`ߊ/l_My0[mhlÞ03rXUkؾvɼ9f6/;+}dHKDDDDD4%"Z@J[D>>zz _?bTwWܽ,IˤRh5=7 Uz|fRFxlpNlφL "Z?_3kߋJ!GVr4)Xtz^l?>[. ._,Fhfh!bh;wo\.zq!Lıkgw8q^hK|{ΛnJ$ţl.lC{/N';&{_P6k7aP7Jܻn)>c:Ѻ#CvgS󎌚Emz η5Y8r=:GBp+Ǘh&;X(,Vu}z=EMǡ#PwOEʃwy`ilvwnDD4ں`#eE4Ð RaU6 G|z 4Qͥɘ &W6 h% z_ 5[a 教 o s6;tQFpx? ׂ: ]X4`B,MrۓOi;n s:].0Z;#=%"II݁ϯyUMs~*F7L*L:|՟)X[ҍ>(Ġ΀0탛g-j]_/ԔU'|+>UJ96Ͱ5J#4NeH 8-6Q[!G 5QQߎ%Έ̤(rc<[.<1{"N`{ Վ!X ?߉L*daf3Iژqr;|NH-JEQ\ۆ 3vAh{aŰc#C>2d^ w/?9Cō׾5^Ksч77g-"HpKOg䇧vf]MDwH^V+3Q0MFܩ $ńШ0YlpM z q*^,ɰ8%BO~O^WO`hTc5r']夠஍(iԺFo:ﱟjp ǟXF:^Շ6_7M+N 3{gc~B\7ղj/8" z[(A1Vմ ,M2`h.sǗh&ݿy^|0\FG 4*Ŭb; @po7%jOZٲklj|SI$m?m6MKG֍vĎ%K{YHEQ$@$J J ~= {{yp7/OUo\'~Ф&/kf#ny+2El:$W$vI""#N߇E&#*:U5 H7G KDDDDDtv>aKDD[e6ąJ4wEbl6;IDDsқ{qnB}LMS:=1Z""""";-ZMo>dG'6@O!;IDDsS" kB!g4l/Ne>$"Y+<.Xx,OMKӰn|HR6;IDDsT*Z!XĘ[~^ ؆ꑖF%""""" Ѭ⏁A+F`ajc H8G _~'n÷tWoàX89#"""""3~k/%hV Aհ!f!V} $""""""""gDD4106{U U ~'hFDiDDDDDDDDDDDDDD DDDDDDDDDDDDDD DDDDDDDDDDDDDD %""mP+^T"a}1`KDDt&T"S[p\jZ;`FDx24=z-KDDDDDDDDD40`KD4(nv+`r.ה뫛:]aE̓VTZQԁk%";WY߆k1bj^FZBr3|S8szrB1N6`qZ<rO,yDD4yjwrR1k8O^J$=#lg}hVٟ +.>=X²Zs#Exu 6qK'7!$'<["9.O7 x{ٛn'HmN[ P 7؀@?8FFm5ߧV_""\YM +-Se;FB_~£k5w,B*fwwNmI&""""""݇ 涟|{a>;UrK:].V7ϊm_ET^b@X1a4KDDsZ;OoAdH:z͎A Ob疥^woZuS1lDQ%>8r^XWbDGO? !8^X #WFX>k%"o`Pxը lߩKp\ذ$Kmo:q1BG۰4 U4~Zg.UF?:e}h>yW jÊ$Qvޢ" @|T۾ :d""""""(l R0?>I0Ą>;uQ4rl]uשk;Qje5-7bd&xZJT zM=u1a3\ϵڟ_ ˅,Աu-F=ذ$oZ %""""""OahJHmqJHc8`'S'*ob`QЎG7,ֶQ)Ea2h{p2KDDZ^;N[pR5|X8!cJ:< jوd‘+4[ɓMDDDDDD!eH$ELܪƎ>;9e5-ժ8uv+KO[9[%"Gxmqe8F̀\&yhX}kV*[/&""""""aVV*3{L[Vc~\J6!'36TQ 5jq-na>}WU u&ԗfȐ6NWA`eN2/>v8FFx#%"cںpbՄ-h5@H% cLT*i غ:k;Eeø9^F7u GNXmio˅:Jp{ gm}hvHlY\(kjՈ`7;ȤRȤ2l""""""l_Qa IDAT搆.gçQbweŮp:"|h5{vl~>ض:͝p8F}Jm N'+pVX'% a~v",VXǧ`6Ў.ѲEDD4;D4v)`X@iu3+u2A➳ 8FoAiu3v8+Zo6Pr6!m~U\t;Fxd_}d x#kO=w9ԄHebA=pXB {y==_CG:F;FTg]}hxd"A01⇿J\GDފL<Sgؼ<'<["9'6>mSn[`GbtC|V'*C+z `[>Y9j T5OJ G g Δh^Fzb4Ɂ^kqlڻPȑ-i`3y'mBrl8ݶr֗f 2Ե1dA -! y :(r qDDDDDD4Hv<-׻Ė "Y:$W$V%"""""""""@DDDDDDDDDDDDDt0`KDDDDDDDDDDDDDt0`KDDDDDDDDDDDDDt0`KDDsG _֗M@DDռP7v @Laf-JJbJd"""""""""""""[""""""""""""")hs\8WZvPN-VrE`Ӳt%D {hu=wo),C~I5s}}}Ԣ܇ .<{Y(돭CThFNW4 '0-GѡֹTԵ"}^O ^wނȐ4u?VV.-KߴbfljJ|p估ň~yk05 %-f~: [؈ 8]@S{7ΔVRU'`T6}#*B^ah}t쁣\&7(!'J8-~^U4`^t(z-LjZʮCB1S%m\&CLX Aa,V?~}P4o?)a[p:G|wD"gq|Ť퟾%*k~9w+oa}.qUvaph~: b#v|Qڸ_ {OrM +uز<$sDDDӧM=Bو %DZiae(l5mjhNj;7"ڃgڭό`Y5MB (xǿ#c)#sjX1Ou؎wǕZqz>3̸P^K7<E((Ű!,Ǜ{ըDf9""S1.P"{O]3ZCDWI*&&vODW_h}ƾ *pwXelY/w߸ny.{Nu~hbžϟGSghp/О♼UOK}?{`9 gOUb,lh̏k].^~A RUV/H3NҫM/*\W7u'DQoǷtWׄrs:^jBnv-WԹdt.Lw`N\.8.V6<{OiGuShch lhr@LK}F?Һwch)s %QT^hlR!GJl8Z`W_wC .V6 i^[WfyEDt3HHd3cp|MmK(x]c tƒ6c bFZ1_~,>==!X#e`G,rN_:GDD4}ZkTkskwP\B}CPkWWljZ'#C7Zu0! A٢i ꫂcdXX!\z@RCR 4W 0Yq`t#Ϣ ECH} ?l^}G;HXmv|~[WfQ 9شr\i8|lX"p`~"'g :eթkt\ޭON\ku>jD$̳_r!{`Ե鋣#.dTZ@v,@羗#N'^uM=7.O_ʹݍNQYRGDDsHC8mU6QVӂ͘ztƶA~Zݼz".nY˄~s?{-R*;JX 6(WeH{Xey\ gNVFVd%K7M;Mpϸ*ۄ[3(!* CBʽJn|!ȷiY:\ҬiDMs' 9bjAh'}}p ;46ZQH rS, x|$`9pkD ?=& *jJat@q&"""!e):z HPV脐F^HD4 *8I1LaYIz'F@[7A}kؕd×Z1AՊTPV+z">* K4#Aދ S7-!< J CD(~=i&#""N_.ðoeaEvҔ{~ ۺE.=:E^x'*qB:z'죪g׾0hbOyj_ z) ̏5 """"o€-➾o _ Y)<Ip*>:^~7zt|fOg1.Ӆn$Dv%#h2(||!ζsDD4t߂ŊDQ*LӚ N= jوd‘+4[9Ӗw|}c7QTU:Mr3 SdF,BdB@B:|{gwIl3@C6ɼ5 !kkap e5-3N ?:^t'L˰qi6.MCSG.\钫XgN`eF Q! ͋Ͼ;y..By=6,I-KMDDD^["9fjsX Ƚz- 9>:VmΌ 4U%RhH06omK`XO$͂k]4J爈hnFjp8L а5ET -!;,ů;*,?^X1qۏ|oQZ.Mբ,!,V#Vgʹ˼ kT*HYUXw[9WZ3aYWE~#EZ? ,HB}W^޹ۻݤ3iLX buU6~Tԏu(nր2tBͻ5>uLzA22ežc>:+HhF)"""-m.%Tg=F&c  Zo+Xl@Hﴵ{@Z?40Dm4pMs'FNќY7I{/3jբA+|cp|/Oa-CG Ip]2at7#""s8U\N9[`S1XL 䁀L/byBU~\}&KMױ"/ M'PSL5w;$3,\p].Dzb4TB'Ύ>C௟*dqǀͮ Ʊ4/=Mz7T 96-OlEⱿg鴞qd{ݑH$k"O|Ca]E};DDD5l"#%Vȓb#nXQ9."t[T .cׁxPW#""x1-39ZuZ5NF2eR)dR ?S. `df%Aeqo桎I?av0d홶yFcbNlGQNԷyp/ o?ȵҿ[Th]Ci}B{kB3#7ϼPQ[>~ܛ?eV>wR>q8205D˽ȝ{y&""ى["9$1&T4bru3.׌0hʼnʱi > Aغ2 k͟r$V+ƃTx6DQy=ԶtJkui Q3~S%WrH7B{ PԁV|r%UxQEo1Z\\&Cί hNULM爈<+"NDR V7blerԢcĉaV7cׁ ̰+ ~a.K. T*DP@zN^k#~Էɒզ;^ch<ːs)h匄DxEo͇=?u^S׽m^U 2ќjB7ZQZ=zcE)6y*Q\рf#NWo@<H1-,seBಷ߂OO\?qE͎_:SU_~]&4uȹ2>z^y~-h\؁~arkdR)e$zq?_#.]m«?tˤpn`P@DDD-hH$رq ^}t6˅_: rBkzdneӅƶn̋yxk8.Hejoyz]Xbƒ#<8;n\ Bbe#.V=CVRGVg% 1&LI70ݧ7/7>O<4?*seN\)N\)J?.Xm@Kjv(3UQո_(%"1z$Ѿmoa22w ѵM~9@L hF*Qմ&h:܇?ǧ>!]ظgmvQN$eR<v8o?Q)"Z+ 'g;zq 6.Ý\)ك}7:*~bkkMKyeE Gץ: IDATrFxϔT sZmv)#W^_OΠm钫jhF@h^&3?yپf.V6Z:d-ۏN_~R3iG19)T:e {y}/DDD=8–hڲ<Cq jG@[ё/?ON\Duc̃V8].Xlh3;OMkz̤hGRMkHO59S)\=uJLQ!1&HF{?_s5h^ABtVd'"chwB©*RVc/mh}T H6Q+gOۄp*ثۯ_~-ۺ`;Q#.22M^*-˰8-'*Qb{>HɈ,Lx\Aiu3ڻLrgt~f̃\&/$@Z Xi+PV"J[?@=\EGO?+"LLDDt3. ENb 6JE˻pCDDDS"Mah؆:[vayJ\S belb`!""[""I\_~G4bxhkWу~D&"""/- :5}}ny{ У+, kc\Xil """* Ѭ5/:@.#`2"")IZ`]t ѬV)*xֱy˯ f:)`>aJd"""""""3\.'>DO-"!:t +lcĉA XTab}䗾'75l"""""o%""VOV^gd}@EçJ.T6e+l搢z-oZ6mr:]B%" G QbĠV(f $@5'pR*:5blx(2NyS(i~]0giBa+>JɌJmWaEV"f%}rp>X8QT \P+H 59ӱfѱ"Q~ N]BaY-^ܹ"vMft̸Xو擛Lj FDDDDsDDsD"rꩋUB/IM!uMXːp-@/=7\i `zڻMѫ-MOWYӉc8]R co?"w_`td+ [g6 3P)SKW=+pCXXHaVc~i~R9vt&< DrWnNKDDSKg/:z+0z-j j%tQ)ؼ<KkwdfvyhuA4_nGw?24,,jlvXp#CCWoBWcU)k +)n[/Nmr:{O]3ZCDWI*O=GW+u{`sXeu%hTH12A~<3L*C#:t]dxkډΔ"*iLe*Ѻ a]lJH$X/Z6(URkB݁_#ƄbQjt>j4|jF%dw\.6,Iq[\Fj-V_dHinA'oOƾJMwY9I`w;6T.jߏe/`Y ?ZkOߵ皅)C\D0‚`2a|~BخA4e\\<JOlD"Aoݰ;F_R ?^PtRTYN赐Iqͅ8MYt<#lt %>8\8庍KӰ^xe^7}w+ 9ҒcMvO_aNΜ` t*alİߧSj@n bZ~_OCSZ]3FV["*nSM}cU69~V`nUS vOgF}gv{+g] ^&^edQbLB]F`x_9c^f'Jhi=UC_?0<|~fԙ{zK͔t :on=7so3|VSGc$?_?eZe7ڹEGNҤUX\}CѦRz}\NZZ{g/Ur~z\gSvE9./ s=zXQm8ʆʆ%I+Njz5_R[eZ=u44mܴ]}'uT$EKk|\רZ]_{l^^y_(讬Neu}a9iڼdyMI5`j{/#CdtY,Ҵ }ytØ7}'ׯM SǦ&\30ߗ,S'm`æ/[@m_VE/Yi9ȷҊjh..Z f4E}pm PXK)Ichzm,zpu8%Ku*ʜhk%i\l{f<2{za"C4VdRum/W̛*I{"OꌠpOK+~}r:H\Iúo'`|ґ'ϧU6f/WC.C.l~S}o7M?mѡw>rZfݦÓ^:Ls$E‚8a @k%b(qluKokF&\ Uuz1zabŒOkΣFjv<Թru-`iimS^%mwJE]5&t`Z,D Ѓ+fXYzZI:W]>'[O r:-p3C?&\5Mg"jQ}c .TYym_K_؎ (0bH!i!'֐ ӟZ.".Թrux׻VOy +kn$-F0FYQa>9IwHN`|!m;pJUQӠwdĄ1Z9I c#d>m-ZF'gM"%2 0DH F ϫSQu}&-S˜t !EeN7zlJ[J2lt~|/3)qv: .n-r> ` `HQy:p2_%5r)0_b`DJo[>qjhr+*{zac9Eڴ7K_{lÃ9{H-Uןׄe__3F۟ɖ-+|>vH[2MotUey$[_}tFaq c ^Y}ȉb}o[u]U6g{:ݱm}u\~ыomW}S˰~U{`ZYU\t=vl=ײ\pFws,Ps[ Tآ_]mt FQYDz (}ɻT^]v$i\}ΙM6OV{wauHPՊWjnkWMd?jISk[v[K+t^c#Nn瓻]5:uTNBE'kzj$)24HVE^ri v\I^߼_ mMC:%3SX(l`T]o2c8cȘMNՉbIR}c< ~&'֘> }m>8}y+wpc"lNEm?tFeժklQp`g-3'+cRBM)hZu+**25FJfj p}5*Tm]<]q$$wqNj }wuׂ 9~VeuF7=CW71~Y˿Ctjout[jFn>=y骟SLZAc#2m˪t\ΜҊZ7H)TRleh䤫~4m^}z~SEM=J?~>6}xNAk\7]VOh8,ЕDYn?bbu5;RU'$ɵr:`X#` ~5Mu5$(`PI13LΕ)`{36{kTSߤZ4=EO]d{F]GrtL3}C5\Ovq$)}b'L*)VR~j1W vqG/w麎i8S&'{K<߶W6׼چf64Dn޻?/\>O/CrL"CL*Lwr*9.J!AJ6͛0FzOLdt\s[;^fU5Jda[ a-" cr-I}4Wb#03Eu] 2mN-YSb^<^nzDhqbEڻIr0!f+js_WgHj uy vӟg%I/Le?M9lKgMVLTFild6?5ᮇa.}vr]$Ic5y\><$P~V:^cZDh_ {VF'V˯qQ׭ 5Zuk{ ^ZeL0n Tc޾s7w1}eLnӡV6Us9q01FKzm>#TcPͻgUWj49[TfjUhԛonuKxŴI 19Hأ j` 06͒ӚE]Ǧ/VMëASH`m1J#MP:['ϩbZLȯ=y"SثF|>m;pZ!AZpRkG/]_ ÜS'߾δW-{LLM$7RW}\I~?g-Wp7&2ZF;ZIz4&"DuZ9+umSKvŽus#1tUҽU6șjT|a.㵻]ë52d󳪱Ⱥװîy;fs1l)XO1C_x`[iZr*4s1QAB_}ܥ&_s]*j׷%[VвQ##l`+.S\tiv.X5bft+usϬD5n}nrڹ7Tm=i˾STU9{}ݯ/Z<}4W!AZ<#z=F G=IRƯE)ë}'LH=FW{KkwŷwARHs%fNYS+LV;o)Jè wQ Pc4G:r~&v͚O51q}^# ‚95Mڰxnsw^O/Y>g ڦ}zcA 0ҒcMvOV/0'g_0:06bSEMCk$?+ 89oz@Ԣnj]N#X+ɔmg D+o|OBdD}}KZRueQ>g\Yiojr _o&N@ {l`ijqZZ;oT5>:j?)i1![(Μ;xv v3ںm:<ͻjJpșJEwׂ -@cz6wwL+MvV[x` F))jh֔q.4Ϙ8h#oëֶv7)+Dmg) pƒMm*KTg7zvSfJ._7ŷwm\ .t^IO֏~֏JMOM.U7YRg(%iݽ&{:w֜_ZW{|ሔ0Y8M'{y3:](+66"D M1>;mwz,Hrx1QLI4nڸ7KփzsAm~FM-I_هWֶvh֐-"Uw/W7v4txڦekim5UC /^,:>|WoaHКӆ_so3|VrmfӼGc$?_?eZe7ڹEGNҤUX\}C/0r9jimT]tM}cU6sr $I_ZKk)um ҌIZ9߻ZIzww^uVE|Uyu}kK*`c-"z;L;F\t]#)5cr5UTQ;gjܴ^v@JRPSꁽjRn 9zS|E̩RbO_ qz`lc3k6}yr:o?-=bMh+8KTtiʪN[kyEWIw_s~U]__ؚkva鑻普[{WJWr:3zkhVEM*jTZ^g'/} w $5JÞ}K %DŽknlVhY4MOܳPc}zIJv4+mjlnMIaA.O׺Us11{,ʘ qz;Gz<YYiԽtǬ zi.#MX*_M1"N+1sBw̚ҭlv'|iZZ۔g>}v 0(&%Uʸ5[nUXKӒ*)6rl"\]Sa)<$Pq?me$rpoCVm7iߐi(Щb"2ؕp5tᴯ[p5VQ>0ViiB~װ`2SUԢ|>Ein}ၥJI jjijfYH[ZPu?řZOr9kjQKk5 jhv)>ݍkdri%iTM˗eS_7}ha$:My::t"XG^~Zagd׃-*L7mï= G#j&n.D`k;2^ب0mӬ*;GҶ{޿'%m-`@jyF;$0@mZbeʫvxH`k%\IWv4n lpC?&\|7}g46"TVE-*Piir~Oʿ98-XӟZ.".Թrux:ʮ}.V֪&IZ6'qQWҶ]pQ5 jqI)ߡ`ML06b@!.:L3 vςz`l:ID!B)td.Uk8MJK0@~V]RXKbhz&c`[Ãg$Iv|fNc^OvU֩Niݪk~:`8|xt4N`D)aGGs`1F!ϧy*QMa.MHs4.6jDwC[UukIZyni R]c= I#]NE}xΗVݦ@NךE6D^v\N%DhzjLM7bgYfJZ=W\t8'0 04۷w 5 iЁszhoSiy?|Vc͓.KwRu'$hż#0m{Bm?"_iM},WO+ԔzZ=j`ͱ"mڛ=J#8Y0vp ">_~d Z,]HzkA)QrDŽp~OKn$ԹR#X}djkG/]M-rm~V9TVU~o;^ $;.#+XΕh} v9u"X6c[hzj, 7퇍!A'V+.:\ŗ?l]6mܓGWvZ6'Mmy$Gom;d/Хz1ǫ&Ul`0Qd߉s+g+D%G|i$QEe}g7^sާԤıjviϱ\_Vc[AZ6'McV;MPU}'}J$]^|ט1}^9v(O1Y,:W_Xg+\6??%;f(%i5?ࢶ:j5(8ҙ1)kth.ZnWDhRh%^iXQ;JYihziTYUwL1/}>Ry^m?xF{穢^%F?O^@Jʯ-&%k꼾}VZ^KFӍzIvcށSz'vݵ C{UYe1qlC\7^EM~GTYɵr:"M ` HYU#il%|iE+%u8tWnʶtNϿQu-r:rL>vV;gO U6JYۨ csFV2Sd-NhN|[QvE+ԴWϧ7ثoRM}Nk=vQ Mn+u4Mm*-gl=fAmojыoP^%tOKr ˔SX=uBٟy%|zkG 1~sc0]m}=0 .>aVIYb#>Y-jBauZZی7lz+UUyt$@>wp(n5{fory?Γ{U5oKbol9e$Ks%7-5+m1 fE7/VԪaK09fLJԎCgv~i)`{̴ԤknǑI|zuJ:Y]7~j>lSc[]/MO5mnݭrj(PSKWAٮ4=5Quy<;b}{7DiS*$5CHʜxS^{8oǑ~V@gE݂ p>:`Y;gO1hQ⣕-I:1^%jV/ 5^j꛴Dƒ0s)48=nkkٜ4ڕ_RW>ثF|>m;pZ!AZpڈ9f:WrK qu}`01FsRjRvOKnV{P9e:[6Ғ럾t /V*|jڤ(+i}#Iz,|7Y~~!/=V̹Ӻfi-*I7/6)644a]IS֛lt-@Ѷݦ 3ekLrP+T]/Oq|R0NKI0%*Pv1zj'~Ǡٞuᒺd8Fg_0ڇN'5[qai Y{ݣfEKD(T g]c .jJ:u- nܐ$ϧ^l#HZ_LiߎvO_U\pS c#>Ug:r]6Bn*X[XVu]Ň)<$/R"(VUר߾Coo z(R):oЎC:_Zg7??[*12j~sC+v6 )6*LI1]tZ,5e$)+DG yfy:jmkWM}Jڦ}I1#Vx=3T\ϕڷUuI/Ы= a LC/h_9)2.Hzp-̜瓫 +fNSƩӡfBd3E},Hrb1QLIu81&R.54Ke3e$кm[dQ 3Ә؈^{$I>Oon=7g?e}xq6;)Izo\N$mN-={jˀԱ"U]N$5QM}cU֚(9~V~n5$cdok@g~iF'V_3skëvOv[}=0X>[xu|F_%f<$I.CkNZZ>WhZn(^^] pa ̆='?o3`mXK_}lV/TN\~J)5ceu:խ~4mbttLO!G: "F5 z-;gjܴ^ӻkΚݏ(ES6z&,NjSZMQV^.VӬem;{/-WnQrzVmji53q$Q\75)4R i8=bQ󙂵n\1[Əz}oQ!B7oy%{q)%)t ^:uWk}sI kZZ۔WtI[RnQ1}XMJKZu]S9Kvۍ?W]>'N[@iT$j+,ĥh-rS|R혈MO- ` UX,Rtx.TCWT Sa.:tܼ?OXYfw$iٜ4Y,) \ClT铓tnjT9 cïSxK6??:r 0Gl/>P`}C? t 0D!` C- 0D!` C- 0D!` C- 0D!` C- 0D!` C- 0D!` C- 0D!` C- 0D!` 0 N+7=8`F/ϫSQu}&-S˜tW7Gjv.·,Y-y>͟6qPi9.ԅ56uLݳ8 #[FmY'Iڛ =e%-cFP?eq}t8[jÞ5e,Umh#9:/߭% Zǟd^iDDJdF|)NA|,H%3S`D"` (v)&"C[[9i_u3҆ίJ?7Tch/ 7wLWW|I{v8/*F4j0EM3k7 :=mksFen3V=j^xe1mZ<=)*4#̎Cv_|nzBoĔJIZYۨ%a.S 2/ozP%凮:obJ=Wa)Wk7ެ\v5V)40QӟՌ'L|{:U?WvFdy?5IҬO+mz.Wq3/lf;jl)W|l]]1gTŏt.U].|r9#1M&=5æ8t^4}-I:[th>S;? `!` nܗuj4jkIm+٦yrܫ 2wiȊk[?^\2-٢) usu]vlTCnyS$1ڹEez^M6lH (1s0fNF; bzg LPL4DNaX~R#X5B .!IXJiw~8agI*Paj'FuLjT2`g~IK 2k6G~-֌j益@kge]$?J^|o~v͛r|MR+IvݽGjiՇ I𶫥F.g$ifS IQltELϩƖr9 J[:,IMn{Ãw6j٭~;6uM) u4ǘgj|i0$9v 8&r]1F`O[maKg<'{Z46"C&>}GUj~.r/7l\0`TSJB.sMpCBR ā@-c clܻ%VeFS$I#Kg-O?{.*[c. Ӓ(-ye}/[s7znh$>mqث'^߲,35Q5CyYi\֕g>gg5=fXkxHDUf9)Noi JKNPFJ~qBsTNNRn Tklh*S(h}43`smߜ%'}ej 6(rSr$@F` UZKyɚ_C޿\I =$IMJ(Z"Im(e-0zN8qdGj8Շw_R4r`^{]cRn;30$2} WceVH%|XU|'䰻:=/`YHsewwgMQQsٳoS^wvleNv9SGk'[krN˪z.cwi[*5C ^1EekTPJ%T\β.6^>ڵoYi_Y맹FS!#3/sJiy_˫}h0˧0VNK뽺ئ$w-f6]|Z*kv( *Yk°4q~t9/iTA*JJмS4}|$ЀZ>UT^UW5][vWs(,IzmZCmZ}o>2Suƌ]~ M!^CꛌgeެXeӓuut*ft8k.l㯭4ΙgM bHdjQ=yY.Ղ,aܧ1~ k%y%AK?OyJ? ^34adl>Cd;HwU׭!shave脱C-k fWb[^aKNՃ ՘ay=inŧu++-Ig|'kZqT!pА8r]_2琷lYq^M:f›^! Nl Nl Nled6("~Yտц*ZՆ] UYSC(?{Z'Ҳ5Gu'уi  ~P'8&Ua}6Ű ٫hS@F8Huk7+o?|*϶^~R,1QW;QG6M3U_[HZ;>qe=z IDATBf={|68gUеΙyrLШA4ut|3g'׋‘!»79ToYn2Bsf>R}cw#5nXnp}<>y'3q -ɼ9LvW .8pXߩhc_rhqGT~߼BCr`սm!Gjʟ{?;hIn轵[i!XV(}szp-,PM%f9=y.=A'U8TEF~5fv9Sm{4}/Bغ4 o_E6Xa\QJK˹gr /9P^(| h4y+U~׽aȞ?Ji_өSo3U%;S[˷yʸdJXԸXM= G]Ν{\u:q∃NSh:Tȁg+=y$r*7}E7+jSVЂGMv= [ 'ϔk`dq=b< a8ԪGTq?8D+?p۴Fs'mg}O#^mK!z^k羥zffs^R$Ҭ>},í촱=3ݲoEv-xT˲1C.UkiUU[HPs_3}썋tu5i5_;uy)Z_5+0@פ_ß-txܻvIm{:C՛v[ʳ&z(tMlMk֪ռ}"r=r.D;(RQ%ɐ=5E+3?yFreYsˈDT˪M,qÕ=GU?%*jlsáAo<#{se2B-sJ;25GxmYӔ_|Dui^SܓU(@1#q*~YU,\͒ލn|@[ ^)^ujXQjFT/{,KIkdcڸ5eUuh-yRus踩I-@yIRSʲmk{[fy`Lv-T4&6mTe%M^N]F Ujeq\r5@IP-#{@uцF~>zK_wV(j7|Q?]F 6?qpf9]SQC"e)PcYE˾̛o:{PPT[9sr1TvJHD ;~bo2ZI-AU' VɏβEjz/֋;yoj?vU2[Sݠ}¥M?UU~g!RUTͻ ,ˍ57yn>r2~8˞iWGuͭ?/5 OLK{MxI8ihUlecU&d*j~ra-ykM!sYZ{r$|.>8rւ⃷hTYK`s M`h0;= ܲuJE*bsz'w;\R~YiyeM?my#,6i2AEc?pimh\ok[9lmNr7v;u2{aǞ$gm,RY%GzZm] J>}jhi5w([[uvQϣD3mPm}}n_\^cn;8 })o mzh$6i׾w5i$.>O-Y+sZN93zC5e[s'RNMUukfZN;_ǶNjsTY {<9 RÄkmO{ۆgͲg(>sֵ M[J<дfމrd+~*jXRpːU SygvPueՙ.A}Uu%0zN\ gHVR?څ!ά 3>b}_OJ;ej}eN lTCO/,Mhb6_7ܣk5\q'"IM֩oJj #5ryh\v+ٯeP^.|M*%;Ѷ#auKGSނ?}5[qG$e~mjo ETFe_xCէrOUsQv^OϞoef)Ii~f(cxs%h7Yi_#QJD۔##]iiٮa;~| Vo$s3s[!rŞMf`#Rp32clOԐhȊW[֥~!+^ismNkts;n[ 7S5B!7m58]_=#l6sضqӵKz*qzl(:s%N~?%{[ޑrfzo˾6ַlu+oti>ONKEZJB.6ڮ۲b=lmG>ϡ% Ყs~|qr -sW֦ۘb[I۝yҩHI_RBꀁar_ɑ׷hsۦhT6=z_֑ ϖk`ٽ^þТ6SNȑHU$)vzeZ qXGS/7ڳWVuWuꈯ ZgϵϾ{)E'%*gܨ(~aƫgK$IF,ޮy#Zd>Lyx @_y<|u8?l; KyyMGf+6v4{fE͛txלh}YTXB/BsmOLr/#g#VK,u;o"h5aUwMU2a6l67Ϟ!tۭ+/QʕyW]+\\jnSB^slnw>Gخ{nh]*{!H^.P:-S//ā LQ峨J=wdp$}$x|h?#r9<@a @_vעҏ,q^d(9!6}ej 6m)/Y~Diqχ{K9nhS)u`9y[aE;#U2^i$3d {"IzzWVwcsl}5i3BCnW-Ćwo\+'tezKȮ#/Q=(nHE>N2B1q!7+b6֨ʷ(&|>[붿=~𫪪ml@yϫڵoFX[ ^]i֦N54R^*,P/Ҷŝ~Ή#Ñ>\OH}%!sj5h6y,o-XrFp ϟ+~?gh-dY~sz͞jx^TQU-xTĖmz_'~l^o#K|ݦ*am.ڞϝki엣pwҸ. h]dy=-]ozZu%#cU%w.1A !=B~F;e2ߝ&]5ʷSl5\xWr֠*w?m C=XNB\c Fɞ{˟1O/@V=O?aI ۴n@E[g ϟN֪ O5[꤉?j6]|Z*kv( *Yk°4~+Κ-=_[V+?'ՐáߠOR݋ܰEᲖ^ά yLPgHxr[<eOIgH%ujHOSRˋ԰dyPMM''38%]p3vz]|9TB5.Jj5.{%@z>2e Gv'LQ׿"gy&Sͣ(TP$ϘzTϜ&i֕O!0\WK'DHoT^s>Xe+;38~5,Y+q"533Rg̑:ADg=h|K 5o.)tY={M5:, xw)Qp*J!i=~Wݦc=e_ u37n@eꛌg}K̒_sfbKWoSNO֭מ'M@Ӽccso˥~%ϘGtpe]PKoݔ3OO1[TZ~Џ9Ga[ u-S$;*35bpC"s͙:J'_ZYY*н-R]m99V>ygd#mg:ƀ{-3:Vv'D@3TФu[ %I%|z{bn Fyy{?K-s_8gf?wNM#[t:ݮ.9U.|WciT 16SٿY~Sʕvq=~vne%鬙kÐv~f'k4" }ϓD.эvd}ݦ̛ܮfU:}W1,I3u;l@?k_BI~r8TRumߤ">ZWl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl NT@jn*WS^5*g9LGV u}ZV]P߮)^ Lz' 䙪+dϘYv&{V5hl]Tm mͺḐD.HQ IDAT4S _byAHnz6uSի1Je!@\~:oKW$R˓j n낆q@82jڮ叝jYoExֽ2aY/w+ *9{f]ZT}Ok 6TrX wn~utxMo?RuJg,ꗮ6cи`?6G U;7J8m{YW.'E;> hȔ0mhsy,8իIMRC(ͺDUVU FcyyУ>zjFT.Q%;Y-eÈjӻ _ߧ]o*{]Gt==~[+\myAPz6}ܞT ?Soް<{|}jk&C#վ#Ѩy|*j%Io-۩o?F!@p%*{J8\TW;>]x)0p%u2LsލOk'9{X%g3e(;ok'5xN$eӮ[+IrySm %}Al,;7^\H6zaKPv]<ʣ]9kps3RB#19YO3_N}72>7Nrb3v5 =I@t\*`p{7 }m< 9jg|E/#2Ɛg71-xAtǗ3tpL @Z4U.7^>ZMF! +\߫yVSy-~a\[둗W^Cg_3z4Ɛ@f{>ݟ,0@>mnx49C`;5_+w*\j?VXMUz, w(t*Xm~^U;g)5xsjc[$ٴBIQ֠4lM*߳L%;^uu}8-P߮)^ L9x׭Ϝ_\6q1zw\rM3BMXw?2ܴMos2SXpC"wQXj;<[ ;SBpL 103?c-y˫h$͙:Z6uc*./+UM*z@@@0-}ߞ~K Jנ~5qK@7#F C*.Qqy>l.;MgLK@7bHdD,%omhaT t#[X`m-t'[\ϰЭl‘vPGNVj] 4eSTt#zU4XZI)r9Tt#z6y.&5$/K'NrfA7]>J! Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nl Nlٻ0:Zz+[HdA6EEPܝqG;0(((ّ@d}Twutuv}'uϽTݪ ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l"H ![l{À: @jXސWFƭl=:G[ᕝVq8|jE\p@uL"~T[\=EC{!FWc߉xӌ8iaW~X[8cFe1*v1o‡Wtƥ+:㥦BTe#ԧbtujH[>'Z'sǼ1\jGM6LѻVĻVǘ!(iOi;kB&:gkkg!,ngVcmk>*S1.윍7ͨ2.D|-q8cƖe-xXݒڊT̙*Z1݁o qՓqâxfu. 1:{I{V3[s75j:5[2qq^QIy]wpO?Hԛ/[O設]@k|M쫩HOv{WC{!>pMc<>nI% IS~>[>Q;C`/D|í>gBm:~tj];1;h[v;R}]6KcI[uj[SSiEkrȪT8p=G؞ge|GWv/57S/[@BKm-[~Ζ~>?2׿kTLOk`lw [Vt'{it| 1s|W l{>&?>~n,|DWcҎNp:toU}HpssIT;1Suď2lʼ:XD{WIX;7FDܜ); l2hy0mqʯLJk7z]Ȕ^6Z&ɛ DDķn_>'_ŻnB4[sG)7,nob&~uƈΦb\qEC$^.{dm<2tWvĴx1.W\ V4v54eVՠo9-;Z}]Z7kwĥgbٷNf?>>}CTf">zpM1"j+"^)^h 6ֶEC7M幎8{VU|^ܯ*; qm񍻺kshÓϰ lũY_i{W7^_|%Uc\"fOof}gWO+c/u=̙)x16/\[|9#c&J"=}-Ǻ|Lx!' IDATKǾ)AW]\#S[K;buK>v_Ekrqθxfu.^iG!"VcL9jF!Yݳ_ݸsc-w?ӈ~V].ϭǑ*Ȫs4[*O}?|Pu5ޥ"Jkg͗b|^+ad|9 `-Ԕn>pl5¹scٸvA{|X]Gg⥦||V-gn9ywUs>r:-_ޕFҳFĨTFd)-5?,>s=:Z㩗srs>֤cքLuvUârVO\^p`ucn]F+o/tIװ5^3уk~|Gܰk^"/̙YqޖWr6u}>4%&dWmqHe&Jͦ#Nk7J$u -wrྖX]37=&[oUYY98Xc[`!Z|3OkumʈF_wI;qg&gjl/?k;փel}{\l{;:>sxMSCS.{-]^2䒵[cTU3_8rClqsqcJ{}x닽).->x`uJŽ;K7GXӼQS뜣arؼxDW~WWr1{Í5 繡Mpy+h+ ޶j;`lyD)-[{0;햻VkwX]ϧU= b[GBWXuM9kfUDZ}o(g݁kW6ݍsSko?-nX ߿!~xJ}[Š\7Z՜PZ+Ľ;q#mq16=y(_6&;&sOK|xל~o|ܷ{Vρ5햳G\tOZak0s˓a+2^{nLz!?OMDĔ]qc`hM.N⿅SG+x1L21{B&z3ſvlWm}#}zumQM5S}T[OŝϗcLrSG!.0/z VMſj 䊍ݹ9F[;<Ȥz{mްO賫?c|&tmqՓmQ{ej1թ8qA163;պõ>f?:>ڊT?aNv⎥?'Nʖ;wRIS1^d[\@YwL*-UO;nko\v/B\s L/OX#16=y[_U5oSWy ]W7?]|m|r^ShOI]Cn9;POY2wUfnٺQһvΤl>_`vݐ&եǯi\|Gwg\&9?S{>:ϭ|::SCo0ہyG<޷uo_/y\r戨],y=泚P9.fL ;s=]Cmn9ӯq&.Z5[ϽxcLpNGu6/7k-{7,ç6VXaʋiUK.?p`u촙Tl:J9Gy/}5*UiZ#_xF=z VfRco\}[cec!򅮀CUy=$qs%ΜUTc\m*8o\!>HEĉ(-wݡXw8ߙ2q[~JBӵޗ]I{T[QvKk&gOTvl,M?[KsNUpS9㽯? =~Cv̤bL1vr~{C}5*J!51]bBc8oWXR{\S{Ĩ]SG!>{cSq$lum>ucIXZ˹Iu 5d=l_l4-Ugd n(#xCGg⹵x~]>VSq5M8u[.}-w^WK<,m;pdwO8l=~HwOu$ vYwGI`um3)-x~}Wr㢎qQGkE|ĺbp6\mzt/bcxu5gR6{ȸ>7FDBg#J~4~~}~PK#[DtcMTm㼽_cMgMķO]Ggm^k8k@[DzQ vٰSrDmf lOCb֗ ՟#UEoyuz_W8jÝD:kZ dC!;g㹵X>ky{y8zfLލ4W-ļqӇvciLL9V#pt[LO3J펈g!9 OZOw@^^5gLe񶒛 ֣ы1}hEg|bY6Ԕlw0`X.'dctu:yٸ^9l{%ZKE_{l5WePM{V{VœϴOŪ7lO?rSprC՝a(>U9R?:sfUpЊb5햳5>7u蘈8[5/wWMxxeg-ͱk_=j`{(=-ltWCZ7ugFG.TGEFZ _<6ut&~B]sm9* yupUs!fpMyFe|A=ϬŇm,tˤ#}R]1-gRs/~-~Gs ]wxM?ELſUS l#"}HۣwV_[m=&,g6s|&fTScӣK:Gn.bϞ\;d8w^ìdUs!kh9-gk*SqԊܑ%C6-]0mVPv\n)ĈTq vvIMO ZWkټ6M4_ӒUcuޚcQ:r"3w網-g|.+2QokwQ*bs\,Y3[9ھMk\w%h(ĕOt=x]-y?bgI]ZUYl􍈘r=_ Z㹵8xJ6޶oU׎_Nqm)FϭyٔIG|ĺ/g`#mwvvGK\koY'{Sl{5Gɜ;wut5bCr*585qϲh[󉎩N /4l}@6y ߯=z}>Vͥ#DMZv߁5tDRS>& N}sLhG{` `։.wfL]^ߝGcHED{.bS{uDaUj\Z3hONƒݍ{"Jw""tZթoߺ97|<22罦:jZ㓇m~_>Ζ'iqNYh#^">UTmhz5&>=;ap^qz EBh_:?KsGz˶9kTd"ub}~zŐr[;Z}})gNm Eqуq>=RzS6Z씍5g۷: ,gݲ޽ؚڭuxj]GgbLu#|ܽ3z)zfyj{:tl`3䉗J&u -g@U]%ߗ=p|[kl:BX lGWL>.#QIŸڮ=P nKvGs=vXZ|[s ~ 짡ņ.}8`?rxGu^3GѶ[iΊ|ྖ8;PMq8u;K;b\t{?]qEc>n[Q pY!a7$||X.lw;C?܍<"4=lw2ǙI{V]w㢎}c߿C`v]L; qےXkrqےmIG-M1'mGa3#a.92Ǚˉ{T q\It*'^Cn:cFe|aQȚΖ6ojΦsGԖ ;">yXM13$ܪHPgJq}|6O]} =xJ6FW̛-Jokaoʈt p[v-Vsgo-6W'V>ni%CEᐚxלJ[FW~;S~tVGgog؞m.wUed:xT]#"+S7or瞲C,q.vjJn^}ߪ8aq -wr}턺~Cj+RC}L*SI{T}5L9i#zF g'֥B*"cmǧbњ| 163fTQG_Wo?=ϬEsG!FWcL3:Iwb6.?{D|ygtbr}:Z;:vdZc\a7QݰX꒞$_%޵"jz1=:?:_=]uq%tޕl\D[ܱ#V4壹c1}l:ްGe1**6?*?ӈ58djٖ-y#PnwNyv+-;b\o/Ĩt6:^gͬWb&G{VO#+;ceSWX4.\o]Uu[U,hwĢ5cjR1c\&^o{ZOE5WU.NS]Gg⊷(Nxm>VcTu*LƛfTƉ{T >ǹWIxqNٸxhEgnؚt̚wWOVr;-#YUqm rs! BInj8rZEwV$QMńTLOA;e̙Ue_"uֻ?V⧟u$.\=Y3 y|Ql"H`0:Sdi٘Q1>a- lTW jlm1:2_y wm|O=uv'ڇ8.:yJ-ƍڈHRP( v*2AX970]o]g|GmcëoS'o|q3}{7ݻԣo<&.޸{Vq'gspq77c'%:15ϔ<3h,ÿ˿rK[{ IDATxŚck雟..kj~KyԱίj,zᥭ~n]uUw/t*~L- Ź'Lzq%*+_e}MuryytL4#j7:4cՕ?}rMUe#J3N(Y6N21N8hvU?u&-;e`|r [^|M9wy?ŴI攜~?,G*uM-/(xzp~p~~E&|ӱ,9o8tN\"[^vnަ!;.#jj""P(D*51yXz]䒿E1zDmG]s]=oxQ>`IGFDĤ1#㌣+n7>"k\o9vd}|#o+oT]M|}gr~ ߝ3>(S\TZm{x6.-۴cGIv.oxjɋC_5]=l_YX|l{[0wEwOmk#?ccx->eqmFl4œk2\ί+T*>rE_yVko]hik/^8ߏ/MzICo8NR5=,LGnO=,;]Pw~[/.}ɧϋcGP/;z̏;5$2;O8f1~xqխe7Só?'4;SqG)wtm.c6wxXqyƸl⸾*xzqŘu/,wc`{=2[akk\cK V㋖ɟvGΚhli-ygrf;xqȬ=h2{/ qwFDĔ cd{ק]C"YcFE{Gg,{iu:5s2sqE++q}-7 _Z.7=#{Wwh䏞74ƯhNS&s..SdC)G67]u]!3V@=$ w _#F4;&qGylq7y~`؛wcqo5_,"z5~cŪ5d~ڞ:9N尹붳;+w☑1{?ݫe+cMCSqfm &&O;:0 .ˈ"~[X 5,2PJM*MV֚H4,mua" B}y w{y?s/ߣk=s6T*ܗ8KM˦m;jTyy`^#tO_õkݼIZbxo\37NRq"]:;+ŻdZU!䄡b~>]qkvL;4r?NʵX* OO99q4&߱ƼG;0*CT*/5FիeϞ{nqZm}"?77սE=ܶȏO<ݢXmZ{޿ٶEn6-w[Kd;gF&gN;+ѥc̘t_"$|wYM5 CBwV5ԭM~^nͫϩP=Y^C{Lպ ',yɸ6Ѹc8}:u$Qa[=6|E޲x]}֏&_JkP/szs4m ;7k#J-޳?[!""f-X~#٣c?NTurDHl]{ad-4qĸ}jwx5OqW7Q]{bڨ̩1sjaDDpI<5筈ps>;۾RU?ö\]5^Db޹Aik7^iK+;vD|Z;vh͉=nƏ GD/t2ܰX}[爈Ux`Xhip"&bv0m\tn6}9fY+!WKd_Ύ?/6O\W7?w@zrg2{[mg֦f`۠f`[{Woڒ-:o--;s81o%C~ZqkcSKJbW-Ym3Ÿo=θѪy8Tr<?}2ոwoFMٵμի/qƂ8JŚߴ%&[KIxU9vW:ub+3+lݴ}g|[2tJKdMmZ6Ǫn_~Bkb3Q8w_Ƣu\Ӗ+,YIKd d Cj=ötV Sa ![ d C"-@l2D` ![ d C"Ȑ:&NKY<VXIENDB`vifm-0.14/data/graphics/vifm-96px.png000066400000000000000000000171771475151500600174040ustar00rootroot00000000000000PNG  IHDR``w8sBIT|d pHYs2tEXtSoftwarewww.inkscape.org<tEXtTitleVifm logo stEXtAuthorHescalalu\XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/`IDATxyt\W?J*ɶ,Gvb;,8tIHI4CCsϜnfO$ fiH&!i$vnklYhTmwxJUJ*9:{|{X5@r@lw~C&,WzQٹ3r!e OKrS!ܶM47.WZI!7.kfJ~Y9|Q X=zY+uv-K[=}m|x=ѯ'wriFSlY|w,.q˷Rgo+"b P̰eT+uÏ)FZY+y+&^ h\KYI7o ͹JU=;g0SI@bU;?ɒ}EYؼ򇟣q;dUCwϝ+8Nn4bfO{ L8j(?.e+\=EI+#0S?f-L}gXoWo".*d^q4,叼@cu4,g^w %~U?sa豹5s-~ Bʫ{ ~}P \'π(}J#2+לM\Uаm,g5 rGMel=gW}wBg#+x'4o)7g/sVe j>O~s٪D]q2#\+VH+z-Y;MxN[Gzۗ~d׮][FWuFД<1;pHeӁs?֍g琮 Ք@zkU+ZhWEE(*͗m}o9 -=Stwwς>_z饺 +,fY P8u1É0E=#̍ܿJ'E&4Hвtµsϟ5Ya^a3! BbDPC1p#Z5C5(z%m[ٷomO` {9[oUwë;ZL EQZ-ڂmF5c(Fov=39'Ͻ=:Y;|%꨺?j -@4fnrp]MyunkČ`&jՐr <BjDPрbFQ0B37PQi}?а33-[044Tk;C%vwt7"ͷ BsBCZ$?wiUAض͆nWk:ˎQ@9 8qSFgB-N:cMڣ ܐxs2ټ(F]3x3B*A~?\]^Lt:_ xﰪѠXsyFnf y/='P|u!ԐE¨V|ZVpRN3X,n_{/v<֧uUbQ_F:y4/V.9Q¨FH#Z)paPCqT#`Dd#?'vmu u PTif9gGWU؁Eǵ,MZ}C" h z'@ 7 (ۗq5GZ4 s}kX$Xo3AQuF:q ( 9ae[}䛔0zzl?D^P`Jj,|fGkSU@m7<SBv?W4H7ʩsU7Z ]fd|!=y\&j}(zňa|G0/( !.TW-?$ks~]MQ `,nkXnFOoCHަ$)y1ќM:GWΝbDjE <$b*(5NX(ׅRe,/$g0[J@~i(L}gDО&s:t6O%0Sܲj8ݟC 錷n>ͩg>Go*?e2xW7sݎZ-|;;8,ioVXLm밮#IJysi,Y-Et3/?7*0w;B-72}&[)Bvhhi#Ԑ(&E5 6;CԾ[pgJ:ٳr2Ò'{ ˟J*<;s r|_FK/d wq]+j՝a7Pߘzg縹4O_/kT Ya#t,ߠ#AQh)3\ g)B!]^[Tfݻȝ:ΟĶrQq7>Z⺹!!J@鹁Yv9g<DB>odDP(j(Ѡe^DFc6]xn+?#o3\^XH;_O=Dlfv 30!*vy4j UȠ0SwȾ=H))!h0Hڼ5 Ԭ=fbԒxb"\14kl·iRf!JH0B`3.z^l{EsLh Qg-i=Hـ і=}kij}Ե2H܆cB|g7HQaw|ǧ3r/29P gF`%+M_ﭘ0daKq9GГV2kUwraeaLаH b60PI8=cWĘ*SV>Gv$潧qXh_-]\{}ɤ k|CTuX :; mSj[?ᠲmE1tz0i%uPBɋ; =g[>8E$ځx %wMdJ< *PwI]+k']t[զ?Xo`[PM?( CX>M_)aұH| /?R} }ϑ#1 0Y U aΣUx>lp+峜x6ł @nd*c̴8o*~4LtOF.rHB@QAՊS6!6#A0k^njD+vӘ=9}gsV3A;~gM>P;u ;>m#aE:2Cc93-&!Ҭ]XE7Oq:vycf^b^~W$}[<5R| Pu^~??YY"˲pvweHOD~QrQ҃s=;/]Ԯ\y,3 X_$مt?nvp,Sluϫ=*=ggY0ZsEl%SfC`4LCdFHZfSoU_uX.67;]ŀˍOpk/c_(go"_B“0w+;;3F(}/;Y}[]mxhrQt,"BOΣ=Fxa7cPZfu+uZ@ڦ7i;ds.Л;w`ƐN1eFåti2tFݢɰiy fW[] &==2|j|w^.<].h ?&HWg/cX}`b!p)h%ԀB\Wdk%Qnv긠 dߨfP;{f'ةckmAaÎ5sD)B=sN~9˗>ad^ fYocX}'oJ!rAE$/^l8h_ nsf^cQ[QiVo⼌}C|מ$sjkɷ[%@ؾr pHq WgK`Qʲz|6nKjOHiIhl C5_9e%EH<ܑfS[pϑX Crf~m5]w~iU78 0V8c;~͒uF5#t < KiˏKk`3J - C=p܅1US2#sj C{oE/rСCGܷ{!yK~#pqc=lsmf2@zC{%sj۔Sf|^!"oKVPChsZZv"O_ۨ Wp/?B+1d^>0̿kmx+jT7~BmSYyuV9Ҏ};Ƴc[ٷBiIp3FOl\W1[9oQHfhϳP(!iۿO(EO8B[uf[qi^`LQ;8_{ .6̩VI6<:4%hkBz8^,okf'4/yfRѼXH(F0:f#EH" 9FlNx Fߺ|F7Zܔ/8Sq_h \ڌ>Mӎ ϻԮ/MmW~%uuOʯ \鑮ͻ#aYW Vi&܅cvBzsK#Qϟ+4lݓ<*nl_;\J=+[zM. rQ!xTX"H͛ IENDB`vifm-0.14/data/graphics/vifm.ico000066400000000000000000003257231475151500600165650ustar00rootroot00000000000000 _f (k_00 %g  ;  hkPNG  IHDR\rf^IDATx]U~S].D)/v~~l (`ґ&RAd}{;IM2y$ɽwsO1zta&$0d=Rwr^= H"jQD`Ʉf`)ݾf9f7gi# 23SL+=ÅxccK֭6`@X1"wd `kuC,bԺ ;MyA^kFou 0Y0|SMwc.¼ 3`@t` V ߀g~84υ~ Ev:?N[)0]dw.>/۽ n&">SvkhM ;\n7]9Fx88v{Yփ` 4dvۿVlh`h@/0'uԑf#ӼQ0c26'V 8 pF;hy~4a!!CYku 97yUgp6BX+_$i)uMg ,q@\2# 8`쁂s߷5jU1!v~9SU RQ 8է־P46fe)9: l;%m2 ~Z}ew%wVT5*VxP {Q9~ ]]^iZz9>ͯ|9]{y;Ko([u _+qX2|~ zZ@mArsۅC>j|uD{WJk׿ɕom8^Zw@ڼ;\? ԜZ5spXB0hy M9:UrZyfkB|FͿ"dh4ƼӰ}|ԺlAaAߛCTG}oYj_ Ժ5)}m; v?!UD%c rF 4EM~}2է @a~W2Dֽ8aN}A u𾾏4A:DFhu$kݔwםJv`_ 0@O5}QVw`oEͩ<{}Z diIsiݔz[xw>YO=s9GѺQG^Yfi1F!/M7ݤYzhgD=Mw ߓyvgڅ'@Z'vލ^1C 4`/Iڴi.o hztFߧ`E&==3s3b #[N=F!cȑXj{L6it'/j&yVP#G[gzN&\ŕW^FH 'd5zQU~aħ7Dq3ܤ3;%9&$ Mzɓ-0K={će˖ə"5zǁwhu+r|kL UP&Czf_>rOO}LEL@BBߏ n0sD) vD =7U}<'>_Ń>9sh S@@؆  Ŷ ng&bP %]՟L| yWCLB|߾}Z7C3L:?|4VJ<)bdI%/ @]Ϭnvշ/};׺>qAtEfh#iiӦhdPascQ5@X_Ypؘg;'.BJ~OT31G۷oGZ"<0-pq{ 3~$՟y4sn׷snw_,к"& _DŽ !|Kn@0!䷱v5CtcE޷/b.R,XސW< %.65~\-o ۇٍBe ғOϒ4yKYsG"Pk)JwpĉQ4BL@bb" Uv7Fu.XKq CY)a ܮrT6,y 'YU9s&KI Xp! >9]b~OFȹ QJ&^: կP)K1K@lzǻ 2fv`-%=Aż<nk6cH@!ŻvSO=u3BF@Æ A{t*qiMo;@&@ 4HD1}tdץO?u3BF+Э[7~>(؜\1c?M$YtyOv τSxʳ y+?u3BFLC=ӧkAq'+?{;@nn$-BA{d_\$ y*cz7ɓ'1m4Q+4{XzV?4>\[6ƞ_0@ mžAm#@MxX(D2]ӫod" @&Ν;Ѹ~WmpcJ ;yv;@CrJ, ${G&hnGQ&W_}g>x]e  HypzrWM1aڰ&ZOm[oy .YhL7=sՀsX@!&tĐqţ}} mY$`fHY]@mZ7/h6 %wƭ`շ@ҫx$C|?Cnpbnat<<8Vy,7-bgEEZ71(6бcG[NfY6FN`}q>"Z0+\ Q@ 80~o&ᯢO훞qA, |cXߦo;@(_,D'I9Ȫ)B՟Af nς^#NK"'[V[p'姴nOV/Ecbfv`br{>n$F,e Y&7N1V|7ZoSNf*2#N+4h[[d nt, )ګb<&N'&ߑ)T<SH ̬Ezv39Ty97$*wO`gѿpZ@jns;RnO3nҟߞ|˯A &5h4a4G!UD[fU^{AXyZpNj,_ E J~țZ'rϽz^}\oԑ@E+el\Udo %\҅ ,l ؼ/Mx~>M1M44p+2X>c,: ˷a#ب * Ohr==w[35!I5Yf&8!^}q烻nג,Vyh M KBuY(tk$!P;Y u!)΃9fT0qJb3L `=6-VAXkY#!8' & 40&c'TauƴkFY!aMMa>W)WO2\JTŞÅ/9k, &LJf%a }of.PWC[pQ"2 ނNJc,8$Uֲ~*|heHbs1ԃL!sRuMSzvr Ͼ/H&4M0V0`܊#ۣ:N1C֔l4,RtFyyz4o  aQ-Ã}]O.GV4qXĴ~NNYP52L~ =|pQ WV_6*5Wy>?k2TQ Bv=B!f<IJ+m7p,R&vr[h\86媀(P䠪Znӈ]@}p4$+ *J$`G݇FE|}s+ ,@%_Z'` aA<1+/DZ8I,1/i D EUM6e?PW 8 yo c[ ihfq5G?¬P+fLBz>JZז&])UqJ~FZm=|:bK>LR0|sCX"yNE+]59 yiߐB9?vT{OMJpІ?8R7;@8 W_exspIWn }|)*&qˤ,JDYxMo҆Cl|U%@ X1lY$7FBfSGQcE[m ֳuhD.\~՘jo3CNG/B IW[ q͢w x~oOt4NޮT 7䧥c̵HtEĥ`#iJNFjTg&M7a%X3T xXv@0SOKVSMы:U.,\wחuxzÿ_{B.~Pw-= V|P/Sv1Yh$4ln|//-  rpd;K.]S/'7:+6 ؙRsk jAd**ҜX}7ކ5S  6U;q2Xb; >yI?l\կCO#N~X4sS-J6#9֪@Q Uv7qGQeILSHnԁg!!,AݜNQ4xVd| uHwڗ?{v*c/Ghx}T>Cv@_e5 @h :gLȃ-/u9jom+%VuJ% ":XZߎ$+֗@RpSѰ^x՜(%jy=N v/IAh91FI ۣ 2Vн7oBf~^3NUnPP[n& yA>2@ , ^,7ҏA111{FFNe1J"@BٝŘ}_MU+Iw>} \ѷC5xvHH^64B!O:N@ 6L!(S]ޣ1tjZBdG ɟ$Cwd܈]wU]܈@P?FyQto︴V W)vvWE[=R~i ;w\rCX"sFQU%X CdT~m;hGr޺q: 'H7WP[INGC&PX%oY/Sz}a?FOWG+RPN9A+fbZyj#ڋ;(c:vVRI,`9\' aNG )␮M(R\Rz31K}CϞ=dowGJaO*DY:[x'ŲJė?JA^vaW`Dʍm_R¾ Ǟv?+Qc{bqUi&2`+{ 얫]#3Q'B:1ɖP?{ EC"|H32H|*mYc@ng"Zx^Cyrйe>~ȵxZj5Ը +D;0}-_+`Qi9-- AL8wHdw`] . YH5ռM ɈGmlWSn\EAN=j}l{#&G6ёhLtkvv6zi$6ʁB3 jP OLQ:a@!:(zF[mWH[|@NlT32޽{kچǿ>V 85_>C|]h},4=7W;m7 !9\ }/sD75l5D4(h=mĥa=^cǣ.{"J'F!;@(_v\*&bUɽ4S?WvСMsM~{ۡJ=T}8׻q;>ωx8p\zmխL! ChI107-6QS&~pJ< 9|6  85mxdp.4h k_`ɖ21}R{ 误ĪY|]`ēwu0{.R{_t5,_l+ _1kv:@e5!2ҝK_[ IK57FN  Z},߷>6D5%Xn'J-D2K^SGtǭ.]["{7aΑ ~7NC?ҁ~A#/C}-sÎ!0M }BH+eIW&Aij4B"?{ }i8.:v*;0 }P*<qP݅يE.~3kvՠ $4 i'$R W Ak5xƌed&=[ky@?vM.WY &S(@1xKٴ@y݆?VsL4ą$].FɎP-~_ a/1,f7ʇYyp^vj5[|}2L<'"+;}IFo,ZBLlޒ21w<{<5ux3/>&+YɟW0miF٩#p^< gE~Hm8©Hm?본dtxRP;2xHJa2(qã,u#W%O!\3'#T5jCM }A7n U%9\^8a&?$xiIRX> X;$?9V+r!.! WkwcX_?iL-pq;'CpϭZw]* }h!s '||9{LJ"h<vg TJߐyKw-e&~\WS")}z渪$J |&FŮjc fI HgSs#15@){-.n||ap*Ox觜ɻ62"@%"dQAB dCvK߸)b` O тjEFn3XZ !=3&j1GGqGv Bt˟+e0gas>}!L>&j"SUi@/tX._h0q1}EkpD<͉i: Fˢa6-1y /×S  RNn߃Q\N0ņ0mDG _LUR%'rV:1ܢN&U{T(C΄=so +.I{ҔPdK#1.;<b;@)80Q]V's8X*u.Z6*,SoQ?_=7> 6'8@F([NyĤh(ǔ3uk*!92p XV*]qg$yQCa!M֪2 Ѣ~ bOGؤ!rR KKRB ud7w='\?eK¼CgC@G '6{OVE@µDo?ZF .pHl)GޤlAC'6v} C10cBP'./Bw[uS9Ϊ}ocMAC(K3};Cd:ݜ̍w冀zV,$gdK7`$m#c*qɳ,PBB _ϥ^< FL#iΓvUZH5媮W 8}tsk̍ @(`g`R;4 Ҧ?rG. ':Kͮ]l^t`v0'+Hg@ @$ CH7[Pq\h)[h=TҘ͘8B96&@ ~aCԎA`}5hB$\,T@\`ŌԬ03+W5>ʍG0ml; O=>H%RЮ >731~=epI"*&`ԎhU??;H0ٍ}I US?=Q'b5!tԆ0ŅsUWJF=F"H&?(0GKp۰0- `JNTr l՗Rbrw]5ٍS#8C.Me Qϯa%A] ȇVΒyE:{*$샌c/`Iʂ9)\w5-NLNGbJ,$8(ΪƝ pCC u0T[*v0D#!9^?cή(uXʋ]ѪAks]}Jj:n[)HDwԳ/y9!޹B5@#9-{O(X}pzvW ˃+frޡ܄N^>𢱏wU o?̝'bAj(g-3 Uh=Ъa \*#W@>2:*?s PCF2'2.QfےڨvPJT }A0T8NxuhOdpgG=EJpx;4??UιYqu~'6HcT"ub}2(W>!j>jJn5eOjx~E߇pvD[p~Ri8 .@ u>..I)2+IVЖx]PvvRBGm/G,QgW)7yl?)L? dQB=Nh(=т2;,+g#~ צdBT,lCc*n;W/PΣո}1zr|T'[t;(8&9 .S>q!,|hC y˰T5ЏOBxCA @ t(XzyiJ[ WR -L&; %w鉛.? 'H|'ekGDci~5@YxUQs!CCBA-g{ҹ<9AGF> y,XdRMW ug*Ảs g43Y 8(FbJLPֹ1aSct&aGDFw<ǣ%L)ƬPrܸ~/SUWe\v ֍#Ob#ZJJʩq_U]09@a#KrrkjKJg .+S$q8DZ[) )37CK_ mP9kKTH@|_EYIviy/`1sk*J ˴YAN ë1( t$gW0g&$ـmpXXsTKJ#e+䗫qiY& ˆ"ؿбX5nTi0 Pd ^DT Tw;M3xkKOȅEXg.qvV3$(t~~K! ?uth#`e%$VcՂջG`[Q锒e}G( Ts!) t<Lr8ed-@1@"WU>nPu8,i8G/& "5 ;-s_P` 7|Jb6}0Bi<6TBk7GFyFX-IA#Ej/@*`gikEOA`ExkE$i#!HqK:kHε/f@o%!C(%DU˷}O3 mɖQ}D4d!$"*Īx +jMf8MC|mO{>:;Kd)a>yec 8; QRPsO0jᲜ'DH+k/B$\j_~ WJ6M a"?"L.;JCnHeqI2⮀@ dY?A$" {1K"Ʒt@Z>uXȧI.H8v( ?(?_SB;}Q] .Rb W ؼCYo}$#jºjbHM0{Z7E͉[GQ9 d$SYTjFܯ*< {z@YL[_졎^A=#್_hbFtQS$]^Ђ C*?+Fי1,<[e!#X'6/Ũ:1vD=)(k=M5@r=8I0^P*H[<غ1$&EX'zg98>Tm7Tv mR#+BL=^;] X}_ g΀ @~8X9=D /T@7~}BY/r1QZ햬tL,ʌ,V\'cg ] XH*rN^9{1B{JQN9g[Ox/ C wME)*N_)XP,JhJ.k":G|WA1/ĔRؑ+pޚc,7up L8pbh%;ņc$6d[rf+ 9TTP&$@4'44Mn j;S_Vk_èFP9nox2s37Ĺ-#!8I৖ùZ%@A ܄_~y|:P.9(O)U؋ G $*G@x<^^"W =_[}w)if==TE0%H;,"*HH.U(gQ@9 bX}\60\ ]@Rx_@*8Czͻ"w`˾n dͩ}n7݅뎱2}@o*"5%(>" }lCWg_0!BvtVGd.!r* ּ?O!{K <:-&чИWX[ x}l^*TGMe )ɉ_ N_"]gfafEpHDV 3B^4 <1e8n]7g؜W{q[y!u2F~'68ɝl҆?\N q29 HJ/@2C8ssdw5[ "̬Nl`wk71RC2lN7.y|9{'Xg<$O!V6l 8},0֛R5`H+;7rE? ]|u7fb&W@58 4{yHN0oo}l?H{Gu<}P T. 9A%5@ɏߌ~Gm]w_/l3R_bˣ&~ւ/T3~/®!& !-[dԜē>RX.KIm09ࣥ{R^v*C: )AzWuֺ,JjLxa=Cxznm2,"fL7!.+v)"MmJLguT_^/:/M*Zv=.kNKLAH+"v׽Ϯѽm~?fŗB1Fn{9J~$l"m#6ft {n*@0:.E+0;-Mg$8}xV8qc?tJہB^ʼnCGMrct㠖8>}W< Psx .*bj+з sS| PnS7j(c}pTp = pdY9 R}.3cq*1 u҃y[=T!*W_=I,wU PEAhv55-q<6 2,!))IAnxQ~yX-o "&F&񸪧>ԛ/rba P^Y RgqFPL~|}6 \ t C^7C<|V ﯏[M#t,q}qS>P\CUDwc{s~ d;2] X@ڝ.^}Dj):ͨv6tTQm 1B TCB!!?ʙ=u{A/$4h+EHM/^բ;wۃ-IBJ yL~Ryc&.ˁEkNUO&Fb Tu  8#RY.vqC 3G;q~g}8̼8>ZW1%!!u8MlBDB|LꓡuWX| B@ rV^ï 3Xy8$5v^G .LL2VXo)ZtH^+'d 0ܯ;# n  vOU6q!|:v@pF%=靆+e)U#Ms'(.m<&jbA1U6s랈 w);f3 ث"4 $ : ] 4@R@+?~ -6к,O)Io<.NCJ +\&aUVRL~wM)/ 8c Z ^ @u,&]5X.xy i9O/n>26H_YVLeل8DW g4& qHd!)܂EUW6XZw?IBצx҇yw\u)`*ǙaQ 쵕b*1y` "xIL*^+y0_˗,xzWxP_H)@/[B0o$UY}Aa]*z T|fTEo~s/ɮR؃.!nYq| nKf5a@`g4bHμ9I`x[RTqDJzHB`g#,qI@)Y   :-wW`jR~ >f-7;~  齹7Y|L?`%^ @.d2A`OEH87 xR/އ^]Q+߹Xu/ؕ]-]Je_dP8jJ_y[h5 Hl_J 4"V0Gz9=ՇW ()9nvDP.ɊχJǴQ@±=m+g}ejlDGAPMP}x{ `=+}㋗u#_o«oE}7u~z +8#Wr)x2A*"+CW_A3@ftf"1zHo1{r &.-r? Lp6Mw)v'?A,;mK-Ar&$)?ah؈҆޷υ L=L.AFJ>Pi ۉ(++aܶHtuhe/n|_7k"Q P+9 Lh7)<#cww/~[ A!#`NHW ŻNZ73xh |~KtzrVc@bKb~@P![>cV 9 .@ 㲚yy^y_\lSl!Ԝ% ZWArfg5}CQ9.s2,~LTdUCu*vds׿?}5 A@NZ7Npܸ𮅨CcUU|Xv 7_O}GXeDfAXZ!A.O꧜yم?K蝫^GΊ||M4k,/]w݅CEw -LF ~[>ݘ0$7Q=)ewTN>5?NcVV~YA:Ln֝4YL{`Rf&6qYf'U*ȱ`?+%VS&%T m O7`n@RZ]S<$0'3?/%PHҞ~Z$j~W} Gã0@W`u K@gBsUELV$sK弨^@~}@7$6A@PRi M2 'I:ٔ]dҁ`;Z1@_nEkLʢVrA 㨂^%fռB!0 ÚCaI`.A3k03)I$Yf EX [coꘟi0@0Yq(2RR#[MşTIfsٹ^NIg7`k!N?!0 L,bLj#2_ U1өi_La 0 а#;c -+a]3Rܿ~r 1X3#nEŠE{$ (݂2}6 I.*D"X ga+tL~I*pV U01KҦ$\'JE:k79}k:wZYy@;q&#iW:QTUzK {WtW1FsƮ(޲";q#. .SXw\ʉO'K~6 0!E#g^Vˋ/=GB6B 0@0q|}Oy(r޲9.w͉e2!$샌c9#n[& 54|fc^MN~gÁҺq51 |0Ds6{>Ke{VNZw@$f Drq0y ;M>KΪf%2+ m8XF-f/Zw@pxʜ3_ twڟn[Eg{b t$#lAmx̯(!=F,@;cv G2 z 뼱MsǶ=֪su uՔEn3Js7saB _ߧSV篙tQI ^\_x%~y!USus  M]w8m,g&@_x֜X>;su /_]8o,X@iNlx=_ ]``vxV0̈',54L D<}凷V| TkrNXY X9>9/ˈF*>؈Lg{ڻ=:J}۩펊"v7Y~R09=Os>/SkjNaMJb$ǥd!!)u<˒ruY_Zw΀ZTӥ\ļ\F0` :01pd*Q53Z7̀Y=9 _) ̄_0SLOxU 4CZ7Ԁaǜlܹj]xCu;fjb $g_}m` $) )I0`P< N k`'٩e8 IENDB`( 08w7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777776v382777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777791<77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737y7777774y+ٶm'Ѫe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$r*7774e$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ͪe$ʹk'w,47777776v67777U  ـ-` j#j% ՈR777777777Qf;SSSU+N77777777qASSSSSRF(  77777774!KSSSSSSSSe:5777777~.:! QSSSSSSSSSSzF },777777p(R/SSSSSSSSSSSSSN-p)777777j& k=RRRRRRRRRRRSSSSSM,m(777777i&|GQQQQQQQQQQRRRRSSSSd:l&777777h&1 LNNNNNNNNOOPPQQRRSSSSyF j&777777i&E( KKKKKKKKKKLLMNOPQRRSSSSM(i&777777i& ]5yFyFyFyFyFyFyFyFyFyFzF{G}HIKMOPQRSSSSSRC& i&777777i& a8o@o@o@o@o@o@o@o@o@o@p@pArAwDzF{GJLOQRRSSSSSS_7i&777777i&$a8e:e:e:e:e:e:e:e:e:e:e:e:h<xELNJ{GJMOQRSSSSSSSvD i&777777i&1 [5[4[4[4[4[4[4[4[4[4[4[4[4_7p@uCyEIMN~HLNPRRSSSSSSSM'i&777777i&?% T0T0T0S0S0S0S0S0S0S0S0S0S0Z4g;i<l>p@wDIORLMPQRSSSSSSSSRC' i&777777i&WRMmZ|h|h{h{h{h{h{h{h{h{h{h{h{h~ijjjkkkmnj:XQOQRSSSSSSSSSS^6XXX````````````````````````````````````i&777777i&>3)ƮV\XPRRSSSSSSSSSSuD i&777777i&1 {TZ^\RRRRSSSSSSSSSM&i&777777i&H) Y3l=X]``TRRRRRRSSSSSSQB& i&777777i& [5_7iJ,|UZ^`aUQQQQRRRSSSSRR[4i&777777i&*k>e:\5rȼRW[^_`WOOPPQRRRSSRRPm? i&777777i&D' vDl>b9Y3X%RVYZ\\VLMNOQQRSSRRPMvDi&777777i& a8}HsBi=_7`=`MQSUVVXVLLMOQRRRRRPMJuD2 i&777777i&vDKzFpAf;]5t^ð}GJLNNPQSTMKMOQRRRRPMJwDl>?% i&777777i&1 MMJwEm?c9Z4tCwDyE|F}GHJLOSOKNPQRRQPMJwDl>b8i&777777i&L+QOL}HtCj=`7Z4bAm>o?p@rAsBvC{FJNTTMOQRRQPMJwDl>b8i&777777i& h=RQNK{GqAg;]6|aGe:f:g;i<j<m>rAyEJPVXPPQRQPMJwDl>b8i&777777i&}HRRPNJxEn?d:[4ѵܾݿڼպ϶̻ʾȼǼǼĺ|cL|cL}dL}dL~dLeMgMjNmOpPd4Z]UQRQPMJwDl>b8i&777777i&1 OSRQOM~IuCk>a8Y3ӻv-z0z/w.r,j)a&fvX^aYRQPMJwDl>b8i&777777i&M,SSSRQOL|GrBh<^6nO3ԧ~x/z0z/w.r,k)b&qJY]ac]RPMJwDl>b8i&777777i& h<SSSRRPNKyFo@e:[5vȊQv.x.w.u-p+j)b&^,i:]`cdaSMJwDl>b8i&777777i& yFSSSSRQPMIvDl>b9Y3ûr-r,s-r,o+k*f(_%X"a]acdd`RJwDl>b8i&777777i&,NSSSSSRQOL|HsBi=`7nF"̺l*l*l*k)i)e'a&[#U!t^acddb^RwDl>b8i&777777i&C' SSSSSSRRPNKzFp@i<n?}cͫg(f(d'b&`%^$Z#V!QrVe&bdddb_ZNm?b8i&777777i&c9SSSSSSSRQPMJwEsByEp@³_b&`%]$Z#X"V!S PMZ5wIcdddb_ZTId:G2i&777777i& yFSSSSSSSSRQOL}HIKwDpBj1_%[#W"T!Q ON}LzJwHodeedb_ZTLwEX*P.i&777777i&/OSSSSSSSSRRQNLQPItBkLb&^$X"T OM|KzJxIvGtFseeedb_ZTLyEX*Mk>i&777777i&K+SSSSSSSSSSRRPPWUN|Gq@ѳc'Ĥйr:y<~>ȁ@̄@΅AφÄ́@s3m1f eedb_ZTLyEX*MPJ i&777777i&c9SSSSSSSSSSSRQT]YSLyEn>’ff(dm/p,w.{01Ԁ2ց2ׂ2ׁ3o&ddddb_ZTLyEX*MPRP8! i&777777i& yFSSSSSSSSSSSSRYa]XQJuC[7w9j)l3`m*t-x/{0~11Ԁ2Ԁ2Ձ2u*ddcb_ZTLyEX*MPRRSV2i&777777i&*NSSSSSSSSSSSSS^c`[VN~HrA{p,m*h(϶h(n+t-w.y/z/{0|0}1~1x-e ba^ZTLyEX*MPRRSSo@i&777777i&C' RSSSSSSSSSSSSUadb_ZTLyEo?Ǿڻt-r,m*Яc(h(l*o+r,s,t-u-w.y/|0{.f!`^ZTLyEX*MPRRSSSJi&777777i&b9SSSSSSSSSSSSSXdeda]XQJvCwM%ҟox.v.s-Ƒ`{O`%d'f(h(j)k*m*o+s,w.z/|0j$]YTLyEX*MPRRSSSSQ8 i&777777i& xESSSSSSSSSSSSS[fedc`\VO~HrAf̅B{0z0x/y3X"[#]$_%`%a&d'g(k*p,u-y/{0n'ZSLyEX*MPRRSSSSSSV2i&777777i&,NSSSSSSSSSSSST_ffedb_ZTM{Fp@Ķ{0~1~1}0z0ҿQS U!V!W"X"[#_%d'j)p,v.x/x.m)VLyEX*MPRRSSSSSSSm? i&777777i&C' RSSSSSSSSSSSSUbfffedb^XRKwDqC߾~1Ԁ2Ձ2Ԁ21്e>MNNOQT!X"^$d'l*r,v.w.s-j(QyEX*MPRRSSSSSSSSJ i&777777i&]6SSSSSSSSSSSSSWdfffeec`\WPItBqSעp1ׂ2ك3ك3؂3ۘYy~U.U.V/W/X0Z1^2c3i6p9o,t-u-s,l*c&Md.OPRRSSSSSSSSSP&i&777777i&"SSSSSSSSSSSSSZfffffedb_[UN|FsAчBԀ2ك3ۄ3ۄ3ۄ3ڃ3ك3؂3ց2Ձ21}0y/s-k*b&mxEr,t-r,l*d'[#g.]TRRSSSSSSSSSSwDi&777777i&g;SSSSSSSSSSS_ffffffedb^YSL}HP}1ց2ڃ3ۄ3ۄ3ۄ3ۄ3ڃ3ك3ׂ2Ձ2Ԁ2}1y/t-m*d'tNgp,s-r,m*e']$h/_aYRSSSSSSSSSR1 i&777777i&Y3SSSSSSSSUbfffffffeca]WPRW!oG߽1ׂ2ۄ3܅4܅4ۄ3ڃ3؂3ց2Ԁ21}1{0x.s,l*d'c0p,s-r,n+g(_%h/`cd]SSSSSSSSN*i&777777i&:! QSSSSSWdfffffffedc`[V[ ^$U!נnԀ2ك3ۄ3܅4ۄ3ڃ3؂3Ԁ21}0z0y/w.t-o+i)b&Z#v6t-t-p+j)c&i/`cefaUSSSSSwD i&777777i&ISSSZeffffffffedb^[g&d'[#S Ѕ?Ձ2ك3ۄ3ۄ3ۄ3؂3Ԁ2~1z0w.u-r,p+m*j)d'^%X"vWv.v.s,n+h(k/adeffdWSSSe:i&777777i& l>T]ffffffffffedacp*k)a&X"`4}1ց2ڃ3ۄ3ۄ3ڃ3ց2~1z/v.q,m*j)h(e'b&^%Y#T!rVyy/y/v.s,n+m/bdefffe[SM,i&777777i& Yffffffffffedcj$w.q,h(_%V!s߽1؂3ۄ3ۄ3ۄ3ك3Ԁ2|0w.p,k)f(b&_%\$Z#W"T O\6}1|0z0w.t-n0cdefffff}Gi&777777i&"Zfffffffffffeer(|0v.n+e'\$T ο֞kԀ2ك3ۄ3ۄ3ۄ3؂31z/t-m*f(`%[#W"U!S PN}LyIʇH1~1{0y/o0defffffffN i&777777i&@$ bffffffffffffg!z.Ԁ2{0t-l*b&Y"V'Ѕ>Ձ2ڃ3ۄ3܅4ۄ3ׂ21y/s,j)b&[#V!Q OM}L{JxIvGiՁ2Ԁ2~1|0p0deffffffff[&i&777777i&g;fffffffffffffk#Հ0؂31y/r,i)_%W"_~1ց2ۄ3܅4܅4ۄ3؂31y/r,j)XtsrqqqqppuvwwxxxxxÑcց2Ԁ2~1|0߻޿ݿݾݾ޿޿£ָk(eefffffffffcC& i&777777i& Nfffffffffffffp&ڄ3ۄ3ց2}1w.o+f(\$T!İ޻1؂3ۄ3܅4܅4ۄ3؂31z/s,j)Ţl*t-y/}1Ԁ2Ձ2ց2ׂ2ׂ2ց2Ԁ21|0y/w.t-r,p,p+p+p,s,u-w.z0~1|/i"defffffffffffg;i&777777i&Uffffffffffffgu)݄4ۄ3ك3Ԁ2{0u-l*c'Z#S!֞jԀ2ك3ۄ3܅4܅4ۄ3ك3Ԁ2{0t-l*Sz@r,w.{0~11Ԁ2Ԁ2Ԁ21}1z0x.t-p,m*k)i)h(h(j)k*n+r,v.z/~1Ӏ1m%eefffffffffffk=i&777777i& dfffffffffffh }.݅4݅4ۄ3؂31z/s,j)`%W"rKσ<Ձ2ڃ3܅4݅4݅4܅4ڃ3Ձ2}0v.o+i,Ŝvm*t-x.z0{0|0|0{0z/x.u-q,m*i)e'b&`%_%_%a&c&f(k)p+u-z/~1ր2t)efffffffffffWi&777777i&>$ dfffffffffj"ׁ1ކ4݅4܅4ۄ3ׂ2~1x.p+g(^$U!~1ց2ۄ3܅4݅4݅4܅4ۄ3ׂ2~1y/r,k)̽®h(n+r,t-u-v.v.u-s-p,m*i)d'`%\$Y#W"V!W"X"Z#^%c&i)o+u-z01ׂ2{-g fffffffff\i&777777i&*\fffffffq&܅3ކ4ކ4݅4܅4ڃ3Ձ2|0v.m*d'[#S ޹1؂3ۄ3܅4݅4݅4݅4ۄ3ك3Ԁ2{0v.p+Юd*f(j)l*m*m*m*l*j)h(d'`%\$X"T!Q POOPS W"[#b&i)p,w.}0Ձ2ڃ3Հ/l#fffffffQ i&777777i& Offffgu)݆4ކ4ކ4݅4݅4ۄ3ك31z0s-k)a&X"c7םgԀ2ك3ۄ3݅4݅4݅4݅4܅4ڃ3ց2~1z/u-ɓa}T^%a&c&d'd'c'b&a&_%[#X"T!PN}LW,bf]+\$c'l*t-z01؂3ۄ3ڄ3q&fffffj<i&777777i&l>ffh |.ކ4ކ4ކ4ކ4݅4܅4ۄ3ׂ2~1x/q,h(^%V!vς:Ձ2ڃ3܅4݅4݅4ކ4݅4܅4ۄ3ك3Ձ2~1z/|7V!X"Y#Z#Z#Z#Y#X"V!T PN|Kc=ʻ͸n9h(p,x/~1ׂ2ۄ3܅4݄4w*ffdG( i&777777i&H) i"׀1ކ4ކ4ކ4ކ4ކ4݅4܅4ڃ3Ձ2}0v.n+e'[#S µ~1ׂ2ۄ3܅4݅4ކ4ކ4݅4݅4܅4ۄ3؂3Ձ21|0OPQ R R R Q POM|KyIuhn+w.}0ց2ڃ3܅4݅4ކ4}.`,i&777777i&B(1ކ4ކ4ކ4ކ4ކ4݅4݅4ۄ3ك3Ԁ2{0t-k*b&Y"Y)޸1؂3ۄ3܅4݅4ކ4ކ4ކ4݅4݅4܅4ۄ3ك3ׂ2Ԁ2⺕Z1|K}L}L~L}L}L|K{JyIvGhď^v.}0Ձ2ڃ3܅4݅4ކ4ކ4u.% i&777777i&h?܅4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3؂31y/r,i)_%V!c֛eԀ2ك3ۄ3݅4݅4ކ4ކ4ކ4ކ4݅4݅4܅4ۄ3ڃ3ك3ےM~~߭~߬}ݬ}۪}ר|Ѥzʠyw}oooooooooqw0|0Ձ2ڃ3܅4݅4ކ4ކ4ކ4Ԁ2G+i&777777i& ^$ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3ց2}1w.o+f(\$T!Ǵ΁8Ձ2ڃ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4ۄ3ۄ3ڃ3ك3؂3ׂ2Ձ2Ԁ2}1y/t-l*c'|^Иd}0Ձ2ڃ3܅4݅4ކ4ކ4ކ4ކ4݅4pDi&777777i&% r,ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4ۄ3ك3Ԁ2{0u-l*c&Z#T#~1ׂ2ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4݅4܅4ۄ3ۄ3ك3ׂ2Ձ2Ԁ21}0y/t-l*d'k?»۵~1ց2ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4^$i&777777i&>%1ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3؂31z/s,j)`%W"uPݶ1؂3ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4ۄ3ك3ց2Ԁ2~1}0{0y/v.q,k)c&]&ĩ1؂3ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4r,i&777777i&ׂ2ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3ց2~1x.p+f(]$U!՚bԀ2ك3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4ۄ3ك3ց21}0z/w.u-s-p,l*g(`%Y"ž¤Ԁ2ك3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4n+i&777777i& u-ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4ڃ3Ձ2|0v.m*d'Z#S ΀6Ձ2ڃ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4ۄ3ׂ21{0x.t-p,n+l*i)e'a&[#V!}fׂ߰2ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4Z#i&777777i&p+ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4ۄ3؂31z0s-j)a&X"f<~1ׂ2ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4ۄ3ك3Ԁ2}0x.s-n+i)f(c&a&^$Z#V!Q gFْOڃ3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4Z#i&777777i& Z#ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3ׂ2~1x/p,h(^%V!zܴ1؂3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3؂31{0u-n+h(b&^%[#X"V!T PM~P&͵؂3ۄ3܅4݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ۄ3h?i&777777i&h?ۄ3ކ4ކ4ކ4ކ4ކ4݅4܅4ڃ3Ձ2}0v.n+e'[#S ƺ՘`Ԁ2ك3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3؂31y/s-k*d']$X"T!Q ON}LzJvGڎHۄ3܅4݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4}0=%i&777777i&>%}1ކ4ކ4ކ4݅4݅4ۄ3ك3Ԁ2{0t-k*b&Y"[,Ё6Ձ2ڃ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3ׂ21y/r,j)a&Y#T OM|KzJxIvGtFoߜ^ۄ3܅4݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4q,#i&777777i&o+ކ4ކ4݅4܅4ۄ3ׂ21y/r,i)_%V!gҿ~1ׂ2ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3؂31y/r,j)ȧˮt:{=?ɂ@̄@̈́@̈́@̈́@̄@ύPƪ˰ݑKۄ3܅4݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4^$ i&777777i& Z#ކ4݅4܅4ڃ3ց2}1w.o+e'\$T ȶܴ1؂3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4ۄ3ك31z0t-k)mk)r,x/|01Ԁ2Ԁ2Ԁ2Ԁ2Ԁ2Ԁ2׊Cߪx㼗众徙ܐJۄ3ۄ3܅4݅4݅4ކ4ކ4ކ4ކ4ކ4݅4vGi&777777i&h?ڃ3ۄ3ك3Ԁ2{0u-l*c&Y#S#Ԗ]Ԁ2ك3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4ۄ3ك3Ԁ2{0u-m*u?|Fo+u-y/|0~1111Ԁ2Ԁ2ց2ׂ2ك3ڃ3ۄ3ۄ3܅4܅4݅4݅4݅4ކ4ކ4ކ4ކ4ކ41E*i&777777i&?&|0؂31y/r,i)`%W"wSπ5Ձ2ڃ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ڃ3ց2}1w.p,i)Ƣj)p+t-w.y/z/{0{0}0~1Ԁ2ց2ك3ۄ3ۄ3܅4݅4݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4r,#i&777777i&k)~1w.o+f(]$U!ϻ~1ׂ2ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3؂31z/t-m*˼d'i)m*p+r,s,t-v.w.z/}01ց2ڃ3ۄ3܅4݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4^$ i&777777i& T u-m*d'Z#S ܲ1؂3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4ۄ3ك3Ձ2}1x.s,Υe1a&d'g(i)j)k*m*p,t-x.{01ׂ2ۄ3܅4݅4݅4ކ4ކ4ކ4ކ4܅4kAi&777777i&]8i)a&X"i@Ԗ[Ԁ2ك3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4ۄ3؂3Ԁ2|0x.ɌSfY"[#^$_%`%b&d'h(m*r,w.}0Ԁ2ك3ۄ3܅4݅4ކ4ކ4ކ4~1A'i&777777i&1 X"U!~π4Ձ2ڃ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4ۄ3ڃ3ׂ21}0|1ȴQ T U!V!W"Y"\$`%e'l*s-y/~1ց2ۄ3܅4݅4ކ4ކ4r,$i&777777i& sEɾι~1ׂ2ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3ڃ3ׂ2Ԁ21Ҿ~MMNOPR U!Y#_%f(n+v.|0Ԁ2ك3ۄ3݅4݅4_% i&777777i&ܱ1؂3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4ۄ3ۄ3ك3ׂ2ᲇoP~U.U.V/W/Y0Z1_3d4k7q5s,y/1؂3ۄ3ۄ4vGi&777777i&XXXՔYԀ2ك3ۄ3݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4݅4܅4ۄ3ۄ3ك3؂3ׂ2ց2Ԁ21}0x/r,j)a&q,x.~1ց2}0F+i&777777i&2ց2ڃ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4݅4܅4ۄ3ۄ3ك3؂3ׂ2Ձ21}1y/s-l*c'j}Lv.}0n*$ i&777777i&̶~1ׂ2ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4݅4܅4ۄ3ڃ3؂3ց2Ԁ21}1{0w.r,k*c'pHxu-X" i&777777i&@@@ۮ1؂3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4ۄ3ڃ3ׂ2Ԁ2~1|0z0x/v.s-o+i)a&^)i@i&777777i&ӑTԀ2ڃ3ۄ3݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4ۄ3ׂ2Ԁ2}0y/w.t-r,o+m*i)d'^%W"(((i&777777i&~3ց2ڃ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4ۄ3ك3Ձ2}1y/u-p,m*j)h(e'b&^%Y"T {dZZZi&777777i&)))ʲ~1ׂ2ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3؂31{0v.o+j)e'b&_%\$Z#W"T Pc@i&777777i&rrrڬ1؂3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3ׂ2~1y/s,l*e'_%Z#W"U!S QO~L{M!i&777777i&ҎPԀ2ڃ3ۄ3݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3ׂ2~1x/q,i)b&[#V!R PNM|KzJwHKKKi&777777i&~2ց2ڃ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3ׂ2~1x/q,i)mutsrrqqqq³srlgdddddddddddddddddddddFFFi&777777i&XXXȯ1ׂ2ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3؂31y/s,k)ð i&777777i&۪~Ԁ2ك3ۄ3݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4ۄ3ك3Ԁ2{0u-m*Ǡ|i&777777i&ӎNց2ڃ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4ڃ3Ձ2}1x.r,H"""i&777777i&111G+|1ۄ3܅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4܅4ۄ3؂31{0v.q,fffi&777777i&sss& s,݅4݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4ۄ3ڃ3ց2~1{0w.i&777777i&=== a&ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4ۄ3ك3Ձ21|0֠oi&777777i& vG݅4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4ۄ3ك3ׂ2Ԁ2ӄ:@@@i&777777i&<<% 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 y+n'6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 =$ oB577lAL,SS:" tE77=$ b9RRSSV2>% 777!  pAMMMOQSo@7! 777! \5a8a8a8e:rALQSK 7! 777!  )))),;" X2sBNRSQ8! 7! 777! hFPRSSSV2sss7! 777! G=3RVPQRSm? &&&7! 777! "C& |p@NM~INRQpA &&&7! 777! ?% h<7 ZD0O-X2l=yFOQ}HQ/&&&7! 777! `8J[5?/!vql0'9+S:#|L!OP}HS0&&&7! 777!  xEQxEL,ung}Hl*NWX|HS0&&&7! 777! *NSOm?<# \%W"kA}sk[aRT0&&&7! 777! C' RSRLd9>)ʾ_9G+1 IC$ m.gy^FtFN[#l)[f:^8PSJ7! 777! E( RSSSVcdYk=XI<˻y/=- 9" X5V!e'pB_9PSSP3 7! 77@' ƉOSSSYefbRW2ЬԀ2ׂ2Ԇ=́dfT 7! 777! Vfffgq(o+sEwnɹ1ڃ3x.W"v`K[PGPJDa_\ǘkx.ӱʺʺ̻̺s6effP 7! 77C' ŧ_fffh }.1e'Z6Ъց2ۄ3{0\$d1s,y/v.j)X"{JyIV!k)r*f fffY;" 777! X2ffl#؁1ۄ3z/Y"M4ːXك3݅4Ԁ2k)zbS X"S nBK-4 ;(O1Mo+{.j"fdI* 7! 777! l#k#܄3ކ4ك3r,{JreY|3ۄ3ކ4ۄ3{0șm:#>%9" ) XRLe)~1؃2i#.7! 777! sE݅4ކ4݅4Ԁ2h(b;ȶ1݅4ކ4݅4ۄ3և>ܫ}ר|Ǟxsxusyvtxvttqoá~1܅4ۄ3b;7! 77;% œ^$ކ4ކ4ކ4܅4{0\$M0ϩց2݅4ކ4ކ4܅4ց2z/r,c&nBǴԀ2݅4ކ4ކ4R 9" 77B(ĵm*ކ4ކ4ކ4ڃ3u-OcSDˎUڃ3ކ4ކ4ކ4ۄ3z0f(R oCM.~ݻك3ކ4ކ4ކ4e';% 777! Z#ކ4݅4Ձ2k*i@}2ۄ3ކ4ކ4ކ4ڃ3u-T!Q11 WUR؍G܅4ކ4ކ4P7! 777! h?ك3}1`%Q1ƴ1݅4ކ4ކ4ކ4ڃ3v.X'sMv5~9ʀ:סpⶎۏH܅4ކ4ۄ3h?7! 777! >%o,S WC0ϧׂ2݅4ކ4ކ4ކ4܅4}0a&~Y"e'k*u-1ۄ3݅4ކ4{08" 7! 777! ^9zqʌRڃ3ކ4ކ4ކ4ކ4݅4ׂ2t-ͲÿL.[7oCZ#u-ك3ކ4i)7! 777! |2ۄ3ކ4ކ4ކ4ކ4ކ4܅4Ձ2ՙbϼλȹIB% 77mA ك2v- vG775lA=$ 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 1u*6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 <# lA677<77777777777777777777777777777777777777777777789:( @ 827777777777777777777777777777776=7JSSM773 PSSSSO1 77B% yFyFzFPURSSV277 =# 5 ./ 7 A% i<YUSSl> 77c9YK?WbXSSj=ljh772 K]5mMSXYRwD{77M,SJD( 7 Q.T]wE{77 i=SRxETB1^j=x\`R{ 77}HSSTyE|vwH]8{vqaT{ǽsC772 PSSZ[^6~ooƘnr(U{ǽMO0 77R/SST]eVO6ãºY"i)w.c$|ʿMSSN,77SSTafcOxmbȏXЛi@3)L8%W.b&~[USS77PWdfff!L~4ׂ2w.a&tha'µ`dWO77W2effs(s-_<ȷց2x.}LQ1PF;KŦʹdfeZ277ffgy,ڃ3h(m]OѪۄ3u-{d[Î^ŁAIgiД]y,h ff77ei!0ކ4~1U!͐W܅4{0fpOX"MM.F6'_H3Z#~1ր0j"f77b:ق2ކ4݅4v.f>3݅4ۄ3φBμʺzMB9I@8~|ƹw.݅4ڃ2g<77ڃ3ކ4ކ4ۄ3l*cO<ų؂3ކ4ކ4ك3x/f(rU;͂=݅4ކ4ۄ377ކ4ކ4ކ4Ԁ2[#|Ш܅4ކ4݅4z0S M/-ɿل5ކ4ކ4ކ477`:ڃ3݅4y/rE͎T݅4ކ4݅4z0tQv=Dեxݱ܋Aކ4ކ4ۄ3i@776! y/p+^C*~2݅4ކ4ކ4Ձ2r6oCS m*ց2ކ4ކ4}0=%77O}riŲ؂3ކ4ކ4ކ4܅4Ԁ2ڱӲgb]rh_nQy/݅4m*77ѧ܅4ކ4ކ4ކ4ކ4ڃ3y/h(wIx2X" 77 ̌P݅4ކ4ކ4ކ4݅4}1W"A' }`E77HHH2ކ4ކ4ކ4ކ4ކ4Ԁ2i3o/=%77жۄ3ކ4ކ4ކ4ކ4ކ4܅4}1SJB77T!ކ4ކ4ކ4ކ4ކ4ކ4݅4݅4܅4܅4X" 77d<ۄ3ކ4ކ4ކ4ކ4ކ4ކ4ۄ3h?77:#|0ކ4ކ4ކ4ކ4}0>%77m*ކ4ކ4n+77j7777777777777777777777777777777x(0 7j77777777777777777777777s7 yFSS{G77*}HLQUSN-771 >/":0%=1%G7'vM&ZSSI* 77]6M4X\SMqg\ 77 yFKld\[B+W2ZQzl^ 77+NQuCϹk3wU\}m_4#77I* SSXa:tL;*~{x|_p`T#H) 77c9STa]gWHkh.t-s*q`V$Sf;77SVceW~4ƭѽjfa\PFk7vcb'VS77Qffn%Oֽց2o+W"whg(fR77ff w*|0lR;֥w1jIqƒbLjN˦խz/gf77h ~/܅4s-~xҋHك3TiIwHH/ibZt\F{0~/h!77z/ކ4ׂ2X"Ԁ2݅4؄6ќkgѓYކ4{/77ކ4ކ4~1lK+ּۄ3ކ4Ԁ2Q T2ɿڔSކ4ކ477R ݅4w.ynd֤uކ4ކ41jSB֝jۖV݅4ކ4W"77]8`%ҊFކ4ކ4ۄ3ˎUvmM4g,ك3ۄ3b;77!Ձ2ކ4ކ4ކ4ڃ3w.\)v.;$77GGGֻۄ3ކ4ކ4ކ4}0lQ8WNF77ۥqކ4ކ4ކ4ކ4ց2}d 77111@@@@@@111^<ڃ3ކ4ކ4ކ4݅4ׇ=ؖW֔V`B778" {0ކ4ކ4ކ4ކ4|0:#77l*ކ4ކ4m*7677777777777777777777777AAAAAAAAAAAAAAAAAAAAAAAA(  Հ,77777777777777|-7 @% P.|GwE 77  XN)77B' dSCоXMDY0M77a8Rg>Y77wEVLϺg'c vC77XerR4۩|_rwDX77ft)zrޔOd4d]Vʒ^׷ٽf 77|.s-܅4ƂB}n\8c`^vh|.77݅4X-ѻ݅4ކ4n+}k[ގC77h)}oa۩zކ4܅4udϕ_vrl*77ߓMކ4ކ4ԗ^ػsnj|dNT!77݅4ކ4ކ4{0dB$ 77>>>y/ކ4ކ4ۄ377j)ކ4ކ4q3(7u+77777777777777s*AAAAAAAAAAAAAAAAvifm-0.14/data/graphics/vifm.png000066400000000000000000000246171475151500600165750ustar00rootroot00000000000000PNG  IHDR>asBIT|d pHYs 7˭tEXtSoftwarewww.inkscape.org<tEXtTitleVifm logo stEXtAuthorHescalalu\XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/ IDATx}w\ŕ3=I#M@B`0cp~` cgٻux߮u|c |6&xg#JH$@9hr0zT۷g{SNuv:u9E qxEsv!r\7kj7Eei4> ӄӄ-rx-33ݫaZq:eb ~&60;җY&SrrᵋPxKGdUTU gիښ<iJ~[;aF9 5Pƥ?tGo9q]y4zМKuuܢ~3Z|Ŵ [iq?“ 93_p㷯s?܏꧷{=ԠXX4IjnM9N?󯣗~R#IΝ>M;*^E_B;E_[Y:JFh$zAn GԿXV`]O!xtd::/Mo*h~??Qƌj6V=M/ƭvgk̫>[j`G~rLr4|Jf/B:_ ,ah3gg<ǟ+8o|=}hq5s&FE[+Ep2{v0p>} `΍y%V~Jj/=+owgH WߍWy.U nCdz?gI97zwc۾? nʮ18/[v_`4M*^_~KZӁsZ/3 [(% ~ؼyg OkzL v]x͔z*48-Le[Ȇ JL0+ f&1'̮yzɗ^zʅ'úuh* n{am X&Vxz'NرcY.|  ThvcO >es~1ӐDl*bP|aT@1P f:ZfVBUJ===b4~8q---)~Q@v rkE2[p3 d( ۶mb<̭S%O@@T]}#(f/Ũ⫄bT~(T10ix.L/m^!,[g P* ϫO_!Wcї慞Sk^Ţz}[}I '\B2[]mX83)d,Z\nϮSB {i:XA+h@_B5jwq?Y.ɵe= gD𝻟ıAeFhBj:& WTvBAįoOrm h3a\)>܅=kwylQ^&;w" hs+Zu=>) FylP6 uPPE1hp@EõoXc~V2:E'OhzW_u;۽l˚P(sTatsKad'ATNA (FU~ggAݒ:B@PX|Sylx#O߇(*6>I6ŢIGj`̫f͉WvĠ+**( TKc3m1 ݳ>}D |Q܀&xWqDbϙ K$qlŰ0Tp_ 5P5P_-rK"TqK ag~o'^Ѳk;%{dEl6>^vݸ/"qe\k;csCr9CP!P"Xg)UE ąmI @O 0k 4*OR hߦCfZJω-Ԫ(% [v" C1*p~ N_P͸?kaEU50EZxhklrq?:Ț?vG_vAfjbpPQ(@GگWy9IvL{~!5o? X $b ?ztb[5-qOLӂz6]r0 K8y q__gRe9B0pŢ JJ)P ,_C@\M::BX|ד8;+^z|@JՂ?vDcm"Pgю CX2<;83Q/D.2'J]tK|7B>Rw(xϾhq\S wc΍P1خN Tyd0t'"#}$ ;G(:~fz(Һh)4bGwׅ˺|Sm_~B{E!5S6?[ʖ$Y*5J$}GP{u@ʲB!4ϪwÜj2*Uva悒;fS110+x$* TU$CH=fM3:|^F)J˚uP\|~g.j[H[ V] Ut2+z:^r犡m~5? $a E dl{ZlIнBg1+ yӃX2f錅[#?z HH\ !p?=@ fPvcI}W+Zm6g Sf X3 q28T})kšP>l;e!]_K ϲz%cm3zLi@284._<!!do u) сNFla{3ch}ର)(FԿjǾ)%2ӨјH9L[n{]foh[>֓e)LK$3ו u:`1A47S fJ0,є5;O;O9 TATp#4@J Ff:|KB咛`_3֗y xᵨfAj$3Bլ&(kq9Zt+nggls2{]cB4{{ڡ>0Efh턒 5S`sβT 惢DItrN.hO o2SjG:ao!e!hDY>5{1sa*,Z&-Bgg zmHR(jSmmC!"\1jQ}o([!d§4#pf!{PUċyTN w(5a`Y-'/W70lmi8v jD?d=D͈e={638[@UсN#dy_F սwbDO'9^A-G (xCqwP8cX?EoĔMf { fH‰pRh _EvǠƀpIiɄѽ1W[0zV5WݎʋnЏGau~ jcӺ9Bvh"ʿY ̺Wmoac] վ@ `({Aa˾ ^_ʏu\ZzL5d:>V3t2{6)aw-vmտ{{̮v7Bd(:f o/F2 zXnlb46'gwapr PP5} <KI҉8WЫ_+Yk:\"Şq1_H&\3L6 e'Ch S>'kjE-*T2]"4/@ Ԉ^:X?EddEa4}W-`_{/.7ΎyB>iH7IEmTeDՅ:vr,-f<Zgz(z,"pIJ''Lp3 b;0!L@cjܷb_G* 3rz\ r#C}H%F .i4rfV+.I,p4w EpJȴ\h8I w7"̸kP~WUP}'P=L s܆Xξ(HDJ~ n^u .̠f ~ez~tFpQpG3)L ]e0Hg٘oPӱ@(j+w0ÝRㄇWhLb>t~XȪIĝ>'&Wٳ%^MkH?iQ;"_Za4Lb}r8Vl_*`#sJAKuw7]naW 6w(.f ?\!j[&e`h'XIh_nnK#qj;MNs(L+rv !˱ښ/nz!Nu?jecLvoĶ3[ƽ@NuQV"ADDi+L֖ neyɼ]8?"D[JN7Ȅ;V6ml\;J(U7c$B_|도FIeM>Oʿm{I)̶PTQ@"ʾb6?c #]$chzfJT6+Ж<5|m0 fVQ#V4kH-"mqlYV-+$V6qs'r+#(CO`SwL0QIEߚ|60ٵ}k 32Q 5}@uxn/m=0k@KwL O`ֿqʕ@jdP֫( !!2fMx%zX^yxx`H'(HUðXi.Ű]'KTjֽ$:P5 PL(UTĆz12 p2tG0㱂C7JUI!}]'s@F U0IbSjIe V:.eb t+_Qt1P{O#Jcу++-%gV p/ 6,P Z06Pf\RzR$p˿ N,} f:@'e T)@z[' ,&п0=&,Gfμ7vz?* nT-)ʾ>Y:>;##ffT@}6=&Y(Ҍoϐ|se(,;L\)ȩ, bB~p3UP<#6DT&:j6 M bd4L x>&1f [@hͨh{ƿlt;4PJWX^v{Rbn>y %#"0\GPA5 T wT?g ѡnYiJ]#v ch╂<##;Ps'A ԡB@,Hw< ^z{,o [L[W oz_t(I7\иiߥ“4tۅ+lE`GAaWNO!:De}>⢴A,faBL(N($NlEdӓVYq|3+Q^AWQn&a%BaŹlŠPesk,"4\ gMCm*g ꇋe vh-o<3I n~@ ƹC7Q 1KgXWpik]쿜]YK:68ptf%wNI đ8SphDzP2_؃0UD$˯iU)O>ͭ ZV XWdIDATL+)!|yFaD( mq[`8^aʎLvA?/ȷ H0]}ع>\\EekzS:yWcf?c0c=`Io SzFA_"3Vg΁ B^X .lNCDQUUϜ+31ԲtC8v\T1WDw2Ҧ :E+9uZ1D԰4̤`pdS9Cdz.B$>1vة ` 6j-u9ӿddu}>Lɡ 3ڃګnDr *Aļֶz|-͠Bp& #/PYtT7Շ6lTb#@!U Dڟ__P7Y86j+}m0/`0WyyAuH3%<ǿ3Sc;(6 7a(\^eb D󋁖@9JgiX#sn̉*g]gW8lx}*<`x{O 2+Qw $'3vb`ï\?Qfĩhbc:JyoKG̈́c5ţ&H|v8Hg3uP_[TaS yDJ9RT(:X2 ™V*A !޾ V@C#]h<{L[?LanD[@.ql|HZ4C#,GxcS/g8CKY-\R^ظkںp7bi"=0i,OA%f)Ph. nA bxK$x&HD1} D1CcYt3]x^< qV > /t c=t99fJ.츯#w9aY+5xxS~vdg0"]"NXzEPVxON^u[d+=߀9 L4 ]g '`h'^0lUs֭\Oy >u@pxD S nDt_1ՃU#R1 k}@'%9k Jn^۝)g~H7f?7%Po%XR&Gr=&C&ipfa\L_ [>= H-WRXŁ[yiHToIENDB`vifm-0.14/data/graphics/vifm.svg000066400000000000000000000536031475151500600166050ustar00rootroot00000000000000 Vifm logo Hescalalu Vifm logo image/svg+xml vifm-0.14/data/man/000077500000000000000000000000001475151500600140675ustar00rootroot00000000000000vifm-0.14/data/man/vifm-convert-dircolors.1000066400000000000000000000050111475151500600205630ustar00rootroot00000000000000.TH VIFM\-CONVERT\-DIRCOLORS 1 "08 February 2025" "vifm 0.14" .\" --------------------------------------------------------------------------- .SH "NAME" .\" --------------------------------------------------------------------------- vifm\-convert\-dircolors \- converts ls colorscheme to vifm colorscheme .\" --------------------------------------------------------------------------- .SH "SYNOPSIS" .\" --------------------------------------------------------------------------- \fBvifm\-convert\-dircolors\fR [\fI\-h\fR|\fI\-\-help\fR] [\fI\-e\fR|\fI\-\-environment\fR] [\fI-r\fR|\fI--human-readable\fR] [\fIdircolors_file\fR] .\" --------------------------------------------------------------------------- .SH "DESCRIPTION" .\" --------------------------------------------------------------------------- Converts ls file highlighting configuration (dircolors) into set of vifm highlight commands. Outputs results to standard output. .\" --------------------------------------------------------------------------- .SH "OPTIONS" .\" --------------------------------------------------------------------------- .TP .BI "\-h, \-\-help" Displays brief help message. .TP .BI "\-e, \-\-environment" Instructs the script to use \fB$LS_COLORS\fR environment variable instead of data from file or standard input stream. .TP .BI "\-r, \-\-human\-readable" Output patterns on separate lines. .TP .BI dircolors_file Converting of colorscheme file only. .LP When both \fB\-\-environment\fR option and \fBdircolors_file\fR are absent, standard input stream is read. .\" --------------------------------------------------------------------------- .SH "EXAMPLES" .\" --------------------------------------------------------------------------- Parse \fB$LS_COLORS\fR and append results of conversion to \fI~/.config/vifm/colors/Default.vifm\fR: .EX .B vifm\-convert\-dircolors \-e >> ~/.config/vifm/colors/Default.vifm .EE Parse \fI/etc/DIR_COLORS\fR and store results of conversion to \fI~/.config/vifm/colors/ls\-based.vifm\fR: .EX .B vifm\-convert\-dircolors /etc/DIR_COLORS > ~/.config/vifm/colors/ls\-based.vifm .EE .\" --------------------------------------------------------------------------- .SH "SEE ALSO" .\" --------------------------------------------------------------------------- .BR dircolors (1), .BR ls (1), .BR vifm (1) .\" --------------------------------------------------------------------------- .SH "AUTHOR" .\" --------------------------------------------------------------------------- This manual page was written by xaizek . vifm-0.14/data/man/vifm-pause.1000066400000000000000000000026031475151500600162260ustar00rootroot00000000000000.TH "VIFM-PAUSE" "1" "08 February 2025" "vifm 0.14" .\" --------------------------------------------------------------------------- .SH "NAME" .\" --------------------------------------------------------------------------- vifm-pause \- a helper script for vifm .\" --------------------------------------------------------------------------- .SH "SYNOPSIS" .\" --------------------------------------------------------------------------- Only called automagically from within vifm .LP vifm-pause .\" --------------------------------------------------------------------------- .SH "DESCRIPTION" .\" --------------------------------------------------------------------------- A helper script for vifm, not for standalone use. .LP Prints "Press return ..." message and waits until Enter key is pressed. .\" --------------------------------------------------------------------------- .SH "SEE ALSO" .\" --------------------------------------------------------------------------- .BR vifm (1) .\" --------------------------------------------------------------------------- .SH "AUTHOR" .\" --------------------------------------------------------------------------- This manual page was initially written by Edelhard Becker , for the Debian GNU/Linux system (but may be used by others). .br Then it was adjusted by Hendrik Jaeger and updated by xaizek . vifm-0.14/data/man/vifm-screen-split.1000066400000000000000000000024151475151500600175220ustar00rootroot00000000000000.TH "VIFM-SCREEN-SPLIT" "1" "08 February 2025" "vifm 0.14" .\" --------------------------------------------------------------------------- .SH "NAME" .\" --------------------------------------------------------------------------- vifm-screen-split \- a vifm helper script to run in GNU screen split .\" --------------------------------------------------------------------------- .SH "SYNOPSIS" .\" --------------------------------------------------------------------------- Only called automagically from within vifm .LP vifm-screen-split .\" --------------------------------------------------------------------------- .SH "DESCRIPTION" .\" --------------------------------------------------------------------------- A helper script for vifm, not for standalone use. .LP Prints "Press any key to close this region..." message and waits to close the split. .\" --------------------------------------------------------------------------- .SH "SEE ALSO" .\" --------------------------------------------------------------------------- .BR screen (1), .BR vifm (1) .\" --------------------------------------------------------------------------- .SH "AUTHOR" .\" --------------------------------------------------------------------------- This manual page was written by xaizek . vifm-0.14/data/man/vifm.1000066400000000000000000007513031475151500600151230ustar00rootroot00000000000000.TH VIFM 1 "08 February 2025" "vifm 0.14" .\" --------------------------------------------------------------------------- .SH NAME .\" --------------------------------------------------------------------------- vifm \- vi file manager .\" --------------------------------------------------------------------------- .SH SYNOPSIS .\" --------------------------------------------------------------------------- vifm [OPTION]... .br vifm [OPTION]... path .br vifm [OPTION]... path path .\" --------------------------------------------------------------------------- .SH DESCRIPTION .\" --------------------------------------------------------------------------- Vifm is an ncurses based file manager with vi like keybindings. If you use vi, vifm gives you complete keyboard control over your files without having to learn a new set of commands. .\" --------------------------------------------------------------------------- .SH OPTIONS .\" --------------------------------------------------------------------------- vifm starts in the current directory unless it is given a different directory on the command line or 'vifminfo' option includes "savedirs" (in which case last visited directories are used as defaults). .TP .BI - Read list of files from standard input stream and compose custom view out of them (see "Custom views" section). Current working directory is used as a base for relative paths. .TP .BI Starts Vifm in the specified path. .TP .BI " " Starts Vifm in the specified paths. .LP Specifying two directories triggers split view even when vifm was in single-view mode on finishing previous run. To suppress this behaviour :only command can be put in the vifmrc file. .LP When only one path argument is found on command-line, the left/top pane is automatically set as the current view. .LP Paths to files are also allowed in case you want vifm to start with some archive opened. .TP .BI "\-\-select " Open parent directory of the given path and select specified file in it. .TP .BI \-f Makes vifm instead of opening files write selection to $VIFM/vimfiles and quit. .TP .BI "\-\-choose-files |\-" Sets output file to write selection into on exit instead of opening files. "\-" means standard output. Use empty value to disable it. .TP .BI "\-\-choose-dir |\-" Sets output file to write last visited directory into on exit. "\-" means standard output. Use empty value to disable it. .TP .BI "\-\-delimiter " Sets separator for list of file paths written out by vifm. Empty value means null character. Default is new line character. .TP .BI "\-\-on\-choose " Sets command to be executed on selected files instead of opening them. The command may use any of macros described in "Command macros" section below. The command is executed once for whole selection. .TP .BI "\-\-plugins\-dir " Additional plugins directory (can appear multiple times). The last one added has the highest priority. .TP .BI "\-\-logging[=]" Log some operational details to $XDG_DATA_HOME/vifm/log or $VIFM/log. If the optional startup log path is specified and permissions allow to open it for writing, then logging of early initialization (before configuration directories are determined) is put there. .TP .BI \-\-server\-list List available server names and exit. .TP .BI "\-\-server\-name " Name of target or this instance (sequential numbers are appended on name conflict). .TP .BI "\-\-remote" Sends the rest of the command line to another instance of vifm, \-\-server\-name is treated just like any other argument and should precede \-\-remote on the command line. When there is no server, quits silently. There is no limit on how many arguments can be processed. One can combine \-\-remote with \-c or + to execute commands in already running instance of vifm. See also "Client\-Server" section below. .TP .BI "\-\-remote-expr" passes expression to vifm server and prints result. See also "Client\-Server" section below. .TP .BI "\-c or +" Run command-line mode on startup. Commands in such arguments are executed in the order they appear in command line. Commands with spaces or special symbols must be enclosed in double or single quotes or all special symbols should be escaped (the exact syntax strongly depends on shell). "+" argument is equivalent to "$" and thus picks last item of of the view. .TP .BI "\-\-help, \-h" Show a brief command summary and exit vifm. .TP .BI "\-\-version, \-v" Show version information and quit. .TP .BI \-\-no\-configs Skip reading vifmrc and vifminfo. .LP See "Startup" section below for the explanations on $VIFM. .br .\" --------------------------------------------------------------------------- .SH General keys .\" --------------------------------------------------------------------------- .TP .BI "Ctrl-C or Escape" cancel most operations (see "Cancellation" section below), clear all selected files. .TP .BI Ctrl-L clear and redraw the screen. Can also reload file list in appropriate modes (like normal and visual). .\" --------------------------------------------------------------------------- .SH Basic Movement .\" --------------------------------------------------------------------------- The basic vi key bindings are used to move through the files and pop-up windows. .TP .BI "k, gk, or Ctrl-P" move cursor up one line. .TP .BI "j, gj or Ctrl-N" move cursor down one line. .TP .BI h when 'lsview' is off move up one directory (moves to parent directory node in tree view), otherwise move left one file. .TP .BI l when 'lsview' is off move into a directory or launch a file, otherwise move right one file. See "Selection" section below. .TP .BI gg move to the first line of the file list. .TP .BI G move to the last line in the file list. .TP .BI gh go up one directory regardless of view representation (regular, ls-like). Also can be used to leave custom views including tree view. .TP .BI "gl or Enter" enter directory or launch a file. See "Selection" section below. .TP .BI H move to the first file in the window. .TP .BI M move to the file in the middle of the window. .TP .BI L move to the last file in the window. .TP .BI "Ctrl-F or Page Down" move forward one page. .TP .BI "Ctrl-B or Page Up" move back one page. .TP .BI Ctrl-D jump back one half page. .TP .BI Ctrl-U jump forward one half page. .TP .BI n% move to the file that is n percent from the top of the list (for example 25%). .TP .BI "0 or ^" move cursor to the first column. See 'lsview' option description. .TP .BI $ move cursor to the last column. See 'lsview' option description. .TP .BI Space switch file lists. .TP .BI gt switch to the next tab (wrapping around). .TP .BI {n}gt switch to the tab number {n} (wrapping around). .TP .BI gT switch to the previous tab (wrapping around). .TP .BI {n}gT switch to {n}-th previous tab. .\" --------------------------------------------------------------------------- .SH Movement with Count .\" --------------------------------------------------------------------------- .TP Most movement commands also accept a count, 12j would move down 12 files. .TP .BI [count]% move to percent of the file list. .TP .BI [count]j move down [count] files. .TP .BI [count]k move up [count] files. .TP .BI "[count]G or [count]gg" move to list position [count]. .TP .BI [count]h go up [count] directories. .\" --------------------------------------------------------------------------- .SH Scrolling panes .\" --------------------------------------------------------------------------- .TP .BI zt redraw pane with file in top of list. .TP .BI zz redraw pane with file in center of list. .TP .BI zb redraw pane with file in bottom of list. .TP .BI Ctrl-E scroll pane one line down or column right (in transposed ls-like view). .TP .BI Ctrl-Y scroll pane one line up or column left (in transposed ls-like view). .\" --------------------------------------------------------------------------- .SH Pane manipulation .\" --------------------------------------------------------------------------- Second character can be entered with or without Control key. .TP .BI "Ctrl-W H" move the pane to the far left. .TP .BI "Ctrl-W J" move the pane to the very bottom. .TP .BI "Ctrl-W K" move the pane to the very top. .TP .BI "Ctrl-W L" move the pane to the far right. .TP .BI "Ctrl-W h" switch to the left pane. .TP .BI "Ctrl-W j" switch to the pane below. .TP .BI "Ctrl-W k" switch to the pane above. .TP .BI "Ctrl-W l" switch to the right pane. .TP .BI "Ctrl-W b" switch to bottom-right window. .TP .BI "Ctrl-W t" switch to top-left window. .TP .BI "Ctrl-W p" switch to previous window. .TP .BI "Ctrl-W w" switch to other pane. .TP .BI "Ctrl-W o" leave only one pane. .TP .BI "Ctrl-W s" split window horizontally. .TP .BI "Ctrl-W v" split window vertically. .TP .BI "Ctrl-W x" exchange panes. .TP .BI "Ctrl-W z" quit preview pane or view modes. .TP .BI "Ctrl-W \-" decrease size of the view by count. .TP .BI "Ctrl-W +" increase size of the view by count. .TP .BI "Ctrl-W <" decrease size of the view by count. .TP .BI "Ctrl-W >" increase size of the view by count. .TP .BI "Ctrl-W |" set current view size to count. .TP .BI "Ctrl-W _" set current view size to count. .TP .BI "Ctrl-W =" make size of two views equal. .LP For Ctrl-W +, Ctrl-W \-, Ctrl-W <, Ctrl-W >, Ctrl-W | and Ctrl-W _ commands count can be given before and/or after Ctrl-W. The resulting count is a multiplication of those two. So "2 Ctrl-W 2 \-" decreases window size by 4 lines or columns. Ctrl-W | and Ctrl-W _ maximise current view by default. .\" --------------------------------------------------------------------------- .SH Marks .\" --------------------------------------------------------------------------- .TP Marks are set the same way as they are in vi. .LP You can use these characters for marks [a\-z][A\-Z][0\-9]. .TP .BI m[a\-z][A\-Z][0\-9] set a mark for the file at the current cursor position. .TP .BI '[a\-z][A\-Z][0\-9] navigate to the file set for the mark. .LP There are also several special marks that can't be set manually: .RS 2 .IP \- 2 \(aq (single quote) \- previously visited directory of the view, thus hitting \(aq\(aq allows switching between two last locations .IP \- 2 < \- the first file of the last visually selected block .IP \- 2 > \- the last file of the last visually selected block .RE .\" --------------------------------------------------------------------------- .SH Searching .\" --------------------------------------------------------------------------- .TP .BI "/regular expression pattern" search for files matching regular expression in forward direction and advance cursor to next match. .TP .BI "/" perform forward search with top item of search pattern history. .TP .BI "?regular expression pattern" search for files matching regular expression in backward direction and advance cursor to previous match. .TP .BI "?" perform backward search with top item of search pattern history. .TP Trailing slash for directories is taken into account, so /\\/ searches for \ directories and symbolic links to directories. At the moment // works too, \ but this can change in the future, so consider escaping the slash if not \ typing pattern by hand. .TP Matches are automatically selected if 'hlsearch' is set. Enabling 'incsearch' \ makes search interactive. 'ignorecase' and 'smartcase' options affect case \ sensitivity of search queries as well as local filter and other things \ detailed in the description of 'caseoptions'. .TP .BI [count]n go to the next file matching last search pattern. Takes last search direction into account. .TP .BI [count]N go to the previous file matching last search pattern. Takes last search direction into account. .TP If 'hlsearch' option is set, hitting n/N to perform a search and go to \ a matching item can reset existing selection in normal mode. It happens when \ there are no prior search results (i.e., no files with highlighting of the \ matched part), otherwise the selection is left as is. Resetting search \ matches in any way (like running :nohlsearch or pressing Escape) will force \ the search next time n/N is pressed and cause matching files to be selected. .LP See also "Regular expressions" section. .TP .BI [count]f[character] search forward for file with [character] as first character in name. Search wraps around the end of the list. .TP .BI [count]F[character] search backward for file with [character] as first character in name. Search wraps around the end of the list. .TP .BI [count]; find the next match of f or F. .TP .BI [count], find the previous match of f or F. .LP Note: f, F, ; and , wrap around list beginning and end when they are used alone and they don't wrap when they are used as selectors. .\" --------------------------------------------------------------------------- .SH File Filters .\" --------------------------------------------------------------------------- There are three basic file filters: .RS 2 .IP \- 2 dot files filter (does not affect "." and ".." special directories, whose appearance is controlled by the 'dotdirs' option), see 'dotfiles' option; .IP \- 2 permanent filter; .IP \- 2 local filter (see description of the "=" normal mode command). .RE Permanent filter essentially allows defining a group of files names which are not desirable to be seen by default, like temporary or backup files, which might be created alongside normal ones. Just like you don't usually need to see hidden dot files (files starting with a dot). Local filter on the other hand is for temporary immediate filtering of file list at hand, to get rid of uninterested files in the view or to make it possible to use % range in a :command. For the purposes of more deterministic editing permanent filter is split into two parts: .RS 2 .IP \- 2 one edited explicitly via :filter command; .IP \- 2 another one which is edited implicitly via zf shortcut. .RE Files are tested against both parts and a match counts if at least one of the parts matched. .TP Each file list has its own copy of each filter. .TP Filtered files are not checked in / search or :commands. .TP Files and directories are filtered separately. This is done by appending \ a slash to a directory name before testing whether it matches the filter. \ Examples: .EX .LP " filter directories which names end with '.files' :filter /^.*\\.files\\/$/ " filter files which names end with '.d' :filter {*.d} " filter files and directories which names end with '.o' :filter /^.*\\.o\\/?$/ .EE See also "Regular expressions" and "Patterns" sections. The basic Vim folding key bindings are used for managing filters. .TP .BI za toggle visibility of dot files. .TP .BI zo show dot files. .TP .BI zm hide dot files. .TP .BI zf add selected files to permanent filter. .TP .BI zO reset permanent filter. .TP .BI zR save and reset all filters. .TP .BI zr clear local filter. .TP .BI zM restore all filters (undoes last zR). .TP .BI zd exclude selection or current file from a custom view. Does nothing for regular view. For tree view excluding directory excludes that sub-tree. For compare views zd hides group of adjacent identical files, count can be specified as 1 to exclude just single file or selected items instead. Files excluded this way are not counted as filtered out and can't be returned unless view is reloaded. .TP .BI "=regular expression pattern" filter out files that don't match regular expression. Whether view is updated as regular expression is changed depends on the value of the 'incsearch' option. This kind of filter is automatically reset when directory is changed. .\" --------------------------------------------------------------------------- .SH Tree-related Keys .\" --------------------------------------------------------------------------- While some of the keys make sense outside of tree-view, they are most useful in trees. .TP .BI [z go to first sibling of current entry. .TP .BI ]z go to last sibling of current entry. .TP .BI zj go to next directory sibling of current entry or do nothing. .TP .BI zk go to previous directory sibling of current entry or do nothing. .TP .BI zx toggle fold under the cursor or parent entry of the current file if cursor is not on a directory. .\" --------------------------------------------------------------------------- .SH Other Normal Mode Keys .\" --------------------------------------------------------------------------- .TP .BI [count]: enter command line mode. [count] generates range. .TP .BI q: open external editor to prompt for command-line command. See "Command line editing" section for details. .TP .BI q/ open external editor to prompt for search pattern to be searched in forward direction. See "Command line editing" section for details. .TP .BI q? open external editor to prompt for search pattern to be searched in backward direction. See "Command line editing" section for details. .TP .BI q= open external editor to prompt for filter pattern. See "Command line editing" section for details. Unlike other q{x} commands this one doesn't work in Visual mode. .TP .BI "[count]!! and [count]!" enter command line mode with entered ! command. [count] modifies range. .TP .BI Ctrl-O go backwards through directory history of current view. Nonexistent directories are automatically skipped. .TP .BI Ctrl-I if 'cpoptions' contains "t" flag, and switch active pane just like does, otherwise it goes forward through directory history of current view. Nonexistent directories are automatically skipped. .TP .BI Ctrl-G show a dialog with detailed information about current file. See "Menus and dialogs" section for controls. .TP .BI "Shift-Tab" enter view mode (works only after activating view pane with :view command). .TP .BI ga calculate directory size. Uses cached directory sizes when possible for better performance. As a special case calculating size of ".." entry results in calculation of size of current directory. .TP .BI gA like ga, but force update. Ignores old values of directory sizes. .LP If file under cursor is selected, each selected item is processed, otherwise only current file is updated. .TP .BI gf find link destination (like l with 'followlinks' off, but also finds directories). On Windows additionally follows .lnk-files. .TP .BI gF Same as gf, but resolves final path of the chain of symbolic links. .TP .BI gr only for MS-Windows .br same as l key, but tries to run program with administrative privileges. .TP .BI av go into visual mode for updating current selection, any existing selection is preserved. .TP .BI gv go into visual mode restoring last selection. .TP .BI [reg]gs if register is present, then all files listed in that register that are visible in current view are selected. When no register is specified, restore the last selection saved for this view (similar to what gv does for visual mode selection). When you leave a directory, its saved selection is remembered for that path and visiting the directory again restores it. Selection for up to 10 distinct file-system locations are remembered. .TP .BI gu make names of selected files lowercase. .TP .BI "[count]guu and [count]gugu" make names of [count] files starting from the current one lowercase. Without [count] only current file is affected. .TP .BI gU make names of selected files uppercase. .TP .BI "[count]gUU and [count]gUgU" make names of [count] files starting from the current one uppercase. Without [count] only current file is affected. .TP .BI e explore file in the current pane. .TP .BI i handle file (even if it's an executable and 'runexec' option is set). .TP .BI cw change word is used to rename a file or files. If multiple files are selected, behaves as :rename command run without arguments. .TP .BI cW change WORD is used to change only name of file (without extension). .TP .BI cl change link target. If multiple files are selected, an editor is spawn to edit paths. .TP .BI co only for *nix .br change file owner. .TP .BI cg only for *nix .br change file group. .TP .BI [count]cp change file attributes (permission on *nix and properties on Windows). If [count] is specified, it's treated as numerical argument for non-recursive `chmod` command (of the form [0-7]{3,4}). See "Menus and dialogs" section for controls. .TP .BI [count]C clone file [count] times. .TP .BI "[count]dd" move files to trash directory if 'trash' option is set, otherwise delete them permanently. See "Trash directory" section below. When "s" is present in 'cpoptions', operates on selected files or, in the absence of selection, the current one. When the flag isn't set, always operates on the current file only. .TP .BI "d[count]" like dd, but accepts motions/selectors. .TP .BI "[count]DD or D[count]" like dd and d, but always omits trash directory (even when 'trash' option is set). Affected by "s" flag in 'cpoptions'. .TP .BI "[count]Y or [count]yy" yank files. When "s" is present in 'cpoptions', operates on selected files or, in the absence of selection, the current one. When the flag isn't set, always operates on the current file only. .TP .BI "y[count]" yank files specified by motion/selector. .TP .BI p copy yanked files to the current directory or move the files to the current directory if they were deleted with dd or :d[elete] or if the files were yanked from trash directory. See "Trash directory" section below. .TP .BI P move the last yanked files. The advantage of using P instead of d followed by p is that P moves files only once. This isn't important in case you're moving files in the same file system where your home directory is, but using P to move files on some other file system (or file systems, in case you want to move files from fs1 to fs2 and your home is on fs3) can save your time. .TP .BI al put symbolic links with absolute paths. .TP .BI rl put symbolic links with relative paths. .TP .BI t select or unselect (tag) the current file. .TP .BI u undo last change. .TP .BI Ctrl-R redo last change. .TP .BI dp in compare view of "ofboth grouppaths" kind makes corresponding entries of the other pane equal to the current one. If at least one file is selected, the command processes selection, otherwise current file. .br The semantics is as follows: \- nothing is done for identical entries \- if file is missing in current view, its pair gets removed \- if file is missing or differs in other view, it's replaced \- file pairs are defined by matching relative paths .br File removal obeys 'trash' option. When the option is enabled, the operation can be undone/redone (although results won't be visible automatically). .br Unlike in Vim, this operation is performed on a single line rather than a set of adjacent changes. .TP .BI do same as dp, but applies changes in the opposite direction. .TP .BI "v or V" enter visual mode, clears current selection. .TP .BI [count]Ctrl-A increment first number in file name by [count] (1 by default). .TP .BI [count]Ctrl-X decrement first number in file name by [count] (1 by default). .TP .BI ZQ same as :quit!. .TP .BI ZZ same as :quit. .TP .BI . repeat last command-line command (not normal mode command) of this run (does nothing right after startup or :restart command). The command doesn't depend on command-line history and can be used with completely disabled history. .TP .BI ( go to previous group. Groups are defined by primary sorting key. For name and iname members of each group have same first letter, for all other sorting keys vifm uses size, uid, ... .TP .BI ) go to next group. See ( key description above. .TP .BI { speeds up navigation to closest previous entry of the opposite type by moving to the first file backwards when cursor is on a directory and to the first directory backwards when cursor is on a file. This is essentially a special case of ( that is locked on "dirs". .TP .BI } same as {, but in forward direction. .TP .BI [c go to previous mismatched entry in directory comparison view or do nothing. .TP .BI ]c go to next mismatched entry in directory comparison view or do nothing. .TP .BI [d go to previous directory entry or do nothing. .TP .BI ]d go to next directory entry or do nothing. .TP .BI [r same as :siblprev. .TP .BI ]r same as :siblnext. .TP .BI [R same as :siblprev!. .TP .BI ]R same as :siblnext!. .TP .BI [s go to the previous selected entry or do nothing. .TP .BI ]s go to the next selected entry or do nothing. .TP .BI [S same as [s, but wraps. .TP .BI ]S same as ]s, but wraps. .\" --------------------------------------------------------------------------- .SH Using Count .\" --------------------------------------------------------------------------- .TP You can use count with commands like yy. .TP .BI [count]yy yank count files starting from current cursor position downward. .TP Or you can use count with motions passed to y, d or D. .TP .BI d[count]j delete (count + 1) files starting from current cursor position downward. .\" --------------------------------------------------------------------------- .SH Registers .\" --------------------------------------------------------------------------- .LP vifm supports multiple registers for temporary storing list of yanked or deleted files. Registers should be specified by hitting double quote key followed by a register name. Count is specified after register name. By default commands use unnamed register, which has double quote as its name. Though all commands accept registers, most of commands ignores them (for example H or Ctrl-U). Other commands can fill register or append new files to it. Presently vifm supports ", _, a-z and A-Z characters as register names. As mentioned above " is unnamed register and has special meaning of the default register. Every time when you use named registers (a-z and A-Z) unnamed register is updated to contain same list of files as the last used register. _ is black hole register. It can be used for writing, but its list is always empty. Registers with names from a to z and from A to Z are named ones. Lowercase registers are cleared before adding new files, while uppercase aren't and should be used to append new files to the existing file list of appropriate lowercase register (A for a, B for b, ...). Registers can be changed on :empty command if they contain files under trash directory (see "Trash directory" section below). Registers do not contain one file more than once. Example: .EX "a2yy .EE .br puts names of two files to register a (and to the unnamed register), .EX "Ad .EE .br removes one file and append its name to register a (and to the unnamed register), .EX p or "ap or "Ap .EE .br inserts previously yanked and deleted files into current directory. .\" --------------------------------------------------------------------------- .SH Selectors .\" --------------------------------------------------------------------------- .TP y, d, D, !, gu and gU commands accept selectors. You can combine them with \ any of selectors below to quickly remove or yank several files. .LP Most of selectors are like vi motions: j, k, gg, G, H, L, M, %, f, F, ;, \ comma, ', ^, 0 and $. But there are some additional ones. .TP .BI a all files in current view. .TP .BI s selected files. .TP .BI S all files except selected. .LP Examples: .RS 2 .IP \- 2 dj \- delete file under cursor and one below; .IP \- 2 d2j \- delete file under cursor and two below; .IP \- 2 y6gg \- yank all files from cursor position to 6th file in the list. .RE When you pass a count to whole command and its selector they are multiplied. So: .RS 2 .IP \- 2 2d2j \- delete file under cursor and four below; .IP \- 2 2dj \- delete file under cursor and two below; .IP \- 2 2y6gg \- yank all files from cursor position to 12th file in the list. .RE .\" --------------------------------------------------------------------------- .SH Visual Mode .\" --------------------------------------------------------------------------- Visual mode has two generic operating submodes: .RS 2 .IP \- 2 plain selection as it is in Vim; .IP \- 2 selection editing submode. .RE Both modes select files in range from cursor position at which visual mode was entered to current cursor position (let's call it "selection region"). Each of two borders can be adjusted by swapping them via "o" or "O" keys and updating cursor position with regular cursor motion keys. Obviously, once initial cursor position is altered this way, real start position becomes unavailable. Plain Vim-like visual mode starts with cleared selection, which is not restored on rejecting selection ("Escape", "Ctrl-C", "v", "V"). Contrary to it, selection editing doesn't clear previously selected files and restores them after reject. Accepting selection by performing an operation on selected items (e.g. yanking them via "y") moves cursor to the top of current selection region (not to the top most selected file of the view). In turn, selection editing supports three types of editing (look at status bar to know which one is currently active): .RS 2 .IP \- 2 append \- amend selection by selecting elements in selection region; .IP \- 2 remove \- amend selection by deselecting elements in selection region; .IP \- 2 invert \- amend selection by inverting selection of elements in selection \ region. .RE No matter how you activate selection editing it starts in "append". One can switch type of operation (in the order given above) via "Ctrl-G" key. Almost all normal mode keys work in visual mode, but instead of accepting selectors they operate on selected items. .TP .BI Enter save selection and go back to normal mode not moving cursor. .TP .BI av leave visual mode if in amending mode (restores previous selection), otherwise switch to amending selection mode. .TP .BI gv restore previous visual selection. .TP .BI "v, V, Ctrl-C or Escape" leave visual mode if not in amending mode, otherwise switch to normal visual selection. .TP .BI Ctrl-G switch type of amending by round robin scheme: append \-> remove \-> invert. .TP .BI : enter command line mode. Selection is cleared on leaving the mode. .TP .BI o switch active selection bound. .TP .BI O switch active selection bound. .TP .BI "gu, u" make names of selected files lowercase. .TP .BI "gU, U" make names of selected files uppercase. .TP .BI cl change target of symbolic link(s). .TP .BI cw same as running :rename command without arguments. .\" --------------------------------------------------------------------------- .SH View Mode .\" --------------------------------------------------------------------------- This mode tries to imitate the less program. List of builtin shortcuts can be found below. Shortcuts can be customized using :qmap, :qnoremap and :qunmap command-line commands. .TP .BI "Shift-Tab, Tab, q, Q, ZZ" return to normal mode. .TP .BI "[count]e, [count]Ctrl-E, [count]j, [count]Ctrl-N, [count]Enter" scroll forward one line (or [count] lines). .TP .BI "[count]y, [count]Ctrl-Y, [count]k, [count]Ctrl-K, [count]Ctrl-P" scroll backward one line (or [count] lines). .TP .BI "[count]f, [count]Ctrl-F, [count]Ctrl-V, [count]Space" scroll forward one window (or [count] lines). .TP .BI "[count]b, [count]Ctrl-B, [count]Alt-V" scroll backward one window (or [count] lines). .TP .BI [count]z scroll forward one window (and set window to [count]). .TP .BI [count]w scroll backward one window (and set window to [count]). .TP .BI [count]Alt-Space scroll forward one window, but don't stop at end-of-file. .TP .BI "[count]d, [count]Ctrl-D" scroll forward one half-window (and set half-window to [count]). .TP .BI "[count]u, [count]Ctrl-U" scroll backward one half-window (and set half-window to [count]). .TP .BI "r, Ctrl-R, Ctrl-L" repaint screen. .TP .BI R reload view preserving scroll position. .TP .BI F toggle automatic forwarding. Roughly equivalent to periodic file reload and scrolling to the bottom. The behaviour is similar to `tail \-F` or F key in less. .TP .BI a switch to the next viewer. Does nothing for preview constructed via %q macro. .TP .BI A switch to the previous viewer. Does nothing for preview constructed via %q macro. .TP .BI i toggle raw mode (ignoring of defined viewers). Does nothing for preview constructed via %q macro. .TP .BI [count]/pattern search forward for ([count]\(hyth) matching line. .TP .BI [count]?pattern search backward for ([count]\(hyth) matching line. .TP .BI [count]n repeat previous search (for [count]\(hyth occurrence). .TP .BI [count]N repeat previous search in reverse direction (for [count]\(hyth occurrence). .TP .BI "[count]g, [count]<, [count]Alt-<" scroll to the first line of the file (or line [count]). .TP .BI "[count]G, [count]>, [count]Alt->" scroll to the last line of the file (or line [count]). .TP .BI "[count]p, [count]%" scroll to the beginning of the file (or N percent into file). .TP .BI v invoke an editor to edit the current file being viewed. The command for editing is taken from the 'vicmd' or 'vixcmd' option value and extended with middle line number prepended by a plus sign and name of the current file. .LP All "Ctrl-W x" keys work the same was as in Normal mode. Active mode is automatically changed on navigating among windows. When less-like mode activated on file preview is left using one by "Ctrl-W x" keys, its state is stored until another file is displayed using preview (it's possible to leave the mode, hide preview pane, do something else, then get back to the file and show preview pane again with previously stored state in it). .\" --------------------------------------------------------------------------- .SH Command line Mode .\" --------------------------------------------------------------------------- These keys are available in all submodes of the command line mode: command, search, prompt and filtering. .LP Down, Up, Left, Right, Home, End and Delete are extended keys and they are not available if vifm is compiled with \-\-disable\-extended\-keys option. .TP .BI "Esc, Ctrl-C" leave command line mode, cancels input. Cancelled input is saved into appropriate history and can be recalled later. .TP .BI "Ctrl-M, Enter" execute command and leave command line mode. .TP .BI "Ctrl-I, Tab" complete command or its argument on editing of a :command, complete file names in file name prompts, move cursor onto the next search match in file search prompt (including in navigation) when 'incsearch' is set. .TP .BI Shift-Tab complete in reverse order or move cursor onto the previous file search match. .TP .BI Ctrl-_ stop completion and restore original input. .TP .BI "Ctrl-B, Left" move cursor to the left. .TP .BI "Ctrl-F, Right" move cursor to the right. .TP .BI "Ctrl-A, Home" go to line beginning. .TP .BI "Ctrl-E, End" go to line end. .TP .BI Alt-B go to the beginning of previous word. .TP .BI Alt-F go to the end of next word. .TP .BI Ctrl-U remove characters from cursor position till the beginning of line. .TP .BI Ctrl-K remove characters from cursor position till the end of line. .TP .BI "Ctrl-H, Backspace" remove character before the cursor. .TP .BI "Ctrl-D, Delete" remove character under the cursor. .TP .BI Ctrl-W remove characters from cursor position till the beginning of previous word. .TP .BI Alt-D remove characters from cursor position till the beginning of next word. .TP .BI Ctrl-T swap the order of current and previous character and move cursor forward or, if cursor past the end of line, swap the order of two last characters in the line. .TP .BI Alt-. insert last part of previous command to current cursor position. Each next call will insert last part of older command. .TP .BI Ctrl-G edit command-line content in external editor. See "Command line editing" section for details. .TP .BI Ctrl-N recall more recent command-line from history. .TP .BI Ctrl-P recall older command-line from history. .TP .BI Up recall more recent command-line from history, that begins as the current command-line. .TP .BI Down recall older command-line from history, that begins as the current command-line. .TP .BI Ctrl-] trigger abbreviation expansion. .TP .BI "Ctrl-R =" insert result of evaluating an expression. Expression is to be entered via nested command-line prompt (where this key does nothing). Expansion of an erroneous expression is empty. .\" --------------------------------------------------------------------------- .SH Fast navigation .\" --------------------------------------------------------------------------- In order to streamline navigation through directory tree, you can enter a special form of command-line mode from search or local filter prompt. Once activated, pressing Enter opens currently selected directory and clears the prompt in anticipation of the next component of the path. If entry under the cursor is a file, it is opened and the mode is finished. This behaviour is embedded in a command-line mode, but doesn't update input histories nor expands abbreviations and redefines some of the mode's mappings for the purpose of faster navigation through the file system rather than command-line editing. When on, prompt gets "nav" prefix. You can enable this behaviour on search by default via a mapping like: .EX nnoremap / / .EE .TP .BI Ctrl-Y enter navigation mode. Works only for search and local filter started from a normal mode and only when 'incsearch' is set ('wrapscan' is also nice to have set for search). .TP .BI Ctrl-Y return to a regular command-line mode. .TP .BI "Enter, Right" either enter a directory under the cursor without leaving the mode and clear the prompt or leave the mode for files. If 'navoptions' specifies "open:all" a file under the cursor is opened after leaving the mode. .TP .BI "Ctrl-O, Left" go to parent directory. .TP .BI "Ctrl-J" leave the mode without undoing cursor position or filter state. .TP .BI "Ctrl-N, Down" move view cursor down. .TP .BI "Ctrl-P, Up" move view cursor up. .TP .BI "Page Down" scroll view down. .TP .BI "Page Up" scroll view up. .TP .BI Home move view cursor to the first item. .TP .BI End move view cursor to the last item. .\" --------------------------------------------------------------------------- .SH Pasting special values .\" --------------------------------------------------------------------------- The shortcuts listed below insert specified values into current cursor position. Last key of every shortcut references value that it inserts: \- c \- [c]urrent file \- d \- [d]irectory path \- e \- [e]xtension of a file name \- r \- [r]oot part of a file name \- t \- [t]ail part of directory path \- a \- [a]utomatic filter \- m \- [m]anual filter \- = \- local filter, which is bound to "=" in normal mode Values related to filelist in current pane are available through Ctrl-X prefix, while values from the other pane have doubled Ctrl-X key as their prefix (doubled Ctrl-X is presumably easier to type than uppercase letters; it's still easy to remap the keys to correspond to names of similar macros). .TP .BI "Ctrl-X c" name of the current file of the active pane. .TP .BI "Ctrl-X d" path to the current directory of the active pane. .TP .BI "Ctrl-X e" extension of the current file of the active pane. .TP .BI "Ctrl-X r" name root of current file of the active pane. .TP .BI "Ctrl-X t" the last component of path to the current directory of the active pane. .TP .BI "Ctrl-X Ctrl-X c" name of the current file of the inactive pane. .TP .BI "Ctrl-X Ctrl-X d" path to the current directory of the inactive pane. .TP .BI "Ctrl-X Ctrl-X e" extension of the current file of the inactive pane. .TP .BI "Ctrl-X Ctrl-X r" name root of current file of the inactive pane. .TP .BI "Ctrl-X Ctrl-X t" the last component of path to the current directory of the inactive pane. .TP .BI "Ctrl-X a" value of implicit permanent filter (old name "automatic") of the active pane. .TP .BI "Ctrl-X m" value of explicit permanent filter (old name "manual") of the active pane. .TP .BI "Ctrl-X =" value of local filter of the active pane. .TP .BI "Ctrl-X /" last pattern from search history. .\" --------------------------------------------------------------------------- .SH Command line editing .\" --------------------------------------------------------------------------- vifm provides a facility to edit several kinds of data, that is usually edited in command-line mode, in external editor (using command specified by \(aqvicmd\(aq or 'vixcmd' option). This has at least two advantages over built-in command-line mode: \- one can use full power of Vim to edit text; \- finding and reusing history entries becomes possible. The facility is supported by four input submodes of the command-line: \- command; \- forward search; \- backward search; \- file rename (see description of cw and cW normal mode keys). Editing command-line using external editor is activated by the Ctrl-G shortcut. It's also possible to do almost the same from Normal and Visual modes using q:, q/ and q? commands. Temporary file created for the purpose of editing the line has the following structure: .RS 2 .IP 1. 3 First line, which is either empty or contains text already entered in command-line. .IP 2. 3 2nd and all other lines with history items starting with the most recent one. Altering this lines in any way won't change history items stored by vifm. .RE After editing application is finished the first line of the file is taken as the result of operation, when the application returns zero exit code. If the application returns an error (see :cquit command in Vim), all the edits made to the file are ignored, but the initial value of the first line is saved in appropriate history. .\" --------------------------------------------------------------------------- .SH More Mode .\" --------------------------------------------------------------------------- This is the mode that appears when status bar content is so big that it doesn't fit on the screen. One can identify the mode by "\-\- More \-\-" message at the bottom. The following keys are handled in this mode: .TP .BI "Enter, Ctrl-J, j or Down" scroll one line down. .TP .BI "Backspace, k or Up" scroll one line up. .TP .BI d scroll one page (half of a screen) down. .TP .BI u scroll one page (half of a screen) up. .TP .BI "Space, f or PageDown" scroll down a screen. .TP .BI "b or PageUp" scroll up a screen. .TP .BI G scroll to the bottom. .TP .BI g scroll to the top. .TP .BI "q, Escape or Ctrl-C" quit the mode. .TP .BI : switch to command-line mode. .\" --------------------------------------------------------------------------- .SH Commands .\" --------------------------------------------------------------------------- Commands are executed with :command_name Commented out lines should start with the double quote symbol ("), which may be preceded by whitespace characters intermixed with colons. Inline comments can be added at the end of the line after double quote symbol, only last line of a multi-line command can contain such comment. Not all commands support inline comments as their syntax conflicts with names of registers and fields where double quotes are allowed. Most of the commands have two forms: complete and the short one. Example: .EX :noh[lsearch] .EE This means the complete command is nohlsearch, and the short one is noh. Most of command-line commands completely reset selection in the current view. However, there are several exceptions: .RS 2 .IP \- 2 `:invert s` most likely leaves some files selected; .IP \- 2 :view command; .IP \- 2 :normal command (when it doesn't leave command-line mode); .IP \- 2 :if and :else commands don't affect selection on successful execution. .RE \(aq|\(aq can be used to separate commands, so you can give multiple commands in one line. If you want to use '|' in an argument, precede it with '\\'. These commands see '|' as part of their arguments even when it's escaped: :[range]! :amap :anoremap :autocmd :cabbrev :cmap :cnoreabbrev :cnoremap :command :dmap :dnoremap :filetype :fileviewer :filextype :keepsel :map :mmap :mnoremap :nmap :nnoremap :noremap :normal :qmap :qnoremap :vmap :vnoremap :wincmd :windo :wingo :winrun To be able to use another command after one of these, wrap it with the :execute command. An example: .EX if filetype('.') == 'reg' | execute '!!echo regular file' | endif .EE .TP .BI :[count] .TP .BI :number move to the file number. .br :12 would move to the 12th file in the list. .br :0 move to the top of the list. .br :$ move to the bottom of the list. .TP .BI :[count]command The only builtin :[count]command are :[count]d[elete] and :[count]y[ank]. .TP .BI :d3 would delete three files starting at the current file position moving down. .TP .BI :3d would delete one file at the third line in the list. .TP .BI ":command [args]" .TP .BI :[range]!program execute command via shell. Accepts macros. .TP .BI ":[range]!command &" .LP same as above, but the command is run in the background using vifm's means. Programs that write to stderr create error dialogs showing errors of the command. Note the space before ampersand symbol, if you omit it, command will be run in the background using job control of your shell. Accepts macros. .TP .BI " :!!" .TP .BI ":[range]!!command" same as :!, but pauses before returning. .TP .BI :!! repeat the last command. .TP .BI " :alink" .TP .BI :[range]alink[!?] create absolute symbolic links to files in directory of inactive view. With "?" prompts for destination file names in an editor. "!" forces overwrite. .TP .BI ":[range]alink[!] path" create absolute symbolic links to files in directory specified by the path (absolute or relative to directory of inactive view). .TP .BI ":[range]alink[!] name1 name2..." create absolute symbolic links of files in directory of other view giving each next link a corresponding name from the argument list. .TP .BI ":[range]alink[!?] -skip ..." see "\-skip parameter" section below. .TP .BI " :apropos" .TP .BI ":apropos keyword..." create a menu of items returned by the apropos command. Selecting an item in the menu opens corresponding man page. By default the command relies on the external "apropos" utility, which can be customized by altering value of the 'aproposprg' option. See "Menus and dialogs" section for controls. .TP .BI " :autocmd" .TP .BI ":au[tocmd] {event} {pat} {cmd}" register autocommand for the {event}, which can be: \- DirEnter \- triggered after directory is changed .br Event name is case insensitive. {pat} is a comma-separated list of modified globs patterns, which can contain tilde or environment variables. All paths use slash ('/') as directory separator. The pattern can start with a '!', which negates it. Patterns that do not contain slashes are matched against the last item of the path only (e.g. "dir" in "/path/dir"). Literal comma can be entered by doubling it. Two modifications to globs matching are as follows: \- * \- never matches a slash (i.e., can signify single directory level) \- ** \- matches any character (i.e., can match path of arbitrary depth) {cmd} is a :command or several of them separated with '|'. Examples of patterns: \- conf.d \- matches conf.d directory anywhere \- *.d \- matches directories ending with ".d" anywhere \- **.git \- matches something.git, but not .git anywhere \- **/.git/** \- matches /path/.git/objects, but not /path/.git \- **/.git/**/ \- matches /path/.git/ only (because of trailing slash) \- /etc/* \- matches /etc/conf.d/, /etc/X11, but not /etc/X11/fs \- /etc/**/*.d \- matches /etc/conf.d, /etc/X11/conf.d, etc. \- /etc/**/* \- matches /etc/ itself and any file below it \- /etc/**/** \- matches /etc/ itself and any file below it .TP .BI ":au[tocmd] [{event}] [{pat}]" list those autocommands that match given event-pattern combination. .br {event} and {pat} can be omitted to list all autocommands. To list any autocommands for specific pattern one can use * placeholder in place of {event}. .TP .BI ":au[tocmd]! [{event}] [{pat}]" remove autocommands that match given event-pattern combination. Syntax is the same as for listing above. .TP .BI :apropos repeat last :apropos command. .TP .BI " :bmark" .TP .BI ":bmark tag1 [tag2 [tag3...]]" bookmark current directory with specified tags. .TP .BI ":bmark! path tag1 [tag2 [tag3...]]" same as :bmark, but allows bookmarking specific path instead of current directory. This is for use in vifmrc and for bookmarking files. Path can contain macros that expand to single path (%c, %C, %d, %D) or those that can expand to multiple paths, but contain only one (%f, %F, %rx). The latter is done for convenience on using the command interactively. Complex macros that include spaces (e.g. "%c:gs/ /_") should be escaped. .TP .BI " :bmarks" .TP .BI :bmarks display all bookmarks in a menu. .TP .BI ":bmarks [tag1 [tag2...]]" display menu of bookmarks that include all of the specified tags. See "Menus and dialogs" section for controls. .TP .BI " :bmgo" .TP .BI ":bmgo [tag1 [tag2...]]" when there are more than one match acts exactly like :bmarks, otherwise navigates to single match immediately (and fails if there is no match). .TP .BI " :cabbrev" .TP .BI ":ca[bbrev]" display menu of command-line mode abbreviations. See "Menus and dialogs" section for controls. .TP .BI ":ca[bbrev] lhs-prefix" display command-line mode abbreviations which left-hand side starts with specified prefix. .TP .BI ":ca[bbrev] lhs rhs" register new or overwrites existing abbreviation for command-line mode. rhs can contain spaces and any special sequences accepted in rhs of mappings (see "Mappings" section below). Abbreviations are expanded non-recursively. .TP .BI " :call" .TP .BI ":cal[l] {function}([{expr1}, ...])" invoke a {function} discarding its return value. .br Unlike in Vim, a call expression followed by trailing characters is not invoked. .TP .BI " :chistory" .TP .BI ":chi[story]" display menu of saved menus. See "Menus and dialogs" section for controls, also see "Menus history" section. .TP .BI " :cnoreabbrev" .TP .BI ":cnorea[bbrev]" display menu of command-line mode abbreviations. See "Menus and dialogs" section for controls. .TP .BI ":cnorea[bbrev] lhs-prefix" display command-line mode abbreviations which left-hand side starts with specified prefix. .TP .BI ":cnorea[bbrev] lhs rhs" same as :cabbrev, but mappings in rhs are ignored during expansion. .TP .BI " :cd" .TP .BI ":cd or :cd ~ or :cd $HOME" change to home directory. .TP .BI ":cd \-" go to the last visited directory. .TP .BI ":cd ~/dir" change directory to ~/dir. .TP .BI ":cd /curr/dir /other/dir" change directory of the current pane to /curr/dir and directory of the other pane to /other/dir. Relative paths are assumed to be relative to directory of current view. Command won't fail if one of directories is invalid. All forms of the command accept macros. .TP .BI ":cd! /dir" same as :cd /dir /dir. .TP .BI " :cds" .TP .BI ":cds[!] pattern string" navigate to path obtained by substituting first match in current path. Arguments can include slashes, but starting first argument with a separator will activate below form of the command. Specifying "!" changes directory of both panes. .LP Available flags: .RS 2 .IP \- 2 i \- ignore case (the 'ignorecase' and 'smartcase' options are not used) .IP \- 2 I \- don't ignore case (the 'ignorecase' and 'smartcase' options are not used) .RE .TP .BI ":cds[!]/pattern/string/[flags]" same as above, but with :substitute-like syntax. Other punctuation characters can be used as separators. .TP .BI " :change" .TP .BI :c[hange] show a dialog to alter properties of files. .TP .BI " :chmod" .TP .BI :[range]chmod .br display file attributes (permission on *nix and properties on Windows) change dialog. .TP .BI ":[range]chmod[!] arg..." only for *nix .br change permissions for files. See `man 1 chmod` for arg format. "!" means set permissions recursively. .TP .BI " :chown" .TP .BI :[range]chown only for *nix .br same as co key in normal mode. .TP .BI ":[range]chown [user][:][group]" only for *nix .br change owner and/or group of files. Operates on directories recursively. .TP .BI " :clone" .TP .BI :[range]clone[!?] clones files in current directory. With "?" vifm will open vi to edit file names. "!" forces overwrite. Macros are expanded. .TP .BI ":[range]clone[!] path" clones files to directory specified with the path (absolute or relative to current directory). "!" forces overwrite. Macros are expanded. .TP .BI ":[range]clone[!] name1 name2..." clones files in current directory giving each next clone a corresponding name from the argument list. "!" forces overwrite. Macros are expanded. .TP .BI " :colorscheme" .TP .BI :colo[rscheme]? print current color scheme name on the status bar. .TP .BI :colo[rscheme] display a menu with a list of available color schemes. You can choose primary color scheme here. It is used for view if no directory specific colorscheme fits current path. It's also used to set border color (except view titles) and colors in menus and dialogs. See "Menus and dialogs" section for controls. .TP .BI ":colo[rscheme] color_scheme_name" change primary color scheme to color_scheme_name. In case of errors (e.g. some colors are not supported by terminal) either nothing is changed or color scheme is reset to builtin colors to ensure that TUI is left in a usable state. .TP .BI ":colo[rscheme] color_scheme_name directory" associate directory with the color scheme. The directory argument can be either absolute or relative path when :colorscheme command is executed from command line, but mandatory should be an absolute path when the command is executed in scripts loaded at startup (until vifm is completely loaded). .TP .BI ":colo[rscheme] color_scheme_name color_scheme_name..." loads the first color scheme in the order given that exists and is supported by the terminal. If none matches, current one remains unchanged. For example: .EX " use a separate color scheme for panes which are inside FUSE mounts execute 'colorscheme in-fuse' &fusehome .EE .TP .BI " :comclear" .TP .BI :comc[lear] remove all user defined commands. .TP .BI " :command" .TP .BI :com[mand] display a menu of user commands. See "Menus and dialogs" section for controls. .TP .BI ":com[mand] prefix" display user defined commands that start with the prefix. .TP .BI ":com[mand] name action[ &]" set or redefine a user command. .br Use :com[mand]! to overwrite a previously set command of the same name. Builtin commands can't be redefined. .br User commands must start with an upper or lower case letter. Command name can't contain special symbols except for a single trailing \(aq?' or '!'. Numbers are allowed provided that they don't cause parsing ambiguity (no command name prefix that precedes a digit can match an existing command unless it has a digit in the same place), for example: .EX " good :command mp3 command " good :command mp4 command :command mp3! command :command mp4? command " bad :command mp command :command mp44 command " good :command mp4c command .EE .br User commands are run in a shell by default (see below for syntax of other options). To run a command in the background you must mark it as a background command by adding " &" after the command's action (e.g., `:com rm rm %f &`). .br User commands of all kinds have macros expanded in them. See "Command macros" section for more information. .TP .BI ":com[mand] name /pattern" set search pattern. .TP .BI ":com[mand] name =pattern" set local filter value. .TP .BI ":com[mand] name filter{:filter args}" set file name filter (see :filter command description). For example: .EX " display only audio files :command onlyaudio filter/.+\.\\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\\)$/i " display everything except audio files :command noaudio filter!/.+\.\\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\\)$/i .EE .TP .BI ":com[mand] name :commands" set kind of an alias for internal commands (like in a shell). Passes range given to alias to an aliased command, so running :%cp after :command cp :copy %a .br equals :%copy .TP .BI " :compare" .TP .BI ":compare [byname | bysize | bycontents |" .BI " listall | listunique | listdups |" .br .BI " ofboth | ofone |" .br .BI " groupids | grouppaths |" .br .BI " skipempty | withicase | withrcase |" .br .BI " showidentical | showdifferent | showuniqueleft | showuniqueright]..." .br compare files in one or two views according to the arguments. The default is "bycontents listall ofboth grouppaths showidentical showdifferent showuniqueleft showuniqueright". See "Compare views" section below for details. Diff structure is incompatible with alternative representations, so values of 'lsview' and 'millerview' options are ignored. .TP .BI ":compare! (showidentical | showdifferent | showuniqueleft |" .BI " showuniqueright)..." this invocation form works only when compare view is active and results in redoing of the previous :compare with toggled state of the passed in options. .TP .BI " :copen" .TP .BI ":cope[n]" reopens the last visible menu that has navigation to files by default, if any. See also "Menus history" section. .TP .BI " :copy" .TP .BI ":[range]co[py][!?][ &]" copy files to directory of other view. With "?" prompts for destination file names in an editor. "!" forces overwrite. .TP .BI ":[range]co[py][!] path[ &]" copy files to directory specified with the path (absolute or relative to directory of other view). "!" forces overwrite. .TP .BI ":[range]co[py][!] name1 name2...[ &]" copy files to directory of other view giving each next file a corresponding name from the argument list. "!" forces overwrite. .TP .BI ":[range]co[py][!?] -skip ...[ &]" see "\-skip parameter" section below. .TP .BI " :cquit" .TP .BI ":cq[uit][!]" same as :quit, but also aborts directory choosing via \-\-choose\-dir (empties output file) and returns non-zero exit code. .TP .BI " :cunabbrev" .TP .BI ":cuna[bbrev] lhs" unregister command-line mode abbreviation by its lhs. .TP .BI ":cuna[bbrev] rhs" unregister command-line mode abbreviation by its rhs, so that abbreviation could be removed even after expansion. .TP .BI " :delbmarks" .TP .BI :delbmarks remove bookmarks from current directory. .TP .BI ":delbmarks tag1 [tag2 [tag3...]]" remove set of bookmarks that include all of the specified tags. .TP .BI :delbmarks! remove all bookmarks. .TP .BI ":delbmarks! path1 [path2 [path3...]]" remove bookmarks of listed paths. .TP .BI " :delcommand" .TP .BI ":delc[ommand] user_command" remove user defined command named user_command. .TP .BI " :delete" .TP .BI ":[range]d[elete][!][ &]" delete selected file or files. "!" means complete removal (omitting trash). .TP .BI ":[range]d[elete][!] [reg] [count][ &]" delete selected or [count] files to the reg register. "!" means complete removal (omitting trash). .TP .BI " :delmarks" .TP .BI :delm[arks]! delete all marks. .TP .BI ":delm[arks] marks ..." delete specified marks, each argument is treated as a set of marks. .TP .BI " :delsession" .TP .BI :delsession delete specified session if it was stored previously. Deleting current session doesn't detach it. .TP .BI " :display" .TP .BI :di[splay] display menu with registers content. .TP .BI ":di[splay] list ..." display the contents of the numbered and named registers that are mentioned in list (for example "az to display "", "a and "z content). .TP .BI " :dirs" .TP .BI :dirs display directory stack in a menu. See "Menus and dialogs" section for controls. .TP .BI " :echo" .TP .BI ":ec[ho] [...]" evaluate each argument as an expression and output them separated with a space. See help on :let command for a definition of . .TP .BI " :edit" .TP .BI ":[range]e[dit] [file...]" open selected or passed file(s) in editor. Macros and environment variables are expanded. .TP .BI " :else" .TP .BI :el[se] execute commands until next matching :endif if all other conditions didn't match. See also help on :if and :endif commands. .TP .BI " :elseif" .TP .BI ":elsei[f] {expr1}" execute commands until next matching :elseif, :else or :endif if conditions of previous :if and :elseif branches were evaluated to zero. See also help on :if and :endif commands. .TP .BI " :empty" .TP .BI :empty permanently remove files from all existing non-empty trash directories (see "Trash directory" section below). Trash directories which are specified via %r and/or %u also get deleted completely. Also remove all operations from undolist that have no sense after :empty and remove all records about files located inside directories from all registers. Removal is performed as background task with undetermined amount of work and can be checked via :jobs menu. .TP .BI " :endif" .TP .BI :en[dif] end conditional block. See also help on :if and :else commands. .TP .BI " :execute" .TP .BI ":exe[cute] [...]" evaluate each argument as an expression and join results separated by a space to get a single string which is then executed as a command-line command. See help on :let command for a definition of . .TP .BI " :exit" .TP .BI :exi[t][!] same as :quit. .TP .BI " :file" .TP .BI ":f[ile][ &]" display menu of programs set for the file type of the current file. " &" forces running associated program in background. See "Menus and dialogs" section for controls. .TP .BI ":f[ile] arg[ &]" run associated command that begins with the arg skipping opening menu. " &" forces running associated program in background. .TP .BI " :filetype" .TP .BI ":filet[ype] pattern-list [{descr}]def_prog[ &],[{descr}]prog2[ &],..." associate given program list to each of the patterns. Associated program (command) is used by handlers of l and Enter keys (and also in the :file menu). If you need to insert comma into command just double it (",,"). Space followed by an ampersand as two last characters of a command means running of the command in the background. Optional description can be given to each command to ease understanding of what command will do in the :file menu. Vifm will try the rest of the programs for an association when the default isn't found. When program entry doesn't contain any of vifm macros, name of current file is appended as if program entry ended with %c macro on *nix and %"c on Windows. On Windows path to executables containing spaces can (and should be for correct work with such paths) be double quoted. See "Patterns" section below for pattern definition and "Selection" section for how selection is handled. See also "Automatic FUSE mounts" section below. Example for zip archives and several actions: .EX filetype *.zip,*.jar,*.war,*.ear \\ {Mount with fuse-zip} \\ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR, \\ {View contents} \\ zip \-sf %c | less, \\ {Extract here} \\ tar \-xf %c, .EE Note that on OS X when `open` is used to call an app, vifm is unable to check whether that app is actually available. So if automatic skipping of programs that aren't there is desirable, `open` should be replaced with an actual command. .TP .BI ":filet[ype] filename" list (in menu mode) currently registered patterns that match specified file name. Same as ":filextype filename". .TP .BI " :filextype" .TP .BI ":filex[type] pattern-list [{ description }] def_program,program2,..." same as :filetype, but this command is ignored if not running in X. In X :filextype is equal to :filetype. See "Patterns" section below for pattern definition and "Selection" section for how selection is handled. See also "Automatic FUSE mounts" section below. For example, consider the following settings (the order might seem strange, but it's for the demonstration purpose): .EX filetype *.html,*.htm \\ {View in lynx} \\ lynx filextype *.html,*.htm \\ {Open with dwb} \\ dwb %f %i &, filetype *.html,*.htm \\ {View in links} \\ links filextype *.html,*.htm \\ {Open with firefox} \\ firefox %f &, \\ {Open with uzbl} \\ uzbl-browser %f %i &, .EE If you're using vifm inside a terminal emulator that is running in graphical environment (when X is used on *nix; always on Windows), vifm attempts to run application in this order: 1. lynx .br 2. dwb .br 3. links .br 4. firefox .br 5. uzbl If there is no graphical environment (checked by presence of non-empty $DISPLAY or $WAYLAND_DISPLAY environment variable on *nix; never happens on Windows), the list will look like: 1. lynx .br 2. links Just as if all :filextype commands were not there. The purpose of such differentiation is to allow comfortable use of vifm with same settings in desktop environment/through remote connection (SSH)/\ in native console. Note that on OS X $DISPLAY isn't defined unless you define it, so :filextype should be used only if you set $DISPLAY in some way. .TP .BI ":filext[ype] filename" list (in menu mode) currently registered patterns that match specified file name. Same as ":filetype filename". .TP .BI " :fileviewer" .TP .BI ":filev[iewer] pattern-list command1,command2,..." register specified list of commands as viewers for each of the patterns. Viewer is a command which output is captured and displayed in one of the panes of vifm after pressing "e" or running :view command. When the command doesn't contain any of vifm macros, name of current file is appended as if command ended with %c macro. Comma escaping and missing commands processing rules as for :filetype apply to this command. See "Patterns" section below for pattern definition. Supports Lua handlers. Example for zip archives: .EX fileviewer *.zip,*.jar,*.war,*.ear zip \-sf %c, echo "No zip to preview:" .EE .TP .BI ":filev[iewer] filename" list (in menu mode) currently registered patterns that match specified filename. .TP .BI " :filter" .TP .BI ":filter[!] {pattern}" filter files matching the pattern out of directory listings. '!' controls state of filter inversion after updating filter value (see also 'cpoptions' description). Filter is matched case sensitively on *nix and case insensitively on Windows. See "File Filters" and "Patterns" sections. Example: .EX " filter all files ending in .o from the filelist. :filter /\.o$/ .EE .TP .BI ":filter[!] {empty-pattern}" same as above, but use last search pattern as pattern value. Example: .EX :filter //I .EE .TP .BI ":filter" reset filter (set it to an empty string) and show all files. .TP .BI ":filter!" same as :invert. .TP .BI :filter? show information on local, name and auto filters. .TP .BI " :find" .TP .BI ":[range]fin[d] pattern" display results of find command in the menu. Searches among selected files if any. Accepts macros. By default the command relies on the external "find" utility, which can be customized by altering value of the 'findprg' option. .TP .BI ":[range]fin[d] \-opt..." same as :find above, but user defines all find arguments. Searches among selected files if any. .TP .BI ":[range]fin[d] path \-opt..." same as :find above, but user defines all find arguments. Ignores selection and range. .TP .BI :[range]fin[d] repeat last :find command. .TP .BI " :finish" .TP .BI :fini[sh] stop sourcing a script. Can only be used in a vifm script file. This is a quick way to skip the rest of the file. .TP .BI " :goto" .TP .BI :go[to] change directory if necessary and put specified path under the cursor. The path should be existing non-root path. Macros and environment variables are expanded. .TP .BI " :grep" .TP .BI ":[range]gr[ep][!] pattern" will show results of grep command in the menu. Add "!" to request inversion of search (look for lines that do not match pattern). Searches among selected files if any and no range given. Ignores binary files by default. By default the command relies on the external "grep" utility, which can be customized by altering value of the 'grepprg' option. .TP .BI ":[range]gr[ep][!] \-opt..." same as :grep above, but user defines all grep arguments, which are not escaped. Searches among selected files if any. .TP .BI :[range]gr[ep][!] repeat last :grep command. "!" of this command inverts "!" in repeated command. .TP .BI " :help" .TP .BI :h[elp] show the help file. .TP .BI ":h[elp] argument" is the same as using ':h argument' in vim. Use vifm\- to get help on vifm (tab completion works). This form of the command doesn't work when \(aqvimhelp\(aq option is off. .TP .BI " :hideui" .TP .BI :hideui hide interface to show previous commands' output. .TP .BI " :highlight" .TP .BI :hi[ghlight] display information about all highlight groups active at the moment. .TP .BI ":hi[ghlight] clear" reset all highlighting to builtin defaults and removed all filename-specific rules. .TP .BI ":hi[ghlight] clear ( {pat1,pat2,...} | /regexp/ )" remove specified rule. .TP .BI ":hi[ghlight] ( group\-name | column:name | {pat1,pat2,...} | /regexp/ )" display information on given highlight group or file name pattern of color scheme used in the active view. .TP .BI ":hi[ghlight] \ ( group\-name | column:name | {pat1,pat2,...} | /regexp/[iI] ) cterm=style \ | ctermfg=color | ctermbg=color | gui=style | guifg=color | guibg=color" set style (cterm, gui), foreground (ctermfg, guifg) and/or background (ctermbg, guibg) parameters of highlight group or file name pattern for color scheme used in the active view. .LP Group names, style values and color names are case insensitive. Note that this doesn't include column names as that would make builtin and custom columns indistinguishable. .LP Available group-name values: \- Win \- color of all windows (views, dialogs, menus) and default color for \ their content (e.g. regular files in views) \- AuxWin \- color of auxiliary areas of windows \- OtherWin \- color of inactive pane \- Border \- color of vertical parts of the border \- TabLine \- tab line color (for 'tabscope' set to "global") \- TabLineSel \- color of the tip of selected tab (regardless of 'tabscope') \- TopLine \- top line color of the other pane \- TopLineSel \- top line color of the current pane \- CmdLine \- the command line/status bar color \- ErrorMsg \- color of error messages in the status bar \- StatusLine \- color of the line above the status bar \- JobLine \- color of job line that appears above the status line \- WildBox \- color of the wild menu \- WildMenu \- color of the selected wild menu item \- SuggestBox \- color of key suggestion box \- CurrLine \- line at cursor position in active view \- OtherLine \- line at cursor position in inactive view \- OddLine \- color of every second entry line in a pane \- LineNr \- line number column of views \- Selected \- color of selected files \- Directory \- color of directories \- Link \- color of symbolic links in the views \- BrokenLink \- color of broken symbolic links \- HardLink \- color of regular files with more than one hard link \- Socket \- color of sockets \- Device \- color of block and character devices \- Executable \- color of executable files \- Fifo \- color of fifo pipes \- CmpMismatch \- color of mismatched files in side-by-side comparison by path \- CmpUnmatched \- comparison file entry that has no pair in the other pane \- CmpBlank \- entry placeholder in a compare view, paired with CmpUnmatched \- User1..User20 \- 20 colors which can be used via %* 'statusline' macro Column names match names of columns of |vifm-'viewcolumns'| option, which in turn are based on values of |vifm-'sort'| and custom columns added from Lua. Regardless of the source, columns are specified as "column:{name}", for example: .EX highlight column:fileext ctermfg=red .EE Available style values (some of them can be combined): \- bold \- underline \- reverse or inverse \- standout \- italic (on unsupported systems becomes reverse) \- combine \- add attributes of current group to attributes of the parent in \ group hierarchy (see below) instead of replacing them \- none Available colors: \- \-1 or default or none \- default or transparent \- black and lightblack \- red and lightred \- green and lightgreen \- yellow and lightyellow \- blue and lightblue \- magenta and lightmagenta \- cyan and lightcyan \- white and lightwhite \- 0-255 \- corresponding colors from 256-color palette (for ctermfg and \ ctermbg) \- #rrggbb \- direct ("gui", "true", 24-bit) color in hex-notation, each of \ the three compontents are in the range 0x00 to 0xff (for guifg and guibg) Light versions of colors are regular colors with bold attribute set automatically in terminals that have less than 16 colors. So order of arguments of :highlight command is important and it's better to put "cterm" in front of others to prevent it from overwriting attributes set by "ctermfg" or "ctermbg" arguments. For convenience of color scheme authors xterm-like names for 256 color palette is also supported. The mapping is taken from http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim .br Duplicated entries were altered by adding an underscore followed by numerical suffix. 0 Black 86 Aquamarine1 172 Orange3 1 Red 87 DarkSlateGray2 173 LightSalmon3_2 2 Green 88 DarkRed_2 174 LightPink3 3 Yellow 89 DeepPink4_2 175 Pink3 4 Blue 90 DarkMagenta 176 Plum3 5 Magenta 91 DarkMagenta_2 177 Violet 6 Cyan 92 DarkViolet 178 Gold3_2 7 White 93 Purple 179 LightGoldenrod3 8 LightBlack 94 Orange4_2 180 Tan 9 LightRed 95 LightPink4 181 MistyRose3 10 LightGreen 96 Plum4 182 Thistle3 11 LightYellow 97 MediumPurple3 183 Plum2 12 LightBlue 98 MediumPurple3_2 184 Yellow3_2 13 LightMagenta 99 SlateBlue1 185 Khaki3 14 LightCyan 100 Yellow4 186 LightGoldenrod2 15 LightWhite 101 Wheat4 187 LightYellow3 16 Grey0 102 Grey53 188 Grey84 17 NavyBlue 103 LightSlateGrey 189 LightSteelBlue1 18 DarkBlue 104 MediumPurple 190 Yellow2 19 Blue3 105 LightSlateBlue 191 DarkOliveGreen1 20 Blue3_2 106 Yellow4_2 192 DarkOliveGreen1_2 21 Blue1 107 DarkOliveGreen3 193 DarkSeaGreen1_2 22 DarkGreen 108 DarkSeaGreen 194 Honeydew2 23 DeepSkyBlue4 109 LightSkyBlue3 195 LightCyan1 24 DeepSkyBlue4_2 110 LightSkyBlue3_2 196 Red1 25 DeepSkyBlue4_3 111 SkyBlue2 197 DeepPink2 26 DodgerBlue3 112 Chartreuse2_2 198 DeepPink1 27 DodgerBlue2 113 DarkOliveGreen3_2 199 DeepPink1_2 28 Green4 114 PaleGreen3_2 200 Magenta2_2 29 SpringGreen4 115 DarkSeaGreen3 201 Magenta1 30 Turquoise4 116 DarkSlateGray3 202 OrangeRed1 31 DeepSkyBlue3 117 SkyBlue1 203 IndianRed1 32 DeepSkyBlue3_2 118 Chartreuse1 204 IndianRed1_2 33 DodgerBlue1 119 LightGreen_2 205 HotPink 34 Green3 120 LightGreen_3 206 HotPink_2 35 SpringGreen3 121 PaleGreen1 207 MediumOrchid1_2 36 DarkCyan 122 Aquamarine1_2 208 DarkOrange 37 LightSeaGreen 123 DarkSlateGray1 209 Salmon1 38 DeepSkyBlue2 124 Red3 210 LightCoral 39 DeepSkyBlue1 125 DeepPink4_3 211 PaleVioletRed1 40 Green3_2 126 MediumVioletRed 212 Orchid2 41 SpringGreen3_2 127 Magenta3 213 Orchid1 42 SpringGreen2 128 DarkViolet_2 214 Orange1 43 Cyan3 129 Purple_2 215 SandyBrown 44 DarkTurquoise 130 DarkOrange3 216 LightSalmon1 45 Turquoise2 131 IndianRed 217 LightPink1 46 Green1 132 HotPink3 218 Pink1 47 SpringGreen2_2 133 MediumOrchid3 219 Plum1 48 SpringGreen1 134 MediumOrchid 220 Gold1 49 MediumSpringGreen 135 MediumPurple2 221 LightGoldenrod2_2 50 Cyan2 136 DarkGoldenrod 222 LightGoldenrod2_3 51 Cyan1 137 LightSalmon3 223 NavajoWhite1 52 DarkRed 138 RosyBrown 224 MistyRose1 53 DeepPink4 139 Grey63 225 Thistle1 54 Purple4 140 MediumPurple2_2 226 Yellow1 55 Purple4_2 141 MediumPurple1 227 LightGoldenrod1 56 Purple3 142 Gold3 228 Khaki1 57 BlueViolet 143 DarkKhaki 229 Wheat1 58 Orange4 144 NavajoWhite3 230 Cornsilk1 59 Grey37 145 Grey69 231 Grey100 60 MediumPurple4 146 LightSteelBlue3 232 Grey3 61 SlateBlue3 147 LightSteelBlue 233 Grey7 62 SlateBlue3_2 148 Yellow3 234 Grey11 63 RoyalBlue1 149 DarkOliveGreen3_3 235 Grey15 64 Chartreuse4 150 DarkSeaGreen3_2 236 Grey19 65 DarkSeaGreen4 151 DarkSeaGreen2 237 Grey23 66 PaleTurquoise4 152 LightCyan3 238 Grey27 67 SteelBlue 153 LightSkyBlue1 239 Grey30 68 SteelBlue3 154 GreenYellow 240 Grey35 69 CornflowerBlue 155 DarkOliveGreen2 241 Grey39 70 Chartreuse3 156 PaleGreen1_2 242 Grey42 71 DarkSeaGreen4_2 157 DarkSeaGreen2_2 243 Grey46 72 CadetBlue 158 DarkSeaGreen1 244 Grey50 73 CadetBlue_2 159 PaleTurquoise1 245 Grey54 74 SkyBlue3 160 Red3_2 246 Grey58 75 SteelBlue1 161 DeepPink3 247 Grey62 76 Chartreuse3_2 162 DeepPink3_2 248 Grey66 77 PaleGreen3 163 Magenta3_2 249 Grey70 78 SeaGreen3 164 Magenta3_3 250 Grey74 79 Aquamarine3 165 Magenta2 251 Grey78 80 MediumTurquoise 166 DarkOrange3_2 252 Grey82 81 SteelBlue1_2 167 IndianRed_2 253 Grey85 82 Chartreuse2 168 HotPink3_2 254 Grey89 83 SeaGreen2 169 HotPink2 255 Grey93 84 SeaGreen1 170 Orchid 85 SeaGreen1_2 171 MediumOrchid1 There are two colors (foreground and background) and only one bold attribute. Thus single bold attribute affects both colors when "reverse" attribute is used in vifm run inside terminal emulator. At the same time linux native console can handle boldness of foreground and background colors independently, but for consistency with terminal emulators this is available only implicitly by using light versions of colors. This behaviour might be changed in the future. Although vifm supports 256 colors in a sense they are supported by UI drawing library, whether you will be able to use all of them highly depends on your terminal. To set up terminal properly, make sure that $TERM in the environment you run vifm is set to name of 256-color terminal (on *nixes it can also be set via X resources), e.g. xterm-256color. One can find list of available terminal names by listing /usr/lib/terminfo/. Number of colors supported by terminal with current settings can be checked via "tput colors" command. In order to use 24-bit colors one needs a terminal that supports them, corresponding terminfo record (probably ends in "\-direct" like in "xterm-direct") and $TERM pointing to it. When vifm detects direct color support "cterm*" values are ignored for groups which have at least one of "gui*" values set, otherwise they are used after translating via a builtin palette. Here is the hierarchy of highlight groups, which you need to know for using transparency: JobLine SuggestBox StatusLine WildBox WildMenu User1..User20 Border CmdLine ErrorMsg Win OtherWin AuxWin OddLine Column highlights File name specific highlights Directory Link BrokenLink HardLink Socket Device Fifo Executable CmpMismatch CmpUnmatched CmpBlank Selected CurrLine LineNr (in active pane) OtherLine LineNr (in inactive pane) TopLine TopLineSel TabLineSel (for pane tabs) User1..User20 TabLine TabLineSel User1..User20 "none" means default terminal color for highlight groups at the first level of the hierarchy and transparency for all others. Here file name specific highlights mean those configured via globs ({}) or regular expressions (//). At most one of them is applied per file entry, namely the first that matches file name, hence order of :highlight commands might be important in certain cases. .TP .BI " :history" .TP .BI :his[tory] display a menu with list of visited directories. See "Menus and dialogs" section for controls. .TP .BI ":his[tory] x" x can be: .br d[ir] or . show directory history. .br c[md] or : show command line history. .br s[earch] or / show search history and search forward on l key. .br f[search] or / show search history and search forward on l key. .br b[search] or ? show search history and search backward on l key. .br i[nput] or @ show prompt history (e.g. on one file renaming). .br fi[lter] or = show local filter history (see description of the "=" normal mode command). .br e[xprreg] show expression register history (see description of Ctrl+R = in command-line mode). .br mc[md] show command-line history of menus. .br See "Menus and dialogs" section for controls. .TP .BI " :histnext" .TP .BI :histnext same as . The main use case for this command is to work around the common pain point of and being the same ASCII character: one could alter the terminal emulator settings to emit, for example, the `F1` keycode when Ctrl-I is pressed, then `:noremap :histnext` in vifm, add "t" flag to the 'cpoptions', and thus have both and working as expected. .TP .BI " :histprev" .TP .BI :histprev same as . .TP .BI " :if" .TP .BI ":if {expr1}" start conditional block. Commands are executed until next matching :elseif, :else or :endif command if {expr1} evaluates to non-zero, otherwise they are ignored. An error during evaluation of {expr1} results in not taking any conditional branches (not even an else-branch). See also help on :else and :endif commands. Example: .EX if $TERM == 'screen.linux' highlight CurrLine ctermfg=lightwhite ctermbg=lightblack elseif $TERM == 'tmux' highlight CurrLine cterm=reverse ctermfg=black ctermbg=white else highlight CurrLine cterm=bold,reverse ctermfg=black ctermbg=white endif .EE .TP .BI " :invert" .TP .BI ":invert [f]" invert file name filter. .TP .BI ":invert? [f]" show current filter state. .TP .BI ":invert s" invert selection. .TP .BI ":invert o" invert sorting order of the primary sorting key. .TP .BI ":invert? o" show sorting order of the primary sorting key. .TP .BI " :jobs" .TP .BI :jobs display menu of current backgrounded processes. See "Menus and dialogs" section for controls. .TP .BI " :keepsel" .TP .BI ":keepsel [command...]" preserve selection during some :command by default. Note that this doesn't save and restore selection to preserve it no matter what, but precludes its clearing at the end of a command and thus won't help if selection is cleared explicitly during operation. Example: .EX :keepsel view .EE .TP .BI " :let" .TP .BI ":let $ENV_VAR = " set an environment variable. Warning: setting environment variable to an empty string on Windows removes it. .TP .BI ":let $ENV_VAR .= " append value to environment variable. .TP .BI ":let &[l:|g:]opt = " sets option value. .TP .BI ":let &[l:|g:]opt .= " append value to string option. .TP .BI ":let &[l:|g:]opt += " increasing option value, adding sub-values. .TP .BI ":let &[l:|g:]opt \-= " decreasing option value, removing sub-values. .TP Where could be a single-quoted string, double-quoted string, an \ environment variable, function call or a concatanation of any of them in any \ order using the '.' operator. Any whitespace is ignored. .TP .BI " :locate" .TP .BI ":locate filename" use "locate" command to create a menu of filenames. Selecting a file from the menu will reload the current file list in vifm to show the selected file. By default the command relies on the external "locate" utility (it's assumed that its database is already built), which can be customized by altering value of the 'locateprg' option. See "Menus and dialogs" section for controls. .TP .BI :locate repeat last :locate command. .TP .BI " :ls" .TP .BI :ls lists windows of active terminal multiplexer (only when terminal multiplexer is used). This is achieved by issuing proper command for active terminal multiplexer, thus the list is not handled by vifm. .TP .BI " :lstrash" .TP .BI :lstrash display a menu with list of files in trash. Each element of the list is original path of a deleted file, thus the list can contain duplicates. See "Menus and dialogs" section for controls. .TP .BI " :mark" .TP .BI ":[range]ma[rk][?] x [/full/dir/path [filename]]" set mark x (a\-zA\-Z0\-9) at /full/dir/path and filename. By default current file in current directory is used. If no filename was given and /full/dir/path is current directory, then the last file of the [range] is used. Question mark stops the command from overwriting an existing mark. Macros and environment variables are expanded. .TP .BI " :marks" .TP .BI :marks create a pop-up menu of marks. See "Menus and dialogs" section for controls. .TP .BI ":marks list ..." display the contents of the marks that are mentioned in list. .TP .BI " :media" .TP .BI :media only for *nix .br display media management menu. See "Menus and dialogs" section for controls. See also 'mediaprg' option. .TP .BI " :messages" .TP .BI ":mes[sages]" shows previously given messages (up to 50). .TP .BI " :mkdir" .TP .BI ":[line]mkdir[!] dir ..." create directories at specified paths. The [line] can be used to pick node in a tree-view. "!" means make parent directories as needed. Macros are expanded. .TP .BI " :move" .TP .BI ":[range]m[ove][!?][ &]" move files to directory of other view. With "?" prompts for destination file names in an editor. "!" forces overwrite. .TP .BI ":[range]m[ove][!] path[ &]" move files to directory specified with the path (absolute or relative to directory of other view). "!" forces overwrite. .TP .BI ":[range]m[ove][!] name1 name2...[ &]" move files to directory of other view giving each next file a corresponding name from the argument list. "!" forces overwrite. .TP .BI ":[range]m[ove][!?] -skip ...[ &]" see "\-skip parameter" section below. .TP .BI " :nohlsearch" .TP .BI :noh[lsearch] clear selection in current pane. .TP .BI " :normal" .TP .BI ":norm[al][!] commands" execute normal mode commands. If "!" is used, user defined mappings are ignored. Unfinished last command is aborted as if or was typed. A ":" should be completed as well. Commands can't start with a space, so put a count of 1 (one) before it. .TP .BI " :only" .TP .BI :on[ly] switch to a one window view. .TP .BI " :open" .TP .BI :[range]o[pen] open current file, selection or files in the range as if Enter was pressed. .TP .BI " :plugin" .TP .BI ":plugin load" loads all plugins. To be used in configuration file to manually load plugins at an earlier point. The plugins can be loaded only once, additional calls will do nothing. .TP .TP .BI ":plugin blacklist {plugin}" adds {plugin} to the list of plugins to be ignored. .TP .BI ":plugin whitelist {plugin}" adds {plugin} to the list of plugins to be loaded while ignoring all other plugins. This list should normally be empty. .TP .BI " :plugins" .TP .BI :plugins open plugins menu. See "Menus and dialogs" section for controls. .TP .BI " :popd" .TP .BI :popd remove pane directories from stack. .TP .BI " :pushd" .TP .BI ":pushd[!] /curr/dir [/other/dir]" add pane directories to stack and process arguments like :cd command. .TP .BI :pushd exchange the top two items of the directory stack. .TP .BI " :put" .TP .BI ":[line]pu[t][!] [reg] [ &]" put files from specified register (" by default) into current directory. The [line] can be used to pick node in a tree-view. "!" moves files "!" moves files from their original location instead of copying them. During this operation no confirmation dialogs will be shown, all checks are performed beforehand. .TP .BI " :pwd" .TP .BI :pw[d] show the present working directory. .TP .BI " :qall" .TP .BI :qa[ll][!] exit vifm (add ! to skip saving changes and checking for active backgrounded commands). .TP .BI " :quit" .TP .BI :q[uit][!] if there is more than one tab, close the current one, otherwise exit vifm (add ! to skip saving state and checking for active backgrounded commands). .TP .BI " :redraw" .TP .BI :redr[aw] redraw the screen immediately. .TP .BI " :regedit" .TP .BI ":rege[dit] [{reg}]" edit register contents using external editor. If {reg} is omitted, unnamed register will be edited by default. Edited paths are normalized (no extra `.`, `..`, `/`, etc.) and all relative paths are treated as starting in the directory of the current view. .TP .BI " :registers" .TP .BI :reg[isters] display menu with registers content. .TP .BI ":reg[isters] list ..." display the contents of the numbered and named registers that are mentioned in list (for example "az to display "", "a and "z content). .TP .BI " :regular" .TP .BI :regular .TP switch to regular view leaving custom view. .BI " :rename" .TP .BI :[range]rename[!] rename files by editing their names in an editor. "!" renames files recursively in subdirectories. See "External Renaming" section. .TP .BI ":[range]rename name1 name2..." rename each of selected files to a corresponding name. .TP .BI " :restart" .TP .BI :restart free a lot of things (histories, commands, etc.), reread vifminfo, vifmrc and session files and run startup commands passed in the argument list, thus losing all unsaved changes (e.g. recent history or keys mapped after starting this instance). Session that wasn't yet stored gets reset. While many things get reset, some basic UI state and current locations are preserved, including tabs. .TP .BI ":restart full" variation of :restart that makes no attempt to preserve anything. .TP .BI " :restore" .TP .BI :[range]restore restore file from trash directory, doesn't work outside one of trash directories. See "Trash directory" section below. .TP .BI " :rlink" .TP .BI :[range]rlink[!?] create relative symbolic links to files in directory of other view. With "?" prompts for destination file names in an editor. "!" forces overwrite. .TP .BI ":[range]rlink[!] path" create relative symbolic links of files in directory specified with the path (absolute or relative to directory of other view). "!" forces overwrite. .TP .BI ":[range]rlink[!] name1 name2..." create relative symbolic links of files in directory of other view giving each next link a corresponding name from the argument list. "!" forces overwrite. .TP .BI ":[range]rlink[!?] -skip ...[ &]" see "\-skip parameter" section below. .TP .BI " :screen" .TP .BI :screen toggle whether to use the terminal multiplexer or not. .br A terminal multiplexer uses pseudo terminals to allow multiple windows to be used in the console or in a single xterm. Starting vifm from terminal multiplexer with appropriate support turned on will cause vifm to open a new terminal multiplexer window for each new file edited or program launched from vifm. .br This requires screen version 3.9.9 or newer for the screen \-X argument or tmux (1.8 version or newer is recommended). .TP .BI :screen! enable integration with terminal multiplexers. .TP .BI :screen? display whether integration with terminal multiplexers is enabled. .LP Note: the command is called screen for historical reasons (when tmux wasn't yet supported) and might be changed in future releases, or get an alias. .TP .BI " :select" .TP .BI ":[range]select" select files in the given range (current file if no range is given). .TP .BI ":select {pattern}" select files that match specified pattern. Possible {pattern} forms are described in "Patterns" section below. Trailing slash for directories is taken into account, so `:select! */ | invert s` selects only files. .TP .BI ":select //[iI]" same as item above, but reuses last search pattern. .TP .BI ":select !{external command}" select files from the list supplied by external command. Files are matched by full paths, relative paths are converted to absolute ones beforehand. .TP .BI ":[range]select! [{pattern}]" same as above, but resets previously selected items before proceeding. .TP .BI " :session" .TP .BI :session? print name of the current session. .TP .BI :session detach current session without saving it. Resets v:session. .TP .BI ":session name" create or load and switch to a session with the specified name. Name can't contain slashes. Session active at the moment is saved before the switch. Session is also automatically saved when quiting the application in usual ways. Sets v:session. .TP .BI ":session -" switch to a previous session if it still exists (wasn't removed or detached from without saving). .TP .BI " :set" .TP .BI :se[t] display all options that differ from their default value. .TP .BI ":se[t] all" display all options. .TP .BI ":se[t] opt1=val1 opt2='val2' opt3=""val3"" ..." sets given options. For local options both values are set. .br You can use following syntax: \- for all options \- option, option? and option& \- for boolean options \- nooption, invoption and option! \- for integer options \- option=x, option+=x and option\-=x \- for string options \- option=x and option+=x \- for string list options \- option=x, option+=x, option\-=x and option^=x \- for enumeration options \- option=x, option+=x and option\-=x \- for set options \- option=x, option+=x, option\-=x and option^=x \- for charset options \- option=x, option+=x, option\-=x and option^=x the meaning: \- option \- turn option on (for boolean) or print its value (for all others) \- nooption \- turn option off \- invoption \- invert option state \- option! \- invert option state \- option? \- print option value \- option& \- reset option to its default value \- option=x or option:x \- set option to x \- option+=x \- add/append x to option \- option\-=x \- remove (or subtract) x from option \- option^=x \- toggle x presence among values of the option Option name can be prepended and appended by any number of whitespace characters. .TP .BI " :setglobal" .TP .BI :setg[lobal] display all global options that differ from their default value. .TP .BI ":setg[lobal] all" display all global options. .TP .BI ":setg[lobal] opt1=val1 opt2='val2' opt3=""val3"" ..." same as :set, but changes/prints only global options or global values of local options. Changes to the latter might be not visible until directory is changed. .TP .BI " :setlocal" .TP .BI :setl[ocal] display all local options that differ from their default value. .TP .BI ":setl[ocal] all" display all local options. .TP .BI ":setl[ocal] opt1=val1 opt2='val2' opt3=""val3"" ..." same as :set, but changes/prints only local values of local options. .TP .BI " :shell" .TP .BI :sh[ell][!] start a shell in current directory. "!" suppresses spawning dedicated window of terminal multiplexer for a shell. To make vifm adaptive to environment it uses $SHELL if it's defined, otherwise 'shell' value is used. .TP .BI " :siblnext" .TP .BI :[count]siblnext[!] change directory to [count]th next sibling directory after current path using value of global sort option of current pane. "!" enables wrapping. For example, say, you're at /boot and root listing starts like this: bin/ boot/ dev/ ... Issuing :siblnext will navigate to /dev. .TP .BI " :siblprev" .TP .BI :[count]siblprev[!] same as :siblnext, but in the opposite direction. .TP .BI " :sort" .TP .BI :sor[t] display dialog with different sorting methods, where one can select the primary sorting key. When 'viewcolumns' options is empty and 'lsview' is off, changing primary sorting key will also affect view look (in particular the second column of the view will be changed). See "Menus and dialogs" section for controls. .TP .BI " :source" .TP .BI ":so[urce] file" read command-line commands from the file. .TP .BI " :split" .TP .BI :sp[lit] switch to a two window horizontal view. .TP .BI :sp[lit]! toggle horizontal window splitting. .TP .BI ":sp[lit] path" splits the window horizontally to show both file directories. Also changes other pane to path (absolute or relative to current directory of active pane). .TP .BI " :stop" .TP .BI :st[op] suspend vifm (same as pressing Ctrl-Z). Does nothing if this instance isn't running in a shell. The command exists to allow mapping to the action of Ctrl-Z. .TP .BI " :substitute" .TP .BI :[range]s[ubstitute]/pattern/string/[flags] for each file in range replace a match of pattern with string. .LP String can contain \\0...\\9 to link to capture groups (\\0 \- all match, \\1 \- first group, etc.). Pattern is stored in search history. Available flags: .RS 2 .IP \- 2 i \- ignore case (the 'ignorecase' and 'smartcase' options are not used) .IP \- 2 I \- don't ignore case (the 'ignorecase' and 'smartcase' options are not used) .IP \- 2 g \- substitute all matches in each file name (each g toggles this) .RE .TP .BI :[range]s[ubstitute]/pattern substitute pattern with an empty string. .TP .BI :[range]s[ubstitute]//string/[flags] use last pattern from search history. .TP .BI :[range]s[ubstitute] repeat previous substitution command. .TP .BI " :sync" .TP .BI ":sync [relative path]" change the other pane to the current pane directory or to some path relative to the current directory. Using macros is allowed. .TP .BI ":sync!" change the other pane to the current pane directory and synchronize cursor position. If current pane displays custom list of files, position before entering it is used (current one might not make any sense). .TP .BI ":sync! [location | cursorpos | localopts | filters | filelist | tree | all]..." change enumerated properties of the other pane to match corresponding properties of the current pane. Arguments have the following meanings: .RS .RS 2 .IP \- 2 location \- current directory of the pane; .IP \- 2 cursorpos \- cursor position (doesn't make sense without "location"); .IP \- 2 localopts \- all local options; .IP \- 2 filters \- all filters; .IP \- 2 filelist \- list of files for custom view (implies "location"); .IP \- 2 tree \- tree structure for tree view (implies "location"); .IP \- 2 all \- all of the above. .RE .RE .TP .BI " :tabclose" .TP .BI ":tabc[lose]" close current tab, unless it's the only one open at current scope. .TP .BI " :tabmove" .TP .BI ":tabm[ove] [N]" without the argument or with `$` as the argument, current tab becomes the last tab. With the argument, current tab is moved after the tab with the specified number. Argument of `0` moves current tab to the first position. .TP .BI " :tabname" .TP .BI ":tabname [name]" set, update or reset (when no argument is provided) name of the current tab. .TP .BI " :tabnew" .TP .BI ":tabnew [path]" create new tab. Accepts optional path for the new tab. Macros and environment variables are expanded. .TP .BI " :tabnext" .TP .BI ":tabn[ext]" switch to the next tab (wrapping around). .TP .BI ":tabn[ext] {n}" go to the tab number {n}. Tab numeration starts with 1. .TP .BI " :tabonly" .TP .BI ":tabo[nly]" close all tabs but the current one. Closes pane tabs only at the active side. .TP .BI " :tabprevious" .TP .BI ":tabp[revious]" switch to the previous tab (wrapping around). .TP .BI ":tabp[revious] {n}" go to the {n}-th previous tab. Note that :tabnext handles its argument differently. .TP .BI " :touch" .TP .BI ":[line]touch file..." create files at specified paths. Aborts on errors. Doesn't update time of existing files. The [line] can be used to pick node in a tree-view. Macros are expanded. .TP .BI " :tr" .TP .BI :[range]tr/pattern/string/ for each file in range transliterate the characters which appear in pattern to the corresponding character in string. When string is shorter than pattern, it's padded with its last character. .TP .BI " :trashes" .TP .BI :trashes lists all valid trash directories in a menu. Only non-empty and writable trash directories are shown. This is exactly the list of directories that are cleared when :empty command is executed. .TP .BI :trashes? same as :trashes, but also displays size of each trash directory. .TP .BI " :tree" .TP .BI :tree turn pane into tree view with current directory as its root. The tree view is implemented on top of a custom view, but is automatically kept in sync with file system state and considers all the filters. Thus the structure corresponds to what one would see on visiting the directories manually. As a special case for trees built out of custom view file-system tracking isn't performed. To leave tree view go up from its root or use gh at any level of the tree. Any command that changes directory will also do, in particular, `:cd ..`. Tree structure is incompatible with alternative representations, so values of 'lsview' and 'millerview' options are ignored. The "depth" argument specifies nesting level on which loading of subdirectories won't happen (they will be folded). Values start at 1. .TP .BI :tree! toggle current view in and out of tree mode. .TP .BI " :undolist" .TP .BI :undol[ist] display list of latest changes. Use "!" to see actual commands. See "Menus and dialogs" section for controls. .TP .BI " :unlet" .TP .BI ":unl[et][!] {var}..." remove one or more environment (`$VAR`) or global (`g:global`) variables. Use "!" to omit displaying warnings about nonexistent variables. .TP .BI " :unselect" .TP .BI ":[range]unselect" unselect files in the given range (current file if no range is given). .TP .BI ":unselect {pattern}" unselect files that match specified pattern. Possible {pattern} forms are described in "Patterns" section below. Trailing slash for directories is taken into account, so `:unselect */` unselects directories. .TP .BI ":unselect !{external command}" unselect files from the list supplied by external command. Files are matched by full paths, relative paths are converted to absolute ones beforehand. .TP .BI ":unselect //[iI]" same as item above, but reuses last search pattern. .TP .BI " :version" .TP .BI :ve[rsion] show menu with version information. .TP .BI " :vifm" .TP .BI :vifm same as :version. .TP .BI " :view" .TP .BI :vie[w] toggle on and off the quick file view (preview of file's contents). See also 'quickview' option. .TP .BI :vie[w]! turn on quick file view if it's off. .TP .BI " :volumes" .TP .BI :volumes only for MS-Windows .br display menu with volume list. Hitting l (or Enter) key opens appropriate volume in the current pane. See "Menus and dialogs" section for controls. .TP .BI " :vsplit" .TP .BI :vs[plit] switch to a two window vertical view. .TP .BI :vs[plit]! toggle window vertical splitting. .TP .BI ":vs[plit] path" split the window vertically to show both file directories. And changes other pane to path (absolute or relative to current directory of active pane). .TP .BI " :wincmd" .TP .BI ":[count]winc[md] {arg}" same as running Ctrl-W [count] {arg}. .TP .BI " :windo" .TP .BI ":windo [command...]" execute command for each pane (same as :winrun % command). .TP .BI " :wingo" .TP .BI ":wingo {id} [{substr}]" navigate to a view by its id number. The {substr} part is used for completion (can be any number of words, only leading whitespace is removed). The view will become the current one by switching to the corresponding tab and pane. Matching is case sensitive substring search in view title or its full current path (with `~` expanded regardless of any settings). .TP .BI ":wingo {substr}" this form navigates to a view that is uniquely identified by {substr} or errors. The form will not be used if the first word of {substr} is a valid number that starts with a digit (i.e., no `+` or `-` in front). .TP .BI " :winrun" .TP .BI ":winrun type [command...]" execute command for pane(s), which is determined by type argument: \- ^ \- top-left pane \- $ \- bottom-right pane \- % \- all panes \- . \- current pane \- , \- other pane .TP .BI " :write" .TP .BI :w[rite] write current state to vifminfo and session files (if a session is active). .TP .BI " :wq" .TP .BI :wq[!] same as :quit, but ! disables only the check of backgrounded commands, while state of the application is always written. .BI " :wqall" .TP .BI :wqa[ll][!] same as :qall, but ! disables only the check of backgrounded commands, while state of the application is always written. .TP .BI " :xall" .TP .BI ":xa[ll][!]" same as :qall. .TP .BI " :xit" .TP .BI ":x[it][!]" same as :quit. .TP .BI " :yank" .TP .BI ":[range]y[ank] [reg] [count]" will yank files to the reg register. .TP .BI " :map lhs rhs" .TP .BI ":map lhs rhs" map lhs key sequence to rhs in normal and visual modes. .TP .BI ":map! lhs rhs" map lhs key sequence to rhs in command line mode. .TP .BI " :amap :cmap :dmap :mmap :nmap :qmap :vmap" .TP .BI ":amap lhs rhs" map lhs to rhs in navigation mode. .TP .BI ":cm[ap] lhs rhs" map lhs to rhs in command line mode. .TP .BI ":dm[ap] lhs rhs" map lhs to rhs in dialog modes. .TP .BI ":mm[ap] lhs rhs" map lhs to rhs in menu mode. .TP .BI ":nm[ap] lhs rhs" map lhs to rhs in normal mode. .TP .BI ":qm[ap] lhs rhs" map lhs to rhs in view mode. .TP .BI ":vm[ap] lhs rhs" map lhs to rhs in visual mode. .TP .BI " :*map" .TP .BI :amap list all maps in navigation mode. .TP .BI :cm[ap] list all maps in command line mode. .TP .BI :dm[ap] list all maps in dialog modes. .TP .BI :mm[ap] list all maps in menu mode. .TP .BI :nm[ap] list all maps in normal mode. .TP .BI :qm[ap] list all maps in view mode. .TP .BI :vm[ap] list all maps in visual mode. .TP .BI " :*map beginning" .TP .BI ":amap beginning" list all maps in navigation mode that start with the beginning. .TP .BI ":cm[ap] beginning" list all maps in command line mode that start with the beginning. .TP .BI ":dm[ap] beginning" list all maps in dialog modes that start with the beginning. .TP .BI ":mm[ap] beginning" list all maps in menu mode that start with the beginning. .TP .BI ":nm[ap] beginning" list all maps in normal mode that start with the beginning. .TP .BI ":qm[ap] beginning" list all maps in view mode that start with the beginning. .TP .BI ":vm[ap] beginning" list all maps in visual mode that start with the beginning. .TP .BI " :noremap" .TP .BI ":no[remap] lhs rhs" map the key sequence lhs to rhs for normal and visual modes, but don't expand user mappings in rhs. .TP .BI ":no[remap]! lhs rhs" map the key sequence lhs to rhs for command line mode, but don't expand user mappings in rhs. .TP .BI " :anoremap :cnoremap :dnoremap :mnoremap :nnoremap :qnoremap :vnoremap" .TP .BI ":anoremap lhs rhs" map the key sequence lhs to rhs for navigation mode, but don't expand user mappings in rhs. .TP .BI ":cno[remap] lhs rhs" map the key sequence lhs to rhs for command line mode, but don't expand user mappings in rhs. .TP .BI ":dn[oremap] lhs rhs" map the key sequence lhs to rhs for dialog modes, but don't expand user mappings in rhs. .TP .BI ":mn[oremap] lhs rhs" map the key sequence lhs to rhs for menu mode, but don't expand user mappings in rhs. .TP .BI ":nn[oremap] lhs rhs" map the key sequence lhs to rhs for normal mode, but don't expand user mappings in rhs. .TP .BI ":qn[oremap] lhs rhs" map the key sequence lhs to rhs for view mode, but don't expand user mappings in rhs. .TP .BI ":vn[oremap] lhs rhs" map the key sequence lhs to rhs for visual mode, but don't expand user mappings in rhs. .TP .BI " :unmap" .TP .BI ":unm[ap] lhs" remove user mapping of lhs from normal and visual modes. .TP .BI ":unm[ap]! lhs" remove user mapping of lhs from command line mode. .TP .BI " :aunmap :cunmap :dunmap :munmap :nunmap :qunmap :vunmap" .TP .BI ":aunmap lhs" remove user mapping of lhs from navigation mode. .TP .BI ":cu[nmap] lhs" remove user mapping of lhs from command line mode. .TP .BI ":du[nmap] lhs" remove user mapping of lhs from dialog modes. .TP .BI ":mu[nmap] lhs" remove user mapping of lhs from menu mode. .TP .BI ":nun[map] lhs" remove user mapping of lhs from normal mode. .TP .BI ":qun[map] lhs" remove user mapping of lhs from view mode. .TP .BI ":vu[nmap] lhs" remove user mapping of lhs from visual mode. .\" --------------------------------------------------------------------------- .SH Ranges .\" --------------------------------------------------------------------------- The ranges implemented include: 2,3 \- from second to third file in the list (including it) % \- the entire directory. . \- the current position in the filelist. $ \- the end of the filelist. 't \- the mark position t. Examples: .EX :%delete .EE would delete all files in the directory. .EX :2,4delete .EE would delete the files in the list positions 2 through 4. .EX :.,$delete .EE would delete the files from the current position to the end of the filelist. .EX :3delete4 .EE would delete the files in the list positions 3, 4, 5, 6. If a backward range is given :4,2delete \- an query message is given and user can chose what to do next. The builtin commands that accept a range are :d[elete] and :y[ank]. .\" --------------------------------------------------------------------------- .SH :command parameters .\" --------------------------------------------------------------------------- Some of the command-line commands accept parameters in the form of `\-paramname`. Arguments of such commands can be split into two groups: parameters and positional arguments. Items from the two groups cannot be interleaved and parameters always come first. List of parameters is terminated implicitly by the first argument that doesn't start with a dash ("-") or explicitly via "--" separator (needs to be a separate argument), which is just discarded. These strict rules allow arbitrary positional arguments, such as file names that start with a dash. .TP .BI "\-skip parameter" This parameter makes :copy, :move, :alink and :rlink automatically skip source files that already exist at the destination rather than refusing to perform the operation. .\" --------------------------------------------------------------------------- .SH Command macros .\" --------------------------------------------------------------------------- The command macros may be used in user commands. .TP .BI %a User arguments. When user arguments contain macros, they are expanded before performing substitution of %a. .TP .BI "%c %""c" The current file under the cursor. .TP .BI "%C %""C" The current file under the cursor in the other directory. .TP .BI "%f %""f" All of the selected files or the current file, but see "Selection" section below. .TP .BI "%F %""F" Same as %f, %"f, but for the inactive pane. .TP .BI "%l %""l" List of selected files. Unlike %f from above, this is only for explicit selection (i.e., not via a range) and is empty if no files are selected. .TP .BI "%L %""L" Same as %l, %"l, but for the inactive pane. .TP .BI "%b %""b" Same as %f %F. .TP .BI "%d %""d" Full path to current directory. .TP .BI "%D %""D" Full path to other file list directory. .TP .BI "%rx %""rx" Full paths to files in the register {x}. In case of invalid symbol in place of {x}, it's processed with the rest of the line and default register is used. .TP .BI %m Show command output in a menu. .TP .BI %M Same as %m, but l (or Enter) key is handled like for :locate and :find commands. .TP .BI %u Process command output as list of paths and compose custom view out of it. .TP .BI %U Same as %u, but implies less list updates inside vifm, which is absence of sorting at the moment. .TP .BI %Iu Same as %u, but gives up terminal before running external command. .TP .BI %IU Same as %U, but gives up terminal before running external command. .TP .BI %S Show command output in the status bar. .TP .BI %q Redirect command output to quick view, which is activated if disabled. .TP .BI %s Execute command in horizontally split window of active terminal multiplexer (ignored if not running inside one). .TP .BI %v Same as %s, but splits vertically. .TP .BI %n Forbid use of terminal multiplexer to run the command. .TP .BI %N Do not detach viewer from terminal session (keeps `/dev/tty` available) or process group (keeps the command in the set of foreground clients of the terminal). This flag is a workaround for rare commands/terminals which might need a working TTY for :fileviewer command to operate correctly and has no effect otherwise. .TP .BI %i Run in background and suppress error dialogs, but collect errors internally for viewing via :jobs menu. .TP .BI %Pl Pipe list of files to standard input of a command. .TP .BI %Pz Same as %Pl, but separates paths by null ('\\0') character. .TP .BI %pc Marks the end of the main command and the beginning of the clear command for graphical preview, which is invoked on closing preview of a file. .TP .BI %pd Marks a preview command as one that directly communicates with the terminal. Beware that this is for things like sixel which are self-contained sequences that depend only on current cursor position, using this with anything else is likely to mangle terminal state. .TP .BI %pu Uncached preview. Intended to be used for commands that just send file path somewhere for preview. .LP The following dimensions and coordinates are in characters: .TP .BI %px x coordinate of top-left corner of preview area. .TP .BI %py y coordinate of top-left corner of preview area. .TP .BI %pw width of preview area. .TP .BI %ph height of preview area. .LP Use %% if you need to put a percent sign in your command. Note that %i, %Iu, %IU, %m, %M, %n, %q, %s, %S, %u, %U and %v macros are mutually exclusive. Only the last one of them in the command will take effect. Note that %Pl and %Pz are mutually exclusive. Only the last one of them in the command will take effect. Note that a previewer containing %pd is considered a pass-through previewer, otherwise a previewer containing both %px and %py is considered to be a graphical previewer, the rest are treated as text previewers. You can use file name modifiers after %c, %C, %f, %F, %b, %d and %D macros. Supported modifiers are: .RS 2 .IP \- 2 :p \- full path .IP \- 2 :u \- UNC name of path (e.g. "\\\\server" in "\\\\server\\share"), Windows only. Expands to current computer name for not UNC paths. .IP \- 2 :~ \- relative to the home directory .IP \- 2 :. \- relative to current directory .IP \- 2 :h \- head of the file name .IP \- 2 :t \- tail of the file name .IP \- 2 :r \- root of the file name (without last extension) .IP \- 2 :e \- extension of the file name (last one) .IP \- 2 :s?pat?sub? \- substitute the first occurrence of pat with sub. You can use any character for '?', but it must not occur in pat or sub. .IP \- 2 :gs?pat?sub? \- like :s, but substitutes all occurrences of pat with sub. .RE See ':h filename\-modifiers' in Vim's documentation for the detailed description. Using %x means expand corresponding macro escaping all characters that have special meaning. And %"x means using of double quotes and escape only backslash and double quote characters, which is more useful on Windows systems. Position and quantity (if there is any) of %m, %M, %S or %s macros in the command is unimportant. All their occurrences are removed from the resulting command. %c and %f macros are expanded to relative paths, while %C and %F are always expanded to full paths. The same applies to %f and %F implicitly used by %b. .TP .BI ":com move mv %f %D" set the :move command to move all of the files selected in the current directory to the other directory. .TP The %a macro is replaced with any arguments given to an alias command. All \ arguments are considered optional. :com lsl !!ls \-l %a \- set the lsl command to execute ls \-l with or without an argument. .TP .BI ":lsl" will list the directory contents of the current directory. .TP .BI ":lsl filename" will list only the given filename. .TP The macros can also be used in directly executing commands. ":!mv %f %D" \ would move the current directory selected files to the other directory. .TP Appending & to the end of a command causes it to be executed in the \ background. Typically you want to run two kinds of external commands in the \ background: .RS 2 .IP \- 2 GUI applications that doesn't fork thus block vifm (:!sxiv %f &); .IP \- 2 console tools that do not work with terminal (:!mv %f %D &). .RE .TP You don't want to run terminal commands, which require terminal input or \ output something in background because they will mess up vifm's TUI. Anyway, \ if you did run such a command, you can use Ctrl-L key to update vifm's TUI. .TP Rewriting the example command with macros given above with backgrounding: .EX .EE .LP %m, %M, %s, %S, %u and %U macros cannot be combined with background mark (" &") as it doesn't make much sense. .\" --------------------------------------------------------------------------- .SH Command backgrounding .\" --------------------------------------------------------------------------- Copy and move operation can take a lot of time to proceed. That's why vifm supports backgrounding of this two operations. To run :copy, :move or :delete command in the background just add " &" at the end of a command. For each background operation a new thread is created. Job cancellation can be requested in the :jobs menu via dd shortcut. You can see if command is still running in the :jobs menu. Backgrounded commands have progress instead of process id at the line beginning. Background operations cannot be undone. .\" --------------------------------------------------------------------------- .SH Cancellation .\" --------------------------------------------------------------------------- Note that cancellation works somewhat different on Windows platform due to different mechanism of break signal propagation. One also might need to use Ctrl-Break shortcut instead of Ctrl-C. There are two types of operations that can be cancelled: .RS 2 .IP \- 2 file system operations; .IP \- 2 mounting with FUSE (but not unmounting as it can cause loss of data); .IP \- 2 calls of external applications. .RE Note that vifm never terminates applications, it sends SIGINT signal and lets the application quit normally. When one of set of operations is cancelled (e.g. copying of 5th file of 10 files), further operations are cancelled too. In this case undo history will contain only actually performed operations. Cancelled operations are indicated by "(cancelled)" suffix appended to information message on status bar. .B File system operations Currently the following commands can be cancelled: :alink, :chmod, :chown, :clone, :copy, :delete, :mkdir, :move, :restore, :rlink, :touch. File putting (on p/P key) can be cancelled as well. It's not hard to see that these are mainly long-running operations. Cancelling commands when they are repeated for undo/redo operations is allowed for convenience, but is not recommended as further undo/redo operations might get blocked by side-effects of partially cancelled group of operations. These commands can't be cancelled: :empty, :rename, :substitute, :tr. .B Mounting with FUSE It's not considered to be an error, so only notification on the status bar is shown. .B External application calls Each of this operations can be cancelled: :apropos, :find, :grep, :locate. .\" --------------------------------------------------------------------------- .SH Selection .\" --------------------------------------------------------------------------- If there is a selection, it's stashed before proceeding further unless file under the cursor is part of that selection. This means that when macros are expanded for :filetype or :filextype programs, `%f` and `%F` become equivalent to `%c` and `%C` respectively if current file is not selected. So you run selection by running one of selected files, otherwise you're running a single file even if there are other selected entries. When running a selection it must not include broken symbolic links, has to be consistent and set of file handlers must be compatible. Consistency means that selection contains either only directories (including links to them) or only files, but not their mix. Compatibility is a more sophisticated check, but it's defined in a natural way so that you get what you'd expect. The following properties of selection are taken into account while checking it for compatibility and deciding how to handle it: .RS 2 .IP 1. 3 If there any files for which handler isn't defined, then all files are opened using 'vicmd' or 'vixcmd'. .IP 2. 3 If all handlers match the following criteria: - backgrounded - include `%c`/`%"c` and/or `%C`/`%"C` - include neither `%f`/`%"f` nor `%F`/`%"F` .br then each file is executed independently of the rest. .IP 3. 3 If all handlers are equal, the common handler is executed. This handler might ignore selection and process only file under the cursor. .IP 4. 3 Otherwise, an error is reported, because handlers differ and they don't support parallel execution. .RE .\" --------------------------------------------------------------------------- .SH Patterns .\" --------------------------------------------------------------------------- :highlight, :filetype, :filextype, :fileviewer commands and 'classify' option support globs, regular expressions and mime types to match file names or their paths. Directory paths get an implicit trailing slash on matching against a pattern, keep that in mind for globs or regular expressions that end with `$`. There are six possible ways to write a single pattern: .RS 2 .IP 1. 3 [!]{comma-separated-name-globs} .IP 2. 3 [!]{{comma-separated-path-globs}} .IP 3. 3 [!]/name-regular-expression/[iI] .IP 4. 3 [!]//path-regular-expression//[iI] .IP 5. 3 [!] .IP 6. 3 undecorated-pattern .RE First five forms can include leading exclamation mark that negates pattern matching. The last form is implicitly refers to one of others. :highlight does not accept undecorated form, while :filetype, :filextype, :fileviewer, :select, :unselect and 'classify' treat it as list of name globs. Path patterns receive absolute path of the file that includes its name component as well. To combine several patterns (AND them), make sure you're using one of the first five forms and write patterns one after another, like this: .EX {*.vifm} .EE Mind that if you make a mistake the whole string will be treated as the sixth form. :filetype, :filextype and :fileviewer commands accept comma-separated list of patterns instead of a single pattern, thus effectively handling OR operation on them: .EX {*.vifm},{*.pdf} .EE Forms that accept comma-separated lists of patterns also process them as lists of alternatives. .B Patterns with regular expressions Regular expression patterns are case insensitive by default, see description of commands, which might override default behaviour. Flags of regular expressions mean the following: - "i" makes filter case insensitive; - "I" makes filter case sensitive. They can be repeated multiple times, but the later one takes precedence (e.g. "iiiI" is equivalent to "I" and "IiIi" is the same as "i"). There are no implicit `^` or `$`, so make sure to specify them explicitly if the pattern should match the whole name or path. .B Patterns with globs "Globs" section below provides short overview of globs and some important points that one needs to know about them. .B Patterns with mime-types Mime type matching is essentially globs matching applied to mime type of a file instead of its name/path. Note: mime types aren't detected on Windows. .B Examples Associate `evince` to PDF-files only inside `/home/user/downloads/` directory (excluding its subdirectories): .EX :filextype //^/home/user/downloads/[^/]*\.pdf$// evince %f .EE .\" --------------------------------------------------------------------------- .SH Regular expressions .\" --------------------------------------------------------------------------- All regular expressions are modern/extended. See `man 7 regex` for more details on what's supported. The following special sequences are additionally parsed: - `\\c` forces matching ignoring case of letters - `\\C` forces matching respecting case of letters `\\c` and `\\C` have the highest priority in determining whether case is matched or not and exist to override 'ignorecase', 'smartcase' and `i`/`I` flags when necessary. If multiple sequences are present, the one which appears later takes precedence. Note that unlike in Vim character classes are affected by settings and sequences that control case sensitivity in regular expressions. .\" --------------------------------------------------------------------------- .SH Globs .\" --------------------------------------------------------------------------- Globs are always case insensitive as it makes sense in general case. `*`, `?`, `[` and `]` are treated as special symbols in the pattern. E.g. .EX :filetype * less %c .EE matches all files. One can use character classes for escaping, so .EX :filetype [*] less %c .EE matches only one file name, the one which contains only asterisk symbol. `*` means any number of any characters (possibly an empty substring), with one exception: asterisk at the pattern beginning doesn't match dot in the first position. E.g. .EX :fileviewer *.zip,*.jar zip \-sf %c .EE associates using of `zip` program to preview all files with `zip` or `jar` extensions as listing of their content, but `.file.zip` won't be matched. `?` means any character at this position. E.g. .EX :fileviewer ?.out file %c .EE calls `file` tool for all files which have exactly one character before their extension (e.g. a.out, b.out). Square brackets designate character class, which means that whole character class matches against any of characters listed in it. For example .EX :fileviewer *.[ch] highlight \-O xterm256 \-s dante \-\-syntax c %c .EE makes vifm call `highlight` program to colorize source and header files in C language for a 256-color terminal. Equal command would be .EX :fileviewer *.c,*.h highlight \-O xterm256 \-s dante \-\-syntax c %c .EE Inside square brackets `^` or `!` can be used for symbol class negation and the `\-` symbol to set a range. `^` and `!` should appear right after the opening square bracket. For example .EX :filetype *.[!d]/ inspect_dir .EE associates `inspect_dir` as additional handler for all directories that have one character extension unless it's "d" letter. And .EX :filetype [0-9].jpg sxiv .EE associates `sxiv` picture viewer only for JPEG-files that contain single digit in their name. If you need to include literal comma, which normally separates multiple globs, double it. .\" --------------------------------------------------------------------------- .SH :set options .\" --------------------------------------------------------------------------- .TP .BI "Local options" These are kind of options that are local to a specific view. So you can set ascending sorting order for left pane and descending order for right pane. In addition to being local to views, each such option also has two values: .RS .RS 2 .IP \- 2 local to current directory (value associated with current location); .IP \- 2 global to current directory (value associated with the pane). .RE .RE .RS The idea is that current directory can be made a temporary exception to regular configuration of the view, until directory change. Use :setlocal for that. :setglobal changes view value not affecting settings until directory change. :set applies changes immediately to all values. .RE .TP .BI 'aproposprg' type: string .br default: "apropos %a" .br Specifies format for an external command to be invoked by the :apropos command. The format supports expanding of macros, specific for a particular *prg option, and %% sequence for inserting percent sign literally. This option should include the %a macro to specify placement of arguments passed to the :apropos command. If the macro is not used, it will be implicitly added after a space to the value of this option. .TP .BI 'autocd' type: boolean .br default: false .br When enabled unknown command-line commands are interpreted as implicit invocation of :cd with one argument and no escaping. Tilde is expanded, but not macros or environment variables. .TP .BI 'autochpos' type: boolean .br default: true .br When disabled vifm will set cursor to the first line in the view after :cd and :pushd commands instead of saved cursor position. Disabling this will also make vifm clear information about cursor position in the view history on :cd and :pushd commands (and on startup if 'autochpos' is disabled in the vifmrc). l key in the ":history ." and ":trashes" menus are treated like :cd command. This option also affects marks so that navigating to a mark doesn't restore cursor position. When this option is enabled, more fine grained control over cursor position is available via 'histcursor' option. .TP .BI "'columns' 'co'" type: integer .br default: terminal width on startup .br Terminal width in characters. .TP .BI "'caseoptions'" type: charset .br default: "" .br This option gives additional control over case sensitivity by allowing overriding default behaviour to either always be case sensitive or always be case insensitive. Possible values form pairs of lower and upper case letters that configure specific aspect of behaviour: p - always ignore case of paths during completion. P - always match case of paths during completion. g - always ignore case of characters for f/F/;/,. G - always match case of characters for f/F/;/,. At most one item of each pair takes affect, if both or more are present, only the last one matters. When none of pair's elements are present, the behaviour is default (depends on operating system for path completion and on values of 'ignorecase' and 'smartcase' options for file navigation). .TP .BI "'cdpath' 'cd'" type: string list .br default: value of $CDPATH with commas instead of colons .br Specifies locations to check on changing directory with relative path that doesn't start with "./" or "../". When non-empty, current directory is examined after directories listed in the option. This option doesn't affect completion of :cd command. Example: .EX set cdpath=~ .EE This way ":cd bin" will switch to "~/bin" even if directory named "bin" exists in current directory, while ":cd ./bin" command will ignore value of 'cdpath'. .TP .BI 'chaselinks' type: boolean .br default: false .br When enabled path of view is always resolved to real path (with all symbolic links expanded). .TP .BI 'classify' type: string list .br default: ":dir:/" .br Specifies file name prefixes and suffixes depending on file type or name (mind that directory names have an implicit trailing slash). The format is either of: - [{prefix}]:{filetype}:[{suffix}] - [{prefix}]::{pattern}::[{suffix}] .br Possible {pattern} forms are described in "Patterns" section above. Priority rules: - file name patterns have priority over type patterns - file name patterns are matched in left-to-right order of their appearance \ in this option Either {prefix} or {suffix} or both can be omitted (which is the default for all unspecified file types), this means empty {prefix} and/or {suffix}. {prefix} and {suffix} should consist of at most eight characters. Elements are separated by commas. Neither prefixes nor suffixes are part of file names, so they don't affect commands which operate on file names in any way. Comma (',') character can be inserted by doubling it. List of file type names can be found in the description of filetype() function. .TP .BI "'confirm' 'cf'" type: set .br default: delete,permdelete .br Defines which operations require confirmation: .br \- delete \- moving files to trash (on d or :delete); .br \- permdelete \- permanent deletion of files (on D or :delete! command or on undo/redo operation). .TP .BI "'cpoptions' 'cpo'" type: charset .br default: "fst" .br Contains a sequence of single-character flags. Each flag enables behaviour of older versions of vifm. Flags: .br \- f \- when included, running :filter command results in not inverted (matching files are filtered out) and :filter! in inverted (matching files are left) filter, when omitted, meaning of the exclamation mark changes to the opposite; .br \- s \- when included, yy, Y, dd and DD normal mode commands act on selection if there is any, otherwise they operate on the current file; when omitted, those commands always operate on the current file; .br \- t \- when included, (thus ) behave as and switches \ active pane, otherwise and go forward in the view history. It's possible to make both and to work as expected by setting up the terminal to emit a custom sequence when is pressed; see :histnext for details. .TP .BI 'cvoptions' type: set .br default: .br Specifies whether entering/leaving custom views triggers events that normally happen on entering/leaving directories: \- autocmds \- trigger autocommands on entering/leaving custom views; \- localopts \- reset local options on entering/leaving custom views; \- localfilter \- reset local filter on entering/leaving custom views. .TP .BI 'deleteprg' type: string .br default: "" .br Specifies program to run on files that are permanently removed. When empty, files are removed as usual, otherwise this command is invoked on each file by appending its name. If the command doesn't remove files, they will remain on the file system. .TP .BI 'dirsize' type: enumeration .br default: size .br Controls how size of directories is displayed in file views. The following values are possible: \- size \- size of directory (i.e., size used to store list of files) \- nitems \- number of entries in the directory (excluding . and ..) Size obtained via ga/gA overwrites this setting so seeing count of files and occasionally size of directories is possible. .TP .BI 'dotdirs' type: set .br default: nonrootparent,treeleafsparent .br Controls displaying of dot directories. The following values are possible: \- rootparent \- show "../" in root directory of file system \- nonrootparent \- show "../" in non-root directories of file system \- treeleafsparent \- show "../" in empty directories of tree view Note that empty directories always contain "../" entry regardless of value of this option. "../" disappears at the moment at least one file is created. .TP .BI 'dotfiles' type: boolean .br default: false .br Whether dot files are shown in the view. Can be controlled with z* bindings. .TP .BI 'fastrun' type: boolean .br default: false .br With this option turned on you can run partially entered commands with unambiguous beginning using :! (e.g. :!Te instead of :!Terminal or :!Te). .TP .BI "'fillchars' 'fcs'" type: string list .br default: "" .br Sets characters used to fill borders. item default used for hborder:c '' middle horizontal border millersep:c '' separator of miller columns vborder:c ' ' left, middle and right vertical borders An empty string for millersep or vborder is equivalent to a space. An empty string for hborder omits the horizontal border. Example: .EX set fillchars=vborder:".",hborder:"",millersep:"|" .EE .TP .BI 'findprg' type: string .br default: "find %s %a" .br Specifies format for an external command to be invoked by the :find command. The format supports expansion of macros specific for this particular option and %% sequence for inserting percent sign literally. The macros are: macro value/meaning %s literal arguments of :find or list of paths to search in %A empty or literal arguments of :find %a empty or literal arguments of :find or predicate followed by escaped arguments of :find %p empty or literal arguments of :find or escaped arguments (parameters) of :find %u redirect output to custom view instead of showing a menu %U redirect output to unsorted custom view instead of showing a menu Predicate in %a is "\-name" on *nix and "\-iname" on Windows. If both %u and %U are specified, %U is chosen. Some macros can be added implicitly: - if %s isn't present, it's appended - if neither of %a, %A and %p is present, %a is appended - if neither of %s, %a, %A and %p is present, %s and %a are appended in this \ order The macros slightly change their meaning depending on format of :find's arguments: - if the first argument points to an existing directory, %s is assigned all \ arguments while %a, %A and %p are left empty - otherwise: - %s is assigned a dot (".") meaning current directory or list of \ selected file names, if any - %a, %A and %p are assigned literal arguments when first argument starts \ with a dash ("-"), otherwise %a gets an escaped version of the arguments \ with a predicate and %p contains escaped version of the arguments Starting with Windows Server 2003 a `where` command is available. One can configure vifm to use it in the following way: .EX set findprg="where /R %s %A" .EE As the syntax of this command is rather limited, one can't use :find command with selection of more than one item because the command ignores all directory paths except for the last one. When using find port on Windows, another option is to setup 'findprg' like this: .EX set findprg="find %s %a" .EE .TP .BI 'followlinks' type: boolean .br default: true .br Follow links on l or Enter. That is navigate to destination file instead of treating the link as if it were target file. Doesn't affects links to directories, which are always entered (use gf key for directories). .TP .BI 'fusehome' type: string .br default: "($XDG_DATA_HOME/vifm | $VIFM)/fuse/" .br Directory to be used as a root dir for FUSE mounts. Value of the option can contain environment variables (in form "$envname"), which will be expanded (prepend it with a slash to prevent expansion). The value should expand to an absolute path. If you change this option, vifm won't remount anything. It affects future mounts only. See "Automatic FUSE mounts" section below for more information. .TP .BI "'gdefault' 'gd'" type: boolean .br default: false .br When on, 'g' flag is on for :substitute by default. .TP .BI 'grepprg' type: string .br default: "grep \-n \-H \-I \-r %i %a %s" .br Specifies format for an external command to be invoked by the :grep command. The format supports expanding of macros, specific for a particular *prg option, and %% sequence for inserting percent sign literally. This option should include the %i macro to specify placement of "\-v" string when inversion of results is requested, %a or %A macro to specify placement of arguments passed to the :grep command and the %s macro to specify placement of list of files to search in. If some of the macros are not used, they will be implicitly added after a space to the value of the 'grepprg' option in the following order: %i, %a, %s. Note that when neither %a nor %A are specified, it's %a which is added implicitly. Optional %u or %U macro could be used (if both specified %U is chosen) to force redirection to custom or unsorted custom view respectively. See 'findprg' option for description of difference between %a and %A. Example of setup to use ack (http://beyondgrep.com/) instead of grep: .EX set grepprg='ack \-H \-r %i %a %s' .EE or The Silver Searcher (https://github.com/ggreer/the_silver_searcher): .EX set grepprg='ag \-\-line-numbers %i %a %s' .EE .TP .BI 'histcursor' type: set .br default: startup,dirmark,direnter .br Defines situations when cursor should be moved according to directory history: \- startup \- on loading file lists during startup \- dirmark \- after navigating to a mark that doesn't specify file \- direnter \- on opening directory from a file list This option has no effect when 'autochpos' is disabled. Note that the list is not exhaustive and there are other situations when cursor is positioned automatically. .TP .BI "'history' 'hi'" type: integer .br default: 15 .br Maximum number of stored items in all histories. .TP .BI vifm-'hloptions' type: string list .br default: "filehi:onerow" .br Configures behaviour of highlighting. item default filehi:str onerow The "filehi" item specifies which columns of the view get colored according to file type and its name: - path - highlight columns that display file path, name, root or extension - onerow - same as "path" and also highlight all columns of the current line - allrows - highlight all columns of each row .TP .BI "'hlsearch' 'hls'" type: boolean .br default: true .br Automatically select files that are search matches. .TP .BI 'iec' type: boolean .br default: false .br Use KiB, MiB, ... suffixes instead of K, M, ... when printing size in human-friendly format. .TP .BI "'ignorecase' 'ic'" type: boolean .br default: false .br Ignore case in search patterns (:substitute, / and ? commands), local filter (but not the rest of filters) and other things detailed in the description of 'caseoptions'. .TP .BI "'incsearch' 'is'" type: boolean .br default: false .br When this option is set, search and view update for local filter is be performed starting from initial cursor position each time search pattern is changed. .TP .BI 'iooptions' type: set .br default: datasync .br Controls details of file operations. The following values are available: \- datasync \- periodically synchronize writes on copying files when\ 'syscalls' is set. (This makes copying last as long as it takes to actually write data to the medium, which is slower than you might expect; however, this also prevents system hanging due to filling memory with file-system cache.) \- fastfilecloning \- perform fast file cloning (copy-on-write), when \ available (available on Linux and btrfs file system). .TP .BI "'laststatus' 'ls'" type: boolean .br default: true .br Controls if status bar is visible. .TP .BI 'lines' type: integer .br default: terminal height on startup .br Terminal height in lines. .TP .BI 'locateprg' type: string .br default: "locate %a" .br Specifies format for an external command to be invoked by the :locate command. The format supports expanding of macros, specific for a particular *prg option, and %% sequence for inserting percent sign literally. This option should include the %a macro to specify placement of arguments passed to the :locate command. If the macro is not used, it will be implicitly added after a space to the value of this option. Optional %u or %U macro could be used (if both specified %U is chosen) to force redirection to custom or unsorted custom view respectively. .TP .BI 'mediaprg' type: string .br default: path to bundled script that supports udevil, udisks and udisks2 (using udisks2 requires python with dbus module installed) OS X: path points to a python script that uses diskutil .br {only for *nix} .br Specifies command to be used to manage media devices. Used by :media command. The command can be passed the following parameters: - list -- list media - mount {device} -- mount a device - unmount {path} -- unmount given mount point The output of `list` subcommand is parsed in search of lines that start with one of the following prefixes: - device= - specifies device path (e.g., "/dev/sde") - label= - specifies optional device label (e.g., "Memory card") - info= - specifies arbitrary text to display next to device (by default "[label]" is used, if label is provided) - mount-point= - specifies a mount point (can be absent or appear more than once) All other lines are ignored. Each `device=` starts a new section describing a device which should include two other possible prefixes. `list` subcommand is assumed to always succeed, while exit code of `mount` and `unmount` is taken into account to determine whether operation was performed successfully. .TP .BI 'lsoptions' type: string list .br default: "" .br scope: local .br Configures ls-like view. item used for columncount fixed number of columns to display or 0 transposed filling view grid by columns rather than by lines .TP .BI 'lsview' type: boolean .br default: false .br scope: local .br When this option is set, directory view will be displayed in multiple columns with file names similar to output of `ls \-x` command. See "ls-like view" section below for format description. This option has no effect if 'millerview' is on. .TP .BI 'milleroptions' type: string list .br default: "lsize:1,csize:1,rsize:1,rpreview:dirs" .br scope: local .br Configures miller view. item default used for lsize:num 0 left column csize:num 1 center column (can't be disabled) rsize:num 0 right column rpreview:str dirs right column *size specifies ratios of columns. Each ratio is in the range from 0 to 100 and values are adjusted to fit the limits. Zero disables a column, but central (main) column can't be disabled. rpreview specifies what file-system objects should be previewed in the right column and takes three values: dirs (only directories), files (only files) or all. Neither value enables preview of parent directory (".."). Example of two-column mode which is useful in combination with :view command: .EX set milleroptions=lsize:1,csize:2 .EE .TP .BI 'millerview' type: boolean .br default: false .br scope: local .br When this option is set, directory view will be displayed in multiple cascading columns. Ignores 'lsview'. .TP .BI 'mintimeoutlen' type: integer .br default: 150 .br The fracture of 'timeoutlen' in milliseconds that is waited between subsequent input polls, which affects various asynchronous operations (detecting changes made by external applications, monitoring background jobs, redrawing UI). There are no strict guarantees, however the higher this value is, the less is CPU load in idle mode. .TP .BI "'mouse'" type: charset .br default: "" .br Contains a sequence of single-character flags: - a - all supported modes (a shorthand for all the rest and future additions) - c - command-line mode (includes navigation mode) - m - menu mode - n - normal mode - q - view mode - v - visual mode .TP .BI 'navoptions' type: string list .br default: "open:dirs" .br Configures behaviour of navigation mode. item default open:str dirs The "open" item specifies what file-system objects should be opened on Enter and can take two values: dirs (only directories) or all. .TP .BI "'number' 'nu'" type: boolean .br default: false .br scope: local .br Print line number in front of each file name when 'lsview' option is turned off. Use 'numberwidth' to control width of line number. Also see 'relativenumber'. .TP .BI "'numberwidth' 'nuw'" type: integer .br default: 4 .br scope: local .br Minimal number of characters for line number field. .TP .BI "'previewoptions'" type: string list .br default: "graphicsdelay:50000" .br Tweaks how previewing is done (in quick view, miller view's column and view mode). item default meaning graphicsdelay:num 0 delay before drawing graphics (microseconds) hardgraphicsclear unset redraw screen to get rid of graphics maxtreedepth:num 0 max number of levels in preview tree toptreestats unset show file counts before the tree graphicsdelay is needed if terminal requires some timeout before it can draw graphics (otherwise it gets lost). hardgraphicsclear seems to be necessary to get rid of sixel graphics in some terminals, where it otherwise lingers. This can cause flicker on the screen due to erasure followed by redrawing. 0 for maxtreedepth means "unlimited", 1 will only show selected directory, 2 adds its children, and so forth. Default value is used when item is missing from the option. .TP .BI "'previewprg'" type: string .br default: "" .br scope: local .br External command to be used instead of preview programs configured via :fileviewer command. Example: .EX " always show git log in preview of files inside some repository au DirEnter '~/git\-repo/**/*' setl previewprg='git log \-\-color \-\- %c 2>&1' .EE .TP .BI 'quickview' type: boolean .br default: false .br Whether quick view (:view) is currently active or not. .TP .BI "'relativenumber' 'rnu'" type: boolean .br default: false .br scope: local .br Print relative line number in front of each file name when 'lsview' option is turned off. Use 'numberwidth' to control width of line number. Various combinations of 'number' and 'relativenumber' lead to such results: nonumber number norelativenumber | first | 1 first | second | 2 second | third | 3 third relativenumber | 1 first | 1 first | 0 second |2 second | 1 third | 1 third .TP .BI "'rulerformat' 'ruf'" type: string .br default: "%l/%S " .br Determines the content of the ruler. Its minimal width is 13 characters and it's right aligned. Following macros are supported: .br %= \- separation point between left and right aligned halves of the line .br %l \- file number .br %L \- total number of files in view (including filtered out ones) .br %x \- number of files excluded by filters .br %0\- \- old name for %x macro .br %P \- percentage through file list (All, Top, xx% or Bot), always 3 in length .br %S \- number of displayed files .br %= \- separation point between left and right align items .br %% \- literal percent sign .br %[ \- designates beginning of an optional block .br %] \- designates end of an optional block .br Percent sign can be followed by optional minimum field width. Add '\-' before minimum field width if you want field to be right aligned. Optional blocks are ignored unless at least one macro inside of them is expanded to a non-empty value. Example: .EX set rulerformat='%2l-%S%[ +%x%]' .EE .TP .BI 'runexec' type: boolean .br default: false .br Run executable file on Enter, l or Right Arrow key. Behaviour of the last two depends on the value of the 'lsview' option. .TP .BI "'scrollbind' 'scb'" type: boolean .br default: false .br When this option is set, vifm will try to keep difference of scrolling positions of two windows constant. .TP .BI "'scrolloff' 'so'" type: integer .br default: 0 .br Minimal number of screen lines to keep above and below the cursor. If you want cursor line to always be in the middle of the view (except at the beginning or end of the file list), set this option to some large value (e.g. 999). .TP .BI "'sessionoptions' 'ssop'" sessionoptions ssop .br type: set .br default: tui,state,tabs,savedirs,dhistory .br An equivalent of 'vifminfo' for sessions, uses the same values. When both options include the same value, data from session file has higher priority (data from vifminfo isn't necessarily completely discarded, instead it's merged with the state of a session the same way state of multiple instances is merged on exit). .TP .BI "'shell' 'sh'" type: string .br default: $SHELL or "/bin/sh" or "cmd" (on MS-Windows) .br Full path to the shell to use to run external commands. On *nix a shell argument can be supplied. .TP .BI "'shellcmdflag' 'shcf'" type: string .br default: "\-c" or "/C" (for cmd.exe on MS-Windows) .br Command-line option used to pass a command to 'shell'. It's used in contexts where command comes from the user. Note that using this option to force interactive mode of the shell is most likely a BAD IDEA. In general interactive host and interactive child shell can't share the same terminal session. You can't even run such a shell in background. Consider writing a wrapper for your shell that preloads aliases and commands without making the shell interactive and ending up using it in a way it was not meant to be used. Note that this option is ignored when 'shell' is set to PowerShell due to the internal use of `\-encodedCommand`. .TP .BI "'shortmess' 'shm'" type: charset .br default: "p" .br Contains a sequence of single-character flags. Each flag enables shortening of some message displayed by vifm in the TUI. Flags: .br - L \- display only last directory in tab line instead of full path. .br - M \- shorten titles in windows of terminal multiplexers created by vifm \ down to file name instead of using full path. .br - T \- truncate status bar messages in the middle if they are too long to fit \ on the command line. "..." will appear in the middle. .br - p \- use tilde shortening in view titles. .TP .BI "'showtabline' 'stal'" type: enumeration .br default: multiple .br Specifies when tab line should be displayed. Possible values: - never - never display tab line - multiple - show tab line only when there are at least two tabs - always - display tab line always Alternatively 0, 1 and 2 Vim-like values are also accepted and correspond to "never", "multiple" and "always" respectively. .TP .TP .BI 'sizefmt' type: string list .br default: "units:iec" .br Configures the way size is formatted in human-friendly way. item value meaning units: iec Use 1024 byte units (K or KiB, etc.). See 'iec' option. si Use 1000 byte units (KB, etc.). precision: i > 0 How many fraction digits to consider. {not set} Precision of 1 for integer part < 10, 0 otherwise (provides old behaviour). space {present} Insert space before unit symbols. This is the default. nospace {present} Do not insert space before unit symbols. Numbers are rounded from zero. Trailing zeros are dropped. Example: .EX set sizefmt=units:iec,precision:2,nospace .EE .TP .BI 'slowfs' type: string list .br default: "" .br only for *nix .br A list of mounter fs name beginnings (first column in /etc/mtab or /proc/mounts) or paths prefixes for fs/directories that work too slow for you. This option can be used to stop vifm from making some requests to particular kinds of file systems that can slow down file browsing. Currently this means don't check if directory has changed, skip check if target of symbolic links exists, assume that link target located on slow fs to be a directory (allows entering directories and navigating to files via gf). If you set the option to "*", it means all the systems are considered slow (useful for cygwin, where all the checks might render vifm very slow if there are network mounts). Example for autofs root /mnt/autofs: .EX set slowfs+=/mnt/autofs .EE .TP .BI "'smartcase' 'scs'" type: boolean .br default: false .br Overrides the ignorecase option if a pattern contains at least one upper case character. Only used when 'ignorecase' option is enabled. .TP .BI 'sort' type: string list .br default: +name on *nix and +iname on Windows .br scope: local .br Sets list of sorting keys (first item is primary key, second is secondary key, etc.): [+\-]ext \- extension of files and directories [+\-]fileext \- extension of files only [+\-]name \- name (including extension) [+\-]iname \- name (including extension, ignores case) [+\-]type \- file type (dir/reg/exe/link/char/block/sock/fifo) [+\-]dir \- directory grouping (directory < file) [+\-]gid \- group id (*nix only) [+\-]gname \- group name (*nix only) [+\-]mode \- file type derived from its mode (*nix only) [+\-]perms \- permissions string (*nix only) [+\-]uid \- owner id (*nix only) [+\-]uname \- owner name (*nix only) [+\-]nlinks \- number of hard links (*nix only) [+\-]inode \- inode number (*nix only) [+\-]size \- size [+\-]nitems \- number of items in a directory (zero for files) [+\-]groups \- groups extracted via regexps from 'sortgroups' [+\-]target \- symbolic link target (empty for other file types) [+\-]atime \- time accessed (e.g., read, executed) [+\-]ctime \- time changed (changes in metadata, like mode) [+\-]mtime \- time modified (when file contents is changed) Note: look for st_atime, st_ctime and st_mtime in "man 2 stat" for more information on time keys. \(aq+\(aq means ascending sort for this key, and '\-' means descending sort. "dir" key is somewhat similar in this regard but it's added implicitly: when "dir" is not specified, sorting behaves as if it was the first key in the list. That's why if one wants sorting algorithm to mix directories and files, "dir" should be appended to sorting option, for example like this: .EX set sort+=dir .EE or .EX set sort=-size,dir .EE Value of the option is checked to include dir key and default sorting key (name on *nix, iname on Windows). Here is what happens if one of them is missing: .RS .RS 2 .IP \- 2 type key is added at the beginning; .IP \- 2 default key is added at the end; .RE .RE .RS all other keys are left untouched (at most they are moved). This option also changes view columns according to primary sorting key set, unless 'viewcolumns' option is not empty. .RE .TP .BI 'sortnumbers' type: boolean .br default: false .br scope: local .br Natural sort of (version) numbers within text. .TP .BI 'sortgroups' type: string .br default: "" .br scope: local .br Sets comma-separated list of regular expressions for group type of sorting. Double the comma to insert it literally. The regular expressions are used to extract substrings of file names to serve as keys for sorting. It is essentially a way to ignore uninteresting parts of file names during sorting by name. Each expression should contain at least one group or its value will be considered to be always empty. Also, only the first match of regular expression is processed. The first group divides list of files into sub-groups, each of which is then sorted by substrings extracted using second regular expression and so on recursively. Example: .EX set sortgroups=-(todo|done).* .EE this would group files with "\-done" in their names and files with "\-todo" separately. On ascending sorting, group containing "\-done" would appear before the other one. .TP .BI 'sortorder' type: enumeration .br default: ascending .br Sets sort order for primary key: ascending, descending. .TP .BI "'statusline' 'stl'" type: string .br default: "" .br Determines the content of the status line (the line right above command-line). Empty string means use same format like in previous versions. Following macros are supported: .RS .IP \- 2 %N \- line break (increases height of the status line accordingly), ignores %[ %] blocks .IP \- 2 %t \- file name (considering value of the 'classify' option) .IP \- 2 %T - symbolic link target (empty for other filetypes) .IP \- 2 %f - file name relative to current directory (considers 'classify') .IP \- 2 %A \- file attributes (permissions on *nix or properties on Windows) .IP \- 2 %o \- file permissions in octal form on *nix (nothing on Windows) .IP \- 2 %u \- user name or uid (if it cannot be resolved) .IP \- 2 %g \- group name or gid (if it cannot be resolved) .IP \- 2 %s \- file size in human readable format .IP \- 2 %E \- size of selected files in human readable format, same as %s when no files are selected, except that it will never show size of ../ in visual mode, since it cannot be selected .IP \- 2 %d \- file modification date (uses 'timefmt' option) .IP \- 2 %D \- path of the other pane for single-pane layout .IP \- 2 %a - amount of free space available on current FS .IP \- 2 %c - size of current FS .IP \- 2 %z - short tips/tricks/hints that chosen randomly after one minute period .IP \- 2 %{} - evaluate arbitrary vifm expression '', e.g. '&sort' or `expand('%d')`; a raw `}` can be inserted as `\\}` (mind that the slash doesn't need to be doubled to be inserted literally) .IP \- 2 %* - resets or applies one of User1..User20 highlight groups; reset happens when width field is 0 or not specified, one of the groups gets picked when width field is in the range from 1 to 20 .IP \- 2 all 'rulerformat' macros .RE .RS Percent sign can be followed by optional minimum field width. Add '\-' before minimum field width if you want field to be right aligned. On Windows file properties include the following flags (upper case means flag is on): .br A \- archive .br H \- hidden .br I \- content isn't indexed .br R \- readonly .br S \- system .br C \- compressed .br D \- directory .br E \- encrypted .br P \- reparse point (e.g. symbolic link) .br Z \- sparse file .RE .RS Example without colors: .EX set statusline=" %t%= %A %10u:%\-7g %15s %20d %{&sort} " .EE Example with colors: .EX highlight User1 ctermbg=yellow highlight User2 ctermbg=blue ctermfg=white cterm=bold set statusline="%1* %-26t %2* %= %1* %A %2* %7u:%-7g %1* %-5s %2* %d " .EE .RE .TP .BI 'suggestoptions' type: string list .br default: .br Controls when, for what and how suggestions are displayed. The following values are available: - normal - in normal mode; - visual - in visual mode; - view - in view mode; - otherpane - use other pane to display suggestions, when available; - delay[:num] - display suggestions after a small delay (to do not annoy \ if you just want to type a fast shortcut consisting of multiple keys), num \ specifies the delay in ms (500 by default), 'timeoutlen' at most; - keys - include shortcuts (commands and selectors); - foldsubkeys - fold multiple keys with common prefix; - marks - include marks; - registers[:num] - include registers, at most num files (5 by default). .TP .BI 'syncregs' type: string .br default: "" .br Specifies identifier of group of instances that share registers among each other. When several instances of vifm have this option set to identical value, they automatically synchronize contents of their registers on operations which use them. .TP .BI 'syscalls' type: boolean .br default: false .br When disabled, vifm will rely on external applications to perform file-system operations, otherwise system calls are used instead (much faster and supports progress tracking). The option should eventually be removed. Mostly *nix-like systems are affected. .TP .BI 'tablabel' type: string .br default: "" .br When non-empty and 'tabline' isn't set, determines format of the main part of a single tab's label. When empty, tab label is set to either tab name for named tabs or to view title (usually current path) for unnamed tabs. The following macros can appear in the format (see below for what a flag is): .RS .IP \- 2 %C \- flag of a current tab .IP \- 2 %N \- number of the tab .IP \- 2 %T \- flag of a tree mode .IP \- 2 %c \- description of a custom view .IP \- 2 %n \- name of the tab .IP \- 2 %p \- path of the view (handles filename modifiers) .IP \- 2 %t \- title of the view (affected by 'shortmess' flags) .IP \- 2 %% \- literal percent sign .IP \- 2 %[ \- designates beginning of an optional block .IP \- 2 %] \- designates end of an optional block .IP \- 2 %*, %0* \- resets highlighting .IP \- 2 %1*-%20* \- applies one of User1..User20 highlight groups .RE .RS In global tabs the view in bullets above refers to currently active view of that tab. Flag macros are a special kind of macros that always expand to an empty value and are meant to be used inside optional blocks to control their visibility. Optional blocks are ignored unless at least one macro inside of them is expanded to a non-empty value or is a set flag macro. .EX " %[(%n)%] -- optional name of the tab " %[ -- optional description of the view " %[%T{tree}%] -- mark of tree mode " %[{%c}%] -- description of custom view " @ -- just an extra separator before the path ' %] " %p:t -- tail part of view's location set tablabel=%[(%n)%]%[%[%T{tree}%]%[{%c}%]@%]%p:t .EE .RE .TP .BI "'tabline' 'tal'" type: string .br default: "" .br When non-empty, determines format of the tab line. Note that mouse clicks won't be handled when this option is non-empty. The following macros can appear in the format: .RS .IP \- 2 %*, %0* \- resets highlighting .IP \- 2 %1*-%20* \- applies one of User1..User20 highlight groups .RE .TP .BI 'tabprefix' type: string .br default: "[%N:" .br Determines prefix of a tab's label. Formatting is done as for 'tablabel' option. .TP .BI 'tabscope' type: enumeration .br default: global .br Picks style of tabs, which defines what a single tab contains. Possible values: - global - tab describes complete UI of two views and how they are arranged - pane - tab is located "inside" a pane and manages it and quick view .TP .BI "'tabstop' 'ts'" type: integer .br default: value from curses library .br Number of spaces that a Tab in the file counts for. .TP .BI 'tabsuffix' type: string .br default: "]" .br Determines suffix of a tab's label. Formatting is done as for 'tablabel' option. .TP .BI 'timefmt' type: string .br default: "%m/%d %H:%M" .br Format of time in file list. See "man 1 date" or "man 3 strftime" for details. .TP .BI "'timeoutlen' 'tm'" type: integer .br default: 1000 .br The time in milliseconds that is waited for a mapped key in case of already typed key sequence is ambiguous. .TP .BI 'title' type: boolean .br default: true when title can be restored, false otherwise .br When enabled, title of the terminal or terminal multiplexer's window is updated according to current location. Because not all terminals support setting title, this works only if `$TERM` value matches one of the following conditions: - equals "xterm" or starts with "xterm-" - equals "rxvt" or starts with "rxvt-" - equals "screen" or starts with "screen-" - equals "aterm" - equals "Eterm" .TP .BI 'trash' type: boolean .br default: true .br Use trash directory. See "Trash directory" section below. .TP .BI 'trashdir' type: string .br default: on *nix: "%r/.vifm-Trash-%u,$XDG_DATA_HOME/vifm/Trash,%r/.vifm-Trash" or "%r/.vifm-Trash-%u,$VIFM/Trash,%r/.vifm-Trash" on Windows: "%r/.vifm-Trash,$XDG_DATA_HOME/vifm/Trash" or "%r/.vifm-Trash,$VIFM/vifm/Trash" .br List of trash directory path specifications, separated with commas. Each list item either defines an absolute path to trash directory or a path relative to a mount point root when list element starts with "%r/". Value of the option can contain environment variables (of form "$envname"), which will be expanded (prepend $ with a slash to prevent expansion). Environment variables are expanded when the option is set. On *nix, if element ends with "%u", the mark is replaced with real user ID and permissions are set so that only that owner is able to use it. .br .B Note that even this setup is not completely secure when combined with "%r/" and it's overall safer to keep files in home directory, but that implies cost of copying files between partitions. When new file gets cut (deleted) vifm traverses each element of the option in the order of their appearance and uses first trash directory that it was able to create or that is already writable. Default value tries to use trash directory per mount point and falls back to trash common trash directory on failure. Will attempt to create the directory if it does not exist. See "Trash directory" section below. .TP .BI "'tuioptions' 'to'" type: charset .br default: "psv" .br Each flag configures some aspect of TUI appearance. The flags are: .br p \- when included: * file list inside a pane gets additional single character padding on left \ and right sides; * quick view and view mode get single character padding. .br s \- when included, left and right borders (side borders, hence "s" character) are visible. .br u \- use Unicode characters in the TUI (Unicode ellipsis instead of "..."). .br v \- vary width of vertical middle border to equalize view sizes. Each pane title contains the path of the listed directory. If too large, the path is truncated on the left for the active pane and on the right for the other pane. This can be modified with: l \- truncation is always on the left. .br r \- truncation is always on the right. .TP .BI 'uioptions' type: set .br default: .br Tweaks UI behaviour. The following values are available: \- iodetails \- show I/O progress details dialog automatically instead of displaying progress on statusbar until user presses "i" to see the dialog. .TP .BI "'undolevels' 'ul'" type: integer .br default: 100 .br Maximum number of changes that can be undone. Note that here single file operation is used as a unit, not operation, i.e. deletion of 101 files will exceed default limit. .TP .BI 'vicmd' type: string .br default: "vim" .br Command used to edit files in various contexts. Ampersand sign at the end (regardless whether it's preceded by space or not) means backgrounding of command. Background flag is ignored in certain context where vifm waits for the editor to finish. Such contexts include any command that spawns editor to change list of file names or a command, with :rename being one example. `\-f` is also appended to prevent forking in such cases, so the command needs to handle the flag. Additionally `+{num}` and `+'call cursor()'` arguments are used to position cursor when location is known. .TP .BI 'viewcolumns' type: string .br default: "" .br scope: local .br Format string containing list of columns in the view. When this option is empty, view columns to show are chosen automatically using sorting keys (see 'sort') as a base. Value of this option is ignored if 'lsview' is set. See "Column view" section below for format description. An example of setting the options for both panes (note :windo command): .EX windo set viewcolumns=-{name}..,6{size},11{perms} .EE .TP .BI 'vixcmd' type: string .br default: value of 'vicmd' .br Same as 'vicmd', but takes precedence over it when running inside a graphical environment. .TP .BI 'vifminfo' type: set .br default: bookmarks,bmarks .br Controls what will be saved in the $VIFM/vifminfo file. bmarks \- named bookmarks (see :bmark command) bookmarks \- marks, except for special ones like '< and '> cs \- primary color scheme dirstack \- directory stack (overwrites previous stack, unless stack of current instance is empty) registers \- registers content savedirs \- last visited directory state \- file name and dot filters and terminal multiplexers integration state tabs \- global or pane tabs tui \- state of the user interface (sorting, number of windows, quick view state, active view) chistory \- command line history dhistory \- directory history ehistory \- expression register history (see description of Ctrl+R = in command-line mode) fhistory \- history of local filter (see description of the "=" normal mode command) mchistory \- command line history of menus phistory \- prompt history shistory \- search history (/ and ? commands) commands \- user defined commands (see :command description) (obsolete) filetypes \- associated programs and viewers (obsolete) options \- all options that can be set with the :set command (obsolete) .TP .BI 'vimhelp' type: boolean .br default: false .br Use vim help format. .TP .BI 'wildinc' type: string .br default: "" .br A comma-separated list of globs which defines what should be completed incrementally. Currently, it can only be :commands which are matched with the colon in front of their name. For such commands completion is always active and is displayed even if there is only one completion item. Examples: .EX " for all :commands set wildinc=:* " only for these two set wildinc=:wingo,:bmgo .EE See "Patterns" and "Globs" sections for more information on syntax. .TP .BI "'wildmenu' 'wmnu'" type: boolean .br default: false .br Controls whether possible matches of completion will be shown above the command line. .TP .BI 'wildstyle' type: enumeration .br default: bar .br Picks presentation style of wild menu. Possible values: - bar - one-line with left-to-right cursor - popup - multi-line with top-to-bottom cursor .TP .BI 'wordchars' type: string list .br default: "1-8,14-31,33-255" (that is all non-whitespace characters) .br Specifies which characters in command-line mode should be considered as part of a word. Value of the option is comma-separated list of ranges. If both endpoints of a range match, single endpoint is enough (e.g. "a" = "a-a"). Both endpoints are inclusive. There are two accepted forms: character representing itself or number encoding character according to ASCII table. In case of ambiguous characters (dash, comma, digit) use numeric form. Accepted characters are in the range from 0 to 255. Any Unicode character with code greater than 255 is considered to be part of a word. The option affects Alt-D, Alt-B and Alt-F, but not Ctrl-W. This is intentionally to allow two use cases: \- Moving by WORDS and deletion by words. \- Moving by words and deletion by WORDS. To get the latter use the following mapping: .EX cnoremap .EE Also used for abbreviations. .TP .BI 'wrap' type: boolean .br default: true .br Controls whether to wrap text in quick view. .TP .BI "'wrapscan' 'ws'" type: boolean .br default: true .br Searches wrap around end of the list. .\" --------------------------------------------------------------------------- .SH Mappings .\" --------------------------------------------------------------------------- A user mapping like `nnoremap lhs rhs` defines a substitution of the left-hand-side (LHS) with the right-hand-side (RHS) in the input stream. A regular mapping (without "nore" in :command's name) expands recognized sequences in the RHS, while "*noremap" mapping always interprets RHS as if no user mappings were defined and each key has its builtin meaning. In most cases you want to use noremap variant and if your RHS includes LHS, only noremap variant will work because recursion in a mapping is not allowed. In order to define a mapping determine in which mode you want to activate it and use an appropriate "*noremap" :command (e.g., :nnoremap for a normal mode mapping). RHS doesn't have to limit itself to the mode in which the mapping was started and can span multiple modes. .B Map arguments LHS of mappings can be preceded by arguments which take the form of special sequences: .TP .BI Postpone UI updates until RHS is completely processed. .TP .BI In case of builtin mapping causing conflict for a user-defined mapping (e.g., `t` builtin to a partially typed `ta` user-defined mapping), ignore the builtin mapping and wait for input indefinitely as opposed to default behaviour of triggering the builtin mapping after a delay defined by 'timeoutlen'. Example: .EX nnoremap tw :set wrap! nnoremap tn :set number! nnoremap tr :set relativenumber! .EE .LP .B Special sequences Since it's not easy to enter special characters there are several special sequences that can be used in place of them. They are: .TP .BI Enter key. .TP .BI Escape key. .TP .BI Space key. .TP .BI Less-than character (<). .TP .BI provides a way to disable a mapping (by mapping it to ). .TP .BI Backspace key (see key conflict description below). .TP .BI " " Tabulation and Shift+Tabulation keys. .TP .BI " " Home/End. .TP .BI " " Arrow keys. .TP .BI " " PageUp/PageDown. .TP .BI " " Delete key. and mean different codes, but is more common. .TP .BI "" Insert key. .TP .BI " " .RE .BI " " .br .BI " " .br .BI " " .RS 8 Shift + one of the keys from above, if terminal and its terminfo supports it. .RE .TP .BI ",,...,,,,,," Control + some key (see key conflict description below). .TP .BI "" "" " {only for *nix}" .br Control + Space. .TP .BI ",,...," .RE .BI ",,...," .br .BI ",,...," "" " {only for *nix}" .br .BI ",,...," "" " {only for *nix}" .RS 8 Alt + some key. .RE .TP .BI ",,...," "" " {only for *nix}" .RE .BI ",,...," "" " {only for *nix}" .br .BI ",,...," "" " {only for *nix}" .br .BI ",,...," "" " {only for *nix}" .RS 8 Alt + Shift + some key. .RE .TP .BI ",,...," "" " {only for *nix}" .RE .BI ",,...," "" " {only for *nix}" .RS 8 Alt + Ctrl + some key. .RE .TP .BI " \- " functional keys. These also correspond to keys like and can be used in their place. .TP .BI " \- " .br functional keys with Control key pressed. .TP .BI " \- , \- " .br functional keys with Alt key pressed. .TP .BI " \- " .br functional keys with Shift key pressed. .LP Note that whether and how functional keys work might depend on the terminal and corresponding terminfo record. .LP Note that due to the way terminals process their input, several keyboard keys might be mapped to single key code, for example: .RS 2 .IP \- 2 and ; .IP \- 2 and ; .IP \- 2 and and ; .IP \- 2 etc. .RE Most of the time they are defined consistently and don't cause surprises, but and are treated differently in different environments (although they match each other all the time), that's why they correspond to different keys in vifm. As a consequence, if you map or be sure to repeat the mapping with the other one so that it works in all environments. Alternatively, provide your mapping in one form and add one of the following: .EX " if mappings with in the LHS work map " if mappings with in the LHS work map .EE Also sometimes neither of them might work and it's key which corresponds to your backspace (don't mind the name). .B Whitespace vifm removes whitespace characters at the beginning and end of commands. That's why you may want to use at the end of rhs in mappings. For example: .EX cmap man .EE will put "man " in line when you hit the key in the command line mode. .\" --------------------------------------------------------------------------- .SH Expression syntax .\" --------------------------------------------------------------------------- Supported expressions is a subset of what VimL provides. Expression syntax summary, from least to most significant: expr1 expr2 expr2 || expr2 .. logical OR expr2 expr3 expr3 && expr3 .. logical AND expr3 expr4 expr4 == expr4 equal expr4 != expr4 not equal expr4 > expr4 greater than expr4 >= expr4 greater than or equal expr4 < expr4 smaller than expr4 <= expr4 smaller than or equal expr4 expr5 expr5 + expr5 .. number addition expr5 - expr5 .. number subtraction expr5 expr6 expr6 . expr6 .. string concatenation expr6 expr7 \- expr6 unary minus + expr6 unary plus ! expr6 logical NOT expr7 number number constant "string" string constant, \\ is special 'string' string constant, ' is doubled &option option value $VAR environment variable g:var global variable v:var builtin variable (read-only) function(expr1, ...) function call (expr1) nested expression ".." indicates that the operations in this level can be concatenated. expr1 .br ----- .br expr2 || expr2 Arguments are converted to numbers before evaluation. Result is non-zero if at least one of arguments is non-zero. It's right associative and with short-circuiting, so sub-expressions are evaluated from left to right until result of whole expression is determined (i.e., until first non-zero) or end of the expression. expr2 .br ----- .br expr3 && expr3 Arguments are converted to numbers before evaluation. Result is non-zero only if both arguments are non-zero. It's right associative and with short-circuiting, so sub-expressions are evaluated from left to right until result of whole expression is determined (i.e., until first zero) or end of the expression. expr3 .br ----- .br expr4 {cmp} expr4 Compare two expr4 expressions, resulting in a 0 if it evaluates to false or 1 if it evaluates to true. equal == .br not equal != .br greater than > .br greater than or equal >= .br smaller than < .br smaller than or equal <= Examples: .EX 'a' == 'a' == 1 'a' > 'b' == 1 'a' == 'b' == 0 '2' > 'b' == 0 2 > 'b' == 1 2 > '1b' == 1 2 > '9b' == 0 \-1 == \-'1' == 1 0 == '\-\-1' == 1 .EE expr4 .br ----- .br expr5 + expr5 .. number addition expr5 - expr5 .. number subtraction Examples: .EX 1 + 3 - 3 == 1 1 + '2' == 3 .EE expr5 .br ----- .br expr6 . expr6 .. string concatenation Examples: .EX 'a' . 'b' == 'ab' 'aaa' . '' . 'c' == 'aaac' .EE expr6 .br ----- .br \- expr6 unary minus .br + expr6 unary plus .br ! expr6 logical NOT For '\-' the sign of the number is changed. .br For '+' the number is unchanged. .br For '!' non-zero becomes zero, zero becomes one. A String will be converted to a Number first. These operations can be repeated and mixed. Examples: .EX \-\-9 == 9 \-\-\-9 == \-9 \-+9 == 9 !\-9 == 0 !'' == 1 !'x' == 0 !!9 == 1 .EE expr7 .br ----- .br number number constant .br ----- .br Decimal number. Examples: .EX 0 == 0 0000 == 0 01 == 1 123 == 123 10000 == 10000 .EE string .br ------ .br "string" string constant Note that double quotes are used. A string constant accepts these special characters: .br \\b backspace .br \\e escape .br \\n newline .br \\r return .br \\t tab .br \\\\ backslash .br \\" double quote .br Examples: .EX "\\"Hello,\\tWorld!\\"" "Hi,\\nthere!" .EE literal-string .br -------------- .br \(aqstring\(aq string constant Note that single quotes are used. This string is taken as it is. No backslashes are removed or have a special meaning. The only exception is that two quotes stand for one quote. Examples: .EX 'All\\slashes\\are\\saved.' 'This string contains doubled single quotes ''here''' .EE option .br ------ .br &option option value (local one is preferred, if exists) &g:option global option value &l:option local option value Examples: .EX echo 'Terminal size: '.&columns.'x'.&lines if &columns > 100 .EE Any valid option name can be used here (note that "all" in ":set all" is a pseudo option). See ":set options" section above. environment variable .br -------------------- .br $VAR environment variable The String value of any environment variable. When it is not defined, the result is an empty string. Examples: .EX 'This is my $PATH env: ' . $PATH 'vifmrc at ' . $MYVIFMRC . ' is used.' .EE global variable .br --------------- .br g:var global variable A typed storage of data for use in scripting. Can be created/removed dynamically (via :let and :unlet) and used in expressions. builtin variable .br ---------------- .br v:var builtin variable Information exposed by vifm for use in scripting. Such variables are predefined and read-only, but not necessarily constant. .B "v:count" .br count passed to : command, 0 by default. Can be used in mappings to pass\ the count to a different command. .br .B "v:count1" .br same as v:count, but 1 by default. .br .B "v:jobcount" .br number of active jobs (as can be seen in the :jobs menu). .br .B "v:session" .br name of the current session or empty string. .br .B "v:servername" .br See below. .br .B "v:version" .br version of the application as an integer. Version `x.y.z` becomes number `x*100*100 + y*100 + z`, examples: - v0.14 (that is v0.14.0) is 1400 (leading zeroes omitted) - v1.0.2 is 10002 Release candidates aren't real releases, they report the number of a corresponding release. .br function call .br ------------- .br function(expr1, ...) function call See "Functions" section below. Examples: .EX "'" . filetype('.') . "'" filetype('.') == 'reg' .EE expression nesting .br ------------------ .br (expr1) nested expression Groups any other expression of arbitrary complexity enforcing order in which operators are applied. .\" --------------------------------------------------------------------------- .SH Functions .\" --------------------------------------------------------------------------- USAGE RESULT DESCRIPTION chooseopt({opt}) String Queries choose parameters passed on startup. .br escape({string}, {chars}) String Returns {string} after escaping {chars} in it. .br executable({expr}) Integer Checks whether {expr} command available. .br expand({expr}) String Expands special keywords in {expr}. .br extcached({cache}, {path}, {extcmd}) String Caches output of {extcmd} per {cache} and {path} combination. .br filereadable({path}) Integer Checks whether {expr} points to a non-directory that can be read. .br filetype({file} [, {resolve}]) String Returns file type from position/path. .br fnameescape({expr}) String Escapes {expr} for use in a :command. .br getpanetype() String Returns type of current pane. .br has({property}) Integer Checks whether instance has {property}. .br input({prompt} [, {initial} [, {completion}]]) .br String Prompts user for an input on command-line. .br layoutis({type}) Integer Checks whether layout is of type {type}. .br paneisat({loc}) Integer Checks whether current pane is at {loc}. .br selected() Integer Returns number of currently selected files. .br system({command}) String Executes shell command and returns its output. .br tabpagenr([{arg}]) Integer Returns number of current or last tab. .br term({command}) String Like system(), but for interactive commands. .BI chooseopt({opt}) Retrieves values of options related to file choosing. {opt} can be one of: files returns argument of \-\-choose-files or empty string dir returns argument of \-\-choose-dir or empty string cmd returns argument of \-\-on-choose or empty string delimiter returns argument of \-\-delimiter or the default one (\\n) .BI escape({string}, {chars}) Escapes all occurrences of {chars} in the {string} by prepending slash (`\`) to them. Note that the slash itself is not escaped unless it appears in {chars}. .BI executable({expr}) If {expr} is absolute or relative path, checks whether path destination exists and refers to an executable, otherwise checks whether command named {expr} is present in directories listed in $PATH. Checks for various executable extensions on Windows. Returns boolean value describing result of the check. Example: .EX " use custom default viewer script if it's available and installed " in predefined system directory, otherwise try to find it elsewhere if executable('/usr/local/bin/defviewer') fileview * /usr/local/bin/defviewer %c else if executable('defviewer') fileview * defviewer %c endif endif .EE .BI expand({expr}) Expands environment variables and macros in {expr} (in this order). Returns a string. See "Command macros" section above. .br Examples: .EX " percent sign :echo expand('%%') " the last part of directory name of the other pane :echo expand('%D:t') " $PATH environment variable (same as `:echo $PATH`) :echo expand('$PATH') " full path to the current file with backslashes :echo expand('%c:p:gs!/!\\!') .EE .BI "extcached({cache}, {path}, {extcmd})" Caches value of {extcmd} external command automatically updating it as necessary based on monitoring change date of a {path}. The cache is invalidated when file or its meta-data is updated. A single path can have multiple caches associated with it. {path} value is normalized, but symbolic links in it aren't resolved. Example: .EX " display number and size of blocks actually used by a file or directory set statusline+=" Uses: %{ extcached('uses', \\ expand('%c'), \\ expand('stat \-\-format=%%bx%%B %c')) }" .EE .BI filereadable({path}) Checks whether {path} exists and refers to a non-directory entry and its permissions allow reading. Returns boolean value describing result of the check. .BI "filetype({file} [, {resolve}])" Checks type of a view's entry or of a file specified by its path. Parameter {file} can be of the following forms: \- '.' to get type of file under the cursor in the active pane \- numerical value base 1 to get type of file on specified line number (only \if there are no charactes other than "+-0123456789") \- a path (prepend "./" to force interpretation of a number or '.' as a path) Optional parameter {resolve} is treated as a boolean and specifies whether symbolic links should be resolved. The result is a string, which represents file type and is one of the list: exe executables reg regular files link symbolic links broken broken symbolic links (appears only when resolving) dir directories char character devices block block devices fifo pipes sock *nix domain sockets ? unknown file type (should not normally happen) or non-file (pseudo-entries in compare view) The result can also be an empty string in case of invalid argument. .BI fnameescape({expr}) Escapes parameter to make it suitable for use as an argument of a :command. List of escaped characters includes %, which is doubled. Usage example: .EX " navigate to most recently modified file in current directory execute 'goto' fnameescape(system('ls \-t | head \-1')) .EE .BI getpanetype() Retrieves string describing type of current pane. Possible return values: regular regular file listing of some directory custom custom file list (%u) very-custom very custom file list (%U) tree tree view compare compare view .BI has({property}) Allows examining internal parameters from scripts to e.g. figure out environment in which application is running. Returns 1 if property is true/present, otherwise 0 is returned. Currently the following properties are supported (anything else will yield 0): unix runs in *nix-like environment (including Cygwin) win runs on Windows #* whether particular Lua handler exists .br Usage example: .EX " skip user/group on Windows if !has('win') let $RIGHTS = '%10u:%-7g ' endif execute 'set' 'statusline=" %t%= %A '.$RIGHTS.'%15E %20d "' .EE .BI "input({prompt} [, {initial} [, {completion}]])" Creates a command-line prompt to obtain user's input. Initial value can be supplied as an optional second parameter, otherwise empty string is used. Optional third parameter specifies kind of completion, which can be one of: dir paths to directories file paths to files and directories "" (empty string, default) no completion Note that behaviour differs from Vim where executing a mapping like .EX nnoremap j :echo input('text: ')input .EE leaves you in a prompt mode with "input" typed in. Vifm will wait for leaving the prompt and then continue executing the mapping. Usage example: .EX nnoremap ,m : let $DIR_NAME = input('mkdir: ', '', 'dir') \\| if $DIR_NAME != '' \\| execute 'mkdir' fnameescape($DIR_NAME) \\| endif .EE .BI layoutis({type}) Checks whether current interface layout is {type} or not, where {type} can be: only single-pane mode split double-pane mode (either vertical or horizontal split) vsplit vertical split (left and right panes) hsplit horizontal split (top and bottom panes) .br Usage example: .EX " automatically split vertically before enabling preview :nnoremap w :if layoutis('only') | vsplit | endif | view! .EE .BI paneisat({loc}) Checks whether position of active pane in current layout matches one of the following locations: top pane reaches top border bottom pane reaches bottom border left pane reaches left border right pane reaches right border .br .BI selected() Retrieves number of files selected in the active pane. .BI system({command}) Runs the command in shell and returns its output (joined standard output and standard error streams). All trailing newline characters are stripped to allow easy appending to command output. Ctrl-C should interrupt the command. Use this function to consume output of external commands that don't require user interaction and term() for interactive commands that make use of terminal and are capable of handling stream redirection. Usage example: .EX " command to enter .git/ directory of git-repository (when ran inside one) command! cdgit :execute 'cd' fnameescape(system('git rev-parse \-\-git-dir')) .EE .BI tabpagenr([{arg}]) When called without arguments returns number of current tab page base one. When called with "$" as an argument returns number of the last tab page base one, which is the same as number of tabs. .BI term({command}) Same as system() function, but user interface is shutdown during the execution of the command, which makes sure that external interactive applications won't affect the way terminal is used by vifm. Usage example: .EX " command to change directory by picking it via fzf command! fzfcd :execute 'cd' \\ fnameescape(term('find \-type d | fzf 2> /dev/tty')) .EE .\" --------------------------------------------------------------------------- .SH Menus and dialogs .\" --------------------------------------------------------------------------- When navigating to some path from a menu there is a difference in the end location depending on whether the path has a trailing slash. Files normally don't have trailing slashes so "file/" won't work. In case of directories there are two options: navigate to a directory or inside of it. To allow both use cases, the first action is taken for "dir" and the second one for "dir/". .B Menu commands .BI :range navigate to a menu line. .TP .BI " :chistory" .TP .BI :chi[story] display menu of saved menus. See "Menus and dialogs" section for controls, also see "Menus history" section. .TP .BI " :colder" .TP .BI :col[der] load an older navigation menu if there is one. See also "Menus history" section. .TP .BI " :cnewer" .TP .BI :cnew[er] load a newer navigation menu if there is one. See also "Menus history" section. .TP .BI " :find" .TP .BI :fin[d] the behaviour matches that of non-menu :find except that no range is accepted. If active view contained selection before entering menu mode, the command takes it into account. .TP .BI " :grep" .TP .BI :gr[ep] the behaviour matches that of non-menu :grep except that no range is accepted. If active view contained selection before entering menu mode, the command takes it into account. .LP .B :exi[t][!] .br .B :q[uit][!] .br .B :x[it][!] .RS leave the menu mode. .RE .TP .BI :noh[lsearch] reset search match highlighting. .TP .BI ":w[rite] {path}" write all menu lines into the file specified by {path}. .LP .B Common keys of all menus and dialogs .TP .B "j, Ctrl-N" move the cursor down. .TP .B "k, Ctrl-P" move the cursor up. .TP .B "Enter" select and usually close menu/dialog. .TP .B "Ctrl-L" redraw menu/dialog. .br .LP .B Escape, Ctrl-C .br .B ZZ, ZQ .br .B q .RS close menu/dialog. .RE .TP .B Common keys of all menus .LP .B "Ctrl-B, Ctrl-F" .br .B "Ctrl-D, Ctrl-U" .br .B "Ctrl-E, Ctrl-Y" .br .B "/, ?" .br .B "n, N" .br .B "[count]G, [count]gg" .br .B "H, M, L" .br .B "zb, zt, zz" .RS these keys have the same meaning as in normal mode. .RE .TP .B [count]zh scroll menu items [count] characters (1 by default) to the right. .TP .B [count]zl scroll menu items [count] characters (1 by default) to the left. .TP .B zH scroll menu items half the screen width to the right. .TP .B zL scroll menu items half the screen width to the left. .LP .TP .B : enter command line mode for menus. .TP .B b interpret content of the menu as a list of paths and use it to create custom view in place of the previously active pane. See "Custom views" section below. .TP .B B same as above, but create an unsorted view. .TP .B v load menu content into quickfix list of an editor (Vim compatible by assumption) or, if the list doesn't have separators after file names (colons), open each line as a file name. .LP .B Navigation menus .br This applies to the following menus: - :bmarks, :bmgo - :find - :grep - :locate - user menu with navigation (%M macro) .TP .B gf navigate previously active view to currently selected item. Leaves menu mode except for :grep menu. Pressing Enter or l has the same effect. .TP .B e open selected path in an editor, stays in menu mode. .TP .B c leave menu preserving file selection and insert file name after :! in command-line mode. Does nothing in :bmarks and :bmgo. .LP Note that each of these menus can have additional keys, see below. .B History menus (:history *) .br .B ========================== .TP .B Command-line history menu .TP .B "Enter, l" execute the item as a command-line command, search query or local filter. .TP .B c leave the menu preserving file selection and insert the item into the command-line of appropriate kind. .LP .B Directory history menu .TP .B "Enter, l" navigate into the selected directory. .TP .B Menu commands history menu .TP .B "Enter, l" execute command without leaving the menu. .TP .B c insert menu item into command-line for editing. .LP .B Other menus .br .B =========== .B Apropos (:apropos) menu .TP .B "Enter, l" run man on a given topic. Menu won't be closed automatically to allow viewing several pages one by one. .LP .B Bookmarks (:bmarks, :bmgo) menu .TP .B "Enter, l" navigate to the selected bookmark. .TP .B dd remove bookmark under the cursor. .LP See above for "gf" and "e" keys. .B Command-line mode abbreviations (:cabbrev) menu .TP .B dd remove abbreviation under the cursor. .LP .B Color scheme (:colorscheme) menu .TP .B "Enter, l" apply selected colorscheme as if ":colorscheme " was executed on the command-line. .LP .B Commands (:command) menu .TP .B "Enter, l" execute the command with empty arguments (%a macro). .TP .B dd remove command under the cursor. .TP .B c leave menu preserving file selection and insert right-hand side of selected command into the command-line. .LP .B Directory stack (:dirs) menu .TP .B "Enter, l" rotate the stack to put selected directory pair at the top. .LP .B File (:file) menu .LP Commands from vifmrc or typed on the command-line are displayed above an empty line if it's present. All commands below the empty line come from .desktop files. Commands detected as available have "[present]" to the left of them. .TP .B "Enter, l" run selected command (regardless whether it was detected to be present or not). .TP .B c leave menu preserving file selection and insert command after :! in the command-line mode. .LP .B Grep (:grep) menu .TP .B "Enter, l" open file in an editor set by 'vicmd' at given line number. Menu won't be closed automatically to allow viewing more than one result. .LP See above for "gf", "e" and "c" keys. .B Jobs (:jobs) menu .TP .B dd request cancellation of job under the cursor. The job won't be removed from the list, but marked as being cancelled (if cancellation was successfully requested). A message will pop up if the job has already stopped. Note that on Windows cancelling external programs like this might not work, because their parent shell doesn't have any windows. .TP .B e display errors of selected job if any were collected. They are displayed in a new menu, but you can return to jobs menu by pressing h. .TP .B r reload the list of jobs. .LP .B Marks (:marks) menu .TP .B "Enter, l" navigate to selected mark. .TP .B dd remove mark under the cursor. .LP .B Media (:media) menu .TP .B "Enter, l" behaviour is different for different kinds of lines: - mount an unmounted device - navigate to the first mount point of a mounted device - navigate to a mount point - do nothing for "not mounted" or an empty line .TP .B r reload the list. .TP .B m mount/unmount device (cursor should be positioned on lines under device information). .TP .B [ put cursor on the previous device. .TP .B ] put cursor on the next device. .LP .B Menus history (:chistory) menu .TP .B "Enter, l" load selected menu. .LP .B Plugins (:plugins) menu .TP .B e display log messages of selected plugin if any were collected. They are displayed in a new menu, but you can return to plugins menu by pressing h. .TP .B gf navigate previously active view to the location of selected plugin. Leaves the menu mode. .LP .B Trash (:lstrash) menu .TP .B r restore a file from the trash to its original location. .TP .B dd delete file under the cursor. .LP .B Trashes (:trashes) menu .TP .B "Enter, l" navigate into current trash directory. .TP .B dd start emptying selected trash in background. .LP .B Undolist (:undolist) menu .TP .B r reset undo position to group under the cursor. .LP .B User menu without navigation (%m macro) .TP .B c leave menu preserving file selection and insert whole line after :! in command-line mode. .LP .B Volumes (:volumes) menu .br only for MS-Windows .TP .B "Enter, l" navigate into the root of the selected drive. .LP .B Dialog-specific operations .br .B ========================== .B Attributes (permissions or properties) dialog .TP .B "h, Space" check/uncheck. .TP .B q close the dialog. .TP .B r (*nix only) (un)set all read bits. .TP .B w (*nix only) (un)set all write bits. .TP .B x (*nix only) (un)set all execute bits. .TP .B s (*nix only) (un)set all special (SetUID, SetGID, Sticky) bits. .TP .B e (*nix only) (un)set recursion (for directories only). .LP Possible item states: .IP \- 2 * \- checked flag. .IP \- 2 X \- selected files have inconsistent value of this flag. .IP \- 2 d (*nix only) \- (only for execute flags) means u\-x+X, g\-x+X or o\-x+X \ argument for the chmod program. If you're not on OS X and want to remove \ execute permission bit from all files, but preserve it for directories, set \ all execute flags to 'd' and check \(aqSet Recursively\(aq flag. .LP .B Fileinfo (Ctrl-G) dialog .TP .B "Enter, q" close the dialog. .LP .B Sort (:sort) dialog .TP .B "h, Space" switch ascending/descending order. .TP .B q close the dialog. .LP There is also a shortcut per sorting key (drawn on the dialog). .\" --------------------------------------------------------------------------- .SH Menus history .\" --------------------------------------------------------------------------- Menus are often used to present results of operations (like finding or grepping files). Once closed they can be recreated by repeating a command, but it might be inconvenient (require changing directory, finding the command and possibly finding position in a menu) and time consuming to re-run the operation. To make referring to older menus possible, vifm stores up to 25 last such menus and provides means for recalling them using familiar set of Vim commands. As already hinted above, this doesn't apply to every menu because things like :version or :commands rely solely on internal data and don't need to be saved. Only menus that are derived from external sources and support navigation (like via gf) are remembered. .B Navigating through history Re-opening the last viewed menu of relevant type is done by running :copen command. Once opened :colder can be used to view older menus and :cnewer to view newer ones. Closing a menu after moving through the history remembers the position such that running :copen again will open the last viewed menu and allow to continue exploring history in both directions. The history always contains menus sorted from oldest to newest. After opening more than 25 menus the oldest one is likely to be forgotten. It's not guaranteed to happen because after viewing an older menu new entry replaces all more recent ones. As an example, assume the history looks like this: .EX 1. :find 1 2. :find 2 ... 23. :find 23 (current element) 24. :find 24 25. :find 25 .EE Running `:find 11` results in: .EX 1. :find 1 2. :find 2 ... 23. :find 23 24. :find 26 (current element) 25. None .EE For convenience, :colder and :cnewer can be used any time you're in a menu, not just after :copen. :cnewer will work only if current menu can't be saved and you've moved back in menus history before. Behaviour of :colder is like this: - if current menu can be stashed, behave as :quit, :copen, :colder \ sequence (current menu is stashed the same way as described above) - if current menu can't be stashed, behave as :quit, :copen sequence .B Viewing history In order to avoid enumerating menus looking for the matching one, :chistory command can be used to get an overview of saved menus, maybe search for one and then open it. The command is also available in menu mode. .B Related topics Commands: :chistory, :copen Menu commands: :chistory, :colder, :cnewer .\" --------------------------------------------------------------------------- .SH Custom views .\" --------------------------------------------------------------------------- .B Definition Normally file views contain list of files from a single directory, but sometimes it's useful to populate them with list of files that do not belong to the same directory, which is what custom views are for. .B Presentation Custom views are still related to directory they were in before custom list was loaded. Path to that directory (original directory) can be seen in the title of a custom view. Files in same directory have to be named differently, this doesn't hold for custom views thus seeing just file names might be rather confusing. In order to give an idea where files come from and when possible, relative paths to original directory of the view is displayed, otherwise full path is used instead. Custom views normally don't contain any inexistent files. .B Navigation Custom views have some differences related to navigation in regular views. gf - acts similar to gf on symbolic links and navigates to the file at its real location. h - go to the closest parent node in the tree view; otherwise, return to the original directory. gh - return to the original directory. Opening ".." entry also causes return to the original directory. .B History Custom list exists only while it's visible, once left one can't return to it, so there is no appearances of it in any history. .B Filters Only local filter affects content of the view. This is intentional, presumably if one loads list, precisely that list should be displayed (except for inexistent paths, which are ignored). .B Search Although directory names are visible in listing, they are not searchable. Only file names are taken into account (might be changed in future, searching whole lines seems quite reasonable). .B Sorting Contrary to search sorting by name works on whole visible part of file path. .B Highlight Whole file name is highlighted as one entity, even if there are directory elements. .B Updates Reloads can occur, though they are not automatic due to files being scattered among different places. On a reload, inexistent files are removed and meta-data of all other files is updated. Once custom view forgets about the file, it won't add it back even if it's created again. So not seeing file previously affected by an operation, which was undone is normal. .B Operations All operations that add files are forbidden for custom views. For example, moving/copying/putting files into a custom view doesn't work, because it doesn't make much sense. On the other hand, operations that use files of a custom view as a source (e.g. yanking, copying, moving file from custom view, deletion) and operations that modify names are all allowed. .\" --------------------------------------------------------------------------- .SH Compare views .\" --------------------------------------------------------------------------- .B Kinds :compare can produce four different results depending on arguments: \- single compare view (ofone and either listall or listdups); \- single custom view (ofone and listunique); \- two compare views (ofboth and either listall or listdups); \- two custom views (ofboth and listunique). The first two display files of one file system tree. Here duplicates are files that have at least one copy in the same tree. The other two kinds of operation compare two trees, in which duplicates are files that are found in both trees. Lists of unique files are presented in custom views because there is no file grouping to preserve as all file ids are guaranteed to be distinct. .B Creation Arguments passed to :compare form seven categories each with its own prefix and is responsible for particular property of operation. Which files to compare: \- ofboth \- compares files of two panes against each other; \- ofone \- compares files of the same directory. How files are compared: \- byname \- by their name only; \- bysize \- only by their size; \- bycontents \- by data they contain (combination of size and hash of \ small chunk of contents is used as first approximation, so don't worry too \ much about large files; non-regular files like pipes are assumed to be empty). Which files to display: \- listall \- all files; \- listunique \- unique files only; \- listdups \- only duplicated files. How results are grouped (has no effect if "ofone" specified): \- groupids \- files considered identical are always adjacent in output; \- grouppaths \- file system ordering is preferred (this also enables \ displaying identically named files as mismatches). Which files to omit: \- skipempty \- ignore empty files. Comparison tweaks: \- withicase \- ignore case when comparing file names/paths; \- withrcase \- respect case when comparing file names/paths. Which results to show (has no effect for single pane comparison): \- showidentical \- control visibility of identical files; \- showdifferent \- control visibility of changed files; \- showuniqueleft \- control visibility of unique top/left files; \- showuniqueright \- control visibility of unique bottom/right files. Each argument can appear multiple times, the rightmost one of the group is considered. Arguments alter default behaviour instead of substituting it. When neither "withicase" nor "withrcase" is specified, case depends on the running operating system and the file system on which the files are located. .B Examples The defaults corresponds to probably the most common use case of comparing files in two trees with grouping by paths, so the following are equivalent: .EX :compare :compare bycontents grouppaths :compare bycontents listall ofboth grouppaths :compare showidentical showdifferent showuniqueleft showuniqueright .EE Another use case is to find duplicates in the current sub-tree: .EX :compare listdups ofone .EE The following command lists files that are unique to each pane: .EX :compare listunique .EE .B Look The view can't switch to ls-like view as it's unable to display diff-like data. Comparison views have second column displaying id of the file, files with same id are considered to be equal. The view columns configuration is predefined. The status bar displays only the initial result of the comparison and can be out of date. .B Behaviour When two views are being compared against each other the following changes to the regular behaviour apply: \- views are scrolled synchronously (as if 'scrollbind' was set); \- views' cursors are synchronized; \- local filtering is disabled (its results wouldn't be meaningful); \- zd excludes groups of adjacent identical files, 1zd gives usual behaviour; \- sorting is permanently disabled (ordering is fixed); \- removed files hide their counter pairs; \- exiting one of the views terminates the other immediately; \- renaming files isn't blocked, but isn't taken into account and might \ require regeneration of comparison; \- entries which indicate absence of equivalent file have empty names and can \ be matched as such; \- when unique files of both views are listed custom views can be empty, this \ absence of unique files is stated clearly. One compare view has similar properties (those that are applicable for single pane). Files are gathered in this way: \- recursively starting at current location of the view; \- dot files are excluded if view hides them at the moment of comparison, file name filters are obeyed as well so you end up comparing what you see; \- directories are not taken into account; \- symbolic links to directories are ignored. .\" --------------------------------------------------------------------------- .SH Startup .\" --------------------------------------------------------------------------- On startup vifm determines several variables that are used during execution. They are determined in the order they appear below. On *nix systems $HOME is normally present and used as is. On Windows systems vifm tries to find correct home directory in the following order: \- $HOME variable; \- $USERPROFILE variable (on Windows only); \- a combination of $HOMEDRIVE and $HOMEPATH variables (on Windows only). vifm tries to find correct configuration directory by checking the following places: \- $VIFM variable; \- parent directory of the executable file (on Windows only); \- $HOME/.vifm directory; \- $APPDATA/Vifm directory (on Windows only); \- $XDG_CONFIG_HOME/vifm directory; \- $HOME/.config/vifm directory. vifm tries to find correct configuration file by checking the following places: \- $MYVIFMRC variable; \- vifmrc in parent directory of the executable file (on Windows only); \- $VIFM/vifmrc file. .\" --------------------------------------------------------------------------- .SH Configure .\" --------------------------------------------------------------------------- See "Startup" section above for the explanations on $VIFM and $MYVIFMRC. The vifmrc file contains commands that will be executed on vifm startup. There are two such files: global and local. Global one is at {prefix}/etc/vifm/vifmrc, see $MYVIFMRC variable description for the search algorithm used to find local vifmrc. Global vifmrc is loaded before the local one, so that the later one can redefine anything configured globally. Use vifmrc to set settings, mappings, filetypes etc. To use multi line commands precede each next line with a slash (whitespace before slash is ignored, but all spaces at the end of the lines are saved). For example: .EX set \\smartcase .EE equals "setsmartcase". When .EX set \\ smartcase .EE equals "set smartcase". The $VIFM/vifminfo file contains generic state of the application. You can control what is stored in vifminfo by setting \(aqvifminfo\(aq option. Vifm always writes this file on exit unless 'vifminfo' option is empty. Marks, bookmarks, commands, histories, filetypes, fileviewers and registers in the file are merged with vifm configuration (which has bigger priority). Generally, runtime configuration has bigger priority during merging, but there are some exceptions: .RS 2 .IP \- 2 directory stack stored in the file is not overwritten unless something is changed in vifm instance that performs merge; .IP \- 2 each mark or bookmark is marked with a timestamp, so that newer value is not overwritten by older one, thus no matter from where it comes, the newer one wins; .IP \- 2 all histories are marked with timestamps on storing, this means that last instance to quit puts its elements on top of the list; .IP \- 2 tabs are merged only if both current instance and stored state contain exactly one tab of any kind. .RE The $VIFM/scripts directory can contain shell scripts. vifm modifies its PATH environment variable to let user run those scripts without specifying full path. All subdirectories of the $VIFM/scripts will be added to PATH too. Script in a subdirectory overlaps script with the same name in all its parent directories. The $VIFM/colors/ and {prefix}/etc/vifm/colors/ directories contain color schemes. Available color schemes are searched in that order, so on name conflict the one in $VIFM/colors/ wins. Each color scheme should have ".vifm" extension. This wasn't the case before and for this reason the following rules apply during lookup: .RS 2 .IP \- 2 if there is no file with .vifm extension, all regular files are listed; .IP \- 2 otherwise only files with .vifm extension are listed (with the extension being truncated). .RE .\" --------------------------------------------------------------------------- .SH Sessions .\" --------------------------------------------------------------------------- Sessions provide a way to have multiple persistent runtime configurations. Think of them as second-level vifminfo files in addition to the first-level one used by all sessions. In other words, they aren't a replacement for vifminfo file that exists without sessions, but an addition to it. One can empty 'vifminfo' option and rely solely on sessions, but in practice one might want to share some state among instances in different sessions or have an "out-of-sessions" state for tasks that don't deserve a session of their own. This leads to a two-level structure where data in session files has higher priority than data in vifminfo files (where this makes sense) following the same rules that merging of vifminfo file obeys. In addition to that, history items from session files are never ordered before history items from vifminfo file. .B Format Sessions have the format of vifminfo files, they do not consist of sequence of command-line commands and are not meant to be sourced via :source command. .B Storage and naming `$VIFM/sessions/` directory serves as a storage for sessions. Consequently names should be valid filenames. The structure of the storage is flat meaning that there are no subdirectories, that's why names of sessions can't contain slashes. .B Usage model Contrary to Vim, vifm automates basic management of sessions. You can start, switch, stop or delete a session using builtin means. Current session is saved at the same time vifminfo is saved (on normal exits or explicitly on :write command) and right before switching to another session. To avoid saving in those cases use :session command to detach (without saving) from a session before proceeding. .B Related topics Commands: :session, :delsession .br Options: 'sessionoptions' .br Variables: v:session .RE .\" --------------------------------------------------------------------------- .SH Automatic FUSE mounts .\" --------------------------------------------------------------------------- vifm has a builtin support of automated FUSE file system mounts. It is \ implemented using file associations mechanism. To enable automated mounts, \ one needs to use a specially formatted program line in filetype or \ filextype commands. These use special macros, which differ from \ macros in commands unrelated to FUSE. Currently three formats are supported: 1) FUSE_MOUNT This format should be used in case when all information needed for mounting \ all files of a particular type is the same. E.g. mounting of tar files \ don't require any file specific options. Format line: FUSE_MOUNT|mounter %SOURCE_FILE %DESTINATION_DIR [%FOREGROUND] Example filetype command: .EX :filetype FUSE_MOUNT|fuse\-zip %SOURCE_FILE %DESTINATION_DIR .EE 2) FUSE_MOUNT2 This format allows one to use specially formatted files to perform mounting \ and is useful for mounting remotes, for example remote file systems over ftp \ or ssh. Format line: FUSE_MOUNT2|mounter %PARAM %DESTINATION_DIR [%FOREGROUND] Example filetype command: .EX :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR .EE Example file content: .EX root@127.0.0.1:/ .EE 3) FUSE_MOUNT3 This format is equivalent to FUSE_MOUNT, but omits unmounting. It \ is useful for cases, when unmounting isn't needed, like when using AVFS. Example :filetype command: .EX :filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz,*.deb \\ {Mount with avfs} \\ FUSE_MOUNT3|mount-avfs %DESTINATION_DIR %SOURCE_FILE .EE Example `mount-avfs` helper script: .EX #!/bin/sh dest=$1 file=$2 rmdir "$dest" ln \-s "$HOME/.avfs$file#/" "$dest" .EE All % macros are expanded by vifm at runtime and have the following meaning: \- %SOURCE_FILE is replaced by full path to selected file; \- %DESTINATION_DIR is replaced by full path to mount directory, which is \ created by vifm basing on the value of 'fusehome' option; \- %PARAM value is filled from the first line of file (whole line), though \ in the future it can be changed to whole file content; \- %FOREGROUND means that you want to run mount command as a regular \ command (required to be able to provide input for communication with mounter \ in interactive way). %FOREGROUND is an optional macro. Other macros are not mandatory, but mount \ commands likely won't work without them. %CLEAR is obsolete name of %FOREGROUND, which is still supported, but might be \ removed in future. Its use is discouraged. Unlike macros elsewhere, these are recognized only if they appear at the end of a command or are followed by a space. There is no way to escape % either. These are historical limitations, which might be addressed in the future. The mounted FUSE file systems will be automatically unmounted in two cases: .RS 2 .IP \- 2 when vifm quits (with ZZ, :q, etc. or when killed by signal); .IP \- 2 when you explicitly leave mount point going up to its parent directory (with \ h, Enter on "../" or ":cd ..") and other pane is not in the same directory or \ its child directories. .RE .\" --------------------------------------------------------------------------- .SH View look .\" --------------------------------------------------------------------------- vifm supports displaying of file list view in two different ways: .RS 2 .IP \- 2 in a table mode, when multiple columns can be set using 'viewcolumns' option (see "Column view" section below for details); .IP \- 2 in a multicolumn list manner which looks almost like `ls \-x` command output (see "ls-like view" section below for details). .RE The look is local for each view and can be chosen by changing value of the \(aqlsview\(aq boolean option. Depending on view look some of keys change their meaning to allow more natural cursor moving. This concerns mainly h, j, k, l and other similar navigation keys. Also some of options can be ignored if they don't affect view displaying in selected look. For example value of 'viewcolumns' when 'lsview' is set. .\" --------------------------------------------------------------------------- .SH ls-like view .\" --------------------------------------------------------------------------- When this view look is enabled by setting 'lsview' option on, vifm will display files in multiple columns. Number of columns depends on the length of the longest file name present in current directory of the view. Whole file list is automatically reflowed on directory change, terminal or view resize. View looks close to output of `ls \-x` command, so files are listed left to right in rows. In this mode file manipulation commands (e.g. d) don't work line-wise like they do in Vim, since such operations would be uncommon for file manipulation tasks. Thus, for example, dd will remove only current file. By default the view is filled by lines, 'lsoptions' can be used to get filling by columns. Note that tree-view and compare view inhibit ls-like view. .\" --------------------------------------------------------------------------- .SH Column view .\" --------------------------------------------------------------------------- View columns are described by a comma-separated list of column descriptions, each of which has the following format [ '\-' | '*' ] [ fw ( [ '.' tw ] | '%' ) ] '{' type | literal '}' '.'{0,3} .br where fw stands for full width, tw stands for text width, bar is logical or, square brackets denote optional parts and curly braces define range of repetitions for a symbol that precedes them. So it basically consists of four parts: 1. Optional alignment specifier 2. Optional width specifier 3. Mandatory column name 4. Optional cropping specifier .B Alignment specifier It's an optional minus or asterisk sign as the first symbol of the string. Specifies type of text alignment within a column. Three types are supported: .IP \- 2 left align .EX set viewcolumns=\-{name} .EE .IP \- 2 right align (default) .EX set viewcolumns={name} .EE .IP \- 2 middle align It's like left alignment, but when the text is bigger than the column, it is cut in the middle (so the start and the end of the field are always visible). .EX set viewcolumns=^{name} .EE .IP \- 2 dynamic align It's like left alignment, but when the text is bigger than the column, the alignment is made at the right (so the part of the field is always visible). .EX set viewcolumns=*{name} .EE .LP .B Width specifier It's a number followed by a percent sign, two numbers (second one should be less than or equal to the first one) separated with a dot or a single number. Specifies column width and its units. There are three size types: .IP \- 2 absolute size \- column width is specified in characters .EX set viewcolumns=\-100{name},20.15{ext} .EE results in two columns with lengths of 100 and 20 and a reserved space of five \ characters on the left of second column. .IP \- 2 relative (percent) size \- column width is specified in percents of view width .EX set viewcolumns=\-80%{name},15%{ext},5%{mtime} .EE results in three columns with lengths of 80/100, 15/100 and 5/100 of view width. .IP \- 2 auto size (default) \- column width is automatically determined .EX set viewcolumns=\-{name},{ext},{mtime} .EE results in three columns with length of one third of view width. There is no \ size adjustment to content, since it will slow down rendering. .LP Columns of different sizing types can be freely mixed in one view. Though sometimes some of columns can be seen partly or be completely invisible if there is not enough space to display them. .LP .B Column contents This is usually a sorting key surrounded with curly braces, e.g. .EX {name},{ext},{mtime} .EE {name} and {iname} types are the same and are both present for consistency with \(aqsort\(aq option. The following column types don't have corresponding sorting keys: .RS 2 .IP \- 2 {root} \- display name without extension (as a complement for {ext}) .IP \- 2 {fileroot} \- display name without extension for anything except for \ directories and symbolic links to directories (as a complement for {fileext}) .RE Empty curly braces ({}) are replaced with the default secondary column for primary sort key. So after the next command view will be displayed almost as if 'viewcolumns' was empty, but adding ellipsis for long file names: .EX set viewcolumns=\-{name}..,6{}. .EE The last kind of column value is a string literal. The literal is used as a column value for every row. The syntax is "{#literal}", examples: .EX " double-character pseudo-padding on both sides set viewcolumns='2{#},*{name}..,{},2{#}' " pseudo-border between columns set viewcolumns='*{name}..,{#|},6{}' " pseudo-border with padding between columns set viewcolumns='*{name}..,{# | },6{}' .EE This can be used to draw column separators. Mind that for convenience literals have different defaults: truncation and automatically determined absolute size, which is what you usually want for them. Make sure to quote or escape spaces, vertical bars and other special symbols when using them as part of literals. .LP .B Cropping specifier It's from one to three dots after closing curly brace in column format. Specifies type of text truncation if it doesn't fit in the column. Currently three types are supported: .RS 2 .IP \- 2 truncation \- text is truncated .EX set viewcolumns=\-{name}. .EE results in truncation of names that are too long too fit in the view. .IP \- 2 adding of ellipsis \- ellipsis on the left or right are added when needed .EX set viewcolumns=\-{name}.. .EE results in that ellipsis are added at the end of too long file names. .IP \- 2 none (default) \- text can pass column boundaries .EX set viewcolumns=\-{name}...,{ext} .EE results in that long file names can partially be written on the ext column. .RE .\" --------------------------------------------------------------------------- .SH Color schemes .\" --------------------------------------------------------------------------- The color schemes in vifm can be applied in two different ways: .RS 2 .IP \- 2 as the primary color scheme; .IP \- 2 as local to a pane color scheme. .RE Both types are set using :colorscheme command, but of different forms: .RS 2 .IP \- 2 :colorscheme color_scheme_name \- for the primary color scheme; .IP \- 2 :colorscheme color_scheme_name directory \- for local color schemes. .RE Look of different parts of the TUI (Text User Interface) is determined in \ this way: .RS 2 .IP \- 2 Border, TabLine, TabLineSel, TopLineSel, TopLine, CmdLine, ErrorMsg, \ StatusLine, JobLine, SuggestBox, WildBox and WildMenu are always determined by \ the primary color scheme; .IP \- 2 CurrLine, Selected, Directory, Link, BrokenLink, Socket, Device, Executable, \ Fifo, CmpMismatch, CmpUnmatched, CmpBlank, Win, AuxWin and OtherWin are \ determined by primary color scheme and a set of local color schemes, which can \ be empty. .RE There might be a set of local color schemes because they are structured hierarchically according to file system structure. For example, having the following piece of file system: .EX ~ `\-\- bin | `\-\- my .EE Two color schemes: .EX # ~/.config/vifm/colors/for_bin.vifm highlight Win cterm=none ctermfg=white ctermbg=red highlight CurrLine cterm=none ctermfg=red ctermbg=black # ~/.config/vifm/colors/for_bin_my.vifm highlight CurrLine cterm=none ctermfg=green ctermbg=black .EE And these three commands in the vifmrc file: .EX colorscheme Default colorscheme for_bin ~/bin colorscheme for_bin_my ~/bin/my .EE File list will look in the following way for each level: .IP \- 2 ~/ \- Default color scheme .br black background .br cursor with blue background .IP \- 2 ~/bin/ \- mix of Default and for_bin color schemes .br red background .br cursor with black background and red foreground .IP \- 2 ~/bin/my/ \- mix of Default, for_bin and for_bin_my color schemes .br red background .br cursor with black background and green foreground .\" --------------------------------------------------------------------------- .SH Trash directory .\" --------------------------------------------------------------------------- vifm has support of trash directory, which is used as temporary storage for deleted files or files that were cut. Using trash is controlled by the \(aqtrash\(aq option, and exact path to the trash can be set with 'trashdir' option. Trash directory in vifm differs from the system-wide one by default, because of possible incompatibilities of storing deleted files among different file managers. But one can set 'trashdir' to "~/.local/share/Trash" to use a "standard" trash directory. There are two scenarios of using trash in vifm: .RS 2 .IP 1. 3 As a place for storing files that were cut by "d" and may be inserted to some other place in file system. .IP 2. 3 As a storage of files, that are deleted but not purged yet. .RE The first scenario uses deletion ("d") operations to put files to trash and put ("p") operations to restore files from trash directory. Note that such operations move files to and from trash directory, which can be long term operations in case of different partitions or remote drives mounted locally. The second scenario uses deletion ("d") operations for moving files to trash directory and :empty command-line command to purge all previously deleted files. Deletion and put operations depend on registers, which can point to files in trash directory. Normally, there are no nonexistent files in registers, but vifm doesn't keep track of modifications under trash directory, so one shouldn't expect value of registers to be absolutely correct if trash directory was modified not by operation that are meant for it. But this won't lead to any issues with operations, since they ignore nonexistent files. .\" --------------------------------------------------------------------------- .SH Client\-Server .\" --------------------------------------------------------------------------- vifm supports remote execution of command-line mode commands, remote changing of directories and expression evaluation. This is possible using \-\-remote and \-\-remote\-expr command-line arguments. To execute a command remotely combine \-\-remote argument with \-c or +. For example: .EX vifm \-\-remote \-c 'cd /' vifm \-\-remote '+cd /' .EE To change directory not using command-line mode commands one can specify paths right after \-\-remote argument, like this: .EX vifm \-\-remote / vifm \-\-remote ~ vifm \-\-remote /usr/bin /tmp .EE Evaluating expression remotely might be useful to query information about an instance, for example its location: .EX vifm \-\-remote\-expr 'expand("%d")' .EE If there are several running instances, the target can be specified with \-\-server\-name option (otherwise, the first one lexicographically is used): .EX vifm \-\-server-name work \-\-remote ~/work/project .EE List of names of running instances can be obtained via \-\-server\-list option. Name of the current one is available via v:servername. .TP .BI "v:servername" server name of the running vifm instance. Empty if client-server feature is disabled. .\" --------------------------------------------------------------------------- .SH External Renaming .\" --------------------------------------------------------------------------- When an editor is run to edit list of file names, contents of the temporary file has the following format: .RS 2 .IP 1. 3 Order of lines correspond to the order of files in a view. .IP 2. 3 Lines that start with a "#" are comments and are ignored. .IP 3. 3 Single backslash at the beginning of a line is ignored, so that a file starting with a backslash will appear like "\\#name". .RE If an operation was rejected due to issues with file names, next time you'll see the following in this order: .RS 2 .IP 1. 3 Last error (in comments). .IP 2. 3 Original file names (in comments). .IP 3. 3 Failed list of new names. .RE Mind that Vim plugin will extract list of original names and show them in a vertical split. You can cancel renaming by removing all non-comments from the buffer. This also erases information about previous edits. .\" --------------------------------------------------------------------------- .SH Using mouse .\" --------------------------------------------------------------------------- Note: is not available on 32-bit *nix systems, because ncurses doesn't support it there (limitation of implementation). Note: these are not available in mappings at the moment. .B "Normal Mode" event position change action cursor window yes yes if cursor wasn't move no yes no yes no yes yes yes :file no yes no yes or :tabprevious no yes or :tabnext Clicking on or scrolling over an inactive pane (including its title), makes it active and does nothing else. Tabs are scrolled when mouse hovers over them. Clicking on the left miller column goes to parent directory and clicking the right one opens current entry. .B "Visual Mode" event position selection action cursor yes update if cursor wasn't move no no update no no no no update no update .B "Command-line Mode" event position action cursor yes no no no no no no no .B "Menu Mode" event position action cursor yes if cursor wasn't moved no no no no no no no .B "view Mode" event action k j Clicking on or scrolling over an inactive pane (including its title), detaches view mode if it wasn't activated for exploring a file. .\" --------------------------------------------------------------------------- .SH Plugin .\" --------------------------------------------------------------------------- Plugin for using vifm in vim as a file selector. Commands: :EditVifm select a file or files to open in the current buffer. :Vifm alias for :EditVifm. :SplitVifm split buffer and select a file or files to open. :VsplitVifm vertically split buffer and select a file or files to open. :DiffVifm select a file or files to compare to the current file with :vert diffsplit. :TabVifm select a file or files to open in tabs. Each command accepts up to two arguments: left pane directory and right pane directory. After arguments are checked, vifm process is spawned in a special "file-picker" mode. To pick files just open them either by pressing l, i or Enter keys, or by running :edit command. If no files are selected, file under the cursor is opened, otherwise whole selection is passed to the plugin and opened in vim. The plugin have only two settings. It's a string variable named g:vifm_term to let user specify command to run GUI terminal. By default it's equal to \(aqxterm \-e\(aq. And another string variable named g:vifm_exec, which equals "vifm" by default and specifies path to vifm's executable. To pass arguments to vifm use g:vifm_exec_args, which is empty by default. To use the plugin copy the vifm.vim file to either the system wide vim/plugin directory or into ~/.vim/plugin. If you would prefer not to use the plugin and it is in the system wide plugin directory add let loaded_vifm=1 to your ~/.vimrc file. .\" --------------------------------------------------------------------------- .SH Reserved .\" --------------------------------------------------------------------------- The following command names are reserved and shouldn't be used for user commands. g[lobal] v[global] .\" --------------------------------------------------------------------------- .SH ENVIRONMENT .\" --------------------------------------------------------------------------- .TP .BI VIFM Points to main configuration directory (usually ~/.config/vifm/). .TP .BI MYVIFMRC Points to main configuration file (usually ~/.config/vifm/vifmrc). .LP These environment variables are valid inside vifm and also can be used to configure it by setting some of them before running vifm. .LP When $MYVIFMRC isn't set, it's made as $VIFM/vifmrc (exception for Windows: vifmrc in the same directory as vifm.exe has higher priority than $VIFM/vifmrc). .LP See "Startup" section above for more details. .TP .BI VIFM_FUSE_FILE On execution of external commands this variable is set to the full path of file used to initiate FUSE mount of the closest mount point from current pane's directory up. It's not set when outside FUSE mount point. When vifm is used inside terminal multiplexer, it tries to set this variable as well (it doesn't work this way on its own). .\" --------------------------------------------------------------------------- .SH SEE ALSO .\" --------------------------------------------------------------------------- .BR vifm-convert-dircolors (1), .BR vifm-pause (1) Website: https://vifm.info/ .br Wiki: https://wiki.vifm.info/ .\" --------------------------------------------------------------------------- .SH AUTHOR .\" --------------------------------------------------------------------------- Vifm was written by ksteen .br And currently is developed by xaizek vifm-0.14/data/plugins/000077500000000000000000000000001475151500600147755ustar00rootroot00000000000000vifm-0.14/data/plugins/bg/000077500000000000000000000000001475151500600153655ustar00rootroot00000000000000vifm-0.14/data/plugins/bg/init.lua000066400000000000000000000012141475151500600170310ustar00rootroot00000000000000--[[ Provides :Bg command that runs external command in background displaying it on job bar until its done. Expands %-macros and $-environment variables. Usage example: :Bg sleep 10 --]] local function bg(info) local cmd = vifm.expand(info.args) vifm.startjob { cmd = cmd, description = cmd, visible = true } end -- this does NOT overwrite pre-existing user command local added = vifm.cmds.add { name = "Bg", description = "run an external command in background", handler = bg, minargs = 1, maxargs = -1, } if not added then vifm.sb.error("Failed to register :Bg") end return {} vifm-0.14/data/plugins/devicons/000077500000000000000000000000001475151500600166075ustar00rootroot00000000000000vifm-0.14/data/plugins/devicons/init.lua000066400000000000000000000064211475151500600202600ustar00rootroot00000000000000--[[ Provides :DevIcons command to manage dev-icons. Usage examples: Toggle dev icons. :DevIcons Toggle individual category. :DevIcons category --]] -- TODO: more fine-grained representation and detailed formatting in format() local icons = { types = ' :dir:/, :exe:, :reg:, :link:,| :fifo:,= :sock:', -- various file names other = ' ::../::, ::*.sh::', cxx = ' ::*.hpp,,*.cpp,,*.cc,,*.hh::, ::*.h,,*.c::', docs = ' ::copying,,license::, ::.git/,,*.git/::/', ebooks = ' ::*.epub,,*.fb2,,*.djvu::, ::*.pdf::', xml = ' ::*.htm,,*.html,,*.shtml,,*.xhtml,,*.xml::', archives = ' ::*.7z,,*.ace,,*.arj,,*.bz2,,*.cpio,,*.deb,,*.dz,,*.gz,,'.. '*.jar,,*.lzh,,*.lzma,,*.rar,,*.rpm,,*.rz,,*.tar,,*.taz,,'.. '*.tb2,,*.tbz,,*.tbz2,,*.tgz,,*.tlz,,*.trz,,*.txz,,*.tz,,'.. '*.tz2,,*.xz,,*.z,,*.zip,,*.zoo::', images = ' ::*.bmp,,*.gif,,*.jpeg,,*.jpg,,*.ico,,*.png,,*.ppm,,*.svg,,'.. '*.svgz,,*.tga,,*.tif,,*.tiff,,*.xbm,,*.xcf,,*.xpm,,*.xspf,,'.. '*.xwd::', audio = ' ::*.aac,,*.anx,,*.asf,,*.au,,*.axa,,*.flac,,*.m2a,,*.m4a,,'.. '*.mid,,*.midi,,*.mp3,,*.mpc,,*.oga,,*.ogg,,*.ogx,,*.ra,,'.. '*.ram,,*.rm,,*.spx,,*.wav,,*.wma,,*.ac3::', media = ' ::*.avi,,*.ts,,*.axv,,*.divx,,*.m2v,,*.m4p,,*.m4v,,.mka,,'.. '*.mkv,,*.mov,,*.mp4,,*.flv,,*.mp4v,,*.mpeg,,*.mpg,,*.nuv,,'.. '*.ogv,,*.pbm,,*.pgm,,*.qt,,*.vob,,*.wmv,,*.xvid,,*.webm::', office = ' ::*.doc,,*.docx::, ::*.xls,,*.xlsm,,*.xlsx::,'.. ' ::*.pptx,,*.ppt::', } local active = false local original_classify local categories = {} for key, _ in pairs(icons) do categories[key] = true end local function format() local formatted = '' for key, value in pairs(icons) do if categories[key] then formatted = formatted..value..',' end end return formatted end local function toggle() if active then vifm.opts.global.classify = original_classify else original_classify = vifm.opts.global.classify vifm.opts.global.classify = format() end active = not active end local function devicons(info) if #info.argv == 0 then toggle() return end category = info.argv[1] local enabled = categories[category] if enabled == nil then vifm.sb.error('Unknown category: '..category) return end categories[category] = not enabled if active then vifm.opts.global.classify = format() end end local function complete_devicons(info) local prefix = info.arg local prefix_len = prefix:len() local matches = {} for key, _ in pairs(categories) do if key:sub(0, prefix_len) == prefix then matches[#matches + 1] = key end end return { matches = matches } end -- this does NOT overwrite pre-existing user command local added = vifm.cmds.add { name = "DevIcons", description = "use iconic font to simulate icons", handler = devicons, complete = complete_devicons, maxargs = 1, } if not added then vifm.sb.error("Failed to register :DevIcons") end -- enable icons on startup toggle() return {} vifm-0.14/data/plugins/editor/000077500000000000000000000000001475151500600162635ustar00rootroot00000000000000vifm-0.14/data/plugins/editor/README.md000066400000000000000000000116711475151500600175500ustar00rootroot00000000000000## Using Vifm as Helix's file-manager ### Setup 1. Copy this plugin to your Vifm's plugin directory 2. Add these three scripts to your PATH:

tmux-ide ```bash #!/bin/bash file="$1" if [ -d "$file" ]; then cd "$file" fi session_id="$(tmux new-session -dP)" tmux rename-window -t "$session_id" "editor" tmux send-keys -t "$session_id" "exec $EDITOR '$file'" Enter exec tmux attach -t "$session_id" ```
tmux-toggle ```bash #!/bin/bash main() { local tag mode cmd if [ $# -gt 1 ]; then mode="$1" tag="$2" cmd="$3" shift 3 case "$mode" in pane) toggle_pane "$tag" "$cmd" "$@";; window) toggle_window "$tag" "$cmd" "$@";; esac fi } toggle_window() { local tag cmd target current_window tag="$1" cmd="$2" target="$(tmux show -qv "@$tag")" current_window="$(tmux display -p '#S:#I')" if [ "$current_window" = "$target" ]; then tmux last-window else if [ -n "$target" ] && tmux lsw -F'#S:#I' | grep -q "$target"; then tmux select-window -t "$target" else if [ -z "$cmd" ]; then target="$(tmux new-window -PF'#S:#I')" else target="$(tmux new-window -PF'#S:#I' -- sh -c "$cmd")" fi tmux set "@$tag" "$target" fi fi } toggle_pane() { local tag cmd size target current_window tag="$1" cmd="$2" size="$3" target="$(tmux show -qv "@$tag")" current_window="$(tmux display -p '#S:#I')" if [ "$current_window" = "${target%.*}" ]; then target="$(tmux break-pane -dPs "$target")" else if [ -n "$target" ]; then tmux join-pane -bhl "$size" -s "$target" -t "$current_window.0" target="$current_window.0" else if [ -z "$cmd" ]; then target="$(tmux split -bhl "$size" -PF'#S:#I.#P')" else target="$(tmux split -bhl "$size" -PF'#S:#I.#P' -- sh -c "$cmd")" fi tmux select-pane -t "$target" -P 'bg=#090B10' fi fi tmux set "@$tag" "$target" } main "$@" ```
tmux-toggle-pane-vifm ```bash #!/bin/bash tmux-toggle pane fm 'vifm -c "set vicmd='\''#editor#run helix-tmux'\''" "$(pwd)"' 25% ```
3. Configure Tmux
tmux.conf ```shell bind -n 'c-b' run-shell 'tmux-toggle-pane-vifm' bind -n 'c-t' run-shell 'tmux-toggle window term' # Keybinding to open an editor window in a new tmux session bind -n 'c-e' new-window \; rename-window editor \; send-keys -t :editor.0 'exec $EDITOR' Enter # Theming set -g default-terminal "tmux-256color" set -as terminal-overrides ",alacritty*:Tc" set -g status off set -g pane-border-status off set -g pane-border-indicators off set -g pane-active-border-style "fg=#0F111A" set -g pane-border-lines heavy ```
4. Configure Vifm:
vifmrc ```vim " Hides information when there is not enough space. Customize it however you want if &columns > 160 vsplit | view! set viewcolumns=-{name}..,7{size},12{perms},7{uname}..,-7{gname}.. set statusline="%1* %t %2* %3*%{filetype('.')} %T %= %a / %c | %d %2*%1* %E " elseif &columns > 81 only set viewcolumns=-{name}..,7{size},12{perms},7{uname}..,-7{gname}.. set statusline="%1* %t %2* %3*%{filetype('.')} %T %N%= %a / %c | %d %2*%1* %E " else only set viewcolumns=-{name}.., set statusline=" " set rulerformat=" " endif " Toggles the preview window command toggle : \| if layoutis('only') \| restart \| else \| view \| only \| endif " Changes the current directory to the fuzzy finded file's directory and then opens it command! FZFFindFilesOnly : set noquickview \| let $FZF_PICK = term('find -type f | fzf 2>/dev/tty') \| if $FZF_PICK != '' \| execute 'goto' fnameescape($FZF_PICK) \| execute 'edit' fnameescape(system('basename "$FZF_PICK"')) \| endif " In case you want to fuzzy find both directories and regular files command! FZFFind : set noquickview \| let $FZF_PICK = term('find | fzf 2>/dev/tty') \| if $FZF_PICK != '' \| let $IS_DIR = system('[ -d "$FZF_PICK" ] && echo true || echo false') \| if $IS_DIR == 'true' \| execute 'cd' fnameescape($FZF_PICK) \| else \| execute 'goto' fnameescape($FZF_PICK) \| execute 'edit' fnameescape(system('basename "$FZF_PICK"')) \| endif \| endif " Good to have keybindings nnoremap :FZFFindFilesOnly nnoremap T :tree depth=2 nnoremap B :toggle nnoremap E :!nohup $TERMINAL -e tmux-ide %f &>/dev/null & disown ```
### Usage Depending on your preference: - Run `tmux` inside a terminal, then press `Ctrl-e` to create an editor window. - Run `tmux-ide [optional file or directory path]` inside a terminal. It automatically creates an editor window. - Inside Vifm, select a file or project directory, then press `Shift-e` to open a terminal that will execute `tmux-ide ` After that, you can press `Ctrl-b` to toggle the file manager or press `Ctrl-t` to toggle a terminal window. vifm-0.14/data/plugins/editor/emacs.lua000066400000000000000000000031411475151500600200550ustar00rootroot00000000000000--[[ Wraps console emacs for handling basic editor use cases within Vifm. Unimplemented actions: * open-help (:help when 'vimhelp' is set): can probably be done, it's regular tags after all * edit-list ("v" key in navigation menus): don't know if there is a builtin notion of a quickfix list in Emacs --]] local M = {} M.handlers = {} M.handlers["open-help"] = function(info) vifm.errordialog("Unimplemented", "Can't view Vim-style help via Emacs.\n".. "Do `:set novimhelp` to make argumentless `:help` work.") return false end M.handlers["edit-one"] = function(info) local posarg = "" if info.line ~= nil and info.column == nil then posarg = '+' .. info.line elseif info.line ~= nil and info.column ~= nil then posarg = string.format("+%d:%d", info.line, info.column) end local exitcode = vifm.run { cmd = string.format("emacs -nw %s %s", vifm.escape(posarg), vifm.escape(info.path)), usetermmux = not info.mustwait, } return exitcode == 0 end function map(table, functor) local result = {} for key, value in pairs(table) do result[key] = functor(value) end return result end M.handlers["edit-many"] = function(info) local exitcode = vifm.run { cmd = string.format("emacs -nw %s", table.concat(map(info.paths, vifm.escape), ' ')) } return exitcode == 0 end M.handlers["edit-list"] = function(info) vifm.errordialog("Unimplemented", "Can't view quickfix via Emacs.") return false end return M vifm-0.14/data/plugins/editor/gvim.lua000066400000000000000000000037021475151500600177320ustar00rootroot00000000000000--[[ Wraps gvim for handling all editor use cases within Vifm. --]] local M = {} M.handlers = {} M.handlers["open-help"] = function(info) vifm.startjob { cmd = string.format("gvim %s %s +only", vifm.escape("+set runtimepath+=" .. info.vimdocdir), vifm.escape("+help " .. info.topic)) } return true end M.handlers["edit-one"] = function(info) local forkarg = info.mustwait and "-f" or "" local posarg = "" if info.line ~= nil and info.column == nil then posarg = '+' .. info.line elseif info.line ~= nil and info.column ~= nil then posarg = string.format("+call cursor(%d, %d)", info.line, info.column) end local job = vifm.startjob { cmd = string.format("gvim %s %s %s", forkarg, vifm.escape(posarg), vifm.escape(info.path)) } if not info.mustwait then return true end return job:exitcode() == 0 end function map(table, functor) local result = {} for key, value in pairs(table) do result[key] = functor(value) end return result end M.handlers["edit-many"] = function(info) vifm.startjob { cmd = string.format("gvim %s", table.concat(map(info.paths, vifm.escape), ' ')) } return true end M.handlers["edit-list"] = function(info) local cmd if info.isquickfix then cmd = string.format("gvim +cgetbuffer +bd! +cc%d -", info.current) else local exec = "exe 'bd!|args' join(map(getline('1','$'),'fnameescape(v:val)'))" cmd = string.format("gvim +%s +argument%d -", vifm.escape(exec), info.current) end local job = vifm.startjob { cmd = cmd, iomode = 'w' } local input = table.concat(info.entries, '\n') local pipe = job:stdin() pipe:write(input) pipe:close() return true end return M vifm-0.14/data/plugins/editor/helix-tmux.lua000066400000000000000000000033071475151500600210750ustar00rootroot00000000000000--[[ Allows using Vifm as an IDE-like file-manager/file-tree for Helix Unimplemented actions: * open-help (:help when 'vimhelp' is set): * edit-list ("v" key in navigation menus): --]] local M = {} M.handlers = {} M.handlers["open-help"] = function(info) vifm.errordialog("Unimplemented", "Can't view Vim-style help via Helix.\n" .. "Do `:set novimhelp` to make argumentless `:help` work.") return false end local function prepare_path(path) -- turn to full path and escape it for pasting into a shell command return vifm.escape(vifm.fnamemodify(path, ':p')) end M.handlers["edit-one"] = function(info) local posarg = "" if info.line ~= nil and info.column == nil then posarg = ':' .. info.line elseif info.line ~= nil and info.column ~= nil then posarg = string.format(":%d:%d", info.line, info.column) end local tmux_session_id = "$(tmux display -p '#S')" local job = vifm.startjob { cmd = string.format("tmux send-keys -t %s:editor.1 ':open %s%s' Enter", tmux_session_id, prepare_path(info.path), posarg), usetermmux = not info.mustwait, } return job:exitcode() == 0 end function map(table, functor) local result = {} for key, value in pairs(table) do result[key] = functor(value) end return result end M.handlers["edit-many"] = function(info) local tmux_session_id = "$(tmux display -p '#S')" local job = vifm.startjob { cmd = string.format("tmux send-keys -t %s:editor.1 ':open %s' Enter", tmux_session_id, table.concat(map(info.paths, prepare_path), ' ')) } return job:exitcode() == 0 end M.handlers["edit-list"] = function(info) vifm.errordialog("Unimplemented", "Can't view quickfix via Helix.") return false end return M vifm-0.14/data/plugins/editor/helix.lua000066400000000000000000000027441475151500600201060ustar00rootroot00000000000000--[[ Wraps helix for handling basic editor use cases within Vifm. Unimplemented actions: * open-help (:help when 'vimhelp' is set): * edit-list ("v" key in navigation menus): See: https://github.com/helix-editor/helix/discussions/5902 --]] local M = {} M.handlers = {} M.handlers["open-help"] = function(info) vifm.errordialog("Unimplemented", "Can't view Vim-style help via Helix.\n".. "Do `:set novimhelp` to make argumentless `:help` work.") return false end M.handlers["edit-one"] = function(info) local posarg = "" if info.line ~= nil and info.column == nil then posarg = ':' .. info.line elseif info.line ~= nil and info.column ~= nil then posarg = string.format(":%d:%d", info.line, info.column) end local exitcode = vifm.run { cmd = string.format("hx %s%s", vifm.escape(info.path), posarg), usetermmux = not info.mustwait, } return exitcode == 0 end function map(table, functor) local result = {} for key, value in pairs(table) do result[key] = functor(value) end return result end M.handlers["edit-many"] = function(info) local exitcode = vifm.run { cmd = string.format("hx %s", table.concat(map(info.paths, vifm.escape), ' ')) } return exitcode == 0 end M.handlers["edit-list"] = function(info) vifm.errordialog("Unimplemented", "Can't view quickfix via Helix.") return false end return M vifm-0.14/data/plugins/editor/init.lua000066400000000000000000000026161475151500600177360ustar00rootroot00000000000000--[[ Provides Lua handler that wraps invocation of an editor. Name of the wrapper needs to be passed in as an argument. Builtin wrappers: * emacs * gvim * vim * helix * helix-tmux Usage example: set vicmd='#editor#run gvim' --]] -- TODO: consider loading implementations lazily, more than one is unlikely to -- be used local impls = { emacs = vifm.plugin.require('emacs'), gvim = vifm.plugin.require('gvim'), vim = vifm.plugin.require('vim'), helix = vifm.plugin.require('helix'), ['helix-tmux'] = vifm.plugin.require('helix-tmux'), } local function run(info) local args = string.gmatch(info.command, "(%S+)") local _ = args() local editor = args() if editor == nil then vifm.errordialog(vifm.plugin.name, "Editor name is missing") return { success = 1 } end local impl = impls[editor] if impl == nil then vifm.errordialog(vifm.plugin.name, "Editor name is wrong: " .. editor) return { success = 1 } end local handler = impl.handlers[info.action] if handler == nil then vifm.errordialog(vifm.plugin.name, "Unexpected action: " .. info.action) return { success = false } end return { success = handler(info) } end local added = vifm.addhandler { name = "run", handler = run, } if not added then vifm.sb.error("Failed to register #run") end return { wrappers = impls } vifm-0.14/data/plugins/editor/vim.lua000066400000000000000000000047331475151500600175700ustar00rootroot00000000000000--[[ Wraps vim for handling all editor use cases within Vifm. Difference from builtin functionality: opening lists (v in menus) will use a separate tab in terminal multiplexer at the risk of leaving some temporary files around if an error occurs. --]] local M = {} M.handlers = {} M.handlers["open-help"] = function(info) local exitcode = vifm.run { cmd = string.format("vim %s %s +only", vifm.escape("+set runtimepath+=" .. info.vimdocdir), vifm.escape("+help " .. info.topic)) } return exitcode == 0 end M.handlers["edit-one"] = function(info) local posarg = "" if info.line ~= nil and info.column == nil then posarg = '+' .. info.line elseif info.line ~= nil and info.column ~= nil then posarg = string.format("+call cursor(%d, %d)", info.line, info.column) end local exitcode = vifm.run { cmd = string.format("vim %s %s", vifm.escape(posarg), vifm.escape(info.path)), usetermmux = not info.mustwait, } return exitcode == 0 end function map(table, functor) local result = {} for key, value in pairs(table) do result[key] = functor(value) end return result end M.handlers["edit-many"] = function(info) local exitcode = vifm.run { cmd = string.format("vim %s", table.concat(map(info.paths, vifm.escape), ' ')) } return exitcode == 0 end M.handlers["edit-list"] = function(info) local input = table.concat(info.entries, '\n') local tmp = os.tmpname() local f = io.open(tmp, 'w') f:write(input) f:close() local cwd = vifm.currview().cwd local cmd if info.isquickfix then cmd = string.format("vim +%s +cgetbuffer +%s +bd! +cc%d %s", vifm.escape('cd ' .. cwd), vifm.escape('silent! !rm %'), info.current, vifm.escape(tmp)) else local exec = "exe 'bd!|args' join(map(getline('1','$'),'fnameescape(v:val)'))" cmd = string.format("vim +%s +%s +%s +argument%d %s", vifm.escape('cd ' .. cwd), vifm.escape('silent! !rm %'), vifm.escape(exec), info.current, vifm.escape(tmp)) end local exitcode = vifm.run { cmd = cmd } return exitcode == 0 end return M vifm-0.14/data/plugins/git/000077500000000000000000000000001475151500600155605ustar00rootroot00000000000000vifm-0.14/data/plugins/git/init.lua000066400000000000000000000026651475151500600172370ustar00rootroot00000000000000--[[ Provides :Gclone command that clones repository by its URL determining directory name from URL and enters cloned directory on success. Usage example: Clone into directory called "vifm". :Gclone https://github.com/vifm/vifm.git Clone into directory called "vifm-dev". :Gclone https://github.com/vifm/vifm.git vifm-dev --]] local M = {} local function clone(info) local url = info.argv[1] local name if #info.argv > 1 then name = info.argv[2] else name = vifm.fnamemodify(url, ":t:s/\\.git$//", "") end vifm.sb.quick(string.format('Cloning %q to %q...', url, name)) local job = vifm.startjob { cmd = string.format('git clone %q %q', url, name) } for line in job:stdout():lines() do vifm.sb.quick(line) end if job:exitcode() == 0 then vifm.currview():cd(name) else local errors = job:errors() if #errors == 0 then vifm.errordialog('Gclone failed to clone', 'Error message is not available.') else vifm.errordialog('Gclone failed to clone', errors) end end end -- this does NOT overwrite pre-existing user command local added = vifm.cmds.add { name = "Gclone", description = "clone a repository and enter it", handler = clone, minargs = 1, maxargs = 2, } if not added then vifm.sb.error("Failed to register :Gclone") end return M vifm-0.14/data/plugins/hello/000077500000000000000000000000001475151500600161005ustar00rootroot00000000000000vifm-0.14/data/plugins/hello/command.lua000066400000000000000000000002751475151500600202250ustar00rootroot00000000000000local M = {} function M.greet(info) local what = 'world' if info.args ~= '' then what = info.args end vifm.sb.info(string.format('Hello, %s!', what)) end return M vifm-0.14/data/plugins/hello/init.lua000066400000000000000000000010551475151500600175470ustar00rootroot00000000000000--[[ Provides :Hello command that accepts one optional argument and greets in return. Usage examples: :Hello :Hello me --]] local cmd = vifm.plugin.require('command') local M = {} local function greet(info) vifm.sb.error(string.format('Hello, %s, %s!', info.args, info.argv[1])) end -- this does NOT overwrite pre-existing user command local added = vifm.cmds.add { name = "Hello", description = "greet", handler = cmd.greet, maxargs = -1, } if not added then vifm.sb.error("Failed to register :Hello") end return M vifm-0.14/data/plugins/mkcd/000077500000000000000000000000001475151500600157135ustar00rootroot00000000000000vifm-0.14/data/plugins/mkcd/init.lua000066400000000000000000000014761475151500600173710ustar00rootroot00000000000000--[[ Provides :MkCd command that creates some path and enters it reporting if something went wrong. Usage example: :MkCd dir/sub --]] local function mkcd(info) local path = info.argv[1] if vifm.exists(path) then vifm.errordialog("MkCd", "Path already exists: "..path) return end if not vifm.makepath(path) then vifm.errordialog("MkCd", "Failed to create path: "..path) return end if not vifm.currview():cd(path) then vifm.errordialog("MkCd", "Failed to navigate to: "..path) end end -- this does NOT overwrite pre-existing user command local added = vifm.cmds.add { name = "MkCd", description = "create path and enter it", handler = mkcd, maxargs = 1, } if not added then vifm.sb.error("Failed to register :MkCd") end return {} vifm-0.14/data/plugins/mpc/000077500000000000000000000000001475151500600155545ustar00rootroot00000000000000vifm-0.14/data/plugins/mpc/init.lua000066400000000000000000000052121475151500600172220ustar00rootroot00000000000000--[[ Provides commands and a handler to call mpc. " add files after the current one :mpcinsert " play next song in playlist :mpcnext " start playing next song :mpcplaynext filetype {*.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx, \*.opus,*.aif} \ {Insert after current in mpd playlist and play} \ #mpc#run insert playnext --]] -- TODO: check for presence of `mpc` -- TODO: maybe don't parse MPD configuration until first use local M = {} local musicdir function mpcinsert() local cmd = string.format('realpath -s --relative-to=%s %s | mpc insert', vifm.escape(musicdir), vifm.expand("%f")) local job = vifm.startjob { cmd = cmd } job:wait() end function mpcnext() local job = vifm.startjob { cmd = 'mpc next' } job:wait() end function mpcplaynext() local job = vifm.startjob { cmd = 'mpc | wc -l' } local n = tonumber(job:stdout():lines()()) job:wait() if n == 1 then job = vifm.startjob { cmd = 'mpc play' } job:wait() else mpcnext() end end function addcmd(info) -- this does NOT overwrite pre-existing user command local added = vifm.cmds.add(info) if not added then vifm.sb.error(string.format("Failed to register :%s", info.name)) end end local function run(info) local actions = string.gmatch(info.command, "(%S+)") for action in actions do if action == 'insert' then mpcinsert() elseif action == 'next' then mpcnext() elseif action == 'playnext' then mpcplaynext() end end end for cfg in io.lines(vifm.expand('$HOME/.mpd/mpd.conf')) do option, value = string.match(cfg, '%s*(%S+)%s+"([^"]+)"') vifm.sb.error(tostring(option) .. ' ' .. tostring(value)) if option == 'music_directory' then musicdir = value break end end if musicdir == nil then error('Failed to determine MPD database directory') end if musicdir:sub(1, 1) == '~' then musicdir = vifm.expand('$HOME') .. musicdir:sub(2) end vifm.sb.error(tostring(musicdir)) addcmd { name = "mpcinsert", description = "add files after the current one", handler = mpcinsert, } addcmd { name = "mpcnext", description = "play next song in playlist", handler = mpcnext, } addcmd { name = "mpcplaynext", description = "start playing next song", handler = mpcplaynext, } local added = vifm.addhandler { name = "run", handler = run, } if not added then vifm.sb.error(string.format("Failed to register #%s#run", vifm.plugin.name)) end return M vifm-0.14/data/plugins/operator-select/000077500000000000000000000000001475151500600201055ustar00rootroot00000000000000vifm-0.14/data/plugins/operator-select/init.lua000066400000000000000000000021441475151500600215540ustar00rootroot00000000000000--[[ Adds mappings that select entries in normal mode. Usage: s, e.g., `sa` selects all entries in a view. [count]ss selects [count] entries next to the cursor. --]] local M = {} local added = vifm.keys.add { shortcut = 's', description = 'select entries', modes = { 'normal' }, followedby = 'selector', handler = function(info) vifm.currview():select({ indexes = info.indexes }) end, } if not added then vifm.sb.error('Failed to register s') end local function range(begin, end_) local ints = {} for i = begin, end_ do table.insert(ints, i) end return ints end local added = vifm.keys.add { shortcut = 'ss', description = 'select [count] entries', modes = { 'normal' }, handler = function(info) local count = info.count or 1 local currview = vifm.currview() local indexes = range(currview.cursor.pos, currview.cursor.pos + count - 1) currview:select({ indexes = indexes }) end, } if not added then vifm.sb.error('Failed to register ss') end return M vifm-0.14/data/plugins/packer/000077500000000000000000000000001475151500600162425ustar00rootroot00000000000000vifm-0.14/data/plugins/packer/README.md000066400000000000000000000047131475151500600175260ustar00rootroot00000000000000## Packer Plugin to pack and unpack archives on the fly. Provides `:Pack` command that archives selection or current file. Name of a single file is used to name the archive, for multiple files name of current directory is used. `:Pack` optionally takes an argument. If the argument is given, it will be used as archive's name instead of the previous options. e.g. `:Pack foobar.zip`. Provides `:Unpack` command that unpacks common archives like tarballs, zip, rar or 7z nicely in a subdirectory. Supports unpacking multiple files at once (performed in sequence). ### Features * Unpack zip, rar, 7z, tar.gz, tar.bz2, etc. * Unpack multiple archives on the fly * Archives are unpacked nicely in a subdirectory * Doesn't overwrite existing files * Supports unpacking archives with special characters ### Requirements * `7z` - p7zip for most of decompression, including rar to extract rar files, p7zip must be build with rar support. also for packing into zip, 7z, lz4 etc type compressions. Why 7z? well it supports wide range of archives, it is fast and efficient at decompression. * `tar` - for (un)packing compressed tarballs, currently supports gzip, xz, bzip2 and zstd compressed tarballs. * `awk` is required as well. ### Commands #### Unpack Syntax: ``` :Unpack -b [] ``` Examples: ``` :Unpack :Unpack %D :Unpack /tmp ``` Extracts archive into a subdirectory or `` if given. With `-b`, the command returns after starting to unpack the first archive and schedules the next one after the first one is done, etc. #### Pack Syntax: ``` :Pack [] ``` Examples: ``` :Pack %c.7z :Pack foobar.tar.gz ``` Archives the selected files. Optionally takes archive name. ### Status Operating systems: - working under Linux environment (tested on Gentoo, Slackware) - working in Windows Limitations: - extracting large tarballs is slow due to `tar tf` being slow Features under consideration: - password support - ask to overwrite or merge when (un)packing TODOs: - check presence of the applications - displaying progress would be nice - a way to specify default path for unpacking - test using non-GNU awk - replace listing of archive's content with always extracting into subdirectory and moving files afterward - organize code in object-oriented style around descriptions of archivers with means to check for their presence, list of supported formats and command patterns for packing/unpacking vifm-0.14/data/plugins/packer/init.lua000066400000000000000000000012531475151500600177110ustar00rootroot00000000000000vifm.plugin.require('pack') vifm.plugin.require('unpack') -- this is used by code in other files function unescape_name(name) return name:gsub('\\(.)', '%1') end local added = vifm.cmds.add { name = "Unpack", description = "unpack an archive into specified directory", handler = unpack, minargs = 0, maxargs = 2, } if not added then vifm.sb.error("Failed to register :Unpack") end added = vifm.cmds.add { name = "Pack", description = "pack selected files and directories into an archive", handler = pack, minargs = 0, maxargs = 1, } if not added then vifm.sb.error("Failed to register :Pack") end return {} -- vim: set et ts=3 sts=3 sw=3: vifm-0.14/data/plugins/packer/pack.lua000066400000000000000000000045751475151500600176760ustar00rootroot00000000000000function pack(info) -- <<< local files = vifm.expand('%"f') if #files == 0 or files == '.' or files == './' or files == '..' or files == '../' then vifm.sb.error('Error: no files are selected') return end local outfile local ext = 'tar.gz' -- default extension if #info.argv == 1 then outfile = unescape_name(vifm.expand(info.argv[1])) ext = vifm.fnamemodify(outfile, ':e') if vifm.fnamemodify(outfile, ':r:e') == 'tar' then ext = 'tar.'..ext end else local singlefile = (vifm.expand('%"c') == files) local basename = singlefile and vifm.expand('%c:r:r') or vifm.expand('%d:t') outfile = string.format("%s.%s", unescape_name(basename), ext) end if vifm.exists(outfile) then vifm.errordialog(":Pack", string.format("File already exists: %s", outfile)) return end local eoutfile = vifm.escape(outfile) local cmd if ext == 'tar.gz' or ext == 'tgz' then cmd = string.format("tar --force-local -cvzf %s %s", eoutfile, files) elseif ext == 'tar.bz2' or ext == 'tbz2' then cmd = string.format("tar --force-local -cvjf %s %s", eoutfile, files) elseif ext == 'tar.xz' or ext == 'txz' then cmd = string.format("tar --force-local -cvJf %s %s", eoutfile, files) elseif ext == 'tar.zst' or ext == 'tzst' then cmd = string.format("tar -I 'zstd -19' --force-local -cvf %s %s", eoutfile, files) elseif ext == "tar" then cmd = string.format("tar --force-local -cvf %s %s", eoutfile, files) elseif ext == "7z" or ext == "lz4" or ext == "zip" then cmd = string.format("7z a %s %s", eoutfile, files) else -- TODO: rar, gzip, bzip2, xz, zst etc vifm.sb.error(string.format("Unknown format: %s", ext)) return end local job = vifm.startjob { cmd = cmd, description = "Packing: "..outfile, visible = true, iomode = '', -- ignore output to not block onexit = function(job) if job:exitcode() ~= 0 then local errors = job:errors() if #errors == 0 then vifm.errordialog('Packing failed', 'Error message is not available.') else vifm.errordialog('Packing failed', errors) end end end } end -- >>> -- vim: set et ts=3 sts=3 sw=3: vifm-0.14/data/plugins/packer/unpack.lua000066400000000000000000000165361475151500600202410ustar00rootroot00000000000000local function get_common_unpack_prefix(archive, format) -- <<< -- cmd should output the list of contents in the archive -- directory must contain '/' at end. adjust cmd accordingly local cmd if format == 'tar' then -- this is slow in comparison to 7z. noticably slow -- when large archives or archives with lots of files cmd = string.format("tar --force-local -tf %s", vifm.escape(archive)) elseif format == 'zip' or format == 'rar' or format == '7z' then cmd = string.format("7z -ba l %s | awk %s", vifm.escape(archive), vifm.escape('{($3 ~ /^D/) ? $0=$0"/" : $0; print substr($0,54) }')) else return nil, 'unsupported format: '..format end local job = vifm.startjob { cmd = cmd } local prefix local prefix_len for line in job:stdout():lines() do -- this conversion is really just for Windows, but there is currently no -- way of checking whether we're running on Windows -- -- Unix systems can allow slashes in file names in which case we might end -- up computing incorrect prefix, but it's a highly unlikely corner case line = line:gsub('\\', '/') vifm.sb.quick("Checking: "..line) if prefix == nil then prefix = line local top = prefix:match("(.-/)") if top ~= nil then prefix = top end prefix_len = #prefix end if line:sub(1, prefix_len) ~= prefix then job:wait() return nil end end if prefix ~= nil then if prefix:sub(-1) ~= '/' then prefix = nil else prefix = prefix:sub(1, #prefix - 1) if prefix == '.' then prefix = nil end end end local exitcode = job:exitcode() if exitcode ~= 0 then print('Listing failed with exit code: '..exitcode) return prefix, 'errors: '..job:errors() end return prefix end -- >>> local function unpack_archive(archive, target, onexit) -- <<< local fpath = archive local fname = vifm.fnamemodify(fpath, ':t') local fdir = vifm.fnamemodify(fpath, ':h') local ext local cmp ext = vifm.fnamemodify(fname, ':e') -- if tarball; ext -> 'tar' if ext == 'tgz' or ext == 'txz' or ext == 'tbz2' or ext == 'tzst' or vifm.fnamemodify(fname, ':r:e') == 'tar' then cmp = ext ext = 'tar' end local outdir = target or fdir if not vifm.exists(outdir) then vifm.errordialog(":Unpack", "Error: output directory does not exists") return end local prefix, err = get_common_unpack_prefix(fpath, ext) if err ~= nil then vifm.sb.error(err) return end if prefix == nil then if ext == 'tar' then outdir = string.format("%s/%s", outdir, vifm.fnamemodify(fname, ':r:r')) else outdir = string.format("%s/%s", outdir, vifm.fnamemodify(fname, ':r')) end if vifm.exists(outdir) then local msg = string.format("Output directory already exists:\n \n\"%s\"", outdir) vifm.errordialog(":Unpack", msg) return end if not vifm.makepath(outdir) then local msg = string.format('Failed to create output directory:\n \n\"%s\"', outdir) vifm.errordialog(":Unpack", msg) return end else if vifm.exists(string.format("%s/%s", outdir, prefix)) then local msg = string.format("Prefix directory already exists:\n \n\"%s/%s\"", outdir, prefix) vifm.errordialog(":Unpack", msg) return end end local eoutdir = vifm.escape(outdir) local efpath = vifm.escape(fpath) local cmd if ext == 'tar' then if cmp == "tgz" or cmp == "gz" then cmd = string.format('tar --force-local -C %s -vxzf %s', eoutdir, efpath) elseif cmp == "tbz2" or cmp == "bz2" then cmd = string.format('tar --force-local -C %s -vxjf %s', eoutdir, efpath) elseif cmp == "txz" or cmp == "xz" then cmd = string.format('tar --force-local -C %s -vxJf %s', eoutdir, efpath) elseif cmp == "tzst" or cmp == "zst" then cmd = string.format("tar --force-local -C %s -I 'zstd -d' -vxf %s", eoutdir, efpath) else vifm.sb.error("Error: unknown compression format '"..cmp.."'") return end elseif ext == 'zip' or ext == 'rar' or ext == '7z' or ext == 'lz4' then cmd = string.format("cd %s && 7z -bd x %s", eoutdir, efpath) end return vifm.startjob { cmd = cmd, description = "Unpacking: "..fname, -- don't show on the job bar if running in foreground visible = onexit ~= nil, -- ignore output to not block a background task iomode = onexit and '' or 'r', onexit = onexit, } end -- >>> local function add_to_selection(selection, entry) if entry.type == 'exe' or entry.type == 'reg' or entry.type == 'link' then local path = string.format('%s/%s', entry.location, entry.name) table.insert(selection, path) end end local function get_selected_paths(view) local selection = { } local has_selection = false for i = 1, view.entrycount do local entry = view:entry(i) if entry.selected then has_selection = true add_to_selection(selection, entry) end end if not has_selection then add_to_selection(selection, view:entry(view.currententry)) end return selection end local function report_result(job) if job:exitcode() ~= 0 then local errors = job:errors() -- TODO: need to report archive name here if #errors == 0 then vifm.errordialog('Unpacking failed', 'Error message is not available.') else vifm.errordialog('Unpacking failed', errors) end end end function unpack_next_in_bg(state) if state.current < #state.archives then state.current = state.current + 1 unpack_in_bg(state) end end function unpack_in_bg(state) local onexit = function(job) report_result(job) unpack_next_in_bg(state) end local archive = state.archives[state.current] if not unpack_archive(archive, state.target, onexit) then -- the callback won't run due to an error, so schedule next task right -- away unpack_next_in_bg(state) end end function unpack(info) -- <<< local archives = get_selected_paths(vifm.currview()) if #archives == 0 then vifm.sb.error('Error: no file object under cursor') return end local targetidx = 1 local bg = false if info.argv[1] == '-b' then bg = true targetidx = 2 elseif #info.argv == 2 then local msg = string.format('Error: unexpected option: %s', info.argv[1]) vifm.sb.error(msg) return end local target if targetidx <= #info.argv then -- TODO: vifm.expand() doesn't expand '~', find way to fix target = vifm.fnamemodify(unescape_name(vifm.expand(info.argv[targetidx])), ':p') end if bg then local state = { archives = archives, target = target, current = 1, } unpack_in_bg(state) else for _, archive in ipairs(archives) do local job = unpack_archive(archive, target, nil) if job then for line in job:stdout():lines() do vifm.sb.quick("Extracting: "..line) end report_result(job) end end end end -- >>> -- vim: set et ts=3 sts=3 sw=3: vifm-0.14/data/plugins/recent-entry/000077500000000000000000000000001475151500600174145ustar00rootroot00000000000000vifm-0.14/data/plugins/recent-entry/init.lua000066400000000000000000000076221475151500600210710ustar00rootroot00000000000000--[[ Puts cursor on a recently modified/changed/accessed entry in current view, which frees from the need to change and restore 'sort' to do it otherwise. Adds the following mappings: * [count]rm -- puts cursor on a [count]'s recently modified entry * [count]rc -- puts cursor on a [count]'s recently changed entry * [count]ra -- puts cursor on a [count]'s recently accessed entry --]] local M = {} local function make_entries_sorter(attr) -- sorts entries by `attr` and entry name in descending order return function(e1, e2) -- like -attr in 'sort' if e1[attr] ~= e2[attr] then return e1[attr] > e2[attr] -- like +dir in 'sort' elseif (e1.isdir and not e2.isdir) or (not e1.isdir and e2.isdir) then return e1.isdir -- like +name in 'sort' else return e1.name < e2.name end end end local function full_path(e) return e.location .. '/' .. e.name end local function recent_entry_index(attr, num) local currview = vifm.currview() local curr_entry = currview.cursor:entry() local curr_loc = curr_entry.location local entries = {} local entry_pos = {} local function remember_entry_and_position(e, pos) table.insert(entries, e) entry_pos[full_path(e)] = pos end if currview.custom == nil or currview.custom.type ~= 'tree' then for i = 1, currview.entrycount do local e = currview:entry(i) remember_entry_and_position(e, i) end else -- limit to location of current entry in tree-view remember_entry_and_position(curr_entry, currview.cursor.pos) local function belongs_to_curr_entry_location(i) local e = currview:entry(i) if e.location:sub(1, curr_loc:len()) ~= curr_loc then return false end if e.location == curr_loc then remember_entry_and_position(e, i) end return true end -- gather entries around the cursor local i = currview.cursor.pos - 1 while i >= 1 and belongs_to_curr_entry_location(i) do i = i - 1 end local i = currview.cursor.pos + 1 while i <= currview.entrycount and belongs_to_curr_entry_location(i) do i = i + 1 end end table.sort(entries, make_entries_sorter(attr)) local num = math.max(num or 1, 1) local idx = math.min(num, #entries) return entry_pos[full_path(entries[idx])] end local function make_handler(attr) return function(info) vifm.currview().cursor.pos = recent_entry_index(attr, info.count) end end local function make_handler_selector(attr) return function(info) local currview = vifm.currview() local begin = recent_entry_index(attr, info.count) local end_ = currview.cursor.pos if begin > end_ then begin, end_ = end_, begin end local indexes = {} for i = begin, end_ do table.insert(indexes, i) end return { indexes = indexes, cursorpos = indexes[1], } end end local function add_key(key, attr, desc) local added = vifm.keys.add { shortcut = key, description = 'move cursor to recently ' .. desc .. ' entry', modes = { 'normal', 'visual' }, handler = make_handler(attr), } if not added then vifm.sb.error('Failed to register ' .. key) end local added = vifm.keys.add { shortcut = key, description = 'move cursor to recently ' .. desc .. ' entry', modes = { 'normal' }, isselector = true, handler = make_handler_selector(attr), } if not added then vifm.sb.error('Failed to register selector ' .. key) end end add_key('rm', 'mtime', 'modified') add_key('rc', 'ctime', 'changed') add_key('ra', 'atime', 'accessed') return M vifm-0.14/data/plugins/saf-revisions/000077500000000000000000000000001475151500600175655ustar00rootroot00000000000000vifm-0.14/data/plugins/saf-revisions/README.md000066400000000000000000000026261475151500600210520ustar00rootroot00000000000000# saf-revisions Vifm plugin Install vifm plugin by copying or symlinking saf-revisions (plugin folder) to $VIFM/plugins/ (usually ~/.config/vifm/plugins/ or ~/.vifm/plugins/). This will make :Saf* commands available in Vifm: ``` :SafRevisionsToggle -- Activate or deactivate saf-revisions :SafRevisionsActivate -- Turn saf-revisions on :SafRevisionsDeactivate -- Turn saf-revisions off :SafPreviousRevision -- Starfield! Warp! Magic! Back in time. :SafNextRevision -- Starfield! Warp! Magic! Forward in time. ``` Map appropriate keys to saf-revisions plugin functions, pick any unused keys that work for you: ``` bash nnoremap @ :SafRevisionsToggle nnoremap < :SafPreviousRevision nnoremap > :SafNextRevision ``` Start Vifm, then in any folder backed up with saf to local file system backup target (reaching remote targets is not possible at the moment) execute `:SafRevisionsToggle` command, or with definitions like above press `@`. Navigate trough all the backups where folder content is changed with `:SafPreviousRevision` and `:SafNextRevision` functions or keys mapped to those functions. Switch back to normal with another `:SafRevisionsToggle`. > **_NOTE:_** Please keep in mind that you will be browsing actual backup folder content. Changing such content is possible but usually a bad idea. Limit interaction to review and copy content to backup source folder, not the other way around. vifm-0.14/data/plugins/saf-revisions/init.lua000066400000000000000000000103521475151500600212340ustar00rootroot00000000000000--[[ saf-revisions Vifm plugin is providing commands that use https://github.com/dusanx/saf to provide time-machine like restore functionality. Provides :SafRevisionsToggle -- Activate or deactivate saf-revisions :SafRevisionsActivate -- Turn saf-revisions on :SafRevisionsDeactivate -- Turn saf-revisions off :SafPreviousRevision -- Starfield! Warp! Magic! Back in time. :SafNextRevision -- Starfield! Warp! Magic! Forward in time. --]] local active = false local curr_path = nil local other_path = nil local revisions = {} local revisions_pos = nil local function show_revision() if revisions_pos == nil then return end local path = revisions[revisions_pos] if not vifm.currview():cd(path) then vifm.sb.error("Failed to navigate to: "..path..", possibly removed by prune.") return end vifm.sb.info("Saf revision: "..revisions_pos.." of "..#revisions.." in "..curr_path) end local function turn_on() if active then return end -- fetch revisions "saf revisions -q /path" revisions = {} vifm.sb.info("On big folders, saf revisions can take time, please wait...") local path = vifm.currview().cwd local job = vifm.startjob { cmd = 'saf revisions -q "'..path..'"'} for line in job:stdout():lines() do vifm.sb.info("On big folders, saf revisions can take time, please wait... "..line) table.insert(revisions, line) end job:wait() -- did we fetch anything? if #revisions <= 0 then vifm.sb.error("Got Nothing! Is saf in path? Is this dir in backup? Maybe this dir didn't change at all?") revisions = {} return end -- remote dir check, we can't handle remote revisions_pos = 1 check = revisions[revisions_pos] if string.find(check, ":") ~= nil then vifm.sb.error("Looks like remote backup, we can't handle that.") revisions = {} return end -- we have the results active = true curr_path = vifm.currview().cwd other_path = vifm.otherview().cwd if not vifm.otherview():cd(path) then vifm.errordialog("saf", "Failed to navigate to: "..path) end show_revision() end local function turn_off() if not active then return end if not vifm.currview():cd(curr_path) then vifm.errordialog("saf", "Failed to navigate to: "..curr_path) end if not vifm.otherview():cd(other_path) then vifm.errordialog("saf", "Failed to navigate to: "..other_path) end active = false curr_path = nil other_path = nil revisions = {} revisions_pos = nil end local function SafRevisionsToggle(info) if not active then turn_on() else turn_off() end end local function SafRevisionsActivate(info) turn_on() end local function SafRevisionsDeactivate(info) turn_off() end local function SafPreviousRevision(info) if revisions_pos == nil then return end if revisions_pos < #revisions then revisions_pos = revisions_pos + 1 end show_revision() end local function SafNextRevision(info) if revisions_pos == nil then return end if revisions_pos > 1 then revisions_pos = revisions_pos - 1 end show_revision() end -- Add all commands if not vifm.cmds.add { name = "SafRevisionsToggle", description = "turn on or off saf revisions", handler = SafRevisionsToggle } then vifm.sb.error("Failed to register :SafRevisionsToggle") end if not vifm.cmds.add { name = "SafRevisionsActivate", description = "turn on saf revisions", handler = SafRevisionsActivate } then vifm.sb.error("Failed to register :SafRevisionsActivate") end if not vifm.cmds.add { name = "SafRevisionsDeactivate", description = "turn off saf revisions", handler = SafRevisionsDeactivate } then vifm.sb.error("Failed to register :SafRevisionsDeactivate") end if not vifm.cmds.add { name = "SafPreviousRevision", description = "navigate to previous revision", handler = SafPreviousRevision } then vifm.sb.error("Failed to register :SafPreviousRevision") end if not vifm.cmds.add { name = "SafNextRevision", description = "navigate to next revision", handler = SafNextRevision } then vifm.sb.error("Failed to register :SafNextRevision") end return {} vifm-0.14/data/plugins/statusbar/000077500000000000000000000000001475151500600170055ustar00rootroot00000000000000vifm-0.14/data/plugins/statusbar/init.lua000066400000000000000000000012601475151500600204520ustar00rootroot00000000000000--[[ Example of displaying target of symbolic links on statusline. Usage example for `vifmrc`: set statusline=#statusbar#fmt --]] local function fmt(info) local view = info.view local entry = view.cursor:entry() local format = " %t%=%A %10u:%-7g %15s %20d " if entry.type == 'link' then local target = entry.gettarget() target = string.gsub(target, "%%", "%%%%") format = " %t -> " .. target .. " %= %A %10u:%-7g %15s %20d " end return { format = format } end local added = vifm.addhandler { name = "fmt", handler = fmt, } if not added then vifm.sb.error("Failed to register #%s#fmt", vifm.plugin.name) end return {} vifm-0.14/data/plugins/tabline/000077500000000000000000000000001475151500600164135ustar00rootroot00000000000000vifm-0.14/data/plugins/tabline/init.lua000066400000000000000000000043761475151500600200730ustar00rootroot00000000000000--[[ Example of a custom powerline-like tab line. Usage example for `vifmrc`: set tabline=#tabline#fmt User colors for a color scheme: " colors: " - active tab bg = 231 " - active tab fg = 232 " - inactive tab bg = 237 " - inactive tab fg = 7 hi User11 ctermfg=232 ctermbg=231 cterm=bold " active start hi User12 ctermfg=231 ctermbg=237 cterm=bold " active-to-inactive end hi User13 ctermfg=231 ctermbg=-1 cterm=bold " last active end hi User14 ctermfg=7 ctermbg=237 cterm=bold " inactive start hi User15 ctermfg=237 ctermbg=231 cterm=bold " before active end hi User16 ctermfg=237 ctermbg=-1 cterm=bold " last inactive end --]] local function fmt(info) local ntabs = vifm.tabs.getcount({ other = info.other }) local ctab = vifm.tabs.getcurrent({ other = info.other }) local format = '' for idx = 1, ntabs do local tab = vifm.tabs.get({ index = idx, other = info.other }) local view = tab:getview() local name = tab:getname() if #name == 0 then name = vifm.fnamemodify(view.cwd, ':t') .. '/' end local cv = view.custom if cv ~= nil then local title = cv.title if cv.type == 'tree' then title = 'tree' end name = string.format('[%s] %s', title, name) end name = string.gsub(name, '%%', '%%%%') local islast = (idx == ntabs) local active = (idx == ctab) local startc = active and 11 or 14 local endc if active then endc = islast and 13 or 12 else endc = islast and 16 or 15 end -- special case: inactive tab followed by another inactive tab local tail = '' if not active and not islast and idx ~= ctab - 1 then tail = '' endc = 14 end local label = string.format('%%%d* %d: %s %%%d*%s', startc, idx, name, endc, tail) format = format .. label end return { format = format } end local added = vifm.addhandler { name = 'fmt', handler = fmt, } if not added then vifm.sb.error('Failed to register #%s#fmt', vifm.plugin.name) end return {} vifm-0.14/data/plugins/ueberzug/000077500000000000000000000000001475151500600166255ustar00rootroot00000000000000vifm-0.14/data/plugins/ueberzug/README.md000066400000000000000000000057561475151500600201210ustar00rootroot00000000000000## Ueberzug Plugin to integrate a Überzug-compatible graphical previewer. Known implementations: | What | Where to find | :--: | :-----------: | Original (discontinued) | https://github.com/seebye/ueberzug | Fork of Python version | https://github.com/ueber-devel/ueberzug | Improved rewrite in C++ | https://github.com/jstkdng/ueberzugpp ### Installation Copy this directory to `$VIFM/plugins`. `$VIFM` is likely to be either `~/.config/vifm` or `~/.vifm`. Create the plugins directory if it doesn't exist. ### Configuration Copy lines corresponding to filetypes that you wish to preview to your `vifmrc` (usually to be found at `$VIFM/vifmrc`). ```vim " If you are using ueberzugpp, you can have animated gif previews with this: fileviewer \ #ueberzug#image_no_cache %px %py %pw %ph \ %pc \ #ueberzug#clear " Otherwise, use the video fileviewer for gifs " fileviewer