У меня была точно такая же проблема с WSL.
После комментария пользователя @Gilles я подтвердил, что попытка с emacs -q
не выявила проблемы. После этого я покопался в custom-set-variables
sexp auto -, сохраненном Emacs, и нашел оскорбительный unspecified
в ansi-term-color-vector
.
Я просто удалил весь ansi-term-color-vector
sexp и перезапустил Emacs с полными настройками. Теперь ранее проблемные приложения нормально работают в терминале emacs.
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(ansi-color-faces-vector
[default bold shadow italic underline bold bold-italic bold])
'(ansi-term-color-vector
[unspecified "#272822" "#f92672" "#a6e22e" "#f4bf75" "#66d9ef" "#ae81ff" "#66d9ef" "#f8f8f2"] t))
В Linux уже реализована такая функция для некоторых файловых систем :атрибут режима добавления . Этот атрибут может быть изменен только пользователем root (или с соответствующими полномочиями ). Изchattr
:
ATTRIBUTES
A file with the 'a' attribute set can only be open in append mode for writing. Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE capability can set or clear this attribute.
На самом деле, даже если это не описано явно, это также влияет на каталоги :в них можно добавлять (или связывать )файлы, но нельзя их больше удалять или переименовывать.
Атрибуты поддерживаются как минимум в ext4 , xfs и btrfs (, но, например, не поддерживаются в файловых системах tmpfs ).
Полный пример. Нормальное поведение:
$ mkdir mytest
$ echo 1 > mytest/foo
$ mv mytest/foo mytest/bar
$ echo 2 > mytest/foo
$ rm mytest/foo
Теперь с установленным атрибутом:
$ sudo chattr +a mytest
$ echo 3 > mytest/foo
$ rm mytest/foo
rm: cannot remove 'mytest/foo': Operation not permitted
$ rm mytest/bar
rm: cannot remove 'mytest/bar': Operation not permitted
$ mv mytest/foo mytest/baz
mv: cannot move 'mytest/foo' to 'mytest/baz': Operation not permitted
Это не влияет на сами файлы, так как они сами не получили атрибут режима добавления :
$ echo 4 >> mytest/foo
$ echo 5 >> mytest/bar
$ cat mytest/foo
3
4
$ cat mytest/bar
1
5
Они все еще могут быть усечены:
$ : > mytest/foo
$ cat mytest/foo
$
Или связанный/отключенный в другом месте:
$ mkdir mytest2
$ ln mytest/foo mytest2/foo
$ rm mytest2/foo
$
Единственный способ снять ограничение, которое даже применяется к root , — это для root удалить атрибут только добавление с chattr -a mytest
.