Как быстро ввести текущую дату и время с быстрым словом?

Есть аддон в fcitx где вы можете связать слово с некоторой другой строкой, такой как "smile (・∀・)", введенной в ~/.config/fcitx/data/QuickPhrase.mb, Когда вы печатаете smile это выводит (・∀・)`

Я хочу то же самое, но функцию, а не слово; Я хочу вывести текущую метку времени.

Например: когда я ввожу "время", выводится текущее время "2016-08-03 11:15", через минуту, когда я вводю "время", выводится "2016-08-03 11:16"

2 ответа

Решение

В этом посте:

  1. Вступление
  2. QuickPhrase_Time.py скрипт
  3. xclip сокращенный

1. Введение

Плагин, к которому относится OP, это QuickPhrase и может быть установлен через sudo apt-get install fcitx-modules fcitx-module-quickphrase-editor, Оно использует ~/.config/fcitx/data/QuickPhrase.mb хранить фразы.

Основной целью здесь является простой способ вставить строку, содержащую текущее время, в текстовое поле, которое пользователь в данный момент редактирует. Ниже приведены два решения.


2. Сценарий QuickPhrase_Time.py

Этот скрипт непрерывно редактирует строку в конфигурационном файле, которая имеет time_now фразу, и добавляет текущее время к строке. Этот скрипт предназначен для автоматического запуска при входе в GUI.

Использование простое:

 python /path/to/QuickPhrase_Timer.py

Источник скрипта

Также доступны как Github Gist, обновленные версии, скорее всего, пойдут туда.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import subprocess
import time
import os


def run_cmd(cmdlist):
    """ Reusable function for running external commands """
    new_env = dict( os.environ ) 
    new_env['LC_ALL'] = 'C' 
    try:
        stdout = subprocess.check_output(cmdlist,env=new_env)
    except subprocess.CalledProcessError:
        pass
    else:
        if stdout:
            return stdout

if __name__ == '__main__':
    user_home = os.path.expanduser('~')
    config_file = '.config/fcitx/data/QuickPhrase.mb'
    config_full_path = os.path.join(user_home,config_file)
    found = None

    while True:
         lines = []
         time.sleep(1)
         with open(config_full_path) as f:
              for line in f:
                  lines.append(line.strip())
                  if line.startswith('time_now'):
                      found = True
         # print(lines)
         if found:
             with open(config_full_path,'w') as f:
                  for line in lines:
                      if line.startswith('time_now'):
                         time_now = run_cmd(['date', 
                                             '+%Y-%m-%d %I:%M'
                                             ]).decode().strip()
                         line = 'time_now ' + time_now + '\n'
                      else:
                         line = line + '\n'
                      f.write(line)

3. ярлык xclip

В случае, если приведенный выше скрипт Python не будет работать для вас, вот обходной путь: свяжите команду ниже с сочетанием клавиш

xclip -sel clip <<< $( date +%Y-%m-%d\ %I:%M )

По сути, это делает копии выходных данных date в буфер обмена, который затем можно отпустить с помощью сочетания клавиш Ctrl + V (что обычно для большинства приложений в виде ярлыка вставки).

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

Обратите внимание, что xclip не устанавливается по умолчанию. Получить через sudo apt-get install xclip

Вы можете использовать lua для расширения быстрой фразы для fcitx/fcitx5.

Соответствующий lua API основан на старом Google Pinyin lua в Windows. Вы можете обратиться к этому документу, чтобы узнать, какие дополнительные API доступны: https://fcitx.github.io/fcitx5-lua/modules/ime.html (только модуль ime работает для fcitx4, модуль fcitx есть только в fcitx5.)

fcitx4

В fcitx4 lua — это встроенный аддон. Ваш дистрибутив может разделить его на отдельный пакет. В Ubuntu это называется fcitx-module-lua.

Вы можете создать файл .lua в папке ~/.config/fcitx/lua.

fcitx5

В основном API тот же, но путь немного отличается. А теперь это отдельный пакет, fcitx5-lua. В Ubuntu это называется fcitx5-module-lua.

Вместо этого вы можете поместить файл .lua в папку ~/.local/share/fcitx5/lua/imeapi/extensions.

Вот скрипт, который работает как для fcitx, так и для fcitx5, взятый с https://github.com/lilydjwg/fcitx-lua-scripts/blob/master/date.lua .

      function LookupDate(input)
  local fmt
  if input == '' then
    fmt = "%Y年%m月%d日"
  elseif input == 't' then
    fmt = "%Y-%m-%d %H:%M:%S"
  elseif input == 'd' then
    fmt = "%Y-%m-%d"
  end
  return os.date(fmt)
end

ime.register_command("dt", "LookupDate", "日期时间输入")

Fcitx5 также поставляется со встроенным lua-скриптом https://github.com/fcitx/fcitx5-chinese-addons/blob/master/im/pinyin/pinyin.lua , но он проверяет имя метода ввода — пиньинь или шуанпин.

Вы также можете взять его в качестве справочного материала, поскольку он содержит больше, чем просто дату/время, и поддерживает более причудливый формат.

Другие вопросы по тегам