LINUX.ORG.RU

Сообщения yukiome

 

ffmpeg - Почему gif и прочие форматы видео не отображаются в Telegram на телефоне?

Форум — Multimedia

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

Правда видео, полученное с ffmpeg, оно будет хорошо отображаться на desktop-версии, когда на мобильной - требует стороннего плеера (как в случае с mkv) или вовсе не открывает (как в случае с gif).

Надеюсь есть подобные опции вроде -support (поддержка мобильных и прочих).

 , , ,

yukiome
()

Как в imagemagick получить метаданные выделенной области экрана?

Форум — Multimedia

Для чего мне это нужно?

  1. Зачем другие программы, когда есть imagick
  2. Для ffmpeg, чтобы снимать выделенную область

Возникает мысль, что все это можно организовать через import, ведь он и отвечает как раз за выделение

Сейчас пока мысли в псевдокоде

$ изображение="/tmp/png.png"
$ import $изображение

# решение из <https://askubuntu.com/questions/120234/how-can-i-read-image-info-on-the-command-line>
$ identify -format "%wx%h" $изображение

$ ffmpeg -f x11grab область экрана $изображение выходной_файл

Звучит как что-то неправильное, но это единственное, что могло мне прийти в голову.

 , ,

yukiome
()

Как установить phpactor в neovim, или что выбрать вместо него?

Форум — Web-development

Возникла ситуация, что не получается установить phpactor в neovim посредством пакетного менеджера Lazy.

Многочисленные поиски сводятся к тому, что вместо него устанавливается intelephense через npm

npm i intelephense -g

Но это условно-бесплатная альтернатива, т.е. больше функционала доступно лишь по подписке, а оно мне не нужно.

Версии исполняемых файлов

  • Composer 2.7.8
  • PHP 8.3.11
  • Phpactor 2024.06.30.0

Cтруктура init.lua

-- Basic
require('core.plugins')
require('core.mappings')
require('core.configs')

-- Plugins
require('plugins.treesitter')
require('plugins.lspconfig')
require('plugins.cmp')
require('plugins.lint')
require('plugins.mason')
require('plugins.lualine')

Cтруктура lspconfig.lua

-- Setup language servers.
local lspconfig = require('lspconfig')
lspconfig.pylsp.setup {}
lspconfig.clangd.setup {}
lspconfig.phpactor.setup {
	on_attach = on_attach,
    init_options = {
        ["language_server_phpstan.enabled"] = false,
        ["language_server_psalm.enabled"] = false,
    }
}
lspconfig.html.setup {}

-- Global mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist)

-- Use LspAttach autocommand to only map the following keys
-- after the language server attaches to the current buffer
vim.api.nvim_create_autocmd('LspAttach', {
  group = vim.api.nvim_create_augroup('UserLspConfig', {}),
  callback = function(ev)
    -- Enable completion triggered by <c-x><c-o>
    vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'

    -- Buffer local mappings.
    -- See `:help vim.lsp.*` for documentation on any of the below functions
    local opts = { buffer = ev.buf }
    vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
    vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
    vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
    vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
    vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
    vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts)
    vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts)
    vim.keymap.set('n', '<space>wl', function()
      print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
    end, opts)
    vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, opts)
    vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, opts)
    vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts)
    vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
    vim.keymap.set('n', '<space>f', function()
      vim.lsp.buf.format { async = true }
    end, opts)
  end,
})

Конфигурация plugins.lua (конфигурация урезана в целях компактности)

require("lazy").setup({
{ 'nvim-treesitter/nvim-treesitter' },
{ 'neovim/nvim-lspconfig', },
-- mason
{ "williamboman/mason.nvim", },
{ "williamboman/mason-lspconfig.nvim" }
-- completion
{ 'hrsh7th/cmp-nvim-lsp' },
{ 'hrsh7th/cmp-buffer' },
{ 'hrsh7th/cmp-path' },
{ 'hrsh7th/cmp-cmdline' },
{ 'hrsh7th/nvim-cmp' },
})

Как можно заметить, у меня установлен mason.nvim, через него установлен phpactor, который лежит в ~/.local/share/nvim/mason/packages/phpactor/phpactor.

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

Фрагмент файла cmp.lua

local cmp = require'cmp'
cmp.setup({
    snippet = {
      expand = function(args)
        require('luasnip').lsp_expand(args.body) -- For `luasnip` users.
      end,
    },
    window = {
      -- completion = cmp.config.window.bordered(),
      -- documentation = cmp.config.window.bordered(),
    },
    mapping = cmp.mapping.preset.insert({
    ["<C-k>"] = cmp.mapping.select_prev_item(), -- previous suggestion
    ["<C-j>"] = cmp.mapping.select_next_item(), -- next suggestion
    ["<C-b>"] = cmp.mapping.scroll_docs(-4),
    ["<C-f>"] = cmp.mapping.scroll_docs(4),
    ["<C-Space>"] = cmp.mapping.complete(), -- show completion suggestions
    ["<C-e>"] = cmp.mapping.abort(), -- close completion window
    ["<CR>"] = cmp.mapping.confirm({ select = false }),
  }),
    sources = cmp.config.sources({
      { name = 'nvim_lsp' },
      { name = 'luasnip' }, -- For luasnip users.
      { name = 'buffer' },
      { name = 'path' }, -- For vsnip users. 
   }),
})


cmp.setup.cmdline({ '/', '?' }, {
    mapping = cmp.mapping.preset.cmdline(),
    sources = {
      { name = 'buffer' }
    }
  })

  cmp.setup.cmdline(':', {
    mapping = cmp.mapping.preset.cmdline(),
    sources = cmp.config.sources({ { name = 'path' } }, 
    { { name = 'cmdline' } })
  })

  -- Set up lspconfig.
  local capabilities = require('cmp_nvim_lsp').default_capabilities()
    
  local phpactor_capabilities = vim.lsp.protocol.make_client_capabilities()
        phpactor_capabilities.textDocument.foldingRange = {
        dynamicRegistration = false,
        lineFoldingOnly = true
    }

    phpactor_capabilities['textDocument']['codeAction'] = {}
  
    require('lspconfig')['phpactor'].setup {
        capabilities = phpactor_capabilities,
        on_attach = on_attach
  }

Структура configs.lua

vim.wo.number = true
vim.wo.relativenumber = true

vim.opt.shell = "/usr/bin/zsh"
vim.opt.number = true
vim.opt.swapfile = false
vim.opt.mouse = "a"
vim.opt.mousefocus = true
vim.opt.clipboard = "unnamedplus"

vim.opt.termguicolors = true
vim.cmd('colorscheme retrobox')

-- Indent Settings
vim.opt.expandtab = true
vim.opt.shiftwidth = 4
vim.opt.tabstop = 4
vim.opt.softtabstop = 4
vim.opt.smartindent = true

Послесловие. Возможно трудности с конфигурацией phpactor, которую так и не понял, либо composer.

 ,

yukiome
()

RSS подписка на новые темы