То есть, приведение к верхнему регистру работает в общем случае некорректно, сравнение некорректно в принципе (две разных строки вполне могут приводиться к одинаковой строке в верхнем регистре), поддержка новых языков в принципе невозможна (иначе вместо «инвариантной» локали образуется целый набор локалей, зависящий от версии ОС), от гиганских таблиц (представляющих собой локаль) так и не избавились и реализация работает медленнее регистрозависимой.
Ну и оказывается, что вместо инвариантной локали всё-таки используется локаль, встроенная в файловую систему. Просто блеск! Теперь количество гиганских таблиц равно количеству файловых систем.
Как всегда, zsh можно настроить и так, и так. Кстати, у меня команда, начинающаяся с пробела, удаляется из истории с помощью функции zshaddhistory (не помню, чем меня не устроила настройка HIST_IGNORE_SPACE). А вообще zsh имеет кучу способов удаления из истории:
$HISTORY_IGNORE: переменная, содержащая шаблон, под который должна подпадать игнорируемая команда
setopt HIST_IGNORE_SPACE: настройка, заставляющая игнорировать командную строку, начинающуюся с пробела или использующую обычный (есть ещё suffix и глобальные) alias, начинающийся с пробела
setopt HIST_NO_FUNCTIONS и setopt HIST_NO_STORE — игнорируют командную строку, в которой есть определение функции или вызов fc
zshaddhistory: если данная функция завершится с кодом 1, то строка не будет сохранена, а если 2, то она не будет сохранена в файле, но будет в памяти.
Во всех случаях вы можете один раз получить команду повторно, независимо от того, была ли она сохранена в файле или в памяти или не была сохранена ни там, ни там.
Первый — это из Supplemental Private Use Area-B. Бесполезен без своих шрифтов: будете видеть то, что вы сейчас видите. Чем их при этом не устроила просто Private Use Area непонятно.
Вообще‐то оба варианта похожи на U+FFFD REPLACEMENT CHARACTER, просто из разных шрифтов. GTK‐шные программы часто вместо REPLACEMENT CHARACTER показывают вот такие вот символы (внимание: в шрифте может быть и обычно есть¹ U+FFFD, но GTK вставляет туда свой символ), раньше чаще можно было увидеть прямоугольник. Есть ещё вариант с вопросительным знаком в ромбе (ромб залитый, вопрос цвета фона) — самый популярный¹ в шрифтах. Видел в Luxi Mono обрезанный ромб (шестиугольник) с тем же вопросительным знаком.
¹ Впрочем, возможно, что kcharselect просто отображает этот ромб из другого шрифта, потому он и есть самый популярный у меня. Проверять с помощью fontforge неохота.
Я понял. Просто здесь проводится аналогия между MAC’ом и автомобильном номером, и их оба не скрывают и не будут скрывать, на что есть причины. Вы сказали причину для автомобильного номера, я дополнил причиной для MAC’а.
Так это хорошо. Есть страничка github.com/aserebryakov/filestyle/releases, на которой сейчас много копий README. А в предложенном варианте там будет нормальный, полный CHANGELOG.
Собственно поэтому в powerline я changelog не веду — достаточно того, что список изменений есть на Github и есть полностью его копия в описании изменений в master ветке.
А зачем в github releases помещать README? Обычно туда помещают часть CHANGELOG (что изменилось по сравнению с предыдущим выпуском) и/или какую‐нибудь производную от него (к примеру, где сломана совместимость и как это исправить).
MAC’и, конечно, не «нельзя скрывать». Их просто «нельзя скрыть» — не раскрыв MAC’а вы никуда не подключитесь. Разве что их рандомизация не запрещена законодательством, в отличие от рандомизации номера автомобиля.
Да, если считать по количеству клавиш на удаление, то почти одинаково. Количество клавиш на ввод так совсем одинаково. alias -g всё же имеет преимущество, т.к. все удобные <C-…> у меня уже заняты, да и результат выглядит компактнее. Недостаток — может испортить скрипты, загруженные после создания alias’а.
Кстати, zsh при использовании emacs варианта раскладки использует widget для <C-w>, который считает, что | следует непременно удалять вместе с предшествовавшим словом (даже если оное отделено пробелом).
Нет. Вы можете переопределить __eq__ любым угодным вам способом. Другой вопрос, что в ряде мест (к примеру, при сравнении списков) применяется сравнение id() перед сравнением объектов: есть известный пример с NaN, или вот ещё:
Python 2.7.8 (a980ebb26592ed26706cd33a4e05eb45b5d3ea09, Nov 28 2014, 06:20:07)
[PyPy 2.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>> class NE(object):
.... def __eq__(self, other):
.... return False
....
>>>> n = NE()
>>>> [1, 2, n] == [1, 2, n]
True
>>>> n == n
False
. В CPython и jython картина точно такая же. IronPython покажет два False, но у него всегда были проблемы с совместимостью.
Подсветка — нет, скорее всего пользователь не поймёт, что подсвечивается и почему (если только это не смешанный CRNL/NL файл). Вот сообщение о том, что &l:fileformat is# 'dos' при открытии сделать можно, вместе с описанием «а что это такое» и «как исправить» (и «как отключить предупреждение»).
Подсвечивать ^M в тексте всё же можно — «замечаемость» его сильно зависит от используемой цветовой схемы. С моим wombat256mod это особых проблем не доставляло, хотя там и нет кричащего фона. В стандартной схеме ^M похож на комментарий, что ещё заметнее. Проблем нету в основном потому, что ^M либо нет вообще, либо он есть везде (при вставке из старой Opera, к примеру). Так что мой комментарий всё же относится к моему опыту.
Я бы рекомендовал подсвечивать все управляющие символы, а не \r. Во всех известных мне языках программирования их можно заменить на что‐то из печатных символов, а проблем при использовании VCS или cat они доставить могут (VCS может счесть, что файл является бинарным, а в терминале они не зря называются управляющими).
Хотя регулярное выражение $ будет подсвечивать часть строки за последним символом. Только без дополнительного условия «использовать только если &l:fileformat is# "dos"» подсвечиваться конец будет всегда.
Если в файле везде CRNL, то никаким регулярным выражением вы ничего не сделаете: файл будет открываться с setlocal fileformat=dos с преобразованием CRNL полностью в перенос строки. Если нет, то ^M в конце и без подсветки обычно заметить несложно, в регуляных выражениях можно использовать \r.
Основные две проблемы с PAGER — это то, что git считает длинными командами всё («git сам перенаправляет длинный вывод» — это неправда, просто less’у можно сказать, чтобы он не возникал, если вывод не слишком длинный (= если он целиком помещается на экране)) и то, что после выхода less в терминале ничего не видно, при этом запустить команду в текущей оболочке из less не получится. alias -g удобнее bindkey, потому что в истории останется alias и его легко удалить и заменить на что‐нибудь ещё.
Исторически сложилось так, что pip package для ctrlk принадлежит не мне. В текущем package есть две недоработки — не указана зависимость от ez_setup, ее можно разрешить руками
Если вас не устраивает текущий владелец пакета, а добавить вас в качестве владельца он отказывается, то вы можете попросить людей из PyPI, чтобы они добавили вас сами: по этой ссылке я делал такое для powerline-status.
Одна из первых вещей, которые я сделал, когда начал серьёзно пользоваться git — это убрал нафиг перенаправление в PAGER, поставив core.page = cat. Мне часто нужно набрать в консоли что‐то, зависящее от вывода, перенаправленного в PAGER, но PAGER это делать мешает. Или посмотреть, что было выведено командой раньше, а что сейчас. Если мне нужен less, то написать после команды L (zsh: alias -g L='| less') не проблема, но если он мне не нужен (что чаще), то писать <code>|cat или эквивалентный alias неудобно.
Относительно «чем ниже — тем безопаснее»: находясь на минус третьем этаже, при пожаре на минус первом вы расстроитесь больше, чем в случае с 42-м этажом и пожаре на 40-м. С 42-го теоретически можно эвакуировать на вертолёте (кстати, а так кто-нибудь делает? Дело непростое: вертолёт не должен подлетать близко к зданию), до минус третьего придётся бурить (чего постараются всеми силами избежать: починка продырявленного здания влетит в копеечку).
DE — это комплекс программ: оконный менеджер, настройки системы, системное меню, куча мелких утилит вроде переключалки клавиатуры. Так что нет, они не могли использовать этот термин: explorer не обладает функциональностью DE.
В случае с таблицей виртуальных методов становятся недоступен ряд оптимизаций: inline функции из trait’а сделать не получится (или получится, но только вместе с inlin’ом print_slice, а я сомневаюсь, что компилятор сейчас на такое способен, даже если в конкретном случае такое возможно). Так что в худшем случае получите дополнительно оверхед на вызов функции (а то и двух, если шаблонная inlin’илась), плюс отсутствие оптимизаций результат inlin’а.
Ну и оказывается, что вместо инвариантной локали всё-таки используется локаль, встроенная в файловую систему. Просто блеск! Теперь количество гиганских таблиц равно количеству файловых систем.
zshaddhistory
(не помню, чем меня не устроила настройкаHIST_IGNORE_SPACE
). А вообще zsh имеет кучу способов удаления из истории:$HISTORY_IGNORE
: переменная, содержащая шаблон, под который должна подпадать игнорируемая командаsetopt HIST_IGNORE_SPACE
: настройка, заставляющая игнорировать командную строку, начинающуюся с пробела или использующую обычный (есть ещё suffix и глобальные)alias
, начинающийся с пробелаsetopt HIST_NO_FUNCTIONS
иsetopt HIST_NO_STORE
— игнорируют командную строку, в которой есть определение функции или вызовfc
zshaddhistory
: если данная функция завершится с кодом1
, то строка не будет сохранена, а если2
, то она не будет сохранена в файле, но будет в памяти.…
вручную и случайно дописал четвёрку.¹ Впрочем, возможно, что kcharselect просто отображает этот ромб из другого шрифта, потому он и есть самый популярный у меня. Проверять с помощью fontforge неохота.
Собственно поэтому в powerline я changelog не веду — достаточно того, что список изменений есть на Github и есть полностью его копия в описании изменений в
master
ветке.alias -g
всё же имеет преимущество, т.к. все удобные<C-…>
у меня уже заняты, да и результат выглядит компактнее. Недостаток — может испортить скрипты, загруженные после создания alias’а.Кстати, zsh при использовании emacs варианта раскладки использует widget для
<C-w>
, который считает, что|
следует непременно удалять вместе с предшествовавшим словом (даже если оное отделено пробелом).__eq__
любым угодным вам способом. Другой вопрос, что в ряде мест (к примеру, при сравнении списков) применяется сравнениеid()
перед сравнением объектов: есть известный пример с NaN, или вот ещё:. В CPython и jython картина точно такая же. IronPython покажет два
False
, но у него всегда были проблемы с совместимостью.&l:fileformat is# 'dos'
при открытии сделать можно, вместе с описанием «а что это такое» и «как исправить» (и «как отключить предупреждение»).Подсвечивать
^M
в тексте всё же можно — «замечаемость» его сильно зависит от используемой цветовой схемы. С моим wombat256mod это особых проблем не доставляло, хотя там и нет кричащего фона. В стандартной схеме^M
похож на комментарий, что ещё заметнее. Проблем нету в основном потому, что^M
либо нет вообще, либо он есть везде (при вставке из старой Opera, к примеру). Так что мой комментарий всё же относится к моему опыту.Я бы рекомендовал подсвечивать
все
управляющие символы, а не\r
. Во всех известных мне языках программирования их можно заменить на что‐то из печатных символов, а проблем при использовании VCS или cat они доставить могут (VCS может счесть, что файл является бинарным, а в терминале они не зря называются управляющими).$
будет подсвечивать часть строки за последним символом. Только без дополнительного условия «использовать только если&l:fileformat is# "dos"
» подсвечиваться конец будет всегда.setlocal fileformat=dos
с преобразованием CRNL полностью в перенос строки. Если нет, то^M
в конце и без подсветки обычно заметить несложно, в регуляных выражениях можно использовать\r
.alias -g
удобнееbindkey
, потому что в истории останется alias и его легко удалить и заменить на что‐нибудь ещё.powerline-status
.git
— это убрал нафиг перенаправление в PAGER, поставивcore.page = cat
. Мне часто нужно набрать в консоли что‐то, зависящее от вывода, перенаправленного в PAGER, но PAGER это делать мешает. Или посмотреть, что было выведено командой раньше, а что сейчас. Если мне нужен less, то написать после командыL
(zsh:alias -g L='| less') не проблема, но если он мне не нужен (что чаще), то писать <code>|cat
или эквивалентный alias неудобно.print_slice
, а я сомневаюсь, что компилятор сейчас на такое способен, даже если в конкретном случае такое возможно). Так что в худшем случае получите дополнительно оверхед на вызов функции (а то и двух, если шаблонная inlin’илась), плюс отсутствие оптимизаций результат inlin’а.