* bug#20322: 25.0.50; indent-tabs-mode should default to nil @ 2015-04-14 2:37 Dmitry Gutov 2015-04-14 3:07 ` Stefan Monnier 2015-04-14 14:17 ` Eli Zaretskii 0 siblings, 2 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-14 2:37 UTC (permalink / raw) To: 20322 Is there a reason it's t by default? There are different personal preferences for indentation, but spaces are used quite a bit more often than tabs, in most languages I'm familiar with. Having it be nil by default (but set locally by modes that really need it, like makefile-mode) will mean that most users won't have to customize it. In GNU Emacs 25.0.50.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.12.2) of 2015-04-14 on axl Repository revision: 56dfd3de9c63dbb6325129de8e38c420808146c9 Windowing system distributor `The X.Org Foundation', version 11.0.11601901 System Description: Ubuntu 14.10 ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 2:37 bug#20322: 25.0.50; indent-tabs-mode should default to nil Dmitry Gutov @ 2015-04-14 3:07 ` Stefan Monnier 2015-04-14 14:14 ` Dmitry Gutov ` (2 more replies) 2015-04-14 14:17 ` Eli Zaretskii 1 sibling, 3 replies; 87+ messages in thread From: Stefan Monnier @ 2015-04-14 3:07 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Is there a reason it's t by default? There was probably a reason originally. Nowadays, I think the main reason it's t is because there's no sufficiently good reason to change it (the hypothetical benefit of change will be smaller than the pain of having to suffer through too many people bitching at the change). I.e. this is kind of like endianness. Stefan ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 3:07 ` Stefan Monnier @ 2015-04-14 14:14 ` Dmitry Gutov 2015-04-14 15:25 ` Eli Zaretskii 2015-04-14 19:09 ` Achim Gratz 2015-04-15 2:33 ` Richard Stallman [not found] ` <<E1YiD8o-000318-H5@fencepost.gnu.org> 2 siblings, 2 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-14 14:14 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322 On 04/14/2015 06:07 AM, Stefan Monnier wrote: > There was probably a reason originally. Nowadays, I think the main > reason it's t is because there's no sufficiently good reason to change > it (the hypothetical benefit of change will be smaller than the pain of > having to suffer through too many people bitching at the change). Let's do a trial in master, to see how much bitching this results in? :) Consider this: when initially diving into Emacs (coming from some experience with two IDEs), I was learning how to configure indentation in different modes. The necessary steps were: 1) Find the variable `indent-tabs-mode'. See it doesn't help with the amount of indentation per level, keep looking. Same with `tab-width'. 2) Find the language-dependent variables (js-indent-level, css-indent-offset and c-basic-offset). It doesn't help that each one is named in a different fashion. 3) Notice that while it almost works like intended, sometimes you get tabs inserted. Go back to `indent-tabs-mode', put `(setq indent-tabs-mode nil)` in the init file, see that it doesn't help. 4) Find out about buffer-local-ness and `setq-default'. That finally does it. The above steps required certain persistence. > I.e. this is kind of like endianness. One could say that about any variable with existing default value, no? I think it's different enough: the current users should know pretty easily how to change it, whereas it's usually a bigger issue for newcomers. Better defaults would result in a better initial experience bringing the adoption up somewhat; on the flip side, I can't imagine anyone quitting Emacs over this default value. And since this value is not just a user preference (it's project-dependent), even those who prefer tabs have probably had to use a different value at some point. So they know what to change. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 14:14 ` Dmitry Gutov @ 2015-04-14 15:25 ` Eli Zaretskii 2015-04-14 15:39 ` Dmitry Gutov 2015-04-14 19:09 ` Achim Gratz 1 sibling, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-04-14 15:25 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Date: Tue, 14 Apr 2015 17:14:14 +0300 > From: Dmitry Gutov <dgutov@yandex.ru> > Cc: 20322@debbugs.gnu.org > > Consider this: when initially diving into Emacs (coming from some > experience with two IDEs), I was learning how to configure indentation > in different modes. The necessary steps were: The alternative is not to configure indentation at all, but instead to use the defaults, which are quite reasonable. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 15:25 ` Eli Zaretskii @ 2015-04-14 15:39 ` Dmitry Gutov 2015-04-14 15:59 ` Eli Zaretskii 2015-04-14 17:15 ` Stefan Monnier 0 siblings, 2 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-14 15:39 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 04/14/2015 06:25 PM, Eli Zaretskii wrote: > The alternative is not to configure indentation at all, but instead to > use the defaults, which are quite reasonable. No, they're not. They're only so in major modes that set several of the related variables locally (e.g. ruby-mode, and python-mode as I see now). Speaking of JavaScript, the defaults do not conform to the current convention (2 spaces, no tabs). I'm not 100% sure what's the split in C and C++ communities, but Java favors spaces as well. Even folks who want tabs have to configure stuff, because of our `tab-width' default (which is indeed something we cannot change now): http://stackoverflow.com/a/21788651/615245 ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 15:39 ` Dmitry Gutov @ 2015-04-14 15:59 ` Eli Zaretskii 2015-04-14 20:24 ` Dmitry Gutov 2015-04-14 17:15 ` Stefan Monnier 1 sibling, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-04-14 15:59 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Date: Tue, 14 Apr 2015 18:39:40 +0300 > From: Dmitry Gutov <dgutov@yandex.ru> > CC: 20322@debbugs.gnu.org > > On 04/14/2015 06:25 PM, Eli Zaretskii wrote: > > > The alternative is not to configure indentation at all, but instead to > > use the defaults, which are quite reasonable. > > No, they're not. Then by all means let's fix those modes whose defaults aren't. > I'm not 100% sure what's the split in C and C++ communities The vast majority of people I work with use tabs, FWIW. > Even folks who want tabs have to configure stuff, because of our > `tab-width' default (which is indeed something we cannot change now): > http://stackoverflow.com/a/21788651/615245 Our tab-width default is simply the default tab width everywhere. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 15:59 ` Eli Zaretskii @ 2015-04-14 20:24 ` Dmitry Gutov 2015-04-14 21:43 ` Stefan Monnier ` (2 more replies) 0 siblings, 3 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-14 20:24 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 04/14/2015 06:59 PM, Eli Zaretskii wrote: > Then by all means let's fix those modes whose defaults aren't. So, most of them? Like I said, in the end that would call for the change of the default value. In the meantime, should we have an xxx-indent-tabs-mode variable per major mode? Here's some statistics: http://sideeffect.kr/popularconvention/#java (you can click on the language names), sources at https://github.com/outsideris/popularconvention I understand that C (and, to lesser extent, C++) have a lot of history, and a lot of variance in their communities. But the only semi-official style guide I could find that advises to use tabs in the Linux kernel one: http://www.maultech.com/chrislott/resources/cstyle/LinuxKernelCodingStyle.txt The GNU coding style, to the best of my understanding, does not mention tabs at all. > The vast majority of people I work with use tabs, FWIW. Do they use 8-column offsets, then? >> Even folks who want tabs have to configure stuff, because of our >> `tab-width' default (which is indeed something we cannot change now): >> http://stackoverflow.com/a/21788651/615245 > > Our tab-width default is simply the default tab width everywhere. I'm not sure what you mean by that, but my point was, the defaults are not suitable as-is (even) for a certain part of our users that use tabs. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 20:24 ` Dmitry Gutov @ 2015-04-14 21:43 ` Stefan Monnier 2015-04-14 22:17 ` Dmitry Gutov 2015-04-15 16:10 ` Eli Zaretskii 2015-12-26 14:27 ` Dmitry Gutov 2 siblings, 1 reply; 87+ messages in thread From: Stefan Monnier @ 2015-04-14 21:43 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Here's some statistics: http://sideeffect.kr/popularconvention/#java (you > can click on the language names), sources at > https://github.com/outsideris/popularconvention This doesn't seem to talk about the same thing as what indent-tabs-mode does. I haven't looked at the code they use, but at least the example they give is: function foo() { return "bar"; } vs function foo() { // use tab for indentation return "bar"; } whereas indent-tabs-mode does not influence which column is used, only which chars are used to get there. Stefan ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 21:43 ` Stefan Monnier @ 2015-04-14 22:17 ` Dmitry Gutov 2015-04-15 1:19 ` Stefan Monnier 0 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-04-14 22:17 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322 On 04/15/2015 12:43 AM, Stefan Monnier wrote: > This doesn't seem to talk about the same thing as what indent-tabs-mode does. > I haven't looked at the code they use, but at least the example they > give is: > function foo() { > return "bar"; > } > > vs > > function foo() { > // use tab for indentation > return "bar"; > } > > whereas indent-tabs-mode does not influence which column is used, only > which chars are used to get there. The examples are admittedly bad (not sure why; maybe because the author found it non-trivial to insert a tab in the middle of a string literal, in their editor). Also see the Ruby one, where both sides of the comparison use 2-space offset. However, the implementation seems to do the right thing: https://github.com/outsideris/popularconvention/blob/master/src/parser/js-parser.coffee#L99-L100 https://github.com/outsideris/popularconvention/blob/master/src/parser/java-parser.coffee#L51-L52 https://github.com/outsideris/popularconvention/blob/master/src/parser/php-parser.coffee#L59-L60 Anyway, the results seem to coincide with what's I've seen in practice. If they can actually change someone's position, we can double-check them, run the analysis ourselves, look for other statistics, etc. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 22:17 ` Dmitry Gutov @ 2015-04-15 1:19 ` Stefan Monnier 2015-04-15 2:08 ` Dmitry Gutov 0 siblings, 1 reply; 87+ messages in thread From: Stefan Monnier @ 2015-04-15 1:19 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > However, the implementation seems to do the right thing: > https://github.com/outsideris/popularconvention/blob/master/src/parser/js-parser.coffee#L99-L100 This seems to count the number of lines which start with a SPC and those which start with a TAB. If your indentation rules use an indentation step of 2, you'd likely get many more lines that start with SPC regardless of indent-tabs-mode (just because most lines of code are less indented than 8 columns). So, I don't think it does the right test. I think the right test would be tab = /^\t/ space = /^\s\s\s\s\s\s\s\s/ -- Stefan ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-15 1:19 ` Stefan Monnier @ 2015-04-15 2:08 ` Dmitry Gutov 2015-04-15 4:19 ` Stefan Monnier 2015-04-15 14:31 ` Wolfgang Jenkner 0 siblings, 2 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-15 2:08 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322 On 04/15/2015 04:19 AM, Stefan Monnier wrote: >> However, the implementation seems to do the right thing: > >> https://github.com/outsideris/popularconvention/blob/master/src/parser/js-parser.coffee#L99-L100 > > This seems to count the number of lines which start with a SPC and those > which start with a TAB. That sounds right. But I'd say the projects that mix tabs and spaces must be a minority among those that use tabs at all. > If your indentation rules use an indentation step of 2, you'd likely get > many more lines that start with SPC regardless of indent-tabs-mode > (just because most lines of code are less indented than 8 columns). I don't actually recall seeing code intentionally mixing tabs and spaces like that, ever, before looking at Emacs's sources. > So, I don't think it does the right test. I think the right test would be > > tab = /^\t/ > space = /^\s\s\s\s\s\s\s\s/ That would be more correct indeed. Again, if you think the results of this can matter in some future decision, I can spend the time to apply the fix, deploy it myself and rerun the analysis. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-15 2:08 ` Dmitry Gutov @ 2015-04-15 4:19 ` Stefan Monnier 2015-04-20 14:56 ` Dmitry Gutov 2015-04-15 14:31 ` Wolfgang Jenkner 1 sibling, 1 reply; 87+ messages in thread From: Stefan Monnier @ 2015-04-15 4:19 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > That would be more correct indeed. Again, if you think the results of this > can matter in some future decision, I can spend the time to apply the fix, > deploy it myself and rerun the analysis. For most major modes, you don't need to convince me (because I just don't know that language enough to have an opinion), but in any case if the decision is based on such analysis (which could make sense), then I think it's worth making the analysis correct, indeed. Stefan ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-15 4:19 ` Stefan Monnier @ 2015-04-20 14:56 ` Dmitry Gutov 2015-04-20 19:26 ` Stefan Monnier 0 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-04-20 14:56 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322 On 04/15/2015 07:19 AM, Stefan Monnier wrote: > For most major modes, you don't need to convince me (because I just > don't know that language enough to have an opinion), but in any case > if the decision is based on such analysis (which could make sense), then > I think it's worth making the analysis correct, indeed. Looking into this more, your suggestion favors tabs, a lot. Since (as I can tell from looking at all "tabs vs spaces" blog posts, discussions, etc, and from recalling my petulant youth), the prevailing approach is to use one tab per indent level, whereas /^ {8}/ matches 1-4 indent levels, depending on the language and project (but usually 2 for Java and 4 for JS), we skip a lot of space-indented lines. Keeping this in mind, here's some results. I've ran through all 2015-01-01 diffs (which is admittedly not the best date; as far as bias in concerned), and counted the "added" lines matching either regexp. Doing this for the rest of the January would take a few more days, and I'm not sure if that's really valuable, considering the above. C: tabs => 1241263, spaces => 636266 C++: tabs => 466087, spaces => 926052 JS: tabs => 8430336, spaces => 11739058 Java: tabs => 7620803, spaces => 1509610 Elisp: tabs => 150071, spaces => 185015 You can look at the implementation here: https://gist.github.com/dgutov/addc25762453c5a205ea To run it locally, one would also need to download the files for January, from https://www.githubarchive.org/ (it comes out to ~460MB per day), and a persistent Internet connection to actually download the diffs. If anyone wants, I can also post the fairly verbose (as you can see from the script) log from the current run. It's 15MB gzipped. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-20 14:56 ` Dmitry Gutov @ 2015-04-20 19:26 ` Stefan Monnier 2015-04-20 22:09 ` Dmitry Gutov 0 siblings, 1 reply; 87+ messages in thread From: Stefan Monnier @ 2015-04-20 19:26 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Doing this for the rest of the January would take a few more days, and I'm > not sure if that's really valuable, considering the above. > C: tabs => 1241263, spaces => 636266 > C++: tabs => 466087, spaces => 926052 > JS: tabs => 8430336, spaces => 11739058 > Java: tabs => 7620803, spaces => 1509610 > Elisp: tabs => 150071, spaces => 185015 Ah, so the units are lines? Indeed, then this can be strongly biased if people use smaller tab-width than 8. It seems it would make more sense to count files (or projects), where each file gets to be counted either as SPC or as TAB depending on whether it has more lines that use TAB than lines that use either spaces. This way, the bias only affects a file at a time, which should be insignificant if we assume that those files should use a consistent style (i.e. either 99% TABs or 99% SPC). Stefan ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-20 19:26 ` Stefan Monnier @ 2015-04-20 22:09 ` Dmitry Gutov 2015-04-21 1:25 ` Stefan Monnier 0 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-04-20 22:09 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322 On 04/20/2015 10:26 PM, Stefan Monnier wrote: > Ah, so the units are lines? Indeed, then this can be strongly biased if > people use smaller tab-width than 8. > > It seems it would make more sense to count files (or projects), where > each file gets to be counted either as SPC or as TAB depending on > whether it has more lines that use TAB than lines that use either spaces. That sounds better, but still would discount the JavaScript files with less than 4 levels of nesting (unless we only count each project once; but I think the project size is important, too). And in our case, any hunks which didn't include this level of nesting (see the caveat at the bottom). Here's updated counts (in number of files), produced by parsing the log (one you can download here: http://dropcanvas.com/3mwn1): C: tabs => 17422, spaces => 6509 C++: tabs => 7366, spaces => 17155 JS: tabs => 30100, spaces => 73370 Java: tabs => 66922, spaces => 38243 Elisp: tabs => 515, spaces => 1465 (The ratio for C became even more tab-favored, but others seem to have moved towards spaces). Script: File.open("print.log", "r") do |file| results = Hash[%w(c cpp js java el).map { |ext| [ext, {tabs: 0, spaces: 0}]}] file_re = /\.(#{results.keys.join("|")}): spaces ([0-9]+), tabs ([0-9]+)$/ file.each_line do |line| if line =~ file_re ext = $~[1] spaces = $~[2].to_i tabs = $~[3].to_i ext_results = results[ext] if spaces > tabs ext_results[:spaces] += 1 elsif spaces < tabs ext_results[:tabs] += 1 end end end puts results end > This way, the bias only affects a file at a time, which should be > insignificant if we assume that those files should use a consistent > style (i.e. either 99% TABs or 99% SPC). CAVEAT: The above was still only the result of the diffs analysis, and didn't examine the files in their entirety (the original run took more than 8 hours here, and downloading the actual files is bound to take an order of magnitude more, just for January 1st). But to get a feeling for the margin of error, here's the result of running a modified script, which sorted all "spaces 0, tabs 0" files into the "spaces" bucket: C: tabs => 17422, spaces => 16683 C++: tabs => 7366, spaces => 44641 JS: tabs => 30100, spaces => 143709 Java: tabs => 66922, spaces => 98886 Elisp: tabs => 515, spaces => 2423 So yeah, it seems C programmers favored tabs either way that day. The Java programmers, however, are undecided. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-20 22:09 ` Dmitry Gutov @ 2015-04-21 1:25 ` Stefan Monnier 2015-04-21 19:25 ` Dmitry Gutov 0 siblings, 1 reply; 87+ messages in thread From: Stefan Monnier @ 2015-04-21 1:25 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > But to get a feeling for the margin of error, here's the result of > running a modified script, which sorted all "spaces 0, tabs 0" files into > the "spaces" bucket: > C: tabs => 17422, spaces => 16683 > C++: tabs => 7366, spaces => 44641 > JS: tabs => 30100, spaces => 143709 > Java: tabs => 66922, spaces => 98886 > Elisp: tabs => 515, spaces => 2423 That suggests that it might be OK to set indent-tabs-mode to nil in javascript-mode and in elisp-mode. Maybe even in C++. But clearly not in C nor in Java. Stefan ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-21 1:25 ` Stefan Monnier @ 2015-04-21 19:25 ` Dmitry Gutov 2015-04-21 19:47 ` Eli Zaretskii ` (2 more replies) 0 siblings, 3 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-21 19:25 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322 On 04/21/2015 04:25 AM, Stefan Monnier wrote: > That suggests that it might be OK to set indent-tabs-mode to nil in > javascript-mode and in elisp-mode. Maybe even in C++. But clearly not > in C nor in Java. C -- seems so. But I disagree about Java: my run was inconclusive, and the analysis I originally linked to, http://sideeffect.kr/popularconvention/#java (66% spaces), is almost (thought not quite) within the margin of error. The "\s\s" vs "\s{8}" distinction is also unlikely to matter in that community, because if they do use tabs, it's almost always one tab per indent level. Any Java developers reading this should feel free to contradict me. Considering that Java is a corporate-driven language, and both Oracle's and Google's Java style guides advise to use spaces, it seems to be the way to go. Now, provided we agree to default to spaces in the majority of the popular programming languages modes, what's the reasoning not to flip the default? Have I missed some important languages (note that Python and Ruby are already covered), or is using tabs supposed to be beneficial for the text modes? ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-21 19:25 ` Dmitry Gutov @ 2015-04-21 19:47 ` Eli Zaretskii 2015-04-22 15:02 ` Dmitry Gutov 2015-04-21 20:27 ` Stefan Monnier 2015-04-22 13:56 ` Stefan Monnier 2 siblings, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-04-21 19:47 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Date: Tue, 21 Apr 2015 22:25:23 +0300 > From: Dmitry Gutov <dgutov@yandex.ru> > Cc: 20322@debbugs.gnu.org > > On 04/21/2015 04:25 AM, Stefan Monnier wrote: > > > That suggests that it might be OK to set indent-tabs-mode to nil in > > javascript-mode and in elisp-mode. Maybe even in C++. But clearly not > > in C nor in Java. > > C -- seems so. Please don't make different defaults for C and C++. These are very closely related languages, and there are many projects that start as C and then migrate to C++ (GCC, for example). It would be confusing to have the defaults suddenly change under you when that happens. > Now, provided we agree to default to spaces in the majority of the > popular programming languages modes, what's the reasoning not to flip > the default? If you flip the default (I guess in prog-mode?) and then change the mode switch function to restore the current value, there's no reason not to flip the default, since doing that will not affect those modes in any way. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-21 19:47 ` Eli Zaretskii @ 2015-04-22 15:02 ` Dmitry Gutov 2015-04-22 15:18 ` Eli Zaretskii 0 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-04-22 15:02 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 04/21/2015 10:47 PM, Eli Zaretskii wrote: > Please don't make different defaults for C and C++. These are very > closely related languages, and there are many projects that start as C > and then migrate to C++ (GCC, for example). It would be confusing to > have the defaults suddenly change under you when that happens. From where I'm standing, it's an argument to just use spaces for both C and C++. But anyway, I don't think project migration is a good problem example. There are a lot things to do during that kind of migration, and adding an `indent-tabs-mode' to dir-locals.el should be trivial in comparison. A project that lives long enough to migrate must already have this file. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-22 15:02 ` Dmitry Gutov @ 2015-04-22 15:18 ` Eli Zaretskii 2015-04-22 15:23 ` Dmitry Gutov 0 siblings, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-04-22 15:18 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Date: Wed, 22 Apr 2015 18:02:28 +0300 > From: Dmitry Gutov <dgutov@yandex.ru> > CC: 20322@debbugs.gnu.org > > On 04/21/2015 10:47 PM, Eli Zaretskii wrote: > > > Please don't make different defaults for C and C++. These are very > > closely related languages, and there are many projects that start as C > > and then migrate to C++ (GCC, for example). It would be confusing to > > have the defaults suddenly change under you when that happens. > > From where I'm standing, it's an argument to just use spaces for both C > and C++. > > But anyway, I don't think project migration is a good problem example. > There are a lot things to do during that kind of migration, and adding > an `indent-tabs-mode' to dir-locals.el should be trivial in comparison. I meant the actual usage of tabs/spaces in the files. That, of course, doesn't change when the project migrates. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-22 15:18 ` Eli Zaretskii @ 2015-04-22 15:23 ` Dmitry Gutov 2015-04-22 15:28 ` Eli Zaretskii 0 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-04-22 15:23 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 04/22/2015 06:18 PM, Eli Zaretskii wrote: > I meant the actual usage of tabs/spaces in the files. That, of > course, doesn't change when the project migrates. I don't see how this contradicts my previous message. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-22 15:23 ` Dmitry Gutov @ 2015-04-22 15:28 ` Eli Zaretskii 2015-04-22 15:49 ` Dmitry Gutov 0 siblings, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-04-22 15:28 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Date: Wed, 22 Apr 2015 18:23:06 +0300 > From: Dmitry Gutov <dgutov@yandex.ru> > CC: 20322@debbugs.gnu.org > > On 04/22/2015 06:18 PM, Eli Zaretskii wrote: > > > I meant the actual usage of tabs/spaces in the files. That, of > > course, doesn't change when the project migrates. > > I don't see how this contradicts my previous message. I thought it was obvious: Changing the whitespace usage is not a simple job, and no one will normally do that. So having different defaults will silently and subtly cause a change in project-wide conventions, something that I think is undesirable. There are also mixed C/C++ projects, where different defaults will cause similar problems. In short, these two languages are just too similar and inter-related to justify using the same defaults in this regard. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-22 15:28 ` Eli Zaretskii @ 2015-04-22 15:49 ` Dmitry Gutov 0 siblings, 0 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-22 15:49 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 04/22/2015 06:28 PM, Eli Zaretskii wrote: > I thought it was obvious: Changing the whitespace usage is not a > simple job, and no one will normally do that. What I'm suggesting is that such a project would add an entry to dir-locals, to solidify its current conventions. They've probably done it already: > So having different > defaults will silently and subtly cause a change in project-wide > conventions, something that I think is undesirable. Sneaky changes are not only caused by changed defaults. Some members of the team might have different tabs-indent-mode values set up in their configs. The only way to guard against that is to do the above anyway. > In short, these two languages are just too similar and inter-related > to justify using the same defaults in this regard. Well, like mentioned before, exceptions add complexity. So it's not like I really disagree. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-21 19:25 ` Dmitry Gutov 2015-04-21 19:47 ` Eli Zaretskii @ 2015-04-21 20:27 ` Stefan Monnier 2015-04-21 20:51 ` Dmitry Gutov 2015-04-22 13:56 ` Stefan Monnier 2 siblings, 1 reply; 87+ messages in thread From: Stefan Monnier @ 2015-04-21 20:27 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > But I disagree about Java: my run was inconclusive, and the Exactly. Which means it doesn't justify a change. Stefan ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-21 20:27 ` Stefan Monnier @ 2015-04-21 20:51 ` Dmitry Gutov 0 siblings, 0 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-21 20:51 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322 On 04/21/2015 11:27 PM, Stefan Monnier wrote: > Exactly. Which means it doesn't justify a change. Like I said, there's no reason not to trust the original results on the Java front. Should I remind here that the common "tabs indentation" style used by Java programmers is different from what our defaults provide (which is mixed tabs and spaces, http://www.emacswiki.org/pics/static/TabsSpacesBoth.png)? As it is, we serve neither crowd, and changing the `tab-width' default is infeasible. I've spent two years doing Java at the beginning of my career, so I'm familiar with the trending bike shed colors there (even if that was several years ago). ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-21 19:25 ` Dmitry Gutov 2015-04-21 19:47 ` Eli Zaretskii 2015-04-21 20:27 ` Stefan Monnier @ 2015-04-22 13:56 ` Stefan Monnier 2015-04-22 14:59 ` Dmitry Gutov 2 siblings, 1 reply; 87+ messages in thread From: Stefan Monnier @ 2015-04-22 13:56 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Now, provided we agree to default to spaces in the majority of the popular > programming languages modes, what's the reasoning not to flip the default? The reasoning is simple: the actual value matters much less than the fact that it is changed. If the default had been nil, I'd also oppose a change to set it to t for the same reason. IOW it is pure inertia. *Very* few people would come a thank us for the change, but many more will complaint. Stefan ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-22 13:56 ` Stefan Monnier @ 2015-04-22 14:59 ` Dmitry Gutov 2015-04-22 16:47 ` Stefan Monnier 2015-11-02 18:18 ` Dmitry Gutov 0 siblings, 2 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-22 14:59 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322 On 04/22/2015 04:56 PM, Stefan Monnier wrote: > IOW it is pure inertia. *Very* few people would come a thank us for the > change, but many more will complaint. But we'd have the same problem if we change the value in specific modes (which include all the popular programming languages where tabs aren't mandatory, maybe sans cc-mode supported ones). Maybe with fewer people (excluding folks who prefer tabs but don't use any of the modes where it's changed), but the affected people would be more annoyed, because changing it back will be more complicated for them. The users who most benefit from better defaults are of course the ones we don't have yet. They won't give thanks for this, but that doesn't mean it's not valuable. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-22 14:59 ` Dmitry Gutov @ 2015-04-22 16:47 ` Stefan Monnier 2015-11-02 18:18 ` Dmitry Gutov 1 sibling, 0 replies; 87+ messages in thread From: Stefan Monnier @ 2015-04-22 16:47 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 >> IOW it is pure inertia. *Very* few people would come a thank us for the >> change, but many more will complaint. > But we'd have the same problem if we change the value in specific modes Fundamentally, yes, but the number of people will be affected. If the number of people who will be annoyed is small enough (e.g. because it's a mode that's rarely used, or because most users will be happy about the change), then it's OK. > of the modes where it's changed), but the affected people would be more > annoyed, because changing it back will be more complicated for them. I don't buy the "more complicated" argument. There are circumstances where it will be marginally more complicated but in any case (add-hook 'foo-mode-hook (lambda () (setq indent-tabs-mode <bar>))) is the recommended way to set it and that will work just fine. Remember: TAB-vs-SPC is like arguing about which primer we should use before painting the bikeshed. Any gain will be minuscule, so the pain has to be correspondingly minuscule. Stefan ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-22 14:59 ` Dmitry Gutov 2015-04-22 16:47 ` Stefan Monnier @ 2015-11-02 18:18 ` Dmitry Gutov 2015-11-02 20:37 ` John Wiegley 1 sibling, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-11-02 18:18 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322 On 04/22/2015 05:59 PM, Dmitry Gutov wrote: > The users who most benefit from better defaults are of course the ones > we don't have yet. They won't give thanks for this, but that doesn't > mean it's not valuable. Here's another confused user: https://www.reddit.com/r/emacs/comments/3r8ec2/my_indentation_in_js2mode_is_messed_up_need_some/ ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-11-02 18:18 ` Dmitry Gutov @ 2015-11-02 20:37 ` John Wiegley 2015-11-02 21:03 ` Dmitry Gutov ` (2 more replies) 0 siblings, 3 replies; 87+ messages in thread From: John Wiegley @ 2015-11-02 20:37 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Stefan Monnier, 20322, rms >>>>> Dmitry Gutov <dgutov@yandex.ru> writes: > On 04/22/2015 05:59 PM, Dmitry Gutov wrote: >> The users who most benefit from better defaults are of course the ones we >> don't have yet. They won't give thanks for this, but that doesn't mean it's >> not valuable. > Here's another confused user: > https://www.reddit.com/r/emacs/comments/3r8ec2/my_indentation_in_js2mode_is_messed_up_need_some/ I would also like to see this be `nil' by default. Eli, Stefan, Richard, do you see a reason not to? John ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-11-02 20:37 ` John Wiegley @ 2015-11-02 21:03 ` Dmitry Gutov 2015-11-02 21:18 ` John Wiegley 2015-11-02 21:06 ` Eli Zaretskii 2015-11-02 23:31 ` Richard Stallman 2 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-11-02 21:03 UTC (permalink / raw) To: John Wiegley; +Cc: Stefan Monnier, 20322, rms On 11/02/2015 10:37 PM, John Wiegley wrote: > I would also like to see this be `nil' by default. Eli, Stefan, Richard, do > you see a reason not to? I believe at least 2 out of 3 aforementioned persons do. Have you read this thread? ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-11-02 21:03 ` Dmitry Gutov @ 2015-11-02 21:18 ` John Wiegley 0 siblings, 0 replies; 87+ messages in thread From: John Wiegley @ 2015-11-02 21:18 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Stefan Monnier, 20322, rms >>>>> Dmitry Gutov <dgutov@yandex.ru> writes: > I believe at least 2 out of 3 aforementioned persons do. Have you read this > thread? Ah, my mail reader didn't present your message to me as if it were part of a larger thread, whose context I missed. So no, I didn't see, but I see them now on the mailing list. I'm still inclined to changed the default, since tabs are fairly evil in general. John ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-11-02 20:37 ` John Wiegley 2015-11-02 21:03 ` Dmitry Gutov @ 2015-11-02 21:06 ` Eli Zaretskii 2015-11-02 21:29 ` John Wiegley 2015-11-02 23:31 ` Richard Stallman 2 siblings, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-11-02 21:06 UTC (permalink / raw) To: John Wiegley; +Cc: dgutov, monnier, 20322, rms > From: "John Wiegley" <jwiegley@gmail.com> > Cc: Stefan Monnier <monnier@IRO.UMontreal.CA>, Eli Zaretskii <eliz@gnu.org>, rms@gnu.org, 20322@debbugs.gnu.org > Date: Mon, 02 Nov 2015 15:37:49 -0500 > > >>>>> Dmitry Gutov <dgutov@yandex.ru> writes: > > > On 04/22/2015 05:59 PM, Dmitry Gutov wrote: > >> The users who most benefit from better defaults are of course the ones we > >> don't have yet. They won't give thanks for this, but that doesn't mean it's > >> not valuable. > > > Here's another confused user: > > https://www.reddit.com/r/emacs/comments/3r8ec2/my_indentation_in_js2mode_is_messed_up_need_some/ > > I would also like to see this be `nil' by default. Eli, Stefan, Richard, do > you see a reason not to? We should poll the users, if we want to revert this very old default. (I will be against ;-) ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-11-02 21:06 ` Eli Zaretskii @ 2015-11-02 21:29 ` John Wiegley 2015-11-02 23:31 ` Richard Stallman 2015-11-03 3:32 ` Eli Zaretskii 0 siblings, 2 replies; 87+ messages in thread From: John Wiegley @ 2015-11-02 21:29 UTC (permalink / raw) To: Eli Zaretskii; +Cc: dgutov, monnier, 20322, rms >>>>> Eli Zaretskii <eliz@gnu.org> writes: > We should poll the users, if we want to revert this very old default. (I > will be against ;-) Where would be a good place to advertise and carry out such a poll? John ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-11-02 21:29 ` John Wiegley @ 2015-11-02 23:31 ` Richard Stallman 2015-11-03 3:32 ` Eli Zaretskii 1 sibling, 0 replies; 87+ messages in thread From: Richard Stallman @ 2015-11-02 23:31 UTC (permalink / raw) To: John Wiegley; +Cc: monnier, 20322, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] I used to announce polls on info-gnu-emacs and help-gnu-emacs. We should continue doing that. In addition we can announce them in gnu.org/software/emacs and in emacswiki. For each poll, we create a mailing list that dumps replies into a file. We use a new list and a new file for each poll. A few weeks after the announcement, we look at the responses in the file. In the announcement, we ask people to state their reasons, their use cases, and how the consequences will be good or bad for them -- not just vote. We evaluate the poll by how much good or bad the choices would do, not by counting votes. We also invite people to suggest other solutions. -- Dr Richard Stallman President, Free Software Foundation (gnu.org, fsf.org) Internet Hall-of-Famer (internethalloffame.org) Skype: No way! See stallman.org/skype.html. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-11-02 21:29 ` John Wiegley 2015-11-02 23:31 ` Richard Stallman @ 2015-11-03 3:32 ` Eli Zaretskii 1 sibling, 0 replies; 87+ messages in thread From: Eli Zaretskii @ 2015-11-03 3:32 UTC (permalink / raw) To: John Wiegley; +Cc: dgutov, monnier, 20322, rms > From: "John Wiegley" <jwiegley@gmail.com> > Cc: dgutov@yandex.ru, monnier@IRO.UMontreal.CA, rms@gnu.org, 20322@debbugs.gnu.org > Date: Mon, 02 Nov 2015 16:29:51 -0500 > > >>>>> Eli Zaretskii <eliz@gnu.org> writes: > > > We should poll the users, if we want to revert this very old default. (I > > will be against ;-) > > Where would be a good place to advertise and carry out such a poll? gnu.emacs.help for starters, I think. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-11-02 20:37 ` John Wiegley 2015-11-02 21:03 ` Dmitry Gutov 2015-11-02 21:06 ` Eli Zaretskii @ 2015-11-02 23:31 ` Richard Stallman 2 siblings, 0 replies; 87+ messages in thread From: Richard Stallman @ 2015-11-02 23:31 UTC (permalink / raw) To: John Wiegley; +Cc: monnier, 20322, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > I would also like to see this be `nil' by default. Eli, Stefan, Richard, do > you see a reason not to? I will try changing it and see what I think. -- Dr Richard Stallman President, Free Software Foundation (gnu.org, fsf.org) Internet Hall-of-Famer (internethalloffame.org) Skype: No way! See stallman.org/skype.html. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-15 2:08 ` Dmitry Gutov 2015-04-15 4:19 ` Stefan Monnier @ 2015-04-15 14:31 ` Wolfgang Jenkner 1 sibling, 0 replies; 87+ messages in thread From: Wolfgang Jenkner @ 2015-04-15 14:31 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 On Wed, Apr 15 2015, Dmitry Gutov wrote: >> If your indentation rules use an indentation step of 2, you'd likely get >> many more lines that start with SPC regardless of indent-tabs-mode >> (just because most lines of code are less indented than 8 columns). > > I don't actually recall seeing code intentionally mixing tabs and > spaces like that, ever, before looking at Emacs's sources. This is also the traditional (and POSIX) behaviour of vi. For example, search for "autoindent, ai" (without the quotes) in http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 20:24 ` Dmitry Gutov 2015-04-14 21:43 ` Stefan Monnier @ 2015-04-15 16:10 ` Eli Zaretskii 2015-04-17 2:48 ` Dmitry Gutov 2015-12-26 14:27 ` Dmitry Gutov 2 siblings, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-04-15 16:10 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Date: Tue, 14 Apr 2015 23:24:54 +0300 > From: Dmitry Gutov <dgutov@yandex.ru> > CC: 20322@debbugs.gnu.org > > On 04/14/2015 06:59 PM, Eli Zaretskii wrote: > > > Then by all means let's fix those modes whose defaults aren't. > > So, most of them? If it turns out that most of the modes need indent-tabs-mode set to nil, you can make it the default in prog-mode, or even in fundamental mode. As long as the modes that don't need to avoid tabs are changed to have the same default as now, I won't object. > Like I said, in the end that would call for the change of the > default value. In the meantime, should we have an > xxx-indent-tabs-mode variable per major mode? I don't see a need for a mode-specific variable in this case; do you? > I understand that C (and, to lesser extent, C++) have a lot of history, > and a lot of variance in their communities. > > But the only semi-official style guide I could find that advises to use > tabs in the Linux kernel one: > http://www.maultech.com/chrislott/resources/cstyle/LinuxKernelCodingStyle.txt > > The GNU coding style, to the best of my understanding, does not mention > tabs at all. Let's just honor history in this case, OK? > > The vast majority of people I work with use tabs, FWIW. > > Do they use 8-column offsets, then? No (that's how I know they use tabs in the first place!). > >> Even folks who want tabs have to configure stuff, because of our > >> `tab-width' default (which is indeed something we cannot change now): > >> http://stackoverflow.com/a/21788651/615245 > > > > Our tab-width default is simply the default tab width everywhere. > > I'm not sure what you mean by that, but my point was, the defaults are > not suitable as-is (even) for a certain part of our users that use tabs. For a customizable option, this is not an issue. I can understand that the new generation may want to get rid of tabs, but since most of that generation don't work in C/C++, I think we can leave those alone for now. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-15 16:10 ` Eli Zaretskii @ 2015-04-17 2:48 ` Dmitry Gutov 2015-04-17 4:58 ` Stefan Monnier ` (2 more replies) 0 siblings, 3 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-17 2:48 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 04/15/2015 07:10 PM, Eli Zaretskii wrote: > If it turns out that most of the modes need indent-tabs-mode set to > nil, you can make it the default in prog-mode, or even in fundamental > mode. Make it the default in fundamental mode means changing the default value of the variable. > As long as the modes that don't need to avoid tabs are changed > to have the same default as now, I won't object. I'm not aware of any popular programming language that doesn't work with tabs for indentation. So "need" is a pretty strong word. If the statistics show that spaces are more popular on GitHub for C and C++, why not follow the logical conclusion and change the defaults for those modes, too? Note that cc-mode also services the needs of Emacs users writing Java and Objective-C (all seven of them), and those folks must be relatively modern-inclined. And while I wouldn't mind leaving this bee's nest "as is", there's no way to do that just for C and C++ without introducing additional complication for users that *do* want to use spaces with those langs. >> Like I said, in the end that would call for the change of the >> default value. In the meantime, should we have an >> xxx-indent-tabs-mode variable per major mode? > > I don't see a need for a mode-specific variable in this case; do you? How, then, will the users change that value? With `add-hook', `xxx-mode-hook' and a lambda function? That's a significant jump in complexity from what's currently needed to change `indent-tabs-mode' - either `setq-default', or actually using the `Customize' interface. Think back to the four "how to configure indentation" steps I listed in an earlier email. Now mode-hooks and lambdas will add one or two new ones, and without a variable, the user will have to figure out somehow that the major mode function changes the `indent-tabs-mode' value. It wouldn't have simplified the scenario for me: at the time I configured Emacs both for JavaScript *and* C (and a few other languages), to do tutorials, exercises and that kind of stuff. >>> The vast majority of people I work with use tabs, FWIW. >> >> Do they use 8-column offsets, then? > > No (that's how I know they use tabs in the first place!). One of us doesn't understand the other here. Just to be sure: I meant `c-basic-offset', not `tab-width'. > For a customizable option, this is not an issue. I can understand > that the new generation may want to get rid of tabs, but since most of > that generation don't work in C/C++, I think we can leave those alone > for now. The question is not what the majority of the "new generation" works in (probably Java, or PHP), but what fraction of C/C++ programmers uses spaces. Anyway, just for an arbitrary example, here's the three projects using C++ that I've looked at most recently. All relevant to Emacs's code assistance (which is the area I'm paying attention to lately): https://github.com/Sarcasm/irony-mode https://github.com/AndersBakken/rtags https://github.com/Valloric/ycmd None of them use tabs. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 2:48 ` Dmitry Gutov @ 2015-04-17 4:58 ` Stefan Monnier 2015-04-17 13:14 ` Dmitry Gutov 2015-04-17 7:26 ` Eli Zaretskii 2015-04-17 7:55 ` Andreas Schwab 2 siblings, 1 reply; 87+ messages in thread From: Stefan Monnier @ 2015-04-17 4:58 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > How, then, will the users change that value? With `add-hook', > `xxx-mode-hook' and a lambda function? Yup. Adding more mode-specific variables to circumvent the problem is not a good idea. If add-hook+lambda is considered too cumbersome, we can wrap it in some function/macro to make it look prettier. I personally find that Custom should grow a way to set the value of those variables "per mode" or maybe even "per directory". Stefan ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 4:58 ` Stefan Monnier @ 2015-04-17 13:14 ` Dmitry Gutov 0 siblings, 0 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-17 13:14 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322 On 04/17/2015 07:58 AM, Stefan Monnier wrote: > Yup. Adding more mode-specific variables to circumvent the problem is > not a good idea. If add-hook+lambda is considered too cumbersome, we > can wrap it in some function/macro to make it look prettier. Even if a user is fine with writing a lambda or using some new macro, they'd still have to fist discover that a specific mode overrides a given variable during its initialization. AFAIK, a lot of fairly experienced users don't routinely use `find-function'. > I personally find that Custom should grow a way to set the value of > those variables "per mode" or maybe even "per directory". "per directory" sounds like an appropriate addition to the project management functionality, which we'll grow any day now. "per mode" sounds easier, and maybe we can start with defining a programmatic API for that. How about a global variable, using the same format as .dir-locals.el contents? And then have an element at the end of `after-change-major-mode-hook' that would apply these values (or simply hardcode that logic in `run-mode-hooks'). One aspect I'm not clear on is how the modes would add elements to it. There'll probably be a button like "erase customization for this mode" in the Customize interface, but how would it know, and how would it convey to the user, that the variable would revert to the mode-specific value, not the global one? ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 2:48 ` Dmitry Gutov 2015-04-17 4:58 ` Stefan Monnier @ 2015-04-17 7:26 ` Eli Zaretskii 2015-04-17 8:11 ` Eli Zaretskii ` (2 more replies) 2015-04-17 7:55 ` Andreas Schwab 2 siblings, 3 replies; 87+ messages in thread From: Eli Zaretskii @ 2015-04-17 7:26 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Date: Fri, 17 Apr 2015 05:48:08 +0300 > From: Dmitry Gutov <dgutov@yandex.ru> > CC: 20322@debbugs.gnu.org > > On 04/15/2015 07:10 PM, Eli Zaretskii wrote: > > > If it turns out that most of the modes need indent-tabs-mode set to > > nil, you can make it the default in prog-mode, or even in fundamental > > mode. > > Make it the default in fundamental mode means changing the default value > of the variable. Yes, I know that. I'm saying that this default doesn't bother me, as long as the modes that I care about still default to non-nil. > > As long as the modes that don't need to avoid tabs are changed > > to have the same default as now, I won't object. > > I'm not aware of any popular programming language that doesn't work with > tabs for indentation. So "need" is a pretty strong word. I meant "need" as in "most users of that language already use spaces". > If the > statistics show that spaces are more popular on GitHub for C and C++, > why not follow the logical conclusion and change the defaults for those > modes, too? I don't consider GitHub to be a representative sample for this matter. > Note that cc-mode also services the needs of Emacs users writing Java > and Objective-C (all seven of them), and those folks must be relatively > modern-inclined. Each one of them has a specific hook to take care of that, if needed. Moreover, if most users of ObjC or Java want spaces, let's make that change in the respective mode, java-mode etc. > And while I wouldn't mind leaving this bee's nest "as is", there's no > way to do that just for C and C++ without introducing additional > complication for users that *do* want to use spaces with those langs. I don't see any complications. Doesn't everyone have their own hooks for every language they use, anyway? I know I do, since almost the first day I started using Emacs. That hook is the place where users could customize the variable, if they don't the defaults. > >> Like I said, in the end that would call for the change of the > >> default value. In the meantime, should we have an > >> xxx-indent-tabs-mode variable per major mode? > > > > I don't see a need for a mode-specific variable in this case; do you? > > How, then, will the users change that value? With `add-hook', > `xxx-mode-hook' and a lambda function? See above; and it doesn't have to be a lambda function, of course. Mine has a name (my-c-stuff, if you want to know) and a doc string. > That's a significant jump in complexity from what's currently needed to > change `indent-tabs-mode' - either `setq-default', or actually using the > `Customize' interface. We are talking about programmers, for whom having a mode hook is not a problem. I'm actually guessing they already have such a hook anyway; I cannot see how one can use a programming-language mode without a lot of customizations, and the place to do that is in a mode hook. This is normal, routine practice in Emacs. > >>> The vast majority of people I work with use tabs, FWIW. > >> > >> Do they use 8-column offsets, then? > > > > No (that's how I know they use tabs in the first place!). > > One of us doesn't understand the other here. Just to be sure: I meant > `c-basic-offset', not `tab-width'. Yes, I know that. People I was talking about don't use 8 columns at all, neither for the tab width, nor for the offsets. > > For a customizable option, this is not an issue. I can understand > > that the new generation may want to get rid of tabs, but since most of > > that generation don't work in C/C++, I think we can leave those alone > > for now. > > The question is not what the majority of the "new generation" works in > (probably Java, or PHP), but what fraction of C/C++ programmers uses spaces. I gave you my personal statistics on that: most of them use tabs. And I personally get annoyed whenever a project asks me to untabify my submissions (but abide, of course). ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 7:26 ` Eli Zaretskii @ 2015-04-17 8:11 ` Eli Zaretskii 2015-04-17 14:17 ` Dmitry Gutov 2015-04-20 15:03 ` Dmitry Gutov 2 siblings, 0 replies; 87+ messages in thread From: Eli Zaretskii @ 2015-04-17 8:11 UTC (permalink / raw) To: dgutov; +Cc: 20322 > Date: Fri, 17 Apr 2015 10:26:44 +0300 > From: Eli Zaretskii <eliz@gnu.org> > Cc: 20322@debbugs.gnu.org > > I'm saying that this default doesn't bother me, as long as the modes > that I care about still default to non-nil. Btw, I'm also okay with introducing a new feature that would keep the current style in existing files, something mentioned by Glenn. I guess this would need a new value of indent-tabs-mode, and code to support that. Maybe this is a compromise everyone would be at least half-happy with. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 7:26 ` Eli Zaretskii 2015-04-17 8:11 ` Eli Zaretskii @ 2015-04-17 14:17 ` Dmitry Gutov 2015-04-17 14:36 ` Eli Zaretskii 2015-04-17 18:12 ` Stefan Monnier 2015-04-20 15:03 ` Dmitry Gutov 2 siblings, 2 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-17 14:17 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 04/17/2015 10:26 AM, Eli Zaretskii wrote: > Yes, I know that. I'm saying that this default doesn't bother me, as > long as the modes that I care about still default to non-nil. It seems that you won't object to changes as long as they don't affect your our experience, even if you'd just have to change one line in your init.el. I mentioned the default value because it's a technical consideration. > I meant "need" as in "most users of that language already use spaces". So, you're open to considering C and C++ in this context, too? > I don't consider GitHub to be a representative sample for this matter. Maybe not, but it's a sample we can research. And Emacs could do worse than become more friendly to the modern-ish audience. Do you have a better sample in mind? > I don't see any complications. Doesn't everyone have their own hooks > for every language they use, anyway? I know I do, since almost the > first day I started using Emacs. That hook is the place where users > could customize the variable, if they don't the defaults. The members of those "everyone" shouldn't be bothered with a change in one tiny default value anyway. I think you're overestimating the savvy-ness of an average Emacs user. Not every beginner is fine with writing Elisp (some spend years without doing so), and the more effort a user's first steps in Emacs take, the more likely they are to settle for something else, because they haven't yet been properly exposed to Emacs's benefits yet. That's why I think the default are important, and that they shouldn't take the entrenched user base so much into account. > See above; and it doesn't have to be a lambda function, of course. > Mine has a name (my-c-stuff, if you want to know) and a doc string. I also use hooks quite a bit in my init script. > We are talking about programmers, for whom having a mode hook is not a > problem. Not necessarily Emacs Lisp programmers, though. > I'm actually guessing they already have such a hook anyway; > I cannot see how one can use a programming-language mode without a lot > of customizations, and the place to do that is in a mode hook. This > is normal, routine practice in Emacs. The user options (and the Customize interface; I think we haven't given up on it yet) should cover the core of what a user might want to change. Here's the sum total of my current ruby-mode tweaks. One `eval-after-load', but no custom functions in ruby-mode-hook: (add-hook 'ruby-mode-hook 'flycheck-mode) (add-hook 'ruby-mode-hook 'robe-mode) (eval-after-load 'ruby-mode '(progn (define-key ruby-mode-map (kbd "C-c :") 'ruby-toggle-hash-syntax) (require 'ruby-end))) Plus a few installed packages, some of which use `add-hook' at the top level. I do have one related `add-hook' with a lambda commented out currently, but it's also tiny, and the above provide a satisfactory experience already. > I gave you my personal statistics on that: most of them use tabs. And > I personally get annoyed whenever a project asks me to untabify my > submissions (but abide, of course). Untabifying (or tabifying) should happen automatically, via project-local settings. There's even a cross-editor specification (as well as an Emacs package) for this: http://editorconfig.org/ ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 14:17 ` Dmitry Gutov @ 2015-04-17 14:36 ` Eli Zaretskii 2015-04-17 15:55 ` Dmitry Gutov 2015-04-17 18:12 ` Stefan Monnier 1 sibling, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-04-17 14:36 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Date: Fri, 17 Apr 2015 17:17:06 +0300 > From: Dmitry Gutov <dgutov@yandex.ru> > CC: 20322@debbugs.gnu.org > > On 04/17/2015 10:26 AM, Eli Zaretskii wrote: > > > Yes, I know that. I'm saying that this default doesn't bother me, as > > long as the modes that I care about still default to non-nil. > > It seems that you won't object to changes as long as they don't affect > your our experience, even if you'd just have to change one line in your > init.el. This argument goes both ways, you know. And no, it's not only my experience, as I mentioned more than once in this thread. > > I meant "need" as in "most users of that language already use spaces". > > So, you're open to considering C and C++ in this context, too? Yes, except that there I have strong views, unlike with most other languages. Are _you_ open to leaving C and C++ at their current defaults? What would it take to convince you doing that? > > I don't consider GitHub to be a representative sample for this matter. > > Maybe not, but it's a sample we can research. And Emacs could do worse > than become more friendly to the modern-ish audience. > > Do you have a better sample in mind? I gave you mine. I've seen, and still see, a lot of C/C++ code written by others, and they all mix spaces and tabs. > > I don't see any complications. Doesn't everyone have their own hooks > > for every language they use, anyway? I know I do, since almost the > > first day I started using Emacs. That hook is the place where users > > could customize the variable, if they don't the defaults. > > The members of those "everyone" shouldn't be bothered with a change in > one tiny default value anyway. True. But changing long-lived defaults always annoys people; you can see evidence to that on help-gnu-emacs almost every day. So we shouldn't change them without a very good reason. And I don't see one in this case. > I think you're overestimating the savvy-ness of an average Emacs user. > Not every beginner is fine with writing Elisp (some spend years without > doing so), and the more effort a user's first steps in Emacs take, the > more likely they are to settle for something else, because they haven't > yet been properly exposed to Emacs's benefits yet. I think you underestimate the widespread use of Google and questions asked on stack-overflow and such likes. People simply collect snippets from there and paste them into their .emacs. Problem solved. > That's why I think the default are important, and that they shouldn't > take the entrenched user base so much into account. But there's nothing wrong with this particular default. It doesn't reduce any functionality. Users that aren't annoyed enough will learn to live with it; those with higher motivation will discover how to change that soon enough. There's no real problem here. Unlike other arguments we had about changing defaults (font-lock, colors, and menus come to mind), this one does not affect any functionality at all. > > See above; and it doesn't have to be a lambda function, of course. > > Mine has a name (my-c-stuff, if you want to know) and a doc string. > > I also use hooks quite a bit in my init script. I think everyone and their dog do. > > We are talking about programmers, for whom having a mode hook is not a > > problem. > > Not necessarily Emacs Lisp programmers, though. I don't think this matters much. When you customize a package, you do that in whatever extension language that package provides. The important aspect here is that programmers are less more likely to become intimidated by the need to make such customizations, in whatever language. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 14:36 ` Eli Zaretskii @ 2015-04-17 15:55 ` Dmitry Gutov 2015-04-17 16:23 ` Eli Zaretskii 0 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-04-17 15:55 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 04/17/2015 05:36 PM, Eli Zaretskii wrote: > This argument goes both ways, you know. You're welcome to use it against myself when an opportunity rises. I don't believe it's the case here. > And no, it's not only my experience, as I mentioned more than once in > this thread. Sure, but one's circle of acquaintances is not the best metric. > Are _you_ open to leaving C and C++ at their current defaults? What > would it take to convince you doing that? A decent statistical analysis of the current active C and C++ projects would do it, if it favors tabs (or at least doesn't favor spaces too heavily), as well as an obvious-enough way for the users to change the indent-tabs-mode value in those modes. > I gave you mine. I've seen, and still see, a lot of C/C++ code > written by others, and they all mix spaces and tabs. While GitHub is not an ideal sample, it's certainly bigger than your sample, don't you agree? And a lot of corporations have been migrating their libre software projects to GitHub in the recent years. > True. But changing long-lived defaults always annoys people; you can > see evidence to that on help-gnu-emacs almost every day. So we > shouldn't change them without a very good reason. And I don't see one > in this case. Considering the size of the Emacs user base, one might say the evidence on help-gnu-emacs is pretty underwhelming (or else we'd be drowning in it). > I think you underestimate the widespread use of Google and questions > asked on stack-overflow and such likes. People simply collect > snippets from there and paste them into their .emacs. Problem solved. Yeah, I guess they do. But that's definitely not ideal. > But there's nothing wrong with this particular default. It doesn't > reduce any functionality. Users that aren't annoyed enough will learn > to live with it; those with higher motivation will discover how to > change that soon enough. There's no real problem here. Unlike other > arguments we had about changing defaults (font-lock, colors, and menus > come to mind), this one does not affect any functionality at all. The indentation style is one of the obvious bikeshedding topics. I suspect a significant fraction of Emacs users try to make it just right in their config from the start. If you think that that value is not a problem, you shouldn't object to changing it to appease the majority either. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 15:55 ` Dmitry Gutov @ 2015-04-17 16:23 ` Eli Zaretskii 0 siblings, 0 replies; 87+ messages in thread From: Eli Zaretskii @ 2015-04-17 16:23 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Date: Fri, 17 Apr 2015 18:55:48 +0300 > From: Dmitry Gutov <dgutov@yandex.ru> > CC: 20322@debbugs.gnu.org > > > But there's nothing wrong with this particular default. It doesn't > > reduce any functionality. Users that aren't annoyed enough will learn > > to live with it; those with higher motivation will discover how to > > change that soon enough. There's no real problem here. Unlike other > > arguments we had about changing defaults (font-lock, colors, and menus > > come to mind), this one does not affect any functionality at all. > > The indentation style is one of the obvious bikeshedding topics. I > suspect a significant fraction of Emacs users try to make it just right > in their config from the start. > > If you think that that value is not a problem, you shouldn't object to > changing it to appease the majority either. No, it means there aren't any good reasons to change the long established defaults. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 14:17 ` Dmitry Gutov 2015-04-17 14:36 ` Eli Zaretskii @ 2015-04-17 18:12 ` Stefan Monnier 2015-04-17 18:18 ` Dmitry Gutov 1 sibling, 1 reply; 87+ messages in thread From: Stefan Monnier @ 2015-04-17 18:12 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Untabifying (or tabifying) should happen automatically, via project-local > settings. There's even a cross-editor specification (as well as an Emacs > package) for this: http://editorconfig.org/ I think adding support for such cross-editor configs would be good. Stefan ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 18:12 ` Stefan Monnier @ 2015-04-17 18:18 ` Dmitry Gutov 0 siblings, 0 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-17 18:18 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322 On 04/17/2015 09:12 PM, Stefan Monnier wrote: > I think adding support for such cross-editor configs would be good. The said project distributes an Emacs plugin: https://github.com/editorconfig/editorconfig-emacs#readme ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 7:26 ` Eli Zaretskii 2015-04-17 8:11 ` Eli Zaretskii 2015-04-17 14:17 ` Dmitry Gutov @ 2015-04-20 15:03 ` Dmitry Gutov 2 siblings, 0 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-20 15:03 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 04/17/2015 10:26 AM, Eli Zaretskii wrote: > People I was talking about don't use 8 columns at > all, neither for the tab width, nor for the offsets. I think that means that the Emacs defaults don't fit them either. It would be nice to have a significant group of people for whom the defaults serve well. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 2:48 ` Dmitry Gutov 2015-04-17 4:58 ` Stefan Monnier 2015-04-17 7:26 ` Eli Zaretskii @ 2015-04-17 7:55 ` Andreas Schwab 2015-04-17 8:12 ` Eli Zaretskii 2015-04-17 10:55 ` Dmitry Gutov 2 siblings, 2 replies; 87+ messages in thread From: Andreas Schwab @ 2015-04-17 7:55 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 Dmitry Gutov <dgutov@yandex.ru> writes: > I'm not aware of any popular programming language that doesn't work with > tabs for indentation. Python is a prominent example (if you use a non-default tab width). Andreas. -- Andreas Schwab, schwab@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 7:55 ` Andreas Schwab @ 2015-04-17 8:12 ` Eli Zaretskii 2015-04-17 10:55 ` Dmitry Gutov 1 sibling, 0 replies; 87+ messages in thread From: Eli Zaretskii @ 2015-04-17 8:12 UTC (permalink / raw) To: Andreas Schwab; +Cc: 20322, dgutov > From: Andreas Schwab <schwab@linux-m68k.org> > Cc: Eli Zaretskii <eliz@gnu.org>, 20322@debbugs.gnu.org > Date: Fri, 17 Apr 2015 09:55:40 +0200 > > Dmitry Gutov <dgutov@yandex.ru> writes: > > > I'm not aware of any popular programming language that doesn't work with > > tabs for indentation. > > Python is a prominent example (if you use a non-default tab width). Indeed, and python.el already sets indent-tabs-mode to nil in its mode function. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 7:55 ` Andreas Schwab 2015-04-17 8:12 ` Eli Zaretskii @ 2015-04-17 10:55 ` Dmitry Gutov 1 sibling, 0 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-17 10:55 UTC (permalink / raw) To: Andreas Schwab; +Cc: 20322 On 04/17/2015 10:55 AM, Andreas Schwab wrote: > Python is a prominent example (if you use a non-default tab width). It's just incompatible with the mix of tabs and spaces. One-tab-per-indent level works just fine. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 20:24 ` Dmitry Gutov 2015-04-14 21:43 ` Stefan Monnier 2015-04-15 16:10 ` Eli Zaretskii @ 2015-12-26 14:27 ` Dmitry Gutov 2015-12-27 2:52 ` Richard Stallman ` (2 more replies) 2 siblings, 3 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-12-26 14:27 UTC (permalink / raw) To: 20322 Here's another recent analysis: http://ukupat.github.io/tabs-or-spaces/ It's different from the previous ones in certain aspects: - Analyses XX most popular GitHub repositories for a given language. - Counts percentage of repositories using a given style, not files. - Uses the algorithm that looks at the lines where indentation changes (https://github.com/sindresorhus/detect-indent/), mostly to distinguish between different offsets in spaces-based indentation. https://github.com/ukupat/tabs-or-spaces ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-26 14:27 ` Dmitry Gutov @ 2015-12-27 2:52 ` Richard Stallman 2015-12-27 3:21 ` Dmitry Gutov 2015-12-27 15:50 ` Eli Zaretskii 2015-12-30 4:47 ` John Wiegley 2 siblings, 1 reply; 87+ messages in thread From: Richard Stallman @ 2015-12-27 2:52 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Here's another recent analysis: > http://ukupat.github.io/tabs-or-spaces/ Would you please post the actual results of this analysis, as text? -- Dr Richard Stallman President, Free Software Foundation (gnu.org, fsf.org) Internet Hall-of-Famer (internethalloffame.org) Skype: No way! See stallman.org/skype.html. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-27 2:52 ` Richard Stallman @ 2015-12-27 3:21 ` Dmitry Gutov 0 siblings, 0 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-12-27 3:21 UTC (permalink / raw) To: rms; +Cc: 20322 On 12/27/2015 04:52 AM, Richard Stallman wrote: > Would you please post the actual results of this analysis, > as text? C: 32% using tabs, the rest - different offsets using spaces. C#: 18% using tabs. C++: 20%. F#: 0%. CSS: 20%. Erlang: 8%. Go: 98% (the language mandates the use of tabs; the 2% outliers could be misdetected repositories, I don't know). Groovy: 8%. Haskell: 2%. Java: 11%. JavaScript: 13%. Perl: 23%. PHP: 29% Python: 3% Ruby: 0% Rust: 3% Scala: 0% Shell: 22% Swift: 6% ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-26 14:27 ` Dmitry Gutov 2015-12-27 2:52 ` Richard Stallman @ 2015-12-27 15:50 ` Eli Zaretskii 2015-12-27 16:10 ` Dmitry Gutov 2015-12-30 4:47 ` John Wiegley 2 siblings, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-12-27 15:50 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > From: Dmitry Gutov <dgutov@yandex.ru> > Date: Sat, 26 Dec 2015 16:27:55 +0200 > > Here's another recent analysis: > > http://ukupat.github.io/tabs-or-spaces/ Given the proliferation of indentation that is default in Visual Studio, I'm guessing that this has almost nothing to do with people's preferences, and much more to do with the IDE they are using. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-27 15:50 ` Eli Zaretskii @ 2015-12-27 16:10 ` Dmitry Gutov 2015-12-27 16:28 ` Eli Zaretskii 0 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-12-27 16:10 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 12/27/2015 05:50 PM, Eli Zaretskii wrote: > Given the proliferation of indentation that is default in Visual > Studio, I'm guessing that this has almost nothing to do with people's > preferences, and much more to do with the IDE they are using. If the majority are okay with the defaults, that doesn't mean people are okay with *any* defaults. That might only mean that VS picked good defaults. And it's not like VS supports all (or even most) of the languages on this list. Or is the predominant IDE of choice in all those communities. You're probably only thinking about the C and C++ results. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-27 16:10 ` Dmitry Gutov @ 2015-12-27 16:28 ` Eli Zaretskii 2015-12-27 16:51 ` Dmitry Gutov 0 siblings, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-12-27 16:28 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Cc: 20322@debbugs.gnu.org > From: Dmitry Gutov <dgutov@yandex.ru> > Date: Sun, 27 Dec 2015 18:10:26 +0200 > > On 12/27/2015 05:50 PM, Eli Zaretskii wrote: > > > Given the proliferation of indentation that is default in Visual > > Studio, I'm guessing that this has almost nothing to do with people's > > preferences, and much more to do with the IDE they are using. > > If the majority are okay with the defaults, that doesn't mean people are > okay with *any* defaults. That might only mean that VS picked good defaults. I wouldn't go that far. A product that is forced on many developers doesn't have to pick good defaults. > And it's not like VS supports all (or even most) of the languages on > this list. Or is the predominant IDE of choice in all those communities. > You're probably only thinking about the C and C++ results. Yes, I thought about C, C++, and C#. Sorry for not making it clear. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-27 16:28 ` Eli Zaretskii @ 2015-12-27 16:51 ` Dmitry Gutov 0 siblings, 0 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-12-27 16:51 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 12/27/2015 06:28 PM, Eli Zaretskii wrote: > forced on many developers I wouldn't go that far. It might not be your, or mine, preference, but VS is generally considered to be a strong part of Microsoft's ecosystem. > good defaults. There are technical reasons to prefer spaces (basically, everything but the file size argument), and they are popular as well. Do you have any other metrics for "good defaults"? ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-26 14:27 ` Dmitry Gutov 2015-12-27 2:52 ` Richard Stallman 2015-12-27 15:50 ` Eli Zaretskii @ 2015-12-30 4:47 ` John Wiegley 2015-12-30 11:48 ` Dmitry Gutov 2 siblings, 1 reply; 87+ messages in thread From: John Wiegley @ 2015-12-30 4:47 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 [-- Attachment #1: Type: text/plain, Size: 759 bytes --] >>>>> Dmitry Gutov <dgutov@yandex.ru> writes: > Here's another recent analysis: > http://ukupat.github.io/tabs-or-spaces/ Dmitry, as much as I'd like to make TAB insert spaces as the default, this is a really, REALLY old default, and I don't think we're going to gain anything major by changing it. We're also going to annoy a huge host of users who actually need tabs in places where they presently have no configuration because Emacs just "does what they expect" right now. So unless there is a really compelling argument for a change at this time, I'd like to close this as "wontfix". -- John Wiegley GPG fingerprint = 4710 CF98 AF9B 327B B80F http://newartisans.com 60E1 46C4 BD1A 7AC1 4BA2 [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 629 bytes --] ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-30 4:47 ` John Wiegley @ 2015-12-30 11:48 ` Dmitry Gutov 2015-12-30 12:15 ` Dmitry Gutov 0 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-12-30 11:48 UTC (permalink / raw) To: John Wiegley; +Cc: 20322 On 12/30/2015 06:47 AM, John Wiegley wrote: > Dmitry, as much as I'd like to make TAB insert spaces as the default, this is > a really, REALLY old default, and I don't think we're going to gain anything > major by changing it. We're also going to annoy a huge host of users who > actually need tabs in places where they presently have no configuration > because Emacs just "does what they expect" right now. That's nice. > So unless there is a really compelling argument for a change at this time, I'd > like to close this as "wontfix". Not even going to wait for Richard to "see what he thinks", huh? ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-30 11:48 ` Dmitry Gutov @ 2015-12-30 12:15 ` Dmitry Gutov 2015-12-30 19:18 ` John Wiegley 0 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-12-30 12:15 UTC (permalink / raw) To: John Wiegley; +Cc: 20322 On 12/30/2015 01:48 PM, Dmitry Gutov wrote: >> So unless there is a really compelling argument for a change at this >> time I've got only one argument: the longer we want, the more we continue confusing new user coming to the editor (because our "use tabs in indentation" setting does not even correspond to what majority of people coming from newer editors expect of "use tabs" behavior), and bigger yet the "host of users who will get annoyed" will become when we finally make that change. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-30 12:15 ` Dmitry Gutov @ 2015-12-30 19:18 ` John Wiegley 2015-12-31 0:24 ` Dmitry Gutov 2015-12-31 6:30 ` Richard Stallman 0 siblings, 2 replies; 87+ messages in thread From: John Wiegley @ 2015-12-30 19:18 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 >>>>> Dmitry Gutov <dgutov@yandex.ru> writes: > I've got only one argument: the longer we want, the more we continue > confusing new user coming to the editor The longer we wait? This has the default (according to Git) since at least 1991, or 25 years now. Probably much longer, since that commit is just there to begin the Git history. What about the needs of existing users who'll become confused by our changing such an established default on them? When did pleasing the expectations of new users become a driving force for these types of changes? We can also expect new users to learn how Emacs does things, too. What I would *like* is for tabs to insert spaces. But a change like this affects far more people than just the target audience. We need an excellent reason to do this. -- John Wiegley GPG fingerprint = 4710 CF98 AF9B 327B B80F http://newartisans.com 60E1 46C4 BD1A 7AC1 4BA2 ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-30 19:18 ` John Wiegley @ 2015-12-31 0:24 ` Dmitry Gutov 2015-12-31 1:17 ` John Wiegley 2015-12-31 6:30 ` Richard Stallman 1 sibling, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-12-31 0:24 UTC (permalink / raw) To: John Wiegley; +Cc: 20322 On 12/30/2015 09:18 PM, John Wiegley wrote: > The longer we wait? This has the default (according to Git) since at least > 1991, or 25 years now. Probably much longer, since that commit is just there > to begin the Git history. The question is, do we believe it'll have to be changed eventually. If not now, then maybe in 10-20 years' time. > What about the needs of existing users who'll become confused by our changing > such an established default on them? What's so confusing about it? They'll see the new behavior (or read NEWS), look it up, and customize one variable, if they really want to. Unlike new users, they might know the variable already, and they certainly know how to customize. We do change defaults from time to time. Maybe usually not 25-year-old defaults, but there are not that many of them left anyway. > When did pleasing the expectations of new > users become a driving force for these types of changes? You're saying this like making the barrier of entry low is a bad thing. I also want 'emacs -Q' to behave better, and I want to be more comfortable in recommending Emacs to other people. > We can also expect > new users to learn how Emacs does things, too. indent-tabs-mode is not "how". It's "what" Emacs does, for predominantly historical reasons. Learning about it isn't going to be gratifying, unlike many other aspects of Emacs. > What I would *like* is for tabs to insert spaces. But a change like this > affects far more people than just the target audience. We need an excellent > reason to do this. We don't actually know how many people it's going to be a problem for, do we? For all we know, most of the existing users already use spaces (the third-party community has standardized on them). And some fraction will be indifferent to the change. There must also be some fraction of users who are not aware of this variable, who "mess up" indentation when they edit some existing code bases. Statistically speaking, we'll be doing them a favor as well. Should we poll Reddit users? Only asking on the mailing lists, I'm afraid, would unfairly skew the results in favor of _real_ old-timers. If it were up to me, we'd try changing the default during the development cycle of Emacs 26, and see how many complaints we get. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-31 0:24 ` Dmitry Gutov @ 2015-12-31 1:17 ` John Wiegley 2015-12-31 1:26 ` Dmitry Gutov 0 siblings, 1 reply; 87+ messages in thread From: John Wiegley @ 2015-12-31 1:17 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 >>>>> Dmitry Gutov <dgutov@yandex.ru> writes: > What's so confusing about it? They'll see the new behavior (or read NEWS), > look it up, and customize one variable, if they really want to. Unlike new > users, they might know the variable already, and they certainly know how to > customize. I don't believe this is a realistic assessment of what will happen. I just don't. > We don't actually know how many people it's going to be a problem for, do > we? For all we know, most of the existing users already use spaces (the > third-party community has standardized on them). And some fraction will be > indifferent to the change. We don't know too many things, that's the point. You're suggesting an improvement based on what you think will be an improvement, while causing difficulties that you don't think will be worse overall. But why change? What is the driving factor behind this request? Do we know we're actively losing users because we insert tabs when one presses the TAB key -- to such an extent that changing this default will keep those users? Is the change important enough that it's OK to annoy the people (our existing users) who will be surprised by this change? Otherwise, it sounds like a theoretical improvement to me, which is not enough to convince me in matters like this. > If it were up to me, we'd try changing the default during the development > cycle of Emacs 26, and see how many complaints we get. You're welcome to poll, but I don't think you'd reach everyone that needs reaching. It would, however, at least be a data point. -- John Wiegley GPG fingerprint = 4710 CF98 AF9B 327B B80F http://newartisans.com 60E1 46C4 BD1A 7AC1 4BA2 ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-31 1:17 ` John Wiegley @ 2015-12-31 1:26 ` Dmitry Gutov 2015-12-31 2:48 ` John Wiegley 0 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-12-31 1:26 UTC (permalink / raw) To: John Wiegley; +Cc: 20322 On 12/31/2015 03:17 AM, John Wiegley wrote: > I don't believe this is a realistic assessment of what will happen. I just > don't. I can't imagine it happening otherwise. What else? Tab-fueled users' rebellion on Emacs mailing lists? > We don't know too many things, that's the point. You're suggesting an > improvement based on what you think will be an improvement, while causing > difficulties that you don't think will be worse overall. Yes. > But why change? What is the driving factor behind this request? Do we know > we're actively losing users because we insert tabs when one presses the TAB > key -- to such an extent that changing this default will keep those users? Is > the change important enough that it's OK to annoy the people (our existing > users) who will be surprised by this change? Not losing, no. But probably failing to capture some potential new users. Likewise, I don't believe we'll lose any users to changing the default. We should make Emacs 26 more attractive in other ways anyway, which will offset this minor inconvenience. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-31 1:26 ` Dmitry Gutov @ 2015-12-31 2:48 ` John Wiegley 0 siblings, 0 replies; 87+ messages in thread From: John Wiegley @ 2015-12-31 2:48 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322-done >>>>> Dmitry Gutov <dgutov@yandex.ru> writes: > I can't imagine it happening otherwise. What else? Tab-fueled users' > rebellion on Emacs mailing lists? You're forgetting one thing: One cannot, by casual observation, tell that this change has been made, since both spaces and tabs are invisible. I'll tell you a little story. I'm making it up, but it's more probable than you might think. Imagine a programmer: we'll call him Joe. Joe works in a Java shop that mandates the use of tabs in source files. They exist. I've worked in such shops. Joe is fine with this, because Emacs inserts tab characters; so he happily goes about his task. He then sees that Emacs 25.1 comes out, and upgrades. After all, a newer Emacs just means more good stuff, right? However, without any indication (who reads the entire NEWS file? I don't), his TAB key now inserts spaces. Joe doesn't know this, because everything appears exactly the same. But the head engineer who reads every diff notices. He storms into Joe's office, wondering why he's suddenly ignoring the coding standard. Joe has no idea way, and everyone is mystified for a moment. A quick Google explains the reason. Now Joe has lost face, and he's lost some trust in Emacs, because why did we make such a change? Can't people who don't want tabs just configure *their* Emacs, he thinks to himself? And most of all, he'll be upset with me for letting this happen on my watch. Everyone who uses Emacs and would be made happy by this change, has already configured their Emacs not to use tabs. So they won't notice. Everyone who doesn't use Emacs and would be made happy by this change, won't know that things were different before. So they won't notice. The people who will, finally, notice, will be everyone like Joe who came to depend on their environment not changing long-held defaults without notice. Therefore, I'm closing this as "wontfix". Feel free to re-open when the next maintainer arrives. Take this as also establishing a general policy of not changing long-held defaults without compelling reasons, rather than what we think people will want. -- John Wiegley GPG fingerprint = 4710 CF98 AF9B 327B B80F http://newartisans.com 60E1 46C4 BD1A 7AC1 4BA2 ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-12-30 19:18 ` John Wiegley 2015-12-31 0:24 ` Dmitry Gutov @ 2015-12-31 6:30 ` Richard Stallman 1 sibling, 0 replies; 87+ messages in thread From: Richard Stallman @ 2015-12-31 6:30 UTC (permalink / raw) To: John Wiegley; +Cc: 20322, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] I am pretty sure that using tabs was enabled by default since I first developed GNU Emacs. If it were ever changed that would be visible in the ChangeLog file and in NEWS. -- Dr Richard Stallman President, Free Software Foundation (gnu.org, fsf.org) Internet Hall-of-Famer (internethalloffame.org) Skype: No way! See stallman.org/skype.html. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 15:39 ` Dmitry Gutov 2015-04-14 15:59 ` Eli Zaretskii @ 2015-04-14 17:15 ` Stefan Monnier 2015-04-14 18:08 ` Nicolas Petton 2015-04-14 20:33 ` Dmitry Gutov 1 sibling, 2 replies; 87+ messages in thread From: Stefan Monnier @ 2015-04-14 17:15 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Speaking of JavaScript, the defaults do not conform to the current > convention (2 spaces, no tabs). Then maybe we should change javascript-mode accordingly. Stefan ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 17:15 ` Stefan Monnier @ 2015-04-14 18:08 ` Nicolas Petton 2015-04-14 20:33 ` Dmitry Gutov 1 sibling, 0 replies; 87+ messages in thread From: Nicolas Petton @ 2015-04-14 18:08 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322, Dmitry Gutov [-- Attachment #1: Type: text/plain, Size: 284 bytes --] Stefan Monnier writes: >> Speaking of JavaScript, the defaults do not conform to the current >> convention (2 spaces, no tabs). > > Then maybe we should change javascript-mode accordingly. Indeed, that would be nice. Nico -- Nicolas Petton http://nicolas-petton.fr [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 512 bytes --] ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 17:15 ` Stefan Monnier 2015-04-14 18:08 ` Nicolas Petton @ 2015-04-14 20:33 ` Dmitry Gutov 1 sibling, 0 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-14 20:33 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322 On 04/14/2015 08:15 PM, Stefan Monnier wrote: >> Speaking of JavaScript, the defaults do not conform to the current >> convention (2 spaces, no tabs). > > Then maybe we should change javascript-mode accordingly. Ok. How about emacs-lisp-mode too, then? Aside from the Emacs sources (and possibly Org and Gnus), the third-party authors have settled on spaces-only indentation: https://github.com/bbatsov/emacs-lisp-style-guide/#source-code-layout--organization ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 14:14 ` Dmitry Gutov 2015-04-14 15:25 ` Eli Zaretskii @ 2015-04-14 19:09 ` Achim Gratz 2015-04-14 21:58 ` Dmitry Gutov 1 sibling, 1 reply; 87+ messages in thread From: Achim Gratz @ 2015-04-14 19:09 UTC (permalink / raw) To: 20322 Dmitry Gutov writes: > Let's do a trial in master, to see how much bitching this results in? :) If you really want to know, leave your address with that patch and see how long it takes for the torches and pitchforks to be gathering in front of your house… Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Wavetables for the Waldorf Blofeld: http://Synth.Stromeko.net/Downloads.html#BlofeldUserWavetables ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 19:09 ` Achim Gratz @ 2015-04-14 21:58 ` Dmitry Gutov 0 siblings, 0 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-14 21:58 UTC (permalink / raw) To: Achim Gratz, 20322 On 04/14/2015 10:09 PM, Achim Gratz wrote: > > If you really want to know, leave your address with that patch and see > how long it takes for the torches and pitchforks to be gathering in > front of your house… I'm sure the pitchfork wielders wouldn't stop at the lack of address and their best wishes would already be pouring into my inbox. No such luck. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 3:07 ` Stefan Monnier 2015-04-14 14:14 ` Dmitry Gutov @ 2015-04-15 2:33 ` Richard Stallman 2015-04-15 11:18 ` Dmitry Gutov [not found] ` <<E1YiD8o-000318-H5@fencepost.gnu.org> 2 siblings, 1 reply; 87+ messages in thread From: Richard Stallman @ 2015-04-15 2:33 UTC (permalink / raw) To: Stefan Monnier; +Cc: 20322, dgutov [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] Tabs make file smaller. I just did an experiment. In lread.c, M-x untabify changed 139702 characters into 155402 characters, which is 11% bigger. For subr.el, it was smaller: 200817 characters became 209939, only 4.5% bigger. However, files.el got 12% bigger. If most of a git repository is text from various versions of files, the repository is also likely to get around 10% bigger without tabs, and now you're talking about 30 meg more. -- Dr Richard Stallman President, Free Software Foundation 51 Franklin St Boston MA 02110 USA www.fsf.org www.gnu.org Skype: No way! See stallman.org/skype.html. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-15 2:33 ` Richard Stallman @ 2015-04-15 11:18 ` Dmitry Gutov 2015-04-15 16:17 ` Eli Zaretskii 0 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-04-15 11:18 UTC (permalink / raw) To: rms, Stefan Monnier; +Cc: 20322 On 04/15/2015 05:33 AM, Richard Stallman wrote: > Tabs make file smaller. I just did an experiment. In lread.c, M-x > untabify changed 139702 characters into 155402 characters, which is > 11% bigger. Right, I suppose that made sense, back in the day. Thanks for the context. > For subr.el, it was smaller: 200817 characters became 209939, only > 4.5% bigger. However, files.el got 12% bigger. > > If most of a git repository is text from various versions of files, > the repository is also likely to get around 10% bigger without tabs, > and now you're talking about 30 meg more. Git compresses the file contents with zlib when storing them. Let's compare the compressed versions of files.el: $ gzip --keep files.el $ gzip --keep files-notabs.el $ ls -l files.el.gz files-notabs.el.gz -rw-rw-r-- 1 gutov gutov 85735 Apr 12 22:26 files.el.gz -rw-rw-r-- 1 gutov gutov 87471 Apr 15 14:07 files-notabs.el.gz That's only a 2% increase in compressed size for the file with the largest difference. For subr.el, as another example, the difference is 0.56%. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-15 11:18 ` Dmitry Gutov @ 2015-04-15 16:17 ` Eli Zaretskii 2015-04-15 23:03 ` Dmitry Gutov 0 siblings, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-04-15 16:17 UTC (permalink / raw) To: Dmitry Gutov; +Cc: rms, 20322 > Date: Wed, 15 Apr 2015 14:18:43 +0300 > From: Dmitry Gutov <dgutov@yandex.ru> > Cc: 20322@debbugs.gnu.org > > On 04/15/2015 05:33 AM, Richard Stallman wrote: > > > Tabs make file smaller. I just did an experiment. In lread.c, M-x > > untabify changed 139702 characters into 155402 characters, which is > > 11% bigger. > > Right, I suppose that made sense, back in the day. Thanks for the context. > > > For subr.el, it was smaller: 200817 characters became 209939, only > > 4.5% bigger. However, files.el got 12% bigger. > > > > If most of a git repository is text from various versions of files, > > the repository is also likely to get around 10% bigger without tabs, > > and now you're talking about 30 meg more. > > Git compresses the file contents with zlib when storing them. Git compresses the objects under .git/, but it doesn't compress the checked-out files. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-15 16:17 ` Eli Zaretskii @ 2015-04-15 23:03 ` Dmitry Gutov 0 siblings, 0 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-15 23:03 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rms, 20322 On 04/15/2015 07:17 PM, Eli Zaretskii wrote: > Git compresses the objects under .git/, but it doesn't compress the > checked-out files. True, but I'm fairly sure we're not that worried about 30Mb of extra uncompressed size, with computers these days. Extra network traffic would be more of a concern, since there are many places in the world with terrible Internet access. ^ permalink raw reply [flat|nested] 87+ messages in thread
[parent not found: <<E1YiD8o-000318-H5@fencepost.gnu.org>]
* bug#20322: 25.0.50; indent-tabs-mode should default to nil [not found] ` <<E1YiD8o-000318-H5@fencepost.gnu.org> @ 2015-04-15 15:29 ` Drew Adams 0 siblings, 0 replies; 87+ messages in thread From: Drew Adams @ 2015-04-15 15:29 UTC (permalink / raw) To: rms, Stefan Monnier; +Cc: 20322, dgutov > Tabs make file smaller. I just did an experiment. In lread.c, M-x > untabify changed 139702 characters into 155402 characters, which is > 11% bigger. > > For subr.el, it was smaller: 200817 characters became 209939, only > 4.5% bigger. However, files.el got 12% bigger. > > If most of a git repository is text from various versions of files, > the repository is also likely to get around 10% bigger without tabs, > and now you're talking about 30 meg more. That's a consideration, certainly. But there are others - which is why we have an option for this. ;-) (FWIW, I've long turned off `indent-tabs-mode', personally.) Note that a (minor) problem for users can arise regardless of how a user sets the option value: copying and pasting existing code from a buffer where the option value was non-nil and where tab chars are thus used for indentation. When you paste a code snippet that you copied from Emacs (and perhaps modified) into a help question reply (email, StackExchange, whatever) - that is, you paste it into a non-Emacs environment - you can find that the receiving environment does not handle tab chars the way you might hope. I find myself "bitten" by this from time to time, even though I've pretty much learned the habit of using `untabify' first. (E.g, copy+yank to another buffer, untabify, then paste to the non-Emacs application.) Admittedly, this inconvenience is only minor. But it is also not obvious to some users what is going on (i.e., why they see what they see). FWIW, whether the default value gets changed or not is not important to me, as a user. I just wanted to mention this because I imagine that there is more and more use of snippets taken from Emacs buffers and pasted into other environments. If you forget to use `untabify' then you can find yourself reformatting the code in the destination environment - a bother, even if a minor one. And of course there are some users who might not ever become aware of `untabify' and who share code in non-Emacs media in order to help others. It is a (minor) annoyance to have to reformat pasted code, and some users might never figure out what is going on (tab chars are invisible). If the Emacs source code used only space chars for indenting then, yes, that code would occupy more space. But users copying and pasting it outside of Emacs would not be surprised by the strange indentation they sometimes get. And there is lots of 3rd-party code that is based on or derived from core Emacs code. Users copying 3rd-party code can thus be bitten by this gotcha also, even if the 3rd-party maintainer turns off `indent-tabs-mode' - if s?he does not use `untabify'. Something to think about perhaps, in any case. [It is good that (emacs) `Just Space' mentions `untabify' along with `indent-tabs-mode'. It might be good for the Elisp manual too to mention `untabify' where it documents `indent-tabs-mode'.] ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 2:37 bug#20322: 25.0.50; indent-tabs-mode should default to nil Dmitry Gutov 2015-04-14 3:07 ` Stefan Monnier @ 2015-04-14 14:17 ` Eli Zaretskii 2015-04-14 14:40 ` Dmitry Gutov 1 sibling, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-04-14 14:17 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > From: Dmitry Gutov <dgutov@yandex.ru> > Date: Tue, 14 Apr 2015 05:37:18 +0300 > > Is there a reason it's t by default? History and custom. > There are different personal preferences for indentation, but spaces are > used quite a bit more often than tabs, in most languages I'm familiar with. Each major mode can (and some already do) have its own default. > Having it be nil by default (but set locally by modes that really need > it, like makefile-mode) will mean that most users won't have to > customize it. If the customizations are due to language guidelines/culture, then setting this to nil in the major mode is TRT. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 14:17 ` Eli Zaretskii @ 2015-04-14 14:40 ` Dmitry Gutov 2015-04-14 15:29 ` Eli Zaretskii 0 siblings, 1 reply; 87+ messages in thread From: Dmitry Gutov @ 2015-04-14 14:40 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 04/14/2015 05:17 PM, Eli Zaretskii wrote: > Each major mode can (and some already do) have its own default. I can see ruby-mode and texinfo-mode set it to nil, which makes sense, but it also makes it harder for the user to configure everything in one place. Here's one complaint about it: http://emacs.stackexchange.com/a/9385/124 Personally, I'd only do that if the language can't handle the default value at all (like it's the case with Makefiles). > If the customizations are due to language guidelines/culture, then > setting this to nil in the major mode is TRT. Maybe, but my point is that going by this logic most major modes would need to set it to nil. And then it'll just make sense to make it the default. Note that doing that change in major modes will have pretty much the same problem as changing the default: users who got used to the current behavior. Only it'll make it harder to revert the change, because that'll need to happen in hooks now, or in file-local variables. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 14:40 ` Dmitry Gutov @ 2015-04-14 15:29 ` Eli Zaretskii 2015-04-14 15:48 ` Dmitry Gutov 0 siblings, 1 reply; 87+ messages in thread From: Eli Zaretskii @ 2015-04-14 15:29 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Date: Tue, 14 Apr 2015 17:40:17 +0300 > From: Dmitry Gutov <dgutov@yandex.ru> > CC: 20322@debbugs.gnu.org > > On 04/14/2015 05:17 PM, Eli Zaretskii wrote: > > > Each major mode can (and some already do) have its own default. > > I can see ruby-mode and texinfo-mode set it to nil, which makes sense, > but it also makes it harder for the user to configure everything in one > place. But it's simply _wrong_ to configure everything in one place, because different modes have different conventions. > > If the customizations are due to language guidelines/culture, then > > setting this to nil in the major mode is TRT. > > Maybe, but my point is that going by this logic most major modes would > need to set it to nil. I don't understand why. Can you explain? > Note that doing that change in major modes will have pretty much the > same problem as changing the default: users who got used to the current > behavior. If you only change that in modes which really need that, this problem won't exist, because, as you yourself said, everybody already customized these modes to use that value. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 15:29 ` Eli Zaretskii @ 2015-04-14 15:48 ` Dmitry Gutov 2015-04-14 16:02 ` Eli Zaretskii 2015-04-17 17:22 ` Philipp Stephani 0 siblings, 2 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-14 15:48 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 20322 On 04/14/2015 06:29 PM, Eli Zaretskii wrote: > But it's simply _wrong_ to configure everything in one place, because > different modes have different conventions. Configuring everything in one place is easy and nice, as long as that's what you want to do (and setting indent-tabs-mode for most modes is something that a lot of people would prefer). As long as you can override it for different modes (e.g. in hooks), there's no downside. >> Maybe, but my point is that going by this logic most major modes would >> need to set it to nil. > > I don't understand why. Can you explain? Because spaces are more popular than tabs, in most language communities? > If you only change that in modes which really need that, this problem > won't exist, because, as you yourself said, everybody already > customized these modes to use that value. Yes, and that's not what I'm talking about. JavaScript (or Ruby, or Python) don't _really_ need that. They can work with tabs, but most users would want to disable tabs in indentation anyway, for cultural, personal or organizational reasons. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 15:48 ` Dmitry Gutov @ 2015-04-14 16:02 ` Eli Zaretskii 2015-04-17 17:22 ` Philipp Stephani 1 sibling, 0 replies; 87+ messages in thread From: Eli Zaretskii @ 2015-04-14 16:02 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 20322 > Date: Tue, 14 Apr 2015 18:48:30 +0300 > From: Dmitry Gutov <dgutov@yandex.ru> > CC: 20322@debbugs.gnu.org > > >> Maybe, but my point is that going by this logic most major modes would > >> need to set it to nil. > > > > I don't understand why. Can you explain? > > Because spaces are more popular than tabs, in most language communities? Is the issue with the default for fundamental-mode or prog-mode, then? I don't think I care about those, as long as the C/C++ defaults are kept, and I don't care if the current C/C++ defaults are set in the C/C++ major mode. ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-14 15:48 ` Dmitry Gutov 2015-04-14 16:02 ` Eli Zaretskii @ 2015-04-17 17:22 ` Philipp Stephani 2015-04-18 2:55 ` Dmitry Gutov 1 sibling, 1 reply; 87+ messages in thread From: Philipp Stephani @ 2015-04-17 17:22 UTC (permalink / raw) To: Dmitry Gutov, Eli Zaretskii; +Cc: 20322 [-- Attachment #1: Type: text/plain, Size: 464 bytes --] Dmitry Gutov <dgutov@yandex.ru> schrieb am Di., 14. Apr. 2015 um 17:49 Uhr: > Because spaces are more popular than tabs, in most language communities? > http://stackoverflow.com/research/developer-survey-2015#tech-tabsspaces "After millennia of heated debate, mercifully, at long last, we have an answer. Most developers prefer tabs to spaces." Yes, the data also shows that experienced developers do prefer spaces over tabs, but the matter is far from clear. [-- Attachment #2: Type: text/html, Size: 1341 bytes --] ^ permalink raw reply [flat|nested] 87+ messages in thread
* bug#20322: 25.0.50; indent-tabs-mode should default to nil 2015-04-17 17:22 ` Philipp Stephani @ 2015-04-18 2:55 ` Dmitry Gutov 0 siblings, 0 replies; 87+ messages in thread From: Dmitry Gutov @ 2015-04-18 2:55 UTC (permalink / raw) To: Philipp Stephani, Eli Zaretskii; +Cc: 20322 On 04/17/2015 08:22 PM, Philipp Stephani wrote: > http://stackoverflow.com/research/developer-survey-2015#tech-tabsspaces > "After millennia of heated debate, mercifully, at long last, we have an > answer. Most developers prefer tabs to spaces." Already seen this. I'm inclined to take it with a pound of salt, for several reasons: - Have you participated in it? I'm a heavy SO user, and I've only found out about it after the results were published. So, a certain amount of bias has to be assumed. - If the question was "what do you personally prefer", it doesn't necessarily reflect the state of the projects the surveyees are actually working on. - For all we know, the majority of respondents came from PHP, VB.NET, or some other proprietary platforms which Emacs does not support directly. > Yes, the data also shows that experienced developers do prefer spaces > over tabs, but the matter is far from clear. Some of the less experienced ones might also be answering a different question. Look at the subscript (in brackets) here: http://jarrodoverson.com/blog/spaces-vs-tabs/ ^ permalink raw reply [flat|nested] 87+ messages in thread
end of thread, other threads:[~2015-12-31 6:30 UTC | newest] Thread overview: 87+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-04-14 2:37 bug#20322: 25.0.50; indent-tabs-mode should default to nil Dmitry Gutov 2015-04-14 3:07 ` Stefan Monnier 2015-04-14 14:14 ` Dmitry Gutov 2015-04-14 15:25 ` Eli Zaretskii 2015-04-14 15:39 ` Dmitry Gutov 2015-04-14 15:59 ` Eli Zaretskii 2015-04-14 20:24 ` Dmitry Gutov 2015-04-14 21:43 ` Stefan Monnier 2015-04-14 22:17 ` Dmitry Gutov 2015-04-15 1:19 ` Stefan Monnier 2015-04-15 2:08 ` Dmitry Gutov 2015-04-15 4:19 ` Stefan Monnier 2015-04-20 14:56 ` Dmitry Gutov 2015-04-20 19:26 ` Stefan Monnier 2015-04-20 22:09 ` Dmitry Gutov 2015-04-21 1:25 ` Stefan Monnier 2015-04-21 19:25 ` Dmitry Gutov 2015-04-21 19:47 ` Eli Zaretskii 2015-04-22 15:02 ` Dmitry Gutov 2015-04-22 15:18 ` Eli Zaretskii 2015-04-22 15:23 ` Dmitry Gutov 2015-04-22 15:28 ` Eli Zaretskii 2015-04-22 15:49 ` Dmitry Gutov 2015-04-21 20:27 ` Stefan Monnier 2015-04-21 20:51 ` Dmitry Gutov 2015-04-22 13:56 ` Stefan Monnier 2015-04-22 14:59 ` Dmitry Gutov 2015-04-22 16:47 ` Stefan Monnier 2015-11-02 18:18 ` Dmitry Gutov 2015-11-02 20:37 ` John Wiegley 2015-11-02 21:03 ` Dmitry Gutov 2015-11-02 21:18 ` John Wiegley 2015-11-02 21:06 ` Eli Zaretskii 2015-11-02 21:29 ` John Wiegley 2015-11-02 23:31 ` Richard Stallman 2015-11-03 3:32 ` Eli Zaretskii 2015-11-02 23:31 ` Richard Stallman 2015-04-15 14:31 ` Wolfgang Jenkner 2015-04-15 16:10 ` Eli Zaretskii 2015-04-17 2:48 ` Dmitry Gutov 2015-04-17 4:58 ` Stefan Monnier 2015-04-17 13:14 ` Dmitry Gutov 2015-04-17 7:26 ` Eli Zaretskii 2015-04-17 8:11 ` Eli Zaretskii 2015-04-17 14:17 ` Dmitry Gutov 2015-04-17 14:36 ` Eli Zaretskii 2015-04-17 15:55 ` Dmitry Gutov 2015-04-17 16:23 ` Eli Zaretskii 2015-04-17 18:12 ` Stefan Monnier 2015-04-17 18:18 ` Dmitry Gutov 2015-04-20 15:03 ` Dmitry Gutov 2015-04-17 7:55 ` Andreas Schwab 2015-04-17 8:12 ` Eli Zaretskii 2015-04-17 10:55 ` Dmitry Gutov 2015-12-26 14:27 ` Dmitry Gutov 2015-12-27 2:52 ` Richard Stallman 2015-12-27 3:21 ` Dmitry Gutov 2015-12-27 15:50 ` Eli Zaretskii 2015-12-27 16:10 ` Dmitry Gutov 2015-12-27 16:28 ` Eli Zaretskii 2015-12-27 16:51 ` Dmitry Gutov 2015-12-30 4:47 ` John Wiegley 2015-12-30 11:48 ` Dmitry Gutov 2015-12-30 12:15 ` Dmitry Gutov 2015-12-30 19:18 ` John Wiegley 2015-12-31 0:24 ` Dmitry Gutov 2015-12-31 1:17 ` John Wiegley 2015-12-31 1:26 ` Dmitry Gutov 2015-12-31 2:48 ` John Wiegley 2015-12-31 6:30 ` Richard Stallman 2015-04-14 17:15 ` Stefan Monnier 2015-04-14 18:08 ` Nicolas Petton 2015-04-14 20:33 ` Dmitry Gutov 2015-04-14 19:09 ` Achim Gratz 2015-04-14 21:58 ` Dmitry Gutov 2015-04-15 2:33 ` Richard Stallman 2015-04-15 11:18 ` Dmitry Gutov 2015-04-15 16:17 ` Eli Zaretskii 2015-04-15 23:03 ` Dmitry Gutov [not found] ` <<E1YiD8o-000318-H5@fencepost.gnu.org> 2015-04-15 15:29 ` Drew Adams 2015-04-14 14:17 ` Eli Zaretskii 2015-04-14 14:40 ` Dmitry Gutov 2015-04-14 15:29 ` Eli Zaretskii 2015-04-14 15:48 ` Dmitry Gutov 2015-04-14 16:02 ` Eli Zaretskii 2015-04-17 17:22 ` Philipp Stephani 2015-04-18 2:55 ` Dmitry Gutov
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).