Как программно создать/обновить файл ТЕГОВ с emacs?

Используйте 2 подзапроса и UNION.
1-й получает топ 40, которые упорядочены по ranking
, а 2-й переупорядочивает оставшиеся строки по score:

SELECT * 
FROM tbl_featured_professional
ORDER BY ranking
LIMIT 40
UNION ALL
SELECT * FROM (
  SELECT * FROM (
    SELECT * FROM tbl_featured_professional
    ORDER BY ranking
    LIMIT 40, 18446744073709551615
  )
  ORDER BY score
)

18446744073709551615 = 2^64 - 1, см. [ 116], это .

18
задан Kevin Christopher Henry 21 August 2016 в 00:31
поделиться

5 ответов

Вот то, как я генерирую файл ТЕГОВ для проекта C:

  1. компиляция M-x cd YOUR_DIRECTORY
  2. M-x
  3. находят. - называют "*. [chCH]" - печатают | завершающие теги -

, Который создаст файл ТЕГОВ в текущем каталоге для всех подкаталогов и файлы.

Вот функция emacs, которая делает ту же самую вещь:

(defun compile-tags ()
  "compile etags for the current project"
  (interactive)
  (cd "YOUR_DIRECTORY")
  (compile "find . -name \"*.[chCH]\" -print | etags -"))

ПРИМЕЧАНИЕ: если Вы будете на окнах, то необходимо будет установить cygwin и удостовериться c:\cygwin\bin, находится в пути так, чтобы Вы добрались find в Вашем пути. Также удостоверьтесь, что emacs каталог bin находится в Вашем пути так, чтобы можно было добраться etags также.

9
ответ дан 30 November 2019 в 08:16
поделиться

Почему бы не добавить выполнение ctags к Вашему сценарию сборки? Вам действительно только нужен новый файл тегов, когда Вы компилируете (самое большее). Я склонен просто писать запланированную задачу для создания файла тегов каждую ночь. Кажется, работает вполне прилично.

4
ответ дан 30 November 2019 в 08:16
поделиться

Я использую комбинацию семантических + гну, глобальная для моей ежедневной работы. Базы данных Global GNU обновляются однажды в день, в то время как семантический используют их для основной навигации и повторно анализируют измененные файлы на лету.

можно найти больше об этих пакетах в моя статья о Cedet

2
ответ дан 30 November 2019 в 08:16
поделиться

Это могло бы получить Вас близко (непротестированный):

(defvar my-auto-update-tags-alist
  (list '("/some/path/to/TAGS" "command_to_build_tags")
        '("/another/path/to/TAGS" "another_build_command")))

(defun my-auto-update-tags ()
  "Automatically update TAGS files"
  (tags-table-check-computed-list)
  (let ((filename (buffer-file-name))
        build-cmd)
    (mapc (lambda (tag-file)
            (set-buffer tag-file)
            (when (member filename (tags-table-files))
              (setq build-cmd (cdr (assoc tag-file my-auto-update-tags-alist)))
              (when build-cmd
                (call-process build-cmd nil 0))))
          tags-table-computed-list)))

(add-hook 'after-save-hook 'my-auto-update-tags)

Это будет только работать (я упоминал, что это не тестируется?) на файлах, которые уже находятся в файлах ТЕГОВ. Если бы Вы добавляете новый файл, необходимо было бы повторно создать файл ТЕГОВ в первый раз сами. Часть обработки вызовов должна работать асинхронно, таким образом, это могли бы быть несколько моментов, пока файл ТЕГОВ на самом деле не восстановлен (если это даже работает ;)

1
ответ дан 30 November 2019 в 08:16
поделиться

etags-update может помочь в вашем случае. Я не тестировал его, но согласно readme:

etags-update.el - это глобальный второстепенный режим Emacs, который обновляет ваши ТЕГИ при сохранении файла.

Я нашел его на странице Emacswiki для создания файлов TAGS

9
ответ дан 30 November 2019 в 08:16
поделиться
Другие вопросы по тегам:

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