Как убрать .keywords файл в хинду системе?

xmodmap является устаревшим; так действительно это должно быть, покончили xkb инструменты.

Подкачка, которую Вы хотите, кажется, не включена по умолчанию файлы wth X11; таким образом, необходимо записать это сами.

Страница http://madduck.net/docs/extending-xkb/ помогла мне понять и найти способ сделать это.

Создайте файл ~/.xkb/keymap/mykbd куда Вы помещаете вывод setxkbmap, это будет Ваше основное определение клавиатуры; например:

setxkbmap -print > ~/.xkb/keymap/mykbd

затем, создайте файл символов, чтобы определить Ваш ключевой свопинг, поместить его, например, в ~/.xkb/symbols/myswap

там, поместите следующие строки:

partial modifier_keys
xkb_symbols "swap_l_shift_ctrl" {
    replace key   { [ Shift_L ] };
    replace key  { [ Control_L ] };
};

затем, отредактируйте ~/.xkb/keymap/mykbd файл и изменение xkb_symbols строка для добавления

+myswap(swap_l_shift_ctrl)

наконец, можно загрузить его xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY (Вы не можете использовать "~" для -I параметр). Это, вероятно, плюнет большим количеством предупреждений о неопределенных символах для некоторых редких ключей, но можно проигнорировать их (например, ошибка перенаправления к dave: 2> /dev/null).

Если Вы хотите смочь легко подкачать между нормальным и Вашим инвертированным ctrl/shift один; просто создайте под ~/.xkb/keymap/ другой файл, без дополнительной "myswap" опции и загрузки это с xkbcomp. Можно сделать два маленьких сценария для загрузки их.

10
12.01.2018, 21:44
6 ответов

Для этой задачи появился официальный пакет под названием app-portage / portpeek .

Он может

  • найти устаревшие USE-флаги и
  • устаревшие КЛЮЧЕВЫЕ СЛОВА и
  • очистить файлы, если -f (исправление) добавлено в качестве параметра.
6
27.01.2020, 20:02
[

]Начните с []eix -tT[]. Установите []app-portage/eix[], чтобы получить это.[

].
-1
27.01.2020, 20:02
[

]Я написал небольшой питоновый скрипт, который разобрался с этой проблемой. Логика смотрит на каждую строку в файле []package.accept_keywords[] и действует только на те строки, которые начинаются с []=[] или []<=[]. Эти строки имеют максимальную ограниченную версию, поэтому мы можем проверить, нужны ли они больше. Строки без квалификатора или []>=[] оставляются как есть, так как мы не можем узнать, устарели ли они.[

] [

]Строки, о которых мы беспокоимся, затем разбираются и проверяется установленная версия пакета. Если установленная версия более новая, чем та, что написана по ключевому слову, или вообще не установлена, то ключевое слово считается устаревшим. Если установленная версия пакета та же самая, что и версия по ключевому слову, то установленная версия проверяется на то, что она все еще содержит ключевое слово. Если он стабилизирован, то строка устарела, в противном случае она сохраняется.[

] [
#!/bin/env python

import re
import portage

vartree = portage.db[portage.root]['vartree']

with open('/etc/portage/package.accept_keywords') as f:
    for x in f:
        # eat newline
        x = x.rstrip()
        # we only want lines with a bounded max version
        if re.match('^(=|<=)',x):
            # get the package cpv atom -- strip the =|<= and the trailing keyword(s)
            cpv_masked = re.sub('[<=]','',x.split(' ',1)[0])
            cat, pkg, ver, rev = portage.catpkgsplit(cpv_masked)
            # get cpv for all installed versions of the package
            cpv_installed = vartree.dep_match(cat+'/'+pkg)
            for cpv in cpv_installed:
                cmp = portage.pkgcmp(portage.pkgsplit(cpv), portage.pkgsplit(cpv_masked))
                # if the installed version is not newer than the masked version
                if (cmp <= 0):
                    # check if this version is still keyworded
                    cpv_keywords = vartree.dbapi.aux_get(cpv, ['KEYWORDS'])
                    # keep keyword if the package has no keywords (**)
                    if not cpv_keywords[0]:
                        print(x)
                        break
                    # check if the installed package is still keyworded
                    for cpv_keyword in cpv_keywords[0].split(' '):
                        if cpv_masked_keyword == cpv_keyword:
                            # it is, keep the atom and move on to the next one
                            print(x)
                            break                    
        else:
            # keep atoms that have an unbounded max version
            print(x)
] [

]Это выведет на печать новый файл ключевых слов в стандартном виде. []Примечание[]: не перенаправляйте вывод обратно в []/etc/portage/package.accept_keywords[], иначе вы засорите файл и потеряете все. [

] [

]Это значительно облегчит очистку файла с ключевыми словами, а для других ваших проблем, сортировка файла и его последующее изучение на несколько строк для одного и того же пакета поможет решить большую часть оставшейся части. [

]
3
27.01.2020, 20:02

Добавление к ответу Ikraav:

После использования eix-tT , удалите операторы сравнения и число версии пакета. Ваш Файл может также быть записан как:

dev-python/ipython ~amd64
# and many lines later
package-cat/package ~arch

Это гарантирует, что вы будете всегда получать версии тестирования dev-python/ipython и Изменение package-cat/package

0
27.01.2020, 20:02

Вы ведь знаете, что можете конвертировать файлы package.* в каталоги, так?

Тогда вы можете организовать ваши атомы в несколько файлов, например, в моей системе я получил следующее (ну, не совсем, я сейчас не у своего ноутбука. Но у вас есть идея):

/etc/portage/package.keywords:
  package.keywords
  qt5.keywords
  xfce.keywords

/etc/portage/package.use:
  package.use
  qt5.use
  xfce.use

и т.д.

Я нашел это действительно полезным, чтобы помочь мне обновить файлы.

1
27.01.2020, 20:02

Вот небольшой сценарий, который фильтрует записи из файлов /etc/portage/package.*, которые больше не установлены. Кроме того, он удаляет все строки комментариев непосредственно над удаленной записью. (например, сгенерированный autounmask). Если комментарии разделены пустой строкой, удаляются только нижние комментарии. Скрипт не удаляет повторяющиеся записи.

Обратите внимание, что необходимо установить portage-utils и активировать обработчик postsync /etc/portage/postsync.d/q-reinitialize . заставить этот скрипт работать.

#!/usr/bin/env python3

import argparse
import sys
import os
from subprocess import call
import contextlib

if __name__ != '__main__':
    raise Exception("ust be used as a main module with a parameter as the input file")

parser = argparse.ArgumentParser(description="cleanup /etc/portage/package.* files")
parser.add_argument("infile", help="an input file to clean")
parser.add_argument("--out", dest="outfile", help="the output is written to this file. if not specified, the output is written to stdout.")
parser.add_argument("--inplace", action='store_true', help="overwrite the in file. if specified, --out is ignored.")

args = parser.parse_args()

def checkInstalled(package):
    with open(os.devnull, 'w') as devnull:
        status = call('qlist -IC "' + str(package.split()[0].strip()) + '"', shell=True, stdout=devnull)
        return status == 0

@contextlib.contextmanager
def getOutFile(args):
    if args.inplace:
        fh = open(args.infile, 'w')
    elif args.outfile != None:
        fh = open(args.outfile, 'w')
    else:
        fh = sys.stdout
    try:
        yield fh
    finally:
        if fh is not sys.stdout:
            fh.close()

commentBuffer = []
lines = []

with open(args.infile, 'r') as f:
    lines = f.readlines()

with getOutFile(args) as out:
    for line in lines: 
        if line.lstrip().startswith("#"):
            commentBuffer.append(line)
        else:
            if line.strip() == "" or checkInstalled(line):
                if  commentBuffer:
                    out.write("".join(commentBuffer))
                out.write(line)
            commentBuffer = []
0
27.01.2020, 20:02

Теги

Похожие вопросы